ltmain.sh revision 0eb1301b
1c27c18e8Smrg
20eb1301bSmrg# libtool (GNU libtool) 2.4.2
3c27c18e8Smrg# Written by Gordon Matzigkeit <gord@gnu.ai.mit.edu>, 1996
4c27c18e8Smrg
50eb1301bSmrg# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005, 2006,
60eb1301bSmrg# 2007, 2008, 2009, 2010, 2011 Free Software Foundation, Inc.
7c27c18e8Smrg# This is free software; see the source for copying conditions.  There is NO
8c27c18e8Smrg# warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
9c27c18e8Smrg
10c27c18e8Smrg# GNU Libtool is free software; you can redistribute it and/or modify
11c43cc173Smrg# it under the terms of the GNU General Public License as published by
12c43cc173Smrg# the Free Software Foundation; either version 2 of the License, or
13c43cc173Smrg# (at your option) any later version.
14c43cc173Smrg#
15c27c18e8Smrg# As a special exception to the GNU General Public License,
16c27c18e8Smrg# if you distribute this file as part of a program or library that
17c27c18e8Smrg# is built using GNU Libtool, you may include this file under the
18c27c18e8Smrg# same distribution terms that you use for the rest of that program.
19c27c18e8Smrg#
20c27c18e8Smrg# GNU Libtool is distributed in the hope that it will be useful, but
21c43cc173Smrg# WITHOUT ANY WARRANTY; without even the implied warranty of
22c43cc173Smrg# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
23c43cc173Smrg# General Public License for more details.
24c43cc173Smrg#
25c43cc173Smrg# You should have received a copy of the GNU General Public License
260eb1301bSmrg# along with GNU Libtool; see the file COPYING.  If not, a copy
270eb1301bSmrg# can be downloaded from http://www.gnu.org/licenses/gpl.html,
280eb1301bSmrg# or obtained by writing to the Free Software Foundation, Inc.,
290eb1301bSmrg# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
3044584a44Smrg
310eb1301bSmrg# Usage: $progname [OPTION]... [MODE-ARG]...
320eb1301bSmrg#
330eb1301bSmrg# Provide generalized library-building support services.
3444584a44Smrg#
350eb1301bSmrg#       --config             show all configuration variables
360eb1301bSmrg#       --debug              enable verbose shell tracing
370eb1301bSmrg#   -n, --dry-run            display commands without modifying any files
380eb1301bSmrg#       --features           display basic configuration information and exit
390eb1301bSmrg#       --mode=MODE          use operation mode MODE
400eb1301bSmrg#       --preserve-dup-deps  don't remove duplicate dependency libraries
410eb1301bSmrg#       --quiet, --silent    don't print informational messages
420eb1301bSmrg#       --no-quiet, --no-silent
430eb1301bSmrg#                            print informational messages (default)
440eb1301bSmrg#       --no-warn            don't display warning messages
450eb1301bSmrg#       --tag=TAG            use configuration variables from tag TAG
460eb1301bSmrg#   -v, --verbose            print more informational messages than default
470eb1301bSmrg#       --no-verbose         don't print the extra informational messages
480eb1301bSmrg#       --version            print version information
490eb1301bSmrg#   -h, --help, --help-all   print short, long, or detailed help message
5044584a44Smrg#
510eb1301bSmrg# MODE must be one of the following:
520eb1301bSmrg#
530eb1301bSmrg#         clean              remove files from the build directory
540eb1301bSmrg#         compile            compile a source file into a libtool object
550eb1301bSmrg#         execute            automatically set library path, then run a program
560eb1301bSmrg#         finish             complete the installation of libtool libraries
570eb1301bSmrg#         install            install libraries or executables
580eb1301bSmrg#         link               create a library or an executable
590eb1301bSmrg#         uninstall          remove libraries from an installed directory
600eb1301bSmrg#
610eb1301bSmrg# MODE-ARGS vary depending on the MODE.  When passed as first option,
620eb1301bSmrg# `--mode=MODE' may be abbreviated as `MODE' or a unique abbreviation of that.
630eb1301bSmrg# Try `$progname --help --mode=MODE' for a more detailed description of MODE.
640eb1301bSmrg#
650eb1301bSmrg# When reporting a bug, please describe a test case to reproduce it and
660eb1301bSmrg# include the following information:
670eb1301bSmrg#
680eb1301bSmrg#         host-triplet:	$host
690eb1301bSmrg#         shell:		$SHELL
700eb1301bSmrg#         compiler:		$LTCC
710eb1301bSmrg#         compiler flags:		$LTCFLAGS
720eb1301bSmrg#         linker:		$LD (gnu? $with_gnu_ld)
730eb1301bSmrg#         $progname:	(GNU libtool) 2.4.2 Debian-2.4.2-1.7ubuntu1
740eb1301bSmrg#         automake:	$automake_version
750eb1301bSmrg#         autoconf:	$autoconf_version
760eb1301bSmrg#
770eb1301bSmrg# Report bugs to <bug-libtool@gnu.org>.
780eb1301bSmrg# GNU libtool home page: <http://www.gnu.org/software/libtool/>.
790eb1301bSmrg# General help using GNU software: <http://www.gnu.org/gethelp/>.
8044584a44Smrg
810eb1301bSmrgPROGRAM=libtool
820eb1301bSmrgPACKAGE=libtool
830eb1301bSmrgVERSION="2.4.2 Debian-2.4.2-1.7ubuntu1"
840eb1301bSmrgTIMESTAMP=""
850eb1301bSmrgpackage_revision=1.3337
8644584a44Smrg
870eb1301bSmrg# Be Bourne compatible
880eb1301bSmrgif test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then
8921e67964Smrg  emulate sh
9021e67964Smrg  NULLCMD=:
910eb1301bSmrg  # Zsh 3.x and 4.x performs word splitting on ${1+"$@"}, which
9221e67964Smrg  # is contrary to our usage.  Disable this feature.
9321e67964Smrg  alias -g '${1+"$@"}'='"$@"'
94c43cc173Smrg  setopt NO_GLOB_SUBST
9521e67964Smrgelse
960eb1301bSmrg  case `(set -o) 2>/dev/null` in *posix*) set -o posix;; esac
9744584a44Smrgfi
980eb1301bSmrgBIN_SH=xpg4; export BIN_SH # for Tru64
990eb1301bSmrgDUALCASE=1; export DUALCASE # for MKS sh
100c27c18e8Smrg
1010eb1301bSmrg# A function that is used when there is no print builtin or printf.
1020eb1301bSmrgfunc_fallback_echo ()
10344584a44Smrg{
1040eb1301bSmrg  eval 'cat <<_LTECHO_EOF
1050eb1301bSmrg$1
1060eb1301bSmrg_LTECHO_EOF'
10744584a44Smrg}
10844584a44Smrg
1090eb1301bSmrg# NLS nuisances: We save the old values to restore during execute mode.
1100eb1301bSmrglt_user_locale=
1110eb1301bSmrglt_safe_locale=
1120eb1301bSmrgfor lt_var in LANG LANGUAGE LC_ALL LC_CTYPE LC_COLLATE LC_MESSAGES
1130eb1301bSmrgdo
1140eb1301bSmrg  eval "if test \"\${$lt_var+set}\" = set; then
1150eb1301bSmrg          save_$lt_var=\$$lt_var
1160eb1301bSmrg          $lt_var=C
1170eb1301bSmrg	  export $lt_var
1180eb1301bSmrg	  lt_user_locale=\"$lt_var=\\\$save_\$lt_var; \$lt_user_locale\"
1190eb1301bSmrg	  lt_safe_locale=\"$lt_var=C; \$lt_safe_locale\"
1200eb1301bSmrg	fi"
1210eb1301bSmrgdone
1220eb1301bSmrgLC_ALL=C
1230eb1301bSmrgLANGUAGE=C
1240eb1301bSmrgexport LANGUAGE LC_ALL
12544584a44Smrg
1260eb1301bSmrg$lt_unset CDPATH
12744584a44Smrg
12844584a44Smrg
1290eb1301bSmrg# Work around backward compatibility issue on IRIX 6.5. On IRIX 6.4+, sh
1300eb1301bSmrg# is ksh but when the shell is invoked as "sh" and the current value of
1310eb1301bSmrg# the _XPG environment variable is not equal to 1 (one), the special
1320eb1301bSmrg# positional parameter $0, within a function call, is the name of the
1330eb1301bSmrg# function.
1340eb1301bSmrgprogpath="$0"
13544584a44Smrg
13644584a44Smrg
137c27c18e8Smrg
138c27c18e8Smrg: ${CP="cp -f"}
1390eb1301bSmrgtest "${ECHO+set}" = set || ECHO=${as_echo-'printf %s\n'}
140c27c18e8Smrg: ${MAKE="make"}
141c27c18e8Smrg: ${MKDIR="mkdir"}
142c27c18e8Smrg: ${MV="mv -f"}
143c27c18e8Smrg: ${RM="rm -f"}
144c27c18e8Smrg: ${SHELL="${CONFIG_SHELL-/bin/sh}"}
1450eb1301bSmrg: ${Xsed="$SED -e 1s/^X//"}
146c43cc173Smrg
1470eb1301bSmrg# Global variables:
1480eb1301bSmrgEXIT_SUCCESS=0
1490eb1301bSmrgEXIT_FAILURE=1
1500eb1301bSmrgEXIT_MISMATCH=63  # $? = 63 is used to indicate version mismatch to missing.
1510eb1301bSmrgEXIT_SKIP=77	  # $? = 77 is used to indicate a skipped test to automake.
152c27c18e8Smrg
1530eb1301bSmrgexit_status=$EXIT_SUCCESS
154b789ec8aSmrg
1550eb1301bSmrg# Make sure IFS has a sensible default
1560eb1301bSmrglt_nl='
1570eb1301bSmrg'
1580eb1301bSmrgIFS=" 	$lt_nl"
159b789ec8aSmrg
1600eb1301bSmrgdirname="s,/[^/]*$,,"
1610eb1301bSmrgbasename="s,^.*/,,"
162b789ec8aSmrg
1630eb1301bSmrg# func_dirname file append nondir_replacement
1640eb1301bSmrg# Compute the dirname of FILE.  If nonempty, add APPEND to the result,
1650eb1301bSmrg# otherwise set result to NONDIR_REPLACEMENT.
1660eb1301bSmrgfunc_dirname ()
1670eb1301bSmrg{
1680eb1301bSmrg    func_dirname_result=`$ECHO "${1}" | $SED "$dirname"`
1690eb1301bSmrg    if test "X$func_dirname_result" = "X${1}"; then
1700eb1301bSmrg      func_dirname_result="${3}"
1710eb1301bSmrg    else
1720eb1301bSmrg      func_dirname_result="$func_dirname_result${2}"
1730eb1301bSmrg    fi
1740eb1301bSmrg} # func_dirname may be replaced by extended shell implementation
175b789ec8aSmrg
176b789ec8aSmrg
1770eb1301bSmrg# func_basename file
1780eb1301bSmrgfunc_basename ()
1790eb1301bSmrg{
1800eb1301bSmrg    func_basename_result=`$ECHO "${1}" | $SED "$basename"`
1810eb1301bSmrg} # func_basename may be replaced by extended shell implementation
182b789ec8aSmrg
183c43cc173Smrg
1840eb1301bSmrg# func_dirname_and_basename file append nondir_replacement
1850eb1301bSmrg# perform func_basename and func_dirname in a single function
1860eb1301bSmrg# call:
1870eb1301bSmrg#   dirname:  Compute the dirname of FILE.  If nonempty,
1880eb1301bSmrg#             add APPEND to the result, otherwise set result
1890eb1301bSmrg#             to NONDIR_REPLACEMENT.
1900eb1301bSmrg#             value returned in "$func_dirname_result"
1910eb1301bSmrg#   basename: Compute filename of FILE.
1920eb1301bSmrg#             value retuned in "$func_basename_result"
1930eb1301bSmrg# Implementation must be kept synchronized with func_dirname
1940eb1301bSmrg# and func_basename. For efficiency, we do not delegate to
1950eb1301bSmrg# those functions but instead duplicate the functionality here.
1960eb1301bSmrgfunc_dirname_and_basename ()
1970eb1301bSmrg{
1980eb1301bSmrg    # Extract subdirectory from the argument.
1990eb1301bSmrg    func_dirname_result=`$ECHO "${1}" | $SED -e "$dirname"`
2000eb1301bSmrg    if test "X$func_dirname_result" = "X${1}"; then
2010eb1301bSmrg      func_dirname_result="${3}"
2020eb1301bSmrg    else
2030eb1301bSmrg      func_dirname_result="$func_dirname_result${2}"
2040eb1301bSmrg    fi
2050eb1301bSmrg    func_basename_result=`$ECHO "${1}" | $SED -e "$basename"`
2060eb1301bSmrg} # func_dirname_and_basename may be replaced by extended shell implementation
207c27c18e8Smrg
20837eb1ca1Smrg
2090eb1301bSmrg# func_stripname prefix suffix name
2100eb1301bSmrg# strip PREFIX and SUFFIX off of NAME.
2110eb1301bSmrg# PREFIX and SUFFIX must not contain globbing or regex special
2120eb1301bSmrg# characters, hashes, percent signs, but SUFFIX may contain a leading
2130eb1301bSmrg# dot (in which case that matches only a dot).
2140eb1301bSmrg# func_strip_suffix prefix name
2150eb1301bSmrgfunc_stripname ()
2160eb1301bSmrg{
2170eb1301bSmrg    case ${2} in
2180eb1301bSmrg      .*) func_stripname_result=`$ECHO "${3}" | $SED "s%^${1}%%; s%\\\\${2}\$%%"`;;
2190eb1301bSmrg      *)  func_stripname_result=`$ECHO "${3}" | $SED "s%^${1}%%; s%${2}\$%%"`;;
2200eb1301bSmrg    esac
2210eb1301bSmrg} # func_stripname may be replaced by extended shell implementation
22237eb1ca1Smrg
22337eb1ca1Smrg
2240eb1301bSmrg# These SED scripts presuppose an absolute path with a trailing slash.
2250eb1301bSmrgpathcar='s,^/\([^/]*\).*$,\1,'
2260eb1301bSmrgpathcdr='s,^/[^/]*,,'
2270eb1301bSmrgremovedotparts=':dotsl
2280eb1301bSmrg		s@/\./@/@g
2290eb1301bSmrg		t dotsl
2300eb1301bSmrg		s,/\.$,/,'
2310eb1301bSmrgcollapseslashes='s@/\{1,\}@/@g'
2320eb1301bSmrgfinalslash='s,/*$,/,'
23337eb1ca1Smrg
2340eb1301bSmrg# func_normal_abspath PATH
2350eb1301bSmrg# Remove doubled-up and trailing slashes, "." path components,
2360eb1301bSmrg# and cancel out any ".." path components in PATH after making
2370eb1301bSmrg# it an absolute path.
2380eb1301bSmrg#             value returned in "$func_normal_abspath_result"
2390eb1301bSmrgfunc_normal_abspath ()
2400eb1301bSmrg{
2410eb1301bSmrg  # Start from root dir and reassemble the path.
2420eb1301bSmrg  func_normal_abspath_result=
2430eb1301bSmrg  func_normal_abspath_tpath=$1
2440eb1301bSmrg  func_normal_abspath_altnamespace=
2450eb1301bSmrg  case $func_normal_abspath_tpath in
2460eb1301bSmrg    "")
2470eb1301bSmrg      # Empty path, that just means $cwd.
2480eb1301bSmrg      func_stripname '' '/' "`pwd`"
2490eb1301bSmrg      func_normal_abspath_result=$func_stripname_result
2500eb1301bSmrg      return
2510eb1301bSmrg    ;;
2520eb1301bSmrg    # The next three entries are used to spot a run of precisely
2530eb1301bSmrg    # two leading slashes without using negated character classes;
2540eb1301bSmrg    # we take advantage of case's first-match behaviour.
2550eb1301bSmrg    ///*)
2560eb1301bSmrg      # Unusual form of absolute path, do nothing.
2570eb1301bSmrg    ;;
2580eb1301bSmrg    //*)
2590eb1301bSmrg      # Not necessarily an ordinary path; POSIX reserves leading '//'
2600eb1301bSmrg      # and for example Cygwin uses it to access remote file shares
2610eb1301bSmrg      # over CIFS/SMB, so we conserve a leading double slash if found.
2620eb1301bSmrg      func_normal_abspath_altnamespace=/
2630eb1301bSmrg    ;;
2640eb1301bSmrg    /*)
2650eb1301bSmrg      # Absolute path, do nothing.
2660eb1301bSmrg    ;;
2670eb1301bSmrg    *)
2680eb1301bSmrg      # Relative path, prepend $cwd.
2690eb1301bSmrg      func_normal_abspath_tpath=`pwd`/$func_normal_abspath_tpath
2700eb1301bSmrg    ;;
2710eb1301bSmrg  esac
2720eb1301bSmrg  # Cancel out all the simple stuff to save iterations.  We also want
2730eb1301bSmrg  # the path to end with a slash for ease of parsing, so make sure
2740eb1301bSmrg  # there is one (and only one) here.
2750eb1301bSmrg  func_normal_abspath_tpath=`$ECHO "$func_normal_abspath_tpath" | $SED \
2760eb1301bSmrg        -e "$removedotparts" -e "$collapseslashes" -e "$finalslash"`
2770eb1301bSmrg  while :; do
2780eb1301bSmrg    # Processed it all yet?
2790eb1301bSmrg    if test "$func_normal_abspath_tpath" = / ; then
2800eb1301bSmrg      # If we ascended to the root using ".." the result may be empty now.
2810eb1301bSmrg      if test -z "$func_normal_abspath_result" ; then
2820eb1301bSmrg        func_normal_abspath_result=/
2830eb1301bSmrg      fi
2840eb1301bSmrg      break
2850eb1301bSmrg    fi
2860eb1301bSmrg    func_normal_abspath_tcomponent=`$ECHO "$func_normal_abspath_tpath" | $SED \
2870eb1301bSmrg        -e "$pathcar"`
2880eb1301bSmrg    func_normal_abspath_tpath=`$ECHO "$func_normal_abspath_tpath" | $SED \
2890eb1301bSmrg        -e "$pathcdr"`
2900eb1301bSmrg    # Figure out what to do with it
2910eb1301bSmrg    case $func_normal_abspath_tcomponent in
2920eb1301bSmrg      "")
2930eb1301bSmrg        # Trailing empty path component, ignore it.
2940eb1301bSmrg      ;;
2950eb1301bSmrg      ..)
2960eb1301bSmrg        # Parent dir; strip last assembled component from result.
2970eb1301bSmrg        func_dirname "$func_normal_abspath_result"
2980eb1301bSmrg        func_normal_abspath_result=$func_dirname_result
2990eb1301bSmrg      ;;
3000eb1301bSmrg      *)
3010eb1301bSmrg        # Actual path component, append it.
3020eb1301bSmrg        func_normal_abspath_result=$func_normal_abspath_result/$func_normal_abspath_tcomponent
3030eb1301bSmrg      ;;
3040eb1301bSmrg    esac
3050eb1301bSmrg  done
3060eb1301bSmrg  # Restore leading double-slash if one was found on entry.
3070eb1301bSmrg  func_normal_abspath_result=$func_normal_abspath_altnamespace$func_normal_abspath_result
3080eb1301bSmrg}
3090eb1301bSmrg
3100eb1301bSmrg# func_relative_path SRCDIR DSTDIR
3110eb1301bSmrg# generates a relative path from SRCDIR to DSTDIR, with a trailing
3120eb1301bSmrg# slash if non-empty, suitable for immediately appending a filename
3130eb1301bSmrg# without needing to append a separator.
3140eb1301bSmrg#             value returned in "$func_relative_path_result"
3150eb1301bSmrgfunc_relative_path ()
3160eb1301bSmrg{
3170eb1301bSmrg  func_relative_path_result=
3180eb1301bSmrg  func_normal_abspath "$1"
3190eb1301bSmrg  func_relative_path_tlibdir=$func_normal_abspath_result
3200eb1301bSmrg  func_normal_abspath "$2"
3210eb1301bSmrg  func_relative_path_tbindir=$func_normal_abspath_result
3220eb1301bSmrg
3230eb1301bSmrg  # Ascend the tree starting from libdir
3240eb1301bSmrg  while :; do
3250eb1301bSmrg    # check if we have found a prefix of bindir
3260eb1301bSmrg    case $func_relative_path_tbindir in
3270eb1301bSmrg      $func_relative_path_tlibdir)
3280eb1301bSmrg        # found an exact match
3290eb1301bSmrg        func_relative_path_tcancelled=
3300eb1301bSmrg        break
3310eb1301bSmrg        ;;
3320eb1301bSmrg      $func_relative_path_tlibdir*)
3330eb1301bSmrg        # found a matching prefix
3340eb1301bSmrg        func_stripname "$func_relative_path_tlibdir" '' "$func_relative_path_tbindir"
3350eb1301bSmrg        func_relative_path_tcancelled=$func_stripname_result
3360eb1301bSmrg        if test -z "$func_relative_path_result"; then
3370eb1301bSmrg          func_relative_path_result=.
3380eb1301bSmrg        fi
3390eb1301bSmrg        break
3400eb1301bSmrg        ;;
3410eb1301bSmrg      *)
3420eb1301bSmrg        func_dirname $func_relative_path_tlibdir
3430eb1301bSmrg        func_relative_path_tlibdir=${func_dirname_result}
3440eb1301bSmrg        if test "x$func_relative_path_tlibdir" = x ; then
3450eb1301bSmrg          # Have to descend all the way to the root!
3460eb1301bSmrg          func_relative_path_result=../$func_relative_path_result
3470eb1301bSmrg          func_relative_path_tcancelled=$func_relative_path_tbindir
3480eb1301bSmrg          break
3490eb1301bSmrg        fi
3500eb1301bSmrg        func_relative_path_result=../$func_relative_path_result
3510eb1301bSmrg        ;;
3520eb1301bSmrg    esac
3530eb1301bSmrg  done
3540eb1301bSmrg
3550eb1301bSmrg  # Now calculate path; take care to avoid doubling-up slashes.
3560eb1301bSmrg  func_stripname '' '/' "$func_relative_path_result"
3570eb1301bSmrg  func_relative_path_result=$func_stripname_result
3580eb1301bSmrg  func_stripname '/' '/' "$func_relative_path_tcancelled"
3590eb1301bSmrg  if test "x$func_stripname_result" != x ; then
3600eb1301bSmrg    func_relative_path_result=${func_relative_path_result}/${func_stripname_result}
3610eb1301bSmrg  fi
3620eb1301bSmrg
3630eb1301bSmrg  # Normalisation. If bindir is libdir, return empty string,
3640eb1301bSmrg  # else relative path ending with a slash; either way, target
3650eb1301bSmrg  # file name can be directly appended.
3660eb1301bSmrg  if test ! -z "$func_relative_path_result"; then
3670eb1301bSmrg    func_stripname './' '' "$func_relative_path_result/"
3680eb1301bSmrg    func_relative_path_result=$func_stripname_result
3690eb1301bSmrg  fi
3700eb1301bSmrg}
371c27c18e8Smrg
3720eb1301bSmrg# The name of this program:
3730eb1301bSmrgfunc_dirname_and_basename "$progpath"
3740eb1301bSmrgprogname=$func_basename_result
375c27c18e8Smrg
3760eb1301bSmrg# Make sure we have an absolute path for reexecution:
377c27c18e8Smrgcase $progpath in
378c27c18e8Smrg  [\\/]*|[A-Za-z]:\\*) ;;
379c27c18e8Smrg  *[\\/]*)
3800eb1301bSmrg     progdir=$func_dirname_result
381c27c18e8Smrg     progdir=`cd "$progdir" && pwd`
3820eb1301bSmrg     progpath="$progdir/$progname"
383c27c18e8Smrg     ;;
384c27c18e8Smrg  *)
3850eb1301bSmrg     save_IFS="$IFS"
386f1ee322dSmrg     IFS=${PATH_SEPARATOR-:}
387c27c18e8Smrg     for progdir in $PATH; do
3880eb1301bSmrg       IFS="$save_IFS"
389c27c18e8Smrg       test -x "$progdir/$progname" && break
390c27c18e8Smrg     done
3910eb1301bSmrg     IFS="$save_IFS"
392c27c18e8Smrg     test -n "$progdir" || progdir=`pwd`
3930eb1301bSmrg     progpath="$progdir/$progname"
394c27c18e8Smrg     ;;
395c27c18e8Smrgesac
396c27c18e8Smrg
3970eb1301bSmrg# Sed substitution that helps us do robust quoting.  It backslashifies
3980eb1301bSmrg# metacharacters that are still active within double-quoted strings.
3990eb1301bSmrgXsed="${SED}"' -e 1s/^X//'
4000eb1301bSmrgsed_quote_subst='s/\([`"$\\]\)/\\\1/g'
4010eb1301bSmrg
4020eb1301bSmrg# Same as above, but do not quote variable references.
4030eb1301bSmrgdouble_quote_subst='s/\(["`\\]\)/\\\1/g'
404c27c18e8Smrg
4050eb1301bSmrg# Sed substitution that turns a string into a regex matching for the
4060eb1301bSmrg# string literally.
4070eb1301bSmrgsed_make_literal_regex='s,[].[^$\\*\/],\\&,g'
408b789ec8aSmrg
4090eb1301bSmrg# Sed substitution that converts a w32 file name or path
4100eb1301bSmrg# which contains forward slashes, into one that contains
4110eb1301bSmrg# (escaped) backslashes.  A very naive implementation.
4120eb1301bSmrglt_sed_naive_backslashify='s|\\\\*|\\|g;s|/|\\|g;s|\\|\\\\|g'
4130eb1301bSmrg
4140eb1301bSmrg# Re-`\' parameter expansions in output of double_quote_subst that were
4150eb1301bSmrg# `\'-ed in input to the same.  If an odd number of `\' preceded a '$'
4160eb1301bSmrg# in input to double_quote_subst, that '$' was protected from expansion.
4170eb1301bSmrg# Since each input `\' is now two `\'s, look for any number of runs of
4180eb1301bSmrg# four `\'s followed by two `\'s and then a '$'.  `\' that '$'.
4190eb1301bSmrgbs='\\'
4200eb1301bSmrgbs2='\\\\'
4210eb1301bSmrgbs4='\\\\\\\\'
4220eb1301bSmrgdollar='\$'
4230eb1301bSmrgsed_double_backslash="\
4240eb1301bSmrg  s/$bs4/&\\
4250eb1301bSmrg/g
4260eb1301bSmrg  s/^$bs2$dollar/$bs&/
4270eb1301bSmrg  s/\\([^$bs]\\)$bs2$dollar/\\1$bs2$bs$dollar/g
4280eb1301bSmrg  s/\n//g"
429c27c18e8Smrg
4300eb1301bSmrg# Standard options:
431c27c18e8Smrgopt_dry_run=false
4320eb1301bSmrgopt_help=false
433c27c18e8Smrgopt_quiet=false
434c27c18e8Smrgopt_verbose=false
4350eb1301bSmrgopt_warning=:
436c27c18e8Smrg
4370eb1301bSmrg# func_echo arg...
4380eb1301bSmrg# Echo program name prefixed message, along with the current mode
4390eb1301bSmrg# name if it has been set yet.
4400eb1301bSmrgfunc_echo ()
4410eb1301bSmrg{
4420eb1301bSmrg    $ECHO "$progname: ${opt_mode+$opt_mode: }$*"
4430eb1301bSmrg}
444c27c18e8Smrg
4450eb1301bSmrg# func_verbose arg...
4460eb1301bSmrg# Echo program name prefixed message in verbose mode only.
4470eb1301bSmrgfunc_verbose ()
4480eb1301bSmrg{
4490eb1301bSmrg    $opt_verbose && func_echo ${1+"$@"}
450c27c18e8Smrg
4510eb1301bSmrg    # A bug in bash halts the script if the last line of a function
4520eb1301bSmrg    # fails when set -e is in force, so we need another command to
4530eb1301bSmrg    # work around that:
4540eb1301bSmrg    :
4550eb1301bSmrg}
456c27c18e8Smrg
4570eb1301bSmrg# func_echo_all arg...
4580eb1301bSmrg# Invoke $ECHO with all args, space-separated.
4590eb1301bSmrgfunc_echo_all ()
4600eb1301bSmrg{
4610eb1301bSmrg    $ECHO "$*"
4620eb1301bSmrg}
46337eb1ca1Smrg
4640eb1301bSmrg# func_error arg...
4650eb1301bSmrg# Echo program name prefixed message to standard error.
4660eb1301bSmrgfunc_error ()
4670eb1301bSmrg{
4680eb1301bSmrg    $ECHO "$progname: ${opt_mode+$opt_mode: }"${1+"$@"} 1>&2
4690eb1301bSmrg}
470c27c18e8Smrg
4710eb1301bSmrg# func_warning arg...
4720eb1301bSmrg# Echo program name prefixed warning message to standard error.
4730eb1301bSmrgfunc_warning ()
4740eb1301bSmrg{
4750eb1301bSmrg    $opt_warning && $ECHO "$progname: ${opt_mode+$opt_mode: }warning: "${1+"$@"} 1>&2
476c27c18e8Smrg
4770eb1301bSmrg    # bash bug again:
4780eb1301bSmrg    :
4790eb1301bSmrg}
480c27c18e8Smrg
4810eb1301bSmrg# func_fatal_error arg...
4820eb1301bSmrg# Echo program name prefixed message to standard error, and exit.
4830eb1301bSmrgfunc_fatal_error ()
484c27c18e8Smrg{
4850eb1301bSmrg    func_error ${1+"$@"}
4860eb1301bSmrg    exit $EXIT_FAILURE
4870eb1301bSmrg}
488c27c18e8Smrg
4890eb1301bSmrg# func_fatal_help arg...
4900eb1301bSmrg# Echo program name prefixed message to standard error, followed by
4910eb1301bSmrg# a help hint, and exit.
4920eb1301bSmrgfunc_fatal_help ()
4930eb1301bSmrg{
4940eb1301bSmrg    func_error ${1+"$@"}
4950eb1301bSmrg    func_fatal_error "$help"
496c27c18e8Smrg}
4970eb1301bSmrghelp="Try \`$progname --help' for more information."  ## default
498c27c18e8Smrg
499c27c18e8Smrg
5000eb1301bSmrg# func_grep expression filename
501c27c18e8Smrg# Check whether EXPRESSION matches any line of FILENAME, without output.
502c27c18e8Smrgfunc_grep ()
503c27c18e8Smrg{
504c27c18e8Smrg    $GREP "$1" "$2" >/dev/null 2>&1
505c27c18e8Smrg}
506c27c18e8Smrg
507c27c18e8Smrg
5080eb1301bSmrg# func_mkdir_p directory-path
509c27c18e8Smrg# Make sure the entire path to DIRECTORY-PATH is available.
510c27c18e8Smrgfunc_mkdir_p ()
511c27c18e8Smrg{
5120eb1301bSmrg    my_directory_path="$1"
5130eb1301bSmrg    my_dir_list=
514c27c18e8Smrg
5150eb1301bSmrg    if test -n "$my_directory_path" && test "$opt_dry_run" != ":"; then
51644584a44Smrg
5170eb1301bSmrg      # Protect directory names starting with `-'
5180eb1301bSmrg      case $my_directory_path in
5190eb1301bSmrg        -*) my_directory_path="./$my_directory_path" ;;
520c27c18e8Smrg      esac
521c27c18e8Smrg
522c27c18e8Smrg      # While some portion of DIR does not yet exist...
5230eb1301bSmrg      while test ! -d "$my_directory_path"; do
524c27c18e8Smrg        # ...make a list in topmost first order.  Use a colon delimited
525c27c18e8Smrg	# list incase some portion of path contains whitespace.
5260eb1301bSmrg        my_dir_list="$my_directory_path:$my_dir_list"
527c27c18e8Smrg
528c27c18e8Smrg        # If the last portion added has no slash in it, the list is done
5290eb1301bSmrg        case $my_directory_path in */*) ;; *) break ;; esac
530c27c18e8Smrg
531c27c18e8Smrg        # ...otherwise throw away the child directory and loop
5320eb1301bSmrg        my_directory_path=`$ECHO "$my_directory_path" | $SED -e "$dirname"`
533c27c18e8Smrg      done
5340eb1301bSmrg      my_dir_list=`$ECHO "$my_dir_list" | $SED 's,:*$,,'`
535c27c18e8Smrg
5360eb1301bSmrg      save_mkdir_p_IFS="$IFS"; IFS=':'
5370eb1301bSmrg      for my_dir in $my_dir_list; do
5380eb1301bSmrg	IFS="$save_mkdir_p_IFS"
5390eb1301bSmrg        # mkdir can fail with a `File exist' error if two processes
540c27c18e8Smrg        # try to create one of the directories concurrently.  Don't
541c27c18e8Smrg        # stop in that case!
5420eb1301bSmrg        $MKDIR "$my_dir" 2>/dev/null || :
543c27c18e8Smrg      done
5440eb1301bSmrg      IFS="$save_mkdir_p_IFS"
545c27c18e8Smrg
546c27c18e8Smrg      # Bail out if we (or some other process) failed to create a directory.
5470eb1301bSmrg      test -d "$my_directory_path" || \
5480eb1301bSmrg        func_fatal_error "Failed to create \`$1'"
549c27c18e8Smrg    fi
550c27c18e8Smrg}
551c43cc173Smrg
552c43cc173Smrg
5530eb1301bSmrg# func_mktempdir [string]
554c43cc173Smrg# Make a temporary directory that won't clash with other running
555c43cc173Smrg# libtool processes, and avoids race conditions if possible.  If
5560eb1301bSmrg# given, STRING is the basename for that directory.
557c43cc173Smrgfunc_mktempdir ()
558c43cc173Smrg{
5590eb1301bSmrg    my_template="${TMPDIR-/tmp}/${1-$progname}"
56044584a44Smrg
5610eb1301bSmrg    if test "$opt_dry_run" = ":"; then
562c43cc173Smrg      # Return a directory name, but don't create it in dry-run mode
5630eb1301bSmrg      my_tmpdir="${my_template}-$$"
564c43cc173Smrg    else
565c43cc173Smrg
566c43cc173Smrg      # If mktemp works, use that first and foremost
5670eb1301bSmrg      my_tmpdir=`mktemp -d "${my_template}-XXXXXXXX" 2>/dev/null`
568c43cc173Smrg
5690eb1301bSmrg      if test ! -d "$my_tmpdir"; then
570c27c18e8Smrg        # Failing that, at least try and use $RANDOM to avoid a race
5710eb1301bSmrg        my_tmpdir="${my_template}-${RANDOM-0}$$"
572c43cc173Smrg
5730eb1301bSmrg        save_mktempdir_umask=`umask`
574c27c18e8Smrg        umask 0077
5750eb1301bSmrg        $MKDIR "$my_tmpdir"
5760eb1301bSmrg        umask $save_mktempdir_umask
577c43cc173Smrg      fi
578c43cc173Smrg
579c43cc173Smrg      # If we're not in dry-run mode, bomb out on failure
5800eb1301bSmrg      test -d "$my_tmpdir" || \
5810eb1301bSmrg        func_fatal_error "cannot create temporary directory \`$my_tmpdir'"
582c43cc173Smrg    fi
583c43cc173Smrg
5840eb1301bSmrg    $ECHO "$my_tmpdir"
58544584a44Smrg}
58644584a44Smrg
58744584a44Smrg
5880eb1301bSmrg# func_quote_for_eval arg
5890eb1301bSmrg# Aesthetically quote ARG to be evaled later.
5900eb1301bSmrg# This function returns two values: FUNC_QUOTE_FOR_EVAL_RESULT
5910eb1301bSmrg# is double-quoted, suitable for a subsequent eval, whereas
5920eb1301bSmrg# FUNC_QUOTE_FOR_EVAL_UNQUOTED_RESULT has merely all characters
5930eb1301bSmrg# which are still active within double quotes backslashified.
59444584a44Smrgfunc_quote_for_eval ()
59544584a44Smrg{
59644584a44Smrg    case $1 in
5970eb1301bSmrg      *[\\\`\"\$]*)
5980eb1301bSmrg	func_quote_for_eval_unquoted_result=`$ECHO "$1" | $SED "$sed_quote_subst"` ;;
59944584a44Smrg      *)
6000eb1301bSmrg        func_quote_for_eval_unquoted_result="$1" ;;
60144584a44Smrg    esac
60244584a44Smrg
6030eb1301bSmrg    case $func_quote_for_eval_unquoted_result in
60444584a44Smrg      # Double-quote args containing shell metacharacters to delay
6050eb1301bSmrg      # word splitting, command substitution and and variable
6060eb1301bSmrg      # expansion for a subsequent eval.
60744584a44Smrg      # Many Bourne shells cannot handle close brackets correctly
60844584a44Smrg      # in scan sets, so we specify it separately.
60944584a44Smrg      *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \	]*|*]*|"")
6100eb1301bSmrg        func_quote_for_eval_result="\"$func_quote_for_eval_unquoted_result\""
61144584a44Smrg        ;;
6120eb1301bSmrg      *)
6130eb1301bSmrg        func_quote_for_eval_result="$func_quote_for_eval_unquoted_result"
61444584a44Smrg    esac
61544584a44Smrg}
61644584a44Smrg
61744584a44Smrg
6180eb1301bSmrg# func_quote_for_expand arg
6190eb1301bSmrg# Aesthetically quote ARG to be evaled later; same as above,
6200eb1301bSmrg# but do not quote variable references.
6210eb1301bSmrgfunc_quote_for_expand ()
62244584a44Smrg{
62344584a44Smrg    case $1 in
6240eb1301bSmrg      *[\\\`\"]*)
6250eb1301bSmrg	my_arg=`$ECHO "$1" | $SED \
6260eb1301bSmrg	    -e "$double_quote_subst" -e "$sed_double_backslash"` ;;
6270eb1301bSmrg      *)
6280eb1301bSmrg        my_arg="$1" ;;
62944584a44Smrg    esac
63044584a44Smrg
6310eb1301bSmrg    case $my_arg in
6320eb1301bSmrg      # Double-quote args containing shell metacharacters to delay
6330eb1301bSmrg      # word splitting and command substitution for a subsequent eval.
6340eb1301bSmrg      # Many Bourne shells cannot handle close brackets correctly
6350eb1301bSmrg      # in scan sets, so we specify it separately.
6360eb1301bSmrg      *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \	]*|*]*|"")
6370eb1301bSmrg        my_arg="\"$my_arg\""
6380eb1301bSmrg        ;;
6390eb1301bSmrg    esac
64044584a44Smrg
6410eb1301bSmrg    func_quote_for_expand_result="$my_arg"
642c43cc173Smrg}
643c43cc173Smrg
644c43cc173Smrg
6450eb1301bSmrg# func_show_eval cmd [fail_exp]
6460eb1301bSmrg# Unless opt_silent is true, then output CMD.  Then, if opt_dryrun is
6470eb1301bSmrg# not true, evaluate CMD.  If the evaluation of CMD fails, and FAIL_EXP
6480eb1301bSmrg# is given, then evaluate it.
6490eb1301bSmrgfunc_show_eval ()
650c43cc173Smrg{
6510eb1301bSmrg    my_cmd="$1"
6520eb1301bSmrg    my_fail_exp="${2-:}"
65344584a44Smrg
6540eb1301bSmrg    ${opt_silent-false} || {
6550eb1301bSmrg      func_quote_for_expand "$my_cmd"
6560eb1301bSmrg      eval "func_echo $func_quote_for_expand_result"
6570eb1301bSmrg    }
65844584a44Smrg
6590eb1301bSmrg    if ${opt_dry_run-false}; then :; else
6600eb1301bSmrg      eval "$my_cmd"
6610eb1301bSmrg      my_status=$?
6620eb1301bSmrg      if test "$my_status" -eq 0; then :; else
6630eb1301bSmrg	eval "(exit $my_status); $my_fail_exp"
6640eb1301bSmrg      fi
6650eb1301bSmrg    fi
666c43cc173Smrg}
667c43cc173Smrg
668c43cc173Smrg
6690eb1301bSmrg# func_show_eval_locale cmd [fail_exp]
6700eb1301bSmrg# Unless opt_silent is true, then output CMD.  Then, if opt_dryrun is
6710eb1301bSmrg# not true, evaluate CMD.  If the evaluation of CMD fails, and FAIL_EXP
6720eb1301bSmrg# is given, then evaluate it.  Use the saved locale for evaluation.
6730eb1301bSmrgfunc_show_eval_locale ()
674c43cc173Smrg{
6750eb1301bSmrg    my_cmd="$1"
6760eb1301bSmrg    my_fail_exp="${2-:}"
677c27c18e8Smrg
6780eb1301bSmrg    ${opt_silent-false} || {
6790eb1301bSmrg      func_quote_for_expand "$my_cmd"
6800eb1301bSmrg      eval "func_echo $func_quote_for_expand_result"
6810eb1301bSmrg    }
68244584a44Smrg
6830eb1301bSmrg    if ${opt_dry_run-false}; then :; else
6840eb1301bSmrg      eval "$lt_user_locale
6850eb1301bSmrg	    $my_cmd"
6860eb1301bSmrg      my_status=$?
6870eb1301bSmrg      eval "$lt_safe_locale"
6880eb1301bSmrg      if test "$my_status" -eq 0; then :; else
6890eb1301bSmrg	eval "(exit $my_status); $my_fail_exp"
6900eb1301bSmrg      fi
6910eb1301bSmrg    fi
692c43cc173Smrg}
693c43cc173Smrg
6940eb1301bSmrg# func_tr_sh
6950eb1301bSmrg# Turn $1 into a string suitable for a shell variable name.
6960eb1301bSmrg# Result is stored in $func_tr_sh_result.  All characters
6970eb1301bSmrg# not in the set a-zA-Z0-9_ are replaced with '_'. Further,
6980eb1301bSmrg# if $1 begins with a digit, a '_' is prepended as well.
6990eb1301bSmrgfunc_tr_sh ()
700c43cc173Smrg{
7010eb1301bSmrg  case $1 in
7020eb1301bSmrg  [0-9]* | *[!a-zA-Z0-9_]*)
7030eb1301bSmrg    func_tr_sh_result=`$ECHO "$1" | $SED 's/^\([0-9]\)/_\1/; s/[^a-zA-Z0-9_]/_/g'`
7040eb1301bSmrg    ;;
7050eb1301bSmrg  * )
7060eb1301bSmrg    func_tr_sh_result=$1
7070eb1301bSmrg    ;;
7080eb1301bSmrg  esac
709b789ec8aSmrg}
710b789ec8aSmrg
711c43cc173Smrg
7120eb1301bSmrg# func_version
7130eb1301bSmrg# Echo version message to standard output and exit.
7140eb1301bSmrgfunc_version ()
7150eb1301bSmrg{
7160eb1301bSmrg    $opt_debug
717b789ec8aSmrg
7180eb1301bSmrg    $SED -n '/(C)/!b go
7190eb1301bSmrg	:more
7200eb1301bSmrg	/\./!{
7210eb1301bSmrg	  N
7220eb1301bSmrg	  s/\n# / /
7230eb1301bSmrg	  b more
7240eb1301bSmrg	}
7250eb1301bSmrg	:go
7260eb1301bSmrg	/^# '$PROGRAM' (GNU /,/# warranty; / {
7270eb1301bSmrg        s/^# //
7280eb1301bSmrg	s/^# *$//
7290eb1301bSmrg        s/\((C)\)[ 0-9,-]*\( [1-9][0-9]*\)/\1\2/
7300eb1301bSmrg        p
7310eb1301bSmrg     }' < "$progpath"
7320eb1301bSmrg     exit $?
7330eb1301bSmrg}
73444584a44Smrg
7350eb1301bSmrg# func_usage
7360eb1301bSmrg# Echo short help message to standard output and exit.
7370eb1301bSmrgfunc_usage ()
738c27c18e8Smrg{
7390eb1301bSmrg    $opt_debug
740b789ec8aSmrg
7410eb1301bSmrg    $SED -n '/^# Usage:/,/^#  *.*--help/ {
7420eb1301bSmrg        s/^# //
7430eb1301bSmrg	s/^# *$//
7440eb1301bSmrg	s/\$progname/'$progname'/
7450eb1301bSmrg	p
7460eb1301bSmrg    }' < "$progpath"
7470eb1301bSmrg    echo
7480eb1301bSmrg    $ECHO "run \`$progname --help | more' for full usage"
7490eb1301bSmrg    exit $?
750c27c18e8Smrg}
751c27c18e8Smrg
7520eb1301bSmrg# func_help [NOEXIT]
7530eb1301bSmrg# Echo long help message to standard output and exit,
7540eb1301bSmrg# unless 'noexit' is passed as argument.
755c27c18e8Smrgfunc_help ()
756c27c18e8Smrg{
7570eb1301bSmrg    $opt_debug
7580eb1301bSmrg
7590eb1301bSmrg    $SED -n '/^# Usage:/,/# Report bugs to/ {
7600eb1301bSmrg	:print
7610eb1301bSmrg        s/^# //
7620eb1301bSmrg	s/^# *$//
7630eb1301bSmrg	s*\$progname*'$progname'*
7640eb1301bSmrg	s*\$host*'"$host"'*
7650eb1301bSmrg	s*\$SHELL*'"$SHELL"'*
7660eb1301bSmrg	s*\$LTCC*'"$LTCC"'*
7670eb1301bSmrg	s*\$LTCFLAGS*'"$LTCFLAGS"'*
7680eb1301bSmrg	s*\$LD*'"$LD"'*
7690eb1301bSmrg	s/\$with_gnu_ld/'"$with_gnu_ld"'/
7700eb1301bSmrg	s/\$automake_version/'"`(${AUTOMAKE-automake} --version) 2>/dev/null |$SED 1q`"'/
7710eb1301bSmrg	s/\$autoconf_version/'"`(${AUTOCONF-autoconf} --version) 2>/dev/null |$SED 1q`"'/
7720eb1301bSmrg	p
7730eb1301bSmrg	d
7740eb1301bSmrg     }
7750eb1301bSmrg     /^# .* home page:/b print
7760eb1301bSmrg     /^# General help using/b print
7770eb1301bSmrg     ' < "$progpath"
7780eb1301bSmrg    ret=$?
7790eb1301bSmrg    if test -z "$1"; then
7800eb1301bSmrg      exit $ret
7810eb1301bSmrg    fi
782c27c18e8Smrg}
783c27c18e8Smrg
7840eb1301bSmrg# func_missing_arg argname
785c27c18e8Smrg# Echo program name prefixed message to standard error and set global
786c27c18e8Smrg# exit_cmd.
787c27c18e8Smrgfunc_missing_arg ()
788c27c18e8Smrg{
7890eb1301bSmrg    $opt_debug
790b789ec8aSmrg
7910eb1301bSmrg    func_error "missing argument for $1."
792c27c18e8Smrg    exit_cmd=exit
793c43cc173Smrg}
794c43cc173Smrg
795c43cc173Smrg
7960eb1301bSmrg# func_split_short_opt shortopt
797b789ec8aSmrg# Set func_split_short_opt_name and func_split_short_opt_arg shell
798b789ec8aSmrg# variables after splitting SHORTOPT after the 2nd character.
7990eb1301bSmrgfunc_split_short_opt ()
800b789ec8aSmrg{
8010eb1301bSmrg    my_sed_short_opt='1s/^\(..\).*$/\1/;q'
8020eb1301bSmrg    my_sed_short_rest='1s/^..\(.*\)$/\1/;q'
803b789ec8aSmrg
8040eb1301bSmrg    func_split_short_opt_name=`$ECHO "$1" | $SED "$my_sed_short_opt"`
8050eb1301bSmrg    func_split_short_opt_arg=`$ECHO "$1" | $SED "$my_sed_short_rest"`
8060eb1301bSmrg} # func_split_short_opt may be replaced by extended shell implementation
807b789ec8aSmrg
808b789ec8aSmrg
8090eb1301bSmrg# func_split_long_opt longopt
8100eb1301bSmrg# Set func_split_long_opt_name and func_split_long_opt_arg shell
8110eb1301bSmrg# variables after splitting LONGOPT at the `=' sign.
8120eb1301bSmrgfunc_split_long_opt ()
813b789ec8aSmrg{
8140eb1301bSmrg    my_sed_long_opt='1s/^\(--[^=]*\)=.*/\1/;q'
8150eb1301bSmrg    my_sed_long_arg='1s/^--[^=]*=//'
816b789ec8aSmrg
8170eb1301bSmrg    func_split_long_opt_name=`$ECHO "$1" | $SED "$my_sed_long_opt"`
8180eb1301bSmrg    func_split_long_opt_arg=`$ECHO "$1" | $SED "$my_sed_long_arg"`
8190eb1301bSmrg} # func_split_long_opt may be replaced by extended shell implementation
820b789ec8aSmrg
8210eb1301bSmrgexit_cmd=:
822c43cc173Smrg
823c27c18e8Smrg
824c27c18e8Smrg
825c27c18e8Smrg
826c43cc173Smrg
8270eb1301bSmrgmagic="%%%MAGIC variable%%%"
8280eb1301bSmrgmagic_exe="%%%MAGIC EXE variable%%%"
829c43cc173Smrg
8300eb1301bSmrg# Global variables.
8310eb1301bSmrgnonopt=
8320eb1301bSmrgpreserve_args=
8330eb1301bSmrglo2o="s/\\.lo\$/.${objext}/"
8340eb1301bSmrgo2lo="s/\\.${objext}\$/.lo/"
8350eb1301bSmrgextracted_archives=
8360eb1301bSmrgextracted_serial=0
837c43cc173Smrg
8380eb1301bSmrg# If this variable is set in any of the actions, the command in it
8390eb1301bSmrg# will be execed at the end.  This prevents here-documents from being
8400eb1301bSmrg# left over by shells.
8410eb1301bSmrgexec_cmd=
842c27c18e8Smrg
8430eb1301bSmrg# func_append var value
8440eb1301bSmrg# Append VALUE to the end of shell variable VAR.
8450eb1301bSmrgfunc_append ()
846b789ec8aSmrg{
8470eb1301bSmrg    eval "${1}=\$${1}\${2}"
8480eb1301bSmrg} # func_append may be replaced by extended shell implementation
849b789ec8aSmrg
8500eb1301bSmrg# func_append_quoted var value
8510eb1301bSmrg# Quote VALUE and append to the end of shell variable VAR, separated
8520eb1301bSmrg# by a space.
8530eb1301bSmrgfunc_append_quoted ()
854b789ec8aSmrg{
8550eb1301bSmrg    func_quote_for_eval "${2}"
8560eb1301bSmrg    eval "${1}=\$${1}\\ \$func_quote_for_eval_result"
8570eb1301bSmrg} # func_append_quoted may be replaced by extended shell implementation
858b789ec8aSmrg
859b789ec8aSmrg
8600eb1301bSmrg# func_arith arithmetic-term...
8610eb1301bSmrgfunc_arith ()
862b789ec8aSmrg{
8630eb1301bSmrg    func_arith_result=`expr "${@}"`
8640eb1301bSmrg} # func_arith may be replaced by extended shell implementation
865b789ec8aSmrg
866b789ec8aSmrg
8670eb1301bSmrg# func_len string
8680eb1301bSmrg# STRING may not start with a hyphen.
8690eb1301bSmrgfunc_len ()
8700eb1301bSmrg{
8710eb1301bSmrg    func_len_result=`expr "${1}" : ".*" 2>/dev/null || echo $max_cmd_len`
8720eb1301bSmrg} # func_len may be replaced by extended shell implementation
87344584a44Smrg
87444584a44Smrg
8750eb1301bSmrg# func_lo2o object
8760eb1301bSmrgfunc_lo2o ()
8770eb1301bSmrg{
8780eb1301bSmrg    func_lo2o_result=`$ECHO "${1}" | $SED "$lo2o"`
8790eb1301bSmrg} # func_lo2o may be replaced by extended shell implementation
88044584a44Smrg
88144584a44Smrg
8820eb1301bSmrg# func_xform libobj-or-source
8830eb1301bSmrgfunc_xform ()
8840eb1301bSmrg{
8850eb1301bSmrg    func_xform_result=`$ECHO "${1}" | $SED 's/\.[^.]*$/.lo/'`
8860eb1301bSmrg} # func_xform may be replaced by extended shell implementation
887b789ec8aSmrg
888b789ec8aSmrg
8890eb1301bSmrg# func_fatal_configuration arg...
890c27c18e8Smrg# Echo program name prefixed message to standard error, followed by
891c27c18e8Smrg# a configuration failure hint, and exit.
892c27c18e8Smrgfunc_fatal_configuration ()
893c27c18e8Smrg{
8940eb1301bSmrg    func_error ${1+"$@"}
8950eb1301bSmrg    func_error "See the $PACKAGE documentation for more information."
8960eb1301bSmrg    func_fatal_error "Fatal configuration error."
897c27c18e8Smrg}
898c43cc173Smrg
89921e67964Smrg
900c27c18e8Smrg# func_config
901c27c18e8Smrg# Display the configuration for all the tags in this script.
902c27c18e8Smrgfunc_config ()
903c27c18e8Smrg{
904c27c18e8Smrg    re_begincf='^# ### BEGIN LIBTOOL'
905c27c18e8Smrg    re_endcf='^# ### END LIBTOOL'
906c27c18e8Smrg
907c27c18e8Smrg    # Default configuration.
908c27c18e8Smrg    $SED "1,/$re_begincf CONFIG/d;/$re_endcf CONFIG/,\$d" < "$progpath"
909c43cc173Smrg
910c43cc173Smrg    # Now print the configurations for the tags.
911c43cc173Smrg    for tagname in $taglist; do
912c27c18e8Smrg      $SED -n "/$re_begincf TAG CONFIG: $tagname\$/,/$re_endcf TAG CONFIG: $tagname\$/p" < "$progpath"
913c43cc173Smrg    done
914c43cc173Smrg
915c27c18e8Smrg    exit $?
916c27c18e8Smrg}
917c43cc173Smrg
918c27c18e8Smrg# func_features
919c27c18e8Smrg# Display the features supported by this script.
920c27c18e8Smrgfunc_features ()
921c27c18e8Smrg{
92237eb1ca1Smrg    echo "host: $host"
9230eb1301bSmrg    if test "$build_libtool_libs" = yes; then
92437eb1ca1Smrg      echo "enable shared libraries"
925c43cc173Smrg    else
92637eb1ca1Smrg      echo "disable shared libraries"
927c43cc173Smrg    fi
9280eb1301bSmrg    if test "$build_old_libs" = yes; then
92937eb1ca1Smrg      echo "enable static libraries"
930c43cc173Smrg    else
93137eb1ca1Smrg      echo "disable static libraries"
932c43cc173Smrg    fi
933c27c18e8Smrg
934c43cc173Smrg    exit $?
935c27c18e8Smrg}
936c43cc173Smrg
9370eb1301bSmrg# func_enable_tag tagname
938c27c18e8Smrg# Verify that TAGNAME is valid, and either flag an error and exit, or
939c27c18e8Smrg# enable the TAGNAME tag.  We also add TAGNAME to the global $taglist
940c27c18e8Smrg# variable here.
941c27c18e8Smrgfunc_enable_tag ()
942c27c18e8Smrg{
9430eb1301bSmrg  # Global variable:
9440eb1301bSmrg  tagname="$1"
945c43cc173Smrg
9460eb1301bSmrg  re_begincf="^# ### BEGIN LIBTOOL TAG CONFIG: $tagname\$"
9470eb1301bSmrg  re_endcf="^# ### END LIBTOOL TAG CONFIG: $tagname\$"
9480eb1301bSmrg  sed_extractcf="/$re_begincf/,/$re_endcf/p"
949c43cc173Smrg
9500eb1301bSmrg  # Validate tagname.
9510eb1301bSmrg  case $tagname in
9520eb1301bSmrg    *[!-_A-Za-z0-9,/]*)
9530eb1301bSmrg      func_fatal_error "invalid tag name: $tagname"
9540eb1301bSmrg      ;;
9550eb1301bSmrg  esac
956c43cc173Smrg
9570eb1301bSmrg  # Don't test for the "default" C tag, as we know it's
9580eb1301bSmrg  # there but not specially marked.
9590eb1301bSmrg  case $tagname in
9600eb1301bSmrg    CC) ;;
961c27c18e8Smrg    *)
9620eb1301bSmrg      if $GREP "$re_begincf" "$progpath" >/dev/null 2>&1; then
9630eb1301bSmrg	taglist="$taglist $tagname"
9640eb1301bSmrg
9650eb1301bSmrg	# Evaluate the configuration.  Be careful to quote the path
9660eb1301bSmrg	# and the sed script, to avoid splitting on whitespace, but
9670eb1301bSmrg	# also don't use non-portable quotes within backquotes within
9680eb1301bSmrg	# quotes we have to do it in 2 steps:
9690eb1301bSmrg	extractedcf=`$SED -n -e "$sed_extractcf" < "$progpath"`
9700eb1301bSmrg	eval "$extractedcf"
9710eb1301bSmrg      else
9720eb1301bSmrg	func_error "ignoring unknown tag $tagname"
9730eb1301bSmrg      fi
9740eb1301bSmrg      ;;
9750eb1301bSmrg  esac
976c27c18e8Smrg}
977c27c18e8Smrg
978b789ec8aSmrg# func_check_version_match
979b789ec8aSmrg# Ensure that we are using m4 macros, and libtool script from the same
980b789ec8aSmrg# release of libtool.
981b789ec8aSmrgfunc_check_version_match ()
982c27c18e8Smrg{
9830eb1301bSmrg  if test "$package_revision" != "$macro_revision"; then
9840eb1301bSmrg    if test "$VERSION" != "$macro_version"; then
9850eb1301bSmrg      if test -z "$macro_version"; then
9860eb1301bSmrg        cat >&2 <<_LT_EOF
987b789ec8aSmrg$progname: Version mismatch error.  This is $PACKAGE $VERSION, but the
988b789ec8aSmrg$progname: definition of this LT_INIT comes from an older release.
989b789ec8aSmrg$progname: You should recreate aclocal.m4 with macros from $PACKAGE $VERSION
990b789ec8aSmrg$progname: and run autoconf again.
991b789ec8aSmrg_LT_EOF
9920eb1301bSmrg      else
9930eb1301bSmrg        cat >&2 <<_LT_EOF
994b789ec8aSmrg$progname: Version mismatch error.  This is $PACKAGE $VERSION, but the
995b789ec8aSmrg$progname: definition of this LT_INIT comes from $PACKAGE $macro_version.
996b789ec8aSmrg$progname: You should recreate aclocal.m4 with macros from $PACKAGE $VERSION
997b789ec8aSmrg$progname: and run autoconf again.
998b789ec8aSmrg_LT_EOF
9990eb1301bSmrg      fi
10000eb1301bSmrg    else
10010eb1301bSmrg      cat >&2 <<_LT_EOF
1002b789ec8aSmrg$progname: Version mismatch error.  This is $PACKAGE $VERSION, revision $package_revision,
1003b789ec8aSmrg$progname: but the definition of this LT_INIT comes from revision $macro_revision.
1004b789ec8aSmrg$progname: You should recreate aclocal.m4 with macros from revision $package_revision
1005b789ec8aSmrg$progname: of $PACKAGE $VERSION and run autoconf again.
1006b789ec8aSmrg_LT_EOF
100744584a44Smrg    fi
1008b789ec8aSmrg
10090eb1301bSmrg    exit $EXIT_MISMATCH
10100eb1301bSmrg  fi
10110eb1301bSmrg}
1012b789ec8aSmrg
1013c43cc173Smrg
10140eb1301bSmrg# Shorthand for --mode=foo, only valid as the first argument
10150eb1301bSmrgcase $1 in
10160eb1301bSmrgclean|clea|cle|cl)
10170eb1301bSmrg  shift; set dummy --mode clean ${1+"$@"}; shift
10180eb1301bSmrg  ;;
10190eb1301bSmrgcompile|compil|compi|comp|com|co|c)
10200eb1301bSmrg  shift; set dummy --mode compile ${1+"$@"}; shift
10210eb1301bSmrg  ;;
10220eb1301bSmrgexecute|execut|execu|exec|exe|ex|e)
10230eb1301bSmrg  shift; set dummy --mode execute ${1+"$@"}; shift
10240eb1301bSmrg  ;;
10250eb1301bSmrgfinish|finis|fini|fin|fi|f)
10260eb1301bSmrg  shift; set dummy --mode finish ${1+"$@"}; shift
10270eb1301bSmrg  ;;
10280eb1301bSmrginstall|instal|insta|inst|ins|in|i)
10290eb1301bSmrg  shift; set dummy --mode install ${1+"$@"}; shift
10300eb1301bSmrg  ;;
10310eb1301bSmrglink|lin|li|l)
10320eb1301bSmrg  shift; set dummy --mode link ${1+"$@"}; shift
10330eb1301bSmrg  ;;
10340eb1301bSmrguninstall|uninstal|uninsta|uninst|unins|unin|uni|un|u)
10350eb1301bSmrg  shift; set dummy --mode uninstall ${1+"$@"}; shift
10360eb1301bSmrg  ;;
10370eb1301bSmrgesac
1038b789ec8aSmrg
1039b789ec8aSmrg
104044584a44Smrg
10410eb1301bSmrg# Option defaults:
10420eb1301bSmrgopt_debug=:
10430eb1301bSmrgopt_dry_run=false
10440eb1301bSmrgopt_config=false
10450eb1301bSmrgopt_preserve_dup_deps=false
10460eb1301bSmrgopt_features=false
10470eb1301bSmrgopt_finish=false
10480eb1301bSmrgopt_help=false
10490eb1301bSmrgopt_help_all=false
10500eb1301bSmrgopt_silent=:
10510eb1301bSmrgopt_warning=:
10520eb1301bSmrgopt_verbose=:
10530eb1301bSmrgopt_silent=false
10540eb1301bSmrgopt_verbose=false
1055b789ec8aSmrg
1056b789ec8aSmrg
10570eb1301bSmrg# Parse options once, thoroughly.  This comes as soon as possible in the
10580eb1301bSmrg# script to make things like `--version' happen as quickly as we can.
1059b789ec8aSmrg{
10600eb1301bSmrg  # this just eases exit handling
10610eb1301bSmrg  while test $# -gt 0; do
10620eb1301bSmrg    opt="$1"
10630eb1301bSmrg    shift
10640eb1301bSmrg    case $opt in
10650eb1301bSmrg      --debug|-x)	opt_debug='set -x'
10660eb1301bSmrg			func_echo "enabling shell trace mode"
10670eb1301bSmrg			$opt_debug
10680eb1301bSmrg			;;
10690eb1301bSmrg      --dry-run|--dryrun|-n)
10700eb1301bSmrg			opt_dry_run=:
10710eb1301bSmrg			;;
10720eb1301bSmrg      --config)
10730eb1301bSmrg			opt_config=:
10740eb1301bSmrgfunc_config
10750eb1301bSmrg			;;
10760eb1301bSmrg      --dlopen|-dlopen)
10770eb1301bSmrg			optarg="$1"
10780eb1301bSmrg			opt_dlopen="${opt_dlopen+$opt_dlopen
10790eb1301bSmrg}$optarg"
10800eb1301bSmrg			shift
10810eb1301bSmrg			;;
10820eb1301bSmrg      --preserve-dup-deps)
10830eb1301bSmrg			opt_preserve_dup_deps=:
10840eb1301bSmrg			;;
10850eb1301bSmrg      --features)
10860eb1301bSmrg			opt_features=:
10870eb1301bSmrgfunc_features
10880eb1301bSmrg			;;
10890eb1301bSmrg      --finish)
10900eb1301bSmrg			opt_finish=:
10910eb1301bSmrgset dummy --mode finish ${1+"$@"}; shift
10920eb1301bSmrg			;;
10930eb1301bSmrg      --help)
10940eb1301bSmrg			opt_help=:
10950eb1301bSmrg			;;
10960eb1301bSmrg      --help-all)
10970eb1301bSmrg			opt_help_all=:
10980eb1301bSmrgopt_help=': help-all'
10990eb1301bSmrg			;;
11000eb1301bSmrg      --mode)
11010eb1301bSmrg			test $# = 0 && func_missing_arg $opt && break
11020eb1301bSmrg			optarg="$1"
11030eb1301bSmrg			opt_mode="$optarg"
11040eb1301bSmrgcase $optarg in
11050eb1301bSmrg  # Valid mode arguments:
11060eb1301bSmrg  clean|compile|execute|finish|install|link|relink|uninstall) ;;
11070eb1301bSmrg
11080eb1301bSmrg  # Catch anything else as an error
11090eb1301bSmrg  *) func_error "invalid argument for $opt"
11100eb1301bSmrg     exit_cmd=exit
11110eb1301bSmrg     break
11120eb1301bSmrg     ;;
11130eb1301bSmrgesac
11140eb1301bSmrg			shift
11150eb1301bSmrg			;;
11160eb1301bSmrg      --no-silent|--no-quiet)
11170eb1301bSmrg			opt_silent=false
11180eb1301bSmrgfunc_append preserve_args " $opt"
11190eb1301bSmrg			;;
11200eb1301bSmrg      --no-warning|--no-warn)
11210eb1301bSmrg			opt_warning=false
11220eb1301bSmrgfunc_append preserve_args " $opt"
11230eb1301bSmrg			;;
11240eb1301bSmrg      --no-verbose)
11250eb1301bSmrg			opt_verbose=false
11260eb1301bSmrgfunc_append preserve_args " $opt"
11270eb1301bSmrg			;;
11280eb1301bSmrg      --silent|--quiet)
11290eb1301bSmrg			opt_silent=:
11300eb1301bSmrgfunc_append preserve_args " $opt"
11310eb1301bSmrg        opt_verbose=false
11320eb1301bSmrg			;;
11330eb1301bSmrg      --verbose|-v)
11340eb1301bSmrg			opt_verbose=:
11350eb1301bSmrgfunc_append preserve_args " $opt"
11360eb1301bSmrgopt_silent=false
11370eb1301bSmrg			;;
11380eb1301bSmrg      --tag)
11390eb1301bSmrg			test $# = 0 && func_missing_arg $opt && break
11400eb1301bSmrg			optarg="$1"
11410eb1301bSmrg			opt_tag="$optarg"
11420eb1301bSmrgfunc_append preserve_args " $opt $optarg"
11430eb1301bSmrgfunc_enable_tag "$optarg"
11440eb1301bSmrg			shift
11450eb1301bSmrg			;;
11460eb1301bSmrg
11470eb1301bSmrg      -\?|-h)		func_usage				;;
11480eb1301bSmrg      --help)		func_help				;;
11490eb1301bSmrg      --version)	func_version				;;
11500eb1301bSmrg
11510eb1301bSmrg      # Separate optargs to long options:
11520eb1301bSmrg      --*=*)
11530eb1301bSmrg			func_split_long_opt "$opt"
11540eb1301bSmrg			set dummy "$func_split_long_opt_name" "$func_split_long_opt_arg" ${1+"$@"}
11550eb1301bSmrg			shift
11560eb1301bSmrg			;;
11570eb1301bSmrg
11580eb1301bSmrg      # Separate non-argument short options:
11590eb1301bSmrg      -\?*|-h*|-n*|-v*)
11600eb1301bSmrg			func_split_short_opt "$opt"
11610eb1301bSmrg			set dummy "$func_split_short_opt_name" "-$func_split_short_opt_arg" ${1+"$@"}
11620eb1301bSmrg			shift
11630eb1301bSmrg			;;
11640eb1301bSmrg
11650eb1301bSmrg      --)		break					;;
11660eb1301bSmrg      -*)		func_fatal_help "unrecognized option \`$opt'" ;;
11670eb1301bSmrg      *)		set dummy "$opt" ${1+"$@"};	shift; break  ;;
11680eb1301bSmrg    esac
11690eb1301bSmrg  done
1170c27c18e8Smrg
11710eb1301bSmrg  # Validate options:
1172b789ec8aSmrg
11730eb1301bSmrg  # save first non-option argument
11740eb1301bSmrg  if test "$#" -gt 0; then
11750eb1301bSmrg    nonopt="$opt"
11760eb1301bSmrg    shift
11770eb1301bSmrg  fi
1178b789ec8aSmrg
11790eb1301bSmrg  # preserve --debug
11800eb1301bSmrg  test "$opt_debug" = : || func_append preserve_args " --debug"
1181c27c18e8Smrg
11820eb1301bSmrg  case $host in
11830eb1301bSmrg    *cygwin* | *mingw* | *pw32* | *cegcc*)
11840eb1301bSmrg      # don't eliminate duplications in $postdeps and $predeps
11850eb1301bSmrg      opt_duplicate_compiler_generated_deps=:
11860eb1301bSmrg      ;;
11870eb1301bSmrg    *)
11880eb1301bSmrg      opt_duplicate_compiler_generated_deps=$opt_preserve_dup_deps
11890eb1301bSmrg      ;;
11900eb1301bSmrg  esac
1191c43cc173Smrg
11920eb1301bSmrg  $opt_help || {
11930eb1301bSmrg    # Sanity checks first:
11940eb1301bSmrg    func_check_version_match
1195c27c18e8Smrg
11960eb1301bSmrg    if test "$build_libtool_libs" != yes && test "$build_old_libs" != yes; then
11970eb1301bSmrg      func_fatal_configuration "not configured to build any kind of library"
1198c27c18e8Smrg    fi
1199c27c18e8Smrg
12000eb1301bSmrg    # Darwin sucks
12010eb1301bSmrg    eval std_shrext=\"$shrext_cmds\"
120244584a44Smrg
12030eb1301bSmrg    # Only execute mode is allowed to have -dlopen flags.
12040eb1301bSmrg    if test -n "$opt_dlopen" && test "$opt_mode" != execute; then
12050eb1301bSmrg      func_error "unrecognized option \`-dlopen'"
12060eb1301bSmrg      $ECHO "$help" 1>&2
12070eb1301bSmrg      exit $EXIT_FAILURE
12080eb1301bSmrg    fi
120944584a44Smrg
12100eb1301bSmrg    # Change the help message to a mode-specific one.
12110eb1301bSmrg    generic_help="$help"
12120eb1301bSmrg    help="Try \`$progname --help --mode=$opt_mode' for more information."
12130eb1301bSmrg  }
1214c27c18e8Smrg
1215c27c18e8Smrg
12160eb1301bSmrg  # Bail if the options were screwed
12170eb1301bSmrg  $exit_cmd $EXIT_FAILURE
1218b789ec8aSmrg}
1219c27c18e8Smrg
122044584a44Smrg
1221c43cc173Smrg
1222c43cc173Smrg
1223b789ec8aSmrg## ----------- ##
1224b789ec8aSmrg##    Main.    ##
1225b789ec8aSmrg## ----------- ##
1226c43cc173Smrg
1227c27c18e8Smrg# func_lalib_p file
12280eb1301bSmrg# True iff FILE is a libtool `.la' library or `.lo' object file.
1229c27c18e8Smrg# This function is only a basic sanity check; it will hardly flush out
1230c27c18e8Smrg# determined imposters.
1231c27c18e8Smrgfunc_lalib_p ()
1232c27c18e8Smrg{
1233c27c18e8Smrg    test -f "$1" &&
12340eb1301bSmrg      $SED -e 4q "$1" 2>/dev/null \
12350eb1301bSmrg        | $GREP "^# Generated by .*$PACKAGE" > /dev/null 2>&1
1236c27c18e8Smrg}
1237c43cc173Smrg
1238c27c18e8Smrg# func_lalib_unsafe_p file
12390eb1301bSmrg# True iff FILE is a libtool `.la' library or `.lo' object file.
1240c27c18e8Smrg# This function implements the same check as func_lalib_p without
1241c27c18e8Smrg# resorting to external programs.  To this end, it redirects stdin and
1242c27c18e8Smrg# closes it afterwards, without saving the original file descriptor.
1243c27c18e8Smrg# As a safety measure, use it only where a negative result would be
12440eb1301bSmrg# fatal anyway.  Works if `file' does not exist.
1245c27c18e8Smrgfunc_lalib_unsafe_p ()
1246c27c18e8Smrg{
1247c27c18e8Smrg    lalib_p=no
1248c27c18e8Smrg    if test -f "$1" && test -r "$1" && exec 5<&0 <"$1"; then
1249c27c18e8Smrg	for lalib_p_l in 1 2 3 4
1250c27c18e8Smrg	do
1251c27c18e8Smrg	    read lalib_p_line
12520eb1301bSmrg	    case "$lalib_p_line" in
1253c27c18e8Smrg		\#\ Generated\ by\ *$PACKAGE* ) lalib_p=yes; break;;
1254c27c18e8Smrg	    esac
1255c27c18e8Smrg	done
1256c27c18e8Smrg	exec 0<&5 5<&-
1257c27c18e8Smrg    fi
12580eb1301bSmrg    test "$lalib_p" = yes
1259c27c18e8Smrg}
1260c43cc173Smrg
1261c27c18e8Smrg# func_ltwrapper_script_p file
1262c27c18e8Smrg# True iff FILE is a libtool wrapper script
1263c27c18e8Smrg# This function is only a basic sanity check; it will hardly flush out
1264c27c18e8Smrg# determined imposters.
1265c27c18e8Smrgfunc_ltwrapper_script_p ()
1266c27c18e8Smrg{
12670eb1301bSmrg    func_lalib_p "$1"
1268c27c18e8Smrg}
1269c43cc173Smrg
1270c27c18e8Smrg# func_ltwrapper_executable_p file
1271c27c18e8Smrg# True iff FILE is a libtool wrapper executable
1272c27c18e8Smrg# This function is only a basic sanity check; it will hardly flush out
1273c27c18e8Smrg# determined imposters.
1274c27c18e8Smrgfunc_ltwrapper_executable_p ()
1275c27c18e8Smrg{
1276c27c18e8Smrg    func_ltwrapper_exec_suffix=
1277c27c18e8Smrg    case $1 in
1278c27c18e8Smrg    *.exe) ;;
1279c27c18e8Smrg    *) func_ltwrapper_exec_suffix=.exe ;;
1280c27c18e8Smrg    esac
1281c27c18e8Smrg    $GREP "$magic_exe" "$1$func_ltwrapper_exec_suffix" >/dev/null 2>&1
1282c27c18e8Smrg}
1283c43cc173Smrg
1284c27c18e8Smrg# func_ltwrapper_scriptname file
1285c27c18e8Smrg# Assumes file is an ltwrapper_executable
1286c27c18e8Smrg# uses $file to determine the appropriate filename for a
1287c27c18e8Smrg# temporary ltwrapper_script.
1288c27c18e8Smrgfunc_ltwrapper_scriptname ()
1289c27c18e8Smrg{
1290b789ec8aSmrg    func_dirname_and_basename "$1" "" "."
1291b789ec8aSmrg    func_stripname '' '.exe' "$func_basename_result"
12920eb1301bSmrg    func_ltwrapper_scriptname_result="$func_dirname_result/$objdir/${func_stripname_result}_ltshwrapper"
1293c27c18e8Smrg}
1294c27c18e8Smrg
1295c27c18e8Smrg# func_ltwrapper_p file
1296c27c18e8Smrg# True iff FILE is a libtool wrapper script or wrapper executable
1297c27c18e8Smrg# This function is only a basic sanity check; it will hardly flush out
1298c27c18e8Smrg# determined imposters.
1299c27c18e8Smrgfunc_ltwrapper_p ()
1300c27c18e8Smrg{
1301c27c18e8Smrg    func_ltwrapper_script_p "$1" || func_ltwrapper_executable_p "$1"
1302c27c18e8Smrg}
1303c27c18e8Smrg
1304c27c18e8Smrg
1305c27c18e8Smrg# func_execute_cmds commands fail_cmd
1306c27c18e8Smrg# Execute tilde-delimited COMMANDS.
1307c27c18e8Smrg# If FAIL_CMD is given, eval that upon failure.
1308c27c18e8Smrg# FAIL_CMD may read-access the current command in variable CMD!
1309c27c18e8Smrgfunc_execute_cmds ()
1310c27c18e8Smrg{
13110eb1301bSmrg    $opt_debug
1312c27c18e8Smrg    save_ifs=$IFS; IFS='~'
1313c27c18e8Smrg    for cmd in $1; do
131444584a44Smrg      IFS=$save_ifs
13150eb1301bSmrg      eval cmd=\"$cmd\"
1316c27c18e8Smrg      func_show_eval "$cmd" "${2-:}"
1317c27c18e8Smrg    done
1318c27c18e8Smrg    IFS=$save_ifs
1319c27c18e8Smrg}
1320c27c18e8Smrg
1321c27c18e8Smrg
1322c27c18e8Smrg# func_source file
1323c27c18e8Smrg# Source FILE, adding directory component if necessary.
1324c27c18e8Smrg# Note that it is not necessary on cygwin/mingw to append a dot to
1325c27c18e8Smrg# FILE even if both FILE and FILE.exe exist: automatic-append-.exe
1326c27c18e8Smrg# behavior happens only for exec(3), not for open(2)!  Also, sourcing
13270eb1301bSmrg# `FILE.' does not work on cygwin managed mounts.
1328c27c18e8Smrgfunc_source ()
1329c27c18e8Smrg{
13300eb1301bSmrg    $opt_debug
1331c27c18e8Smrg    case $1 in
1332c27c18e8Smrg    */* | *\\*)	. "$1" ;;
1333c27c18e8Smrg    *)		. "./$1" ;;
1334c27c18e8Smrg    esac
1335c27c18e8Smrg}
1336c27c18e8Smrg
1337c27c18e8Smrg
1338b789ec8aSmrg# func_resolve_sysroot PATH
1339b789ec8aSmrg# Replace a leading = in PATH with a sysroot.  Store the result into
1340b789ec8aSmrg# func_resolve_sysroot_result
1341b789ec8aSmrgfunc_resolve_sysroot ()
1342b789ec8aSmrg{
1343b789ec8aSmrg  func_resolve_sysroot_result=$1
1344b789ec8aSmrg  case $func_resolve_sysroot_result in
1345b789ec8aSmrg  =*)
1346b789ec8aSmrg    func_stripname '=' '' "$func_resolve_sysroot_result"
1347b789ec8aSmrg    func_resolve_sysroot_result=$lt_sysroot$func_stripname_result
1348b789ec8aSmrg    ;;
1349b789ec8aSmrg  esac
1350b789ec8aSmrg}
1351b789ec8aSmrg
1352b789ec8aSmrg# func_replace_sysroot PATH
1353b789ec8aSmrg# If PATH begins with the sysroot, replace it with = and
1354b789ec8aSmrg# store the result into func_replace_sysroot_result.
1355b789ec8aSmrgfunc_replace_sysroot ()
1356b789ec8aSmrg{
13570eb1301bSmrg  case "$lt_sysroot:$1" in
1358b789ec8aSmrg  ?*:"$lt_sysroot"*)
1359b789ec8aSmrg    func_stripname "$lt_sysroot" '' "$1"
13600eb1301bSmrg    func_replace_sysroot_result="=$func_stripname_result"
1361b789ec8aSmrg    ;;
1362b789ec8aSmrg  *)
1363b789ec8aSmrg    # Including no sysroot.
1364b789ec8aSmrg    func_replace_sysroot_result=$1
1365b789ec8aSmrg    ;;
1366b789ec8aSmrg  esac
1367b789ec8aSmrg}
1368b789ec8aSmrg
1369c27c18e8Smrg# func_infer_tag arg
1370c27c18e8Smrg# Infer tagged configuration to use if any are available and
1371c27c18e8Smrg# if one wasn't chosen via the "--tag" command line option.
1372c27c18e8Smrg# Only attempt this if the compiler in the base compile
1373c27c18e8Smrg# command doesn't match the default compiler.
1374c27c18e8Smrg# arg is usually of the form 'gcc ...'
1375c27c18e8Smrgfunc_infer_tag ()
1376c27c18e8Smrg{
13770eb1301bSmrg    $opt_debug
1378c27c18e8Smrg    if test -n "$available_tags" && test -z "$tagname"; then
1379c27c18e8Smrg      CC_quoted=
1380c27c18e8Smrg      for arg in $CC; do
1381b789ec8aSmrg	func_append_quoted CC_quoted "$arg"
1382c27c18e8Smrg      done
138337eb1ca1Smrg      CC_expanded=`func_echo_all $CC`
138437eb1ca1Smrg      CC_quoted_expanded=`func_echo_all $CC_quoted`
1385c27c18e8Smrg      case $@ in
1386c27c18e8Smrg      # Blanks in the command may have been stripped by the calling shell,
1387c27c18e8Smrg      # but not from the CC environment variable when configure was run.
138837eb1ca1Smrg      " $CC "* | "$CC "* | " $CC_expanded "* | "$CC_expanded "* | \
138937eb1ca1Smrg      " $CC_quoted"* | "$CC_quoted "* | " $CC_quoted_expanded "* | "$CC_quoted_expanded "*) ;;
1390c27c18e8Smrg      # Blanks at the start of $base_compile will cause this to fail
1391c27c18e8Smrg      # if we don't check for them as well.
1392c27c18e8Smrg      *)
1393c27c18e8Smrg	for z in $available_tags; do
1394c27c18e8Smrg	  if $GREP "^# ### BEGIN LIBTOOL TAG CONFIG: $z$" < "$progpath" > /dev/null; then
1395c27c18e8Smrg	    # Evaluate the configuration.
13960eb1301bSmrg	    eval "`${SED} -n -e '/^# ### BEGIN LIBTOOL TAG CONFIG: '$z'$/,/^# ### END LIBTOOL TAG CONFIG: '$z'$/p' < $progpath`"
1397c27c18e8Smrg	    CC_quoted=
1398c27c18e8Smrg	    for arg in $CC; do
1399c27c18e8Smrg	      # Double-quote args containing other shell metacharacters.
1400b789ec8aSmrg	      func_append_quoted CC_quoted "$arg"
1401c27c18e8Smrg	    done
140237eb1ca1Smrg	    CC_expanded=`func_echo_all $CC`
140337eb1ca1Smrg	    CC_quoted_expanded=`func_echo_all $CC_quoted`
1404c27c18e8Smrg	    case "$@ " in
140537eb1ca1Smrg	    " $CC "* | "$CC "* | " $CC_expanded "* | "$CC_expanded "* | \
140637eb1ca1Smrg	    " $CC_quoted"* | "$CC_quoted "* | " $CC_quoted_expanded "* | "$CC_quoted_expanded "*)
1407c27c18e8Smrg	      # The compiler in the base compile command matches
1408c27c18e8Smrg	      # the one in the tagged configuration.
1409c27c18e8Smrg	      # Assume this is the tagged configuration we want.
1410c27c18e8Smrg	      tagname=$z
1411c27c18e8Smrg	      break
1412c27c18e8Smrg	      ;;
1413c27c18e8Smrg	    esac
1414c27c18e8Smrg	  fi
1415c27c18e8Smrg	done
1416c27c18e8Smrg	# If $tagname still isn't set, then no tagged configuration
1417c27c18e8Smrg	# was found and let the user know that the "--tag" command
1418c27c18e8Smrg	# line option must be used.
1419c27c18e8Smrg	if test -z "$tagname"; then
1420c27c18e8Smrg	  func_echo "unable to infer tagged configuration"
14210eb1301bSmrg	  func_fatal_error "specify a tag with \`--tag'"
1422c27c18e8Smrg#	else
1423c27c18e8Smrg#	  func_verbose "using $tagname tagged configuration"
1424c27c18e8Smrg	fi
1425c27c18e8Smrg	;;
1426c27c18e8Smrg      esac
1427c27c18e8Smrg    fi
1428c27c18e8Smrg}
1429c27c18e8Smrg
1430c27c18e8Smrg
1431c27c18e8Smrg
1432b789ec8aSmrg# func_write_libtool_object output_name pic_name nonpic_name
1433b789ec8aSmrg# Create a libtool object file (analogous to a ".la" file),
1434b789ec8aSmrg# but don't create it if we're doing a dry run.
1435b789ec8aSmrgfunc_write_libtool_object ()
1436b789ec8aSmrg{
14370eb1301bSmrg    write_libobj=${1}
14380eb1301bSmrg    if test "$build_libtool_libs" = yes; then
14390eb1301bSmrg      write_lobj=\'${2}\'
1440b789ec8aSmrg    else
1441b789ec8aSmrg      write_lobj=none
1442b789ec8aSmrg    fi
1443b789ec8aSmrg
14440eb1301bSmrg    if test "$build_old_libs" = yes; then
14450eb1301bSmrg      write_oldobj=\'${3}\'
1446b789ec8aSmrg    else
1447b789ec8aSmrg      write_oldobj=none
1448b789ec8aSmrg    fi
1449b789ec8aSmrg
1450b789ec8aSmrg    $opt_dry_run || {
1451b789ec8aSmrg      cat >${write_libobj}T <<EOF
1452b789ec8aSmrg# $write_libobj - a libtool object file
14530eb1301bSmrg# Generated by $PROGRAM (GNU $PACKAGE$TIMESTAMP) $VERSION
1454b789ec8aSmrg#
1455b789ec8aSmrg# Please DO NOT delete this file!
1456b789ec8aSmrg# It is necessary for linking the library.
1457b789ec8aSmrg
1458b789ec8aSmrg# Name of the PIC object.
1459b789ec8aSmrgpic_object=$write_lobj
1460b789ec8aSmrg
1461b789ec8aSmrg# Name of the non-PIC object
1462b789ec8aSmrgnon_pic_object=$write_oldobj
1463b789ec8aSmrg
1464b789ec8aSmrgEOF
14650eb1301bSmrg      $MV "${write_libobj}T" "${write_libobj}"
1466b789ec8aSmrg    }
1467b789ec8aSmrg}
1468b789ec8aSmrg
1469b789ec8aSmrg
1470b789ec8aSmrg##################################################
1471b789ec8aSmrg# FILE NAME AND PATH CONVERSION HELPER FUNCTIONS #
1472b789ec8aSmrg##################################################
1473b789ec8aSmrg
1474b789ec8aSmrg# func_convert_core_file_wine_to_w32 ARG
1475b789ec8aSmrg# Helper function used by file name conversion functions when $build is *nix,
1476b789ec8aSmrg# and $host is mingw, cygwin, or some other w32 environment. Relies on a
1477b789ec8aSmrg# correctly configured wine environment available, with the winepath program
1478b789ec8aSmrg# in $build's $PATH.
1479b789ec8aSmrg#
1480b789ec8aSmrg# ARG is the $build file name to be converted to w32 format.
1481b789ec8aSmrg# Result is available in $func_convert_core_file_wine_to_w32_result, and will
1482b789ec8aSmrg# be empty on error (or when ARG is empty)
1483b789ec8aSmrgfunc_convert_core_file_wine_to_w32 ()
1484b789ec8aSmrg{
14850eb1301bSmrg  $opt_debug
14860eb1301bSmrg  func_convert_core_file_wine_to_w32_result="$1"
1487b789ec8aSmrg  if test -n "$1"; then
1488b789ec8aSmrg    # Unfortunately, winepath does not exit with a non-zero error code, so we
1489b789ec8aSmrg    # are forced to check the contents of stdout. On the other hand, if the
1490b789ec8aSmrg    # command is not found, the shell will set an exit code of 127 and print
1491b789ec8aSmrg    # *an error message* to stdout. So we must check for both error code of
1492b789ec8aSmrg    # zero AND non-empty stdout, which explains the odd construction:
1493b789ec8aSmrg    func_convert_core_file_wine_to_w32_tmp=`winepath -w "$1" 2>/dev/null`
14940eb1301bSmrg    if test "$?" -eq 0 && test -n "${func_convert_core_file_wine_to_w32_tmp}"; then
1495b789ec8aSmrg      func_convert_core_file_wine_to_w32_result=`$ECHO "$func_convert_core_file_wine_to_w32_tmp" |
14960eb1301bSmrg        $SED -e "$lt_sed_naive_backslashify"`
1497b789ec8aSmrg    else
1498b789ec8aSmrg      func_convert_core_file_wine_to_w32_result=
1499b789ec8aSmrg    fi
1500b789ec8aSmrg  fi
1501b789ec8aSmrg}
1502b789ec8aSmrg# end: func_convert_core_file_wine_to_w32
1503b789ec8aSmrg
1504b789ec8aSmrg
1505b789ec8aSmrg# func_convert_core_path_wine_to_w32 ARG
1506b789ec8aSmrg# Helper function used by path conversion functions when $build is *nix, and
1507b789ec8aSmrg# $host is mingw, cygwin, or some other w32 environment. Relies on a correctly
1508b789ec8aSmrg# configured wine environment available, with the winepath program in $build's
1509b789ec8aSmrg# $PATH. Assumes ARG has no leading or trailing path separator characters.
1510b789ec8aSmrg#
1511b789ec8aSmrg# ARG is path to be converted from $build format to win32.
1512b789ec8aSmrg# Result is available in $func_convert_core_path_wine_to_w32_result.
1513b789ec8aSmrg# Unconvertible file (directory) names in ARG are skipped; if no directory names
1514b789ec8aSmrg# are convertible, then the result may be empty.
1515b789ec8aSmrgfunc_convert_core_path_wine_to_w32 ()
1516b789ec8aSmrg{
15170eb1301bSmrg  $opt_debug
1518b789ec8aSmrg  # unfortunately, winepath doesn't convert paths, only file names
15190eb1301bSmrg  func_convert_core_path_wine_to_w32_result=""
1520b789ec8aSmrg  if test -n "$1"; then
1521b789ec8aSmrg    oldIFS=$IFS
1522b789ec8aSmrg    IFS=:
1523b789ec8aSmrg    for func_convert_core_path_wine_to_w32_f in $1; do
1524b789ec8aSmrg      IFS=$oldIFS
1525b789ec8aSmrg      func_convert_core_file_wine_to_w32 "$func_convert_core_path_wine_to_w32_f"
15260eb1301bSmrg      if test -n "$func_convert_core_file_wine_to_w32_result" ; then
1527b789ec8aSmrg        if test -z "$func_convert_core_path_wine_to_w32_result"; then
15280eb1301bSmrg          func_convert_core_path_wine_to_w32_result="$func_convert_core_file_wine_to_w32_result"
1529b789ec8aSmrg        else
1530b789ec8aSmrg          func_append func_convert_core_path_wine_to_w32_result ";$func_convert_core_file_wine_to_w32_result"
1531b789ec8aSmrg        fi
1532b789ec8aSmrg      fi
1533b789ec8aSmrg    done
1534b789ec8aSmrg    IFS=$oldIFS
1535b789ec8aSmrg  fi
1536b789ec8aSmrg}
1537b789ec8aSmrg# end: func_convert_core_path_wine_to_w32
1538b789ec8aSmrg
1539b789ec8aSmrg
1540b789ec8aSmrg# func_cygpath ARGS...
1541b789ec8aSmrg# Wrapper around calling the cygpath program via LT_CYGPATH. This is used when
1542b789ec8aSmrg# when (1) $build is *nix and Cygwin is hosted via a wine environment; or (2)
1543b789ec8aSmrg# $build is MSYS and $host is Cygwin, or (3) $build is Cygwin. In case (1) or
1544b789ec8aSmrg# (2), returns the Cygwin file name or path in func_cygpath_result (input
1545b789ec8aSmrg# file name or path is assumed to be in w32 format, as previously converted
1546b789ec8aSmrg# from $build's *nix or MSYS format). In case (3), returns the w32 file name
1547b789ec8aSmrg# or path in func_cygpath_result (input file name or path is assumed to be in
1548b789ec8aSmrg# Cygwin format). Returns an empty string on error.
1549b789ec8aSmrg#
1550b789ec8aSmrg# ARGS are passed to cygpath, with the last one being the file name or path to
1551b789ec8aSmrg# be converted.
1552b789ec8aSmrg#
1553b789ec8aSmrg# Specify the absolute *nix (or w32) name to cygpath in the LT_CYGPATH
1554b789ec8aSmrg# environment variable; do not put it in $PATH.
1555b789ec8aSmrgfunc_cygpath ()
1556b789ec8aSmrg{
15570eb1301bSmrg  $opt_debug
1558b789ec8aSmrg  if test -n "$LT_CYGPATH" && test -f "$LT_CYGPATH"; then
1559b789ec8aSmrg    func_cygpath_result=`$LT_CYGPATH "$@" 2>/dev/null`
1560b789ec8aSmrg    if test "$?" -ne 0; then
1561b789ec8aSmrg      # on failure, ensure result is empty
1562b789ec8aSmrg      func_cygpath_result=
1563b789ec8aSmrg    fi
1564b789ec8aSmrg  else
1565b789ec8aSmrg    func_cygpath_result=
15660eb1301bSmrg    func_error "LT_CYGPATH is empty or specifies non-existent file: \`$LT_CYGPATH'"
1567b789ec8aSmrg  fi
1568b789ec8aSmrg}
1569b789ec8aSmrg#end: func_cygpath
1570b789ec8aSmrg
1571b789ec8aSmrg
1572b789ec8aSmrg# func_convert_core_msys_to_w32 ARG
1573b789ec8aSmrg# Convert file name or path ARG from MSYS format to w32 format.  Return
1574b789ec8aSmrg# result in func_convert_core_msys_to_w32_result.
1575b789ec8aSmrgfunc_convert_core_msys_to_w32 ()
1576b789ec8aSmrg{
15770eb1301bSmrg  $opt_debug
1578b789ec8aSmrg  # awkward: cmd appends spaces to result
1579b789ec8aSmrg  func_convert_core_msys_to_w32_result=`( cmd //c echo "$1" ) 2>/dev/null |
15800eb1301bSmrg    $SED -e 's/[ ]*$//' -e "$lt_sed_naive_backslashify"`
1581b789ec8aSmrg}
1582b789ec8aSmrg#end: func_convert_core_msys_to_w32
1583b789ec8aSmrg
1584b789ec8aSmrg
1585b789ec8aSmrg# func_convert_file_check ARG1 ARG2
1586b789ec8aSmrg# Verify that ARG1 (a file name in $build format) was converted to $host
1587b789ec8aSmrg# format in ARG2. Otherwise, emit an error message, but continue (resetting
1588b789ec8aSmrg# func_to_host_file_result to ARG1).
1589b789ec8aSmrgfunc_convert_file_check ()
1590b789ec8aSmrg{
15910eb1301bSmrg  $opt_debug
15920eb1301bSmrg  if test -z "$2" && test -n "$1" ; then
1593b789ec8aSmrg    func_error "Could not determine host file name corresponding to"
15940eb1301bSmrg    func_error "  \`$1'"
1595b789ec8aSmrg    func_error "Continuing, but uninstalled executables may not work."
1596b789ec8aSmrg    # Fallback:
15970eb1301bSmrg    func_to_host_file_result="$1"
1598b789ec8aSmrg  fi
1599b789ec8aSmrg}
1600b789ec8aSmrg# end func_convert_file_check
1601b789ec8aSmrg
1602b789ec8aSmrg
1603b789ec8aSmrg# func_convert_path_check FROM_PATHSEP TO_PATHSEP FROM_PATH TO_PATH
1604b789ec8aSmrg# Verify that FROM_PATH (a path in $build format) was converted to $host
1605b789ec8aSmrg# format in TO_PATH. Otherwise, emit an error message, but continue, resetting
1606b789ec8aSmrg# func_to_host_file_result to a simplistic fallback value (see below).
1607b789ec8aSmrgfunc_convert_path_check ()
1608b789ec8aSmrg{
16090eb1301bSmrg  $opt_debug
1610b789ec8aSmrg  if test -z "$4" && test -n "$3"; then
1611b789ec8aSmrg    func_error "Could not determine the host path corresponding to"
16120eb1301bSmrg    func_error "  \`$3'"
1613b789ec8aSmrg    func_error "Continuing, but uninstalled executables may not work."
1614b789ec8aSmrg    # Fallback.  This is a deliberately simplistic "conversion" and
1615b789ec8aSmrg    # should not be "improved".  See libtool.info.
1616b789ec8aSmrg    if test "x$1" != "x$2"; then
1617b789ec8aSmrg      lt_replace_pathsep_chars="s|$1|$2|g"
1618b789ec8aSmrg      func_to_host_path_result=`echo "$3" |
1619b789ec8aSmrg        $SED -e "$lt_replace_pathsep_chars"`
1620b789ec8aSmrg    else
16210eb1301bSmrg      func_to_host_path_result="$3"
1622b789ec8aSmrg    fi
1623b789ec8aSmrg  fi
1624b789ec8aSmrg}
1625b789ec8aSmrg# end func_convert_path_check
1626b789ec8aSmrg
1627b789ec8aSmrg
1628b789ec8aSmrg# func_convert_path_front_back_pathsep FRONTPAT BACKPAT REPL ORIG
1629b789ec8aSmrg# Modifies func_to_host_path_result by prepending REPL if ORIG matches FRONTPAT
1630b789ec8aSmrg# and appending REPL if ORIG matches BACKPAT.
1631b789ec8aSmrgfunc_convert_path_front_back_pathsep ()
1632b789ec8aSmrg{
16330eb1301bSmrg  $opt_debug
1634b789ec8aSmrg  case $4 in
16350eb1301bSmrg  $1 ) func_to_host_path_result="$3$func_to_host_path_result"
1636b789ec8aSmrg    ;;
1637b789ec8aSmrg  esac
1638b789ec8aSmrg  case $4 in
1639b789ec8aSmrg  $2 ) func_append func_to_host_path_result "$3"
1640b789ec8aSmrg    ;;
1641b789ec8aSmrg  esac
1642b789ec8aSmrg}
1643b789ec8aSmrg# end func_convert_path_front_back_pathsep
1644b789ec8aSmrg
1645b789ec8aSmrg
1646b789ec8aSmrg##################################################
1647b789ec8aSmrg# $build to $host FILE NAME CONVERSION FUNCTIONS #
1648b789ec8aSmrg##################################################
16490eb1301bSmrg# invoked via `$to_host_file_cmd ARG'
1650b789ec8aSmrg#
1651b789ec8aSmrg# In each case, ARG is the path to be converted from $build to $host format.
1652b789ec8aSmrg# Result will be available in $func_to_host_file_result.
1653b789ec8aSmrg
1654b789ec8aSmrg
1655b789ec8aSmrg# func_to_host_file ARG
1656b789ec8aSmrg# Converts the file name ARG from $build format to $host format. Return result
1657b789ec8aSmrg# in func_to_host_file_result.
1658b789ec8aSmrgfunc_to_host_file ()
1659b789ec8aSmrg{
16600eb1301bSmrg  $opt_debug
1661b789ec8aSmrg  $to_host_file_cmd "$1"
1662b789ec8aSmrg}
1663b789ec8aSmrg# end func_to_host_file
1664b789ec8aSmrg
1665b789ec8aSmrg
1666b789ec8aSmrg# func_to_tool_file ARG LAZY
1667b789ec8aSmrg# converts the file name ARG from $build format to toolchain format. Return
1668b789ec8aSmrg# result in func_to_tool_file_result.  If the conversion in use is listed
1669b789ec8aSmrg# in (the comma separated) LAZY, no conversion takes place.
1670b789ec8aSmrgfunc_to_tool_file ()
1671b789ec8aSmrg{
16720eb1301bSmrg  $opt_debug
1673b789ec8aSmrg  case ,$2, in
1674b789ec8aSmrg    *,"$to_tool_file_cmd",*)
1675b789ec8aSmrg      func_to_tool_file_result=$1
1676b789ec8aSmrg      ;;
1677b789ec8aSmrg    *)
1678b789ec8aSmrg      $to_tool_file_cmd "$1"
1679b789ec8aSmrg      func_to_tool_file_result=$func_to_host_file_result
1680b789ec8aSmrg      ;;
1681b789ec8aSmrg  esac
1682b789ec8aSmrg}
1683b789ec8aSmrg# end func_to_tool_file
1684b789ec8aSmrg
1685b789ec8aSmrg
1686b789ec8aSmrg# func_convert_file_noop ARG
1687b789ec8aSmrg# Copy ARG to func_to_host_file_result.
1688b789ec8aSmrgfunc_convert_file_noop ()
1689b789ec8aSmrg{
16900eb1301bSmrg  func_to_host_file_result="$1"
1691b789ec8aSmrg}
1692b789ec8aSmrg# end func_convert_file_noop
1693b789ec8aSmrg
1694b789ec8aSmrg
1695b789ec8aSmrg# func_convert_file_msys_to_w32 ARG
1696b789ec8aSmrg# Convert file name ARG from (mingw) MSYS to (mingw) w32 format; automatic
1697b789ec8aSmrg# conversion to w32 is not available inside the cwrapper.  Returns result in
1698b789ec8aSmrg# func_to_host_file_result.
1699b789ec8aSmrgfunc_convert_file_msys_to_w32 ()
1700b789ec8aSmrg{
17010eb1301bSmrg  $opt_debug
17020eb1301bSmrg  func_to_host_file_result="$1"
1703b789ec8aSmrg  if test -n "$1"; then
1704b789ec8aSmrg    func_convert_core_msys_to_w32 "$1"
17050eb1301bSmrg    func_to_host_file_result="$func_convert_core_msys_to_w32_result"
1706b789ec8aSmrg  fi
1707b789ec8aSmrg  func_convert_file_check "$1" "$func_to_host_file_result"
1708b789ec8aSmrg}
1709b789ec8aSmrg# end func_convert_file_msys_to_w32
1710b789ec8aSmrg
1711b789ec8aSmrg
1712b789ec8aSmrg# func_convert_file_cygwin_to_w32 ARG
1713b789ec8aSmrg# Convert file name ARG from Cygwin to w32 format.  Returns result in
1714b789ec8aSmrg# func_to_host_file_result.
1715b789ec8aSmrgfunc_convert_file_cygwin_to_w32 ()
1716b789ec8aSmrg{
17170eb1301bSmrg  $opt_debug
17180eb1301bSmrg  func_to_host_file_result="$1"
1719b789ec8aSmrg  if test -n "$1"; then
1720b789ec8aSmrg    # because $build is cygwin, we call "the" cygpath in $PATH; no need to use
1721b789ec8aSmrg    # LT_CYGPATH in this case.
1722b789ec8aSmrg    func_to_host_file_result=`cygpath -m "$1"`
1723b789ec8aSmrg  fi
1724b789ec8aSmrg  func_convert_file_check "$1" "$func_to_host_file_result"
1725b789ec8aSmrg}
1726b789ec8aSmrg# end func_convert_file_cygwin_to_w32
1727b789ec8aSmrg
1728b789ec8aSmrg
1729b789ec8aSmrg# func_convert_file_nix_to_w32 ARG
1730b789ec8aSmrg# Convert file name ARG from *nix to w32 format.  Requires a wine environment
1731b789ec8aSmrg# and a working winepath. Returns result in func_to_host_file_result.
1732b789ec8aSmrgfunc_convert_file_nix_to_w32 ()
1733b789ec8aSmrg{
17340eb1301bSmrg  $opt_debug
17350eb1301bSmrg  func_to_host_file_result="$1"
1736b789ec8aSmrg  if test -n "$1"; then
1737b789ec8aSmrg    func_convert_core_file_wine_to_w32 "$1"
17380eb1301bSmrg    func_to_host_file_result="$func_convert_core_file_wine_to_w32_result"
1739b789ec8aSmrg  fi
1740b789ec8aSmrg  func_convert_file_check "$1" "$func_to_host_file_result"
1741b789ec8aSmrg}
1742b789ec8aSmrg# end func_convert_file_nix_to_w32
1743b789ec8aSmrg
1744b789ec8aSmrg
1745b789ec8aSmrg# func_convert_file_msys_to_cygwin ARG
1746b789ec8aSmrg# Convert file name ARG from MSYS to Cygwin format.  Requires LT_CYGPATH set.
1747b789ec8aSmrg# Returns result in func_to_host_file_result.
1748b789ec8aSmrgfunc_convert_file_msys_to_cygwin ()
1749b789ec8aSmrg{
17500eb1301bSmrg  $opt_debug
17510eb1301bSmrg  func_to_host_file_result="$1"
1752b789ec8aSmrg  if test -n "$1"; then
1753b789ec8aSmrg    func_convert_core_msys_to_w32 "$1"
1754b789ec8aSmrg    func_cygpath -u "$func_convert_core_msys_to_w32_result"
17550eb1301bSmrg    func_to_host_file_result="$func_cygpath_result"
1756b789ec8aSmrg  fi
1757b789ec8aSmrg  func_convert_file_check "$1" "$func_to_host_file_result"
1758b789ec8aSmrg}
1759b789ec8aSmrg# end func_convert_file_msys_to_cygwin
1760b789ec8aSmrg
1761b789ec8aSmrg
1762b789ec8aSmrg# func_convert_file_nix_to_cygwin ARG
1763b789ec8aSmrg# Convert file name ARG from *nix to Cygwin format.  Requires Cygwin installed
1764b789ec8aSmrg# in a wine environment, working winepath, and LT_CYGPATH set.  Returns result
1765b789ec8aSmrg# in func_to_host_file_result.
1766b789ec8aSmrgfunc_convert_file_nix_to_cygwin ()
1767b789ec8aSmrg{
17680eb1301bSmrg  $opt_debug
17690eb1301bSmrg  func_to_host_file_result="$1"
1770b789ec8aSmrg  if test -n "$1"; then
1771b789ec8aSmrg    # convert from *nix to w32, then use cygpath to convert from w32 to cygwin.
1772b789ec8aSmrg    func_convert_core_file_wine_to_w32 "$1"
1773b789ec8aSmrg    func_cygpath -u "$func_convert_core_file_wine_to_w32_result"
17740eb1301bSmrg    func_to_host_file_result="$func_cygpath_result"
1775b789ec8aSmrg  fi
1776b789ec8aSmrg  func_convert_file_check "$1" "$func_to_host_file_result"
1777b789ec8aSmrg}
1778b789ec8aSmrg# end func_convert_file_nix_to_cygwin
1779b789ec8aSmrg
1780b789ec8aSmrg
1781b789ec8aSmrg#############################################
1782b789ec8aSmrg# $build to $host PATH CONVERSION FUNCTIONS #
1783b789ec8aSmrg#############################################
17840eb1301bSmrg# invoked via `$to_host_path_cmd ARG'
1785b789ec8aSmrg#
1786b789ec8aSmrg# In each case, ARG is the path to be converted from $build to $host format.
1787b789ec8aSmrg# The result will be available in $func_to_host_path_result.
1788b789ec8aSmrg#
1789b789ec8aSmrg# Path separators are also converted from $build format to $host format.  If
1790b789ec8aSmrg# ARG begins or ends with a path separator character, it is preserved (but
1791b789ec8aSmrg# converted to $host format) on output.
1792b789ec8aSmrg#
1793b789ec8aSmrg# All path conversion functions are named using the following convention:
1794b789ec8aSmrg#   file name conversion function    : func_convert_file_X_to_Y ()
1795b789ec8aSmrg#   path conversion function         : func_convert_path_X_to_Y ()
1796b789ec8aSmrg# where, for any given $build/$host combination the 'X_to_Y' value is the
1797b789ec8aSmrg# same.  If conversion functions are added for new $build/$host combinations,
1798b789ec8aSmrg# the two new functions must follow this pattern, or func_init_to_host_path_cmd
1799b789ec8aSmrg# will break.
1800b789ec8aSmrg
1801b789ec8aSmrg
1802b789ec8aSmrg# func_init_to_host_path_cmd
1803b789ec8aSmrg# Ensures that function "pointer" variable $to_host_path_cmd is set to the
1804b789ec8aSmrg# appropriate value, based on the value of $to_host_file_cmd.
1805b789ec8aSmrgto_host_path_cmd=
1806b789ec8aSmrgfunc_init_to_host_path_cmd ()
1807b789ec8aSmrg{
18080eb1301bSmrg  $opt_debug
1809b789ec8aSmrg  if test -z "$to_host_path_cmd"; then
1810b789ec8aSmrg    func_stripname 'func_convert_file_' '' "$to_host_file_cmd"
18110eb1301bSmrg    to_host_path_cmd="func_convert_path_${func_stripname_result}"
1812b789ec8aSmrg  fi
1813b789ec8aSmrg}
1814b789ec8aSmrg
1815b789ec8aSmrg
1816b789ec8aSmrg# func_to_host_path ARG
1817b789ec8aSmrg# Converts the path ARG from $build format to $host format. Return result
1818b789ec8aSmrg# in func_to_host_path_result.
1819b789ec8aSmrgfunc_to_host_path ()
1820b789ec8aSmrg{
18210eb1301bSmrg  $opt_debug
1822b789ec8aSmrg  func_init_to_host_path_cmd
1823b789ec8aSmrg  $to_host_path_cmd "$1"
1824b789ec8aSmrg}
1825b789ec8aSmrg# end func_to_host_path
1826b789ec8aSmrg
1827b789ec8aSmrg
1828b789ec8aSmrg# func_convert_path_noop ARG
1829b789ec8aSmrg# Copy ARG to func_to_host_path_result.
1830b789ec8aSmrgfunc_convert_path_noop ()
1831b789ec8aSmrg{
18320eb1301bSmrg  func_to_host_path_result="$1"
1833b789ec8aSmrg}
1834b789ec8aSmrg# end func_convert_path_noop
1835b789ec8aSmrg
1836b789ec8aSmrg
1837b789ec8aSmrg# func_convert_path_msys_to_w32 ARG
1838b789ec8aSmrg# Convert path ARG from (mingw) MSYS to (mingw) w32 format; automatic
1839b789ec8aSmrg# conversion to w32 is not available inside the cwrapper.  Returns result in
1840b789ec8aSmrg# func_to_host_path_result.
1841b789ec8aSmrgfunc_convert_path_msys_to_w32 ()
1842c27c18e8Smrg{
18430eb1301bSmrg  $opt_debug
18440eb1301bSmrg  func_to_host_path_result="$1"
1845b789ec8aSmrg  if test -n "$1"; then
1846b789ec8aSmrg    # Remove leading and trailing path separator characters from ARG.  MSYS
1847b789ec8aSmrg    # behavior is inconsistent here; cygpath turns them into '.;' and ';.';
1848b789ec8aSmrg    # and winepath ignores them completely.
1849b789ec8aSmrg    func_stripname : : "$1"
1850b789ec8aSmrg    func_to_host_path_tmp1=$func_stripname_result
1851b789ec8aSmrg    func_convert_core_msys_to_w32 "$func_to_host_path_tmp1"
18520eb1301bSmrg    func_to_host_path_result="$func_convert_core_msys_to_w32_result"
1853b789ec8aSmrg    func_convert_path_check : ";" \
1854b789ec8aSmrg      "$func_to_host_path_tmp1" "$func_to_host_path_result"
1855b789ec8aSmrg    func_convert_path_front_back_pathsep ":*" "*:" ";" "$1"
1856b789ec8aSmrg  fi
1857b789ec8aSmrg}
1858b789ec8aSmrg# end func_convert_path_msys_to_w32
1859c27c18e8Smrg
1860c27c18e8Smrg
1861b789ec8aSmrg# func_convert_path_cygwin_to_w32 ARG
1862b789ec8aSmrg# Convert path ARG from Cygwin to w32 format.  Returns result in
1863b789ec8aSmrg# func_to_host_file_result.
1864b789ec8aSmrgfunc_convert_path_cygwin_to_w32 ()
1865b789ec8aSmrg{
18660eb1301bSmrg  $opt_debug
18670eb1301bSmrg  func_to_host_path_result="$1"
1868b789ec8aSmrg  if test -n "$1"; then
1869b789ec8aSmrg    # See func_convert_path_msys_to_w32:
1870b789ec8aSmrg    func_stripname : : "$1"
1871b789ec8aSmrg    func_to_host_path_tmp1=$func_stripname_result
1872b789ec8aSmrg    func_to_host_path_result=`cygpath -m -p "$func_to_host_path_tmp1"`
1873b789ec8aSmrg    func_convert_path_check : ";" \
1874b789ec8aSmrg      "$func_to_host_path_tmp1" "$func_to_host_path_result"
1875b789ec8aSmrg    func_convert_path_front_back_pathsep ":*" "*:" ";" "$1"
1876b789ec8aSmrg  fi
1877b789ec8aSmrg}
1878b789ec8aSmrg# end func_convert_path_cygwin_to_w32
1879c27c18e8Smrg
1880c27c18e8Smrg
1881b789ec8aSmrg# func_convert_path_nix_to_w32 ARG
1882b789ec8aSmrg# Convert path ARG from *nix to w32 format.  Requires a wine environment and
1883b789ec8aSmrg# a working winepath.  Returns result in func_to_host_file_result.
1884b789ec8aSmrgfunc_convert_path_nix_to_w32 ()
1885b789ec8aSmrg{
18860eb1301bSmrg  $opt_debug
18870eb1301bSmrg  func_to_host_path_result="$1"
1888b789ec8aSmrg  if test -n "$1"; then
1889b789ec8aSmrg    # See func_convert_path_msys_to_w32:
1890b789ec8aSmrg    func_stripname : : "$1"
1891b789ec8aSmrg    func_to_host_path_tmp1=$func_stripname_result
1892b789ec8aSmrg    func_convert_core_path_wine_to_w32 "$func_to_host_path_tmp1"
18930eb1301bSmrg    func_to_host_path_result="$func_convert_core_path_wine_to_w32_result"
1894b789ec8aSmrg    func_convert_path_check : ";" \
1895b789ec8aSmrg      "$func_to_host_path_tmp1" "$func_to_host_path_result"
1896b789ec8aSmrg    func_convert_path_front_back_pathsep ":*" "*:" ";" "$1"
1897b789ec8aSmrg  fi
1898b789ec8aSmrg}
1899b789ec8aSmrg# end func_convert_path_nix_to_w32
1900c27c18e8Smrg
1901b789ec8aSmrg
1902b789ec8aSmrg# func_convert_path_msys_to_cygwin ARG
1903b789ec8aSmrg# Convert path ARG from MSYS to Cygwin format.  Requires LT_CYGPATH set.
1904b789ec8aSmrg# Returns result in func_to_host_file_result.
1905b789ec8aSmrgfunc_convert_path_msys_to_cygwin ()
1906b789ec8aSmrg{
19070eb1301bSmrg  $opt_debug
19080eb1301bSmrg  func_to_host_path_result="$1"
1909b789ec8aSmrg  if test -n "$1"; then
1910b789ec8aSmrg    # See func_convert_path_msys_to_w32:
1911b789ec8aSmrg    func_stripname : : "$1"
1912b789ec8aSmrg    func_to_host_path_tmp1=$func_stripname_result
1913b789ec8aSmrg    func_convert_core_msys_to_w32 "$func_to_host_path_tmp1"
1914b789ec8aSmrg    func_cygpath -u -p "$func_convert_core_msys_to_w32_result"
19150eb1301bSmrg    func_to_host_path_result="$func_cygpath_result"
1916b789ec8aSmrg    func_convert_path_check : : \
1917b789ec8aSmrg      "$func_to_host_path_tmp1" "$func_to_host_path_result"
1918b789ec8aSmrg    func_convert_path_front_back_pathsep ":*" "*:" : "$1"
1919b789ec8aSmrg  fi
1920b789ec8aSmrg}
1921b789ec8aSmrg# end func_convert_path_msys_to_cygwin
1922b789ec8aSmrg
1923b789ec8aSmrg
1924b789ec8aSmrg# func_convert_path_nix_to_cygwin ARG
1925b789ec8aSmrg# Convert path ARG from *nix to Cygwin format.  Requires Cygwin installed in a
1926b789ec8aSmrg# a wine environment, working winepath, and LT_CYGPATH set.  Returns result in
1927b789ec8aSmrg# func_to_host_file_result.
1928b789ec8aSmrgfunc_convert_path_nix_to_cygwin ()
1929b789ec8aSmrg{
19300eb1301bSmrg  $opt_debug
19310eb1301bSmrg  func_to_host_path_result="$1"
1932b789ec8aSmrg  if test -n "$1"; then
1933b789ec8aSmrg    # Remove leading and trailing path separator characters from
1934b789ec8aSmrg    # ARG. msys behavior is inconsistent here, cygpath turns them
1935b789ec8aSmrg    # into '.;' and ';.', and winepath ignores them completely.
1936b789ec8aSmrg    func_stripname : : "$1"
1937b789ec8aSmrg    func_to_host_path_tmp1=$func_stripname_result
1938b789ec8aSmrg    func_convert_core_path_wine_to_w32 "$func_to_host_path_tmp1"
1939b789ec8aSmrg    func_cygpath -u -p "$func_convert_core_path_wine_to_w32_result"
19400eb1301bSmrg    func_to_host_path_result="$func_cygpath_result"
1941b789ec8aSmrg    func_convert_path_check : : \
1942b789ec8aSmrg      "$func_to_host_path_tmp1" "$func_to_host_path_result"
1943b789ec8aSmrg    func_convert_path_front_back_pathsep ":*" "*:" : "$1"
1944b789ec8aSmrg  fi
1945c27c18e8Smrg}
1946b789ec8aSmrg# end func_convert_path_nix_to_cygwin
1947b789ec8aSmrg
1948c27c18e8Smrg
1949c27c18e8Smrg# func_mode_compile arg...
1950c27c18e8Smrgfunc_mode_compile ()
1951c27c18e8Smrg{
19520eb1301bSmrg    $opt_debug
1953c27c18e8Smrg    # Get the compilation command and the source file.
1954c27c18e8Smrg    base_compile=
19550eb1301bSmrg    srcfile="$nonopt"  #  always keep a non-empty value in "srcfile"
1956c27c18e8Smrg    suppress_opt=yes
1957c27c18e8Smrg    suppress_output=
1958c27c18e8Smrg    arg_mode=normal
1959c27c18e8Smrg    libobj=
1960c27c18e8Smrg    later=
1961c27c18e8Smrg    pie_flag=
1962c27c18e8Smrg
1963c27c18e8Smrg    for arg
1964c27c18e8Smrg    do
1965c27c18e8Smrg      case $arg_mode in
1966c27c18e8Smrg      arg  )
1967c27c18e8Smrg	# do not "continue".  Instead, add this to base_compile
19680eb1301bSmrg	lastarg="$arg"
1969c27c18e8Smrg	arg_mode=normal
1970c27c18e8Smrg	;;
1971c27c18e8Smrg
1972c27c18e8Smrg      target )
19730eb1301bSmrg	libobj="$arg"
1974c27c18e8Smrg	arg_mode=normal
1975c27c18e8Smrg	continue
1976c27c18e8Smrg	;;
1977c27c18e8Smrg
1978c27c18e8Smrg      normal )
1979c27c18e8Smrg	# Accept any command-line options.
1980c27c18e8Smrg	case $arg in
1981c27c18e8Smrg	-o)
1982c27c18e8Smrg	  test -n "$libobj" && \
19830eb1301bSmrg	    func_fatal_error "you cannot specify \`-o' more than once"
1984c27c18e8Smrg	  arg_mode=target
1985c27c18e8Smrg	  continue
1986c27c18e8Smrg	  ;;
1987c27c18e8Smrg
1988c27c18e8Smrg	-pie | -fpie | -fPIE)
1989b789ec8aSmrg          func_append pie_flag " $arg"
1990c27c18e8Smrg	  continue
1991c27c18e8Smrg	  ;;
1992c27c18e8Smrg
1993c27c18e8Smrg	-shared | -static | -prefer-pic | -prefer-non-pic)
1994b789ec8aSmrg	  func_append later " $arg"
1995c27c18e8Smrg	  continue
1996c27c18e8Smrg	  ;;
1997c27c18e8Smrg
1998c27c18e8Smrg	-no-suppress)
1999c43cc173Smrg	  suppress_opt=no
2000c43cc173Smrg	  continue
2001c43cc173Smrg	  ;;
2002c43cc173Smrg
2003c43cc173Smrg	-Xcompiler)
2004c43cc173Smrg	  arg_mode=arg  #  the next one goes into the "base_compile" arg list
2005c43cc173Smrg	  continue      #  The current "srcfile" will either be retained or
2006c43cc173Smrg	  ;;            #  replaced later.  I would guess that would be a bug.
2007c43cc173Smrg
2008c43cc173Smrg	-Wc,*)
2009c27c18e8Smrg	  func_stripname '-Wc,' '' "$arg"
2010c27c18e8Smrg	  args=$func_stripname_result
2011c43cc173Smrg	  lastarg=
20120eb1301bSmrg	  save_ifs="$IFS"; IFS=','
2013c27c18e8Smrg	  for arg in $args; do
20140eb1301bSmrg	    IFS="$save_ifs"
2015b789ec8aSmrg	    func_append_quoted lastarg "$arg"
2016c43cc173Smrg	  done
20170eb1301bSmrg	  IFS="$save_ifs"
2018c27c18e8Smrg	  func_stripname ' ' '' "$lastarg"
2019c27c18e8Smrg	  lastarg=$func_stripname_result
2020c43cc173Smrg
2021c43cc173Smrg	  # Add the arguments to base_compile.
2022b789ec8aSmrg	  func_append base_compile " $lastarg"
2023c43cc173Smrg	  continue
2024c43cc173Smrg	  ;;
2025c43cc173Smrg
2026c27c18e8Smrg	*)
2027c43cc173Smrg	  # Accept the current argument as the source file.
2028c43cc173Smrg	  # The previous "srcfile" becomes the current argument.
2029c43cc173Smrg	  #
20300eb1301bSmrg	  lastarg="$srcfile"
20310eb1301bSmrg	  srcfile="$arg"
2032c43cc173Smrg	  ;;
2033c43cc173Smrg	esac  #  case $arg
2034c43cc173Smrg	;;
2035c43cc173Smrg      esac    #  case $arg_mode
2036c43cc173Smrg
2037c43cc173Smrg      # Aesthetically quote the previous argument.
2038b789ec8aSmrg      func_append_quoted base_compile "$lastarg"
2039c43cc173Smrg    done # for arg
2040c43cc173Smrg
2041c43cc173Smrg    case $arg_mode in
2042c43cc173Smrg    arg)
2043c27c18e8Smrg      func_fatal_error "you must specify an argument for -Xcompile"
2044c43cc173Smrg      ;;
2045c43cc173Smrg    target)
20460eb1301bSmrg      func_fatal_error "you must specify a target with \`-o'"
2047c43cc173Smrg      ;;
2048c43cc173Smrg    *)
2049c43cc173Smrg      # Get the name of the library object.
2050c27c18e8Smrg      test -z "$libobj" && {
2051c27c18e8Smrg	func_basename "$srcfile"
20520eb1301bSmrg	libobj="$func_basename_result"
2053c27c18e8Smrg      }
2054c43cc173Smrg      ;;
2055c43cc173Smrg    esac
2056c43cc173Smrg
2057c43cc173Smrg    # Recognize several different file suffixes.
2058c43cc173Smrg    # If the user specifies -o file.o, it is replaced with file.lo
2059c43cc173Smrg    case $libobj in
2060c27c18e8Smrg    *.[cCFSifmso] | \
2061c27c18e8Smrg    *.ada | *.adb | *.ads | *.asm | \
2062c27c18e8Smrg    *.c++ | *.cc | *.ii | *.class | *.cpp | *.cxx | \
2063f1ee322dSmrg    *.[fF][09]? | *.for | *.java | *.go | *.obj | *.sx | *.cu | *.cup)
2064c27c18e8Smrg      func_xform "$libobj"
2065c27c18e8Smrg      libobj=$func_xform_result
2066c27c18e8Smrg      ;;
2067c43cc173Smrg    esac
2068c43cc173Smrg
2069c43cc173Smrg    case $libobj in
2070c27c18e8Smrg    *.lo) func_lo2o "$libobj"; obj=$func_lo2o_result ;;
2071c43cc173Smrg    *)
20720eb1301bSmrg      func_fatal_error "cannot determine name of library object from \`$libobj'"
2073c43cc173Smrg      ;;
2074c43cc173Smrg    esac
2075c43cc173Smrg
2076c43cc173Smrg    func_infer_tag $base_compile
2077c43cc173Smrg
2078c43cc173Smrg    for arg in $later; do
2079c43cc173Smrg      case $arg in
2080c27c18e8Smrg      -shared)
20810eb1301bSmrg	test "$build_libtool_libs" != yes && \
20820eb1301bSmrg	  func_fatal_configuration "can not build a shared library"
2083c27c18e8Smrg	build_old_libs=no
2084c27c18e8Smrg	continue
2085c27c18e8Smrg	;;
2086c27c18e8Smrg
2087c43cc173Smrg      -static)
2088c27c18e8Smrg	build_libtool_libs=no
2089c43cc173Smrg	build_old_libs=yes
2090c43cc173Smrg	continue
2091c43cc173Smrg	;;
2092c43cc173Smrg
2093c43cc173Smrg      -prefer-pic)
2094c43cc173Smrg	pic_mode=yes
2095c43cc173Smrg	continue
2096c43cc173Smrg	;;
2097c43cc173Smrg
2098c43cc173Smrg      -prefer-non-pic)
2099c43cc173Smrg	pic_mode=no
2100c43cc173Smrg	continue
2101c43cc173Smrg	;;
2102c43cc173Smrg      esac
2103c43cc173Smrg    done
2104c43cc173Smrg
2105c27c18e8Smrg    func_quote_for_eval "$libobj"
2106c27c18e8Smrg    test "X$libobj" != "X$func_quote_for_eval_result" \
2107c27c18e8Smrg      && $ECHO "X$libobj" | $GREP '[]~#^*{};<>?"'"'"'	 &()|`$[]' \
21080eb1301bSmrg      && func_warning "libobj name \`$libobj' may not contain shell special characters."
2109c27c18e8Smrg    func_dirname_and_basename "$obj" "/" ""
21100eb1301bSmrg    objname="$func_basename_result"
21110eb1301bSmrg    xdir="$func_dirname_result"
21120eb1301bSmrg    lobj=${xdir}$objdir/$objname
2113c43cc173Smrg
2114c27c18e8Smrg    test -z "$base_compile" && \
2115c27c18e8Smrg      func_fatal_help "you must specify a compilation command"
2116c43cc173Smrg
2117c43cc173Smrg    # Delete any leftover library objects.
21180eb1301bSmrg    if test "$build_old_libs" = yes; then
2119c43cc173Smrg      removelist="$obj $lobj $libobj ${libobj}T"
2120c43cc173Smrg    else
2121c43cc173Smrg      removelist="$lobj $libobj ${libobj}T"
2122c43cc173Smrg    fi
2123c43cc173Smrg
2124c43cc173Smrg    # On Cygwin there's no "real" PIC flag so we must build both object types
2125c43cc173Smrg    case $host_os in
2126c27c18e8Smrg    cygwin* | mingw* | pw32* | os2* | cegcc*)
2127c43cc173Smrg      pic_mode=default
2128c43cc173Smrg      ;;
2129c43cc173Smrg    esac
21300eb1301bSmrg    if test "$pic_mode" = no && test "$deplibs_check_method" != pass_all; then
2131c43cc173Smrg      # non-PIC code in shared libraries is not supported
2132c43cc173Smrg      pic_mode=default
2133c43cc173Smrg    fi
2134c43cc173Smrg
2135c43cc173Smrg    # Calculate the filename of the output object if compiler does
2136c43cc173Smrg    # not support -o with -c
21370eb1301bSmrg    if test "$compiler_c_o" = no; then
21380eb1301bSmrg      output_obj=`$ECHO "$srcfile" | $SED 's%^.*/%%; s%\.[^.]*$%%'`.${objext}
21390eb1301bSmrg      lockfile="$output_obj.lock"
2140c43cc173Smrg    else
2141c43cc173Smrg      output_obj=
2142c43cc173Smrg      need_locks=no
2143c43cc173Smrg      lockfile=
2144c43cc173Smrg    fi
2145c43cc173Smrg
2146c43cc173Smrg    # Lock this critical section if it is needed
2147c43cc173Smrg    # We use this script file to make the link, it avoids creating a new file
21480eb1301bSmrg    if test "$need_locks" = yes; then
2149c27c18e8Smrg      until $opt_dry_run || ln "$progpath" "$lockfile" 2>/dev/null; do
2150c27c18e8Smrg	func_echo "Waiting for $lockfile to be removed"
2151c43cc173Smrg	sleep 2
2152c43cc173Smrg      done
21530eb1301bSmrg    elif test "$need_locks" = warn; then
2154c43cc173Smrg      if test -f "$lockfile"; then
2155c27c18e8Smrg	$ECHO "\
2156c43cc173Smrg*** ERROR, $lockfile exists and contains:
2157c43cc173Smrg`cat $lockfile 2>/dev/null`
2158c43cc173Smrg
2159c43cc173SmrgThis indicates that another process is trying to use the same
2160c43cc173Smrgtemporary object file, and libtool could not work around it because
21610eb1301bSmrgyour compiler does not support \`-c' and \`-o' together.  If you
2162c43cc173Smrgrepeat this compilation, it may succeed, by chance, but you had better
2163c43cc173Smrgavoid parallel builds (make -j) in this platform, or get a better
2164c43cc173Smrgcompiler."
2165c43cc173Smrg
2166c27c18e8Smrg	$opt_dry_run || $RM $removelist
2167c43cc173Smrg	exit $EXIT_FAILURE
2168c43cc173Smrg      fi
2169b789ec8aSmrg      func_append removelist " $output_obj"
2170c27c18e8Smrg      $ECHO "$srcfile" > "$lockfile"
2171c43cc173Smrg    fi
2172c43cc173Smrg
2173c27c18e8Smrg    $opt_dry_run || $RM $removelist
2174b789ec8aSmrg    func_append removelist " $lockfile"
2175c27c18e8Smrg    trap '$opt_dry_run || $RM $removelist; exit $EXIT_FAILURE' 1 2 15
2176c27c18e8Smrg
2177b789ec8aSmrg    func_to_tool_file "$srcfile" func_convert_file_msys_to_w32
2178b789ec8aSmrg    srcfile=$func_to_tool_file_result
2179c27c18e8Smrg    func_quote_for_eval "$srcfile"
2180c27c18e8Smrg    qsrcfile=$func_quote_for_eval_result
2181c43cc173Smrg
2182c43cc173Smrg    # Only build a PIC object if we are building libtool libraries.
21830eb1301bSmrg    if test "$build_libtool_libs" = yes; then
2184c43cc173Smrg      # Without this assignment, base_compile gets emptied.
2185c43cc173Smrg      fbsd_hideous_sh_bug=$base_compile
2186c43cc173Smrg
21870eb1301bSmrg      if test "$pic_mode" != no; then
2188c43cc173Smrg	command="$base_compile $qsrcfile $pic_flag"
2189c43cc173Smrg      else
2190c43cc173Smrg	# Don't build PIC code
2191c43cc173Smrg	command="$base_compile $qsrcfile"
2192c43cc173Smrg      fi
2193c43cc173Smrg
2194c27c18e8Smrg      func_mkdir_p "$xdir$objdir"
2195c43cc173Smrg
2196c43cc173Smrg      if test -z "$output_obj"; then
2197c43cc173Smrg	# Place PIC objects in $objdir
2198b789ec8aSmrg	func_append command " -o $lobj"
2199c43cc173Smrg      fi
2200c43cc173Smrg
2201c27c18e8Smrg      func_show_eval_locale "$command"	\
2202c27c18e8Smrg          'test -n "$output_obj" && $RM $removelist; exit $EXIT_FAILURE'
2203c43cc173Smrg
22040eb1301bSmrg      if test "$need_locks" = warn &&
2205c43cc173Smrg	 test "X`cat $lockfile 2>/dev/null`" != "X$srcfile"; then
2206c27c18e8Smrg	$ECHO "\
2207c43cc173Smrg*** ERROR, $lockfile contains:
2208c43cc173Smrg`cat $lockfile 2>/dev/null`
2209c43cc173Smrg
2210c43cc173Smrgbut it should contain:
2211c43cc173Smrg$srcfile
2212c43cc173Smrg
2213c43cc173SmrgThis indicates that another process is trying to use the same
2214c43cc173Smrgtemporary object file, and libtool could not work around it because
22150eb1301bSmrgyour compiler does not support \`-c' and \`-o' together.  If you
2216c43cc173Smrgrepeat this compilation, it may succeed, by chance, but you had better
2217c43cc173Smrgavoid parallel builds (make -j) in this platform, or get a better
2218c43cc173Smrgcompiler."
2219c43cc173Smrg
2220c27c18e8Smrg	$opt_dry_run || $RM $removelist
2221c43cc173Smrg	exit $EXIT_FAILURE
2222c43cc173Smrg      fi
2223c43cc173Smrg
2224c43cc173Smrg      # Just move the object if needed, then go on to compile the next one
2225c43cc173Smrg      if test -n "$output_obj" && test "X$output_obj" != "X$lobj"; then
2226c27c18e8Smrg	func_show_eval '$MV "$output_obj" "$lobj"' \
2227c27c18e8Smrg	  'error=$?; $opt_dry_run || $RM $removelist; exit $error'
2228c43cc173Smrg      fi
2229c43cc173Smrg
2230c43cc173Smrg      # Allow error messages only from the first compilation.
22310eb1301bSmrg      if test "$suppress_opt" = yes; then
2232c27c18e8Smrg	suppress_output=' >/dev/null 2>&1'
2233c43cc173Smrg      fi
2234c43cc173Smrg    fi
2235c43cc173Smrg
2236c43cc173Smrg    # Only build a position-dependent object if we build old libraries.
22370eb1301bSmrg    if test "$build_old_libs" = yes; then
22380eb1301bSmrg      if test "$pic_mode" != yes; then
2239c43cc173Smrg	# Don't build PIC code
2240c27c18e8Smrg	command="$base_compile $qsrcfile$pie_flag"
2241c43cc173Smrg      else
2242c43cc173Smrg	command="$base_compile $qsrcfile $pic_flag"
2243c43cc173Smrg      fi
22440eb1301bSmrg      if test "$compiler_c_o" = yes; then
2245b789ec8aSmrg	func_append command " -o $obj"
2246c43cc173Smrg      fi
2247c43cc173Smrg
2248c43cc173Smrg      # Suppress compiler output if we already did a PIC compilation.
2249b789ec8aSmrg      func_append command "$suppress_output"
2250c27c18e8Smrg      func_show_eval_locale "$command" \
2251c27c18e8Smrg        '$opt_dry_run || $RM $removelist; exit $EXIT_FAILURE'
2252c43cc173Smrg
22530eb1301bSmrg      if test "$need_locks" = warn &&
2254c43cc173Smrg	 test "X`cat $lockfile 2>/dev/null`" != "X$srcfile"; then
2255c27c18e8Smrg	$ECHO "\
2256c43cc173Smrg*** ERROR, $lockfile contains:
2257c43cc173Smrg`cat $lockfile 2>/dev/null`
2258c43cc173Smrg
2259c43cc173Smrgbut it should contain:
2260c43cc173Smrg$srcfile
2261c43cc173Smrg
2262c43cc173SmrgThis indicates that another process is trying to use the same
2263c43cc173Smrgtemporary object file, and libtool could not work around it because
22640eb1301bSmrgyour compiler does not support \`-c' and \`-o' together.  If you
2265c43cc173Smrgrepeat this compilation, it may succeed, by chance, but you had better
2266c43cc173Smrgavoid parallel builds (make -j) in this platform, or get a better
2267c43cc173Smrgcompiler."
2268c43cc173Smrg
2269c27c18e8Smrg	$opt_dry_run || $RM $removelist
2270c43cc173Smrg	exit $EXIT_FAILURE
2271c43cc173Smrg      fi
2272c43cc173Smrg
2273c43cc173Smrg      # Just move the object if needed
2274c43cc173Smrg      if test -n "$output_obj" && test "X$output_obj" != "X$obj"; then
2275c27c18e8Smrg	func_show_eval '$MV "$output_obj" "$obj"' \
2276c27c18e8Smrg	  'error=$?; $opt_dry_run || $RM $removelist; exit $error'
2277c43cc173Smrg      fi
2278c43cc173Smrg    fi
2279c43cc173Smrg
2280c27c18e8Smrg    $opt_dry_run || {
2281c27c18e8Smrg      func_write_libtool_object "$libobj" "$objdir/$objname" "$objname"
2282c43cc173Smrg
2283c27c18e8Smrg      # Unlock the critical section if it was locked
22840eb1301bSmrg      if test "$need_locks" != no; then
2285c27c18e8Smrg	removelist=$lockfile
2286c27c18e8Smrg        $RM "$lockfile"
2287c27c18e8Smrg      fi
2288c27c18e8Smrg    }
2289c43cc173Smrg
2290c43cc173Smrg    exit $EXIT_SUCCESS
2291c27c18e8Smrg}
2292c43cc173Smrg
2293c27c18e8Smrg$opt_help || {
22940eb1301bSmrg  test "$opt_mode" = compile && func_mode_compile ${1+"$@"}
2295c27c18e8Smrg}
2296c43cc173Smrg
2297c27c18e8Smrgfunc_mode_help ()
2298c27c18e8Smrg{
2299c27c18e8Smrg    # We need to display help for each of the modes.
2300b789ec8aSmrg    case $opt_mode in
2301c27c18e8Smrg      "")
2302c27c18e8Smrg        # Generic help is extracted from the usage comments
2303c27c18e8Smrg        # at the start of this file.
2304c27c18e8Smrg        func_help
2305c27c18e8Smrg        ;;
2306c43cc173Smrg
2307c27c18e8Smrg      clean)
2308c27c18e8Smrg        $ECHO \
2309c27c18e8Smrg"Usage: $progname [OPTION]... --mode=clean RM [RM-OPTION]... FILE...
2310c43cc173Smrg
2311c27c18e8SmrgRemove files from the build directory.
2312c43cc173Smrg
2313c27c18e8SmrgRM is the name of the program to use to delete files associated with each FILE
23140eb1301bSmrg(typically \`/bin/rm').  RM-OPTIONS are options (such as \`-f') to be passed
2315c27c18e8Smrgto RM.
2316c43cc173Smrg
2317c27c18e8SmrgIf FILE is a libtool library, object or program, all the files associated
2318c27c18e8Smrgwith it are deleted. Otherwise, only FILE itself is deleted using RM."
2319c27c18e8Smrg        ;;
2320c43cc173Smrg
2321c27c18e8Smrg      compile)
2322c27c18e8Smrg      $ECHO \
2323c27c18e8Smrg"Usage: $progname [OPTION]... --mode=compile COMPILE-COMMAND... SOURCEFILE
2324c43cc173Smrg
2325c27c18e8SmrgCompile a source file into a libtool library object.
2326c43cc173Smrg
2327c27c18e8SmrgThis mode accepts the following additional options:
2328c43cc173Smrg
2329c27c18e8Smrg  -o OUTPUT-FILE    set the output file name to OUTPUT-FILE
2330c27c18e8Smrg  -no-suppress      do not suppress compiler output for multiple passes
233137eb1ca1Smrg  -prefer-pic       try to build PIC objects only
233237eb1ca1Smrg  -prefer-non-pic   try to build non-PIC objects only
23330eb1301bSmrg  -shared           do not build a \`.o' file suitable for static linking
23340eb1301bSmrg  -static           only build a \`.o' file suitable for static linking
233537eb1ca1Smrg  -Wc,FLAG          pass FLAG directly to the compiler
2336c43cc173Smrg
23370eb1301bSmrgCOMPILE-COMMAND is a command to be used in creating a \`standard' object file
2338c27c18e8Smrgfrom the given SOURCEFILE.
2339c43cc173Smrg
2340c27c18e8SmrgThe output file name is determined by removing the directory component from
23410eb1301bSmrgSOURCEFILE, then substituting the C source code suffix \`.c' with the
23420eb1301bSmrglibrary object suffix, \`.lo'."
2343c27c18e8Smrg        ;;
2344c43cc173Smrg
2345c27c18e8Smrg      execute)
2346c27c18e8Smrg        $ECHO \
2347c27c18e8Smrg"Usage: $progname [OPTION]... --mode=execute COMMAND [ARGS]...
2348c43cc173Smrg
2349c27c18e8SmrgAutomatically set library path, then run a program.
2350c43cc173Smrg
2351c27c18e8SmrgThis mode accepts the following additional options:
2352c43cc173Smrg
2353c27c18e8Smrg  -dlopen FILE      add the directory containing FILE to the library path
2354c43cc173Smrg
23550eb1301bSmrgThis mode sets the library path environment variable according to \`-dlopen'
2356c27c18e8Smrgflags.
2357c43cc173Smrg
2358c27c18e8SmrgIf any of the ARGS are libtool executable wrappers, then they are translated
2359c27c18e8Smrginto their corresponding uninstalled binary, and any of their required library
2360c27c18e8Smrgdirectories are added to the library path.
2361c43cc173Smrg
2362c27c18e8SmrgThen, COMMAND is executed, with ARGS as arguments."
2363c27c18e8Smrg        ;;
2364c43cc173Smrg
2365c27c18e8Smrg      finish)
2366c27c18e8Smrg        $ECHO \
2367c27c18e8Smrg"Usage: $progname [OPTION]... --mode=finish [LIBDIR]...
2368c43cc173Smrg
2369c27c18e8SmrgComplete the installation of libtool libraries.
2370c43cc173Smrg
2371c27c18e8SmrgEach LIBDIR is a directory that contains libtool libraries.
2372c43cc173Smrg
2373c27c18e8SmrgThe commands that this mode executes may require superuser privileges.  Use
23740eb1301bSmrgthe \`--dry-run' option if you just want to see what would be executed."
2375c27c18e8Smrg        ;;
2376c43cc173Smrg
2377c27c18e8Smrg      install)
2378c27c18e8Smrg        $ECHO \
2379c27c18e8Smrg"Usage: $progname [OPTION]... --mode=install INSTALL-COMMAND...
2380c43cc173Smrg
2381c27c18e8SmrgInstall executables or libraries.
2382c43cc173Smrg
2383c27c18e8SmrgINSTALL-COMMAND is the installation command.  The first component should be
23840eb1301bSmrgeither the \`install' or \`cp' program.
2385c43cc173Smrg
2386c27c18e8SmrgThe following components of INSTALL-COMMAND are treated specially:
2387c43cc173Smrg
238837eb1ca1Smrg  -inst-prefix-dir PREFIX-DIR  Use PREFIX-DIR as a staging area for installation
2389c43cc173Smrg
2390c27c18e8SmrgThe rest of the components are interpreted as arguments to that command (only
2391c27c18e8SmrgBSD-compatible install options are recognized)."
2392c27c18e8Smrg        ;;
2393c43cc173Smrg
2394c27c18e8Smrg      link)
2395c27c18e8Smrg        $ECHO \
2396c27c18e8Smrg"Usage: $progname [OPTION]... --mode=link LINK-COMMAND...
2397c43cc173Smrg
2398c27c18e8SmrgLink object files or libraries together to form another library, or to
2399c27c18e8Smrgcreate an executable program.
2400c43cc173Smrg
2401c27c18e8SmrgLINK-COMMAND is a command using the C compiler that you would use to create
2402c27c18e8Smrga program from several object files.
2403c43cc173Smrg
2404c27c18e8SmrgThe following components of LINK-COMMAND are treated specially:
2405c43cc173Smrg
2406c27c18e8Smrg  -all-static       do not do any dynamic linking at all
2407c27c18e8Smrg  -avoid-version    do not add a version suffix if possible
240837eb1ca1Smrg  -bindir BINDIR    specify path to binaries directory (for systems where
240937eb1ca1Smrg                    libraries must be found in the PATH setting at runtime)
24100eb1301bSmrg  -dlopen FILE      \`-dlpreopen' FILE if it cannot be dlopened at runtime
2411c27c18e8Smrg  -dlpreopen FILE   link in FILE and add its symbols to lt_preloaded_symbols
2412c27c18e8Smrg  -export-dynamic   allow symbols from OUTPUT-FILE to be resolved with dlsym(3)
2413c27c18e8Smrg  -export-symbols SYMFILE
2414c27c18e8Smrg                    try to export only the symbols listed in SYMFILE
2415c27c18e8Smrg  -export-symbols-regex REGEX
2416c27c18e8Smrg                    try to export only the symbols matching REGEX
2417c27c18e8Smrg  -LLIBDIR          search LIBDIR for required installed libraries
2418c27c18e8Smrg  -lNAME            OUTPUT-FILE requires the installed library libNAME
2419c27c18e8Smrg  -module           build a library that can dlopened
2420c27c18e8Smrg  -no-fast-install  disable the fast-install mode
2421c27c18e8Smrg  -no-install       link a not-installable executable
2422c27c18e8Smrg  -no-undefined     declare that a library does not refer to external symbols
2423c27c18e8Smrg  -o OUTPUT-FILE    create OUTPUT-FILE from the specified objects
24240eb1301bSmrg  -objectlist FILE  Use a list of object files found in FILE to specify objects
2425c27c18e8Smrg  -precious-files-regex REGEX
2426c27c18e8Smrg                    don't remove output files matching REGEX
2427c27c18e8Smrg  -release RELEASE  specify package release information
2428c27c18e8Smrg  -rpath LIBDIR     the created library will eventually be installed in LIBDIR
2429c27c18e8Smrg  -R[ ]LIBDIR       add LIBDIR to the runtime path of programs and libraries
2430c27c18e8Smrg  -shared           only do dynamic linking of libtool libraries
2431c27c18e8Smrg  -shrext SUFFIX    override the standard shared library file extension
2432c27c18e8Smrg  -static           do not do any dynamic linking of uninstalled libtool libraries
2433c27c18e8Smrg  -static-libtool-libs
2434c27c18e8Smrg                    do not do any dynamic linking of libtool libraries
2435c27c18e8Smrg  -version-info CURRENT[:REVISION[:AGE]]
2436c27c18e8Smrg                    specify library version info [each variable defaults to 0]
2437c27c18e8Smrg  -weak LIBNAME     declare that the target provides the LIBNAME interface
243837eb1ca1Smrg  -Wc,FLAG
243937eb1ca1Smrg  -Xcompiler FLAG   pass linker-specific FLAG directly to the compiler
244037eb1ca1Smrg  -Wl,FLAG
244137eb1ca1Smrg  -Xlinker FLAG     pass linker-specific FLAG directly to the linker
244237eb1ca1Smrg  -XCClinker FLAG   pass link-specific FLAG to the compiler driver (CC)
2443c43cc173Smrg
24440eb1301bSmrgAll other options (arguments beginning with \`-') are ignored.
2445c43cc173Smrg
24460eb1301bSmrgEvery other argument is treated as a filename.  Files ending in \`.la' are
2447c27c18e8Smrgtreated as uninstalled libtool libraries, other files are standard or library
2448c27c18e8Smrgobject files.
2449c43cc173Smrg
24500eb1301bSmrgIf the OUTPUT-FILE ends in \`.la', then a libtool library is created,
24510eb1301bSmrgonly library objects (\`.lo' files) may be specified, and \`-rpath' is
2452c27c18e8Smrgrequired, except when creating a convenience library.
2453c43cc173Smrg
24540eb1301bSmrgIf OUTPUT-FILE ends in \`.a' or \`.lib', then a standard library is created
24550eb1301bSmrgusing \`ar' and \`ranlib', or on Windows using \`lib'.
2456c43cc173Smrg
24570eb1301bSmrgIf OUTPUT-FILE ends in \`.lo' or \`.${objext}', then a reloadable object file
2458c27c18e8Smrgis created, otherwise an executable program is created."
2459c43cc173Smrg        ;;
2460c43cc173Smrg
2461c27c18e8Smrg      uninstall)
2462c27c18e8Smrg        $ECHO \
2463c27c18e8Smrg"Usage: $progname [OPTION]... --mode=uninstall RM [RM-OPTION]... FILE...
2464c43cc173Smrg
2465c27c18e8SmrgRemove libraries from an installation directory.
2466c43cc173Smrg
2467c27c18e8SmrgRM is the name of the program to use to delete files associated with each FILE
24680eb1301bSmrg(typically \`/bin/rm').  RM-OPTIONS are options (such as \`-f') to be passed
2469c27c18e8Smrgto RM.
2470c43cc173Smrg
2471c27c18e8SmrgIf FILE is a libtool library, all the files associated with it are deleted.
2472c27c18e8SmrgOtherwise, only FILE itself is deleted using RM."
2473c27c18e8Smrg        ;;
2474c43cc173Smrg
2475c27c18e8Smrg      *)
24760eb1301bSmrg        func_fatal_help "invalid operation mode \`$opt_mode'"
2477c27c18e8Smrg        ;;
2478c27c18e8Smrg    esac
2479c43cc173Smrg
248037eb1ca1Smrg    echo
24810eb1301bSmrg    $ECHO "Try \`$progname --help' for more information about other modes."
2482c27c18e8Smrg}
2483c43cc173Smrg
248437eb1ca1Smrg# Now that we've collected a possible --mode arg, show help if necessary
248537eb1ca1Smrgif $opt_help; then
24860eb1301bSmrg  if test "$opt_help" = :; then
248737eb1ca1Smrg    func_mode_help
248837eb1ca1Smrg  else
248937eb1ca1Smrg    {
249037eb1ca1Smrg      func_help noexit
2491b789ec8aSmrg      for opt_mode in compile link execute install finish uninstall clean; do
249237eb1ca1Smrg	func_mode_help
249337eb1ca1Smrg      done
24940eb1301bSmrg    } | sed -n '1p; 2,$s/^Usage:/  or: /p'
249537eb1ca1Smrg    {
249637eb1ca1Smrg      func_help noexit
2497b789ec8aSmrg      for opt_mode in compile link execute install finish uninstall clean; do
249837eb1ca1Smrg	echo
249937eb1ca1Smrg	func_mode_help
250037eb1ca1Smrg      done
250137eb1ca1Smrg    } |
25020eb1301bSmrg    sed '1d
250337eb1ca1Smrg      /^When reporting/,/^Report/{
250437eb1ca1Smrg	H
250537eb1ca1Smrg	d
250637eb1ca1Smrg      }
250737eb1ca1Smrg      $x
250837eb1ca1Smrg      /information about other modes/d
250937eb1ca1Smrg      /more detailed .*MODE/d
251037eb1ca1Smrg      s/^Usage:.*--mode=\([^ ]*\) .*/Description of \1 mode:/'
251137eb1ca1Smrg  fi
251237eb1ca1Smrg  exit $?
251337eb1ca1Smrgfi
2514c43cc173Smrg
2515c43cc173Smrg
2516c27c18e8Smrg# func_mode_execute arg...
2517c27c18e8Smrgfunc_mode_execute ()
2518c27c18e8Smrg{
25190eb1301bSmrg    $opt_debug
2520c27c18e8Smrg    # The first argument is the command name.
25210eb1301bSmrg    cmd="$nonopt"
2522c27c18e8Smrg    test -z "$cmd" && \
2523c27c18e8Smrg      func_fatal_help "you must specify a COMMAND"
2524c43cc173Smrg
2525c27c18e8Smrg    # Handle -dlopen flags immediately.
2526b789ec8aSmrg    for file in $opt_dlopen; do
2527c27c18e8Smrg      test -f "$file" \
25280eb1301bSmrg	|| func_fatal_help "\`$file' is not a file"
2529c43cc173Smrg
2530c27c18e8Smrg      dir=
2531c27c18e8Smrg      case $file in
2532c27c18e8Smrg      *.la)
2533b789ec8aSmrg	func_resolve_sysroot "$file"
2534b789ec8aSmrg	file=$func_resolve_sysroot_result
2535b789ec8aSmrg
2536c27c18e8Smrg	# Check to see that this really is a libtool archive.
2537c27c18e8Smrg	func_lalib_unsafe_p "$file" \
25380eb1301bSmrg	  || func_fatal_help "\`$lib' is not a valid libtool archive"
2539c43cc173Smrg
2540c27c18e8Smrg	# Read the libtool library.
2541c27c18e8Smrg	dlname=
2542c27c18e8Smrg	library_names=
2543c27c18e8Smrg	func_source "$file"
2544c43cc173Smrg
2545c27c18e8Smrg	# Skip this library if it cannot be dlopened.
2546c27c18e8Smrg	if test -z "$dlname"; then
2547c27c18e8Smrg	  # Warn if it was a shared library.
2548c27c18e8Smrg	  test -n "$library_names" && \
25490eb1301bSmrg	    func_warning "\`$file' was not linked with \`-export-dynamic'"
2550c27c18e8Smrg	  continue
2551c27c18e8Smrg	fi
2552c43cc173Smrg
2553c27c18e8Smrg	func_dirname "$file" "" "."
25540eb1301bSmrg	dir="$func_dirname_result"
2555c43cc173Smrg
2556c27c18e8Smrg	if test -f "$dir/$objdir/$dlname"; then
2557b789ec8aSmrg	  func_append dir "/$objdir"
2558c27c18e8Smrg	else
2559c27c18e8Smrg	  if test ! -f "$dir/$dlname"; then
25600eb1301bSmrg	    func_fatal_error "cannot find \`$dlname' in \`$dir' or \`$dir/$objdir'"
2561c27c18e8Smrg	  fi
2562c27c18e8Smrg	fi
2563c43cc173Smrg	;;
2564c43cc173Smrg
2565c27c18e8Smrg      *.lo)
2566c27c18e8Smrg	# Just add the directory containing the .lo file.
2567c27c18e8Smrg	func_dirname "$file" "" "."
25680eb1301bSmrg	dir="$func_dirname_result"
2569c43cc173Smrg	;;
2570c43cc173Smrg
2571c27c18e8Smrg      *)
25720eb1301bSmrg	func_warning "\`-dlopen' is ignored for non-libtool libraries and objects"
2573c43cc173Smrg	continue
2574c43cc173Smrg	;;
2575c27c18e8Smrg      esac
2576c43cc173Smrg
2577c27c18e8Smrg      # Get the absolute pathname.
2578c27c18e8Smrg      absdir=`cd "$dir" && pwd`
25790eb1301bSmrg      test -n "$absdir" && dir="$absdir"
2580c43cc173Smrg
2581c27c18e8Smrg      # Now add the directory to shlibpath_var.
2582c27c18e8Smrg      if eval "test -z \"\$$shlibpath_var\""; then
2583c27c18e8Smrg	eval "$shlibpath_var=\"\$dir\""
2584c27c18e8Smrg      else
2585c27c18e8Smrg	eval "$shlibpath_var=\"\$dir:\$$shlibpath_var\""
2586c27c18e8Smrg      fi
2587c27c18e8Smrg    done
2588c43cc173Smrg
2589c27c18e8Smrg    # This variable tells wrapper scripts just to set shlibpath_var
2590c27c18e8Smrg    # rather than running their programs.
25910eb1301bSmrg    libtool_execute_magic="$magic"
2592c43cc173Smrg
2593c27c18e8Smrg    # Check if any of the arguments is a wrapper script.
2594c27c18e8Smrg    args=
2595c27c18e8Smrg    for file
2596c27c18e8Smrg    do
2597c27c18e8Smrg      case $file in
259837eb1ca1Smrg      -* | *.la | *.lo ) ;;
2599c27c18e8Smrg      *)
2600c27c18e8Smrg	# Do a test to see if this is really a libtool program.
2601c27c18e8Smrg	if func_ltwrapper_script_p "$file"; then
2602c27c18e8Smrg	  func_source "$file"
2603c27c18e8Smrg	  # Transform arg to wrapped name.
26040eb1301bSmrg	  file="$progdir/$program"
2605c27c18e8Smrg	elif func_ltwrapper_executable_p "$file"; then
2606c27c18e8Smrg	  func_ltwrapper_scriptname "$file"
2607c27c18e8Smrg	  func_source "$func_ltwrapper_scriptname_result"
2608c27c18e8Smrg	  # Transform arg to wrapped name.
26090eb1301bSmrg	  file="$progdir/$program"
2610c27c18e8Smrg	fi
2611c27c18e8Smrg	;;
2612c27c18e8Smrg      esac
2613c27c18e8Smrg      # Quote arguments (to preserve shell metacharacters).
2614b789ec8aSmrg      func_append_quoted args "$file"
2615c27c18e8Smrg    done
2616c43cc173Smrg
26170eb1301bSmrg    if test "X$opt_dry_run" = Xfalse; then
2618c27c18e8Smrg      if test -n "$shlibpath_var"; then
2619c27c18e8Smrg	# Export the shlibpath_var.
2620c27c18e8Smrg	eval "export $shlibpath_var"
2621c27c18e8Smrg      fi
2622c43cc173Smrg
2623c27c18e8Smrg      # Restore saved environment variables
2624c27c18e8Smrg      for lt_var in LANG LANGUAGE LC_ALL LC_CTYPE LC_COLLATE LC_MESSAGES
2625c27c18e8Smrg      do
2626c27c18e8Smrg	eval "if test \"\${save_$lt_var+set}\" = set; then
2627c27c18e8Smrg                $lt_var=\$save_$lt_var; export $lt_var
2628c43cc173Smrg	      else
2629c27c18e8Smrg		$lt_unset $lt_var
2630c27c18e8Smrg	      fi"
2631c27c18e8Smrg      done
2632c43cc173Smrg
2633c27c18e8Smrg      # Now prepare to actually exec the command.
26340eb1301bSmrg      exec_cmd="\$cmd$args"
26350eb1301bSmrg    else
26360eb1301bSmrg      # Display what would be done.
26370eb1301bSmrg      if test -n "$shlibpath_var"; then
26380eb1301bSmrg	eval "\$ECHO \"\$shlibpath_var=\$$shlibpath_var\""
26390eb1301bSmrg	echo "export $shlibpath_var"
26400eb1301bSmrg      fi
26410eb1301bSmrg      $ECHO "$cmd$args"
26420eb1301bSmrg      exit $EXIT_SUCCESS
2643c27c18e8Smrg    fi
2644c27c18e8Smrg}
2645c43cc173Smrg
26460eb1301bSmrgtest "$opt_mode" = execute && func_mode_execute ${1+"$@"}
2647c43cc173Smrg
2648c43cc173Smrg
2649c27c18e8Smrg# func_mode_finish arg...
2650c27c18e8Smrgfunc_mode_finish ()
2651c27c18e8Smrg{
26520eb1301bSmrg    $opt_debug
2653b789ec8aSmrg    libs=
2654b789ec8aSmrg    libdirs=
2655c27c18e8Smrg    admincmds=
2656c43cc173Smrg
2657b789ec8aSmrg    for opt in "$nonopt" ${1+"$@"}
2658b789ec8aSmrg    do
2659b789ec8aSmrg      if test -d "$opt"; then
2660b789ec8aSmrg	func_append libdirs " $opt"
2661b789ec8aSmrg
2662b789ec8aSmrg      elif test -f "$opt"; then
2663b789ec8aSmrg	if func_lalib_unsafe_p "$opt"; then
2664b789ec8aSmrg	  func_append libs " $opt"
2665b789ec8aSmrg	else
26660eb1301bSmrg	  func_warning "\`$opt' is not a valid libtool archive"
2667b789ec8aSmrg	fi
2668b789ec8aSmrg
2669b789ec8aSmrg      else
26700eb1301bSmrg	func_fatal_error "invalid argument \`$opt'"
2671b789ec8aSmrg      fi
2672b789ec8aSmrg    done
2673b789ec8aSmrg
2674b789ec8aSmrg    if test -n "$libs"; then
2675b789ec8aSmrg      if test -n "$lt_sysroot"; then
2676b789ec8aSmrg        sysroot_regex=`$ECHO "$lt_sysroot" | $SED "$sed_make_literal_regex"`
2677b789ec8aSmrg        sysroot_cmd="s/\([ ']\)$sysroot_regex/\1/g;"
2678b789ec8aSmrg      else
2679b789ec8aSmrg        sysroot_cmd=
2680b789ec8aSmrg      fi
2681b789ec8aSmrg
2682b789ec8aSmrg      # Remove sysroot references
2683b789ec8aSmrg      if $opt_dry_run; then
2684b789ec8aSmrg        for lib in $libs; do
26850eb1301bSmrg          echo "removing references to $lt_sysroot and \`=' prefixes from $lib"
2686b789ec8aSmrg        done
2687b789ec8aSmrg      else
2688b789ec8aSmrg        tmpdir=`func_mktempdir`
2689b789ec8aSmrg        for lib in $libs; do
26900eb1301bSmrg	  sed -e "${sysroot_cmd} s/\([ ']-[LR]\)=/\1/g; s/\([ ']\)=/\1/g" $lib \
2691b789ec8aSmrg	    > $tmpdir/tmp-la
2692b789ec8aSmrg	  mv -f $tmpdir/tmp-la $lib
2693b789ec8aSmrg	done
2694b789ec8aSmrg        ${RM}r "$tmpdir"
2695b789ec8aSmrg      fi
2696b789ec8aSmrg    fi
2697c43cc173Smrg
2698b789ec8aSmrg    if test -n "$finish_cmds$finish_eval" && test -n "$libdirs"; then
2699c27c18e8Smrg      for libdir in $libdirs; do
2700c27c18e8Smrg	if test -n "$finish_cmds"; then
2701c27c18e8Smrg	  # Do each command in the finish commands.
2702c27c18e8Smrg	  func_execute_cmds "$finish_cmds" 'admincmds="$admincmds
2703c27c18e8Smrg'"$cmd"'"'
2704c43cc173Smrg	fi
2705c27c18e8Smrg	if test -n "$finish_eval"; then
2706c27c18e8Smrg	  # Do the single finish_eval.
2707c27c18e8Smrg	  eval cmds=\"$finish_eval\"
2708b789ec8aSmrg	  $opt_dry_run || eval "$cmds" || func_append admincmds "
2709c27c18e8Smrg       $cmds"
2710c27c18e8Smrg	fi
2711c27c18e8Smrg      done
2712c27c18e8Smrg    fi
2713c43cc173Smrg
2714c27c18e8Smrg    # Exit here if they wanted silent mode.
27150eb1301bSmrg    $opt_silent && exit $EXIT_SUCCESS
2716c43cc173Smrg
2717b789ec8aSmrg    if test -n "$finish_cmds$finish_eval" && test -n "$libdirs"; then
2718b789ec8aSmrg      echo "----------------------------------------------------------------------"
2719b789ec8aSmrg      echo "Libraries have been installed in:"
2720b789ec8aSmrg      for libdir in $libdirs; do
2721b789ec8aSmrg	$ECHO "   $libdir"
2722b789ec8aSmrg      done
2723b789ec8aSmrg      echo
2724b789ec8aSmrg      echo "If you ever happen to want to link against installed libraries"
2725b789ec8aSmrg      echo "in a given directory, LIBDIR, you must either use libtool, and"
27260eb1301bSmrg      echo "specify the full pathname of the library, or use the \`-LLIBDIR'"
2727b789ec8aSmrg      echo "flag during linking and do at least one of the following:"
2728b789ec8aSmrg      if test -n "$shlibpath_var"; then
27290eb1301bSmrg	echo "   - add LIBDIR to the \`$shlibpath_var' environment variable"
2730b789ec8aSmrg	echo "     during execution"
2731b789ec8aSmrg      fi
2732b789ec8aSmrg      if test -n "$runpath_var"; then
27330eb1301bSmrg	echo "   - add LIBDIR to the \`$runpath_var' environment variable"
2734b789ec8aSmrg	echo "     during linking"
2735b789ec8aSmrg      fi
2736b789ec8aSmrg      if test -n "$hardcode_libdir_flag_spec"; then
2737b789ec8aSmrg	libdir=LIBDIR
2738b789ec8aSmrg	eval flag=\"$hardcode_libdir_flag_spec\"
2739c43cc173Smrg
27400eb1301bSmrg	$ECHO "   - use the \`$flag' linker flag"
2741b789ec8aSmrg      fi
2742b789ec8aSmrg      if test -n "$admincmds"; then
2743b789ec8aSmrg	$ECHO "   - have your system administrator run these commands:$admincmds"
2744b789ec8aSmrg      fi
2745b789ec8aSmrg      if test -f /etc/ld.so.conf; then
27460eb1301bSmrg	echo "   - have your system administrator add LIBDIR to \`/etc/ld.so.conf'"
2747b789ec8aSmrg      fi
2748b789ec8aSmrg      echo
2749c27c18e8Smrg
2750b789ec8aSmrg      echo "See any operating system documentation about shared libraries for"
2751b789ec8aSmrg      case $host in
2752b789ec8aSmrg	solaris2.[6789]|solaris2.1[0-9])
2753b789ec8aSmrg	  echo "more information, such as the ld(1), crle(1) and ld.so(8) manual"
2754b789ec8aSmrg	  echo "pages."
2755b789ec8aSmrg	  ;;
2756b789ec8aSmrg	*)
2757b789ec8aSmrg	  echo "more information, such as the ld(1) and ld.so(8) manual pages."
2758b789ec8aSmrg	  ;;
2759b789ec8aSmrg      esac
2760b789ec8aSmrg      echo "----------------------------------------------------------------------"
2761b789ec8aSmrg    fi
2762c27c18e8Smrg    exit $EXIT_SUCCESS
2763c27c18e8Smrg}
2764c27c18e8Smrg
27650eb1301bSmrgtest "$opt_mode" = finish && func_mode_finish ${1+"$@"}
2766c27c18e8Smrg
2767c27c18e8Smrg
2768c27c18e8Smrg# func_mode_install arg...
2769c27c18e8Smrgfunc_mode_install ()
2770c27c18e8Smrg{
27710eb1301bSmrg    $opt_debug
2772c27c18e8Smrg    # There may be an optional sh(1) argument at the beginning of
2773c27c18e8Smrg    # install_prog (especially on Windows NT).
27740eb1301bSmrg    if test "$nonopt" = "$SHELL" || test "$nonopt" = /bin/sh ||
2775c27c18e8Smrg       # Allow the use of GNU shtool's install command.
27760eb1301bSmrg       case $nonopt in *shtool*) :;; *) false;; esac; then
2777c27c18e8Smrg      # Aesthetically quote it.
2778c27c18e8Smrg      func_quote_for_eval "$nonopt"
2779c27c18e8Smrg      install_prog="$func_quote_for_eval_result "
2780c27c18e8Smrg      arg=$1
2781c27c18e8Smrg      shift
2782c27c18e8Smrg    else
2783c27c18e8Smrg      install_prog=
2784c27c18e8Smrg      arg=$nonopt
2785c27c18e8Smrg    fi
2786c27c18e8Smrg
2787c27c18e8Smrg    # The real first argument should be the name of the installation program.
2788c27c18e8Smrg    # Aesthetically quote it.
2789c27c18e8Smrg    func_quote_for_eval "$arg"
2790b789ec8aSmrg    func_append install_prog "$func_quote_for_eval_result"
279137eb1ca1Smrg    install_shared_prog=$install_prog
279237eb1ca1Smrg    case " $install_prog " in
279337eb1ca1Smrg      *[\\\ /]cp\ *) install_cp=: ;;
279437eb1ca1Smrg      *) install_cp=false ;;
279537eb1ca1Smrg    esac
2796c27c18e8Smrg
2797c27c18e8Smrg    # We need to accept at least all the BSD install flags.
2798c27c18e8Smrg    dest=
2799c27c18e8Smrg    files=
2800c27c18e8Smrg    opts=
2801c27c18e8Smrg    prev=
2802c27c18e8Smrg    install_type=
28030eb1301bSmrg    isdir=no
2804c27c18e8Smrg    stripme=
280537eb1ca1Smrg    no_mode=:
2806c27c18e8Smrg    for arg
2807c27c18e8Smrg    do
280837eb1ca1Smrg      arg2=
2809c27c18e8Smrg      if test -n "$dest"; then
2810b789ec8aSmrg	func_append files " $dest"
2811c27c18e8Smrg	dest=$arg
2812c27c18e8Smrg	continue
2813c27c18e8Smrg      fi
2814c27c18e8Smrg
2815c27c18e8Smrg      case $arg in
28160eb1301bSmrg      -d) isdir=yes ;;
2817c27c18e8Smrg      -f)
281837eb1ca1Smrg	if $install_cp; then :; else
281937eb1ca1Smrg	  prev=$arg
282037eb1ca1Smrg	fi
2821c27c18e8Smrg	;;
2822c27c18e8Smrg      -g | -m | -o)
2823c27c18e8Smrg	prev=$arg
2824c27c18e8Smrg	;;
2825c27c18e8Smrg      -s)
2826c27c18e8Smrg	stripme=" -s"
2827c27c18e8Smrg	continue
2828c27c18e8Smrg	;;
2829c27c18e8Smrg      -*)
2830c27c18e8Smrg	;;
2831c27c18e8Smrg      *)
2832c27c18e8Smrg	# If the previous option needed an argument, then skip it.
2833c27c18e8Smrg	if test -n "$prev"; then
28340eb1301bSmrg	  if test "x$prev" = x-m && test -n "$install_override_mode"; then
283537eb1ca1Smrg	    arg2=$install_override_mode
283637eb1ca1Smrg	    no_mode=false
283737eb1ca1Smrg	  fi
2838c43cc173Smrg	  prev=
2839c43cc173Smrg	else
2840c27c18e8Smrg	  dest=$arg
2841c27c18e8Smrg	  continue
2842c43cc173Smrg	fi
2843c43cc173Smrg	;;
2844c27c18e8Smrg      esac
2845c43cc173Smrg
2846c27c18e8Smrg      # Aesthetically quote the argument.
2847c27c18e8Smrg      func_quote_for_eval "$arg"
2848b789ec8aSmrg      func_append install_prog " $func_quote_for_eval_result"
284937eb1ca1Smrg      if test -n "$arg2"; then
285037eb1ca1Smrg	func_quote_for_eval "$arg2"
285137eb1ca1Smrg      fi
2852b789ec8aSmrg      func_append install_shared_prog " $func_quote_for_eval_result"
2853c27c18e8Smrg    done
2854c43cc173Smrg
2855c27c18e8Smrg    test -z "$install_prog" && \
2856c27c18e8Smrg      func_fatal_help "you must specify an install program"
2857c43cc173Smrg
2858c27c18e8Smrg    test -n "$prev" && \
28590eb1301bSmrg      func_fatal_help "the \`$prev' option requires an argument"
2860c43cc173Smrg
286137eb1ca1Smrg    if test -n "$install_override_mode" && $no_mode; then
286237eb1ca1Smrg      if $install_cp; then :; else
286337eb1ca1Smrg	func_quote_for_eval "$install_override_mode"
2864b789ec8aSmrg	func_append install_shared_prog " -m $func_quote_for_eval_result"
286537eb1ca1Smrg      fi
286637eb1ca1Smrg    fi
286737eb1ca1Smrg
2868c27c18e8Smrg    if test -z "$files"; then
2869c27c18e8Smrg      if test -z "$dest"; then
2870c27c18e8Smrg	func_fatal_help "no file or destination specified"
2871c27c18e8Smrg      else
2872c27c18e8Smrg	func_fatal_help "you must specify a destination"
2873c27c18e8Smrg      fi
2874c43cc173Smrg    fi
2875c43cc173Smrg
2876c27c18e8Smrg    # Strip any trailing slash from the destination.
2877c27c18e8Smrg    func_stripname '' '/' "$dest"
2878c27c18e8Smrg    dest=$func_stripname_result
2879c43cc173Smrg
2880c27c18e8Smrg    # Check to see that the destination is a directory.
28810eb1301bSmrg    test -d "$dest" && isdir=yes
28820eb1301bSmrg    if test "$isdir" = yes; then
28830eb1301bSmrg      destdir="$dest"
2884c27c18e8Smrg      destname=
2885c43cc173Smrg    else
2886c27c18e8Smrg      func_dirname_and_basename "$dest" "" "."
28870eb1301bSmrg      destdir="$func_dirname_result"
28880eb1301bSmrg      destname="$func_basename_result"
2889c43cc173Smrg
2890c27c18e8Smrg      # Not a directory, so check to see that there is only one file specified.
2891c27c18e8Smrg      set dummy $files; shift
2892c27c18e8Smrg      test "$#" -gt 1 && \
28930eb1301bSmrg	func_fatal_help "\`$dest' is not a directory"
2894c43cc173Smrg    fi
2895c27c18e8Smrg    case $destdir in
2896c27c18e8Smrg    [\\/]* | [A-Za-z]:[\\/]*) ;;
2897c43cc173Smrg    *)
2898c27c18e8Smrg      for file in $files; do
2899c27c18e8Smrg	case $file in
2900c27c18e8Smrg	*.lo) ;;
2901c27c18e8Smrg	*)
29020eb1301bSmrg	  func_fatal_help "\`$destdir' must be an absolute directory name"
2903c27c18e8Smrg	  ;;
2904c27c18e8Smrg	esac
2905c27c18e8Smrg      done
2906c43cc173Smrg      ;;
2907c43cc173Smrg    esac
2908c43cc173Smrg
2909c27c18e8Smrg    # This variable tells wrapper scripts just to set variables rather
2910c27c18e8Smrg    # than running their programs.
29110eb1301bSmrg    libtool_install_magic="$magic"
2912c43cc173Smrg
2913c27c18e8Smrg    staticlibs=
2914c27c18e8Smrg    future_libdirs=
2915c27c18e8Smrg    current_libdirs=
2916c27c18e8Smrg    for file in $files; do
2917c43cc173Smrg
2918c27c18e8Smrg      # Do each installation.
2919c27c18e8Smrg      case $file in
2920c27c18e8Smrg      *.$libext)
2921c27c18e8Smrg	# Do the static libraries later.
2922b789ec8aSmrg	func_append staticlibs " $file"
2923c27c18e8Smrg	;;
2924c27c18e8Smrg
2925c27c18e8Smrg      *.la)
2926b789ec8aSmrg	func_resolve_sysroot "$file"
2927b789ec8aSmrg	file=$func_resolve_sysroot_result
2928b789ec8aSmrg
2929c27c18e8Smrg	# Check to see that this really is a libtool archive.
2930c27c18e8Smrg	func_lalib_unsafe_p "$file" \
29310eb1301bSmrg	  || func_fatal_help "\`$file' is not a valid libtool archive"
2932c27c18e8Smrg
2933c27c18e8Smrg	library_names=
2934c27c18e8Smrg	old_library=
2935c27c18e8Smrg	relink_command=
2936c27c18e8Smrg	func_source "$file"
2937c27c18e8Smrg
2938c27c18e8Smrg	# Add the libdir to current_libdirs if it is the destination.
2939c27c18e8Smrg	if test "X$destdir" = "X$libdir"; then
2940c27c18e8Smrg	  case "$current_libdirs " in
2941c27c18e8Smrg	  *" $libdir "*) ;;
2942b789ec8aSmrg	  *) func_append current_libdirs " $libdir" ;;
2943c43cc173Smrg	  esac
2944c27c18e8Smrg	else
2945c27c18e8Smrg	  # Note the libdir as a future libdir.
2946c27c18e8Smrg	  case "$future_libdirs " in
2947c27c18e8Smrg	  *" $libdir "*) ;;
2948b789ec8aSmrg	  *) func_append future_libdirs " $libdir" ;;
2949c27c18e8Smrg	  esac
2950c27c18e8Smrg	fi
2951c43cc173Smrg
2952c27c18e8Smrg	func_dirname "$file" "/" ""
29530eb1301bSmrg	dir="$func_dirname_result"
2954b789ec8aSmrg	func_append dir "$objdir"
2955c27c18e8Smrg
2956c27c18e8Smrg	if test -n "$relink_command"; then
2957c27c18e8Smrg	  # Determine the prefix the user has applied to our future dir.
295837eb1ca1Smrg	  inst_prefix_dir=`$ECHO "$destdir" | $SED -e "s%$libdir\$%%"`
2959c27c18e8Smrg
2960c27c18e8Smrg	  # Don't allow the user to place us outside of our expected
2961c27c18e8Smrg	  # location b/c this prevents finding dependent libraries that
2962c27c18e8Smrg	  # are installed to the same prefix.
2963c27c18e8Smrg	  # At present, this check doesn't affect windows .dll's that
2964c27c18e8Smrg	  # are installed into $libdir/../bin (currently, that works fine)
2965c27c18e8Smrg	  # but it's something to keep an eye on.
2966c27c18e8Smrg	  test "$inst_prefix_dir" = "$destdir" && \
29670eb1301bSmrg	    func_fatal_error "error: cannot install \`$file' to a directory not ending in $libdir"
2968c27c18e8Smrg
2969c27c18e8Smrg	  if test -n "$inst_prefix_dir"; then
2970c27c18e8Smrg	    # Stick the inst_prefix_dir data into the link command.
297137eb1ca1Smrg	    relink_command=`$ECHO "$relink_command" | $SED "s%@inst_prefix_dir@%-inst-prefix-dir $inst_prefix_dir%"`
2972c27c18e8Smrg	  else
297337eb1ca1Smrg	    relink_command=`$ECHO "$relink_command" | $SED "s%@inst_prefix_dir@%%"`
2974c27c18e8Smrg	  fi
2975c27c18e8Smrg
29760eb1301bSmrg	  func_warning "relinking \`$file'"
2977c27c18e8Smrg	  func_show_eval "$relink_command" \
29780eb1301bSmrg	    'func_fatal_error "error: relink \`$file'\'' with the above command before installing it"'
2979c27c18e8Smrg	fi
2980c27c18e8Smrg
2981c27c18e8Smrg	# See the names of the shared library.
2982c27c18e8Smrg	set dummy $library_names; shift
2983c27c18e8Smrg	if test -n "$1"; then
29840eb1301bSmrg	  realname="$1"
2985c27c18e8Smrg	  shift
2986c27c18e8Smrg
29870eb1301bSmrg	  srcname="$realname"
29880eb1301bSmrg	  test -n "$relink_command" && srcname="$realname"T
2989c27c18e8Smrg
2990c27c18e8Smrg	  # Install the shared library and build the symlinks.
299137eb1ca1Smrg	  func_show_eval "$install_shared_prog $dir/$srcname $destdir/$realname" \
2992c27c18e8Smrg	      'exit $?'
29930eb1301bSmrg	  tstripme="$stripme"
2994c27c18e8Smrg	  case $host_os in
2995c27c18e8Smrg	  cygwin* | mingw* | pw32* | cegcc*)
2996c27c18e8Smrg	    case $realname in
2997c27c18e8Smrg	    *.dll.a)
29980eb1301bSmrg	      tstripme=""
2999c27c18e8Smrg	      ;;
3000c27c18e8Smrg	    esac
3001c43cc173Smrg	    ;;
3002c43cc173Smrg	  esac
3003c27c18e8Smrg	  if test -n "$tstripme" && test -n "$striplib"; then
3004c27c18e8Smrg	    func_show_eval "$striplib $destdir/$realname" 'exit $?'
3005c43cc173Smrg	  fi
3006c27c18e8Smrg
3007c27c18e8Smrg	  if test "$#" -gt 0; then
3008c27c18e8Smrg	    # Delete the old symlinks, and create new ones.
30090eb1301bSmrg	    # Try `ln -sf' first, because the `ln' binary might depend on
3010c27c18e8Smrg	    # the symlink we replace!  Solaris /bin/ln does not understand -f,
3011c27c18e8Smrg	    # so we also need to try rm && ln -s.
3012c27c18e8Smrg	    for linkname
3013c27c18e8Smrg	    do
3014c27c18e8Smrg	      test "$linkname" != "$realname" \
3015c27c18e8Smrg		&& func_show_eval "(cd $destdir && { $LN_S -f $realname $linkname || { $RM $linkname && $LN_S $realname $linkname; }; })"
3016c43cc173Smrg	    done
3017c43cc173Smrg	  fi
3018c43cc173Smrg
3019c27c18e8Smrg	  # Do each command in the postinstall commands.
30200eb1301bSmrg	  lib="$destdir/$realname"
3021c27c18e8Smrg	  func_execute_cmds "$postinstall_cmds" 'exit $?'
3022c43cc173Smrg	fi
3023c43cc173Smrg
3024c27c18e8Smrg	# Install the pseudo-library for information purposes.
3025c27c18e8Smrg	func_basename "$file"
30260eb1301bSmrg	name="$func_basename_result"
30270eb1301bSmrg	instname="$dir/$name"i
3028c27c18e8Smrg	func_show_eval "$install_prog $instname $destdir/$name" 'exit $?'
3029c43cc173Smrg
3030c27c18e8Smrg	# Maybe install the static library, too.
3031b789ec8aSmrg	test -n "$old_library" && func_append staticlibs " $dir/$old_library"
3032c27c18e8Smrg	;;
3033c43cc173Smrg
3034c27c18e8Smrg      *.lo)
3035c27c18e8Smrg	# Install (i.e. copy) a libtool object.
3036c43cc173Smrg
3037c27c18e8Smrg	# Figure out destination file name, if it wasn't already specified.
3038c27c18e8Smrg	if test -n "$destname"; then
30390eb1301bSmrg	  destfile="$destdir/$destname"
3040c27c18e8Smrg	else
3041c27c18e8Smrg	  func_basename "$file"
30420eb1301bSmrg	  destfile="$func_basename_result"
30430eb1301bSmrg	  destfile="$destdir/$destfile"
3044c43cc173Smrg	fi
3045c43cc173Smrg
3046c27c18e8Smrg	# Deduce the name of the destination old-style object file.
3047c27c18e8Smrg	case $destfile in
3048c27c18e8Smrg	*.lo)
3049c27c18e8Smrg	  func_lo2o "$destfile"
3050c27c18e8Smrg	  staticdest=$func_lo2o_result
3051c27c18e8Smrg	  ;;
3052c27c18e8Smrg	*.$objext)
30530eb1301bSmrg	  staticdest="$destfile"
3054c27c18e8Smrg	  destfile=
3055c27c18e8Smrg	  ;;
3056c27c18e8Smrg	*)
30570eb1301bSmrg	  func_fatal_help "cannot copy a libtool object to \`$destfile'"
3058c27c18e8Smrg	  ;;
3059c27c18e8Smrg	esac
3060c43cc173Smrg
3061c27c18e8Smrg	# Install the libtool object if requested.
3062c27c18e8Smrg	test -n "$destfile" && \
3063c27c18e8Smrg	  func_show_eval "$install_prog $file $destfile" 'exit $?'
3064c43cc173Smrg
3065c27c18e8Smrg	# Install the old object if enabled.
30660eb1301bSmrg	if test "$build_old_libs" = yes; then
3067c27c18e8Smrg	  # Deduce the name of the old-style object file.
3068c27c18e8Smrg	  func_lo2o "$file"
3069c27c18e8Smrg	  staticobj=$func_lo2o_result
3070c27c18e8Smrg	  func_show_eval "$install_prog \$staticobj \$staticdest" 'exit $?'
3071c43cc173Smrg	fi
3072c27c18e8Smrg	exit $EXIT_SUCCESS
3073c27c18e8Smrg	;;
3074c43cc173Smrg
3075c27c18e8Smrg      *)
3076c27c18e8Smrg	# Figure out destination file name, if it wasn't already specified.
3077c27c18e8Smrg	if test -n "$destname"; then
30780eb1301bSmrg	  destfile="$destdir/$destname"
3079c27c18e8Smrg	else
3080c27c18e8Smrg	  func_basename "$file"
30810eb1301bSmrg	  destfile="$func_basename_result"
30820eb1301bSmrg	  destfile="$destdir/$destfile"
3083c27c18e8Smrg	fi
3084c43cc173Smrg
3085c27c18e8Smrg	# If the file is missing, and there is a .exe on the end, strip it
3086c27c18e8Smrg	# because it is most likely a libtool script we actually want to
3087c27c18e8Smrg	# install
30880eb1301bSmrg	stripped_ext=""
3089c27c18e8Smrg	case $file in
3090c27c18e8Smrg	  *.exe)
3091c27c18e8Smrg	    if test ! -f "$file"; then
3092c27c18e8Smrg	      func_stripname '' '.exe' "$file"
3093c27c18e8Smrg	      file=$func_stripname_result
30940eb1301bSmrg	      stripped_ext=".exe"
3095c27c18e8Smrg	    fi
3096c27c18e8Smrg	    ;;
3097c27c18e8Smrg	esac
3098c27c18e8Smrg
3099c27c18e8Smrg	# Do a test to see if this is really a libtool program.
3100c27c18e8Smrg	case $host in
3101c27c18e8Smrg	*cygwin* | *mingw*)
3102c27c18e8Smrg	    if func_ltwrapper_executable_p "$file"; then
3103c27c18e8Smrg	      func_ltwrapper_scriptname "$file"
3104c27c18e8Smrg	      wrapper=$func_ltwrapper_scriptname_result
3105c27c18e8Smrg	    else
3106c27c18e8Smrg	      func_stripname '' '.exe' "$file"
3107c27c18e8Smrg	      wrapper=$func_stripname_result
3108c27c18e8Smrg	    fi
3109c27c18e8Smrg	    ;;
3110c43cc173Smrg	*)
3111c27c18e8Smrg	    wrapper=$file
3112c27c18e8Smrg	    ;;
3113c27c18e8Smrg	esac
3114c27c18e8Smrg	if func_ltwrapper_script_p "$wrapper"; then
3115c27c18e8Smrg	  notinst_deplibs=
3116c27c18e8Smrg	  relink_command=
3117c27c18e8Smrg
3118c27c18e8Smrg	  func_source "$wrapper"
3119c27c18e8Smrg
3120c27c18e8Smrg	  # Check the variables that should have been set.
3121c27c18e8Smrg	  test -z "$generated_by_libtool_version" && \
31220eb1301bSmrg	    func_fatal_error "invalid libtool wrapper script \`$wrapper'"
3123c27c18e8Smrg
31240eb1301bSmrg	  finalize=yes
3125c27c18e8Smrg	  for lib in $notinst_deplibs; do
3126c27c18e8Smrg	    # Check to see that each library is installed.
3127c27c18e8Smrg	    libdir=
3128c27c18e8Smrg	    if test -f "$lib"; then
3129c27c18e8Smrg	      func_source "$lib"
3130c27c18e8Smrg	    fi
31310eb1301bSmrg	    libfile="$libdir/"`$ECHO "$lib" | $SED 's%^.*/%%g'` ### testsuite: skip nested quoting test
3132c27c18e8Smrg	    if test -n "$libdir" && test ! -f "$libfile"; then
31330eb1301bSmrg	      func_warning "\`$lib' has not been installed in \`$libdir'"
31340eb1301bSmrg	      finalize=no
3135c27c18e8Smrg	    fi
3136c27c18e8Smrg	  done
3137c27c18e8Smrg
3138c27c18e8Smrg	  relink_command=
3139c27c18e8Smrg	  func_source "$wrapper"
3140c27c18e8Smrg
3141c27c18e8Smrg	  outputname=
31420eb1301bSmrg	  if test "$fast_install" = no && test -n "$relink_command"; then
3143c27c18e8Smrg	    $opt_dry_run || {
31440eb1301bSmrg	      if test "$finalize" = yes; then
3145c27c18e8Smrg	        tmpdir=`func_mktempdir`
3146c27c18e8Smrg		func_basename "$file$stripped_ext"
31470eb1301bSmrg		file="$func_basename_result"
31480eb1301bSmrg	        outputname="$tmpdir/$file"
3149c27c18e8Smrg	        # Replace the output file specification.
315037eb1ca1Smrg	        relink_command=`$ECHO "$relink_command" | $SED 's%@OUTPUT@%'"$outputname"'%g'`
3151c27c18e8Smrg
31520eb1301bSmrg	        $opt_silent || {
3153c27c18e8Smrg	          func_quote_for_expand "$relink_command"
3154c27c18e8Smrg		  eval "func_echo $func_quote_for_expand_result"
3155c27c18e8Smrg	        }
3156c27c18e8Smrg	        if eval "$relink_command"; then :
3157c27c18e8Smrg	          else
31580eb1301bSmrg		  func_error "error: relink \`$file' with the above command before installing it"
3159c27c18e8Smrg		  $opt_dry_run || ${RM}r "$tmpdir"
3160c27c18e8Smrg		  continue
3161c27c18e8Smrg	        fi
31620eb1301bSmrg	        file="$outputname"
3163c27c18e8Smrg	      else
31640eb1301bSmrg	        func_warning "cannot relink \`$file'"
3165c27c18e8Smrg	      fi
3166c27c18e8Smrg	    }
3167c27c18e8Smrg	  else
3168c27c18e8Smrg	    # Install the binary that we compiled earlier.
316937eb1ca1Smrg	    file=`$ECHO "$file$stripped_ext" | $SED "s%\([^/]*\)$%$objdir/\1%"`
3170c43cc173Smrg	  fi
3171c27c18e8Smrg	fi
3172c27c18e8Smrg
3173c27c18e8Smrg	# remove .exe since cygwin /usr/bin/install will append another
3174c27c18e8Smrg	# one anyway
3175c27c18e8Smrg	case $install_prog,$host in
3176c27c18e8Smrg	*/usr/bin/install*,*cygwin*)
3177c27c18e8Smrg	  case $file:$destfile in
3178c27c18e8Smrg	  *.exe:*.exe)
3179c27c18e8Smrg	    # this is ok
3180c27c18e8Smrg	    ;;
3181c27c18e8Smrg	  *.exe:*)
3182c27c18e8Smrg	    destfile=$destfile.exe
3183c27c18e8Smrg	    ;;
3184c27c18e8Smrg	  *:*.exe)
3185c27c18e8Smrg	    func_stripname '' '.exe' "$destfile"
3186c27c18e8Smrg	    destfile=$func_stripname_result
3187c27c18e8Smrg	    ;;
3188c27c18e8Smrg	  esac
3189c43cc173Smrg	  ;;
3190c43cc173Smrg	esac
3191c27c18e8Smrg	func_show_eval "$install_prog\$stripme \$file \$destfile" 'exit $?'
3192c27c18e8Smrg	$opt_dry_run || if test -n "$outputname"; then
3193c27c18e8Smrg	  ${RM}r "$tmpdir"
3194c27c18e8Smrg	fi
3195c27c18e8Smrg	;;
3196c27c18e8Smrg      esac
3197c27c18e8Smrg    done
3198c43cc173Smrg
3199c27c18e8Smrg    for file in $staticlibs; do
3200c27c18e8Smrg      func_basename "$file"
32010eb1301bSmrg      name="$func_basename_result"
3202c27c18e8Smrg
3203c27c18e8Smrg      # Set up the ranlib parameters.
32040eb1301bSmrg      oldlib="$destdir/$name"
3205f1ee322dSmrg      func_to_tool_file "$oldlib" func_convert_file_msys_to_w32
3206f1ee322dSmrg      tool_oldlib=$func_to_tool_file_result
3207c27c18e8Smrg
3208c27c18e8Smrg      func_show_eval "$install_prog \$file \$oldlib" 'exit $?'
3209c27c18e8Smrg
3210c27c18e8Smrg      if test -n "$stripme" && test -n "$old_striplib"; then
3211f1ee322dSmrg	func_show_eval "$old_striplib $tool_oldlib" 'exit $?'
3212c27c18e8Smrg      fi
3213c27c18e8Smrg
3214c27c18e8Smrg      # Do each command in the postinstall commands.
3215c27c18e8Smrg      func_execute_cmds "$old_postinstall_cmds" 'exit $?'
3216c27c18e8Smrg    done
3217c27c18e8Smrg
3218c27c18e8Smrg    test -n "$future_libdirs" && \
32190eb1301bSmrg      func_warning "remember to run \`$progname --finish$future_libdirs'"
3220c27c18e8Smrg
3221c27c18e8Smrg    if test -n "$current_libdirs"; then
3222c27c18e8Smrg      # Maybe just do a dry run.
3223c27c18e8Smrg      $opt_dry_run && current_libdirs=" -n$current_libdirs"
32240eb1301bSmrg      exec_cmd='$SHELL $progpath $preserve_args --finish$current_libdirs'
3225c27c18e8Smrg    else
3226c27c18e8Smrg      exit $EXIT_SUCCESS
3227c27c18e8Smrg    fi
3228c27c18e8Smrg}
3229c27c18e8Smrg
32300eb1301bSmrgtest "$opt_mode" = install && func_mode_install ${1+"$@"}
3231c27c18e8Smrg
3232c27c18e8Smrg
3233c27c18e8Smrg# func_generate_dlsyms outputname originator pic_p
3234c27c18e8Smrg# Extract symbols from dlprefiles and create ${outputname}S.o with
3235c27c18e8Smrg# a dlpreopen symbol table.
3236c27c18e8Smrgfunc_generate_dlsyms ()
3237c27c18e8Smrg{
32380eb1301bSmrg    $opt_debug
32390eb1301bSmrg    my_outputname="$1"
32400eb1301bSmrg    my_originator="$2"
32410eb1301bSmrg    my_pic_p="${3-no}"
32420eb1301bSmrg    my_prefix=`$ECHO "$my_originator" | sed 's%[^a-zA-Z0-9]%_%g'`
3243c27c18e8Smrg    my_dlsyms=
3244c27c18e8Smrg
32450eb1301bSmrg    if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then
3246c27c18e8Smrg      if test -n "$NM" && test -n "$global_symbol_pipe"; then
32470eb1301bSmrg	my_dlsyms="${my_outputname}S.c"
3248c27c18e8Smrg      else
3249c27c18e8Smrg	func_error "not configured to extract global symbols from dlpreopened files"
3250c27c18e8Smrg      fi
3251c27c18e8Smrg    fi
3252c27c18e8Smrg
3253c27c18e8Smrg    if test -n "$my_dlsyms"; then
3254c27c18e8Smrg      case $my_dlsyms in
3255c27c18e8Smrg      "") ;;
3256c27c18e8Smrg      *.c)
3257c27c18e8Smrg	# Discover the nlist of each of the dlfiles.
32580eb1301bSmrg	nlist="$output_objdir/${my_outputname}.nm"
3259c27c18e8Smrg
3260c27c18e8Smrg	func_show_eval "$RM $nlist ${nlist}S ${nlist}T"
3261c27c18e8Smrg
3262c27c18e8Smrg	# Parse the name list into a source file.
3263c27c18e8Smrg	func_verbose "creating $output_objdir/$my_dlsyms"
3264c27c18e8Smrg
3265c27c18e8Smrg	$opt_dry_run || $ECHO > "$output_objdir/$my_dlsyms" "\
32660eb1301bSmrg/* $my_dlsyms - symbol resolution table for \`$my_outputname' dlsym emulation. */
32670eb1301bSmrg/* Generated by $PROGRAM (GNU $PACKAGE$TIMESTAMP) $VERSION */
3268c27c18e8Smrg
3269c27c18e8Smrg#ifdef __cplusplus
3270c27c18e8Smrgextern \"C\" {
3271c27c18e8Smrg#endif
3272c27c18e8Smrg
32730eb1301bSmrg#if defined(__GNUC__) && (((__GNUC__ == 4) && (__GNUC_MINOR__ >= 4)) || (__GNUC__ > 4))
327437eb1ca1Smrg#pragma GCC diagnostic ignored \"-Wstrict-prototypes\"
327537eb1ca1Smrg#endif
327637eb1ca1Smrg
3277b789ec8aSmrg/* Keep this code in sync between libtool.m4, ltmain, lt_system.h, and tests.  */
32780eb1301bSmrg#if defined(_WIN32) || defined(__CYGWIN__) || defined(_WIN32_WCE)
32790eb1301bSmrg/* DATA imports from DLLs on WIN32 con't be const, because runtime
3280b789ec8aSmrg   relocations are performed -- see ld's documentation on pseudo-relocs.  */
3281b789ec8aSmrg# define LT_DLSYM_CONST
32820eb1301bSmrg#elif defined(__osf__)
3283b789ec8aSmrg/* This system does not cope well with relocations in const data.  */
3284b789ec8aSmrg# define LT_DLSYM_CONST
3285b789ec8aSmrg#else
3286b789ec8aSmrg# define LT_DLSYM_CONST const
3287b789ec8aSmrg#endif
3288b789ec8aSmrg
3289c27c18e8Smrg/* External symbol declarations for the compiler. */\
3290c27c18e8Smrg"
3291c27c18e8Smrg
32920eb1301bSmrg	if test "$dlself" = yes; then
32930eb1301bSmrg	  func_verbose "generating symbol list for \`$output'"
3294c27c18e8Smrg
3295c27c18e8Smrg	  $opt_dry_run || echo ': @PROGRAM@ ' > "$nlist"
3296c27c18e8Smrg
3297c27c18e8Smrg	  # Add our own program objects to the symbol list.
329837eb1ca1Smrg	  progfiles=`$ECHO "$objs$old_deplibs" | $SP2NL | $SED "$lo2o" | $NL2SP`
3299c27c18e8Smrg	  for progfile in $progfiles; do
3300b789ec8aSmrg	    func_to_tool_file "$progfile" func_convert_file_msys_to_w32
33010eb1301bSmrg	    func_verbose "extracting global C symbols from \`$func_to_tool_file_result'"
3302b789ec8aSmrg	    $opt_dry_run || eval "$NM $func_to_tool_file_result | $global_symbol_pipe >> '$nlist'"
3303c27c18e8Smrg	  done
3304c27c18e8Smrg
3305c27c18e8Smrg	  if test -n "$exclude_expsyms"; then
3306c27c18e8Smrg	    $opt_dry_run || {
3307c27c18e8Smrg	      eval '$EGREP -v " ($exclude_expsyms)$" "$nlist" > "$nlist"T'
3308c27c18e8Smrg	      eval '$MV "$nlist"T "$nlist"'
3309c27c18e8Smrg	    }
3310c43cc173Smrg	  fi
3311c27c18e8Smrg
3312c27c18e8Smrg	  if test -n "$export_symbols_regex"; then
3313c27c18e8Smrg	    $opt_dry_run || {
3314c27c18e8Smrg	      eval '$EGREP -e "$export_symbols_regex" "$nlist" > "$nlist"T'
3315c27c18e8Smrg	      eval '$MV "$nlist"T "$nlist"'
3316c27c18e8Smrg	    }
3317c27c18e8Smrg	  fi
3318c27c18e8Smrg
3319c27c18e8Smrg	  # Prepare the list of exported symbols
3320c27c18e8Smrg	  if test -z "$export_symbols"; then
33210eb1301bSmrg	    export_symbols="$output_objdir/$outputname.exp"
3322c27c18e8Smrg	    $opt_dry_run || {
3323c27c18e8Smrg	      $RM $export_symbols
33240eb1301bSmrg	      eval "${SED} -n -e '/^: @PROGRAM@ $/d' -e 's/^.* \(.*\)$/\1/p' "'< "$nlist" > "$export_symbols"'
3325c27c18e8Smrg	      case $host in
3326c27c18e8Smrg	      *cygwin* | *mingw* | *cegcc* )
3327c27c18e8Smrg                eval "echo EXPORTS "'> "$output_objdir/$outputname.def"'
3328c27c18e8Smrg                eval 'cat "$export_symbols" >> "$output_objdir/$outputname.def"'
3329c27c18e8Smrg	        ;;
3330c27c18e8Smrg	      esac
3331c27c18e8Smrg	    }
3332c43cc173Smrg	  else
3333c27c18e8Smrg	    $opt_dry_run || {
33340eb1301bSmrg	      eval "${SED} -e 's/\([].[*^$]\)/\\\\\1/g' -e 's/^/ /' -e 's/$/$/'"' < "$export_symbols" > "$output_objdir/$outputname.exp"'
3335c27c18e8Smrg	      eval '$GREP -f "$output_objdir/$outputname.exp" < "$nlist" > "$nlist"T'
3336c27c18e8Smrg	      eval '$MV "$nlist"T "$nlist"'
3337c27c18e8Smrg	      case $host in
333837eb1ca1Smrg	        *cygwin* | *mingw* | *cegcc* )
3339c27c18e8Smrg	          eval "echo EXPORTS "'> "$output_objdir/$outputname.def"'
3340c27c18e8Smrg	          eval 'cat "$nlist" >> "$output_objdir/$outputname.def"'
3341c27c18e8Smrg	          ;;
3342c27c18e8Smrg	      esac
3343c27c18e8Smrg	    }
3344c43cc173Smrg	  fi
3345c27c18e8Smrg	fi
3346c43cc173Smrg
3347c27c18e8Smrg	for dlprefile in $dlprefiles; do
33480eb1301bSmrg	  func_verbose "extracting global C symbols from \`$dlprefile'"
3349c27c18e8Smrg	  func_basename "$dlprefile"
33500eb1301bSmrg	  name="$func_basename_result"
3351b789ec8aSmrg          case $host in
3352b789ec8aSmrg	    *cygwin* | *mingw* | *cegcc* )
3353b789ec8aSmrg	      # if an import library, we need to obtain dlname
3354b789ec8aSmrg	      if func_win32_import_lib_p "$dlprefile"; then
3355b789ec8aSmrg	        func_tr_sh "$dlprefile"
3356b789ec8aSmrg	        eval "curr_lafile=\$libfile_$func_tr_sh_result"
33570eb1301bSmrg	        dlprefile_dlbasename=""
3358b789ec8aSmrg	        if test -n "$curr_lafile" && func_lalib_p "$curr_lafile"; then
3359b789ec8aSmrg	          # Use subshell, to avoid clobbering current variable values
3360b789ec8aSmrg	          dlprefile_dlname=`source "$curr_lafile" && echo "$dlname"`
33610eb1301bSmrg	          if test -n "$dlprefile_dlname" ; then
3362b789ec8aSmrg	            func_basename "$dlprefile_dlname"
33630eb1301bSmrg	            dlprefile_dlbasename="$func_basename_result"
3364b789ec8aSmrg	          else
3365b789ec8aSmrg	            # no lafile. user explicitly requested -dlpreopen <import library>.
3366b789ec8aSmrg	            $sharedlib_from_linklib_cmd "$dlprefile"
3367b789ec8aSmrg	            dlprefile_dlbasename=$sharedlib_from_linklib_result
3368b789ec8aSmrg	          fi
3369b789ec8aSmrg	        fi
3370b789ec8aSmrg	        $opt_dry_run || {
33710eb1301bSmrg	          if test -n "$dlprefile_dlbasename" ; then
3372b789ec8aSmrg	            eval '$ECHO ": $dlprefile_dlbasename" >> "$nlist"'
3373b789ec8aSmrg	          else
3374b789ec8aSmrg	            func_warning "Could not compute DLL name from $name"
3375b789ec8aSmrg	            eval '$ECHO ": $name " >> "$nlist"'
3376b789ec8aSmrg	          fi
3377b789ec8aSmrg	          func_to_tool_file "$dlprefile" func_convert_file_msys_to_w32
3378b789ec8aSmrg	          eval "$NM \"$func_to_tool_file_result\" 2>/dev/null | $global_symbol_pipe |
3379b789ec8aSmrg	            $SED -e '/I __imp/d' -e 's/I __nm_/D /;s/_nm__//' >> '$nlist'"
3380b789ec8aSmrg	        }
3381b789ec8aSmrg	      else # not an import lib
3382b789ec8aSmrg	        $opt_dry_run || {
3383b789ec8aSmrg	          eval '$ECHO ": $name " >> "$nlist"'
3384b789ec8aSmrg	          func_to_tool_file "$dlprefile" func_convert_file_msys_to_w32
3385b789ec8aSmrg	          eval "$NM \"$func_to_tool_file_result\" 2>/dev/null | $global_symbol_pipe >> '$nlist'"
3386b789ec8aSmrg	        }
3387b789ec8aSmrg	      fi
3388b789ec8aSmrg	    ;;
3389b789ec8aSmrg	    *)
3390b789ec8aSmrg	      $opt_dry_run || {
3391b789ec8aSmrg	        eval '$ECHO ": $name " >> "$nlist"'
3392b789ec8aSmrg	        func_to_tool_file "$dlprefile" func_convert_file_msys_to_w32
3393b789ec8aSmrg	        eval "$NM \"$func_to_tool_file_result\" 2>/dev/null | $global_symbol_pipe >> '$nlist'"
3394b789ec8aSmrg	      }
3395b789ec8aSmrg	    ;;
3396b789ec8aSmrg          esac
3397c27c18e8Smrg	done
3398c27c18e8Smrg
3399c27c18e8Smrg	$opt_dry_run || {
3400c27c18e8Smrg	  # Make sure we have at least an empty file.
3401c27c18e8Smrg	  test -f "$nlist" || : > "$nlist"
3402c27c18e8Smrg
3403c27c18e8Smrg	  if test -n "$exclude_expsyms"; then
3404c27c18e8Smrg	    $EGREP -v " ($exclude_expsyms)$" "$nlist" > "$nlist"T
3405c27c18e8Smrg	    $MV "$nlist"T "$nlist"
3406c43cc173Smrg	  fi
3407c27c18e8Smrg
3408c27c18e8Smrg	  # Try sorting and uniquifying the output.
3409c27c18e8Smrg	  if $GREP -v "^: " < "$nlist" |
3410c27c18e8Smrg	      if sort -k 3 </dev/null >/dev/null 2>&1; then
3411c27c18e8Smrg		sort -k 3
3412c27c18e8Smrg	      else
3413c27c18e8Smrg		sort +2
3414c27c18e8Smrg	      fi |
3415c27c18e8Smrg	      uniq > "$nlist"S; then
3416c27c18e8Smrg	    :
3417c43cc173Smrg	  else
3418c27c18e8Smrg	    $GREP -v "^: " < "$nlist" > "$nlist"S
3419c43cc173Smrg	  fi
3420c43cc173Smrg
3421c27c18e8Smrg	  if test -f "$nlist"S; then
3422c27c18e8Smrg	    eval "$global_symbol_to_cdecl"' < "$nlist"S >> "$output_objdir/$my_dlsyms"'
3423c43cc173Smrg	  else
342437eb1ca1Smrg	    echo '/* NONE */' >> "$output_objdir/$my_dlsyms"
3425c43cc173Smrg	  fi
3426c43cc173Smrg
342737eb1ca1Smrg	  echo >> "$output_objdir/$my_dlsyms" "\
3428c43cc173Smrg
3429c27c18e8Smrg/* The mapping between symbol names and symbols.  */
3430c27c18e8Smrgtypedef struct {
3431c27c18e8Smrg  const char *name;
3432c27c18e8Smrg  void *address;
3433c27c18e8Smrg} lt_dlsymlist;
3434b789ec8aSmrgextern LT_DLSYM_CONST lt_dlsymlist
34350eb1301bSmrglt_${my_prefix}_LTX_preloaded_symbols[];
3436b789ec8aSmrgLT_DLSYM_CONST lt_dlsymlist
3437c27c18e8Smrglt_${my_prefix}_LTX_preloaded_symbols[] =
34380eb1301bSmrg{\
34390eb1301bSmrg  { \"$my_originator\", (void *) 0 },"
3440c43cc173Smrg
3441c27c18e8Smrg	  case $need_lib_prefix in
3442c27c18e8Smrg	  no)
3443c27c18e8Smrg	    eval "$global_symbol_to_c_name_address" < "$nlist" >> "$output_objdir/$my_dlsyms"
3444c27c18e8Smrg	    ;;
3445c27c18e8Smrg	  *)
3446c27c18e8Smrg	    eval "$global_symbol_to_c_name_address_lib_prefix" < "$nlist" >> "$output_objdir/$my_dlsyms"
3447c27c18e8Smrg	    ;;
3448c27c18e8Smrg	  esac
344937eb1ca1Smrg	  echo >> "$output_objdir/$my_dlsyms" "\
3450c27c18e8Smrg  {0, (void *) 0}
3451c27c18e8Smrg};
3452c43cc173Smrg
3453c27c18e8Smrg/* This works around a problem in FreeBSD linker */
3454c27c18e8Smrg#ifdef FREEBSD_WORKAROUND
3455c27c18e8Smrgstatic const void *lt_preloaded_setup() {
3456c27c18e8Smrg  return lt_${my_prefix}_LTX_preloaded_symbols;
3457c27c18e8Smrg}
3458c27c18e8Smrg#endif
3459c43cc173Smrg
3460c27c18e8Smrg#ifdef __cplusplus
3461c27c18e8Smrg}
3462c27c18e8Smrg#endif\
3463c27c18e8Smrg"
3464c27c18e8Smrg	} # !$opt_dry_run
3465c43cc173Smrg
3466c27c18e8Smrg	pic_flag_for_symtable=
3467c27c18e8Smrg	case "$compile_command " in
3468c27c18e8Smrg	*" -static "*) ;;
3469c27c18e8Smrg	*)
3470c27c18e8Smrg	  case $host in
3471c27c18e8Smrg	  # compiling the symbol table file with pic_flag works around
3472c27c18e8Smrg	  # a FreeBSD bug that causes programs to crash when -lm is
3473c27c18e8Smrg	  # linked before any other PIC object.  But we must not use
3474c27c18e8Smrg	  # pic_flag when linking with -static.  The problem exists in
3475c27c18e8Smrg	  # FreeBSD 2.2.6 and is fixed in FreeBSD 3.1.
3476f1ee322dSmrg	  *-*-freebsd2.*|*-*-freebsd3.0*|*-*-freebsdelf3.0*)
3477c27c18e8Smrg	    pic_flag_for_symtable=" $pic_flag -DFREEBSD_WORKAROUND" ;;
3478c27c18e8Smrg	  *-*-hpux*)
3479c27c18e8Smrg	    pic_flag_for_symtable=" $pic_flag"  ;;
3480c27c18e8Smrg	  *)
34810eb1301bSmrg	    if test "X$my_pic_p" != Xno; then
34820eb1301bSmrg	      pic_flag_for_symtable=" $pic_flag"
34830eb1301bSmrg	    fi
3484c27c18e8Smrg	    ;;
3485c27c18e8Smrg	  esac
3486c27c18e8Smrg	  ;;
3487c27c18e8Smrg	esac
3488c27c18e8Smrg	symtab_cflags=
3489c27c18e8Smrg	for arg in $LTCFLAGS; do
3490c27c18e8Smrg	  case $arg in
3491c27c18e8Smrg	  -pie | -fpie | -fPIE) ;;
3492b789ec8aSmrg	  *) func_append symtab_cflags " $arg" ;;
3493c27c18e8Smrg	  esac
3494c27c18e8Smrg	done
3495c43cc173Smrg
3496c27c18e8Smrg	# Now compile the dynamic symbol file.
3497c27c18e8Smrg	func_show_eval '(cd $output_objdir && $LTCC$symtab_cflags -c$no_builtin_flag$pic_flag_for_symtable "$my_dlsyms")' 'exit $?'
3498c43cc173Smrg
3499c27c18e8Smrg	# Clean up the generated files.
35000eb1301bSmrg	func_show_eval '$RM "$output_objdir/$my_dlsyms" "$nlist" "${nlist}S" "${nlist}T"'
3501c43cc173Smrg
3502c27c18e8Smrg	# Transform the symbol file into the correct name.
35030eb1301bSmrg	symfileobj="$output_objdir/${my_outputname}S.$objext"
3504c27c18e8Smrg	case $host in
3505c27c18e8Smrg	*cygwin* | *mingw* | *cegcc* )
3506c27c18e8Smrg	  if test -f "$output_objdir/$my_outputname.def"; then
350737eb1ca1Smrg	    compile_command=`$ECHO "$compile_command" | $SED "s%@SYMFILE@%$output_objdir/$my_outputname.def $symfileobj%"`
350837eb1ca1Smrg	    finalize_command=`$ECHO "$finalize_command" | $SED "s%@SYMFILE@%$output_objdir/$my_outputname.def $symfileobj%"`
3509c27c18e8Smrg	  else
351037eb1ca1Smrg	    compile_command=`$ECHO "$compile_command" | $SED "s%@SYMFILE@%$symfileobj%"`
351137eb1ca1Smrg	    finalize_command=`$ECHO "$finalize_command" | $SED "s%@SYMFILE@%$symfileobj%"`
3512c27c18e8Smrg	  fi
3513c27c18e8Smrg	  ;;
3514c27c18e8Smrg	*)
351537eb1ca1Smrg	  compile_command=`$ECHO "$compile_command" | $SED "s%@SYMFILE@%$symfileobj%"`
351637eb1ca1Smrg	  finalize_command=`$ECHO "$finalize_command" | $SED "s%@SYMFILE@%$symfileobj%"`
3517c27c18e8Smrg	  ;;
3518c27c18e8Smrg	esac
3519c27c18e8Smrg	;;
3520c27c18e8Smrg      *)
35210eb1301bSmrg	func_fatal_error "unknown suffix for \`$my_dlsyms'"
3522c27c18e8Smrg	;;
3523c27c18e8Smrg      esac
3524c27c18e8Smrg    else
3525c27c18e8Smrg      # We keep going just in case the user didn't refer to
3526c27c18e8Smrg      # lt_preloaded_symbols.  The linker will fail if global_symbol_pipe
3527c27c18e8Smrg      # really was required.
3528c43cc173Smrg
3529c27c18e8Smrg      # Nullify the symbol file.
353037eb1ca1Smrg      compile_command=`$ECHO "$compile_command" | $SED "s% @SYMFILE@%%"`
353137eb1ca1Smrg      finalize_command=`$ECHO "$finalize_command" | $SED "s% @SYMFILE@%%"`
3532c27c18e8Smrg    fi
3533c27c18e8Smrg}
3534c43cc173Smrg
3535c27c18e8Smrg# func_win32_libid arg
3536c27c18e8Smrg# return the library type of file 'arg'
3537c27c18e8Smrg#
3538c27c18e8Smrg# Need a lot of goo to handle *both* DLLs and import libs
3539c27c18e8Smrg# Has to be a shell function in order to 'eat' the argument
3540c27c18e8Smrg# that is supplied when $file_magic_command is called.
354137eb1ca1Smrg# Despite the name, also deal with 64 bit binaries.
3542c27c18e8Smrgfunc_win32_libid ()
3543c27c18e8Smrg{
35440eb1301bSmrg  $opt_debug
35450eb1301bSmrg  win32_libid_type="unknown"
3546c27c18e8Smrg  win32_fileres=`file -L $1 2>/dev/null`
3547c27c18e8Smrg  case $win32_fileres in
3548c27c18e8Smrg  *ar\ archive\ import\ library*) # definitely import
3549c27c18e8Smrg    win32_libid_type="x86 archive import"
3550c27c18e8Smrg    ;;
3551c27c18e8Smrg  *ar\ archive*) # could be an import, or static
355237eb1ca1Smrg    # Keep the egrep pattern in sync with the one in _LT_CHECK_MAGIC_METHOD.
3553c27c18e8Smrg    if eval $OBJDUMP -f $1 | $SED -e '10q' 2>/dev/null |
355437eb1ca1Smrg       $EGREP 'file format (pei*-i386(.*architecture: i386)?|pe-arm-wince|pe-x86-64)' >/dev/null; then
35550eb1301bSmrg      func_to_tool_file "$1" func_convert_file_msys_to_w32
35560eb1301bSmrg      win32_nmres=`eval $NM -f posix -A \"$func_to_tool_file_result\" |
35570eb1301bSmrg	$SED -n -e '
3558c27c18e8Smrg	    1,100{
3559c27c18e8Smrg		/ I /{
35600eb1301bSmrg		    s,.*,import,
3561c27c18e8Smrg		    p
3562c27c18e8Smrg		    q
3563c27c18e8Smrg		}
3564c27c18e8Smrg	    }'`
3565c27c18e8Smrg      case $win32_nmres in
3566c27c18e8Smrg      import*)  win32_libid_type="x86 archive import";;
3567c27c18e8Smrg      *)        win32_libid_type="x86 archive static";;
3568c27c18e8Smrg      esac
3569c27c18e8Smrg    fi
3570c27c18e8Smrg    ;;
3571c27c18e8Smrg  *DLL*)
3572c27c18e8Smrg    win32_libid_type="x86 DLL"
3573c27c18e8Smrg    ;;
3574c27c18e8Smrg  *executable*) # but shell scripts are "executable" too...
3575c27c18e8Smrg    case $win32_fileres in
3576c27c18e8Smrg    *MS\ Windows\ PE\ Intel*)
3577c27c18e8Smrg      win32_libid_type="x86 DLL"
3578c27c18e8Smrg      ;;
3579c27c18e8Smrg    esac
3580c27c18e8Smrg    ;;
3581c27c18e8Smrg  esac
3582c27c18e8Smrg  $ECHO "$win32_libid_type"
3583c27c18e8Smrg}
3584c43cc173Smrg
3585b789ec8aSmrg# func_cygming_dll_for_implib ARG
3586b789ec8aSmrg#
3587b789ec8aSmrg# Platform-specific function to extract the
3588b789ec8aSmrg# name of the DLL associated with the specified
3589b789ec8aSmrg# import library ARG.
3590b789ec8aSmrg# Invoked by eval'ing the libtool variable
3591b789ec8aSmrg#    $sharedlib_from_linklib_cmd
3592b789ec8aSmrg# Result is available in the variable
3593b789ec8aSmrg#    $sharedlib_from_linklib_result
3594b789ec8aSmrgfunc_cygming_dll_for_implib ()
3595b789ec8aSmrg{
35960eb1301bSmrg  $opt_debug
3597b789ec8aSmrg  sharedlib_from_linklib_result=`$DLLTOOL --identify-strict --identify "$1"`
3598b789ec8aSmrg}
3599b789ec8aSmrg
3600b789ec8aSmrg# func_cygming_dll_for_implib_fallback_core SECTION_NAME LIBNAMEs
3601b789ec8aSmrg#
3602b789ec8aSmrg# The is the core of a fallback implementation of a
3603b789ec8aSmrg# platform-specific function to extract the name of the
3604b789ec8aSmrg# DLL associated with the specified import library LIBNAME.
3605b789ec8aSmrg#
3606b789ec8aSmrg# SECTION_NAME is either .idata$6 or .idata$7, depending
3607b789ec8aSmrg# on the platform and compiler that created the implib.
3608b789ec8aSmrg#
3609b789ec8aSmrg# Echos the name of the DLL associated with the
3610b789ec8aSmrg# specified import library.
3611b789ec8aSmrgfunc_cygming_dll_for_implib_fallback_core ()
3612b789ec8aSmrg{
36130eb1301bSmrg  $opt_debug
3614b789ec8aSmrg  match_literal=`$ECHO "$1" | $SED "$sed_make_literal_regex"`
3615b789ec8aSmrg  $OBJDUMP -s --section "$1" "$2" 2>/dev/null |
3616b789ec8aSmrg    $SED '/^Contents of section '"$match_literal"':/{
3617b789ec8aSmrg      # Place marker at beginning of archive member dllname section
3618b789ec8aSmrg      s/.*/====MARK====/
3619b789ec8aSmrg      p
3620b789ec8aSmrg      d
3621b789ec8aSmrg    }
3622b789ec8aSmrg    # These lines can sometimes be longer than 43 characters, but
3623b789ec8aSmrg    # are always uninteresting
3624b789ec8aSmrg    /:[	 ]*file format pe[i]\{,1\}-/d
3625b789ec8aSmrg    /^In archive [^:]*:/d
3626b789ec8aSmrg    # Ensure marker is printed
3627b789ec8aSmrg    /^====MARK====/p
3628b789ec8aSmrg    # Remove all lines with less than 43 characters
3629b789ec8aSmrg    /^.\{43\}/!d
3630b789ec8aSmrg    # From remaining lines, remove first 43 characters
3631b789ec8aSmrg    s/^.\{43\}//' |
3632b789ec8aSmrg    $SED -n '
3633b789ec8aSmrg      # Join marker and all lines until next marker into a single line
3634b789ec8aSmrg      /^====MARK====/ b para
3635b789ec8aSmrg      H
3636b789ec8aSmrg      $ b para
3637b789ec8aSmrg      b
3638b789ec8aSmrg      :para
3639b789ec8aSmrg      x
3640b789ec8aSmrg      s/\n//g
3641b789ec8aSmrg      # Remove the marker
3642b789ec8aSmrg      s/^====MARK====//
3643b789ec8aSmrg      # Remove trailing dots and whitespace
3644b789ec8aSmrg      s/[\. \t]*$//
3645b789ec8aSmrg      # Print
3646b789ec8aSmrg      /./p' |
3647b789ec8aSmrg    # we now have a list, one entry per line, of the stringified
3648b789ec8aSmrg    # contents of the appropriate section of all members of the
36490eb1301bSmrg    # archive which possess that section. Heuristic: eliminate
36500eb1301bSmrg    # all those which have a first or second character that is
3651b789ec8aSmrg    # a '.' (that is, objdump's representation of an unprintable
3652b789ec8aSmrg    # character.) This should work for all archives with less than
3653b789ec8aSmrg    # 0x302f exports -- but will fail for DLLs whose name actually
3654b789ec8aSmrg    # begins with a literal '.' or a single character followed by
3655b789ec8aSmrg    # a '.'.
3656b789ec8aSmrg    #
3657b789ec8aSmrg    # Of those that remain, print the first one.
3658b789ec8aSmrg    $SED -e '/^\./d;/^.\./d;q'
3659b789ec8aSmrg}
3660b789ec8aSmrg
36610eb1301bSmrg# func_cygming_gnu_implib_p ARG
36620eb1301bSmrg# This predicate returns with zero status (TRUE) if
36630eb1301bSmrg# ARG is a GNU/binutils-style import library. Returns
36640eb1301bSmrg# with nonzero status (FALSE) otherwise.
36650eb1301bSmrgfunc_cygming_gnu_implib_p ()
36660eb1301bSmrg{
36670eb1301bSmrg  $opt_debug
36680eb1301bSmrg  func_to_tool_file "$1" func_convert_file_msys_to_w32
36690eb1301bSmrg  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)$'`
36700eb1301bSmrg  test -n "$func_cygming_gnu_implib_tmp"
36710eb1301bSmrg}
36720eb1301bSmrg
36730eb1301bSmrg# func_cygming_ms_implib_p ARG
36740eb1301bSmrg# This predicate returns with zero status (TRUE) if
36750eb1301bSmrg# ARG is an MS-style import library. Returns
36760eb1301bSmrg# with nonzero status (FALSE) otherwise.
36770eb1301bSmrgfunc_cygming_ms_implib_p ()
36780eb1301bSmrg{
36790eb1301bSmrg  $opt_debug
36800eb1301bSmrg  func_to_tool_file "$1" func_convert_file_msys_to_w32
36810eb1301bSmrg  func_cygming_ms_implib_tmp=`$NM "$func_to_tool_file_result" | eval "$global_symbol_pipe" | $GREP '_NULL_IMPORT_DESCRIPTOR'`
36820eb1301bSmrg  test -n "$func_cygming_ms_implib_tmp"
36830eb1301bSmrg}
36840eb1301bSmrg
3685b789ec8aSmrg# func_cygming_dll_for_implib_fallback ARG
3686b789ec8aSmrg# Platform-specific function to extract the
3687b789ec8aSmrg# name of the DLL associated with the specified
3688b789ec8aSmrg# import library ARG.
3689b789ec8aSmrg#
3690b789ec8aSmrg# This fallback implementation is for use when $DLLTOOL
3691b789ec8aSmrg# does not support the --identify-strict option.
3692b789ec8aSmrg# Invoked by eval'ing the libtool variable
3693b789ec8aSmrg#    $sharedlib_from_linklib_cmd
3694b789ec8aSmrg# Result is available in the variable
3695b789ec8aSmrg#    $sharedlib_from_linklib_result
3696b789ec8aSmrgfunc_cygming_dll_for_implib_fallback ()
3697b789ec8aSmrg{
36980eb1301bSmrg  $opt_debug
36990eb1301bSmrg  if func_cygming_gnu_implib_p "$1" ; then
3700b789ec8aSmrg    # binutils import library
3701b789ec8aSmrg    sharedlib_from_linklib_result=`func_cygming_dll_for_implib_fallback_core '.idata$7' "$1"`
37020eb1301bSmrg  elif func_cygming_ms_implib_p "$1" ; then
3703b789ec8aSmrg    # ms-generated import library
3704b789ec8aSmrg    sharedlib_from_linklib_result=`func_cygming_dll_for_implib_fallback_core '.idata$6' "$1"`
3705b789ec8aSmrg  else
3706b789ec8aSmrg    # unknown
37070eb1301bSmrg    sharedlib_from_linklib_result=""
3708b789ec8aSmrg  fi
3709b789ec8aSmrg}
3710c43cc173Smrg
3711c43cc173Smrg
3712c27c18e8Smrg# func_extract_an_archive dir oldlib
3713c27c18e8Smrgfunc_extract_an_archive ()
3714c27c18e8Smrg{
37150eb1301bSmrg    $opt_debug
37160eb1301bSmrg    f_ex_an_ar_dir="$1"; shift
37170eb1301bSmrg    f_ex_an_ar_oldlib="$1"
37180eb1301bSmrg    if test "$lock_old_archive_extraction" = yes; then
371937eb1ca1Smrg      lockfile=$f_ex_an_ar_oldlib.lock
372037eb1ca1Smrg      until $opt_dry_run || ln "$progpath" "$lockfile" 2>/dev/null; do
372137eb1ca1Smrg	func_echo "Waiting for $lockfile to be removed"
372237eb1ca1Smrg	sleep 2
372337eb1ca1Smrg      done
372437eb1ca1Smrg    fi
372537eb1ca1Smrg    func_show_eval "(cd \$f_ex_an_ar_dir && $AR x \"\$f_ex_an_ar_oldlib\")" \
372637eb1ca1Smrg		   'stat=$?; rm -f "$lockfile"; exit $stat'
37270eb1301bSmrg    if test "$lock_old_archive_extraction" = yes; then
372837eb1ca1Smrg      $opt_dry_run || rm -f "$lockfile"
372937eb1ca1Smrg    fi
3730c27c18e8Smrg    if ($AR t "$f_ex_an_ar_oldlib" | sort | sort -uc >/dev/null 2>&1); then
3731c27c18e8Smrg     :
3732c27c18e8Smrg    else
3733c27c18e8Smrg      func_fatal_error "object name conflicts in archive: $f_ex_an_ar_dir/$f_ex_an_ar_oldlib"
3734c27c18e8Smrg    fi
3735c27c18e8Smrg}
3736c43cc173Smrg
3737c43cc173Smrg
3738c27c18e8Smrg# func_extract_archives gentop oldlib ...
3739c27c18e8Smrgfunc_extract_archives ()
3740c27c18e8Smrg{
37410eb1301bSmrg    $opt_debug
37420eb1301bSmrg    my_gentop="$1"; shift
3743c27c18e8Smrg    my_oldlibs=${1+"$@"}
37440eb1301bSmrg    my_oldobjs=""
37450eb1301bSmrg    my_xlib=""
37460eb1301bSmrg    my_xabs=""
37470eb1301bSmrg    my_xdir=""
3748c43cc173Smrg
3749c27c18e8Smrg    for my_xlib in $my_oldlibs; do
3750c27c18e8Smrg      # Extract the objects.
3751c27c18e8Smrg      case $my_xlib in
37520eb1301bSmrg	[\\/]* | [A-Za-z]:[\\/]*) my_xabs="$my_xlib" ;;
3753c27c18e8Smrg	*) my_xabs=`pwd`"/$my_xlib" ;;
3754c27c18e8Smrg      esac
3755c27c18e8Smrg      func_basename "$my_xlib"
37560eb1301bSmrg      my_xlib="$func_basename_result"
3757c27c18e8Smrg      my_xlib_u=$my_xlib
3758c27c18e8Smrg      while :; do
3759c27c18e8Smrg        case " $extracted_archives " in
3760c27c18e8Smrg	*" $my_xlib_u "*)
3761c27c18e8Smrg	  func_arith $extracted_serial + 1
3762c27c18e8Smrg	  extracted_serial=$func_arith_result
3763c27c18e8Smrg	  my_xlib_u=lt$extracted_serial-$my_xlib ;;
3764c27c18e8Smrg	*) break ;;
3765c27c18e8Smrg	esac
3766c27c18e8Smrg      done
3767c27c18e8Smrg      extracted_archives="$extracted_archives $my_xlib_u"
37680eb1301bSmrg      my_xdir="$my_gentop/$my_xlib_u"
3769c43cc173Smrg
3770c27c18e8Smrg      func_mkdir_p "$my_xdir"
3771c27c18e8Smrg
3772c27c18e8Smrg      case $host in
3773c27c18e8Smrg      *-darwin*)
3774c27c18e8Smrg	func_verbose "Extracting $my_xabs"
3775c27c18e8Smrg	# Do not bother doing anything if just a dry run
3776c27c18e8Smrg	$opt_dry_run || {
3777c27c18e8Smrg	  darwin_orig_dir=`pwd`
3778c27c18e8Smrg	  cd $my_xdir || exit $?
3779c27c18e8Smrg	  darwin_archive=$my_xabs
3780c27c18e8Smrg	  darwin_curdir=`pwd`
37810eb1301bSmrg	  darwin_base_archive=`basename "$darwin_archive"`
3782c27c18e8Smrg	  darwin_arches=`$LIPO -info "$darwin_archive" 2>/dev/null | $GREP Architectures 2>/dev/null || true`
3783c27c18e8Smrg	  if test -n "$darwin_arches"; then
3784c27c18e8Smrg	    darwin_arches=`$ECHO "$darwin_arches" | $SED -e 's/.*are://'`
3785c27c18e8Smrg	    darwin_arch=
3786c27c18e8Smrg	    func_verbose "$darwin_base_archive has multiple architectures $darwin_arches"
37870eb1301bSmrg	    for darwin_arch in  $darwin_arches ; do
37880eb1301bSmrg	      func_mkdir_p "unfat-$$/${darwin_base_archive}-${darwin_arch}"
37890eb1301bSmrg	      $LIPO -thin $darwin_arch -output "unfat-$$/${darwin_base_archive}-${darwin_arch}/${darwin_base_archive}" "${darwin_archive}"
37900eb1301bSmrg	      cd "unfat-$$/${darwin_base_archive}-${darwin_arch}"
37910eb1301bSmrg	      func_extract_an_archive "`pwd`" "${darwin_base_archive}"
3792c27c18e8Smrg	      cd "$darwin_curdir"
37930eb1301bSmrg	      $RM "unfat-$$/${darwin_base_archive}-${darwin_arch}/${darwin_base_archive}"
3794c27c18e8Smrg	    done # $darwin_arches
3795c27c18e8Smrg            ## Okay now we've a bunch of thin objects, gotta fatten them up :)
37960eb1301bSmrg	    darwin_filelist=`find unfat-$$ -type f -name \*.o -print -o -name \*.lo -print | $SED -e "$basename" | sort -u`
3797c27c18e8Smrg	    darwin_file=
3798c27c18e8Smrg	    darwin_files=
3799c27c18e8Smrg	    for darwin_file in $darwin_filelist; do
380037eb1ca1Smrg	      darwin_files=`find unfat-$$ -name $darwin_file -print | sort | $NL2SP`
3801c27c18e8Smrg	      $LIPO -create -output "$darwin_file" $darwin_files
3802c27c18e8Smrg	    done # $darwin_filelist
3803c27c18e8Smrg	    $RM -rf unfat-$$
3804c27c18e8Smrg	    cd "$darwin_orig_dir"
3805c43cc173Smrg	  else
3806c27c18e8Smrg	    cd $darwin_orig_dir
3807c27c18e8Smrg	    func_extract_an_archive "$my_xdir" "$my_xabs"
3808c27c18e8Smrg	  fi # $darwin_arches
3809c27c18e8Smrg	} # !$opt_dry_run
3810c27c18e8Smrg	;;
3811c27c18e8Smrg      *)
3812c27c18e8Smrg        func_extract_an_archive "$my_xdir" "$my_xabs"
3813c27c18e8Smrg	;;
3814c27c18e8Smrg      esac
381537eb1ca1Smrg      my_oldobjs="$my_oldobjs "`find $my_xdir -name \*.$objext -print -o -name \*.lo -print | sort | $NL2SP`
3816c27c18e8Smrg    done
3817c43cc173Smrg
38180eb1301bSmrg    func_extract_archives_result="$my_oldobjs"
3819c27c18e8Smrg}
3820c43cc173Smrg
3821c43cc173Smrg
382237eb1ca1Smrg# func_emit_wrapper [arg=no]
382337eb1ca1Smrg#
382437eb1ca1Smrg# Emit a libtool wrapper script on stdout.
382537eb1ca1Smrg# Don't directly open a file because we may want to
382637eb1ca1Smrg# incorporate the script contents within a cygwin/mingw
382737eb1ca1Smrg# wrapper executable.  Must ONLY be called from within
382837eb1ca1Smrg# func_mode_link because it depends on a number of variables
382937eb1ca1Smrg# set therein.
3830c27c18e8Smrg#
383137eb1ca1Smrg# ARG is the value that the WRAPPER_SCRIPT_BELONGS_IN_OBJDIR
383237eb1ca1Smrg# variable will take.  If 'yes', then the emitted script
38330eb1301bSmrg# will assume that the directory in which it is stored is
383437eb1ca1Smrg# the $objdir directory.  This is a cygwin/mingw-specific
383537eb1ca1Smrg# behavior.
383637eb1ca1Smrgfunc_emit_wrapper ()
3837c27c18e8Smrg{
383837eb1ca1Smrg	func_emit_wrapper_arg1=${1-no}
3839c43cc173Smrg
3840c27c18e8Smrg	$ECHO "\
3841c27c18e8Smrg#! $SHELL
3842c43cc173Smrg
3843c27c18e8Smrg# $output - temporary wrapper script for $objdir/$outputname
38440eb1301bSmrg# Generated by $PROGRAM (GNU $PACKAGE$TIMESTAMP) $VERSION
3845c27c18e8Smrg#
3846c27c18e8Smrg# The $output program cannot be directly executed until all the libtool
3847c27c18e8Smrg# libraries that it depends on are installed.
3848c27c18e8Smrg#
3849c27c18e8Smrg# This wrapper script should never be moved out of the build directory.
3850c27c18e8Smrg# If it is, it will not operate correctly.
3851c43cc173Smrg
3852c27c18e8Smrg# Sed substitution that helps us do robust quoting.  It backslashifies
3853c27c18e8Smrg# metacharacters that are still active within double-quoted strings.
3854c27c18e8Smrgsed_quote_subst='$sed_quote_subst'
3855c43cc173Smrg
3856c27c18e8Smrg# Be Bourne compatible
3857c27c18e8Smrgif test -n \"\${ZSH_VERSION+set}\" && (emulate sh) >/dev/null 2>&1; then
3858c27c18e8Smrg  emulate sh
3859c27c18e8Smrg  NULLCMD=:
3860c27c18e8Smrg  # Zsh 3.x and 4.x performs word splitting on \${1+\"\$@\"}, which
3861c27c18e8Smrg  # is contrary to our usage.  Disable this feature.
3862c27c18e8Smrg  alias -g '\${1+\"\$@\"}'='\"\$@\"'
3863c27c18e8Smrg  setopt NO_GLOB_SUBST
3864c27c18e8Smrgelse
3865c27c18e8Smrg  case \`(set -o) 2>/dev/null\` in *posix*) set -o posix;; esac
3866c27c18e8Smrgfi
3867c27c18e8SmrgBIN_SH=xpg4; export BIN_SH # for Tru64
3868c27c18e8SmrgDUALCASE=1; export DUALCASE # for MKS sh
3869c43cc173Smrg
3870c27c18e8Smrg# The HP-UX ksh and POSIX shell print the target directory to stdout
3871c27c18e8Smrg# if CDPATH is set.
3872c27c18e8Smrg(unset CDPATH) >/dev/null 2>&1 && unset CDPATH
3873c43cc173Smrg
3874c27c18e8Smrgrelink_command=\"$relink_command\"
3875c43cc173Smrg
3876c27c18e8Smrg# This environment variable determines our operation mode.
3877c27c18e8Smrgif test \"\$libtool_install_magic\" = \"$magic\"; then
3878c27c18e8Smrg  # install mode needs the following variables:
3879c27c18e8Smrg  generated_by_libtool_version='$macro_version'
3880c27c18e8Smrg  notinst_deplibs='$notinst_deplibs'
3881c27c18e8Smrgelse
3882c27c18e8Smrg  # When we are sourced in execute mode, \$file and \$ECHO are already set.
3883c27c18e8Smrg  if test \"\$libtool_execute_magic\" != \"$magic\"; then
388437eb1ca1Smrg    file=\"\$0\""
388537eb1ca1Smrg
388637eb1ca1Smrg    qECHO=`$ECHO "$ECHO" | $SED "$sed_quote_subst"`
388737eb1ca1Smrg    $ECHO "\
388837eb1ca1Smrg
388937eb1ca1Smrg# A function that is used when there is no print builtin or printf.
389037eb1ca1Smrgfunc_fallback_echo ()
389137eb1ca1Smrg{
389237eb1ca1Smrg  eval 'cat <<_LTECHO_EOF
389337eb1ca1Smrg\$1
389437eb1ca1Smrg_LTECHO_EOF'
389537eb1ca1Smrg}
389637eb1ca1Smrg    ECHO=\"$qECHO\"
389737eb1ca1Smrg  fi
389837eb1ca1Smrg
389937eb1ca1Smrg# Very basic option parsing. These options are (a) specific to
390037eb1ca1Smrg# the libtool wrapper, (b) are identical between the wrapper
39010eb1301bSmrg# /script/ and the wrapper /executable/ which is used only on
390237eb1ca1Smrg# windows platforms, and (c) all begin with the string "--lt-"
39030eb1301bSmrg# (application programs are unlikely to have options which match
390437eb1ca1Smrg# this pattern).
390537eb1ca1Smrg#
390637eb1ca1Smrg# There are only two supported options: --lt-debug and
390737eb1ca1Smrg# --lt-dump-script. There is, deliberately, no --lt-help.
390837eb1ca1Smrg#
390937eb1ca1Smrg# The first argument to this parsing function should be the
391037eb1ca1Smrg# script's $0 value, followed by "$@".
391137eb1ca1Smrglt_option_debug=
391237eb1ca1Smrgfunc_parse_lt_options ()
391337eb1ca1Smrg{
391437eb1ca1Smrg  lt_script_arg0=\$0
391537eb1ca1Smrg  shift
391637eb1ca1Smrg  for lt_opt
391737eb1ca1Smrg  do
391837eb1ca1Smrg    case \"\$lt_opt\" in
391937eb1ca1Smrg    --lt-debug) lt_option_debug=1 ;;
392037eb1ca1Smrg    --lt-dump-script)
392137eb1ca1Smrg        lt_dump_D=\`\$ECHO \"X\$lt_script_arg0\" | $SED -e 's/^X//' -e 's%/[^/]*$%%'\`
392237eb1ca1Smrg        test \"X\$lt_dump_D\" = \"X\$lt_script_arg0\" && lt_dump_D=.
392337eb1ca1Smrg        lt_dump_F=\`\$ECHO \"X\$lt_script_arg0\" | $SED -e 's/^X//' -e 's%^.*/%%'\`
392437eb1ca1Smrg        cat \"\$lt_dump_D/\$lt_dump_F\"
392537eb1ca1Smrg        exit 0
392637eb1ca1Smrg      ;;
392737eb1ca1Smrg    --lt-*)
392837eb1ca1Smrg        \$ECHO \"Unrecognized --lt- option: '\$lt_opt'\" 1>&2
392937eb1ca1Smrg        exit 1
393037eb1ca1Smrg      ;;
393137eb1ca1Smrg    esac
393237eb1ca1Smrg  done
393337eb1ca1Smrg
393437eb1ca1Smrg  # Print the debug banner immediately:
393537eb1ca1Smrg  if test -n \"\$lt_option_debug\"; then
39360eb1301bSmrg    echo \"${outputname}:${output}:\${LINENO}: libtool wrapper (GNU $PACKAGE$TIMESTAMP) $VERSION\" 1>&2
393737eb1ca1Smrg  fi
393837eb1ca1Smrg}
393937eb1ca1Smrg
394037eb1ca1Smrg# Used when --lt-debug. Prints its arguments to stdout
394137eb1ca1Smrg# (redirection is the responsibility of the caller)
394237eb1ca1Smrgfunc_lt_dump_args ()
394337eb1ca1Smrg{
394437eb1ca1Smrg  lt_dump_args_N=1;
394537eb1ca1Smrg  for lt_arg
394637eb1ca1Smrg  do
39470eb1301bSmrg    \$ECHO \"${outputname}:${output}:\${LINENO}: newargv[\$lt_dump_args_N]: \$lt_arg\"
394837eb1ca1Smrg    lt_dump_args_N=\`expr \$lt_dump_args_N + 1\`
394937eb1ca1Smrg  done
395037eb1ca1Smrg}
395137eb1ca1Smrg
395237eb1ca1Smrg# Core function for launching the target application
395337eb1ca1Smrgfunc_exec_program_core ()
395437eb1ca1Smrg{
3955c27c18e8Smrg"
395637eb1ca1Smrg  case $host in
395737eb1ca1Smrg  # Backslashes separate directories on plain windows
395837eb1ca1Smrg  *-*-mingw | *-*-os2* | *-cegcc*)
395937eb1ca1Smrg    $ECHO "\
396037eb1ca1Smrg      if test -n \"\$lt_option_debug\"; then
39610eb1301bSmrg        \$ECHO \"${outputname}:${output}:\${LINENO}: newargv[0]: \$progdir\\\\\$program\" 1>&2
396237eb1ca1Smrg        func_lt_dump_args \${1+\"\$@\"} 1>&2
396337eb1ca1Smrg      fi
396437eb1ca1Smrg      exec \"\$progdir\\\\\$program\" \${1+\"\$@\"}
396537eb1ca1Smrg"
396637eb1ca1Smrg    ;;
396737eb1ca1Smrg
396837eb1ca1Smrg  *)
396937eb1ca1Smrg    $ECHO "\
397037eb1ca1Smrg      if test -n \"\$lt_option_debug\"; then
39710eb1301bSmrg        \$ECHO \"${outputname}:${output}:\${LINENO}: newargv[0]: \$progdir/\$program\" 1>&2
397237eb1ca1Smrg        func_lt_dump_args \${1+\"\$@\"} 1>&2
397337eb1ca1Smrg      fi
397437eb1ca1Smrg      exec \"\$progdir/\$program\" \${1+\"\$@\"}
397537eb1ca1Smrg"
397637eb1ca1Smrg    ;;
397737eb1ca1Smrg  esac
397837eb1ca1Smrg  $ECHO "\
397937eb1ca1Smrg      \$ECHO \"\$0: cannot exec \$program \$*\" 1>&2
398037eb1ca1Smrg      exit 1
398137eb1ca1Smrg}
398237eb1ca1Smrg
398337eb1ca1Smrg# A function to encapsulate launching the target application
398437eb1ca1Smrg# Strips options in the --lt-* namespace from \$@ and
398537eb1ca1Smrg# launches target application with the remaining arguments.
398637eb1ca1Smrgfunc_exec_program ()
398737eb1ca1Smrg{
3988f1ee322dSmrg  case \" \$* \" in
3989f1ee322dSmrg  *\\ --lt-*)
3990f1ee322dSmrg    for lt_wr_arg
3991f1ee322dSmrg    do
3992f1ee322dSmrg      case \$lt_wr_arg in
3993f1ee322dSmrg      --lt-*) ;;
3994f1ee322dSmrg      *) set x \"\$@\" \"\$lt_wr_arg\"; shift;;
3995f1ee322dSmrg      esac
3996f1ee322dSmrg      shift
3997f1ee322dSmrg    done ;;
3998f1ee322dSmrg  esac
399937eb1ca1Smrg  func_exec_program_core \${1+\"\$@\"}
400037eb1ca1Smrg}
400137eb1ca1Smrg
400237eb1ca1Smrg  # Parse options
400337eb1ca1Smrg  func_parse_lt_options \"\$0\" \${1+\"\$@\"}
4004c43cc173Smrg
4005c27c18e8Smrg  # Find the directory that this script lives in.
400637eb1ca1Smrg  thisdir=\`\$ECHO \"\$file\" | $SED 's%/[^/]*$%%'\`
4007c27c18e8Smrg  test \"x\$thisdir\" = \"x\$file\" && thisdir=.
4008c43cc173Smrg
4009c27c18e8Smrg  # Follow symbolic links until we get to the real thisdir.
401037eb1ca1Smrg  file=\`ls -ld \"\$file\" | $SED -n 's/.*-> //p'\`
4011c27c18e8Smrg  while test -n \"\$file\"; do
401237eb1ca1Smrg    destdir=\`\$ECHO \"\$file\" | $SED 's%/[^/]*\$%%'\`
4013c27c18e8Smrg
4014c27c18e8Smrg    # If there was a directory component, then change thisdir.
4015c27c18e8Smrg    if test \"x\$destdir\" != \"x\$file\"; then
4016c27c18e8Smrg      case \"\$destdir\" in
4017c27c18e8Smrg      [\\\\/]* | [A-Za-z]:[\\\\/]*) thisdir=\"\$destdir\" ;;
4018c27c18e8Smrg      *) thisdir=\"\$thisdir/\$destdir\" ;;
4019c43cc173Smrg      esac
4020c27c18e8Smrg    fi
4021c43cc173Smrg
402237eb1ca1Smrg    file=\`\$ECHO \"\$file\" | $SED 's%^.*/%%'\`
402337eb1ca1Smrg    file=\`ls -ld \"\$thisdir/\$file\" | $SED -n 's/.*-> //p'\`
4024c27c18e8Smrg  done
4025c43cc173Smrg
4026c27c18e8Smrg  # Usually 'no', except on cygwin/mingw when embedded into
4027c27c18e8Smrg  # the cwrapper.
402837eb1ca1Smrg  WRAPPER_SCRIPT_BELONGS_IN_OBJDIR=$func_emit_wrapper_arg1
4029c27c18e8Smrg  if test \"\$WRAPPER_SCRIPT_BELONGS_IN_OBJDIR\" = \"yes\"; then
4030c27c18e8Smrg    # special case for '.'
4031c27c18e8Smrg    if test \"\$thisdir\" = \".\"; then
4032c27c18e8Smrg      thisdir=\`pwd\`
4033c27c18e8Smrg    fi
4034c27c18e8Smrg    # remove .libs from thisdir
4035c27c18e8Smrg    case \"\$thisdir\" in
403637eb1ca1Smrg    *[\\\\/]$objdir ) thisdir=\`\$ECHO \"\$thisdir\" | $SED 's%[\\\\/][^\\\\/]*$%%'\` ;;
4037c27c18e8Smrg    $objdir )   thisdir=. ;;
4038c27c18e8Smrg    esac
4039c27c18e8Smrg  fi
4040c27c18e8Smrg
4041c27c18e8Smrg  # Try to get the absolute directory name.
4042c27c18e8Smrg  absdir=\`cd \"\$thisdir\" && pwd\`
4043c27c18e8Smrg  test -n \"\$absdir\" && thisdir=\"\$absdir\"
4044c27c18e8Smrg"
4045c27c18e8Smrg
40460eb1301bSmrg	if test "$fast_install" = yes; then
4047c27c18e8Smrg	  $ECHO "\
4048c27c18e8Smrg  program=lt-'$outputname'$exeext
4049c27c18e8Smrg  progdir=\"\$thisdir/$objdir\"
4050c27c18e8Smrg
4051c27c18e8Smrg  if test ! -f \"\$progdir/\$program\" ||
40520eb1301bSmrg     { file=\`ls -1dt \"\$progdir/\$program\" \"\$progdir/../\$program\" 2>/dev/null | ${SED} 1q\`; \\
4053c27c18e8Smrg       test \"X\$file\" != \"X\$progdir/\$program\"; }; then
4054c27c18e8Smrg
4055c27c18e8Smrg    file=\"\$\$-\$program\"
4056c27c18e8Smrg
4057c27c18e8Smrg    if test ! -d \"\$progdir\"; then
4058c27c18e8Smrg      $MKDIR \"\$progdir\"
4059c27c18e8Smrg    else
4060c27c18e8Smrg      $RM \"\$progdir/\$file\"
4061c27c18e8Smrg    fi"
4062c27c18e8Smrg
4063c27c18e8Smrg	  $ECHO "\
4064c27c18e8Smrg
4065c27c18e8Smrg    # relink executable if necessary
4066c27c18e8Smrg    if test -n \"\$relink_command\"; then
4067c27c18e8Smrg      if relink_command_output=\`eval \$relink_command 2>&1\`; then :
4068c27c18e8Smrg      else
40690eb1301bSmrg	$ECHO \"\$relink_command_output\" >&2
4070c27c18e8Smrg	$RM \"\$progdir/\$file\"
4071c27c18e8Smrg	exit 1
4072c43cc173Smrg      fi
4073c27c18e8Smrg    fi
4074c43cc173Smrg
4075c27c18e8Smrg    $MV \"\$progdir/\$file\" \"\$progdir/\$program\" 2>/dev/null ||
4076c27c18e8Smrg    { $RM \"\$progdir/\$program\";
4077c27c18e8Smrg      $MV \"\$progdir/\$file\" \"\$progdir/\$program\"; }
4078c27c18e8Smrg    $RM \"\$progdir/\$file\"
4079c27c18e8Smrg  fi"
4080c27c18e8Smrg	else
4081c27c18e8Smrg	  $ECHO "\
4082c27c18e8Smrg  program='$outputname'
4083c27c18e8Smrg  progdir=\"\$thisdir/$objdir\"
4084c27c18e8Smrg"
4085c43cc173Smrg	fi
4086c43cc173Smrg
4087c27c18e8Smrg	$ECHO "\
4088c27c18e8Smrg
4089c27c18e8Smrg  if test -f \"\$progdir/\$program\"; then"
4090c27c18e8Smrg
4091b789ec8aSmrg	# fixup the dll searchpath if we need to.
4092b789ec8aSmrg	#
4093b789ec8aSmrg	# Fix the DLL searchpath if we need to.  Do this before prepending
4094b789ec8aSmrg	# to shlibpath, because on Windows, both are PATH and uninstalled
4095b789ec8aSmrg	# libraries must come first.
4096b789ec8aSmrg	if test -n "$dllsearchpath"; then
4097b789ec8aSmrg	  $ECHO "\
4098b789ec8aSmrg    # Add the dll search path components to the executable PATH
4099b789ec8aSmrg    PATH=$dllsearchpath:\$PATH
4100b789ec8aSmrg"
4101b789ec8aSmrg	fi
4102b789ec8aSmrg
4103c27c18e8Smrg	# Export our shlibpath_var if we have one.
41040eb1301bSmrg	if test "$shlibpath_overrides_runpath" = yes && test -n "$shlibpath_var" && test -n "$temp_rpath"; then
4105c27c18e8Smrg	  $ECHO "\
4106c27c18e8Smrg    # Add our own library path to $shlibpath_var
4107c27c18e8Smrg    $shlibpath_var=\"$temp_rpath\$$shlibpath_var\"
4108c27c18e8Smrg
4109c27c18e8Smrg    # Some systems cannot cope with colon-terminated $shlibpath_var
4110c27c18e8Smrg    # The second colon is a workaround for a bug in BeOS R4 sed
411137eb1ca1Smrg    $shlibpath_var=\`\$ECHO \"\$$shlibpath_var\" | $SED 's/::*\$//'\`
4112c27c18e8Smrg
4113c27c18e8Smrg    export $shlibpath_var
4114c27c18e8Smrg"
4115c43cc173Smrg	fi
4116c43cc173Smrg
4117c27c18e8Smrg	$ECHO "\
4118c27c18e8Smrg    if test \"\$libtool_execute_magic\" != \"$magic\"; then
4119c27c18e8Smrg      # Run the actual program with our arguments.
412037eb1ca1Smrg      func_exec_program \${1+\"\$@\"}
4121c27c18e8Smrg    fi
4122c27c18e8Smrg  else
4123c27c18e8Smrg    # The program doesn't exist.
41240eb1301bSmrg    \$ECHO \"\$0: error: \\\`\$progdir/\$program' does not exist\" 1>&2
4125c27c18e8Smrg    \$ECHO \"This script is just a wrapper for \$program.\" 1>&2
412637eb1ca1Smrg    \$ECHO \"See the $PACKAGE documentation for more information.\" 1>&2
4127c27c18e8Smrg    exit 1
4128c27c18e8Smrg  fi
4129c27c18e8Smrgfi\
4130c27c18e8Smrg"
4131c27c18e8Smrg}
4132c43cc173Smrg
4133c43cc173Smrg
4134c27c18e8Smrg# func_emit_cwrapperexe_src
4135c27c18e8Smrg# emit the source code for a wrapper executable on stdout
4136c27c18e8Smrg# Must ONLY be called from within func_mode_link because
4137c27c18e8Smrg# it depends on a number of variable set therein.
4138c27c18e8Smrgfunc_emit_cwrapperexe_src ()
4139c27c18e8Smrg{
4140c27c18e8Smrg	cat <<EOF
4141c43cc173Smrg
4142c27c18e8Smrg/* $cwrappersource - temporary wrapper executable for $objdir/$outputname
41430eb1301bSmrg   Generated by $PROGRAM (GNU $PACKAGE$TIMESTAMP) $VERSION
4144c43cc173Smrg
4145c27c18e8Smrg   The $output program cannot be directly executed until all the libtool
4146c27c18e8Smrg   libraries that it depends on are installed.
4147c43cc173Smrg
4148c27c18e8Smrg   This wrapper executable should never be moved out of the build directory.
4149c27c18e8Smrg   If it is, it will not operate correctly.
4150c27c18e8Smrg*/
4151c27c18e8SmrgEOF
4152c27c18e8Smrg	    cat <<"EOF"
415337eb1ca1Smrg#ifdef _MSC_VER
415437eb1ca1Smrg# define _CRT_SECURE_NO_DEPRECATE 1
415537eb1ca1Smrg#endif
4156c27c18e8Smrg#include <stdio.h>
4157c27c18e8Smrg#include <stdlib.h>
4158c27c18e8Smrg#ifdef _MSC_VER
4159c27c18e8Smrg# include <direct.h>
4160c27c18e8Smrg# include <process.h>
4161c27c18e8Smrg# include <io.h>
4162c27c18e8Smrg#else
4163c27c18e8Smrg# include <unistd.h>
4164c27c18e8Smrg# include <stdint.h>
4165c27c18e8Smrg# ifdef __CYGWIN__
4166c27c18e8Smrg#  include <io.h>
4167c27c18e8Smrg# endif
4168c27c18e8Smrg#endif
4169c27c18e8Smrg#include <malloc.h>
4170c27c18e8Smrg#include <stdarg.h>
4171c27c18e8Smrg#include <assert.h>
4172c27c18e8Smrg#include <string.h>
4173c27c18e8Smrg#include <ctype.h>
4174c27c18e8Smrg#include <errno.h>
4175c27c18e8Smrg#include <fcntl.h>
4176c27c18e8Smrg#include <sys/stat.h>
4177c43cc173Smrg
417837eb1ca1Smrg/* declarations of non-ANSI functions */
41790eb1301bSmrg#if defined(__MINGW32__)
418037eb1ca1Smrg# ifdef __STRICT_ANSI__
418137eb1ca1Smrgint _putenv (const char *);
418237eb1ca1Smrg# endif
41830eb1301bSmrg#elif defined(__CYGWIN__)
418437eb1ca1Smrg# ifdef __STRICT_ANSI__
418537eb1ca1Smrgchar *realpath (const char *, char *);
418637eb1ca1Smrgint putenv (char *);
418737eb1ca1Smrgint setenv (const char *, const char *, int);
418837eb1ca1Smrg# endif
41890eb1301bSmrg/* #elif defined (other platforms) ... */
419037eb1ca1Smrg#endif
419137eb1ca1Smrg
419237eb1ca1Smrg/* portability defines, excluding path handling macros */
41930eb1301bSmrg#if defined(_MSC_VER)
419437eb1ca1Smrg# define setmode _setmode
419537eb1ca1Smrg# define stat    _stat
419637eb1ca1Smrg# define chmod   _chmod
419737eb1ca1Smrg# define getcwd  _getcwd
419837eb1ca1Smrg# define putenv  _putenv
419937eb1ca1Smrg# define S_IXUSR _S_IEXEC
42000eb1301bSmrg# ifndef _INTPTR_T_DEFINED
42010eb1301bSmrg#  define _INTPTR_T_DEFINED
42020eb1301bSmrg#  define intptr_t int
42030eb1301bSmrg# endif
42040eb1301bSmrg#elif defined(__MINGW32__)
420537eb1ca1Smrg# define setmode _setmode
420637eb1ca1Smrg# define stat    _stat
420737eb1ca1Smrg# define chmod   _chmod
420837eb1ca1Smrg# define getcwd  _getcwd
420937eb1ca1Smrg# define putenv  _putenv
42100eb1301bSmrg#elif defined(__CYGWIN__)
421137eb1ca1Smrg# define HAVE_SETENV
421237eb1ca1Smrg# define FOPEN_WB "wb"
42130eb1301bSmrg/* #elif defined (other platforms) ... */
421437eb1ca1Smrg#endif
421537eb1ca1Smrg
42160eb1301bSmrg#if defined(PATH_MAX)
4217c27c18e8Smrg# define LT_PATHMAX PATH_MAX
42180eb1301bSmrg#elif defined(MAXPATHLEN)
4219c27c18e8Smrg# define LT_PATHMAX MAXPATHLEN
4220c27c18e8Smrg#else
4221c27c18e8Smrg# define LT_PATHMAX 1024
4222c27c18e8Smrg#endif
4223c43cc173Smrg
4224c27c18e8Smrg#ifndef S_IXOTH
4225c27c18e8Smrg# define S_IXOTH 0
4226c27c18e8Smrg#endif
4227c27c18e8Smrg#ifndef S_IXGRP
4228c27c18e8Smrg# define S_IXGRP 0
4229c27c18e8Smrg#endif
4230c43cc173Smrg
423137eb1ca1Smrg/* path handling portability macros */
4232c27c18e8Smrg#ifndef DIR_SEPARATOR
4233c27c18e8Smrg# define DIR_SEPARATOR '/'
4234c27c18e8Smrg# define PATH_SEPARATOR ':'
4235c27c18e8Smrg#endif
4236c43cc173Smrg
42370eb1301bSmrg#if defined (_WIN32) || defined (__MSDOS__) || defined (__DJGPP__) || \
42380eb1301bSmrg  defined (__OS2__)
4239c27c18e8Smrg# define HAVE_DOS_BASED_FILE_SYSTEM
4240c27c18e8Smrg# define FOPEN_WB "wb"
4241c27c18e8Smrg# ifndef DIR_SEPARATOR_2
4242c27c18e8Smrg#  define DIR_SEPARATOR_2 '\\'
4243c27c18e8Smrg# endif
4244c27c18e8Smrg# ifndef PATH_SEPARATOR_2
4245c27c18e8Smrg#  define PATH_SEPARATOR_2 ';'
4246c27c18e8Smrg# endif
4247c27c18e8Smrg#endif
4248c43cc173Smrg
4249c27c18e8Smrg#ifndef DIR_SEPARATOR_2
4250c27c18e8Smrg# define IS_DIR_SEPARATOR(ch) ((ch) == DIR_SEPARATOR)
4251c27c18e8Smrg#else /* DIR_SEPARATOR_2 */
4252c27c18e8Smrg# define IS_DIR_SEPARATOR(ch) \
4253c27c18e8Smrg	(((ch) == DIR_SEPARATOR) || ((ch) == DIR_SEPARATOR_2))
4254c27c18e8Smrg#endif /* DIR_SEPARATOR_2 */
4255c43cc173Smrg
4256c27c18e8Smrg#ifndef PATH_SEPARATOR_2
4257c27c18e8Smrg# define IS_PATH_SEPARATOR(ch) ((ch) == PATH_SEPARATOR)
4258c27c18e8Smrg#else /* PATH_SEPARATOR_2 */
4259c27c18e8Smrg# define IS_PATH_SEPARATOR(ch) ((ch) == PATH_SEPARATOR_2)
4260c27c18e8Smrg#endif /* PATH_SEPARATOR_2 */
4261c43cc173Smrg
4262c27c18e8Smrg#ifndef FOPEN_WB
4263c27c18e8Smrg# define FOPEN_WB "w"
4264c27c18e8Smrg#endif
4265c27c18e8Smrg#ifndef _O_BINARY
4266c27c18e8Smrg# define _O_BINARY 0
4267c27c18e8Smrg#endif
4268c43cc173Smrg
4269c27c18e8Smrg#define XMALLOC(type, num)      ((type *) xmalloc ((num) * sizeof(type)))
4270c27c18e8Smrg#define XFREE(stale) do { \
42710eb1301bSmrg  if (stale) { free ((void *) stale); stale = 0; } \
4272c27c18e8Smrg} while (0)
4273c43cc173Smrg
42740eb1301bSmrg#if defined(LT_DEBUGWRAPPER)
427537eb1ca1Smrgstatic int lt_debug = 1;
4276c27c18e8Smrg#else
427737eb1ca1Smrgstatic int lt_debug = 0;
4278c27c18e8Smrg#endif
4279c43cc173Smrg
428037eb1ca1Smrgconst char *program_name = "libtool-wrapper"; /* in case xstrdup fails */
4281c43cc173Smrg
4282c27c18e8Smrgvoid *xmalloc (size_t num);
4283c27c18e8Smrgchar *xstrdup (const char *string);
4284c27c18e8Smrgconst char *base_name (const char *name);
4285c27c18e8Smrgchar *find_executable (const char *wrapper);
4286c27c18e8Smrgchar *chase_symlinks (const char *pathspec);
4287c27c18e8Smrgint make_executable (const char *path);
4288c27c18e8Smrgint check_executable (const char *path);
4289c27c18e8Smrgchar *strendzap (char *str, const char *pat);
429037eb1ca1Smrgvoid lt_debugprintf (const char *file, int line, const char *fmt, ...);
429137eb1ca1Smrgvoid lt_fatal (const char *file, int line, const char *message, ...);
429237eb1ca1Smrgstatic const char *nonnull (const char *s);
429337eb1ca1Smrgstatic const char *nonempty (const char *s);
4294c27c18e8Smrgvoid lt_setenv (const char *name, const char *value);
4295c27c18e8Smrgchar *lt_extend_str (const char *orig_value, const char *add, int to_end);
4296c27c18e8Smrgvoid lt_update_exe_path (const char *name, const char *value);
4297c27c18e8Smrgvoid lt_update_lib_path (const char *name, const char *value);
429837eb1ca1Smrgchar **prepare_spawn (char **argv);
429937eb1ca1Smrgvoid lt_dump_script (FILE *f);
4300c27c18e8SmrgEOF
4301c27c18e8Smrg
4302c27c18e8Smrg	    cat <<EOF
43030eb1301bSmrgvolatile const char * MAGIC_EXE = "$magic_exe";
4304c27c18e8Smrgconst char * LIB_PATH_VARNAME = "$shlibpath_var";
4305c27c18e8SmrgEOF
4306c43cc173Smrg
43070eb1301bSmrg	    if test "$shlibpath_overrides_runpath" = yes && test -n "$shlibpath_var" && test -n "$temp_rpath"; then
4308b789ec8aSmrg              func_to_host_path "$temp_rpath"
4309c27c18e8Smrg	      cat <<EOF
4310b789ec8aSmrgconst char * LIB_PATH_VALUE   = "$func_to_host_path_result";
4311c27c18e8SmrgEOF
4312c27c18e8Smrg	    else
4313c27c18e8Smrg	      cat <<"EOF"
4314c27c18e8Smrgconst char * LIB_PATH_VALUE   = "";
4315c27c18e8SmrgEOF
4316c27c18e8Smrg	    fi
4317c43cc173Smrg
4318c27c18e8Smrg	    if test -n "$dllsearchpath"; then
4319b789ec8aSmrg              func_to_host_path "$dllsearchpath:"
4320c27c18e8Smrg	      cat <<EOF
4321c27c18e8Smrgconst char * EXE_PATH_VARNAME = "PATH";
4322b789ec8aSmrgconst char * EXE_PATH_VALUE   = "$func_to_host_path_result";
4323c27c18e8SmrgEOF
4324c27c18e8Smrg	    else
4325c27c18e8Smrg	      cat <<"EOF"
4326c27c18e8Smrgconst char * EXE_PATH_VARNAME = "";
4327c27c18e8Smrgconst char * EXE_PATH_VALUE   = "";
4328c27c18e8SmrgEOF
4329c27c18e8Smrg	    fi
4330c43cc173Smrg
43310eb1301bSmrg	    if test "$fast_install" = yes; then
4332c27c18e8Smrg	      cat <<EOF
4333c27c18e8Smrgconst char * TARGET_PROGRAM_NAME = "lt-$outputname"; /* hopefully, no .exe */
4334c27c18e8SmrgEOF
4335c27c18e8Smrg	    else
4336c27c18e8Smrg	      cat <<EOF
4337c27c18e8Smrgconst char * TARGET_PROGRAM_NAME = "$outputname"; /* hopefully, no .exe */
4338c27c18e8SmrgEOF
4339c27c18e8Smrg	    fi
4340c43cc173Smrg
4341c43cc173Smrg
4342c27c18e8Smrg	    cat <<"EOF"
4343c43cc173Smrg
4344c27c18e8Smrg#define LTWRAPPER_OPTION_PREFIX         "--lt-"
4345c43cc173Smrg
4346c27c18e8Smrgstatic const char *ltwrapper_option_prefix = LTWRAPPER_OPTION_PREFIX;
4347c27c18e8Smrgstatic const char *dumpscript_opt       = LTWRAPPER_OPTION_PREFIX "dump-script";
434837eb1ca1Smrgstatic const char *debug_opt            = LTWRAPPER_OPTION_PREFIX "debug";
4349c27c18e8Smrg
4350c27c18e8Smrgint
4351c27c18e8Smrgmain (int argc, char *argv[])
4352c27c18e8Smrg{
4353c27c18e8Smrg  char **newargz;
4354c27c18e8Smrg  int  newargc;
4355c27c18e8Smrg  char *tmp_pathspec;
4356c27c18e8Smrg  char *actual_cwrapper_path;
4357c27c18e8Smrg  char *actual_cwrapper_name;
4358c27c18e8Smrg  char *target_name;
4359c27c18e8Smrg  char *lt_argv_zero;
43600eb1301bSmrg  intptr_t rval = 127;
4361c27c18e8Smrg
4362c27c18e8Smrg  int i;
4363c27c18e8Smrg
4364c27c18e8Smrg  program_name = (char *) xstrdup (base_name (argv[0]));
43650eb1301bSmrg  newargz = XMALLOC (char *, argc + 1);
4366c27c18e8Smrg
436737eb1ca1Smrg  /* very simple arg parsing; don't want to rely on getopt
436837eb1ca1Smrg   * also, copy all non cwrapper options to newargz, except
436937eb1ca1Smrg   * argz[0], which is handled differently
437037eb1ca1Smrg   */
437137eb1ca1Smrg  newargc=0;
4372c27c18e8Smrg  for (i = 1; i < argc; i++)
4373c27c18e8Smrg    {
43740eb1301bSmrg      if (strcmp (argv[i], dumpscript_opt) == 0)
4375c27c18e8Smrg	{
4376c27c18e8SmrgEOF
43770eb1301bSmrg	    case "$host" in
4378c27c18e8Smrg	      *mingw* | *cygwin* )
4379c27c18e8Smrg		# make stdout use "unix" line endings
4380c27c18e8Smrg		echo "          setmode(1,_O_BINARY);"
4381c27c18e8Smrg		;;
4382c27c18e8Smrg	      esac
4383c27c18e8Smrg
4384c27c18e8Smrg	    cat <<"EOF"
438537eb1ca1Smrg	  lt_dump_script (stdout);
4386c27c18e8Smrg	  return 0;
4387c27c18e8Smrg	}
43880eb1301bSmrg      if (strcmp (argv[i], debug_opt) == 0)
438937eb1ca1Smrg	{
439037eb1ca1Smrg          lt_debug = 1;
439137eb1ca1Smrg          continue;
439237eb1ca1Smrg	}
43930eb1301bSmrg      if (strcmp (argv[i], ltwrapper_option_prefix) == 0)
439437eb1ca1Smrg        {
439537eb1ca1Smrg          /* however, if there is an option in the LTWRAPPER_OPTION_PREFIX
439637eb1ca1Smrg             namespace, but it is not one of the ones we know about and
439737eb1ca1Smrg             have already dealt with, above (inluding dump-script), then
439837eb1ca1Smrg             report an error. Otherwise, targets might begin to believe
439937eb1ca1Smrg             they are allowed to use options in the LTWRAPPER_OPTION_PREFIX
440037eb1ca1Smrg             namespace. The first time any user complains about this, we'll
440137eb1ca1Smrg             need to make LTWRAPPER_OPTION_PREFIX a configure-time option
440237eb1ca1Smrg             or a configure.ac-settable value.
440337eb1ca1Smrg           */
440437eb1ca1Smrg          lt_fatal (__FILE__, __LINE__,
440537eb1ca1Smrg		    "unrecognized %s option: '%s'",
440637eb1ca1Smrg                    ltwrapper_option_prefix, argv[i]);
440737eb1ca1Smrg        }
440837eb1ca1Smrg      /* otherwise ... */
440937eb1ca1Smrg      newargz[++newargc] = xstrdup (argv[i]);
4410c27c18e8Smrg    }
441137eb1ca1Smrg  newargz[++newargc] = NULL;
441237eb1ca1Smrg
441337eb1ca1SmrgEOF
441437eb1ca1Smrg	    cat <<EOF
441537eb1ca1Smrg  /* The GNU banner must be the first non-error debug message */
44160eb1301bSmrg  lt_debugprintf (__FILE__, __LINE__, "libtool wrapper (GNU $PACKAGE$TIMESTAMP) $VERSION\n");
441737eb1ca1SmrgEOF
441837eb1ca1Smrg	    cat <<"EOF"
441937eb1ca1Smrg  lt_debugprintf (__FILE__, __LINE__, "(main) argv[0]: %s\n", argv[0]);
442037eb1ca1Smrg  lt_debugprintf (__FILE__, __LINE__, "(main) program_name: %s\n", program_name);
4421c27c18e8Smrg
4422c27c18e8Smrg  tmp_pathspec = find_executable (argv[0]);
4423c27c18e8Smrg  if (tmp_pathspec == NULL)
442437eb1ca1Smrg    lt_fatal (__FILE__, __LINE__, "couldn't find %s", argv[0]);
442537eb1ca1Smrg  lt_debugprintf (__FILE__, __LINE__,
442637eb1ca1Smrg                  "(main) found exe (before symlink chase) at: %s\n",
442737eb1ca1Smrg		  tmp_pathspec);
4428c27c18e8Smrg
4429c27c18e8Smrg  actual_cwrapper_path = chase_symlinks (tmp_pathspec);
443037eb1ca1Smrg  lt_debugprintf (__FILE__, __LINE__,
443137eb1ca1Smrg                  "(main) found exe (after symlink chase) at: %s\n",
443237eb1ca1Smrg		  actual_cwrapper_path);
4433c27c18e8Smrg  XFREE (tmp_pathspec);
4434c27c18e8Smrg
443537eb1ca1Smrg  actual_cwrapper_name = xstrdup (base_name (actual_cwrapper_path));
4436c27c18e8Smrg  strendzap (actual_cwrapper_path, actual_cwrapper_name);
4437c27c18e8Smrg
4438c27c18e8Smrg  /* wrapper name transforms */
4439c27c18e8Smrg  strendzap (actual_cwrapper_name, ".exe");
4440c27c18e8Smrg  tmp_pathspec = lt_extend_str (actual_cwrapper_name, ".exe", 1);
4441c27c18e8Smrg  XFREE (actual_cwrapper_name);
4442c27c18e8Smrg  actual_cwrapper_name = tmp_pathspec;
4443c27c18e8Smrg  tmp_pathspec = 0;
4444c27c18e8Smrg
4445c27c18e8Smrg  /* target_name transforms -- use actual target program name; might have lt- prefix */
4446c27c18e8Smrg  target_name = xstrdup (base_name (TARGET_PROGRAM_NAME));
4447c27c18e8Smrg  strendzap (target_name, ".exe");
4448c27c18e8Smrg  tmp_pathspec = lt_extend_str (target_name, ".exe", 1);
4449c27c18e8Smrg  XFREE (target_name);
4450c27c18e8Smrg  target_name = tmp_pathspec;
4451c27c18e8Smrg  tmp_pathspec = 0;
4452c27c18e8Smrg
445337eb1ca1Smrg  lt_debugprintf (__FILE__, __LINE__,
445437eb1ca1Smrg		  "(main) libtool target name: %s\n",
445537eb1ca1Smrg		  target_name);
4456c27c18e8SmrgEOF
4457c27c18e8Smrg
4458c27c18e8Smrg	    cat <<EOF
4459c27c18e8Smrg  newargz[0] =
4460c27c18e8Smrg    XMALLOC (char, (strlen (actual_cwrapper_path) +
4461c27c18e8Smrg		    strlen ("$objdir") + 1 + strlen (actual_cwrapper_name) + 1));
4462c27c18e8Smrg  strcpy (newargz[0], actual_cwrapper_path);
4463c27c18e8Smrg  strcat (newargz[0], "$objdir");
4464c27c18e8Smrg  strcat (newargz[0], "/");
4465c27c18e8SmrgEOF
4466c27c18e8Smrg
4467c27c18e8Smrg	    cat <<"EOF"
4468c27c18e8Smrg  /* stop here, and copy so we don't have to do this twice */
4469c27c18e8Smrg  tmp_pathspec = xstrdup (newargz[0]);
4470c27c18e8Smrg
4471c27c18e8Smrg  /* do NOT want the lt- prefix here, so use actual_cwrapper_name */
4472c27c18e8Smrg  strcat (newargz[0], actual_cwrapper_name);
4473c27c18e8Smrg
4474c27c18e8Smrg  /* DO want the lt- prefix here if it exists, so use target_name */
4475c27c18e8Smrg  lt_argv_zero = lt_extend_str (tmp_pathspec, target_name, 1);
4476c27c18e8Smrg  XFREE (tmp_pathspec);
4477c27c18e8Smrg  tmp_pathspec = NULL;
4478c27c18e8SmrgEOF
4479c27c18e8Smrg
4480c27c18e8Smrg	    case $host_os in
4481c27c18e8Smrg	      mingw*)
4482c27c18e8Smrg	    cat <<"EOF"
4483c27c18e8Smrg  {
4484c27c18e8Smrg    char* p;
4485c27c18e8Smrg    while ((p = strchr (newargz[0], '\\')) != NULL)
4486c27c18e8Smrg      {
4487c27c18e8Smrg	*p = '/';
4488c27c18e8Smrg      }
4489c27c18e8Smrg    while ((p = strchr (lt_argv_zero, '\\')) != NULL)
4490c27c18e8Smrg      {
4491c27c18e8Smrg	*p = '/';
4492c27c18e8Smrg      }
4493c27c18e8Smrg  }
4494c27c18e8SmrgEOF
4495c43cc173Smrg	    ;;
4496c27c18e8Smrg	    esac
4497c27c18e8Smrg
4498c27c18e8Smrg	    cat <<"EOF"
4499c27c18e8Smrg  XFREE (target_name);
4500c27c18e8Smrg  XFREE (actual_cwrapper_path);
4501c27c18e8Smrg  XFREE (actual_cwrapper_name);
4502c27c18e8Smrg
4503c27c18e8Smrg  lt_setenv ("BIN_SH", "xpg4"); /* for Tru64 */
4504c27c18e8Smrg  lt_setenv ("DUALCASE", "1");  /* for MSK sh */
4505b789ec8aSmrg  /* Update the DLL searchpath.  EXE_PATH_VALUE ($dllsearchpath) must
4506b789ec8aSmrg     be prepended before (that is, appear after) LIB_PATH_VALUE ($temp_rpath)
4507b789ec8aSmrg     because on Windows, both *_VARNAMEs are PATH but uninstalled
4508b789ec8aSmrg     libraries must come first. */
4509c27c18e8Smrg  lt_update_exe_path (EXE_PATH_VARNAME, EXE_PATH_VALUE);
4510b789ec8aSmrg  lt_update_lib_path (LIB_PATH_VARNAME, LIB_PATH_VALUE);
4511c27c18e8Smrg
451237eb1ca1Smrg  lt_debugprintf (__FILE__, __LINE__, "(main) lt_argv_zero: %s\n",
451337eb1ca1Smrg		  nonnull (lt_argv_zero));
4514c27c18e8Smrg  for (i = 0; i < newargc; i++)
4515c27c18e8Smrg    {
451637eb1ca1Smrg      lt_debugprintf (__FILE__, __LINE__, "(main) newargz[%d]: %s\n",
451737eb1ca1Smrg		      i, nonnull (newargz[i]));
4518c27c18e8Smrg    }
4519c43cc173Smrg
4520c43cc173SmrgEOF
4521c43cc173Smrg
4522c27c18e8Smrg	    case $host_os in
4523c27c18e8Smrg	      mingw*)
4524c27c18e8Smrg		cat <<"EOF"
4525c27c18e8Smrg  /* execv doesn't actually work on mingw as expected on unix */
452637eb1ca1Smrg  newargz = prepare_spawn (newargz);
45270eb1301bSmrg  rval = _spawnv (_P_WAIT, lt_argv_zero, (const char * const *) newargz);
4528c27c18e8Smrg  if (rval == -1)
4529c27c18e8Smrg    {
4530c27c18e8Smrg      /* failed to start process */
453137eb1ca1Smrg      lt_debugprintf (__FILE__, __LINE__,
453237eb1ca1Smrg		      "(main) failed to launch target \"%s\": %s\n",
453337eb1ca1Smrg		      lt_argv_zero, nonnull (strerror (errno)));
4534c27c18e8Smrg      return 127;
4535c27c18e8Smrg    }
4536c27c18e8Smrg  return rval;
4537c27c18e8SmrgEOF
4538c27c18e8Smrg		;;
4539c27c18e8Smrg	      *)
4540c27c18e8Smrg		cat <<"EOF"
4541c27c18e8Smrg  execv (lt_argv_zero, newargz);
4542c27c18e8Smrg  return rval; /* =127, but avoids unused variable warning */
4543c27c18e8SmrgEOF
4544c27c18e8Smrg		;;
4545c27c18e8Smrg	    esac
4546c43cc173Smrg
4547c27c18e8Smrg	    cat <<"EOF"
4548c27c18e8Smrg}
4549c43cc173Smrg
4550c27c18e8Smrgvoid *
4551c27c18e8Smrgxmalloc (size_t num)
4552c27c18e8Smrg{
4553c27c18e8Smrg  void *p = (void *) malloc (num);
4554c27c18e8Smrg  if (!p)
455537eb1ca1Smrg    lt_fatal (__FILE__, __LINE__, "memory exhausted");
4556c43cc173Smrg
4557c27c18e8Smrg  return p;
4558c27c18e8Smrg}
4559c43cc173Smrg
4560c27c18e8Smrgchar *
4561c27c18e8Smrgxstrdup (const char *string)
4562c27c18e8Smrg{
4563c27c18e8Smrg  return string ? strcpy ((char *) xmalloc (strlen (string) + 1),
4564c27c18e8Smrg			  string) : NULL;
4565c27c18e8Smrg}
4566c43cc173Smrg
4567c27c18e8Smrgconst char *
4568c27c18e8Smrgbase_name (const char *name)
4569c27c18e8Smrg{
4570c27c18e8Smrg  const char *base;
4571c43cc173Smrg
45720eb1301bSmrg#if defined (HAVE_DOS_BASED_FILE_SYSTEM)
4573c27c18e8Smrg  /* Skip over the disk name in MSDOS pathnames. */
4574c27c18e8Smrg  if (isalpha ((unsigned char) name[0]) && name[1] == ':')
4575c27c18e8Smrg    name += 2;
4576c27c18e8Smrg#endif
4577c43cc173Smrg
4578c27c18e8Smrg  for (base = name; *name; name++)
4579c27c18e8Smrg    if (IS_DIR_SEPARATOR (*name))
4580c27c18e8Smrg      base = name + 1;
4581c27c18e8Smrg  return base;
4582c27c18e8Smrg}
4583c43cc173Smrg
4584c27c18e8Smrgint
4585c27c18e8Smrgcheck_executable (const char *path)
4586c27c18e8Smrg{
4587c27c18e8Smrg  struct stat st;
4588c43cc173Smrg
458937eb1ca1Smrg  lt_debugprintf (__FILE__, __LINE__, "(check_executable): %s\n",
459037eb1ca1Smrg                  nonempty (path));
4591c27c18e8Smrg  if ((!path) || (!*path))
4592c27c18e8Smrg    return 0;
4593c43cc173Smrg
4594c27c18e8Smrg  if ((stat (path, &st) >= 0)
4595c27c18e8Smrg      && (st.st_mode & (S_IXUSR | S_IXGRP | S_IXOTH)))
4596c27c18e8Smrg    return 1;
4597c27c18e8Smrg  else
4598c27c18e8Smrg    return 0;
4599c27c18e8Smrg}
4600c43cc173Smrg
4601c27c18e8Smrgint
4602c27c18e8Smrgmake_executable (const char *path)
4603c27c18e8Smrg{
4604c27c18e8Smrg  int rval = 0;
4605c27c18e8Smrg  struct stat st;
4606c43cc173Smrg
460737eb1ca1Smrg  lt_debugprintf (__FILE__, __LINE__, "(make_executable): %s\n",
460837eb1ca1Smrg                  nonempty (path));
4609c27c18e8Smrg  if ((!path) || (!*path))
4610c27c18e8Smrg    return 0;
4611c43cc173Smrg
4612c27c18e8Smrg  if (stat (path, &st) >= 0)
4613c27c18e8Smrg    {
4614c27c18e8Smrg      rval = chmod (path, st.st_mode | S_IXOTH | S_IXGRP | S_IXUSR);
4615c27c18e8Smrg    }
4616c27c18e8Smrg  return rval;
4617c27c18e8Smrg}
4618c43cc173Smrg
4619c27c18e8Smrg/* Searches for the full path of the wrapper.  Returns
4620c27c18e8Smrg   newly allocated full path name if found, NULL otherwise
4621c27c18e8Smrg   Does not chase symlinks, even on platforms that support them.
4622c27c18e8Smrg*/
4623c27c18e8Smrgchar *
4624c27c18e8Smrgfind_executable (const char *wrapper)
4625c27c18e8Smrg{
4626c27c18e8Smrg  int has_slash = 0;
4627c27c18e8Smrg  const char *p;
4628c27c18e8Smrg  const char *p_next;
4629c27c18e8Smrg  /* static buffer for getcwd */
4630c27c18e8Smrg  char tmp[LT_PATHMAX + 1];
46310eb1301bSmrg  int tmp_len;
4632c27c18e8Smrg  char *concat_name;
4633c43cc173Smrg
463437eb1ca1Smrg  lt_debugprintf (__FILE__, __LINE__, "(find_executable): %s\n",
463537eb1ca1Smrg                  nonempty (wrapper));
4636c43cc173Smrg
4637c27c18e8Smrg  if ((wrapper == NULL) || (*wrapper == '\0'))
4638c27c18e8Smrg    return NULL;
4639c43cc173Smrg
4640c27c18e8Smrg  /* Absolute path? */
46410eb1301bSmrg#if defined (HAVE_DOS_BASED_FILE_SYSTEM)
4642c27c18e8Smrg  if (isalpha ((unsigned char) wrapper[0]) && wrapper[1] == ':')
4643c27c18e8Smrg    {
4644c27c18e8Smrg      concat_name = xstrdup (wrapper);
4645c27c18e8Smrg      if (check_executable (concat_name))
4646c27c18e8Smrg	return concat_name;
4647c27c18e8Smrg      XFREE (concat_name);
4648c27c18e8Smrg    }
4649c27c18e8Smrg  else
4650c27c18e8Smrg    {
4651c27c18e8Smrg#endif
4652c27c18e8Smrg      if (IS_DIR_SEPARATOR (wrapper[0]))
4653c27c18e8Smrg	{
4654c27c18e8Smrg	  concat_name = xstrdup (wrapper);
4655c27c18e8Smrg	  if (check_executable (concat_name))
4656c27c18e8Smrg	    return concat_name;
4657c27c18e8Smrg	  XFREE (concat_name);
4658c27c18e8Smrg	}
46590eb1301bSmrg#if defined (HAVE_DOS_BASED_FILE_SYSTEM)
4660c27c18e8Smrg    }
4661c27c18e8Smrg#endif
4662c43cc173Smrg
4663c27c18e8Smrg  for (p = wrapper; *p; p++)
4664c27c18e8Smrg    if (*p == '/')
4665c27c18e8Smrg      {
4666c27c18e8Smrg	has_slash = 1;
4667c27c18e8Smrg	break;
4668c27c18e8Smrg      }
4669c27c18e8Smrg  if (!has_slash)
4670c27c18e8Smrg    {
4671c27c18e8Smrg      /* no slashes; search PATH */
4672c27c18e8Smrg      const char *path = getenv ("PATH");
4673c27c18e8Smrg      if (path != NULL)
4674c27c18e8Smrg	{
4675c27c18e8Smrg	  for (p = path; *p; p = p_next)
4676c27c18e8Smrg	    {
4677c27c18e8Smrg	      const char *q;
4678c27c18e8Smrg	      size_t p_len;
4679c27c18e8Smrg	      for (q = p; *q; q++)
4680c27c18e8Smrg		if (IS_PATH_SEPARATOR (*q))
4681c27c18e8Smrg		  break;
46820eb1301bSmrg	      p_len = q - p;
4683c27c18e8Smrg	      p_next = (*q == '\0' ? q : q + 1);
4684c27c18e8Smrg	      if (p_len == 0)
4685c27c18e8Smrg		{
4686c27c18e8Smrg		  /* empty path: current directory */
4687c27c18e8Smrg		  if (getcwd (tmp, LT_PATHMAX) == NULL)
468837eb1ca1Smrg		    lt_fatal (__FILE__, __LINE__, "getcwd failed: %s",
468937eb1ca1Smrg                              nonnull (strerror (errno)));
4690c27c18e8Smrg		  tmp_len = strlen (tmp);
4691c27c18e8Smrg		  concat_name =
4692c27c18e8Smrg		    XMALLOC (char, tmp_len + 1 + strlen (wrapper) + 1);
4693c27c18e8Smrg		  memcpy (concat_name, tmp, tmp_len);
4694c27c18e8Smrg		  concat_name[tmp_len] = '/';
4695c27c18e8Smrg		  strcpy (concat_name + tmp_len + 1, wrapper);
4696c27c18e8Smrg		}
4697c27c18e8Smrg	      else
4698c27c18e8Smrg		{
4699c27c18e8Smrg		  concat_name =
4700c27c18e8Smrg		    XMALLOC (char, p_len + 1 + strlen (wrapper) + 1);
4701c27c18e8Smrg		  memcpy (concat_name, p, p_len);
4702c27c18e8Smrg		  concat_name[p_len] = '/';
4703c27c18e8Smrg		  strcpy (concat_name + p_len + 1, wrapper);
4704c27c18e8Smrg		}
4705c27c18e8Smrg	      if (check_executable (concat_name))
4706c27c18e8Smrg		return concat_name;
4707c27c18e8Smrg	      XFREE (concat_name);
4708c27c18e8Smrg	    }
4709c27c18e8Smrg	}
4710c27c18e8Smrg      /* not found in PATH; assume curdir */
4711c27c18e8Smrg    }
4712c27c18e8Smrg  /* Relative path | not found in path: prepend cwd */
4713c27c18e8Smrg  if (getcwd (tmp, LT_PATHMAX) == NULL)
471437eb1ca1Smrg    lt_fatal (__FILE__, __LINE__, "getcwd failed: %s",
471537eb1ca1Smrg              nonnull (strerror (errno)));
4716c27c18e8Smrg  tmp_len = strlen (tmp);
4717c27c18e8Smrg  concat_name = XMALLOC (char, tmp_len + 1 + strlen (wrapper) + 1);
4718c27c18e8Smrg  memcpy (concat_name, tmp, tmp_len);
4719c27c18e8Smrg  concat_name[tmp_len] = '/';
4720c27c18e8Smrg  strcpy (concat_name + tmp_len + 1, wrapper);
4721c43cc173Smrg
4722c27c18e8Smrg  if (check_executable (concat_name))
4723c27c18e8Smrg    return concat_name;
4724c27c18e8Smrg  XFREE (concat_name);
4725c27c18e8Smrg  return NULL;
4726c27c18e8Smrg}
4727c43cc173Smrg
4728c27c18e8Smrgchar *
4729c27c18e8Smrgchase_symlinks (const char *pathspec)
4730c27c18e8Smrg{
4731c27c18e8Smrg#ifndef S_ISLNK
4732c27c18e8Smrg  return xstrdup (pathspec);
4733c27c18e8Smrg#else
4734c27c18e8Smrg  char buf[LT_PATHMAX];
4735c27c18e8Smrg  struct stat s;
4736c27c18e8Smrg  char *tmp_pathspec = xstrdup (pathspec);
4737c27c18e8Smrg  char *p;
4738c27c18e8Smrg  int has_symlinks = 0;
4739c27c18e8Smrg  while (strlen (tmp_pathspec) && !has_symlinks)
4740c27c18e8Smrg    {
474137eb1ca1Smrg      lt_debugprintf (__FILE__, __LINE__,
474237eb1ca1Smrg		      "checking path component for symlinks: %s\n",
474337eb1ca1Smrg		      tmp_pathspec);
4744c27c18e8Smrg      if (lstat (tmp_pathspec, &s) == 0)
4745c27c18e8Smrg	{
4746c27c18e8Smrg	  if (S_ISLNK (s.st_mode) != 0)
4747c27c18e8Smrg	    {
4748c27c18e8Smrg	      has_symlinks = 1;
4749c27c18e8Smrg	      break;
4750c27c18e8Smrg	    }
4751c43cc173Smrg
4752c27c18e8Smrg	  /* search backwards for last DIR_SEPARATOR */
4753c27c18e8Smrg	  p = tmp_pathspec + strlen (tmp_pathspec) - 1;
4754c27c18e8Smrg	  while ((p > tmp_pathspec) && (!IS_DIR_SEPARATOR (*p)))
4755c27c18e8Smrg	    p--;
4756c27c18e8Smrg	  if ((p == tmp_pathspec) && (!IS_DIR_SEPARATOR (*p)))
4757c27c18e8Smrg	    {
4758c27c18e8Smrg	      /* no more DIR_SEPARATORS left */
4759c27c18e8Smrg	      break;
4760c27c18e8Smrg	    }
4761c27c18e8Smrg	  *p = '\0';
4762c27c18e8Smrg	}
4763c27c18e8Smrg      else
4764c27c18e8Smrg	{
476537eb1ca1Smrg	  lt_fatal (__FILE__, __LINE__,
476637eb1ca1Smrg		    "error accessing file \"%s\": %s",
476737eb1ca1Smrg		    tmp_pathspec, nonnull (strerror (errno)));
4768c27c18e8Smrg	}
4769c27c18e8Smrg    }
4770c27c18e8Smrg  XFREE (tmp_pathspec);
4771c43cc173Smrg
4772c27c18e8Smrg  if (!has_symlinks)
4773c27c18e8Smrg    {
4774c27c18e8Smrg      return xstrdup (pathspec);
4775c27c18e8Smrg    }
4776c43cc173Smrg
4777c27c18e8Smrg  tmp_pathspec = realpath (pathspec, buf);
4778c27c18e8Smrg  if (tmp_pathspec == 0)
4779c27c18e8Smrg    {
478037eb1ca1Smrg      lt_fatal (__FILE__, __LINE__,
478137eb1ca1Smrg		"could not follow symlinks for %s", pathspec);
4782c27c18e8Smrg    }
4783c27c18e8Smrg  return xstrdup (tmp_pathspec);
4784c27c18e8Smrg#endif
4785c27c18e8Smrg}
4786c43cc173Smrg
4787c27c18e8Smrgchar *
4788c27c18e8Smrgstrendzap (char *str, const char *pat)
4789c27c18e8Smrg{
4790c27c18e8Smrg  size_t len, patlen;
4791c43cc173Smrg
4792c27c18e8Smrg  assert (str != NULL);
4793c27c18e8Smrg  assert (pat != NULL);
4794c43cc173Smrg
4795c27c18e8Smrg  len = strlen (str);
4796c27c18e8Smrg  patlen = strlen (pat);
4797c43cc173Smrg
4798c27c18e8Smrg  if (patlen <= len)
4799c27c18e8Smrg    {
4800c27c18e8Smrg      str += len - patlen;
48010eb1301bSmrg      if (strcmp (str, pat) == 0)
4802c27c18e8Smrg	*str = '\0';
4803c27c18e8Smrg    }
4804c27c18e8Smrg  return str;
4805c27c18e8Smrg}
4806c43cc173Smrg
480737eb1ca1Smrgvoid
480837eb1ca1Smrglt_debugprintf (const char *file, int line, const char *fmt, ...)
480937eb1ca1Smrg{
481037eb1ca1Smrg  va_list args;
481137eb1ca1Smrg  if (lt_debug)
481237eb1ca1Smrg    {
481337eb1ca1Smrg      (void) fprintf (stderr, "%s:%s:%d: ", program_name, file, line);
481437eb1ca1Smrg      va_start (args, fmt);
481537eb1ca1Smrg      (void) vfprintf (stderr, fmt, args);
481637eb1ca1Smrg      va_end (args);
481737eb1ca1Smrg    }
481837eb1ca1Smrg}
481937eb1ca1Smrg
4820c27c18e8Smrgstatic void
482137eb1ca1Smrglt_error_core (int exit_status, const char *file,
482237eb1ca1Smrg	       int line, const char *mode,
4823c27c18e8Smrg	       const char *message, va_list ap)
4824c27c18e8Smrg{
482537eb1ca1Smrg  fprintf (stderr, "%s:%s:%d: %s: ", program_name, file, line, mode);
4826c27c18e8Smrg  vfprintf (stderr, message, ap);
4827c27c18e8Smrg  fprintf (stderr, ".\n");
4828c43cc173Smrg
4829c27c18e8Smrg  if (exit_status >= 0)
4830c27c18e8Smrg    exit (exit_status);
4831c27c18e8Smrg}
4832c43cc173Smrg
4833c27c18e8Smrgvoid
483437eb1ca1Smrglt_fatal (const char *file, int line, const char *message, ...)
4835c27c18e8Smrg{
4836c27c18e8Smrg  va_list ap;
4837c27c18e8Smrg  va_start (ap, message);
483837eb1ca1Smrg  lt_error_core (EXIT_FAILURE, file, line, "FATAL", message, ap);
4839c27c18e8Smrg  va_end (ap);
4840c27c18e8Smrg}
4841c43cc173Smrg
484237eb1ca1Smrgstatic const char *
484337eb1ca1Smrgnonnull (const char *s)
484437eb1ca1Smrg{
484537eb1ca1Smrg  return s ? s : "(null)";
484637eb1ca1Smrg}
484737eb1ca1Smrg
484837eb1ca1Smrgstatic const char *
484937eb1ca1Smrgnonempty (const char *s)
485037eb1ca1Smrg{
485137eb1ca1Smrg  return (s && !*s) ? "(empty)" : nonnull (s);
485237eb1ca1Smrg}
485337eb1ca1Smrg
4854c27c18e8Smrgvoid
4855c27c18e8Smrglt_setenv (const char *name, const char *value)
4856c27c18e8Smrg{
485737eb1ca1Smrg  lt_debugprintf (__FILE__, __LINE__,
485837eb1ca1Smrg		  "(lt_setenv) setting '%s' to '%s'\n",
485937eb1ca1Smrg                  nonnull (name), nonnull (value));
4860c27c18e8Smrg  {
4861c27c18e8Smrg#ifdef HAVE_SETENV
4862c27c18e8Smrg    /* always make a copy, for consistency with !HAVE_SETENV */
4863c27c18e8Smrg    char *str = xstrdup (value);
4864c27c18e8Smrg    setenv (name, str, 1);
4865c27c18e8Smrg#else
48660eb1301bSmrg    int len = strlen (name) + 1 + strlen (value) + 1;
4867c27c18e8Smrg    char *str = XMALLOC (char, len);
4868c27c18e8Smrg    sprintf (str, "%s=%s", name, value);
4869c27c18e8Smrg    if (putenv (str) != EXIT_SUCCESS)
4870c27c18e8Smrg      {
4871c27c18e8Smrg        XFREE (str);
4872c27c18e8Smrg      }
4873c27c18e8Smrg#endif
4874c27c18e8Smrg  }
4875c27c18e8Smrg}
4876c43cc173Smrg
4877c27c18e8Smrgchar *
4878c27c18e8Smrglt_extend_str (const char *orig_value, const char *add, int to_end)
4879c27c18e8Smrg{
4880c27c18e8Smrg  char *new_value;
4881c27c18e8Smrg  if (orig_value && *orig_value)
4882c27c18e8Smrg    {
48830eb1301bSmrg      int orig_value_len = strlen (orig_value);
48840eb1301bSmrg      int add_len = strlen (add);
4885c27c18e8Smrg      new_value = XMALLOC (char, add_len + orig_value_len + 1);
4886c27c18e8Smrg      if (to_end)
4887c27c18e8Smrg        {
4888c27c18e8Smrg          strcpy (new_value, orig_value);
4889c27c18e8Smrg          strcpy (new_value + orig_value_len, add);
4890c27c18e8Smrg        }
4891c27c18e8Smrg      else
4892c27c18e8Smrg        {
4893c27c18e8Smrg          strcpy (new_value, add);
4894c27c18e8Smrg          strcpy (new_value + add_len, orig_value);
4895c27c18e8Smrg        }
4896c27c18e8Smrg    }
4897c27c18e8Smrg  else
4898c27c18e8Smrg    {
4899c27c18e8Smrg      new_value = xstrdup (add);
4900c27c18e8Smrg    }
4901c27c18e8Smrg  return new_value;
4902c27c18e8Smrg}
4903c43cc173Smrg
4904c27c18e8Smrgvoid
4905c27c18e8Smrglt_update_exe_path (const char *name, const char *value)
4906c27c18e8Smrg{
490737eb1ca1Smrg  lt_debugprintf (__FILE__, __LINE__,
490837eb1ca1Smrg		  "(lt_update_exe_path) modifying '%s' by prepending '%s'\n",
490937eb1ca1Smrg                  nonnull (name), nonnull (value));
4910c43cc173Smrg
4911c27c18e8Smrg  if (name && *name && value && *value)
4912c27c18e8Smrg    {
4913c27c18e8Smrg      char *new_value = lt_extend_str (getenv (name), value, 0);
4914c27c18e8Smrg      /* some systems can't cope with a ':'-terminated path #' */
49150eb1301bSmrg      int len = strlen (new_value);
49160eb1301bSmrg      while (((len = strlen (new_value)) > 0) && IS_PATH_SEPARATOR (new_value[len-1]))
4917c27c18e8Smrg        {
49180eb1301bSmrg          new_value[len-1] = '\0';
4919c27c18e8Smrg        }
4920c27c18e8Smrg      lt_setenv (name, new_value);
4921c27c18e8Smrg      XFREE (new_value);
4922c27c18e8Smrg    }
4923c27c18e8Smrg}
4924c43cc173Smrg
4925c27c18e8Smrgvoid
4926c27c18e8Smrglt_update_lib_path (const char *name, const char *value)
4927c27c18e8Smrg{
492837eb1ca1Smrg  lt_debugprintf (__FILE__, __LINE__,
492937eb1ca1Smrg		  "(lt_update_lib_path) modifying '%s' by prepending '%s'\n",
493037eb1ca1Smrg                  nonnull (name), nonnull (value));
4931c43cc173Smrg
4932c27c18e8Smrg  if (name && *name && value && *value)
4933c27c18e8Smrg    {
4934c27c18e8Smrg      char *new_value = lt_extend_str (getenv (name), value, 0);
4935c27c18e8Smrg      lt_setenv (name, new_value);
4936c27c18e8Smrg      XFREE (new_value);
4937c27c18e8Smrg    }
4938c27c18e8Smrg}
4939c43cc173Smrg
494037eb1ca1SmrgEOF
494137eb1ca1Smrg	    case $host_os in
494237eb1ca1Smrg	      mingw*)
494337eb1ca1Smrg		cat <<"EOF"
494437eb1ca1Smrg
494537eb1ca1Smrg/* Prepares an argument vector before calling spawn().
494637eb1ca1Smrg   Note that spawn() does not by itself call the command interpreter
494737eb1ca1Smrg     (getenv ("COMSPEC") != NULL ? getenv ("COMSPEC") :
494837eb1ca1Smrg      ({ OSVERSIONINFO v; v.dwOSVersionInfoSize = sizeof(OSVERSIONINFO);
494937eb1ca1Smrg         GetVersionEx(&v);
495037eb1ca1Smrg         v.dwPlatformId == VER_PLATFORM_WIN32_NT;
495137eb1ca1Smrg      }) ? "cmd.exe" : "command.com").
495237eb1ca1Smrg   Instead it simply concatenates the arguments, separated by ' ', and calls
495337eb1ca1Smrg   CreateProcess().  We must quote the arguments since Win32 CreateProcess()
495437eb1ca1Smrg   interprets characters like ' ', '\t', '\\', '"' (but not '<' and '>') in a
495537eb1ca1Smrg   special way:
495637eb1ca1Smrg   - Space and tab are interpreted as delimiters. They are not treated as
495737eb1ca1Smrg     delimiters if they are surrounded by double quotes: "...".
495837eb1ca1Smrg   - Unescaped double quotes are removed from the input. Their only effect is
495937eb1ca1Smrg     that within double quotes, space and tab are treated like normal
496037eb1ca1Smrg     characters.
496137eb1ca1Smrg   - Backslashes not followed by double quotes are not special.
496237eb1ca1Smrg   - But 2*n+1 backslashes followed by a double quote become
496337eb1ca1Smrg     n backslashes followed by a double quote (n >= 0):
496437eb1ca1Smrg       \" -> "
496537eb1ca1Smrg       \\\" -> \"
496637eb1ca1Smrg       \\\\\" -> \\"
496737eb1ca1Smrg */
496837eb1ca1Smrg#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"
496937eb1ca1Smrg#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"
497037eb1ca1Smrgchar **
497137eb1ca1Smrgprepare_spawn (char **argv)
497237eb1ca1Smrg{
497337eb1ca1Smrg  size_t argc;
497437eb1ca1Smrg  char **new_argv;
497537eb1ca1Smrg  size_t i;
497637eb1ca1Smrg
497737eb1ca1Smrg  /* Count number of arguments.  */
497837eb1ca1Smrg  for (argc = 0; argv[argc] != NULL; argc++)
497937eb1ca1Smrg    ;
498037eb1ca1Smrg
498137eb1ca1Smrg  /* Allocate new argument vector.  */
498237eb1ca1Smrg  new_argv = XMALLOC (char *, argc + 1);
498337eb1ca1Smrg
498437eb1ca1Smrg  /* Put quoted arguments into the new argument vector.  */
498537eb1ca1Smrg  for (i = 0; i < argc; i++)
498637eb1ca1Smrg    {
498737eb1ca1Smrg      const char *string = argv[i];
498837eb1ca1Smrg
498937eb1ca1Smrg      if (string[0] == '\0')
499037eb1ca1Smrg	new_argv[i] = xstrdup ("\"\"");
499137eb1ca1Smrg      else if (strpbrk (string, SHELL_SPECIAL_CHARS) != NULL)
499237eb1ca1Smrg	{
499337eb1ca1Smrg	  int quote_around = (strpbrk (string, SHELL_SPACE_CHARS) != NULL);
499437eb1ca1Smrg	  size_t length;
499537eb1ca1Smrg	  unsigned int backslashes;
499637eb1ca1Smrg	  const char *s;
499737eb1ca1Smrg	  char *quoted_string;
499837eb1ca1Smrg	  char *p;
499937eb1ca1Smrg
500037eb1ca1Smrg	  length = 0;
500137eb1ca1Smrg	  backslashes = 0;
500237eb1ca1Smrg	  if (quote_around)
500337eb1ca1Smrg	    length++;
500437eb1ca1Smrg	  for (s = string; *s != '\0'; s++)
500537eb1ca1Smrg	    {
500637eb1ca1Smrg	      char c = *s;
500737eb1ca1Smrg	      if (c == '"')
500837eb1ca1Smrg		length += backslashes + 1;
500937eb1ca1Smrg	      length++;
501037eb1ca1Smrg	      if (c == '\\')
501137eb1ca1Smrg		backslashes++;
501237eb1ca1Smrg	      else
501337eb1ca1Smrg		backslashes = 0;
501437eb1ca1Smrg	    }
501537eb1ca1Smrg	  if (quote_around)
501637eb1ca1Smrg	    length += backslashes + 1;
501737eb1ca1Smrg
501837eb1ca1Smrg	  quoted_string = XMALLOC (char, length + 1);
501937eb1ca1Smrg
502037eb1ca1Smrg	  p = quoted_string;
502137eb1ca1Smrg	  backslashes = 0;
502237eb1ca1Smrg	  if (quote_around)
502337eb1ca1Smrg	    *p++ = '"';
502437eb1ca1Smrg	  for (s = string; *s != '\0'; s++)
502537eb1ca1Smrg	    {
502637eb1ca1Smrg	      char c = *s;
502737eb1ca1Smrg	      if (c == '"')
502837eb1ca1Smrg		{
502937eb1ca1Smrg		  unsigned int j;
503037eb1ca1Smrg		  for (j = backslashes + 1; j > 0; j--)
503137eb1ca1Smrg		    *p++ = '\\';
503237eb1ca1Smrg		}
503337eb1ca1Smrg	      *p++ = c;
503437eb1ca1Smrg	      if (c == '\\')
503537eb1ca1Smrg		backslashes++;
503637eb1ca1Smrg	      else
503737eb1ca1Smrg		backslashes = 0;
503837eb1ca1Smrg	    }
503937eb1ca1Smrg	  if (quote_around)
504037eb1ca1Smrg	    {
504137eb1ca1Smrg	      unsigned int j;
504237eb1ca1Smrg	      for (j = backslashes; j > 0; j--)
504337eb1ca1Smrg		*p++ = '\\';
504437eb1ca1Smrg	      *p++ = '"';
504537eb1ca1Smrg	    }
504637eb1ca1Smrg	  *p = '\0';
504737eb1ca1Smrg
504837eb1ca1Smrg	  new_argv[i] = quoted_string;
504937eb1ca1Smrg	}
505037eb1ca1Smrg      else
505137eb1ca1Smrg	new_argv[i] = (char *) string;
505237eb1ca1Smrg    }
505337eb1ca1Smrg  new_argv[argc] = NULL;
505437eb1ca1Smrg
505537eb1ca1Smrg  return new_argv;
505637eb1ca1Smrg}
505737eb1ca1SmrgEOF
505837eb1ca1Smrg		;;
505937eb1ca1Smrg	    esac
506037eb1ca1Smrg
506137eb1ca1Smrg            cat <<"EOF"
506237eb1ca1Smrgvoid lt_dump_script (FILE* f)
506337eb1ca1Smrg{
506437eb1ca1SmrgEOF
506537eb1ca1Smrg	    func_emit_wrapper yes |
5066f1ee322dSmrg	      $SED -n -e '
5067f1ee322dSmrgs/^\(.\{79\}\)\(..*\)/\1\
5068f1ee322dSmrg\2/
5069f1ee322dSmrgh
5070f1ee322dSmrgs/\([\\"]\)/\\\1/g
5071f1ee322dSmrgs/$/\\n/
5072f1ee322dSmrgs/\([^\n]*\).*/  fputs ("\1", f);/p
5073f1ee322dSmrgg
5074f1ee322dSmrgD'
507537eb1ca1Smrg            cat <<"EOF"
507637eb1ca1Smrg}
5077c27c18e8SmrgEOF
5078c27c18e8Smrg}
5079c27c18e8Smrg# end: func_emit_cwrapperexe_src
5080c43cc173Smrg
508137eb1ca1Smrg# func_win32_import_lib_p ARG
508237eb1ca1Smrg# True if ARG is an import lib, as indicated by $file_magic_cmd
508337eb1ca1Smrgfunc_win32_import_lib_p ()
508437eb1ca1Smrg{
50850eb1301bSmrg    $opt_debug
508637eb1ca1Smrg    case `eval $file_magic_cmd \"\$1\" 2>/dev/null | $SED -e 10q` in
508737eb1ca1Smrg    *import*) : ;;
508837eb1ca1Smrg    *) false ;;
508937eb1ca1Smrg    esac
509037eb1ca1Smrg}
509137eb1ca1Smrg
5092c27c18e8Smrg# func_mode_link arg...
5093c27c18e8Smrgfunc_mode_link ()
5094c27c18e8Smrg{
50950eb1301bSmrg    $opt_debug
5096c27c18e8Smrg    case $host in
5097c27c18e8Smrg    *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-cegcc*)
5098c27c18e8Smrg      # It is impossible to link a dll without this setting, and
5099c27c18e8Smrg      # we shouldn't force the makefile maintainer to figure out
51000eb1301bSmrg      # which system we are compiling for in order to pass an extra
5101c27c18e8Smrg      # flag for every libtool invocation.
5102c27c18e8Smrg      # allow_undefined=no
5103c43cc173Smrg
5104c27c18e8Smrg      # FIXME: Unfortunately, there are problems with the above when trying
51050eb1301bSmrg      # to make a dll which has undefined symbols, in which case not
5106c27c18e8Smrg      # even a static library is built.  For now, we need to specify
5107c27c18e8Smrg      # -no-undefined on the libtool link line when we can be certain
5108c27c18e8Smrg      # that all symbols are satisfied, otherwise we get a static library.
5109c27c18e8Smrg      allow_undefined=yes
5110c27c18e8Smrg      ;;
5111c27c18e8Smrg    *)
5112c27c18e8Smrg      allow_undefined=yes
5113c27c18e8Smrg      ;;
5114c27c18e8Smrg    esac
5115c27c18e8Smrg    libtool_args=$nonopt
5116c27c18e8Smrg    base_compile="$nonopt $@"
5117c27c18e8Smrg    compile_command=$nonopt
5118c27c18e8Smrg    finalize_command=$nonopt
5119c43cc173Smrg
5120c27c18e8Smrg    compile_rpath=
5121c27c18e8Smrg    finalize_rpath=
5122c27c18e8Smrg    compile_shlibpath=
5123c27c18e8Smrg    finalize_shlibpath=
5124c27c18e8Smrg    convenience=
5125c27c18e8Smrg    old_convenience=
5126c27c18e8Smrg    deplibs=
5127c27c18e8Smrg    old_deplibs=
5128c27c18e8Smrg    compiler_flags=
5129c27c18e8Smrg    linker_flags=
5130c27c18e8Smrg    dllsearchpath=
5131c27c18e8Smrg    lib_search_path=`pwd`
5132c27c18e8Smrg    inst_prefix_dir=
5133c27c18e8Smrg    new_inherited_linker_flags=
5134c43cc173Smrg
5135c27c18e8Smrg    avoid_version=no
513637eb1ca1Smrg    bindir=
5137c27c18e8Smrg    dlfiles=
5138c27c18e8Smrg    dlprefiles=
5139c27c18e8Smrg    dlself=no
5140c27c18e8Smrg    export_dynamic=no
5141c27c18e8Smrg    export_symbols=
5142c27c18e8Smrg    export_symbols_regex=
5143c27c18e8Smrg    generated=
5144c27c18e8Smrg    libobjs=
5145c27c18e8Smrg    ltlibs=
5146c27c18e8Smrg    module=no
5147c27c18e8Smrg    no_install=no
5148c27c18e8Smrg    objs=
5149c27c18e8Smrg    non_pic_objects=
5150c27c18e8Smrg    precious_files_regex=
5151c27c18e8Smrg    prefer_static_libs=no
51520eb1301bSmrg    preload=no
5153c27c18e8Smrg    prev=
5154c27c18e8Smrg    prevarg=
5155c27c18e8Smrg    release=
5156c27c18e8Smrg    rpath=
5157c27c18e8Smrg    xrpath=
5158c27c18e8Smrg    perm_rpath=
5159c27c18e8Smrg    temp_rpath=
5160c27c18e8Smrg    thread_safe=no
5161c27c18e8Smrg    vinfo=
5162c27c18e8Smrg    vinfo_number=no
5163c27c18e8Smrg    weak_libs=
51640eb1301bSmrg    single_module="${wl}-single_module"
5165c27c18e8Smrg    func_infer_tag $base_compile
5166c43cc173Smrg
5167c27c18e8Smrg    # We need to know -static, to get the right output filenames.
5168c27c18e8Smrg    for arg
5169c27c18e8Smrg    do
5170c27c18e8Smrg      case $arg in
5171c27c18e8Smrg      -shared)
51720eb1301bSmrg	test "$build_libtool_libs" != yes && \
51730eb1301bSmrg	  func_fatal_configuration "can not build a shared library"
5174c27c18e8Smrg	build_old_libs=no
5175c27c18e8Smrg	break
5176c27c18e8Smrg	;;
5177c27c18e8Smrg      -all-static | -static | -static-libtool-libs)
5178c27c18e8Smrg	case $arg in
5179c27c18e8Smrg	-all-static)
51800eb1301bSmrg	  if test "$build_libtool_libs" = yes && test -z "$link_static_flag"; then
5181c27c18e8Smrg	    func_warning "complete static linking is impossible in this configuration"
5182c27c18e8Smrg	  fi
5183c27c18e8Smrg	  if test -n "$link_static_flag"; then
5184c27c18e8Smrg	    dlopen_self=$dlopen_self_static
5185c27c18e8Smrg	  fi
5186c27c18e8Smrg	  prefer_static_libs=yes
5187c27c18e8Smrg	  ;;
5188c27c18e8Smrg	-static)
5189c27c18e8Smrg	  if test -z "$pic_flag" && test -n "$link_static_flag"; then
5190c27c18e8Smrg	    dlopen_self=$dlopen_self_static
5191c27c18e8Smrg	  fi
5192c27c18e8Smrg	  prefer_static_libs=built
5193c27c18e8Smrg	  ;;
5194c27c18e8Smrg	-static-libtool-libs)
5195c27c18e8Smrg	  if test -z "$pic_flag" && test -n "$link_static_flag"; then
5196c27c18e8Smrg	    dlopen_self=$dlopen_self_static
5197c27c18e8Smrg	  fi
5198c27c18e8Smrg	  prefer_static_libs=yes
5199c27c18e8Smrg	  ;;
5200c27c18e8Smrg	esac
5201c27c18e8Smrg	build_libtool_libs=no
5202c27c18e8Smrg	build_old_libs=yes
5203c27c18e8Smrg	break
5204c43cc173Smrg	;;
5205c43cc173Smrg      esac
5206c27c18e8Smrg    done
5207c43cc173Smrg
5208c27c18e8Smrg    # See if our shared archives depend on static archives.
5209c27c18e8Smrg    test -n "$old_archive_from_new_cmds" && build_old_libs=yes
5210c43cc173Smrg
5211c27c18e8Smrg    # Go through the arguments, transforming them on the way.
5212c27c18e8Smrg    while test "$#" -gt 0; do
52130eb1301bSmrg      arg="$1"
5214c27c18e8Smrg      shift
5215c27c18e8Smrg      func_quote_for_eval "$arg"
5216c27c18e8Smrg      qarg=$func_quote_for_eval_unquoted_result
5217c27c18e8Smrg      func_append libtool_args " $func_quote_for_eval_result"
5218c43cc173Smrg
5219c27c18e8Smrg      # If the previous option needs an argument, assign it.
5220c27c18e8Smrg      if test -n "$prev"; then
5221c27c18e8Smrg	case $prev in
5222c27c18e8Smrg	output)
5223c27c18e8Smrg	  func_append compile_command " @OUTPUT@"
5224c27c18e8Smrg	  func_append finalize_command " @OUTPUT@"
5225c43cc173Smrg	  ;;
5226c43cc173Smrg	esac
5227c43cc173Smrg
5228c27c18e8Smrg	case $prev in
522937eb1ca1Smrg	bindir)
52300eb1301bSmrg	  bindir="$arg"
523137eb1ca1Smrg	  prev=
523237eb1ca1Smrg	  continue
523337eb1ca1Smrg	  ;;
5234c27c18e8Smrg	dlfiles|dlprefiles)
52350eb1301bSmrg	  if test "$preload" = no; then
5236c27c18e8Smrg	    # Add the symbol object into the linking commands.
5237c27c18e8Smrg	    func_append compile_command " @SYMFILE@"
5238c27c18e8Smrg	    func_append finalize_command " @SYMFILE@"
52390eb1301bSmrg	    preload=yes
52400eb1301bSmrg	  fi
5241c27c18e8Smrg	  case $arg in
5242c27c18e8Smrg	  *.la | *.lo) ;;  # We handle these cases below.
5243c27c18e8Smrg	  force)
52440eb1301bSmrg	    if test "$dlself" = no; then
5245c27c18e8Smrg	      dlself=needless
5246c27c18e8Smrg	      export_dynamic=yes
5247c27c18e8Smrg	    fi
5248c27c18e8Smrg	    prev=
5249c27c18e8Smrg	    continue
5250c27c18e8Smrg	    ;;
5251c27c18e8Smrg	  self)
52520eb1301bSmrg	    if test "$prev" = dlprefiles; then
5253c27c18e8Smrg	      dlself=yes
52540eb1301bSmrg	    elif test "$prev" = dlfiles && test "$dlopen_self" != yes; then
5255c27c18e8Smrg	      dlself=yes
5256c43cc173Smrg	    else
5257c27c18e8Smrg	      dlself=needless
5258c27c18e8Smrg	      export_dynamic=yes
5259c43cc173Smrg	    fi
5260c27c18e8Smrg	    prev=
5261c27c18e8Smrg	    continue
5262c27c18e8Smrg	    ;;
5263c27c18e8Smrg	  *)
52640eb1301bSmrg	    if test "$prev" = dlfiles; then
5265b789ec8aSmrg	      func_append dlfiles " $arg"
5266c27c18e8Smrg	    else
5267b789ec8aSmrg	      func_append dlprefiles " $arg"
5268c27c18e8Smrg	    fi
5269c27c18e8Smrg	    prev=
5270c27c18e8Smrg	    continue
5271c27c18e8Smrg	    ;;
5272c43cc173Smrg	  esac
5273c43cc173Smrg	  ;;
5274c27c18e8Smrg	expsyms)
52750eb1301bSmrg	  export_symbols="$arg"
5276c27c18e8Smrg	  test -f "$arg" \
52770eb1301bSmrg	    || func_fatal_error "symbol file \`$arg' does not exist"
5278c27c18e8Smrg	  prev=
5279c27c18e8Smrg	  continue
5280c27c18e8Smrg	  ;;
5281c27c18e8Smrg	expsyms_regex)
52820eb1301bSmrg	  export_symbols_regex="$arg"
5283c27c18e8Smrg	  prev=
5284c27c18e8Smrg	  continue
5285c27c18e8Smrg	  ;;
5286c27c18e8Smrg	framework)
5287c27c18e8Smrg	  case $host in
5288c27c18e8Smrg	    *-*-darwin*)
5289c27c18e8Smrg	      case "$deplibs " in
5290c27c18e8Smrg		*" $qarg.ltframework "*) ;;
5291b789ec8aSmrg		*) func_append deplibs " $qarg.ltframework" # this is fixed later
5292c27c18e8Smrg		   ;;
5293c43cc173Smrg	      esac
5294c27c18e8Smrg	      ;;
5295c43cc173Smrg	  esac
5296c27c18e8Smrg	  prev=
5297c27c18e8Smrg	  continue
5298c27c18e8Smrg	  ;;
5299c27c18e8Smrg	inst_prefix)
53000eb1301bSmrg	  inst_prefix_dir="$arg"
5301c27c18e8Smrg	  prev=
5302c27c18e8Smrg	  continue
5303c27c18e8Smrg	  ;;
5304c27c18e8Smrg	objectlist)
5305c27c18e8Smrg	  if test -f "$arg"; then
5306c27c18e8Smrg	    save_arg=$arg
5307c27c18e8Smrg	    moreargs=
5308c27c18e8Smrg	    for fil in `cat "$save_arg"`
5309c27c18e8Smrg	    do
5310b789ec8aSmrg#	      func_append moreargs " $fil"
5311c27c18e8Smrg	      arg=$fil
5312c27c18e8Smrg	      # A libtool-controlled object.
5313c43cc173Smrg
5314c27c18e8Smrg	      # Check to see that this really is a libtool object.
5315c27c18e8Smrg	      if func_lalib_unsafe_p "$arg"; then
5316c27c18e8Smrg		pic_object=
5317c27c18e8Smrg		non_pic_object=
5318c43cc173Smrg
5319c27c18e8Smrg		# Read the .lo file
5320c27c18e8Smrg		func_source "$arg"
5321c43cc173Smrg
5322c27c18e8Smrg		if test -z "$pic_object" ||
5323c27c18e8Smrg		   test -z "$non_pic_object" ||
53240eb1301bSmrg		   test "$pic_object" = none &&
53250eb1301bSmrg		   test "$non_pic_object" = none; then
53260eb1301bSmrg		  func_fatal_error "cannot find name of object for \`$arg'"
5327c27c18e8Smrg		fi
5328c43cc173Smrg
5329c27c18e8Smrg		# Extract subdirectory from the argument.
5330c27c18e8Smrg		func_dirname "$arg" "/" ""
53310eb1301bSmrg		xdir="$func_dirname_result"
5332c43cc173Smrg
53330eb1301bSmrg		if test "$pic_object" != none; then
5334c27c18e8Smrg		  # Prepend the subdirectory the object is found in.
53350eb1301bSmrg		  pic_object="$xdir$pic_object"
5336c43cc173Smrg
53370eb1301bSmrg		  if test "$prev" = dlfiles; then
53380eb1301bSmrg		    if test "$build_libtool_libs" = yes && test "$dlopen_support" = yes; then
5339b789ec8aSmrg		      func_append dlfiles " $pic_object"
5340c27c18e8Smrg		      prev=
5341c27c18e8Smrg		      continue
5342c27c18e8Smrg		    else
5343c27c18e8Smrg		      # If libtool objects are unsupported, then we need to preload.
5344c27c18e8Smrg		      prev=dlprefiles
5345c27c18e8Smrg		    fi
5346c27c18e8Smrg		  fi
5347c43cc173Smrg
5348c27c18e8Smrg		  # CHECK ME:  I think I busted this.  -Ossama
53490eb1301bSmrg		  if test "$prev" = dlprefiles; then
5350c27c18e8Smrg		    # Preload the old-style object.
5351b789ec8aSmrg		    func_append dlprefiles " $pic_object"
5352c27c18e8Smrg		    prev=
5353c27c18e8Smrg		  fi
5354c43cc173Smrg
5355c27c18e8Smrg		  # A PIC object.
5356c27c18e8Smrg		  func_append libobjs " $pic_object"
53570eb1301bSmrg		  arg="$pic_object"
5358c27c18e8Smrg		fi
5359c43cc173Smrg
5360c27c18e8Smrg		# Non-PIC object.
53610eb1301bSmrg		if test "$non_pic_object" != none; then
5362c27c18e8Smrg		  # Prepend the subdirectory the object is found in.
53630eb1301bSmrg		  non_pic_object="$xdir$non_pic_object"
5364c43cc173Smrg
5365c27c18e8Smrg		  # A standard non-PIC object
5366c27c18e8Smrg		  func_append non_pic_objects " $non_pic_object"
53670eb1301bSmrg		  if test -z "$pic_object" || test "$pic_object" = none ; then
53680eb1301bSmrg		    arg="$non_pic_object"
5369c27c18e8Smrg		  fi
5370c27c18e8Smrg		else
5371c27c18e8Smrg		  # If the PIC object exists, use it instead.
5372c27c18e8Smrg		  # $xdir was prepended to $pic_object above.
53730eb1301bSmrg		  non_pic_object="$pic_object"
5374c27c18e8Smrg		  func_append non_pic_objects " $non_pic_object"
5375c27c18e8Smrg		fi
5376c27c18e8Smrg	      else
5377c27c18e8Smrg		# Only an error if not doing a dry-run.
5378c27c18e8Smrg		if $opt_dry_run; then
5379c27c18e8Smrg		  # Extract subdirectory from the argument.
5380c27c18e8Smrg		  func_dirname "$arg" "/" ""
53810eb1301bSmrg		  xdir="$func_dirname_result"
5382c27c18e8Smrg
5383c27c18e8Smrg		  func_lo2o "$arg"
5384c27c18e8Smrg		  pic_object=$xdir$objdir/$func_lo2o_result
5385c27c18e8Smrg		  non_pic_object=$xdir$func_lo2o_result
5386c27c18e8Smrg		  func_append libobjs " $pic_object"
5387c27c18e8Smrg		  func_append non_pic_objects " $non_pic_object"
5388c27c18e8Smrg	        else
53890eb1301bSmrg		  func_fatal_error "\`$arg' is not a valid libtool object"
5390c27c18e8Smrg		fi
5391c27c18e8Smrg	      fi
5392c43cc173Smrg	    done
5393c27c18e8Smrg	  else
53940eb1301bSmrg	    func_fatal_error "link input file \`$arg' does not exist"
5395c43cc173Smrg	  fi
5396c27c18e8Smrg	  arg=$save_arg
5397c27c18e8Smrg	  prev=
5398c27c18e8Smrg	  continue
5399c27c18e8Smrg	  ;;
5400c27c18e8Smrg	precious_regex)
54010eb1301bSmrg	  precious_files_regex="$arg"
5402c27c18e8Smrg	  prev=
5403c27c18e8Smrg	  continue
5404c27c18e8Smrg	  ;;
5405c27c18e8Smrg	release)
54060eb1301bSmrg	  release="-$arg"
5407c27c18e8Smrg	  prev=
5408c27c18e8Smrg	  continue
5409c27c18e8Smrg	  ;;
5410c27c18e8Smrg	rpath | xrpath)
5411c27c18e8Smrg	  # We need an absolute path.
5412c27c18e8Smrg	  case $arg in
5413c27c18e8Smrg	  [\\/]* | [A-Za-z]:[\\/]*) ;;
5414c27c18e8Smrg	  *)
5415c27c18e8Smrg	    func_fatal_error "only absolute run-paths are allowed"
5416c27c18e8Smrg	    ;;
5417c43cc173Smrg	  esac
54180eb1301bSmrg	  if test "$prev" = rpath; then
5419c27c18e8Smrg	    case "$rpath " in
5420c27c18e8Smrg	    *" $arg "*) ;;
5421b789ec8aSmrg	    *) func_append rpath " $arg" ;;
5422c27c18e8Smrg	    esac
5423c27c18e8Smrg	  else
5424c27c18e8Smrg	    case "$xrpath " in
5425c27c18e8Smrg	    *" $arg "*) ;;
5426b789ec8aSmrg	    *) func_append xrpath " $arg" ;;
5427c27c18e8Smrg	    esac
5428c27c18e8Smrg	  fi
5429c27c18e8Smrg	  prev=
5430c27c18e8Smrg	  continue
5431c27c18e8Smrg	  ;;
5432c27c18e8Smrg	shrext)
54330eb1301bSmrg	  shrext_cmds="$arg"
5434c27c18e8Smrg	  prev=
5435c27c18e8Smrg	  continue
5436c27c18e8Smrg	  ;;
5437c27c18e8Smrg	weak)
5438b789ec8aSmrg	  func_append weak_libs " $arg"
5439c27c18e8Smrg	  prev=
5440c27c18e8Smrg	  continue
5441c27c18e8Smrg	  ;;
5442c27c18e8Smrg	xcclinker)
5443b789ec8aSmrg	  func_append linker_flags " $qarg"
5444b789ec8aSmrg	  func_append compiler_flags " $qarg"
5445c27c18e8Smrg	  prev=
5446c27c18e8Smrg	  func_append compile_command " $qarg"
5447c27c18e8Smrg	  func_append finalize_command " $qarg"
5448c27c18e8Smrg	  continue
5449c27c18e8Smrg	  ;;
5450c27c18e8Smrg	xcompiler)
5451b789ec8aSmrg	  func_append compiler_flags " $qarg"
5452c27c18e8Smrg	  prev=
5453c27c18e8Smrg	  func_append compile_command " $qarg"
5454c27c18e8Smrg	  func_append finalize_command " $qarg"
5455c27c18e8Smrg	  continue
5456c27c18e8Smrg	  ;;
5457c27c18e8Smrg	xlinker)
5458b789ec8aSmrg	  func_append linker_flags " $qarg"
5459b789ec8aSmrg	  func_append compiler_flags " $wl$qarg"
5460c27c18e8Smrg	  prev=
5461c27c18e8Smrg	  func_append compile_command " $wl$qarg"
5462c27c18e8Smrg	  func_append finalize_command " $wl$qarg"
5463c27c18e8Smrg	  continue
5464c43cc173Smrg	  ;;
5465c43cc173Smrg	*)
5466c27c18e8Smrg	  eval "$prev=\"\$arg\""
5467c27c18e8Smrg	  prev=
5468c27c18e8Smrg	  continue
5469c43cc173Smrg	  ;;
5470c43cc173Smrg	esac
5471c27c18e8Smrg      fi # test -n "$prev"
5472c43cc173Smrg
54730eb1301bSmrg      prevarg="$arg"
5474c43cc173Smrg
5475c27c18e8Smrg      case $arg in
5476c27c18e8Smrg      -all-static)
5477c27c18e8Smrg	if test -n "$link_static_flag"; then
5478c27c18e8Smrg	  # See comment for -static flag below, for more details.
5479c27c18e8Smrg	  func_append compile_command " $link_static_flag"
5480c27c18e8Smrg	  func_append finalize_command " $link_static_flag"
5481c43cc173Smrg	fi
5482c27c18e8Smrg	continue
5483c27c18e8Smrg	;;
5484c43cc173Smrg
5485c27c18e8Smrg      -allow-undefined)
5486c27c18e8Smrg	# FIXME: remove this flag sometime in the future.
54870eb1301bSmrg	func_fatal_error "\`-allow-undefined' must not be used because it is the default"
5488c27c18e8Smrg	;;
5489c43cc173Smrg
5490c27c18e8Smrg      -avoid-version)
5491c27c18e8Smrg	avoid_version=yes
5492c27c18e8Smrg	continue
5493c27c18e8Smrg	;;
5494c43cc173Smrg
549537eb1ca1Smrg      -bindir)
549637eb1ca1Smrg	prev=bindir
549737eb1ca1Smrg	continue
549837eb1ca1Smrg	;;
549937eb1ca1Smrg
5500c27c18e8Smrg      -dlopen)
5501c27c18e8Smrg	prev=dlfiles
5502c27c18e8Smrg	continue
5503c27c18e8Smrg	;;
5504c43cc173Smrg
5505c27c18e8Smrg      -dlpreopen)
5506c27c18e8Smrg	prev=dlprefiles
5507c27c18e8Smrg	continue
5508c27c18e8Smrg	;;
5509c43cc173Smrg
5510c27c18e8Smrg      -export-dynamic)
5511c27c18e8Smrg	export_dynamic=yes
5512c27c18e8Smrg	continue
5513c27c18e8Smrg	;;
5514c43cc173Smrg
5515c27c18e8Smrg      -export-symbols | -export-symbols-regex)
5516c27c18e8Smrg	if test -n "$export_symbols" || test -n "$export_symbols_regex"; then
5517c27c18e8Smrg	  func_fatal_error "more than one -exported-symbols argument is not allowed"
5518c27c18e8Smrg	fi
55190eb1301bSmrg	if test "X$arg" = "X-export-symbols"; then
5520c27c18e8Smrg	  prev=expsyms
5521c43cc173Smrg	else
5522c27c18e8Smrg	  prev=expsyms_regex
5523c43cc173Smrg	fi
5524c27c18e8Smrg	continue
5525c27c18e8Smrg	;;
5526c43cc173Smrg
5527c27c18e8Smrg      -framework)
5528c27c18e8Smrg	prev=framework
5529c27c18e8Smrg	continue
5530c27c18e8Smrg	;;
5531c43cc173Smrg
5532c27c18e8Smrg      -inst-prefix-dir)
5533c27c18e8Smrg	prev=inst_prefix
5534c27c18e8Smrg	continue
5535c27c18e8Smrg	;;
5536c43cc173Smrg
5537c27c18e8Smrg      # The native IRIX linker understands -LANG:*, -LIST:* and -LNO:*
5538c27c18e8Smrg      # so, if we see these flags be careful not to treat them like -L
5539c27c18e8Smrg      -L[A-Z][A-Z]*:*)
5540c27c18e8Smrg	case $with_gcc/$host in
5541c27c18e8Smrg	no/*-*-irix* | /*-*-irix*)
5542c27c18e8Smrg	  func_append compile_command " $arg"
5543c27c18e8Smrg	  func_append finalize_command " $arg"
5544c27c18e8Smrg	  ;;
5545c27c18e8Smrg	esac
5546c27c18e8Smrg	continue
5547c27c18e8Smrg	;;
5548c43cc173Smrg
5549c27c18e8Smrg      -L*)
5550b789ec8aSmrg	func_stripname "-L" '' "$arg"
5551b789ec8aSmrg	if test -z "$func_stripname_result"; then
5552c27c18e8Smrg	  if test "$#" -gt 0; then
55530eb1301bSmrg	    func_fatal_error "require no space between \`-L' and \`$1'"
5554c43cc173Smrg	  else
55550eb1301bSmrg	    func_fatal_error "need path for \`-L' option"
5556c43cc173Smrg	  fi
5557c27c18e8Smrg	fi
5558b789ec8aSmrg	func_resolve_sysroot "$func_stripname_result"
5559b789ec8aSmrg	dir=$func_resolve_sysroot_result
5560c27c18e8Smrg	# We need an absolute path.
5561c27c18e8Smrg	case $dir in
5562c27c18e8Smrg	[\\/]* | [A-Za-z]:[\\/]*) ;;
5563c27c18e8Smrg	*)
5564c27c18e8Smrg	  absdir=`cd "$dir" && pwd`
5565c27c18e8Smrg	  test -z "$absdir" && \
55660eb1301bSmrg	    func_fatal_error "cannot determine absolute directory name of \`$dir'"
55670eb1301bSmrg	  dir="$absdir"
5568c27c18e8Smrg	  ;;
5569c43cc173Smrg	esac
5570c27c18e8Smrg	case "$deplibs " in
5571b789ec8aSmrg	*" -L$dir "* | *" $arg "*)
5572b789ec8aSmrg	  # Will only happen for absolute or sysroot arguments
5573b789ec8aSmrg	  ;;
5574c27c18e8Smrg	*)
5575b789ec8aSmrg	  # Preserve sysroot, but never include relative directories
5576b789ec8aSmrg	  case $dir in
5577b789ec8aSmrg	    [\\/]* | [A-Za-z]:[\\/]* | =*) func_append deplibs " $arg" ;;
5578b789ec8aSmrg	    *) func_append deplibs " -L$dir" ;;
5579b789ec8aSmrg	  esac
5580b789ec8aSmrg	  func_append lib_search_path " $dir"
5581c27c18e8Smrg	  ;;
5582c43cc173Smrg	esac
5583c43cc173Smrg	case $host in
5584c27c18e8Smrg	*-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-cegcc*)
558537eb1ca1Smrg	  testbindir=`$ECHO "$dir" | $SED 's*/lib$*/bin*'`
5586c27c18e8Smrg	  case :$dllsearchpath: in
5587c27c18e8Smrg	  *":$dir:"*) ;;
5588c27c18e8Smrg	  ::) dllsearchpath=$dir;;
5589b789ec8aSmrg	  *) func_append dllsearchpath ":$dir";;
5590c27c18e8Smrg	  esac
5591c27c18e8Smrg	  case :$dllsearchpath: in
5592c27c18e8Smrg	  *":$testbindir:"*) ;;
5593c27c18e8Smrg	  ::) dllsearchpath=$testbindir;;
5594b789ec8aSmrg	  *) func_append dllsearchpath ":$testbindir";;
5595c27c18e8Smrg	  esac
5596c27c18e8Smrg	  ;;
5597c43cc173Smrg	esac
5598c27c18e8Smrg	continue
5599c27c18e8Smrg	;;
5600c43cc173Smrg
5601c27c18e8Smrg      -l*)
56020eb1301bSmrg	if test "X$arg" = "X-lc" || test "X$arg" = "X-lm"; then
5603c27c18e8Smrg	  case $host in
560437eb1ca1Smrg	  *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-beos* | *-cegcc* | *-*-haiku*)
5605c27c18e8Smrg	    # These systems don't actually have a C or math library (as such)
5606c27c18e8Smrg	    continue
5607c27c18e8Smrg	    ;;
5608c27c18e8Smrg	  *-*-os2*)
5609c27c18e8Smrg	    # These systems don't actually have a C library (as such)
56100eb1301bSmrg	    test "X$arg" = "X-lc" && continue
5611c27c18e8Smrg	    ;;
56120eb1301bSmrg	  *-*-openbsd* | *-*-freebsd* | *-*-dragonfly*)
5613c27c18e8Smrg	    # Do not include libc due to us having libc/libc_r.
56140eb1301bSmrg	    test "X$arg" = "X-lc" && continue
5615c27c18e8Smrg	    ;;
5616c27c18e8Smrg	  *-*-rhapsody* | *-*-darwin1.[012])
5617c27c18e8Smrg	    # Rhapsody C and math libraries are in the System framework
5618b789ec8aSmrg	    func_append deplibs " System.ltframework"
5619c27c18e8Smrg	    continue
5620c27c18e8Smrg	    ;;
5621c27c18e8Smrg	  *-*-sco3.2v5* | *-*-sco5v6*)
5622c27c18e8Smrg	    # Causes problems with __ctype
56230eb1301bSmrg	    test "X$arg" = "X-lc" && continue
5624c27c18e8Smrg	    ;;
5625c27c18e8Smrg	  *-*-sysv4.2uw2* | *-*-sysv5* | *-*-unixware* | *-*-OpenUNIX*)
5626c27c18e8Smrg	    # Compiler inserts libc in the correct place for threads to work
56270eb1301bSmrg	    test "X$arg" = "X-lc" && continue
5628c27c18e8Smrg	    ;;
5629c27c18e8Smrg	  esac
56300eb1301bSmrg	elif test "X$arg" = "X-lc_r"; then
5631c27c18e8Smrg	 case $host in
56320eb1301bSmrg	 *-*-openbsd* | *-*-freebsd* | *-*-dragonfly*)
5633c27c18e8Smrg	   # Do not include libc_r directly, use -pthread flag.
5634c27c18e8Smrg	   continue
5635c27c18e8Smrg	   ;;
5636c27c18e8Smrg	 esac
5637c27c18e8Smrg	fi
5638b789ec8aSmrg	func_append deplibs " $arg"
5639c27c18e8Smrg	continue
5640c27c18e8Smrg	;;
5641c43cc173Smrg
5642c27c18e8Smrg      -module)
5643c27c18e8Smrg	module=yes
5644c27c18e8Smrg	continue
5645c27c18e8Smrg	;;
5646c43cc173Smrg
5647c27c18e8Smrg      # Tru64 UNIX uses -model [arg] to determine the layout of C++
5648c27c18e8Smrg      # classes, name mangling, and exception handling.
5649c27c18e8Smrg      # Darwin uses the -arch flag to determine output architecture.
5650b789ec8aSmrg      -model|-arch|-isysroot|--sysroot)
5651b789ec8aSmrg	func_append compiler_flags " $arg"
5652c27c18e8Smrg	func_append compile_command " $arg"
5653c27c18e8Smrg	func_append finalize_command " $arg"
5654c27c18e8Smrg	prev=xcompiler
5655c27c18e8Smrg	continue
5656c27c18e8Smrg	;;
5657c43cc173Smrg
5658f1ee322dSmrg      -mt|-mthreads|-kthread|-Kthread|-pthread|-pthreads|--thread-safe \
5659f1ee322dSmrg      |-threads|-fopenmp|-openmp|-mp|-xopenmp|-omp|-qsmp=*)
5660b789ec8aSmrg	func_append compiler_flags " $arg"
5661c27c18e8Smrg	func_append compile_command " $arg"
5662c27c18e8Smrg	func_append finalize_command " $arg"
5663c27c18e8Smrg	case "$new_inherited_linker_flags " in
5664c27c18e8Smrg	    *" $arg "*) ;;
5665b789ec8aSmrg	    * ) func_append new_inherited_linker_flags " $arg" ;;
5666c27c18e8Smrg	esac
5667c27c18e8Smrg	continue
5668c27c18e8Smrg	;;
5669c43cc173Smrg
5670c27c18e8Smrg      -multi_module)
56710eb1301bSmrg	single_module="${wl}-multi_module"
5672c27c18e8Smrg	continue
5673c27c18e8Smrg	;;
5674c43cc173Smrg
5675c27c18e8Smrg      -no-fast-install)
5676c27c18e8Smrg	fast_install=no
5677c27c18e8Smrg	continue
5678c27c18e8Smrg	;;
5679c43cc173Smrg
5680c27c18e8Smrg      -no-install)
5681c27c18e8Smrg	case $host in
5682c27c18e8Smrg	*-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-*-darwin* | *-cegcc*)
5683c27c18e8Smrg	  # The PATH hackery in wrapper scripts is required on Windows
5684c27c18e8Smrg	  # and Darwin in order for the loader to find any dlls it needs.
56850eb1301bSmrg	  func_warning "\`-no-install' is ignored for $host"
56860eb1301bSmrg	  func_warning "assuming \`-no-fast-install' instead"
5687c27c18e8Smrg	  fast_install=no
5688c27c18e8Smrg	  ;;
5689c27c18e8Smrg	*) no_install=yes ;;
5690c27c18e8Smrg	esac
5691c27c18e8Smrg	continue
5692c27c18e8Smrg	;;
5693c43cc173Smrg
5694c27c18e8Smrg      -no-undefined)
5695c27c18e8Smrg	allow_undefined=no
5696c27c18e8Smrg	continue
5697c27c18e8Smrg	;;
5698c43cc173Smrg
5699c27c18e8Smrg      -objectlist)
5700c27c18e8Smrg	prev=objectlist
5701c27c18e8Smrg	continue
5702c27c18e8Smrg	;;
5703c43cc173Smrg
5704c27c18e8Smrg      -o) prev=output ;;
5705c43cc173Smrg
5706c27c18e8Smrg      -precious-files-regex)
5707c27c18e8Smrg	prev=precious_regex
5708c27c18e8Smrg	continue
5709c27c18e8Smrg	;;
5710c43cc173Smrg
5711c27c18e8Smrg      -release)
5712c27c18e8Smrg	prev=release
5713c27c18e8Smrg	continue
5714c27c18e8Smrg	;;
5715c43cc173Smrg
5716c27c18e8Smrg      -rpath)
5717c27c18e8Smrg	prev=rpath
5718c27c18e8Smrg	continue
5719c27c18e8Smrg	;;
5720c43cc173Smrg
5721c27c18e8Smrg      -R)
5722c27c18e8Smrg	prev=xrpath
5723c27c18e8Smrg	continue
5724c27c18e8Smrg	;;
5725c43cc173Smrg
5726c27c18e8Smrg      -R*)
5727c27c18e8Smrg	func_stripname '-R' '' "$arg"
5728c27c18e8Smrg	dir=$func_stripname_result
5729c27c18e8Smrg	# We need an absolute path.
5730c27c18e8Smrg	case $dir in
5731c27c18e8Smrg	[\\/]* | [A-Za-z]:[\\/]*) ;;
5732b789ec8aSmrg	=*)
5733b789ec8aSmrg	  func_stripname '=' '' "$dir"
5734b789ec8aSmrg	  dir=$lt_sysroot$func_stripname_result
5735b789ec8aSmrg	  ;;
5736c27c18e8Smrg	*)
5737c27c18e8Smrg	  func_fatal_error "only absolute run-paths are allowed"
5738c27c18e8Smrg	  ;;
5739c27c18e8Smrg	esac
5740c27c18e8Smrg	case "$xrpath " in
5741c27c18e8Smrg	*" $dir "*) ;;
5742b789ec8aSmrg	*) func_append xrpath " $dir" ;;
5743c27c18e8Smrg	esac
5744c27c18e8Smrg	continue
5745c27c18e8Smrg	;;
5746c43cc173Smrg
5747c27c18e8Smrg      -shared)
5748c27c18e8Smrg	# The effects of -shared are defined in a previous loop.
5749c27c18e8Smrg	continue
5750c27c18e8Smrg	;;
5751c43cc173Smrg
5752c27c18e8Smrg      -shrext)
5753c27c18e8Smrg	prev=shrext
5754c27c18e8Smrg	continue
5755c27c18e8Smrg	;;
5756c43cc173Smrg
5757c27c18e8Smrg      -static | -static-libtool-libs)
5758c27c18e8Smrg	# The effects of -static are defined in a previous loop.
5759c27c18e8Smrg	# We used to do the same as -all-static on platforms that
5760c27c18e8Smrg	# didn't have a PIC flag, but the assumption that the effects
5761c27c18e8Smrg	# would be equivalent was wrong.  It would break on at least
5762c27c18e8Smrg	# Digital Unix and AIX.
5763c27c18e8Smrg	continue
5764c27c18e8Smrg	;;
5765c43cc173Smrg
5766c27c18e8Smrg      -thread-safe)
5767c27c18e8Smrg	thread_safe=yes
5768c27c18e8Smrg	continue
5769c27c18e8Smrg	;;
5770c43cc173Smrg
5771c27c18e8Smrg      -version-info)
5772c27c18e8Smrg	prev=vinfo
5773c27c18e8Smrg	continue
5774c27c18e8Smrg	;;
5775c43cc173Smrg
5776c27c18e8Smrg      -version-number)
5777c27c18e8Smrg	prev=vinfo
5778c27c18e8Smrg	vinfo_number=yes
5779c27c18e8Smrg	continue
5780c27c18e8Smrg	;;
5781c43cc173Smrg
5782c27c18e8Smrg      -weak)
5783c27c18e8Smrg        prev=weak
5784c27c18e8Smrg	continue
5785c27c18e8Smrg	;;
5786c43cc173Smrg
5787c27c18e8Smrg      -Wc,*)
5788c27c18e8Smrg	func_stripname '-Wc,' '' "$arg"
5789c27c18e8Smrg	args=$func_stripname_result
5790c27c18e8Smrg	arg=
57910eb1301bSmrg	save_ifs="$IFS"; IFS=','
5792c27c18e8Smrg	for flag in $args; do
57930eb1301bSmrg	  IFS="$save_ifs"
5794c27c18e8Smrg          func_quote_for_eval "$flag"
5795b789ec8aSmrg	  func_append arg " $func_quote_for_eval_result"
5796b789ec8aSmrg	  func_append compiler_flags " $func_quote_for_eval_result"
5797c27c18e8Smrg	done
57980eb1301bSmrg	IFS="$save_ifs"
5799c27c18e8Smrg	func_stripname ' ' '' "$arg"
5800c27c18e8Smrg	arg=$func_stripname_result
5801c27c18e8Smrg	;;
5802c43cc173Smrg
5803c27c18e8Smrg      -Wl,*)
5804c27c18e8Smrg	func_stripname '-Wl,' '' "$arg"
5805c27c18e8Smrg	args=$func_stripname_result
5806c27c18e8Smrg	arg=
58070eb1301bSmrg	save_ifs="$IFS"; IFS=','
5808c27c18e8Smrg	for flag in $args; do
58090eb1301bSmrg	  IFS="$save_ifs"
5810c27c18e8Smrg          func_quote_for_eval "$flag"
5811b789ec8aSmrg	  func_append arg " $wl$func_quote_for_eval_result"
5812b789ec8aSmrg	  func_append compiler_flags " $wl$func_quote_for_eval_result"
5813b789ec8aSmrg	  func_append linker_flags " $func_quote_for_eval_result"
5814c27c18e8Smrg	done
58150eb1301bSmrg	IFS="$save_ifs"
5816c27c18e8Smrg	func_stripname ' ' '' "$arg"
5817c27c18e8Smrg	arg=$func_stripname_result
5818c27c18e8Smrg	;;
5819c43cc173Smrg
5820c27c18e8Smrg      -Xcompiler)
5821c27c18e8Smrg	prev=xcompiler
5822c27c18e8Smrg	continue
5823c27c18e8Smrg	;;
5824c43cc173Smrg
5825c27c18e8Smrg      -Xlinker)
5826c27c18e8Smrg	prev=xlinker
5827c27c18e8Smrg	continue
5828c27c18e8Smrg	;;
5829c43cc173Smrg
5830c27c18e8Smrg      -XCClinker)
5831c27c18e8Smrg	prev=xcclinker
5832c27c18e8Smrg	continue
5833c27c18e8Smrg	;;
5834c43cc173Smrg
5835c27c18e8Smrg      # -msg_* for osf cc
5836c27c18e8Smrg      -msg_*)
5837c27c18e8Smrg	func_quote_for_eval "$arg"
58380eb1301bSmrg	arg="$func_quote_for_eval_result"
5839c27c18e8Smrg	;;
5840c43cc173Smrg
584137eb1ca1Smrg      # Flags to be passed through unchanged, with rationale:
584237eb1ca1Smrg      # -64, -mips[0-9]      enable 64-bit mode for the SGI compiler
584337eb1ca1Smrg      # -r[0-9][0-9]*        specify processor for the SGI compiler
584437eb1ca1Smrg      # -xarch=*, -xtarget=* enable 64-bit mode for the Sun compiler
584537eb1ca1Smrg      # +DA*, +DD*           enable 64-bit mode for the HP compiler
584637eb1ca1Smrg      # -q*                  compiler args for the IBM compiler
584737eb1ca1Smrg      # -m*, -t[45]*, -txscale* architecture-specific flags for GCC
584837eb1ca1Smrg      # -F/path              path to uninstalled frameworks, gcc on darwin
584937eb1ca1Smrg      # -p, -pg, --coverage, -fprofile-*  profiling flags for GCC
585037eb1ca1Smrg      # @file                GCC response files
585137eb1ca1Smrg      # -tp=*                Portland pgcc target processor selection
5852b789ec8aSmrg      # --sysroot=*          for sysroot support
58530eb1301bSmrg      # -O*, -flto*, -fwhopr*, -fuse-linker-plugin GCC link-time optimization
5854c27c18e8Smrg      -64|-mips[0-9]|-r[0-9][0-9]*|-xarch=*|-xtarget=*|+DA*|+DD*|-q*|-m*| \
5855b789ec8aSmrg      -t[45]*|-txscale*|-p|-pg|--coverage|-fprofile-*|-F*|@*|-tp=*|--sysroot=*| \
58560eb1301bSmrg      -O*|-flto*|-fwhopr*|-fuse-linker-plugin)
5857c27c18e8Smrg        func_quote_for_eval "$arg"
58580eb1301bSmrg	arg="$func_quote_for_eval_result"
5859c27c18e8Smrg        func_append compile_command " $arg"
5860c27c18e8Smrg        func_append finalize_command " $arg"
5861b789ec8aSmrg        func_append compiler_flags " $arg"
5862c27c18e8Smrg        continue
5863c27c18e8Smrg        ;;
5864c43cc173Smrg
5865c27c18e8Smrg      # Some other compiler flag.
5866c27c18e8Smrg      -* | +*)
5867c27c18e8Smrg        func_quote_for_eval "$arg"
58680eb1301bSmrg	arg="$func_quote_for_eval_result"
5869c27c18e8Smrg	;;
5870c43cc173Smrg
5871c27c18e8Smrg      *.$objext)
5872c27c18e8Smrg	# A standard object.
5873b789ec8aSmrg	func_append objs " $arg"
5874c27c18e8Smrg	;;
5875c43cc173Smrg
5876c27c18e8Smrg      *.lo)
5877c27c18e8Smrg	# A libtool-controlled object.
5878c43cc173Smrg
5879c27c18e8Smrg	# Check to see that this really is a libtool object.
5880c27c18e8Smrg	if func_lalib_unsafe_p "$arg"; then
5881c27c18e8Smrg	  pic_object=
5882c27c18e8Smrg	  non_pic_object=
5883c43cc173Smrg
5884c27c18e8Smrg	  # Read the .lo file
5885c27c18e8Smrg	  func_source "$arg"
5886c43cc173Smrg
5887c27c18e8Smrg	  if test -z "$pic_object" ||
5888c27c18e8Smrg	     test -z "$non_pic_object" ||
58890eb1301bSmrg	     test "$pic_object" = none &&
58900eb1301bSmrg	     test "$non_pic_object" = none; then
58910eb1301bSmrg	    func_fatal_error "cannot find name of object for \`$arg'"
5892c27c18e8Smrg	  fi
5893c43cc173Smrg
5894c27c18e8Smrg	  # Extract subdirectory from the argument.
5895c27c18e8Smrg	  func_dirname "$arg" "/" ""
58960eb1301bSmrg	  xdir="$func_dirname_result"
5897c43cc173Smrg
58980eb1301bSmrg	  if test "$pic_object" != none; then
5899c27c18e8Smrg	    # Prepend the subdirectory the object is found in.
59000eb1301bSmrg	    pic_object="$xdir$pic_object"
5901c43cc173Smrg
59020eb1301bSmrg	    if test "$prev" = dlfiles; then
59030eb1301bSmrg	      if test "$build_libtool_libs" = yes && test "$dlopen_support" = yes; then
5904b789ec8aSmrg		func_append dlfiles " $pic_object"
5905c27c18e8Smrg		prev=
5906c27c18e8Smrg		continue
5907c27c18e8Smrg	      else
5908c27c18e8Smrg		# If libtool objects are unsupported, then we need to preload.
5909c27c18e8Smrg		prev=dlprefiles
5910c27c18e8Smrg	      fi
5911c27c18e8Smrg	    fi
5912c43cc173Smrg
5913c27c18e8Smrg	    # CHECK ME:  I think I busted this.  -Ossama
59140eb1301bSmrg	    if test "$prev" = dlprefiles; then
5915c27c18e8Smrg	      # Preload the old-style object.
5916b789ec8aSmrg	      func_append dlprefiles " $pic_object"
5917c27c18e8Smrg	      prev=
5918c27c18e8Smrg	    fi
5919c43cc173Smrg
5920c27c18e8Smrg	    # A PIC object.
5921c27c18e8Smrg	    func_append libobjs " $pic_object"
59220eb1301bSmrg	    arg="$pic_object"
59230eb1301bSmrg	  fi
5924c43cc173Smrg
5925c27c18e8Smrg	  # Non-PIC object.
59260eb1301bSmrg	  if test "$non_pic_object" != none; then
5927c27c18e8Smrg	    # Prepend the subdirectory the object is found in.
59280eb1301bSmrg	    non_pic_object="$xdir$non_pic_object"
5929c43cc173Smrg
5930c27c18e8Smrg	    # A standard non-PIC object
5931c27c18e8Smrg	    func_append non_pic_objects " $non_pic_object"
59320eb1301bSmrg	    if test -z "$pic_object" || test "$pic_object" = none ; then
59330eb1301bSmrg	      arg="$non_pic_object"
5934c27c18e8Smrg	    fi
5935c27c18e8Smrg	  else
5936c27c18e8Smrg	    # If the PIC object exists, use it instead.
5937c27c18e8Smrg	    # $xdir was prepended to $pic_object above.
59380eb1301bSmrg	    non_pic_object="$pic_object"
5939c27c18e8Smrg	    func_append non_pic_objects " $non_pic_object"
5940c27c18e8Smrg	  fi
5941c27c18e8Smrg	else
5942c27c18e8Smrg	  # Only an error if not doing a dry-run.
5943c27c18e8Smrg	  if $opt_dry_run; then
5944c27c18e8Smrg	    # Extract subdirectory from the argument.
5945c27c18e8Smrg	    func_dirname "$arg" "/" ""
59460eb1301bSmrg	    xdir="$func_dirname_result"
5947c27c18e8Smrg
5948c27c18e8Smrg	    func_lo2o "$arg"
5949c27c18e8Smrg	    pic_object=$xdir$objdir/$func_lo2o_result
5950c27c18e8Smrg	    non_pic_object=$xdir$func_lo2o_result
5951c27c18e8Smrg	    func_append libobjs " $pic_object"
5952c27c18e8Smrg	    func_append non_pic_objects " $non_pic_object"
5953c27c18e8Smrg	  else
59540eb1301bSmrg	    func_fatal_error "\`$arg' is not a valid libtool object"
5955c27c18e8Smrg	  fi
5956c27c18e8Smrg	fi
5957c27c18e8Smrg	;;
5958c43cc173Smrg
5959c27c18e8Smrg      *.$libext)
5960c27c18e8Smrg	# An archive.
5961b789ec8aSmrg	func_append deplibs " $arg"
5962b789ec8aSmrg	func_append old_deplibs " $arg"
5963c27c18e8Smrg	continue
5964c27c18e8Smrg	;;
5965c43cc173Smrg
5966c27c18e8Smrg      *.la)
5967c27c18e8Smrg	# A libtool-controlled library.
5968c43cc173Smrg
5969b789ec8aSmrg	func_resolve_sysroot "$arg"
59700eb1301bSmrg	if test "$prev" = dlfiles; then
5971c27c18e8Smrg	  # This library was specified with -dlopen.
5972b789ec8aSmrg	  func_append dlfiles " $func_resolve_sysroot_result"
5973c27c18e8Smrg	  prev=
59740eb1301bSmrg	elif test "$prev" = dlprefiles; then
5975c27c18e8Smrg	  # The library was specified with -dlpreopen.
5976b789ec8aSmrg	  func_append dlprefiles " $func_resolve_sysroot_result"
5977c27c18e8Smrg	  prev=
5978c27c18e8Smrg	else
5979b789ec8aSmrg	  func_append deplibs " $func_resolve_sysroot_result"
5980c27c18e8Smrg	fi
5981c27c18e8Smrg	continue
5982c27c18e8Smrg	;;
5983c43cc173Smrg
5984c27c18e8Smrg      # Some other compiler argument.
5985c27c18e8Smrg      *)
5986c27c18e8Smrg	# Unknown arguments in both finalize_command and compile_command need
5987c27c18e8Smrg	# to be aesthetically quoted because they are evaled later.
5988c27c18e8Smrg	func_quote_for_eval "$arg"
59890eb1301bSmrg	arg="$func_quote_for_eval_result"
5990c27c18e8Smrg	;;
5991c27c18e8Smrg      esac # arg
5992c43cc173Smrg
5993c27c18e8Smrg      # Now actually substitute the argument into the commands.
5994c27c18e8Smrg      if test -n "$arg"; then
5995c27c18e8Smrg	func_append compile_command " $arg"
5996c27c18e8Smrg	func_append finalize_command " $arg"
5997c27c18e8Smrg      fi
5998c27c18e8Smrg    done # argument parsing loop
599921e67964Smrg
6000c27c18e8Smrg    test -n "$prev" && \
60010eb1301bSmrg      func_fatal_help "the \`$prevarg' option requires an argument"
6002c43cc173Smrg
60030eb1301bSmrg    if test "$export_dynamic" = yes && test -n "$export_dynamic_flag_spec"; then
6004c27c18e8Smrg      eval arg=\"$export_dynamic_flag_spec\"
6005c27c18e8Smrg      func_append compile_command " $arg"
6006c27c18e8Smrg      func_append finalize_command " $arg"
6007c27c18e8Smrg    fi
6008c43cc173Smrg
6009c27c18e8Smrg    oldlibs=
6010c27c18e8Smrg    # calculate the name of the file, without its directory
6011c27c18e8Smrg    func_basename "$output"
60120eb1301bSmrg    outputname="$func_basename_result"
60130eb1301bSmrg    libobjs_save="$libobjs"
6014c27c18e8Smrg
6015c27c18e8Smrg    if test -n "$shlibpath_var"; then
6016c27c18e8Smrg      # get the directories listed in $shlibpath_var
60170eb1301bSmrg      eval shlib_search_path=\`\$ECHO \"\${$shlibpath_var}\" \| \$SED \'s/:/ /g\'\`
6018c43cc173Smrg    else
6019c27c18e8Smrg      shlib_search_path=
6020c43cc173Smrg    fi
6021c27c18e8Smrg    eval sys_lib_search_path=\"$sys_lib_search_path_spec\"
6022c27c18e8Smrg    eval sys_lib_dlsearch_path=\"$sys_lib_dlsearch_path_spec\"
6023c43cc173Smrg
6024c27c18e8Smrg    func_dirname "$output" "/" ""
60250eb1301bSmrg    output_objdir="$func_dirname_result$objdir"
6026b789ec8aSmrg    func_to_tool_file "$output_objdir/"
6027b789ec8aSmrg    tool_output_objdir=$func_to_tool_file_result
6028c27c18e8Smrg    # Create the object directory.
6029c27c18e8Smrg    func_mkdir_p "$output_objdir"
6030c43cc173Smrg
6031c27c18e8Smrg    # Determine the type of output
6032c27c18e8Smrg    case $output in
6033c27c18e8Smrg    "")
6034c27c18e8Smrg      func_fatal_help "you must specify an output file"
6035c27c18e8Smrg      ;;
6036c27c18e8Smrg    *.$libext) linkmode=oldlib ;;
6037c27c18e8Smrg    *.lo | *.$objext) linkmode=obj ;;
6038c27c18e8Smrg    *.la) linkmode=lib ;;
6039c27c18e8Smrg    *) linkmode=prog ;; # Anything else should be a program.
6040c27c18e8Smrg    esac
6041c27c18e8Smrg
6042c27c18e8Smrg    specialdeplibs=
6043c27c18e8Smrg
6044c27c18e8Smrg    libs=
6045c27c18e8Smrg    # Find all interdependent deplibs by searching for libraries
6046c27c18e8Smrg    # that are linked more than once (e.g. -la -lb -la)
6047c27c18e8Smrg    for deplib in $deplibs; do
60480eb1301bSmrg      if $opt_preserve_dup_deps ; then
6049c27c18e8Smrg	case "$libs " in
6050b789ec8aSmrg	*" $deplib "*) func_append specialdeplibs " $deplib" ;;
6051c27c18e8Smrg	esac
6052c27c18e8Smrg      fi
6053b789ec8aSmrg      func_append libs " $deplib"
6054c27c18e8Smrg    done
6055c27c18e8Smrg
60560eb1301bSmrg    if test "$linkmode" = lib; then
6057c27c18e8Smrg      libs="$predeps $libs $compiler_lib_search_path $postdeps"
6058c27c18e8Smrg
6059c27c18e8Smrg      # Compute libraries that are listed more than once in $predeps
6060c27c18e8Smrg      # $postdeps and mark them as special (i.e., whose duplicates are
6061c27c18e8Smrg      # not to be eliminated).
6062c27c18e8Smrg      pre_post_deps=
6063c27c18e8Smrg      if $opt_duplicate_compiler_generated_deps; then
6064c27c18e8Smrg	for pre_post_dep in $predeps $postdeps; do
6065c27c18e8Smrg	  case "$pre_post_deps " in
6066b789ec8aSmrg	  *" $pre_post_dep "*) func_append specialdeplibs " $pre_post_deps" ;;
6067c27c18e8Smrg	  esac
6068b789ec8aSmrg	  func_append pre_post_deps " $pre_post_dep"
6069c27c18e8Smrg	done
6070c27c18e8Smrg      fi
6071c27c18e8Smrg      pre_post_deps=
6072c27c18e8Smrg    fi
6073c27c18e8Smrg
6074c27c18e8Smrg    deplibs=
6075c27c18e8Smrg    newdependency_libs=
6076c27c18e8Smrg    newlib_search_path=
6077c27c18e8Smrg    need_relink=no # whether we're linking any uninstalled libtool libraries
6078c27c18e8Smrg    notinst_deplibs= # not-installed libtool libraries
6079c27c18e8Smrg    notinst_path= # paths that contain not-installed libtool libraries
6080c27c18e8Smrg
6081c27c18e8Smrg    case $linkmode in
6082c27c18e8Smrg    lib)
6083c27c18e8Smrg	passes="conv dlpreopen link"
6084c27c18e8Smrg	for file in $dlfiles $dlprefiles; do
6085c27c18e8Smrg	  case $file in
6086c27c18e8Smrg	  *.la) ;;
6087c27c18e8Smrg	  *)
60880eb1301bSmrg	    func_fatal_help "libraries can \`-dlopen' only libtool libraries: $file"
6089c27c18e8Smrg	    ;;
6090c27c18e8Smrg	  esac
6091c27c18e8Smrg	done
6092c27c18e8Smrg	;;
6093c27c18e8Smrg    prog)
6094c27c18e8Smrg	compile_deplibs=
6095c27c18e8Smrg	finalize_deplibs=
60960eb1301bSmrg	alldeplibs=no
6097c27c18e8Smrg	newdlfiles=
6098c27c18e8Smrg	newdlprefiles=
6099c27c18e8Smrg	passes="conv scan dlopen dlpreopen link"
6100c27c18e8Smrg	;;
6101c27c18e8Smrg    *)  passes="conv"
6102c27c18e8Smrg	;;
6103c27c18e8Smrg    esac
6104c27c18e8Smrg
6105c27c18e8Smrg    for pass in $passes; do
6106c27c18e8Smrg      # The preopen pass in lib mode reverses $deplibs; put it back here
6107c27c18e8Smrg      # so that -L comes before libs that need it for instance...
61080eb1301bSmrg      if test "$linkmode,$pass" = "lib,link"; then
6109c27c18e8Smrg	## FIXME: Find the place where the list is rebuilt in the wrong
6110c27c18e8Smrg	##        order, and fix it there properly
6111c27c18e8Smrg        tmp_deplibs=
6112c27c18e8Smrg	for deplib in $deplibs; do
6113c27c18e8Smrg	  tmp_deplibs="$deplib $tmp_deplibs"
6114c27c18e8Smrg	done
61150eb1301bSmrg	deplibs="$tmp_deplibs"
6116c27c18e8Smrg      fi
6117c27c18e8Smrg
61180eb1301bSmrg      if test "$linkmode,$pass" = "lib,link" ||
61190eb1301bSmrg	 test "$linkmode,$pass" = "prog,scan"; then
61200eb1301bSmrg	libs="$deplibs"
6121c27c18e8Smrg	deplibs=
6122c27c18e8Smrg      fi
61230eb1301bSmrg      if test "$linkmode" = prog; then
6124c27c18e8Smrg	case $pass in
61250eb1301bSmrg	dlopen) libs="$dlfiles" ;;
61260eb1301bSmrg	dlpreopen) libs="$dlprefiles" ;;
61270eb1301bSmrg	link)
61280eb1301bSmrg	  libs="$deplibs %DEPLIBS%"
61290eb1301bSmrg	  test "X$link_all_deplibs" != Xno && libs="$libs $dependency_libs"
61300eb1301bSmrg	  ;;
6131c27c18e8Smrg	esac
6132c27c18e8Smrg      fi
61330eb1301bSmrg      if test "$linkmode,$pass" = "lib,dlpreopen"; then
6134c27c18e8Smrg	# Collect and forward deplibs of preopened libtool libs
6135c27c18e8Smrg	for lib in $dlprefiles; do
6136c27c18e8Smrg	  # Ignore non-libtool-libs
6137c27c18e8Smrg	  dependency_libs=
6138b789ec8aSmrg	  func_resolve_sysroot "$lib"
6139c27c18e8Smrg	  case $lib in
6140b789ec8aSmrg	  *.la)	func_source "$func_resolve_sysroot_result" ;;
6141c27c18e8Smrg	  esac
6142c27c18e8Smrg
6143c27c18e8Smrg	  # Collect preopened libtool deplibs, except any this library
6144c27c18e8Smrg	  # has declared as weak libs
6145c27c18e8Smrg	  for deplib in $dependency_libs; do
614637eb1ca1Smrg	    func_basename "$deplib"
614737eb1ca1Smrg            deplib_base=$func_basename_result
6148c27c18e8Smrg	    case " $weak_libs " in
6149c27c18e8Smrg	    *" $deplib_base "*) ;;
6150b789ec8aSmrg	    *) func_append deplibs " $deplib" ;;
6151c27c18e8Smrg	    esac
6152c27c18e8Smrg	  done
6153c27c18e8Smrg	done
61540eb1301bSmrg	libs="$dlprefiles"
6155c27c18e8Smrg      fi
61560eb1301bSmrg      if test "$pass" = dlopen; then
6157c27c18e8Smrg	# Collect dlpreopened libraries
61580eb1301bSmrg	save_deplibs="$deplibs"
6159c27c18e8Smrg	deplibs=
6160c27c18e8Smrg      fi
6161c27c18e8Smrg
6162c27c18e8Smrg      for deplib in $libs; do
6163c27c18e8Smrg	lib=
61640eb1301bSmrg	found=no
6165c27c18e8Smrg	case $deplib in
6166f1ee322dSmrg	-mt|-mthreads|-kthread|-Kthread|-pthread|-pthreads|--thread-safe \
6167f1ee322dSmrg        |-threads|-fopenmp|-openmp|-mp|-xopenmp|-omp|-qsmp=*)
61680eb1301bSmrg	  if test "$linkmode,$pass" = "prog,link"; then
6169c27c18e8Smrg	    compile_deplibs="$deplib $compile_deplibs"
6170c27c18e8Smrg	    finalize_deplibs="$deplib $finalize_deplibs"
6171c27c18e8Smrg	  else
6172b789ec8aSmrg	    func_append compiler_flags " $deplib"
61730eb1301bSmrg	    if test "$linkmode" = lib ; then
6174c27c18e8Smrg		case "$new_inherited_linker_flags " in
6175c27c18e8Smrg		    *" $deplib "*) ;;
6176b789ec8aSmrg		    * ) func_append new_inherited_linker_flags " $deplib" ;;
6177c27c18e8Smrg		esac
6178c27c18e8Smrg	    fi
6179c27c18e8Smrg	  fi
6180c27c18e8Smrg	  continue
6181c27c18e8Smrg	  ;;
6182c27c18e8Smrg	-l*)
61830eb1301bSmrg	  if test "$linkmode" != lib && test "$linkmode" != prog; then
61840eb1301bSmrg	    func_warning "\`-l' is ignored for archives/objects"
6185c27c18e8Smrg	    continue
6186c27c18e8Smrg	  fi
6187c27c18e8Smrg	  func_stripname '-l' '' "$deplib"
6188c27c18e8Smrg	  name=$func_stripname_result
61890eb1301bSmrg	  if test "$linkmode" = lib; then
6190c27c18e8Smrg	    searchdirs="$newlib_search_path $lib_search_path $compiler_lib_search_dirs $sys_lib_search_path $shlib_search_path"
6191c27c18e8Smrg	  else
6192c27c18e8Smrg	    searchdirs="$newlib_search_path $lib_search_path $sys_lib_search_path $shlib_search_path"
6193c27c18e8Smrg	  fi
6194c27c18e8Smrg	  for searchdir in $searchdirs; do
6195c27c18e8Smrg	    for search_ext in .la $std_shrext .so .a; do
6196c27c18e8Smrg	      # Search the libtool library
61970eb1301bSmrg	      lib="$searchdir/lib${name}${search_ext}"
6198c27c18e8Smrg	      if test -f "$lib"; then
61990eb1301bSmrg		if test "$search_ext" = ".la"; then
62000eb1301bSmrg		  found=yes
6201c27c18e8Smrg		else
62020eb1301bSmrg		  found=no
6203c27c18e8Smrg		fi
6204c27c18e8Smrg		break 2
6205c27c18e8Smrg	      fi
6206c27c18e8Smrg	    done
6207c27c18e8Smrg	  done
62080eb1301bSmrg	  if test "$found" != yes; then
62090eb1301bSmrg	    # deplib doesn't seem to be a libtool library
62100eb1301bSmrg	    if test "$linkmode,$pass" = "prog,link"; then
62110eb1301bSmrg	      compile_deplibs="$deplib $compile_deplibs"
62120eb1301bSmrg	      finalize_deplibs="$deplib $finalize_deplibs"
62130eb1301bSmrg	    else
62140eb1301bSmrg	      deplibs="$deplib $deplibs"
62150eb1301bSmrg	      test "$linkmode" = lib && newdependency_libs="$deplib $newdependency_libs"
62160eb1301bSmrg	    fi
62170eb1301bSmrg	    continue
62180eb1301bSmrg	  else # deplib is a libtool library
6219c27c18e8Smrg	    # If $allow_libtool_libs_with_static_runtimes && $deplib is a stdlib,
6220c27c18e8Smrg	    # We need to do some special things here, and not later.
62210eb1301bSmrg	    if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then
6222c27c18e8Smrg	      case " $predeps $postdeps " in
6223c27c18e8Smrg	      *" $deplib "*)
6224c27c18e8Smrg		if func_lalib_p "$lib"; then
6225c27c18e8Smrg		  library_names=
6226c27c18e8Smrg		  old_library=
6227c27c18e8Smrg		  func_source "$lib"
6228c27c18e8Smrg		  for l in $old_library $library_names; do
62290eb1301bSmrg		    ll="$l"
6230c27c18e8Smrg		  done
62310eb1301bSmrg		  if test "X$ll" = "X$old_library" ; then # only static version available
62320eb1301bSmrg		    found=no
6233c27c18e8Smrg		    func_dirname "$lib" "" "."
62340eb1301bSmrg		    ladir="$func_dirname_result"
6235c27c18e8Smrg		    lib=$ladir/$old_library
62360eb1301bSmrg		    if test "$linkmode,$pass" = "prog,link"; then
6237c27c18e8Smrg		      compile_deplibs="$deplib $compile_deplibs"
6238c27c18e8Smrg		      finalize_deplibs="$deplib $finalize_deplibs"
6239c27c18e8Smrg		    else
6240c27c18e8Smrg		      deplibs="$deplib $deplibs"
62410eb1301bSmrg		      test "$linkmode" = lib && newdependency_libs="$deplib $newdependency_libs"
6242c27c18e8Smrg		    fi
6243c27c18e8Smrg		    continue
6244c27c18e8Smrg		  fi
6245c27c18e8Smrg		fi
6246c27c18e8Smrg		;;
6247c27c18e8Smrg	      *) ;;
6248c27c18e8Smrg	      esac
6249c27c18e8Smrg	    fi
6250c27c18e8Smrg	  fi
6251c27c18e8Smrg	  ;; # -l
6252c27c18e8Smrg	*.ltframework)
62530eb1301bSmrg	  if test "$linkmode,$pass" = "prog,link"; then
6254c27c18e8Smrg	    compile_deplibs="$deplib $compile_deplibs"
6255c27c18e8Smrg	    finalize_deplibs="$deplib $finalize_deplibs"
6256c27c18e8Smrg	  else
6257c27c18e8Smrg	    deplibs="$deplib $deplibs"
62580eb1301bSmrg	    if test "$linkmode" = lib ; then
6259c27c18e8Smrg		case "$new_inherited_linker_flags " in
6260c27c18e8Smrg		    *" $deplib "*) ;;
6261b789ec8aSmrg		    * ) func_append new_inherited_linker_flags " $deplib" ;;
6262c27c18e8Smrg		esac
6263c27c18e8Smrg	    fi
6264c27c18e8Smrg	  fi
6265c27c18e8Smrg	  continue
6266c27c18e8Smrg	  ;;
6267c27c18e8Smrg	-L*)
6268c27c18e8Smrg	  case $linkmode in
6269c27c18e8Smrg	  lib)
6270c27c18e8Smrg	    deplibs="$deplib $deplibs"
62710eb1301bSmrg	    test "$pass" = conv && continue
6272c27c18e8Smrg	    newdependency_libs="$deplib $newdependency_libs"
6273c27c18e8Smrg	    func_stripname '-L' '' "$deplib"
6274b789ec8aSmrg	    func_resolve_sysroot "$func_stripname_result"
6275b789ec8aSmrg	    func_append newlib_search_path " $func_resolve_sysroot_result"
6276c27c18e8Smrg	    ;;
6277c27c18e8Smrg	  prog)
62780eb1301bSmrg	    if test "$pass" = conv; then
6279c27c18e8Smrg	      deplibs="$deplib $deplibs"
6280c27c18e8Smrg	      continue
6281c27c18e8Smrg	    fi
62820eb1301bSmrg	    if test "$pass" = scan; then
6283c27c18e8Smrg	      deplibs="$deplib $deplibs"
6284c27c18e8Smrg	    else
6285c27c18e8Smrg	      compile_deplibs="$deplib $compile_deplibs"
6286c27c18e8Smrg	      finalize_deplibs="$deplib $finalize_deplibs"
6287c27c18e8Smrg	    fi
6288c27c18e8Smrg	    func_stripname '-L' '' "$deplib"
6289b789ec8aSmrg	    func_resolve_sysroot "$func_stripname_result"
6290b789ec8aSmrg	    func_append newlib_search_path " $func_resolve_sysroot_result"
6291c27c18e8Smrg	    ;;
6292c27c18e8Smrg	  *)
62930eb1301bSmrg	    func_warning "\`-L' is ignored for archives/objects"
6294c27c18e8Smrg	    ;;
6295c27c18e8Smrg	  esac # linkmode
6296c27c18e8Smrg	  continue
6297c27c18e8Smrg	  ;; # -L
6298c27c18e8Smrg	-R*)
62990eb1301bSmrg	  if test "$pass" = link; then
6300c27c18e8Smrg	    func_stripname '-R' '' "$deplib"
6301b789ec8aSmrg	    func_resolve_sysroot "$func_stripname_result"
6302b789ec8aSmrg	    dir=$func_resolve_sysroot_result
6303c27c18e8Smrg	    # Make sure the xrpath contains only unique directories.
6304c27c18e8Smrg	    case "$xrpath " in
6305c27c18e8Smrg	    *" $dir "*) ;;
6306b789ec8aSmrg	    *) func_append xrpath " $dir" ;;
6307c27c18e8Smrg	    esac
6308c27c18e8Smrg	  fi
6309c27c18e8Smrg	  deplibs="$deplib $deplibs"
6310c27c18e8Smrg	  continue
6311c27c18e8Smrg	  ;;
6312b789ec8aSmrg	*.la)
6313b789ec8aSmrg	  func_resolve_sysroot "$deplib"
6314b789ec8aSmrg	  lib=$func_resolve_sysroot_result
6315b789ec8aSmrg	  ;;
6316c27c18e8Smrg	*.$libext)
63170eb1301bSmrg	  if test "$pass" = conv; then
6318c27c18e8Smrg	    deplibs="$deplib $deplibs"
6319c27c18e8Smrg	    continue
6320c27c18e8Smrg	  fi
6321c27c18e8Smrg	  case $linkmode in
6322c27c18e8Smrg	  lib)
6323c27c18e8Smrg	    # Linking convenience modules into shared libraries is allowed,
6324c27c18e8Smrg	    # but linking other static libraries is non-portable.
6325c27c18e8Smrg	    case " $dlpreconveniencelibs " in
6326c27c18e8Smrg	    *" $deplib "*) ;;
6327c27c18e8Smrg	    *)
63280eb1301bSmrg	      valid_a_lib=no
6329c27c18e8Smrg	      case $deplibs_check_method in
6330c27c18e8Smrg		match_pattern*)
6331c27c18e8Smrg		  set dummy $deplibs_check_method; shift
6332c27c18e8Smrg		  match_pattern_regex=`expr "$deplibs_check_method" : "$1 \(.*\)"`
633337eb1ca1Smrg		  if eval "\$ECHO \"$deplib\"" 2>/dev/null | $SED 10q \
6334c27c18e8Smrg		    | $EGREP "$match_pattern_regex" > /dev/null; then
63350eb1301bSmrg		    valid_a_lib=yes
6336c27c18e8Smrg		  fi
6337c27c18e8Smrg		;;
6338c27c18e8Smrg		pass_all)
63390eb1301bSmrg		  valid_a_lib=yes
6340c27c18e8Smrg		;;
6341c27c18e8Smrg	      esac
63420eb1301bSmrg	      if test "$valid_a_lib" != yes; then
634337eb1ca1Smrg		echo
6344c27c18e8Smrg		$ECHO "*** Warning: Trying to link with static lib archive $deplib."
634537eb1ca1Smrg		echo "*** I have the capability to make that library automatically link in when"
634637eb1ca1Smrg		echo "*** you link to this library.  But I can only do this if you have a"
634737eb1ca1Smrg		echo "*** shared version of the library, which you do not appear to have"
634837eb1ca1Smrg		echo "*** because the file extensions .$libext of this argument makes me believe"
634937eb1ca1Smrg		echo "*** that it is just a static archive that I should not use here."
63500eb1301bSmrg	      else
63510eb1301bSmrg		echo
63520eb1301bSmrg		$ECHO "*** Warning: Linking the shared library $output against the"
63530eb1301bSmrg		$ECHO "*** static library $deplib is not portable!"
63540eb1301bSmrg		deplibs="$deplib $deplibs"
6355c27c18e8Smrg	      fi
6356c27c18e8Smrg	      ;;
6357c27c18e8Smrg	    esac
6358c27c18e8Smrg	    continue
6359c27c18e8Smrg	    ;;
6360c27c18e8Smrg	  prog)
63610eb1301bSmrg	    if test "$pass" != link; then
6362c27c18e8Smrg	      deplibs="$deplib $deplibs"
6363c27c18e8Smrg	    else
6364c27c18e8Smrg	      compile_deplibs="$deplib $compile_deplibs"
6365c27c18e8Smrg	      finalize_deplibs="$deplib $finalize_deplibs"
6366c27c18e8Smrg	    fi
6367c27c18e8Smrg	    continue
6368c27c18e8Smrg	    ;;
6369c27c18e8Smrg	  esac # linkmode
6370c27c18e8Smrg	  ;; # *.$libext
6371c27c18e8Smrg	*.lo | *.$objext)
63720eb1301bSmrg	  if test "$pass" = conv; then
6373c27c18e8Smrg	    deplibs="$deplib $deplibs"
63740eb1301bSmrg	  elif test "$linkmode" = prog; then
63750eb1301bSmrg	    if test "$pass" = dlpreopen || test "$dlopen_support" != yes || test "$build_libtool_libs" = no; then
6376c27c18e8Smrg	      # If there is no dlopen support or we're linking statically,
6377c27c18e8Smrg	      # we need to preload.
6378b789ec8aSmrg	      func_append newdlprefiles " $deplib"
6379c27c18e8Smrg	      compile_deplibs="$deplib $compile_deplibs"
6380c27c18e8Smrg	      finalize_deplibs="$deplib $finalize_deplibs"
6381c27c18e8Smrg	    else
6382b789ec8aSmrg	      func_append newdlfiles " $deplib"
6383c27c18e8Smrg	    fi
6384c27c18e8Smrg	  fi
6385c27c18e8Smrg	  continue
6386c27c18e8Smrg	  ;;
6387c27c18e8Smrg	%DEPLIBS%)
63880eb1301bSmrg	  alldeplibs=yes
6389c27c18e8Smrg	  continue
6390c27c18e8Smrg	  ;;
6391c27c18e8Smrg	esac # case $deplib
6392c27c18e8Smrg
63930eb1301bSmrg	if test "$found" = yes || test -f "$lib"; then :
63940eb1301bSmrg	else
63950eb1301bSmrg	  func_fatal_error "cannot find the library \`$lib' or unhandled argument \`$deplib'"
63960eb1301bSmrg	fi
6397c27c18e8Smrg
6398c27c18e8Smrg	# Check to see that this really is a libtool archive.
6399c27c18e8Smrg	func_lalib_unsafe_p "$lib" \
64000eb1301bSmrg	  || func_fatal_error "\`$lib' is not a valid libtool archive"
6401c27c18e8Smrg
6402c27c18e8Smrg	func_dirname "$lib" "" "."
64030eb1301bSmrg	ladir="$func_dirname_result"
6404c27c18e8Smrg
6405c27c18e8Smrg	dlname=
6406c27c18e8Smrg	dlopen=
6407c27c18e8Smrg	dlpreopen=
6408c27c18e8Smrg	libdir=
6409c27c18e8Smrg	library_names=
6410c27c18e8Smrg	old_library=
6411c27c18e8Smrg	inherited_linker_flags=
6412c27c18e8Smrg	# If the library was installed with an old release of libtool,
6413c27c18e8Smrg	# it will not redefine variables installed, or shouldnotlink
6414c27c18e8Smrg	installed=yes
6415c27c18e8Smrg	shouldnotlink=no
6416c27c18e8Smrg	avoidtemprpath=
6417c27c18e8Smrg
6418c27c18e8Smrg
6419c27c18e8Smrg	# Read the .la file
6420c27c18e8Smrg	func_source "$lib"
6421c27c18e8Smrg
6422c27c18e8Smrg	# Convert "-framework foo" to "foo.ltframework"
6423c27c18e8Smrg	if test -n "$inherited_linker_flags"; then
642437eb1ca1Smrg	  tmp_inherited_linker_flags=`$ECHO "$inherited_linker_flags" | $SED 's/-framework \([^ $]*\)/\1.ltframework/g'`
6425c27c18e8Smrg	  for tmp_inherited_linker_flag in $tmp_inherited_linker_flags; do
6426c27c18e8Smrg	    case " $new_inherited_linker_flags " in
6427c27c18e8Smrg	      *" $tmp_inherited_linker_flag "*) ;;
6428b789ec8aSmrg	      *) func_append new_inherited_linker_flags " $tmp_inherited_linker_flag";;
6429c27c18e8Smrg	    esac
6430c27c18e8Smrg	  done
6431c27c18e8Smrg	fi
643237eb1ca1Smrg	dependency_libs=`$ECHO " $dependency_libs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'`
64330eb1301bSmrg	if test "$linkmode,$pass" = "lib,link" ||
64340eb1301bSmrg	   test "$linkmode,$pass" = "prog,scan" ||
64350eb1301bSmrg	   { test "$linkmode" != prog && test "$linkmode" != lib; }; then
6436b789ec8aSmrg	  test -n "$dlopen" && func_append dlfiles " $dlopen"
6437b789ec8aSmrg	  test -n "$dlpreopen" && func_append dlprefiles " $dlpreopen"
6438c27c18e8Smrg	fi
6439c27c18e8Smrg
64400eb1301bSmrg	if test "$pass" = conv; then
6441c27c18e8Smrg	  # Only check for convenience libraries
6442c27c18e8Smrg	  deplibs="$lib $deplibs"
6443c27c18e8Smrg	  if test -z "$libdir"; then
6444c27c18e8Smrg	    if test -z "$old_library"; then
64450eb1301bSmrg	      func_fatal_error "cannot find name of link library for \`$lib'"
6446c27c18e8Smrg	    fi
6447c27c18e8Smrg	    # It is a libtool convenience library, so add in its objects.
6448b789ec8aSmrg	    func_append convenience " $ladir/$objdir/$old_library"
6449b789ec8aSmrg	    func_append old_convenience " $ladir/$objdir/$old_library"
64500eb1301bSmrg	    tmp_libs=
64510eb1301bSmrg	    for deplib in $dependency_libs; do
64520eb1301bSmrg	      deplibs="$deplib $deplibs"
64530eb1301bSmrg	      if $opt_preserve_dup_deps ; then
64540eb1301bSmrg		case "$tmp_libs " in
64550eb1301bSmrg		*" $deplib "*) func_append specialdeplibs " $deplib" ;;
64560eb1301bSmrg		esac
64570eb1301bSmrg	      fi
64580eb1301bSmrg	      func_append tmp_libs " $deplib"
64590eb1301bSmrg	    done
64600eb1301bSmrg	  elif test "$linkmode" != prog && test "$linkmode" != lib; then
64610eb1301bSmrg	    func_fatal_error "\`$lib' is not a convenience library"
6462c27c18e8Smrg	  fi
6463c27c18e8Smrg	  continue
6464c27c18e8Smrg	fi # $pass = conv
6465c27c18e8Smrg
6466c27c18e8Smrg
6467c27c18e8Smrg	# Get the name of the library we link against.
6468c27c18e8Smrg	linklib=
6469b789ec8aSmrg	if test -n "$old_library" &&
64700eb1301bSmrg	   { test "$prefer_static_libs" = yes ||
64710eb1301bSmrg	     test "$prefer_static_libs,$installed" = "built,no"; }; then
6472b789ec8aSmrg	  linklib=$old_library
6473b789ec8aSmrg	else
6474b789ec8aSmrg	  for l in $old_library $library_names; do
64750eb1301bSmrg	    linklib="$l"
6476b789ec8aSmrg	  done
6477b789ec8aSmrg	fi
6478c27c18e8Smrg	if test -z "$linklib"; then
64790eb1301bSmrg	  func_fatal_error "cannot find name of link library for \`$lib'"
6480c27c18e8Smrg	fi
6481c27c18e8Smrg
6482c27c18e8Smrg	# This library was specified with -dlopen.
64830eb1301bSmrg	if test "$pass" = dlopen; then
64840eb1301bSmrg	  if test -z "$libdir"; then
64850eb1301bSmrg	    func_fatal_error "cannot -dlopen a convenience library: \`$lib'"
64860eb1301bSmrg	  fi
6487c27c18e8Smrg	  if test -z "$dlname" ||
64880eb1301bSmrg	     test "$dlopen_support" != yes ||
64890eb1301bSmrg	     test "$build_libtool_libs" = no; then
6490c27c18e8Smrg	    # If there is no dlname, no dlopen support or we're linking
6491c27c18e8Smrg	    # statically, we need to preload.  We also need to preload any
6492c27c18e8Smrg	    # dependent libraries so libltdl's deplib preloader doesn't
6493c27c18e8Smrg	    # bomb out in the load deplibs phase.
6494b789ec8aSmrg	    func_append dlprefiles " $lib $dependency_libs"
6495c27c18e8Smrg	  else
6496b789ec8aSmrg	    func_append newdlfiles " $lib"
6497c27c18e8Smrg	  fi
6498c27c18e8Smrg	  continue
6499c27c18e8Smrg	fi # $pass = dlopen
6500c27c18e8Smrg
6501c27c18e8Smrg	# We need an absolute path.
6502c27c18e8Smrg	case $ladir in
65030eb1301bSmrg	[\\/]* | [A-Za-z]:[\\/]*) abs_ladir="$ladir" ;;
6504c27c18e8Smrg	*)
6505c27c18e8Smrg	  abs_ladir=`cd "$ladir" && pwd`
6506c27c18e8Smrg	  if test -z "$abs_ladir"; then
65070eb1301bSmrg	    func_warning "cannot determine absolute directory name of \`$ladir'"
6508c27c18e8Smrg	    func_warning "passing it literally to the linker, although it might fail"
65090eb1301bSmrg	    abs_ladir="$ladir"
6510c27c18e8Smrg	  fi
6511c27c18e8Smrg	  ;;
6512c27c18e8Smrg	esac
6513c27c18e8Smrg	func_basename "$lib"
65140eb1301bSmrg	laname="$func_basename_result"
6515c27c18e8Smrg
6516c27c18e8Smrg	# Find the relevant object directory and library name.
65170eb1301bSmrg	if test "X$installed" = Xyes; then
6518b789ec8aSmrg	  if test ! -f "$lt_sysroot$libdir/$linklib" && test -f "$abs_ladir/$linklib"; then
65190eb1301bSmrg	    func_warning "library \`$lib' was moved."
65200eb1301bSmrg	    dir="$ladir"
65210eb1301bSmrg	    absdir="$abs_ladir"
65220eb1301bSmrg	    libdir="$abs_ladir"
6523c27c18e8Smrg	  else
65240eb1301bSmrg	    dir="$lt_sysroot$libdir"
65250eb1301bSmrg	    absdir="$lt_sysroot$libdir"
6526c27c18e8Smrg	  fi
65270eb1301bSmrg	  test "X$hardcode_automatic" = Xyes && avoidtemprpath=yes
6528c27c18e8Smrg	else
6529c27c18e8Smrg	  if test ! -f "$ladir/$objdir/$linklib" && test -f "$abs_ladir/$linklib"; then
65300eb1301bSmrg	    dir="$ladir"
65310eb1301bSmrg	    absdir="$abs_ladir"
6532c27c18e8Smrg	    # Remove this search path later
6533b789ec8aSmrg	    func_append notinst_path " $abs_ladir"
6534c27c18e8Smrg	  else
65350eb1301bSmrg	    dir="$ladir/$objdir"
65360eb1301bSmrg	    absdir="$abs_ladir/$objdir"
6537c27c18e8Smrg	    # Remove this search path later
6538b789ec8aSmrg	    func_append notinst_path " $abs_ladir"
6539c27c18e8Smrg	  fi
6540c27c18e8Smrg	fi # $installed = yes
6541c27c18e8Smrg	func_stripname 'lib' '.la' "$laname"
6542c27c18e8Smrg	name=$func_stripname_result
6543c27c18e8Smrg
6544c27c18e8Smrg	# This library was specified with -dlpreopen.
65450eb1301bSmrg	if test "$pass" = dlpreopen; then
65460eb1301bSmrg	  if test -z "$libdir" && test "$linkmode" = prog; then
65470eb1301bSmrg	    func_fatal_error "only libraries may -dlpreopen a convenience library: \`$lib'"
6548c27c18e8Smrg	  fi
65490eb1301bSmrg	  case "$host" in
6550b789ec8aSmrg	    # special handling for platforms with PE-DLLs.
6551b789ec8aSmrg	    *cygwin* | *mingw* | *cegcc* )
6552b789ec8aSmrg	      # Linker will automatically link against shared library if both
6553b789ec8aSmrg	      # static and shared are present.  Therefore, ensure we extract
6554b789ec8aSmrg	      # symbols from the import library if a shared library is present
6555b789ec8aSmrg	      # (otherwise, the dlopen module name will be incorrect).  We do
6556b789ec8aSmrg	      # this by putting the import library name into $newdlprefiles.
6557b789ec8aSmrg	      # We recover the dlopen module name by 'saving' the la file
6558b789ec8aSmrg	      # name in a special purpose variable, and (later) extracting the
6559b789ec8aSmrg	      # dlname from the la file.
6560b789ec8aSmrg	      if test -n "$dlname"; then
6561b789ec8aSmrg	        func_tr_sh "$dir/$linklib"
6562b789ec8aSmrg	        eval "libfile_$func_tr_sh_result=\$abs_ladir/\$laname"
6563b789ec8aSmrg	        func_append newdlprefiles " $dir/$linklib"
6564b789ec8aSmrg	      else
6565b789ec8aSmrg	        func_append newdlprefiles " $dir/$old_library"
6566b789ec8aSmrg	        # Keep a list of preopened convenience libraries to check
6567b789ec8aSmrg	        # that they are being used correctly in the link pass.
6568b789ec8aSmrg	        test -z "$libdir" && \
6569b789ec8aSmrg	          func_append dlpreconveniencelibs " $dir/$old_library"
6570b789ec8aSmrg	      fi
6571b789ec8aSmrg	    ;;
6572b789ec8aSmrg	    * )
6573b789ec8aSmrg	      # Prefer using a static library (so that no silly _DYNAMIC symbols
6574b789ec8aSmrg	      # are required to link).
6575b789ec8aSmrg	      if test -n "$old_library"; then
6576b789ec8aSmrg	        func_append newdlprefiles " $dir/$old_library"
6577b789ec8aSmrg	        # Keep a list of preopened convenience libraries to check
6578b789ec8aSmrg	        # that they are being used correctly in the link pass.
6579b789ec8aSmrg	        test -z "$libdir" && \
6580b789ec8aSmrg	          func_append dlpreconveniencelibs " $dir/$old_library"
6581b789ec8aSmrg	      # Otherwise, use the dlname, so that lt_dlopen finds it.
6582b789ec8aSmrg	      elif test -n "$dlname"; then
6583b789ec8aSmrg	        func_append newdlprefiles " $dir/$dlname"
6584b789ec8aSmrg	      else
6585b789ec8aSmrg	        func_append newdlprefiles " $dir/$linklib"
6586b789ec8aSmrg	      fi
6587b789ec8aSmrg	    ;;
6588b789ec8aSmrg	  esac
6589c27c18e8Smrg	fi # $pass = dlpreopen
6590c27c18e8Smrg
6591c27c18e8Smrg	if test -z "$libdir"; then
6592c27c18e8Smrg	  # Link the convenience library
65930eb1301bSmrg	  if test "$linkmode" = lib; then
6594c27c18e8Smrg	    deplibs="$dir/$old_library $deplibs"
65950eb1301bSmrg	  elif test "$linkmode,$pass" = "prog,link"; then
6596c27c18e8Smrg	    compile_deplibs="$dir/$old_library $compile_deplibs"
6597c27c18e8Smrg	    finalize_deplibs="$dir/$old_library $finalize_deplibs"
6598c27c18e8Smrg	  else
6599c27c18e8Smrg	    deplibs="$lib $deplibs" # used for prog,scan pass
6600c27c18e8Smrg	  fi
6601c27c18e8Smrg	  continue
6602c27c18e8Smrg	fi
6603c27c18e8Smrg
6604c27c18e8Smrg
66050eb1301bSmrg	if test "$linkmode" = prog && test "$pass" != link; then
6606b789ec8aSmrg	  func_append newlib_search_path " $ladir"
6607c27c18e8Smrg	  deplibs="$lib $deplibs"
6608c27c18e8Smrg
66090eb1301bSmrg	  linkalldeplibs=no
66100eb1301bSmrg	  if test "$link_all_deplibs" != no || test -z "$library_names" ||
66110eb1301bSmrg	     test "$build_libtool_libs" = no; then
66120eb1301bSmrg	    linkalldeplibs=yes
6613c27c18e8Smrg	  fi
6614c27c18e8Smrg
6615c27c18e8Smrg	  tmp_libs=
6616c27c18e8Smrg	  for deplib in $dependency_libs; do
6617c27c18e8Smrg	    case $deplib in
6618c27c18e8Smrg	    -L*) func_stripname '-L' '' "$deplib"
6619b789ec8aSmrg	         func_resolve_sysroot "$func_stripname_result"
6620b789ec8aSmrg	         func_append newlib_search_path " $func_resolve_sysroot_result"
6621c27c18e8Smrg		 ;;
6622c27c18e8Smrg	    esac
6623c27c18e8Smrg	    # Need to link against all dependency_libs?
66240eb1301bSmrg	    if test "$linkalldeplibs" = yes; then
6625c27c18e8Smrg	      deplibs="$deplib $deplibs"
6626c27c18e8Smrg	    else
6627c27c18e8Smrg	      # Need to hardcode shared library paths
6628c27c18e8Smrg	      # or/and link against static libraries
6629c27c18e8Smrg	      newdependency_libs="$deplib $newdependency_libs"
6630c27c18e8Smrg	    fi
66310eb1301bSmrg	    if $opt_preserve_dup_deps ; then
6632c27c18e8Smrg	      case "$tmp_libs " in
6633b789ec8aSmrg	      *" $deplib "*) func_append specialdeplibs " $deplib" ;;
6634c27c18e8Smrg	      esac
6635c27c18e8Smrg	    fi
6636b789ec8aSmrg	    func_append tmp_libs " $deplib"
6637c27c18e8Smrg	  done # for deplib
6638c27c18e8Smrg	  continue
6639c27c18e8Smrg	fi # $linkmode = prog...
6640c27c18e8Smrg
66410eb1301bSmrg	if test "$linkmode,$pass" = "prog,link"; then
6642c27c18e8Smrg	  if test -n "$library_names" &&
66430eb1301bSmrg	     { { test "$prefer_static_libs" = no ||
66440eb1301bSmrg	         test "$prefer_static_libs,$installed" = "built,yes"; } ||
6645c27c18e8Smrg	       test -z "$old_library"; }; then
6646c27c18e8Smrg	    # We need to hardcode the library path
66470eb1301bSmrg	    if test -n "$shlibpath_var" && test -z "$avoidtemprpath" ; then
6648c27c18e8Smrg	      # Make sure the rpath contains only unique directories.
66490eb1301bSmrg	      case "$temp_rpath:" in
6650c27c18e8Smrg	      *"$absdir:"*) ;;
6651b789ec8aSmrg	      *) func_append temp_rpath "$absdir:" ;;
6652c27c18e8Smrg	      esac
6653c27c18e8Smrg	    fi
6654c27c18e8Smrg
6655c27c18e8Smrg	    # Hardcode the library path.
6656c27c18e8Smrg	    # Skip directories that are in the system default run-time
6657c27c18e8Smrg	    # search path.
6658c27c18e8Smrg	    case " $sys_lib_dlsearch_path " in
6659c27c18e8Smrg	    *" $absdir "*) ;;
6660c27c18e8Smrg	    *)
6661c27c18e8Smrg	      case "$compile_rpath " in
6662c27c18e8Smrg	      *" $absdir "*) ;;
6663b789ec8aSmrg	      *) func_append compile_rpath " $absdir" ;;
6664c27c18e8Smrg	      esac
6665c27c18e8Smrg	      ;;
6666c27c18e8Smrg	    esac
6667c27c18e8Smrg	    case " $sys_lib_dlsearch_path " in
6668c27c18e8Smrg	    *" $libdir "*) ;;
6669c27c18e8Smrg	    *)
6670c27c18e8Smrg	      case "$finalize_rpath " in
6671c27c18e8Smrg	      *" $libdir "*) ;;
6672b789ec8aSmrg	      *) func_append finalize_rpath " $libdir" ;;
6673c27c18e8Smrg	      esac
6674c27c18e8Smrg	      ;;
6675c27c18e8Smrg	    esac
6676c27c18e8Smrg	  fi # $linkmode,$pass = prog,link...
6677c27c18e8Smrg
66780eb1301bSmrg	  if test "$alldeplibs" = yes &&
66790eb1301bSmrg	     { test "$deplibs_check_method" = pass_all ||
66800eb1301bSmrg	       { test "$build_libtool_libs" = yes &&
6681c27c18e8Smrg		 test -n "$library_names"; }; }; then
6682c27c18e8Smrg	    # We only need to search for static libraries
6683c27c18e8Smrg	    continue
6684c27c18e8Smrg	  fi
6685c27c18e8Smrg	fi
6686c27c18e8Smrg
6687c27c18e8Smrg	link_static=no # Whether the deplib will be linked statically
6688c27c18e8Smrg	use_static_libs=$prefer_static_libs
66890eb1301bSmrg	if test "$use_static_libs" = built && test "$installed" = yes; then
6690c27c18e8Smrg	  use_static_libs=no
6691c27c18e8Smrg	fi
6692c27c18e8Smrg	if test -n "$library_names" &&
66930eb1301bSmrg	   { test "$use_static_libs" = no || test -z "$old_library"; }; then
6694c27c18e8Smrg	  case $host in
66950eb1301bSmrg	  *cygwin* | *mingw* | *cegcc*)
6696c27c18e8Smrg	      # No point in relinking DLLs because paths are not encoded
6697b789ec8aSmrg	      func_append notinst_deplibs " $lib"
6698c27c18e8Smrg	      need_relink=no
6699c27c18e8Smrg	    ;;
6700c27c18e8Smrg	  *)
67010eb1301bSmrg	    if test "$installed" = no; then
6702b789ec8aSmrg	      func_append notinst_deplibs " $lib"
6703c27c18e8Smrg	      need_relink=yes
6704c27c18e8Smrg	    fi
6705c27c18e8Smrg	    ;;
6706c27c18e8Smrg	  esac
6707c27c18e8Smrg	  # This is a shared library
6708c27c18e8Smrg
6709c27c18e8Smrg	  # Warn about portability, can't link against -module's on some
6710c27c18e8Smrg	  # systems (darwin).  Don't bleat about dlopened modules though!
67110eb1301bSmrg	  dlopenmodule=""
6712c27c18e8Smrg	  for dlpremoduletest in $dlprefiles; do
6713c27c18e8Smrg	    if test "X$dlpremoduletest" = "X$lib"; then
67140eb1301bSmrg	      dlopenmodule="$dlpremoduletest"
6715c27c18e8Smrg	      break
6716c27c18e8Smrg	    fi
6717c27c18e8Smrg	  done
67180eb1301bSmrg	  if test -z "$dlopenmodule" && test "$shouldnotlink" = yes && test "$pass" = link; then
671937eb1ca1Smrg	    echo
67200eb1301bSmrg	    if test "$linkmode" = prog; then
6721c27c18e8Smrg	      $ECHO "*** Warning: Linking the executable $output against the loadable module"
6722c27c18e8Smrg	    else
6723c27c18e8Smrg	      $ECHO "*** Warning: Linking the shared library $output against the loadable module"
6724c27c18e8Smrg	    fi
6725c27c18e8Smrg	    $ECHO "*** $linklib is not portable!"
6726c27c18e8Smrg	  fi
67270eb1301bSmrg	  if test "$linkmode" = lib &&
67280eb1301bSmrg	     test "$hardcode_into_libs" = yes; then
6729c27c18e8Smrg	    # Hardcode the library path.
6730c27c18e8Smrg	    # Skip directories that are in the system default run-time
6731c27c18e8Smrg	    # search path.
6732c27c18e8Smrg	    case " $sys_lib_dlsearch_path " in
6733c27c18e8Smrg	    *" $absdir "*) ;;
6734c27c18e8Smrg	    *)
6735c27c18e8Smrg	      case "$compile_rpath " in
6736c27c18e8Smrg	      *" $absdir "*) ;;
6737b789ec8aSmrg	      *) func_append compile_rpath " $absdir" ;;
6738c27c18e8Smrg	      esac
6739c27c18e8Smrg	      ;;
6740c27c18e8Smrg	    esac
6741c27c18e8Smrg	    case " $sys_lib_dlsearch_path " in
6742c27c18e8Smrg	    *" $libdir "*) ;;
6743c27c18e8Smrg	    *)
6744c27c18e8Smrg	      case "$finalize_rpath " in
6745c27c18e8Smrg	      *" $libdir "*) ;;
6746b789ec8aSmrg	      *) func_append finalize_rpath " $libdir" ;;
6747c27c18e8Smrg	      esac
6748c27c18e8Smrg	      ;;
6749c27c18e8Smrg	    esac
6750c27c18e8Smrg	  fi
6751c27c18e8Smrg
6752c27c18e8Smrg	  if test -n "$old_archive_from_expsyms_cmds"; then
6753c27c18e8Smrg	    # figure out the soname
6754c27c18e8Smrg	    set dummy $library_names
6755c27c18e8Smrg	    shift
67560eb1301bSmrg	    realname="$1"
6757c27c18e8Smrg	    shift
6758c27c18e8Smrg	    libname=`eval "\\$ECHO \"$libname_spec\""`
6759c27c18e8Smrg	    # use dlname if we got it. it's perfectly good, no?
6760c27c18e8Smrg	    if test -n "$dlname"; then
67610eb1301bSmrg	      soname="$dlname"
6762c27c18e8Smrg	    elif test -n "$soname_spec"; then
6763c27c18e8Smrg	      # bleh windows
6764c27c18e8Smrg	      case $host in
67650eb1301bSmrg	      *cygwin* | mingw* | *cegcc*)
6766c27c18e8Smrg	        func_arith $current - $age
6767c27c18e8Smrg		major=$func_arith_result
67680eb1301bSmrg		versuffix="-$major"
6769c27c18e8Smrg		;;
6770c27c18e8Smrg	      esac
6771c27c18e8Smrg	      eval soname=\"$soname_spec\"
6772c27c18e8Smrg	    else
67730eb1301bSmrg	      soname="$realname"
6774c27c18e8Smrg	    fi
6775c27c18e8Smrg
6776c27c18e8Smrg	    # Make a new name for the extract_expsyms_cmds to use
67770eb1301bSmrg	    soroot="$soname"
6778c27c18e8Smrg	    func_basename "$soroot"
67790eb1301bSmrg	    soname="$func_basename_result"
6780c27c18e8Smrg	    func_stripname 'lib' '.dll' "$soname"
6781c27c18e8Smrg	    newlib=libimp-$func_stripname_result.a
6782c27c18e8Smrg
6783c27c18e8Smrg	    # If the library has no export list, then create one now
6784c27c18e8Smrg	    if test -f "$output_objdir/$soname-def"; then :
6785c27c18e8Smrg	    else
67860eb1301bSmrg	      func_verbose "extracting exported symbol list from \`$soname'"
6787c27c18e8Smrg	      func_execute_cmds "$extract_expsyms_cmds" 'exit $?'
6788c27c18e8Smrg	    fi
6789c27c18e8Smrg
6790c27c18e8Smrg	    # Create $newlib
6791c27c18e8Smrg	    if test -f "$output_objdir/$newlib"; then :; else
67920eb1301bSmrg	      func_verbose "generating import library for \`$soname'"
6793c27c18e8Smrg	      func_execute_cmds "$old_archive_from_expsyms_cmds" 'exit $?'
6794c27c18e8Smrg	    fi
6795c27c18e8Smrg	    # make sure the library variables are pointing to the new library
6796c27c18e8Smrg	    dir=$output_objdir
6797c27c18e8Smrg	    linklib=$newlib
6798c27c18e8Smrg	  fi # test -n "$old_archive_from_expsyms_cmds"
6799c27c18e8Smrg
68000eb1301bSmrg	  if test "$linkmode" = prog || test "$opt_mode" != relink; then
6801c27c18e8Smrg	    add_shlibpath=
6802c27c18e8Smrg	    add_dir=
6803c27c18e8Smrg	    add=
6804c27c18e8Smrg	    lib_linked=yes
6805c27c18e8Smrg	    case $hardcode_action in
6806c27c18e8Smrg	    immediate | unsupported)
68070eb1301bSmrg	      if test "$hardcode_direct" = no; then
68080eb1301bSmrg		add="$dir/$linklib"
6809c27c18e8Smrg		case $host in
68100eb1301bSmrg		  *-*-sco3.2v5.0.[024]*) add_dir="-L$dir" ;;
68110eb1301bSmrg		  *-*-sysv4*uw2*) add_dir="-L$dir" ;;
6812c27c18e8Smrg		  *-*-sysv5OpenUNIX* | *-*-sysv5UnixWare7.[01].[10]* | \
68130eb1301bSmrg		    *-*-unixware7*) add_dir="-L$dir" ;;
6814c27c18e8Smrg		  *-*-darwin* )
68150eb1301bSmrg		    # if the lib is a (non-dlopened) module then we can not
6816c27c18e8Smrg		    # link against it, someone is ignoring the earlier warnings
6817c27c18e8Smrg		    if /usr/bin/file -L $add 2> /dev/null |
68180eb1301bSmrg			 $GREP ": [^:]* bundle" >/dev/null ; then
6819c27c18e8Smrg		      if test "X$dlopenmodule" != "X$lib"; then
6820c27c18e8Smrg			$ECHO "*** Warning: lib $linklib is a module, not a shared library"
68210eb1301bSmrg			if test -z "$old_library" ; then
682237eb1ca1Smrg			  echo
682337eb1ca1Smrg			  echo "*** And there doesn't seem to be a static archive available"
682437eb1ca1Smrg			  echo "*** The link will probably fail, sorry"
6825c27c18e8Smrg			else
68260eb1301bSmrg			  add="$dir/$old_library"
6827c27c18e8Smrg			fi
6828c27c18e8Smrg		      elif test -n "$old_library"; then
68290eb1301bSmrg			add="$dir/$old_library"
6830c27c18e8Smrg		      fi
6831c27c18e8Smrg		    fi
6832c27c18e8Smrg		esac
68330eb1301bSmrg	      elif test "$hardcode_minus_L" = no; then
6834c27c18e8Smrg		case $host in
68350eb1301bSmrg		*-*-sunos*) add_shlibpath="$dir" ;;
6836c27c18e8Smrg		esac
68370eb1301bSmrg		add_dir="-L$dir"
68380eb1301bSmrg		add="-l$name"
68390eb1301bSmrg	      elif test "$hardcode_shlibpath_var" = no; then
68400eb1301bSmrg		add_shlibpath="$dir"
68410eb1301bSmrg		add="-l$name"
6842c27c18e8Smrg	      else
6843c27c18e8Smrg		lib_linked=no
6844c27c18e8Smrg	      fi
6845c27c18e8Smrg	      ;;
6846c27c18e8Smrg	    relink)
68470eb1301bSmrg	      if test "$hardcode_direct" = yes &&
68480eb1301bSmrg	         test "$hardcode_direct_absolute" = no; then
68490eb1301bSmrg		add="$dir/$linklib"
68500eb1301bSmrg	      elif test "$hardcode_minus_L" = yes; then
68510eb1301bSmrg		add_dir="-L$absdir"
6852c27c18e8Smrg		# Try looking first in the location we're being installed to.
6853c27c18e8Smrg		if test -n "$inst_prefix_dir"; then
6854c27c18e8Smrg		  case $libdir in
6855c27c18e8Smrg		    [\\/]*)
6856b789ec8aSmrg		      func_append add_dir " -L$inst_prefix_dir$libdir"
6857c27c18e8Smrg		      ;;
6858c27c18e8Smrg		  esac
6859c27c18e8Smrg		fi
68600eb1301bSmrg		add="-l$name"
68610eb1301bSmrg	      elif test "$hardcode_shlibpath_var" = yes; then
68620eb1301bSmrg		add_shlibpath="$dir"
68630eb1301bSmrg		add="-l$name"
6864c27c18e8Smrg	      else
6865c27c18e8Smrg		lib_linked=no
6866c27c18e8Smrg	      fi
6867c27c18e8Smrg	      ;;
6868c27c18e8Smrg	    *) lib_linked=no ;;
6869c27c18e8Smrg	    esac
6870c27c18e8Smrg
68710eb1301bSmrg	    if test "$lib_linked" != yes; then
6872c27c18e8Smrg	      func_fatal_configuration "unsupported hardcode properties"
6873c27c18e8Smrg	    fi
6874c27c18e8Smrg
6875c27c18e8Smrg	    if test -n "$add_shlibpath"; then
6876c27c18e8Smrg	      case :$compile_shlibpath: in
6877c27c18e8Smrg	      *":$add_shlibpath:"*) ;;
6878b789ec8aSmrg	      *) func_append compile_shlibpath "$add_shlibpath:" ;;
6879c27c18e8Smrg	      esac
6880c27c18e8Smrg	    fi
68810eb1301bSmrg	    if test "$linkmode" = prog; then
6882c27c18e8Smrg	      test -n "$add_dir" && compile_deplibs="$add_dir $compile_deplibs"
6883c27c18e8Smrg	      test -n "$add" && compile_deplibs="$add $compile_deplibs"
6884c27c18e8Smrg	    else
6885c27c18e8Smrg	      test -n "$add_dir" && deplibs="$add_dir $deplibs"
6886c27c18e8Smrg	      test -n "$add" && deplibs="$add $deplibs"
68870eb1301bSmrg	      if test "$hardcode_direct" != yes &&
68880eb1301bSmrg		 test "$hardcode_minus_L" != yes &&
68890eb1301bSmrg		 test "$hardcode_shlibpath_var" = yes; then
6890c27c18e8Smrg		case :$finalize_shlibpath: in
6891c27c18e8Smrg		*":$libdir:"*) ;;
6892b789ec8aSmrg		*) func_append finalize_shlibpath "$libdir:" ;;
6893c27c18e8Smrg		esac
6894c27c18e8Smrg	      fi
6895c27c18e8Smrg	    fi
6896c27c18e8Smrg	  fi
6897c27c18e8Smrg
68980eb1301bSmrg	  if test "$linkmode" = prog || test "$opt_mode" = relink; then
6899c27c18e8Smrg	    add_shlibpath=
6900c27c18e8Smrg	    add_dir=
6901c27c18e8Smrg	    add=
6902c27c18e8Smrg	    # Finalize command for both is simple: just hardcode it.
69030eb1301bSmrg	    if test "$hardcode_direct" = yes &&
69040eb1301bSmrg	       test "$hardcode_direct_absolute" = no; then
69050eb1301bSmrg	      add="$libdir/$linklib"
69060eb1301bSmrg	    elif test "$hardcode_minus_L" = yes; then
69070eb1301bSmrg	      add_dir="-L$libdir"
69080eb1301bSmrg	      add="-l$name"
69090eb1301bSmrg	    elif test "$hardcode_shlibpath_var" = yes; then
6910c27c18e8Smrg	      case :$finalize_shlibpath: in
6911c27c18e8Smrg	      *":$libdir:"*) ;;
6912b789ec8aSmrg	      *) func_append finalize_shlibpath "$libdir:" ;;
6913c27c18e8Smrg	      esac
69140eb1301bSmrg	      add="-l$name"
69150eb1301bSmrg	    elif test "$hardcode_automatic" = yes; then
6916c27c18e8Smrg	      if test -n "$inst_prefix_dir" &&
69170eb1301bSmrg		 test -f "$inst_prefix_dir$libdir/$linklib" ; then
69180eb1301bSmrg		add="$inst_prefix_dir$libdir/$linklib"
6919c27c18e8Smrg	      else
69200eb1301bSmrg		add="$libdir/$linklib"
6921c27c18e8Smrg	      fi
6922c27c18e8Smrg	    else
6923c27c18e8Smrg	      # We cannot seem to hardcode it, guess we'll fake it.
69240eb1301bSmrg	      add_dir="-L$libdir"
6925c27c18e8Smrg	      # Try looking first in the location we're being installed to.
6926c27c18e8Smrg	      if test -n "$inst_prefix_dir"; then
6927c27c18e8Smrg		case $libdir in
6928c27c18e8Smrg		  [\\/]*)
6929b789ec8aSmrg		    func_append add_dir " -L$inst_prefix_dir$libdir"
6930c27c18e8Smrg		    ;;
6931c27c18e8Smrg		esac
6932c27c18e8Smrg	      fi
69330eb1301bSmrg	      add="-l$name"
6934c27c18e8Smrg	    fi
6935c27c18e8Smrg
69360eb1301bSmrg	    if test "$linkmode" = prog; then
6937c27c18e8Smrg	      test -n "$add_dir" && finalize_deplibs="$add_dir $finalize_deplibs"
6938c27c18e8Smrg	      test -n "$add" && finalize_deplibs="$add $finalize_deplibs"
6939c27c18e8Smrg	    else
6940c27c18e8Smrg	      test -n "$add_dir" && deplibs="$add_dir $deplibs"
6941c27c18e8Smrg	      test -n "$add" && deplibs="$add $deplibs"
6942c27c18e8Smrg	    fi
6943c27c18e8Smrg	  fi
69440eb1301bSmrg	elif test "$linkmode" = prog; then
6945c27c18e8Smrg	  # Here we assume that one of hardcode_direct or hardcode_minus_L
6946c27c18e8Smrg	  # is not unsupported.  This is valid on all known static and
6947c27c18e8Smrg	  # shared platforms.
69480eb1301bSmrg	  if test "$hardcode_direct" != unsupported; then
69490eb1301bSmrg	    test -n "$old_library" && linklib="$old_library"
6950c27c18e8Smrg	    compile_deplibs="$dir/$linklib $compile_deplibs"
6951c27c18e8Smrg	    finalize_deplibs="$dir/$linklib $finalize_deplibs"
6952c27c18e8Smrg	  else
6953c27c18e8Smrg	    compile_deplibs="-l$name -L$dir $compile_deplibs"
6954c27c18e8Smrg	    finalize_deplibs="-l$name -L$dir $finalize_deplibs"
6955c27c18e8Smrg	  fi
69560eb1301bSmrg	elif test "$build_libtool_libs" = yes; then
6957c27c18e8Smrg	  # Not a shared library
69580eb1301bSmrg	  if test "$deplibs_check_method" != pass_all; then
6959c27c18e8Smrg	    # We're trying link a shared library against a static one
6960c27c18e8Smrg	    # but the system doesn't support it.
6961c27c18e8Smrg
6962c27c18e8Smrg	    # Just print a warning and add the library to dependency_libs so
6963c27c18e8Smrg	    # that the program can be linked against the static library.
696437eb1ca1Smrg	    echo
69650eb1301bSmrg	    $ECHO "*** Warning: This system can not link to static lib archive $lib."
696637eb1ca1Smrg	    echo "*** I have the capability to make that library automatically link in when"
696737eb1ca1Smrg	    echo "*** you link to this library.  But I can only do this if you have a"
696837eb1ca1Smrg	    echo "*** shared version of the library, which you do not appear to have."
69690eb1301bSmrg	    if test "$module" = yes; then
697037eb1ca1Smrg	      echo "*** But as you try to build a module library, libtool will still create "
697137eb1ca1Smrg	      echo "*** a static module, that should work as long as the dlopening application"
697237eb1ca1Smrg	      echo "*** is linked with the -dlopen flag to resolve symbols at runtime."
6973c27c18e8Smrg	      if test -z "$global_symbol_pipe"; then
697437eb1ca1Smrg		echo
697537eb1ca1Smrg		echo "*** However, this would only work if libtool was able to extract symbol"
69760eb1301bSmrg		echo "*** lists from a program, using \`nm' or equivalent, but libtool could"
697737eb1ca1Smrg		echo "*** not find such a program.  So, this module is probably useless."
69780eb1301bSmrg		echo "*** \`nm' from GNU binutils and a full rebuild may help."
6979c27c18e8Smrg	      fi
69800eb1301bSmrg	      if test "$build_old_libs" = no; then
6981c27c18e8Smrg		build_libtool_libs=module
6982c27c18e8Smrg		build_old_libs=yes
6983c27c18e8Smrg	      else
6984c27c18e8Smrg		build_libtool_libs=no
6985c27c18e8Smrg	      fi
6986c27c18e8Smrg	    fi
6987c27c18e8Smrg	  else
6988c27c18e8Smrg	    deplibs="$dir/$old_library $deplibs"
6989c27c18e8Smrg	    link_static=yes
6990c27c18e8Smrg	  fi
6991c27c18e8Smrg	fi # link shared/static library?
6992c27c18e8Smrg
69930eb1301bSmrg	if test "$linkmode" = lib; then
6994c27c18e8Smrg	  if test -n "$dependency_libs" &&
69950eb1301bSmrg	     { test "$hardcode_into_libs" != yes ||
69960eb1301bSmrg	       test "$build_old_libs" = yes ||
69970eb1301bSmrg	       test "$link_static" = yes; }; then
6998c27c18e8Smrg	    # Extract -R from dependency_libs
6999c27c18e8Smrg	    temp_deplibs=
7000c27c18e8Smrg	    for libdir in $dependency_libs; do
7001c27c18e8Smrg	      case $libdir in
7002c27c18e8Smrg	      -R*) func_stripname '-R' '' "$libdir"
7003c27c18e8Smrg	           temp_xrpath=$func_stripname_result
7004c27c18e8Smrg		   case " $xrpath " in
7005c27c18e8Smrg		   *" $temp_xrpath "*) ;;
7006b789ec8aSmrg		   *) func_append xrpath " $temp_xrpath";;
7007c27c18e8Smrg		   esac;;
7008b789ec8aSmrg	      *) func_append temp_deplibs " $libdir";;
7009c27c18e8Smrg	      esac
7010c27c18e8Smrg	    done
70110eb1301bSmrg	    dependency_libs="$temp_deplibs"
7012c27c18e8Smrg	  fi
7013c27c18e8Smrg
7014b789ec8aSmrg	  func_append newlib_search_path " $absdir"
7015c27c18e8Smrg	  # Link against this library
70160eb1301bSmrg	  test "$link_static" = no && newdependency_libs="$abs_ladir/$laname $newdependency_libs"
7017c27c18e8Smrg	  # ... and its dependency_libs
7018c27c18e8Smrg	  tmp_libs=
7019c27c18e8Smrg	  for deplib in $dependency_libs; do
7020c27c18e8Smrg	    newdependency_libs="$deplib $newdependency_libs"
7021b789ec8aSmrg	    case $deplib in
7022b789ec8aSmrg              -L*) func_stripname '-L' '' "$deplib"
7023b789ec8aSmrg                   func_resolve_sysroot "$func_stripname_result";;
7024b789ec8aSmrg              *) func_resolve_sysroot "$deplib" ;;
7025b789ec8aSmrg            esac
70260eb1301bSmrg	    if $opt_preserve_dup_deps ; then
7027c27c18e8Smrg	      case "$tmp_libs " in
7028b789ec8aSmrg	      *" $func_resolve_sysroot_result "*)
7029b789ec8aSmrg                func_append specialdeplibs " $func_resolve_sysroot_result" ;;
7030c27c18e8Smrg	      esac
7031c27c18e8Smrg	    fi
7032b789ec8aSmrg	    func_append tmp_libs " $func_resolve_sysroot_result"
7033c27c18e8Smrg	  done
7034c27c18e8Smrg
70350eb1301bSmrg	  if test "$link_all_deplibs" != no; then
7036c27c18e8Smrg	    # Add the search paths of all dependency libraries
7037c27c18e8Smrg	    for deplib in $dependency_libs; do
703837eb1ca1Smrg	      path=
7039c27c18e8Smrg	      case $deplib in
70400eb1301bSmrg	      -L*) path="$deplib" ;;
7041c27c18e8Smrg	      *.la)
7042b789ec8aSmrg	        func_resolve_sysroot "$deplib"
7043b789ec8aSmrg	        deplib=$func_resolve_sysroot_result
7044c27c18e8Smrg	        func_dirname "$deplib" "" "."
7045b789ec8aSmrg		dir=$func_dirname_result
7046c27c18e8Smrg		# We need an absolute path.
7047c27c18e8Smrg		case $dir in
70480eb1301bSmrg		[\\/]* | [A-Za-z]:[\\/]*) absdir="$dir" ;;
7049c27c18e8Smrg		*)
7050c27c18e8Smrg		  absdir=`cd "$dir" && pwd`
7051c27c18e8Smrg		  if test -z "$absdir"; then
70520eb1301bSmrg		    func_warning "cannot determine absolute directory name of \`$dir'"
70530eb1301bSmrg		    absdir="$dir"
7054c27c18e8Smrg		  fi
7055c27c18e8Smrg		  ;;
7056c27c18e8Smrg		esac
7057c27c18e8Smrg		if $GREP "^installed=no" $deplib > /dev/null; then
7058c27c18e8Smrg		case $host in
7059c27c18e8Smrg		*-*-darwin*)
7060c27c18e8Smrg		  depdepl=
70610eb1301bSmrg		  eval deplibrary_names=`${SED} -n -e 's/^library_names=\(.*\)$/\1/p' $deplib`
70620eb1301bSmrg		  if test -n "$deplibrary_names" ; then
70630eb1301bSmrg		    for tmp in $deplibrary_names ; do
7064c27c18e8Smrg		      depdepl=$tmp
7065c27c18e8Smrg		    done
70660eb1301bSmrg		    if test -f "$absdir/$objdir/$depdepl" ; then
70670eb1301bSmrg		      depdepl="$absdir/$objdir/$depdepl"
70680eb1301bSmrg		      darwin_install_name=`${OTOOL} -L $depdepl | awk '{if (NR == 2) {print $1;exit}}'`
7069c27c18e8Smrg                      if test -z "$darwin_install_name"; then
70700eb1301bSmrg                          darwin_install_name=`${OTOOL64} -L $depdepl  | awk '{if (NR == 2) {print $1;exit}}'`
7071c27c18e8Smrg                      fi
70720eb1301bSmrg		      func_append compiler_flags " ${wl}-dylib_file ${wl}${darwin_install_name}:${depdepl}"
70730eb1301bSmrg		      func_append linker_flags " -dylib_file ${darwin_install_name}:${depdepl}"
7074c27c18e8Smrg		      path=
7075c27c18e8Smrg		    fi
7076c27c18e8Smrg		  fi
7077c27c18e8Smrg		  ;;
7078c27c18e8Smrg		*)
70790eb1301bSmrg		  path="-L$absdir/$objdir"
7080c27c18e8Smrg		  ;;
7081c27c18e8Smrg		esac
7082c27c18e8Smrg		else
70830eb1301bSmrg		  eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $deplib`
7084c27c18e8Smrg		  test -z "$libdir" && \
70850eb1301bSmrg		    func_fatal_error "\`$deplib' is not a valid libtool archive"
7086c27c18e8Smrg		  test "$absdir" != "$libdir" && \
70870eb1301bSmrg		    func_warning "\`$deplib' seems to be moved"
7088c27c18e8Smrg
70890eb1301bSmrg		  path="-L$absdir"
7090c27c18e8Smrg		fi
7091c27c18e8Smrg		;;
7092c27c18e8Smrg	      esac
7093c27c18e8Smrg	      case " $deplibs " in
7094c27c18e8Smrg	      *" $path "*) ;;
7095c27c18e8Smrg	      *) deplibs="$path $deplibs" ;;
7096c27c18e8Smrg	      esac
7097c27c18e8Smrg	    done
7098c27c18e8Smrg	  fi # link_all_deplibs != no
7099c27c18e8Smrg	fi # linkmode = lib
7100c27c18e8Smrg      done # for deplib in $libs
71010eb1301bSmrg      if test "$pass" = link; then
71020eb1301bSmrg	if test "$linkmode" = "prog"; then
7103c27c18e8Smrg	  compile_deplibs="$new_inherited_linker_flags $compile_deplibs"
7104c27c18e8Smrg	  finalize_deplibs="$new_inherited_linker_flags $finalize_deplibs"
7105c27c18e8Smrg	else
710637eb1ca1Smrg	  compiler_flags="$compiler_flags "`$ECHO " $new_inherited_linker_flags" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'`
7107c27c18e8Smrg	fi
7108c27c18e8Smrg      fi
71090eb1301bSmrg      dependency_libs="$newdependency_libs"
71100eb1301bSmrg      if test "$pass" = dlpreopen; then
7111c27c18e8Smrg	# Link the dlpreopened libraries before other libraries
7112c27c18e8Smrg	for deplib in $save_deplibs; do
7113c27c18e8Smrg	  deplibs="$deplib $deplibs"
7114c27c18e8Smrg	done
7115c27c18e8Smrg      fi
71160eb1301bSmrg      if test "$pass" != dlopen; then
71170eb1301bSmrg	if test "$pass" != conv; then
7118c27c18e8Smrg	  # Make sure lib_search_path contains only unique directories.
7119c27c18e8Smrg	  lib_search_path=
7120c27c18e8Smrg	  for dir in $newlib_search_path; do
7121c27c18e8Smrg	    case "$lib_search_path " in
7122c27c18e8Smrg	    *" $dir "*) ;;
7123b789ec8aSmrg	    *) func_append lib_search_path " $dir" ;;
7124c27c18e8Smrg	    esac
7125c27c18e8Smrg	  done
7126c27c18e8Smrg	  newlib_search_path=
71270eb1301bSmrg	fi
7128c27c18e8Smrg
71290eb1301bSmrg	if test "$linkmode,$pass" != "prog,link"; then
71300eb1301bSmrg	  vars="deplibs"
713144584a44Smrg	else
71320eb1301bSmrg	  vars="compile_deplibs finalize_deplibs"
7133c27c18e8Smrg	fi
7134c27c18e8Smrg	for var in $vars dependency_libs; do
7135c27c18e8Smrg	  # Add libraries to $var in reverse order
7136c27c18e8Smrg	  eval tmp_libs=\"\$$var\"
7137c27c18e8Smrg	  new_libs=
7138c27c18e8Smrg	  for deplib in $tmp_libs; do
7139c27c18e8Smrg	    # FIXME: Pedantically, this is the right thing to do, so
7140c27c18e8Smrg	    #        that some nasty dependency loop isn't accidentally
7141c27c18e8Smrg	    #        broken:
7142c27c18e8Smrg	    #new_libs="$deplib $new_libs"
7143c27c18e8Smrg	    # Pragmatically, this seems to cause very few problems in
7144c27c18e8Smrg	    # practice:
7145c27c18e8Smrg	    case $deplib in
7146c27c18e8Smrg	    -L*) new_libs="$deplib $new_libs" ;;
7147c27c18e8Smrg	    -R*) ;;
7148c27c18e8Smrg	    *)
7149c27c18e8Smrg	      # And here is the reason: when a library appears more
7150c27c18e8Smrg	      # than once as an explicit dependence of a library, or
7151c27c18e8Smrg	      # is implicitly linked in more than once by the
7152c27c18e8Smrg	      # compiler, it is considered special, and multiple
7153c27c18e8Smrg	      # occurrences thereof are not removed.  Compare this
7154c27c18e8Smrg	      # with having the same library being listed as a
7155c27c18e8Smrg	      # dependency of multiple other libraries: in this case,
7156c27c18e8Smrg	      # we know (pedantically, we assume) the library does not
7157c27c18e8Smrg	      # need to be listed more than once, so we keep only the
7158c27c18e8Smrg	      # last copy.  This is not always right, but it is rare
7159c27c18e8Smrg	      # enough that we require users that really mean to play
7160c27c18e8Smrg	      # such unportable linking tricks to link the library
7161c27c18e8Smrg	      # using -Wl,-lname, so that libtool does not consider it
7162c27c18e8Smrg	      # for duplicate removal.
7163c27c18e8Smrg	      case " $specialdeplibs " in
7164c27c18e8Smrg	      *" $deplib "*) new_libs="$deplib $new_libs" ;;
7165c27c18e8Smrg	      *)
7166c27c18e8Smrg		case " $new_libs " in
7167c27c18e8Smrg		*" $deplib "*) ;;
7168c27c18e8Smrg		*) new_libs="$deplib $new_libs" ;;
7169c27c18e8Smrg		esac
7170c27c18e8Smrg		;;
7171c27c18e8Smrg	      esac
7172c27c18e8Smrg	      ;;
7173c27c18e8Smrg	    esac
7174c27c18e8Smrg	  done
7175c27c18e8Smrg	  tmp_libs=
7176c27c18e8Smrg	  for deplib in $new_libs; do
7177c27c18e8Smrg	    case $deplib in
7178c27c18e8Smrg	    -L*)
7179c27c18e8Smrg	      case " $tmp_libs " in
7180c27c18e8Smrg	      *" $deplib "*) ;;
7181b789ec8aSmrg	      *) func_append tmp_libs " $deplib" ;;
7182c27c18e8Smrg	      esac
7183c27c18e8Smrg	      ;;
7184b789ec8aSmrg	    *) func_append tmp_libs " $deplib" ;;
7185c27c18e8Smrg	    esac
7186c27c18e8Smrg	  done
7187c27c18e8Smrg	  eval $var=\"$tmp_libs\"
7188c27c18e8Smrg	done # for var
7189c27c18e8Smrg      fi
7190c27c18e8Smrg      # Last step: remove runtime libs from dependency_libs
7191c27c18e8Smrg      # (they stay in deplibs)
7192c27c18e8Smrg      tmp_libs=
71930eb1301bSmrg      for i in $dependency_libs ; do
7194c27c18e8Smrg	case " $predeps $postdeps $compiler_lib_search_path " in
7195c27c18e8Smrg	*" $i "*)
71960eb1301bSmrg	  i=""
7197c27c18e8Smrg	  ;;
7198c27c18e8Smrg	esac
71990eb1301bSmrg	if test -n "$i" ; then
7200b789ec8aSmrg	  func_append tmp_libs " $i"
7201c27c18e8Smrg	fi
7202c27c18e8Smrg      done
7203c27c18e8Smrg      dependency_libs=$tmp_libs
7204c27c18e8Smrg    done # for pass
72050eb1301bSmrg    if test "$linkmode" = prog; then
72060eb1301bSmrg      dlfiles="$newdlfiles"
7207c27c18e8Smrg    fi
72080eb1301bSmrg    if test "$linkmode" = prog || test "$linkmode" = lib; then
72090eb1301bSmrg      dlprefiles="$newdlprefiles"
7210c27c18e8Smrg    fi
7211c27c18e8Smrg
7212c27c18e8Smrg    case $linkmode in
7213c27c18e8Smrg    oldlib)
72140eb1301bSmrg      if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then
72150eb1301bSmrg	func_warning "\`-dlopen' is ignored for archives"
7216c27c18e8Smrg      fi
7217c27c18e8Smrg
7218c27c18e8Smrg      case " $deplibs" in
7219c27c18e8Smrg      *\ -l* | *\ -L*)
72200eb1301bSmrg	func_warning "\`-l' and \`-L' are ignored for archives" ;;
7221c27c18e8Smrg      esac
7222c27c18e8Smrg
7223c27c18e8Smrg      test -n "$rpath" && \
72240eb1301bSmrg	func_warning "\`-rpath' is ignored for archives"
7225c27c18e8Smrg
7226c27c18e8Smrg      test -n "$xrpath" && \
72270eb1301bSmrg	func_warning "\`-R' is ignored for archives"
7228c27c18e8Smrg
7229c27c18e8Smrg      test -n "$vinfo" && \
72300eb1301bSmrg	func_warning "\`-version-info/-version-number' is ignored for archives"
7231c27c18e8Smrg
7232c27c18e8Smrg      test -n "$release" && \
72330eb1301bSmrg	func_warning "\`-release' is ignored for archives"
7234c27c18e8Smrg
7235c27c18e8Smrg      test -n "$export_symbols$export_symbols_regex" && \
72360eb1301bSmrg	func_warning "\`-export-symbols' is ignored for archives"
7237c27c18e8Smrg
7238c27c18e8Smrg      # Now set the variables for building old libraries.
7239c27c18e8Smrg      build_libtool_libs=no
72400eb1301bSmrg      oldlibs="$output"
7241b789ec8aSmrg      func_append objs "$old_deplibs"
7242c27c18e8Smrg      ;;
7243c27c18e8Smrg
7244c27c18e8Smrg    lib)
72450eb1301bSmrg      # Make sure we only generate libraries of the form `libNAME.la'.
7246c27c18e8Smrg      case $outputname in
7247c27c18e8Smrg      lib*)
7248c27c18e8Smrg	func_stripname 'lib' '.la' "$outputname"
7249c27c18e8Smrg	name=$func_stripname_result
7250c27c18e8Smrg	eval shared_ext=\"$shrext_cmds\"
7251c27c18e8Smrg	eval libname=\"$libname_spec\"
7252c27c18e8Smrg	;;
7253c27c18e8Smrg      *)
72540eb1301bSmrg	test "$module" = no && \
72550eb1301bSmrg	  func_fatal_help "libtool library \`$output' must begin with \`lib'"
7256c27c18e8Smrg
72570eb1301bSmrg	if test "$need_lib_prefix" != no; then
7258c27c18e8Smrg	  # Add the "lib" prefix for modules if required
7259c27c18e8Smrg	  func_stripname '' '.la' "$outputname"
7260c27c18e8Smrg	  name=$func_stripname_result
7261c27c18e8Smrg	  eval shared_ext=\"$shrext_cmds\"
7262c27c18e8Smrg	  eval libname=\"$libname_spec\"
7263c27c18e8Smrg	else
7264c27c18e8Smrg	  func_stripname '' '.la' "$outputname"
7265c27c18e8Smrg	  libname=$func_stripname_result
7266c27c18e8Smrg	fi
7267c27c18e8Smrg	;;
7268c27c18e8Smrg      esac
7269c27c18e8Smrg
7270c27c18e8Smrg      if test -n "$objs"; then
72710eb1301bSmrg	if test "$deplibs_check_method" != pass_all; then
72720eb1301bSmrg	  func_fatal_error "cannot build libtool library \`$output' from non-libtool objects on this host:$objs"
7273c27c18e8Smrg	else
727437eb1ca1Smrg	  echo
7275c27c18e8Smrg	  $ECHO "*** Warning: Linking the shared library $output against the non-libtool"
7276c27c18e8Smrg	  $ECHO "*** objects $objs is not portable!"
7277b789ec8aSmrg	  func_append libobjs " $objs"
7278c27c18e8Smrg	fi
7279c27c18e8Smrg      fi
7280c27c18e8Smrg
72810eb1301bSmrg      test "$dlself" != no && \
72820eb1301bSmrg	func_warning "\`-dlopen self' is ignored for libtool libraries"
7283c27c18e8Smrg
7284c27c18e8Smrg      set dummy $rpath
7285c27c18e8Smrg      shift
72860eb1301bSmrg      test "$#" -gt 1 && \
72870eb1301bSmrg	func_warning "ignoring multiple \`-rpath's for a libtool library"
7288c27c18e8Smrg
72890eb1301bSmrg      install_libdir="$1"
7290c27c18e8Smrg
7291c27c18e8Smrg      oldlibs=
7292c27c18e8Smrg      if test -z "$rpath"; then
72930eb1301bSmrg	if test "$build_libtool_libs" = yes; then
7294c27c18e8Smrg	  # Building a libtool convenience library.
72950eb1301bSmrg	  # Some compilers have problems with a `.al' extension so
7296c27c18e8Smrg	  # convenience libraries should have the same extension an
7297c27c18e8Smrg	  # archive normally would.
7298c27c18e8Smrg	  oldlibs="$output_objdir/$libname.$libext $oldlibs"
7299c27c18e8Smrg	  build_libtool_libs=convenience
7300c27c18e8Smrg	  build_old_libs=yes
7301c27c18e8Smrg	fi
7302c27c18e8Smrg
7303c27c18e8Smrg	test -n "$vinfo" && \
73040eb1301bSmrg	  func_warning "\`-version-info/-version-number' is ignored for convenience libraries"
7305c27c18e8Smrg
7306c27c18e8Smrg	test -n "$release" && \
73070eb1301bSmrg	  func_warning "\`-release' is ignored for convenience libraries"
7308c27c18e8Smrg      else
7309c27c18e8Smrg
7310c27c18e8Smrg	# Parse the version information argument.
73110eb1301bSmrg	save_ifs="$IFS"; IFS=':'
7312c27c18e8Smrg	set dummy $vinfo 0 0 0
7313c27c18e8Smrg	shift
73140eb1301bSmrg	IFS="$save_ifs"
7315c27c18e8Smrg
7316c27c18e8Smrg	test -n "$7" && \
73170eb1301bSmrg	  func_fatal_help "too many parameters to \`-version-info'"
7318c27c18e8Smrg
7319c27c18e8Smrg	# convert absolute version numbers to libtool ages
7320c27c18e8Smrg	# this retains compatibility with .la files and attempts
7321c27c18e8Smrg	# to make the code below a bit more comprehensible
7322c27c18e8Smrg
7323c27c18e8Smrg	case $vinfo_number in
7324c27c18e8Smrg	yes)
73250eb1301bSmrg	  number_major="$1"
73260eb1301bSmrg	  number_minor="$2"
73270eb1301bSmrg	  number_revision="$3"
7328c27c18e8Smrg	  #
7329c27c18e8Smrg	  # There are really only two kinds -- those that
7330c27c18e8Smrg	  # use the current revision as the major version
7331c27c18e8Smrg	  # and those that subtract age and use age as
7332c27c18e8Smrg	  # a minor version.  But, then there is irix
73330eb1301bSmrg	  # which has an extra 1 added just for fun
7334c27c18e8Smrg	  #
7335c27c18e8Smrg	  case $version_type in
7336f1ee322dSmrg	  # correct linux to gnu/linux during the next big refactor
73370eb1301bSmrg	  darwin|linux|osf|windows|none)
7338c27c18e8Smrg	    func_arith $number_major + $number_minor
7339c27c18e8Smrg	    current=$func_arith_result
73400eb1301bSmrg	    age="$number_minor"
73410eb1301bSmrg	    revision="$number_revision"
7342c27c18e8Smrg	    ;;
73430eb1301bSmrg	  freebsd-aout|freebsd-elf|qnx|sunos)
73440eb1301bSmrg	    current="$number_major"
73450eb1301bSmrg	    revision="$number_minor"
73460eb1301bSmrg	    age="0"
7347c27c18e8Smrg	    ;;
7348c27c18e8Smrg	  irix|nonstopux)
7349c27c18e8Smrg	    func_arith $number_major + $number_minor
7350c27c18e8Smrg	    current=$func_arith_result
73510eb1301bSmrg	    age="$number_minor"
73520eb1301bSmrg	    revision="$number_minor"
7353c27c18e8Smrg	    lt_irix_increment=no
7354c27c18e8Smrg	    ;;
73550eb1301bSmrg	  *)
73560eb1301bSmrg	    func_fatal_configuration "$modename: unknown library version type \`$version_type'"
73570eb1301bSmrg	    ;;
7358c27c18e8Smrg	  esac
7359c27c18e8Smrg	  ;;
7360c27c18e8Smrg	no)
73610eb1301bSmrg	  current="$1"
73620eb1301bSmrg	  revision="$2"
73630eb1301bSmrg	  age="$3"
7364c27c18e8Smrg	  ;;
7365c27c18e8Smrg	esac
7366c27c18e8Smrg
7367c27c18e8Smrg	# Check that each of the things are valid numbers.
7368c27c18e8Smrg	case $current in
7369c27c18e8Smrg	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]) ;;
7370c27c18e8Smrg	*)
73710eb1301bSmrg	  func_error "CURRENT \`$current' must be a nonnegative integer"
73720eb1301bSmrg	  func_fatal_error "\`$vinfo' is not valid version information"
7373c27c18e8Smrg	  ;;
7374c27c18e8Smrg	esac
7375c27c18e8Smrg
7376c27c18e8Smrg	case $revision in
7377c27c18e8Smrg	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]) ;;
7378c27c18e8Smrg	*)
73790eb1301bSmrg	  func_error "REVISION \`$revision' must be a nonnegative integer"
73800eb1301bSmrg	  func_fatal_error "\`$vinfo' is not valid version information"
7381c27c18e8Smrg	  ;;
7382c27c18e8Smrg	esac
7383c27c18e8Smrg
7384c27c18e8Smrg	case $age in
7385c27c18e8Smrg	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]) ;;
7386c27c18e8Smrg	*)
73870eb1301bSmrg	  func_error "AGE \`$age' must be a nonnegative integer"
73880eb1301bSmrg	  func_fatal_error "\`$vinfo' is not valid version information"
7389c27c18e8Smrg	  ;;
7390c27c18e8Smrg	esac
7391c27c18e8Smrg
7392c27c18e8Smrg	if test "$age" -gt "$current"; then
73930eb1301bSmrg	  func_error "AGE \`$age' is greater than the current interface number \`$current'"
73940eb1301bSmrg	  func_fatal_error "\`$vinfo' is not valid version information"
7395c27c18e8Smrg	fi
7396c27c18e8Smrg
7397c27c18e8Smrg	# Calculate the version variables.
7398c27c18e8Smrg	major=
7399c27c18e8Smrg	versuffix=
7400c27c18e8Smrg	verstring=
7401c27c18e8Smrg	case $version_type in
7402c27c18e8Smrg	none) ;;
7403c27c18e8Smrg
7404c27c18e8Smrg	darwin)
7405c27c18e8Smrg	  # Like Linux, but with the current version available in
7406c27c18e8Smrg	  # verstring for coding it into the library header
7407c27c18e8Smrg	  func_arith $current - $age
7408c27c18e8Smrg	  major=.$func_arith_result
74090eb1301bSmrg	  versuffix="$major.$age.$revision"
7410c27c18e8Smrg	  # Darwin ld doesn't like 0 for these options...
7411c27c18e8Smrg	  func_arith $current + 1
7412c27c18e8Smrg	  minor_current=$func_arith_result
74130eb1301bSmrg	  xlcverstring="${wl}-compatibility_version ${wl}$minor_current ${wl}-current_version ${wl}$minor_current.$revision"
7414c27c18e8Smrg	  verstring="-compatibility_version $minor_current -current_version $minor_current.$revision"
7415c27c18e8Smrg	  ;;
7416c27c18e8Smrg
7417c27c18e8Smrg	freebsd-aout)
74180eb1301bSmrg	  major=".$current"
74190eb1301bSmrg	  versuffix=".$current.$revision";
7420c27c18e8Smrg	  ;;
7421c27c18e8Smrg
7422c27c18e8Smrg	freebsd-elf)
74230eb1301bSmrg	  major=".$current"
74240eb1301bSmrg	  versuffix=".$current"
7425c27c18e8Smrg	  ;;
7426c27c18e8Smrg
7427c27c18e8Smrg	irix | nonstopux)
74280eb1301bSmrg	  if test "X$lt_irix_increment" = "Xno"; then
7429c27c18e8Smrg	    func_arith $current - $age
7430c27c18e8Smrg	  else
7431c27c18e8Smrg	    func_arith $current - $age + 1
7432c27c18e8Smrg	  fi
7433c27c18e8Smrg	  major=$func_arith_result
7434c27c18e8Smrg
7435c27c18e8Smrg	  case $version_type in
7436c27c18e8Smrg	    nonstopux) verstring_prefix=nonstopux ;;
7437c27c18e8Smrg	    *)         verstring_prefix=sgi ;;
7438c27c18e8Smrg	  esac
74390eb1301bSmrg	  verstring="$verstring_prefix$major.$revision"
7440c27c18e8Smrg
7441c27c18e8Smrg	  # Add in all the interfaces that we are compatible with.
7442c27c18e8Smrg	  loop=$revision
74430eb1301bSmrg	  while test "$loop" -ne 0; do
7444c27c18e8Smrg	    func_arith $revision - $loop
7445c27c18e8Smrg	    iface=$func_arith_result
7446c27c18e8Smrg	    func_arith $loop - 1
7447c27c18e8Smrg	    loop=$func_arith_result
74480eb1301bSmrg	    verstring="$verstring_prefix$major.$iface:$verstring"
7449c27c18e8Smrg	  done
7450c27c18e8Smrg
74510eb1301bSmrg	  # Before this point, $major must not contain `.'.
7452c27c18e8Smrg	  major=.$major
74530eb1301bSmrg	  versuffix="$major.$revision"
7454c27c18e8Smrg	  ;;
7455c27c18e8Smrg
7456f1ee322dSmrg	linux) # correct to gnu/linux during the next big refactor
7457c27c18e8Smrg	  func_arith $current - $age
7458c27c18e8Smrg	  major=.$func_arith_result
74590eb1301bSmrg	  versuffix="$major.$age.$revision"
7460c27c18e8Smrg	  ;;
7461c27c18e8Smrg
7462c27c18e8Smrg	osf)
7463c27c18e8Smrg	  func_arith $current - $age
7464c27c18e8Smrg	  major=.$func_arith_result
74650eb1301bSmrg	  versuffix=".$current.$age.$revision"
74660eb1301bSmrg	  verstring="$current.$age.$revision"
7467c27c18e8Smrg
7468c27c18e8Smrg	  # Add in all the interfaces that we are compatible with.
7469c27c18e8Smrg	  loop=$age
74700eb1301bSmrg	  while test "$loop" -ne 0; do
7471c27c18e8Smrg	    func_arith $current - $loop
7472c27c18e8Smrg	    iface=$func_arith_result
7473c27c18e8Smrg	    func_arith $loop - 1
7474c27c18e8Smrg	    loop=$func_arith_result
74750eb1301bSmrg	    verstring="$verstring:${iface}.0"
7476c27c18e8Smrg	  done
7477c27c18e8Smrg
7478c27c18e8Smrg	  # Make executables depend on our current version.
74790eb1301bSmrg	  func_append verstring ":${current}.0"
7480c27c18e8Smrg	  ;;
7481c27c18e8Smrg
7482c27c18e8Smrg	qnx)
74830eb1301bSmrg	  major=".$current"
74840eb1301bSmrg	  versuffix=".$current"
7485c27c18e8Smrg	  ;;
7486c27c18e8Smrg
7487c27c18e8Smrg	sunos)
74880eb1301bSmrg	  major=".$current"
74890eb1301bSmrg	  versuffix=".$current.$revision"
7490c27c18e8Smrg	  ;;
7491c27c18e8Smrg
7492c27c18e8Smrg	windows)
7493c27c18e8Smrg	  # Use '-' rather than '.', since we only want one
74940eb1301bSmrg	  # extension on DOS 8.3 filesystems.
7495c27c18e8Smrg	  func_arith $current - $age
7496c27c18e8Smrg	  major=$func_arith_result
74970eb1301bSmrg	  versuffix="-$major"
7498c27c18e8Smrg	  ;;
7499c27c18e8Smrg
7500c27c18e8Smrg	*)
75010eb1301bSmrg	  func_fatal_configuration "unknown library version type \`$version_type'"
7502c27c18e8Smrg	  ;;
7503c27c18e8Smrg	esac
7504c27c18e8Smrg
7505c27c18e8Smrg	# Clear the version info if we defaulted, and they specified a release.
7506c27c18e8Smrg	if test -z "$vinfo" && test -n "$release"; then
7507c27c18e8Smrg	  major=
7508c27c18e8Smrg	  case $version_type in
7509c27c18e8Smrg	  darwin)
7510c27c18e8Smrg	    # we can't check for "0.0" in archive_cmds due to quoting
7511c27c18e8Smrg	    # problems, so we reset it completely
7512c27c18e8Smrg	    verstring=
7513c27c18e8Smrg	    ;;
7514c27c18e8Smrg	  *)
75150eb1301bSmrg	    verstring="0.0"
7516c27c18e8Smrg	    ;;
7517c27c18e8Smrg	  esac
75180eb1301bSmrg	  if test "$need_version" = no; then
7519c27c18e8Smrg	    versuffix=
7520c27c18e8Smrg	  else
75210eb1301bSmrg	    versuffix=".0.0"
7522c27c18e8Smrg	  fi
7523c27c18e8Smrg	fi
7524c27c18e8Smrg
7525c27c18e8Smrg	# Remove version info from name if versioning should be avoided
75260eb1301bSmrg	if test "$avoid_version" = yes && test "$need_version" = no; then
7527c27c18e8Smrg	  major=
7528c27c18e8Smrg	  versuffix=
75290eb1301bSmrg	  verstring=""
7530c27c18e8Smrg	fi
7531c27c18e8Smrg
7532c27c18e8Smrg	# Check to see if the archive will have undefined symbols.
75330eb1301bSmrg	if test "$allow_undefined" = yes; then
75340eb1301bSmrg	  if test "$allow_undefined_flag" = unsupported; then
75350eb1301bSmrg	    func_warning "undefined symbols not allowed in $host shared libraries"
75360eb1301bSmrg	    build_libtool_libs=no
75370eb1301bSmrg	    build_old_libs=yes
7538c27c18e8Smrg	  fi
7539c27c18e8Smrg	else
7540c27c18e8Smrg	  # Don't allow undefined symbols.
75410eb1301bSmrg	  allow_undefined_flag="$no_undefined_flag"
7542c27c18e8Smrg	fi
7543c27c18e8Smrg
7544c27c18e8Smrg      fi
7545c27c18e8Smrg
75460eb1301bSmrg      func_generate_dlsyms "$libname" "$libname" "yes"
7547b789ec8aSmrg      func_append libobjs " $symfileobj"
75480eb1301bSmrg      test "X$libobjs" = "X " && libobjs=
7549c27c18e8Smrg
75500eb1301bSmrg      if test "$opt_mode" != relink; then
7551c27c18e8Smrg	# Remove our outputs, but don't remove object files since they
7552c27c18e8Smrg	# may have been created when compiling PIC objects.
7553c27c18e8Smrg	removelist=
7554c27c18e8Smrg	tempremovelist=`$ECHO "$output_objdir/*"`
7555c27c18e8Smrg	for p in $tempremovelist; do
7556c27c18e8Smrg	  case $p in
7557c27c18e8Smrg	    *.$objext | *.gcno)
7558c27c18e8Smrg	       ;;
75590eb1301bSmrg	    $output_objdir/$outputname | $output_objdir/$libname.* | $output_objdir/${libname}${release}.*)
75600eb1301bSmrg	       if test "X$precious_files_regex" != "X"; then
7561c27c18e8Smrg		 if $ECHO "$p" | $EGREP -e "$precious_files_regex" >/dev/null 2>&1
7562c27c18e8Smrg		 then
7563c27c18e8Smrg		   continue
7564c27c18e8Smrg		 fi
7565c27c18e8Smrg	       fi
7566b789ec8aSmrg	       func_append removelist " $p"
7567c27c18e8Smrg	       ;;
7568c27c18e8Smrg	    *) ;;
7569c27c18e8Smrg	  esac
7570c27c18e8Smrg	done
7571c27c18e8Smrg	test -n "$removelist" && \
7572c27c18e8Smrg	  func_show_eval "${RM}r \$removelist"
7573c27c18e8Smrg      fi
7574c27c18e8Smrg
7575c27c18e8Smrg      # Now set the variables for building old libraries.
75760eb1301bSmrg      if test "$build_old_libs" = yes && test "$build_libtool_libs" != convenience ; then
7577b789ec8aSmrg	func_append oldlibs " $output_objdir/$libname.$libext"
7578c27c18e8Smrg
7579c27c18e8Smrg	# Transform .lo files to .o files.
75800eb1301bSmrg	oldobjs="$objs "`$ECHO "$libobjs" | $SP2NL | $SED "/\.${libext}$/d; $lo2o" | $NL2SP`
7581c27c18e8Smrg      fi
7582c27c18e8Smrg
7583c27c18e8Smrg      # Eliminate all temporary directories.
7584c27c18e8Smrg      #for path in $notinst_path; do
758537eb1ca1Smrg      #	lib_search_path=`$ECHO "$lib_search_path " | $SED "s% $path % %g"`
758637eb1ca1Smrg      #	deplibs=`$ECHO "$deplibs " | $SED "s% -L$path % %g"`
758737eb1ca1Smrg      #	dependency_libs=`$ECHO "$dependency_libs " | $SED "s% -L$path % %g"`
7588c27c18e8Smrg      #done
7589c27c18e8Smrg
7590c27c18e8Smrg      if test -n "$xrpath"; then
7591c27c18e8Smrg	# If the user specified any rpath flags, then add them.
7592c27c18e8Smrg	temp_xrpath=
7593c27c18e8Smrg	for libdir in $xrpath; do
7594b789ec8aSmrg	  func_replace_sysroot "$libdir"
7595b789ec8aSmrg	  func_append temp_xrpath " -R$func_replace_sysroot_result"
7596c27c18e8Smrg	  case "$finalize_rpath " in
7597c27c18e8Smrg	  *" $libdir "*) ;;
7598b789ec8aSmrg	  *) func_append finalize_rpath " $libdir" ;;
7599c27c18e8Smrg	  esac
7600c27c18e8Smrg	done
76010eb1301bSmrg	if test "$hardcode_into_libs" != yes || test "$build_old_libs" = yes; then
7602c27c18e8Smrg	  dependency_libs="$temp_xrpath $dependency_libs"
7603c27c18e8Smrg	fi
7604c27c18e8Smrg      fi
7605c27c18e8Smrg
7606c27c18e8Smrg      # Make sure dlfiles contains only unique files that won't be dlpreopened
76070eb1301bSmrg      old_dlfiles="$dlfiles"
7608c27c18e8Smrg      dlfiles=
7609c27c18e8Smrg      for lib in $old_dlfiles; do
7610c27c18e8Smrg	case " $dlprefiles $dlfiles " in
7611c27c18e8Smrg	*" $lib "*) ;;
7612b789ec8aSmrg	*) func_append dlfiles " $lib" ;;
7613c27c18e8Smrg	esac
7614c27c18e8Smrg      done
7615c27c18e8Smrg
7616c27c18e8Smrg      # Make sure dlprefiles contains only unique files
76170eb1301bSmrg      old_dlprefiles="$dlprefiles"
7618c27c18e8Smrg      dlprefiles=
7619c27c18e8Smrg      for lib in $old_dlprefiles; do
7620c27c18e8Smrg	case "$dlprefiles " in
7621c27c18e8Smrg	*" $lib "*) ;;
7622b789ec8aSmrg	*) func_append dlprefiles " $lib" ;;
7623c27c18e8Smrg	esac
7624c27c18e8Smrg      done
7625c27c18e8Smrg
76260eb1301bSmrg      if test "$build_libtool_libs" = yes; then
7627c27c18e8Smrg	if test -n "$rpath"; then
7628c27c18e8Smrg	  case $host in
762937eb1ca1Smrg	  *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-*-beos* | *-cegcc* | *-*-haiku*)
7630c27c18e8Smrg	    # these systems don't actually have a c library (as such)!
7631c27c18e8Smrg	    ;;
7632c27c18e8Smrg	  *-*-rhapsody* | *-*-darwin1.[012])
7633c27c18e8Smrg	    # Rhapsody C library is in the System framework
7634b789ec8aSmrg	    func_append deplibs " System.ltframework"
7635c27c18e8Smrg	    ;;
7636c27c18e8Smrg	  *-*-netbsd*)
7637c27c18e8Smrg	    # Don't link with libc until the a.out ld.so is fixed.
7638c27c18e8Smrg	    ;;
7639c27c18e8Smrg	  *-*-openbsd* | *-*-freebsd* | *-*-dragonfly*)
7640c27c18e8Smrg	    # Do not include libc due to us having libc/libc_r.
7641c27c18e8Smrg	    ;;
7642c27c18e8Smrg	  *-*-sco3.2v5* | *-*-sco5v6*)
7643c27c18e8Smrg	    # Causes problems with __ctype
7644c27c18e8Smrg	    ;;
7645c27c18e8Smrg	  *-*-sysv4.2uw2* | *-*-sysv5* | *-*-unixware* | *-*-OpenUNIX*)
7646c27c18e8Smrg	    # Compiler inserts libc in the correct place for threads to work
7647c27c18e8Smrg	    ;;
7648c27c18e8Smrg	  *)
7649c27c18e8Smrg	    # Add libc to deplibs on all other systems if necessary.
76500eb1301bSmrg	    if test "$build_libtool_need_lc" = "yes"; then
7651b789ec8aSmrg	      func_append deplibs " -lc"
7652c27c18e8Smrg	    fi
7653c27c18e8Smrg	    ;;
7654c27c18e8Smrg	  esac
7655c27c18e8Smrg	fi
7656c27c18e8Smrg
7657c27c18e8Smrg	# Transform deplibs into only deplibs that can be linked in shared.
7658c27c18e8Smrg	name_save=$name
7659c27c18e8Smrg	libname_save=$libname
7660c27c18e8Smrg	release_save=$release
7661c27c18e8Smrg	versuffix_save=$versuffix
7662c27c18e8Smrg	major_save=$major
7663c27c18e8Smrg	# I'm not sure if I'm treating the release correctly.  I think
7664c27c18e8Smrg	# release should show up in the -l (ie -lgmp5) so we don't want to
7665c27c18e8Smrg	# add it in twice.  Is that correct?
76660eb1301bSmrg	release=""
76670eb1301bSmrg	versuffix=""
76680eb1301bSmrg	major=""
7669c27c18e8Smrg	newdeplibs=
7670c27c18e8Smrg	droppeddeps=no
7671c27c18e8Smrg	case $deplibs_check_method in
7672c27c18e8Smrg	pass_all)
7673c27c18e8Smrg	  # Don't check for shared/static.  Everything works.
7674c27c18e8Smrg	  # This might be a little naive.  We might want to check
7675c27c18e8Smrg	  # whether the library exists or not.  But this is on
7676c27c18e8Smrg	  # osf3 & osf4 and I'm not really sure... Just
7677c27c18e8Smrg	  # implementing what was already the behavior.
7678c27c18e8Smrg	  newdeplibs=$deplibs
7679c27c18e8Smrg	  ;;
7680c27c18e8Smrg	test_compile)
7681c27c18e8Smrg	  # This code stresses the "libraries are programs" paradigm to its
7682c27c18e8Smrg	  # limits. Maybe even breaks it.  We compile a program, linking it
7683c27c18e8Smrg	  # against the deplibs as a proxy for the library.  Then we can check
7684c27c18e8Smrg	  # whether they linked in statically or dynamically with ldd.
7685c27c18e8Smrg	  $opt_dry_run || $RM conftest.c
7686c27c18e8Smrg	  cat > conftest.c <<EOF
7687c27c18e8Smrg	  int main() { return 0; }
7688c27c18e8SmrgEOF
7689c27c18e8Smrg	  $opt_dry_run || $RM conftest
7690c27c18e8Smrg	  if $LTCC $LTCFLAGS -o conftest conftest.c $deplibs; then
7691c27c18e8Smrg	    ldd_output=`ldd conftest`
7692c27c18e8Smrg	    for i in $deplibs; do
7693c27c18e8Smrg	      case $i in
7694c27c18e8Smrg	      -l*)
7695c27c18e8Smrg		func_stripname -l '' "$i"
7696c27c18e8Smrg		name=$func_stripname_result
76970eb1301bSmrg		if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then
7698c27c18e8Smrg		  case " $predeps $postdeps " in
7699c27c18e8Smrg		  *" $i "*)
7700b789ec8aSmrg		    func_append newdeplibs " $i"
77010eb1301bSmrg		    i=""
7702c27c18e8Smrg		    ;;
7703c27c18e8Smrg		  esac
7704c27c18e8Smrg		fi
77050eb1301bSmrg		if test -n "$i" ; then
7706c27c18e8Smrg		  libname=`eval "\\$ECHO \"$libname_spec\""`
7707c27c18e8Smrg		  deplib_matches=`eval "\\$ECHO \"$library_names_spec\""`
7708c27c18e8Smrg		  set dummy $deplib_matches; shift
7709c27c18e8Smrg		  deplib_match=$1
77100eb1301bSmrg		  if test `expr "$ldd_output" : ".*$deplib_match"` -ne 0 ; then
7711b789ec8aSmrg		    func_append newdeplibs " $i"
7712c27c18e8Smrg		  else
7713c27c18e8Smrg		    droppeddeps=yes
771437eb1ca1Smrg		    echo
7715c27c18e8Smrg		    $ECHO "*** Warning: dynamic linker does not accept needed library $i."
771637eb1ca1Smrg		    echo "*** I have the capability to make that library automatically link in when"
771737eb1ca1Smrg		    echo "*** you link to this library.  But I can only do this if you have a"
771837eb1ca1Smrg		    echo "*** shared version of the library, which I believe you do not have"
771937eb1ca1Smrg		    echo "*** because a test_compile did reveal that the linker did not use it for"
772037eb1ca1Smrg		    echo "*** its dynamic dependency list that programs get resolved with at runtime."
7721c27c18e8Smrg		  fi
7722c27c18e8Smrg		fi
7723c27c18e8Smrg		;;
7724c27c18e8Smrg	      *)
7725b789ec8aSmrg		func_append newdeplibs " $i"
7726c27c18e8Smrg		;;
7727c27c18e8Smrg	      esac
7728c27c18e8Smrg	    done
7729c27c18e8Smrg	  else
7730c27c18e8Smrg	    # Error occurred in the first compile.  Let's try to salvage
7731c27c18e8Smrg	    # the situation: Compile a separate program for each library.
7732c27c18e8Smrg	    for i in $deplibs; do
7733c27c18e8Smrg	      case $i in
7734c27c18e8Smrg	      -l*)
7735c27c18e8Smrg		func_stripname -l '' "$i"
7736c27c18e8Smrg		name=$func_stripname_result
7737c27c18e8Smrg		$opt_dry_run || $RM conftest
7738c27c18e8Smrg		if $LTCC $LTCFLAGS -o conftest conftest.c $i; then
7739c27c18e8Smrg		  ldd_output=`ldd conftest`
77400eb1301bSmrg		  if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then
7741c27c18e8Smrg		    case " $predeps $postdeps " in
7742c27c18e8Smrg		    *" $i "*)
7743b789ec8aSmrg		      func_append newdeplibs " $i"
77440eb1301bSmrg		      i=""
7745c27c18e8Smrg		      ;;
7746c27c18e8Smrg		    esac
7747c27c18e8Smrg		  fi
77480eb1301bSmrg		  if test -n "$i" ; then
7749c27c18e8Smrg		    libname=`eval "\\$ECHO \"$libname_spec\""`
7750c27c18e8Smrg		    deplib_matches=`eval "\\$ECHO \"$library_names_spec\""`
7751c27c18e8Smrg		    set dummy $deplib_matches; shift
7752c27c18e8Smrg		    deplib_match=$1
77530eb1301bSmrg		    if test `expr "$ldd_output" : ".*$deplib_match"` -ne 0 ; then
7754b789ec8aSmrg		      func_append newdeplibs " $i"
7755c27c18e8Smrg		    else
7756c27c18e8Smrg		      droppeddeps=yes
775737eb1ca1Smrg		      echo
7758c27c18e8Smrg		      $ECHO "*** Warning: dynamic linker does not accept needed library $i."
775937eb1ca1Smrg		      echo "*** I have the capability to make that library automatically link in when"
776037eb1ca1Smrg		      echo "*** you link to this library.  But I can only do this if you have a"
776137eb1ca1Smrg		      echo "*** shared version of the library, which you do not appear to have"
776237eb1ca1Smrg		      echo "*** because a test_compile did reveal that the linker did not use this one"
776337eb1ca1Smrg		      echo "*** as a dynamic dependency that programs can get resolved with at runtime."
7764c27c18e8Smrg		    fi
7765c27c18e8Smrg		  fi
7766c27c18e8Smrg		else
7767c27c18e8Smrg		  droppeddeps=yes
776837eb1ca1Smrg		  echo
7769c27c18e8Smrg		  $ECHO "*** Warning!  Library $i is needed by this library but I was not able to"
777037eb1ca1Smrg		  echo "*** make it link in!  You will probably need to install it or some"
777137eb1ca1Smrg		  echo "*** library that it depends on before this library will be fully"
777237eb1ca1Smrg		  echo "*** functional.  Installing it before continuing would be even better."
7773c27c18e8Smrg		fi
7774c27c18e8Smrg		;;
7775c27c18e8Smrg	      *)
7776b789ec8aSmrg		func_append newdeplibs " $i"
7777c27c18e8Smrg		;;
7778c27c18e8Smrg	      esac
7779c27c18e8Smrg	    done
7780c27c18e8Smrg	  fi
7781c27c18e8Smrg	  ;;
7782c27c18e8Smrg	file_magic*)
7783c27c18e8Smrg	  set dummy $deplibs_check_method; shift
7784c27c18e8Smrg	  file_magic_regex=`expr "$deplibs_check_method" : "$1 \(.*\)"`
7785c27c18e8Smrg	  for a_deplib in $deplibs; do
7786c27c18e8Smrg	    case $a_deplib in
7787c27c18e8Smrg	    -l*)
7788c27c18e8Smrg	      func_stripname -l '' "$a_deplib"
7789c27c18e8Smrg	      name=$func_stripname_result
77900eb1301bSmrg	      if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then
7791c27c18e8Smrg		case " $predeps $postdeps " in
7792c27c18e8Smrg		*" $a_deplib "*)
7793b789ec8aSmrg		  func_append newdeplibs " $a_deplib"
77940eb1301bSmrg		  a_deplib=""
7795c27c18e8Smrg		  ;;
7796c27c18e8Smrg		esac
7797c27c18e8Smrg	      fi
77980eb1301bSmrg	      if test -n "$a_deplib" ; then
7799c27c18e8Smrg		libname=`eval "\\$ECHO \"$libname_spec\""`
7800b789ec8aSmrg		if test -n "$file_magic_glob"; then
7801b789ec8aSmrg		  libnameglob=`func_echo_all "$libname" | $SED -e $file_magic_glob`
7802b789ec8aSmrg		else
7803b789ec8aSmrg		  libnameglob=$libname
7804b789ec8aSmrg		fi
78050eb1301bSmrg		test "$want_nocaseglob" = yes && nocaseglob=`shopt -p nocaseglob`
7806c27c18e8Smrg		for i in $lib_search_path $sys_lib_search_path $shlib_search_path; do
78070eb1301bSmrg		  if test "$want_nocaseglob" = yes; then
7808b789ec8aSmrg		    shopt -s nocaseglob
7809b789ec8aSmrg		    potential_libs=`ls $i/$libnameglob[.-]* 2>/dev/null`
7810b789ec8aSmrg		    $nocaseglob
7811b789ec8aSmrg		  else
7812b789ec8aSmrg		    potential_libs=`ls $i/$libnameglob[.-]* 2>/dev/null`
7813b789ec8aSmrg		  fi
7814c27c18e8Smrg		  for potent_lib in $potential_libs; do
7815c27c18e8Smrg		      # Follow soft links.
7816c27c18e8Smrg		      if ls -lLd "$potent_lib" 2>/dev/null |
7817c27c18e8Smrg			 $GREP " -> " >/dev/null; then
7818c27c18e8Smrg			continue
7819c27c18e8Smrg		      fi
7820c27c18e8Smrg		      # The statement above tries to avoid entering an
7821c27c18e8Smrg		      # endless loop below, in case of cyclic links.
7822c27c18e8Smrg		      # We might still enter an endless loop, since a link
7823c27c18e8Smrg		      # loop can be closed while we follow links,
7824c27c18e8Smrg		      # but so what?
78250eb1301bSmrg		      potlib="$potent_lib"
7826c27c18e8Smrg		      while test -h "$potlib" 2>/dev/null; do
78270eb1301bSmrg			potliblink=`ls -ld $potlib | ${SED} 's/.* -> //'`
7828c27c18e8Smrg			case $potliblink in
78290eb1301bSmrg			[\\/]* | [A-Za-z]:[\\/]*) potlib="$potliblink";;
78300eb1301bSmrg			*) potlib=`$ECHO "$potlib" | $SED 's,[^/]*$,,'`"$potliblink";;
7831c27c18e8Smrg			esac
7832c27c18e8Smrg		      done
7833c27c18e8Smrg		      if eval $file_magic_cmd \"\$potlib\" 2>/dev/null |
7834c27c18e8Smrg			 $SED -e 10q |
7835c27c18e8Smrg			 $EGREP "$file_magic_regex" > /dev/null; then
7836b789ec8aSmrg			func_append newdeplibs " $a_deplib"
78370eb1301bSmrg			a_deplib=""
7838c27c18e8Smrg			break 2
7839c27c18e8Smrg		      fi
7840c27c18e8Smrg		  done
7841c27c18e8Smrg		done
7842c27c18e8Smrg	      fi
78430eb1301bSmrg	      if test -n "$a_deplib" ; then
7844c27c18e8Smrg		droppeddeps=yes
784537eb1ca1Smrg		echo
7846c27c18e8Smrg		$ECHO "*** Warning: linker path does not have real file for library $a_deplib."
784737eb1ca1Smrg		echo "*** I have the capability to make that library automatically link in when"
784837eb1ca1Smrg		echo "*** you link to this library.  But I can only do this if you have a"
784937eb1ca1Smrg		echo "*** shared version of the library, which you do not appear to have"
785037eb1ca1Smrg		echo "*** because I did check the linker path looking for a file starting"
78510eb1301bSmrg		if test -z "$potlib" ; then
7852c27c18e8Smrg		  $ECHO "*** with $libname but no candidates were found. (...for file magic test)"
7853c27c18e8Smrg		else
7854c27c18e8Smrg		  $ECHO "*** with $libname and none of the candidates passed a file format test"
7855c27c18e8Smrg		  $ECHO "*** using a file magic. Last file checked: $potlib"
7856c27c18e8Smrg		fi
7857c27c18e8Smrg	      fi
7858c27c18e8Smrg	      ;;
7859c27c18e8Smrg	    *)
7860c27c18e8Smrg	      # Add a -L argument.
7861b789ec8aSmrg	      func_append newdeplibs " $a_deplib"
7862c27c18e8Smrg	      ;;
7863c27c18e8Smrg	    esac
7864c27c18e8Smrg	  done # Gone through all deplibs.
7865c27c18e8Smrg	  ;;
7866c27c18e8Smrg	match_pattern*)
7867c27c18e8Smrg	  set dummy $deplibs_check_method; shift
7868c27c18e8Smrg	  match_pattern_regex=`expr "$deplibs_check_method" : "$1 \(.*\)"`
7869c27c18e8Smrg	  for a_deplib in $deplibs; do
7870c27c18e8Smrg	    case $a_deplib in
7871c27c18e8Smrg	    -l*)
7872c27c18e8Smrg	      func_stripname -l '' "$a_deplib"
7873c27c18e8Smrg	      name=$func_stripname_result
78740eb1301bSmrg	      if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then
7875c27c18e8Smrg		case " $predeps $postdeps " in
7876c27c18e8Smrg		*" $a_deplib "*)
7877b789ec8aSmrg		  func_append newdeplibs " $a_deplib"
78780eb1301bSmrg		  a_deplib=""
7879c27c18e8Smrg		  ;;
7880c27c18e8Smrg		esac
7881c27c18e8Smrg	      fi
78820eb1301bSmrg	      if test -n "$a_deplib" ; then
7883c27c18e8Smrg		libname=`eval "\\$ECHO \"$libname_spec\""`
7884c27c18e8Smrg		for i in $lib_search_path $sys_lib_search_path $shlib_search_path; do
7885c27c18e8Smrg		  potential_libs=`ls $i/$libname[.-]* 2>/dev/null`
7886c27c18e8Smrg		  for potent_lib in $potential_libs; do
78870eb1301bSmrg		    potlib="$potent_lib" # see symlink-check above in file_magic test
788837eb1ca1Smrg		    if eval "\$ECHO \"$potent_lib\"" 2>/dev/null | $SED 10q | \
7889c27c18e8Smrg		       $EGREP "$match_pattern_regex" > /dev/null; then
7890b789ec8aSmrg		      func_append newdeplibs " $a_deplib"
78910eb1301bSmrg		      a_deplib=""
7892c27c18e8Smrg		      break 2
7893c27c18e8Smrg		    fi
7894c27c18e8Smrg		  done
7895c27c18e8Smrg		done
7896c27c18e8Smrg	      fi
78970eb1301bSmrg	      if test -n "$a_deplib" ; then
7898c27c18e8Smrg		droppeddeps=yes
789937eb1ca1Smrg		echo
7900c27c18e8Smrg		$ECHO "*** Warning: linker path does not have real file for library $a_deplib."
790137eb1ca1Smrg		echo "*** I have the capability to make that library automatically link in when"
790237eb1ca1Smrg		echo "*** you link to this library.  But I can only do this if you have a"
790337eb1ca1Smrg		echo "*** shared version of the library, which you do not appear to have"
790437eb1ca1Smrg		echo "*** because I did check the linker path looking for a file starting"
79050eb1301bSmrg		if test -z "$potlib" ; then
7906c27c18e8Smrg		  $ECHO "*** with $libname but no candidates were found. (...for regex pattern test)"
7907c27c18e8Smrg		else
7908c27c18e8Smrg		  $ECHO "*** with $libname and none of the candidates passed a file format test"
7909c27c18e8Smrg		  $ECHO "*** using a regex pattern. Last file checked: $potlib"
7910c27c18e8Smrg		fi
7911c27c18e8Smrg	      fi
7912c27c18e8Smrg	      ;;
7913c27c18e8Smrg	    *)
7914c27c18e8Smrg	      # Add a -L argument.
7915b789ec8aSmrg	      func_append newdeplibs " $a_deplib"
7916c27c18e8Smrg	      ;;
7917c27c18e8Smrg	    esac
7918c27c18e8Smrg	  done # Gone through all deplibs.
7919c27c18e8Smrg	  ;;
7920c27c18e8Smrg	none | unknown | *)
79210eb1301bSmrg	  newdeplibs=""
792237eb1ca1Smrg	  tmp_deplibs=`$ECHO " $deplibs" | $SED 's/ -lc$//; s/ -[LR][^ ]*//g'`
79230eb1301bSmrg	  if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then
79240eb1301bSmrg	    for i in $predeps $postdeps ; do
7925c27c18e8Smrg	      # can't use Xsed below, because $i might contain '/'
79260eb1301bSmrg	      tmp_deplibs=`$ECHO " $tmp_deplibs" | $SED "s,$i,,"`
7927c27c18e8Smrg	    done
7928c27c18e8Smrg	  fi
792937eb1ca1Smrg	  case $tmp_deplibs in
793037eb1ca1Smrg	  *[!\	\ ]*)
793137eb1ca1Smrg	    echo
79320eb1301bSmrg	    if test "X$deplibs_check_method" = "Xnone"; then
793337eb1ca1Smrg	      echo "*** Warning: inter-library dependencies are not supported in this platform."
7934c27c18e8Smrg	    else
793537eb1ca1Smrg	      echo "*** Warning: inter-library dependencies are not known to be supported."
7936c27c18e8Smrg	    fi
793737eb1ca1Smrg	    echo "*** All declared inter-library dependencies are being dropped."
7938c27c18e8Smrg	    droppeddeps=yes
793937eb1ca1Smrg	    ;;
794037eb1ca1Smrg	  esac
7941c27c18e8Smrg	  ;;
7942c27c18e8Smrg	esac
7943c27c18e8Smrg	versuffix=$versuffix_save
7944c27c18e8Smrg	major=$major_save
7945c27c18e8Smrg	release=$release_save
7946c27c18e8Smrg	libname=$libname_save
7947c27c18e8Smrg	name=$name_save
7948c27c18e8Smrg
7949c27c18e8Smrg	case $host in
7950c27c18e8Smrg	*-*-rhapsody* | *-*-darwin1.[012])
7951c27c18e8Smrg	  # On Rhapsody replace the C library with the System framework
795237eb1ca1Smrg	  newdeplibs=`$ECHO " $newdeplibs" | $SED 's/ -lc / System.ltframework /'`
7953c27c18e8Smrg	  ;;
7954c27c18e8Smrg	esac
7955c27c18e8Smrg
79560eb1301bSmrg	if test "$droppeddeps" = yes; then
79570eb1301bSmrg	  if test "$module" = yes; then
795837eb1ca1Smrg	    echo
795937eb1ca1Smrg	    echo "*** Warning: libtool could not satisfy all declared inter-library"
7960c27c18e8Smrg	    $ECHO "*** dependencies of module $libname.  Therefore, libtool will create"
796137eb1ca1Smrg	    echo "*** a static module, that should work as long as the dlopening"
796237eb1ca1Smrg	    echo "*** application is linked with the -dlopen flag."
7963c27c18e8Smrg	    if test -z "$global_symbol_pipe"; then
796437eb1ca1Smrg	      echo
796537eb1ca1Smrg	      echo "*** However, this would only work if libtool was able to extract symbol"
79660eb1301bSmrg	      echo "*** lists from a program, using \`nm' or equivalent, but libtool could"
796737eb1ca1Smrg	      echo "*** not find such a program.  So, this module is probably useless."
79680eb1301bSmrg	      echo "*** \`nm' from GNU binutils and a full rebuild may help."
7969c27c18e8Smrg	    fi
79700eb1301bSmrg	    if test "$build_old_libs" = no; then
79710eb1301bSmrg	      oldlibs="$output_objdir/$libname.$libext"
7972c27c18e8Smrg	      build_libtool_libs=module
7973c27c18e8Smrg	      build_old_libs=yes
7974c27c18e8Smrg	    else
7975c27c18e8Smrg	      build_libtool_libs=no
7976c27c18e8Smrg	    fi
7977c27c18e8Smrg	  else
797837eb1ca1Smrg	    echo "*** The inter-library dependencies that have been dropped here will be"
797937eb1ca1Smrg	    echo "*** automatically added whenever a program is linked with this library"
798037eb1ca1Smrg	    echo "*** or is declared to -dlopen it."
7981c27c18e8Smrg
79820eb1301bSmrg	    if test "$allow_undefined" = no; then
798337eb1ca1Smrg	      echo
798437eb1ca1Smrg	      echo "*** Since this library must not contain undefined symbols,"
798537eb1ca1Smrg	      echo "*** because either the platform does not support them or"
798637eb1ca1Smrg	      echo "*** it was explicitly requested with -no-undefined,"
798737eb1ca1Smrg	      echo "*** libtool will only create a static version of it."
79880eb1301bSmrg	      if test "$build_old_libs" = no; then
79890eb1301bSmrg		oldlibs="$output_objdir/$libname.$libext"
7990c27c18e8Smrg		build_libtool_libs=module
7991c27c18e8Smrg		build_old_libs=yes
7992c27c18e8Smrg	      else
7993c27c18e8Smrg		build_libtool_libs=no
7994c27c18e8Smrg	      fi
7995c27c18e8Smrg	    fi
7996c27c18e8Smrg	  fi
7997c27c18e8Smrg	fi
7998c27c18e8Smrg	# Done checking deplibs!
7999c27c18e8Smrg	deplibs=$newdeplibs
8000c27c18e8Smrg      fi
8001c27c18e8Smrg      # Time to change all our "foo.ltframework" stuff back to "-framework foo"
8002c27c18e8Smrg      case $host in
8003c27c18e8Smrg	*-*-darwin*)
800437eb1ca1Smrg	  newdeplibs=`$ECHO " $newdeplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'`
800537eb1ca1Smrg	  new_inherited_linker_flags=`$ECHO " $new_inherited_linker_flags" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'`
800637eb1ca1Smrg	  deplibs=`$ECHO " $deplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'`
8007c27c18e8Smrg	  ;;
8008c27c18e8Smrg      esac
8009c27c18e8Smrg
8010c27c18e8Smrg      # move library search paths that coincide with paths to not yet
8011c27c18e8Smrg      # installed libraries to the beginning of the library search list
8012c27c18e8Smrg      new_libs=
8013c27c18e8Smrg      for path in $notinst_path; do
8014c27c18e8Smrg	case " $new_libs " in
8015c27c18e8Smrg	*" -L$path/$objdir "*) ;;
8016c27c18e8Smrg	*)
8017c27c18e8Smrg	  case " $deplibs " in
8018c27c18e8Smrg	  *" -L$path/$objdir "*)
8019b789ec8aSmrg	    func_append new_libs " -L$path/$objdir" ;;
8020c27c18e8Smrg	  esac
8021c27c18e8Smrg	  ;;
8022c27c18e8Smrg	esac
8023c27c18e8Smrg      done
8024c27c18e8Smrg      for deplib in $deplibs; do
8025c27c18e8Smrg	case $deplib in
8026c27c18e8Smrg	-L*)
8027c27c18e8Smrg	  case " $new_libs " in
8028c27c18e8Smrg	  *" $deplib "*) ;;
8029b789ec8aSmrg	  *) func_append new_libs " $deplib" ;;
8030c27c18e8Smrg	  esac
8031c27c18e8Smrg	  ;;
8032b789ec8aSmrg	*) func_append new_libs " $deplib" ;;
8033c27c18e8Smrg	esac
8034c27c18e8Smrg      done
80350eb1301bSmrg      deplibs="$new_libs"
8036c27c18e8Smrg
8037c27c18e8Smrg      # All the library-specific variables (install_libdir is set above).
8038c27c18e8Smrg      library_names=
8039c27c18e8Smrg      old_library=
8040c27c18e8Smrg      dlname=
8041c27c18e8Smrg
8042c27c18e8Smrg      # Test again, we may have decided not to build it any more
80430eb1301bSmrg      if test "$build_libtool_libs" = yes; then
80440eb1301bSmrg	# Remove ${wl} instances when linking with ld.
8045f1ee322dSmrg	# FIXME: should test the right _cmds variable.
8046f1ee322dSmrg	case $archive_cmds in
8047f1ee322dSmrg	  *\$LD\ *) wl= ;;
8048f1ee322dSmrg        esac
80490eb1301bSmrg	if test "$hardcode_into_libs" = yes; then
8050c27c18e8Smrg	  # Hardcode the library paths
8051c27c18e8Smrg	  hardcode_libdirs=
8052c27c18e8Smrg	  dep_rpath=
80530eb1301bSmrg	  rpath="$finalize_rpath"
80540eb1301bSmrg	  test "$opt_mode" != relink && rpath="$compile_rpath$rpath"
8055c27c18e8Smrg	  for libdir in $rpath; do
8056c27c18e8Smrg	    if test -n "$hardcode_libdir_flag_spec"; then
8057c27c18e8Smrg	      if test -n "$hardcode_libdir_separator"; then
8058b789ec8aSmrg		func_replace_sysroot "$libdir"
8059b789ec8aSmrg		libdir=$func_replace_sysroot_result
8060c27c18e8Smrg		if test -z "$hardcode_libdirs"; then
80610eb1301bSmrg		  hardcode_libdirs="$libdir"
8062c27c18e8Smrg		else
8063c27c18e8Smrg		  # Just accumulate the unique libdirs.
8064c27c18e8Smrg		  case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in
8065c27c18e8Smrg		  *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*)
8066c27c18e8Smrg		    ;;
8067c27c18e8Smrg		  *)
8068b789ec8aSmrg		    func_append hardcode_libdirs "$hardcode_libdir_separator$libdir"
8069c27c18e8Smrg		    ;;
8070c27c18e8Smrg		  esac
8071c27c18e8Smrg		fi
8072c27c18e8Smrg	      else
8073c27c18e8Smrg		eval flag=\"$hardcode_libdir_flag_spec\"
8074b789ec8aSmrg		func_append dep_rpath " $flag"
8075c27c18e8Smrg	      fi
8076c27c18e8Smrg	    elif test -n "$runpath_var"; then
8077c27c18e8Smrg	      case "$perm_rpath " in
8078c27c18e8Smrg	      *" $libdir "*) ;;
8079f1ee322dSmrg	      *) func_append perm_rpath " $libdir" ;;
8080c27c18e8Smrg	      esac
8081c27c18e8Smrg	    fi
8082c27c18e8Smrg	  done
8083c27c18e8Smrg	  # Substitute the hardcoded libdirs into the rpath.
8084c27c18e8Smrg	  if test -n "$hardcode_libdir_separator" &&
8085c27c18e8Smrg	     test -n "$hardcode_libdirs"; then
80860eb1301bSmrg	    libdir="$hardcode_libdirs"
8087f1ee322dSmrg	    eval "dep_rpath=\"$hardcode_libdir_flag_spec\""
8088c27c18e8Smrg	  fi
8089c27c18e8Smrg	  if test -n "$runpath_var" && test -n "$perm_rpath"; then
8090c27c18e8Smrg	    # We should set the runpath_var.
8091c27c18e8Smrg	    rpath=
8092c27c18e8Smrg	    for dir in $perm_rpath; do
8093b789ec8aSmrg	      func_append rpath "$dir:"
8094c27c18e8Smrg	    done
8095c27c18e8Smrg	    eval "$runpath_var='$rpath\$$runpath_var'; export $runpath_var"
8096c27c18e8Smrg	  fi
8097c27c18e8Smrg	  test -n "$dep_rpath" && deplibs="$dep_rpath $deplibs"
8098c27c18e8Smrg	fi
8099c43cc173Smrg
81000eb1301bSmrg	shlibpath="$finalize_shlibpath"
81010eb1301bSmrg	test "$opt_mode" != relink && shlibpath="$compile_shlibpath$shlibpath"
8102c27c18e8Smrg	if test -n "$shlibpath"; then
8103c27c18e8Smrg	  eval "$shlibpath_var='$shlibpath\$$shlibpath_var'; export $shlibpath_var"
8104c27c18e8Smrg	fi
8105c43cc173Smrg
8106c27c18e8Smrg	# Get the real and link names of the library.
8107c27c18e8Smrg	eval shared_ext=\"$shrext_cmds\"
8108c27c18e8Smrg	eval library_names=\"$library_names_spec\"
8109c27c18e8Smrg	set dummy $library_names
8110c27c18e8Smrg	shift
81110eb1301bSmrg	realname="$1"
8112c27c18e8Smrg	shift
8113c43cc173Smrg
8114c27c18e8Smrg	if test -n "$soname_spec"; then
8115c27c18e8Smrg	  eval soname=\"$soname_spec\"
8116c27c18e8Smrg	else
81170eb1301bSmrg	  soname="$realname"
8118c27c18e8Smrg	fi
8119c27c18e8Smrg	if test -z "$dlname"; then
8120c27c18e8Smrg	  dlname=$soname
8121c27c18e8Smrg	fi
8122c43cc173Smrg
81230eb1301bSmrg	lib="$output_objdir/$realname"
8124c27c18e8Smrg	linknames=
8125c27c18e8Smrg	for link
8126c27c18e8Smrg	do
8127b789ec8aSmrg	  func_append linknames " $link"
8128c27c18e8Smrg	done
8129c43cc173Smrg
8130c27c18e8Smrg	# Use standard objects if they are pic
813137eb1ca1Smrg	test -z "$pic_flag" && libobjs=`$ECHO "$libobjs" | $SP2NL | $SED "$lo2o" | $NL2SP`
8132c27c18e8Smrg	test "X$libobjs" = "X " && libobjs=
8133c43cc173Smrg
8134c27c18e8Smrg	delfiles=
8135c27c18e8Smrg	if test -n "$export_symbols" && test -n "$include_expsyms"; then
8136c27c18e8Smrg	  $opt_dry_run || cp "$export_symbols" "$output_objdir/$libname.uexp"
81370eb1301bSmrg	  export_symbols="$output_objdir/$libname.uexp"
8138b789ec8aSmrg	  func_append delfiles " $export_symbols"
8139c27c18e8Smrg	fi
8140c43cc173Smrg
8141c27c18e8Smrg	orig_export_symbols=
8142c27c18e8Smrg	case $host_os in
8143c27c18e8Smrg	cygwin* | mingw* | cegcc*)
8144c27c18e8Smrg	  if test -n "$export_symbols" && test -z "$export_symbols_regex"; then
8145c27c18e8Smrg	    # exporting using user supplied symfile
81460eb1301bSmrg	    if test "x`$SED 1q $export_symbols`" != xEXPORTS; then
8147c27c18e8Smrg	      # and it's NOT already a .def file. Must figure out
8148c27c18e8Smrg	      # which of the given symbols are data symbols and tag
8149c27c18e8Smrg	      # them as such. So, trigger use of export_symbols_cmds.
8150c27c18e8Smrg	      # export_symbols gets reassigned inside the "prepare
8151c27c18e8Smrg	      # the list of exported symbols" if statement, so the
8152c27c18e8Smrg	      # include_expsyms logic still works.
81530eb1301bSmrg	      orig_export_symbols="$export_symbols"
8154c27c18e8Smrg	      export_symbols=
8155c27c18e8Smrg	      always_export_symbols=yes
81560eb1301bSmrg	    fi
8157c27c18e8Smrg	  fi
8158c27c18e8Smrg	  ;;
8159c27c18e8Smrg	esac
8160c43cc173Smrg
8161c27c18e8Smrg	# Prepare the list of exported symbols
8162c27c18e8Smrg	if test -z "$export_symbols"; then
81630eb1301bSmrg	  if test "$always_export_symbols" = yes || test -n "$export_symbols_regex"; then
81640eb1301bSmrg	    func_verbose "generating symbol list for \`$libname.la'"
81650eb1301bSmrg	    export_symbols="$output_objdir/$libname.exp"
8166c27c18e8Smrg	    $opt_dry_run || $RM $export_symbols
8167c27c18e8Smrg	    cmds=$export_symbols_cmds
81680eb1301bSmrg	    save_ifs="$IFS"; IFS='~'
8169b789ec8aSmrg	    for cmd1 in $cmds; do
81700eb1301bSmrg	      IFS="$save_ifs"
8171b789ec8aSmrg	      # Take the normal branch if the nm_file_list_spec branch
8172b789ec8aSmrg	      # doesn't work or if tool conversion is not needed.
8173b789ec8aSmrg	      case $nm_file_list_spec~$to_tool_file_cmd in
8174b789ec8aSmrg		*~func_convert_file_noop | *~func_convert_file_msys_to_w32 | ~*)
8175b789ec8aSmrg		  try_normal_branch=yes
8176b789ec8aSmrg		  eval cmd=\"$cmd1\"
8177b789ec8aSmrg		  func_len " $cmd"
8178b789ec8aSmrg		  len=$func_len_result
8179b789ec8aSmrg		  ;;
8180b789ec8aSmrg		*)
8181b789ec8aSmrg		  try_normal_branch=no
8182b789ec8aSmrg		  ;;
8183b789ec8aSmrg	      esac
81840eb1301bSmrg	      if test "$try_normal_branch" = yes \
8185b789ec8aSmrg		 && { test "$len" -lt "$max_cmd_len" \
8186b789ec8aSmrg		      || test "$max_cmd_len" -le -1; }
8187b789ec8aSmrg	      then
8188b789ec8aSmrg		func_show_eval "$cmd" 'exit $?'
8189b789ec8aSmrg		skipped_export=false
8190b789ec8aSmrg	      elif test -n "$nm_file_list_spec"; then
8191b789ec8aSmrg		func_basename "$output"
8192b789ec8aSmrg		output_la=$func_basename_result
8193b789ec8aSmrg		save_libobjs=$libobjs
8194b789ec8aSmrg		save_output=$output
81950eb1301bSmrg		output=${output_objdir}/${output_la}.nm
8196b789ec8aSmrg		func_to_tool_file "$output"
8197b789ec8aSmrg		libobjs=$nm_file_list_spec$func_to_tool_file_result
8198b789ec8aSmrg		func_append delfiles " $output"
8199b789ec8aSmrg		func_verbose "creating $NM input file list: $output"
8200b789ec8aSmrg		for obj in $save_libobjs; do
8201b789ec8aSmrg		  func_to_tool_file "$obj"
8202b789ec8aSmrg		  $ECHO "$func_to_tool_file_result"
8203b789ec8aSmrg		done > "$output"
8204b789ec8aSmrg		eval cmd=\"$cmd1\"
8205c27c18e8Smrg		func_show_eval "$cmd" 'exit $?'
8206b789ec8aSmrg		output=$save_output
8207b789ec8aSmrg		libobjs=$save_libobjs
8208c27c18e8Smrg		skipped_export=false
8209c27c18e8Smrg	      else
8210c27c18e8Smrg		# The command line is too long to execute in one step.
8211c27c18e8Smrg		func_verbose "using reloadable object file for export list..."
8212c27c18e8Smrg		skipped_export=:
8213c27c18e8Smrg		# Break out early, otherwise skipped_export may be
8214c27c18e8Smrg		# set to false by a later but shorter cmd.
8215c27c18e8Smrg		break
8216c27c18e8Smrg	      fi
8217c27c18e8Smrg	    done
82180eb1301bSmrg	    IFS="$save_ifs"
82190eb1301bSmrg	    if test -n "$export_symbols_regex" && test "X$skipped_export" != "X:"; then
8220c27c18e8Smrg	      func_show_eval '$EGREP -e "$export_symbols_regex" "$export_symbols" > "${export_symbols}T"'
8221c27c18e8Smrg	      func_show_eval '$MV "${export_symbols}T" "$export_symbols"'
8222c27c18e8Smrg	    fi
8223c27c18e8Smrg	  fi
8224c27c18e8Smrg	fi
8225c43cc173Smrg
8226c27c18e8Smrg	if test -n "$export_symbols" && test -n "$include_expsyms"; then
82270eb1301bSmrg	  tmp_export_symbols="$export_symbols"
82280eb1301bSmrg	  test -n "$orig_export_symbols" && tmp_export_symbols="$orig_export_symbols"
822937eb1ca1Smrg	  $opt_dry_run || eval '$ECHO "$include_expsyms" | $SP2NL >> "$tmp_export_symbols"'
8230c27c18e8Smrg	fi
8231c43cc173Smrg
82320eb1301bSmrg	if test "X$skipped_export" != "X:" && test -n "$orig_export_symbols"; then
8233c27c18e8Smrg	  # The given exports_symbols file has to be filtered, so filter it.
82340eb1301bSmrg	  func_verbose "filter symbol list for \`$libname.la' to tag DATA exports"
8235c27c18e8Smrg	  # FIXME: $output_objdir/$libname.filter potentially contains lots of
82360eb1301bSmrg	  # 's' commands which not all seds can handle. GNU sed should be fine
8237c27c18e8Smrg	  # though. Also, the filter scales superlinearly with the number of
8238c27c18e8Smrg	  # global variables. join(1) would be nice here, but unfortunately
8239c27c18e8Smrg	  # isn't a blessed tool.
8240c27c18e8Smrg	  $opt_dry_run || $SED -e '/[ ,]DATA/!d;s,\(.*\)\([ \,].*\),s|^\1$|\1\2|,' < $export_symbols > $output_objdir/$libname.filter
8241b789ec8aSmrg	  func_append delfiles " $export_symbols $output_objdir/$libname.filter"
8242c27c18e8Smrg	  export_symbols=$output_objdir/$libname.def
8243c27c18e8Smrg	  $opt_dry_run || $SED -f $output_objdir/$libname.filter < $orig_export_symbols > $export_symbols
8244c43cc173Smrg	fi
8245c43cc173Smrg
8246c27c18e8Smrg	tmp_deplibs=
8247c27c18e8Smrg	for test_deplib in $deplibs; do
8248c27c18e8Smrg	  case " $convenience " in
8249c27c18e8Smrg	  *" $test_deplib "*) ;;
8250c27c18e8Smrg	  *)
8251b789ec8aSmrg	    func_append tmp_deplibs " $test_deplib"
8252c27c18e8Smrg	    ;;
8253c27c18e8Smrg	  esac
8254c27c18e8Smrg	done
82550eb1301bSmrg	deplibs="$tmp_deplibs"
8256c43cc173Smrg
8257c27c18e8Smrg	if test -n "$convenience"; then
8258c27c18e8Smrg	  if test -n "$whole_archive_flag_spec" &&
82590eb1301bSmrg	    test "$compiler_needs_object" = yes &&
8260c27c18e8Smrg	    test -z "$libobjs"; then
8261c27c18e8Smrg	    # extract the archives, so we have objects to list.
8262c27c18e8Smrg	    # TODO: could optimize this to just extract one archive.
8263c27c18e8Smrg	    whole_archive_flag_spec=
8264c27c18e8Smrg	  fi
8265c27c18e8Smrg	  if test -n "$whole_archive_flag_spec"; then
8266c27c18e8Smrg	    save_libobjs=$libobjs
8267c27c18e8Smrg	    eval libobjs=\"\$libobjs $whole_archive_flag_spec\"
8268c27c18e8Smrg	    test "X$libobjs" = "X " && libobjs=
8269c27c18e8Smrg	  else
82700eb1301bSmrg	    gentop="$output_objdir/${outputname}x"
8271b789ec8aSmrg	    func_append generated " $gentop"
8272c43cc173Smrg
8273c27c18e8Smrg	    func_extract_archives $gentop $convenience
8274b789ec8aSmrg	    func_append libobjs " $func_extract_archives_result"
8275c27c18e8Smrg	    test "X$libobjs" = "X " && libobjs=
8276c27c18e8Smrg	  fi
8277c27c18e8Smrg	fi
8278c43cc173Smrg
82790eb1301bSmrg	if test "$thread_safe" = yes && test -n "$thread_safe_flag_spec"; then
8280c27c18e8Smrg	  eval flag=\"$thread_safe_flag_spec\"
8281b789ec8aSmrg	  func_append linker_flags " $flag"
8282c27c18e8Smrg	fi
8283c43cc173Smrg
8284c27c18e8Smrg	# Make a backup of the uninstalled library when relinking
82850eb1301bSmrg	if test "$opt_mode" = relink; then
8286c27c18e8Smrg	  $opt_dry_run || eval '(cd $output_objdir && $RM ${realname}U && $MV $realname ${realname}U)' || exit $?
8287c43cc173Smrg	fi
8288c43cc173Smrg
8289c27c18e8Smrg	# Do each of the archive commands.
82900eb1301bSmrg	if test "$module" = yes && test -n "$module_cmds" ; then
8291c27c18e8Smrg	  if test -n "$export_symbols" && test -n "$module_expsym_cmds"; then
8292c27c18e8Smrg	    eval test_cmds=\"$module_expsym_cmds\"
8293c27c18e8Smrg	    cmds=$module_expsym_cmds
8294c27c18e8Smrg	  else
8295c27c18e8Smrg	    eval test_cmds=\"$module_cmds\"
8296c27c18e8Smrg	    cmds=$module_cmds
8297c27c18e8Smrg	  fi
8298c27c18e8Smrg	else
8299c27c18e8Smrg	  if test -n "$export_symbols" && test -n "$archive_expsym_cmds"; then
8300c27c18e8Smrg	    eval test_cmds=\"$archive_expsym_cmds\"
8301c27c18e8Smrg	    cmds=$archive_expsym_cmds
8302c27c18e8Smrg	  else
8303c27c18e8Smrg	    eval test_cmds=\"$archive_cmds\"
8304c27c18e8Smrg	    cmds=$archive_cmds
8305c27c18e8Smrg	  fi
8306c43cc173Smrg	fi
8307c43cc173Smrg
83080eb1301bSmrg	if test "X$skipped_export" != "X:" &&
8309c27c18e8Smrg	   func_len " $test_cmds" &&
8310c27c18e8Smrg	   len=$func_len_result &&
8311c27c18e8Smrg	   test "$len" -lt "$max_cmd_len" || test "$max_cmd_len" -le -1; then
8312c27c18e8Smrg	  :
8313c27c18e8Smrg	else
8314c27c18e8Smrg	  # The command line is too long to link in one step, link piecewise
8315c27c18e8Smrg	  # or, if using GNU ld and skipped_export is not :, use a linker
8316c27c18e8Smrg	  # script.
8317c43cc173Smrg
8318c27c18e8Smrg	  # Save the value of $output and $libobjs because we want to
8319c27c18e8Smrg	  # use them later.  If we have whole_archive_flag_spec, we
8320c27c18e8Smrg	  # want to use save_libobjs as it was before
8321c27c18e8Smrg	  # whole_archive_flag_spec was expanded, because we can't
8322c27c18e8Smrg	  # assume the linker understands whole_archive_flag_spec.
8323c27c18e8Smrg	  # This may have to be revisited, in case too many
8324c27c18e8Smrg	  # convenience libraries get linked in and end up exceeding
8325c27c18e8Smrg	  # the spec.
8326c27c18e8Smrg	  if test -z "$convenience" || test -z "$whole_archive_flag_spec"; then
8327c27c18e8Smrg	    save_libobjs=$libobjs
8328c27c18e8Smrg	  fi
8329c27c18e8Smrg	  save_output=$output
833037eb1ca1Smrg	  func_basename "$output"
833137eb1ca1Smrg	  output_la=$func_basename_result
8332c43cc173Smrg
8333c27c18e8Smrg	  # Clear the reloadable object creation command queue and
8334c27c18e8Smrg	  # initialize k to one.
8335c27c18e8Smrg	  test_cmds=
8336c27c18e8Smrg	  concat_cmds=
8337c27c18e8Smrg	  objlist=
8338c27c18e8Smrg	  last_robj=
8339c27c18e8Smrg	  k=1
8340c43cc173Smrg
83410eb1301bSmrg	  if test -n "$save_libobjs" && test "X$skipped_export" != "X:" && test "$with_gnu_ld" = yes; then
83420eb1301bSmrg	    output=${output_objdir}/${output_la}.lnkscript
8343c27c18e8Smrg	    func_verbose "creating GNU ld script: $output"
834437eb1ca1Smrg	    echo 'INPUT (' > $output
8345c27c18e8Smrg	    for obj in $save_libobjs
8346c27c18e8Smrg	    do
8347b789ec8aSmrg	      func_to_tool_file "$obj"
8348b789ec8aSmrg	      $ECHO "$func_to_tool_file_result" >> $output
8349c27c18e8Smrg	    done
835037eb1ca1Smrg	    echo ')' >> $output
8351b789ec8aSmrg	    func_append delfiles " $output"
8352b789ec8aSmrg	    func_to_tool_file "$output"
8353b789ec8aSmrg	    output=$func_to_tool_file_result
83540eb1301bSmrg	  elif test -n "$save_libobjs" && test "X$skipped_export" != "X:" && test "X$file_list_spec" != X; then
83550eb1301bSmrg	    output=${output_objdir}/${output_la}.lnk
8356c27c18e8Smrg	    func_verbose "creating linker input file list: $output"
8357c27c18e8Smrg	    : > $output
8358c27c18e8Smrg	    set x $save_libobjs
8359c27c18e8Smrg	    shift
8360c27c18e8Smrg	    firstobj=
83610eb1301bSmrg	    if test "$compiler_needs_object" = yes; then
8362c27c18e8Smrg	      firstobj="$1 "
8363c27c18e8Smrg	      shift
8364c27c18e8Smrg	    fi
8365c27c18e8Smrg	    for obj
8366c27c18e8Smrg	    do
8367b789ec8aSmrg	      func_to_tool_file "$obj"
8368b789ec8aSmrg	      $ECHO "$func_to_tool_file_result" >> $output
8369c27c18e8Smrg	    done
8370b789ec8aSmrg	    func_append delfiles " $output"
8371b789ec8aSmrg	    func_to_tool_file "$output"
8372b789ec8aSmrg	    output=$firstobj\"$file_list_spec$func_to_tool_file_result\"
8373c27c18e8Smrg	  else
8374c27c18e8Smrg	    if test -n "$save_libobjs"; then
8375c27c18e8Smrg	      func_verbose "creating reloadable object files..."
83760eb1301bSmrg	      output=$output_objdir/$output_la-${k}.$objext
8377c27c18e8Smrg	      eval test_cmds=\"$reload_cmds\"
8378c27c18e8Smrg	      func_len " $test_cmds"
8379c27c18e8Smrg	      len0=$func_len_result
8380c27c18e8Smrg	      len=$len0
8381c27c18e8Smrg
8382c27c18e8Smrg	      # Loop over the list of objects to be linked.
8383c27c18e8Smrg	      for obj in $save_libobjs
8384c27c18e8Smrg	      do
8385c27c18e8Smrg		func_len " $obj"
8386c27c18e8Smrg		func_arith $len + $func_len_result
8387c27c18e8Smrg		len=$func_arith_result
83880eb1301bSmrg		if test "X$objlist" = X ||
8389c27c18e8Smrg		   test "$len" -lt "$max_cmd_len"; then
8390c27c18e8Smrg		  func_append objlist " $obj"
8391c27c18e8Smrg		else
8392c27c18e8Smrg		  # The command $test_cmds is almost too long, add a
8393c27c18e8Smrg		  # command to the queue.
83940eb1301bSmrg		  if test "$k" -eq 1 ; then
8395c27c18e8Smrg		    # The first file doesn't have a previous command to add.
839637eb1ca1Smrg		    reload_objs=$objlist
839737eb1ca1Smrg		    eval concat_cmds=\"$reload_cmds\"
8398c27c18e8Smrg		  else
8399c27c18e8Smrg		    # All subsequent reloadable object files will link in
8400c27c18e8Smrg		    # the last one created.
840137eb1ca1Smrg		    reload_objs="$objlist $last_robj"
840237eb1ca1Smrg		    eval concat_cmds=\"\$concat_cmds~$reload_cmds~\$RM $last_robj\"
8403c27c18e8Smrg		  fi
84040eb1301bSmrg		  last_robj=$output_objdir/$output_la-${k}.$objext
8405c27c18e8Smrg		  func_arith $k + 1
8406c27c18e8Smrg		  k=$func_arith_result
84070eb1301bSmrg		  output=$output_objdir/$output_la-${k}.$objext
840837eb1ca1Smrg		  objlist=" $obj"
8409c27c18e8Smrg		  func_len " $last_robj"
8410c27c18e8Smrg		  func_arith $len0 + $func_len_result
8411c27c18e8Smrg		  len=$func_arith_result
8412c27c18e8Smrg		fi
8413c27c18e8Smrg	      done
8414c27c18e8Smrg	      # Handle the remaining objects by creating one last
8415c27c18e8Smrg	      # reloadable object file.  All subsequent reloadable object
8416c27c18e8Smrg	      # files will link in the last one created.
8417c27c18e8Smrg	      test -z "$concat_cmds" || concat_cmds=$concat_cmds~
841837eb1ca1Smrg	      reload_objs="$objlist $last_robj"
84190eb1301bSmrg	      eval concat_cmds=\"\${concat_cmds}$reload_cmds\"
8420c27c18e8Smrg	      if test -n "$last_robj"; then
84210eb1301bSmrg	        eval concat_cmds=\"\${concat_cmds}~\$RM $last_robj\"
8422c27c18e8Smrg	      fi
8423b789ec8aSmrg	      func_append delfiles " $output"
8424c43cc173Smrg
8425c27c18e8Smrg	    else
8426c27c18e8Smrg	      output=
8427c27c18e8Smrg	    fi
8428c27c18e8Smrg
84290eb1301bSmrg	    if ${skipped_export-false}; then
84300eb1301bSmrg	      func_verbose "generating symbol list for \`$libname.la'"
84310eb1301bSmrg	      export_symbols="$output_objdir/$libname.exp"
8432c27c18e8Smrg	      $opt_dry_run || $RM $export_symbols
8433c27c18e8Smrg	      libobjs=$output
8434c27c18e8Smrg	      # Append the command to create the export file.
8435c27c18e8Smrg	      test -z "$concat_cmds" || concat_cmds=$concat_cmds~
8436c27c18e8Smrg	      eval concat_cmds=\"\$concat_cmds$export_symbols_cmds\"
8437c27c18e8Smrg	      if test -n "$last_robj"; then
8438c27c18e8Smrg		eval concat_cmds=\"\$concat_cmds~\$RM $last_robj\"
8439c27c18e8Smrg	      fi
84400eb1301bSmrg	    fi
8441c43cc173Smrg
8442c27c18e8Smrg	    test -n "$save_libobjs" &&
8443c27c18e8Smrg	      func_verbose "creating a temporary reloadable object file: $output"
8444c43cc173Smrg
8445c27c18e8Smrg	    # Loop through the commands generated above and execute them.
84460eb1301bSmrg	    save_ifs="$IFS"; IFS='~'
8447c27c18e8Smrg	    for cmd in $concat_cmds; do
84480eb1301bSmrg	      IFS="$save_ifs"
84490eb1301bSmrg	      $opt_silent || {
8450c27c18e8Smrg		  func_quote_for_expand "$cmd"
8451c27c18e8Smrg		  eval "func_echo $func_quote_for_expand_result"
8452c27c18e8Smrg	      }
8453c27c18e8Smrg	      $opt_dry_run || eval "$cmd" || {
8454c27c18e8Smrg		lt_exit=$?
8455c27c18e8Smrg
8456c27c18e8Smrg		# Restore the uninstalled library and exit
84570eb1301bSmrg		if test "$opt_mode" = relink; then
8458c27c18e8Smrg		  ( cd "$output_objdir" && \
8459c27c18e8Smrg		    $RM "${realname}T" && \
8460c27c18e8Smrg		    $MV "${realname}U" "$realname" )
8461c27c18e8Smrg		fi
8462c43cc173Smrg
8463c27c18e8Smrg		exit $lt_exit
8464c27c18e8Smrg	      }
8465c27c18e8Smrg	    done
84660eb1301bSmrg	    IFS="$save_ifs"
8467c43cc173Smrg
8468c27c18e8Smrg	    if test -n "$export_symbols_regex" && ${skipped_export-false}; then
8469c27c18e8Smrg	      func_show_eval '$EGREP -e "$export_symbols_regex" "$export_symbols" > "${export_symbols}T"'
8470c27c18e8Smrg	      func_show_eval '$MV "${export_symbols}T" "$export_symbols"'
8471c43cc173Smrg	    fi
8472c43cc173Smrg	  fi
8473c43cc173Smrg
84740eb1301bSmrg          if ${skipped_export-false}; then
8475c27c18e8Smrg	    if test -n "$export_symbols" && test -n "$include_expsyms"; then
84760eb1301bSmrg	      tmp_export_symbols="$export_symbols"
84770eb1301bSmrg	      test -n "$orig_export_symbols" && tmp_export_symbols="$orig_export_symbols"
847837eb1ca1Smrg	      $opt_dry_run || eval '$ECHO "$include_expsyms" | $SP2NL >> "$tmp_export_symbols"'
8479c27c18e8Smrg	    fi
8480c43cc173Smrg
8481c27c18e8Smrg	    if test -n "$orig_export_symbols"; then
8482c27c18e8Smrg	      # The given exports_symbols file has to be filtered, so filter it.
84830eb1301bSmrg	      func_verbose "filter symbol list for \`$libname.la' to tag DATA exports"
8484c27c18e8Smrg	      # FIXME: $output_objdir/$libname.filter potentially contains lots of
84850eb1301bSmrg	      # 's' commands which not all seds can handle. GNU sed should be fine
8486c27c18e8Smrg	      # though. Also, the filter scales superlinearly with the number of
8487c27c18e8Smrg	      # global variables. join(1) would be nice here, but unfortunately
8488c27c18e8Smrg	      # isn't a blessed tool.
8489c27c18e8Smrg	      $opt_dry_run || $SED -e '/[ ,]DATA/!d;s,\(.*\)\([ \,].*\),s|^\1$|\1\2|,' < $export_symbols > $output_objdir/$libname.filter
8490b789ec8aSmrg	      func_append delfiles " $export_symbols $output_objdir/$libname.filter"
8491c27c18e8Smrg	      export_symbols=$output_objdir/$libname.def
8492c27c18e8Smrg	      $opt_dry_run || $SED -f $output_objdir/$libname.filter < $orig_export_symbols > $export_symbols
8493c27c18e8Smrg	    fi
84940eb1301bSmrg	  fi
8495c43cc173Smrg
8496c27c18e8Smrg	  libobjs=$output
8497c27c18e8Smrg	  # Restore the value of output.
8498c27c18e8Smrg	  output=$save_output
8499c43cc173Smrg
8500c27c18e8Smrg	  if test -n "$convenience" && test -n "$whole_archive_flag_spec"; then
8501c27c18e8Smrg	    eval libobjs=\"\$libobjs $whole_archive_flag_spec\"
8502c27c18e8Smrg	    test "X$libobjs" = "X " && libobjs=
8503c27c18e8Smrg	  fi
8504c27c18e8Smrg	  # Expand the library linking commands again to reset the
8505c27c18e8Smrg	  # value of $libobjs for piecewise linking.
8506c27c18e8Smrg
8507c27c18e8Smrg	  # Do each of the archive commands.
85080eb1301bSmrg	  if test "$module" = yes && test -n "$module_cmds" ; then
8509c27c18e8Smrg	    if test -n "$export_symbols" && test -n "$module_expsym_cmds"; then
8510c27c18e8Smrg	      cmds=$module_expsym_cmds
8511c43cc173Smrg	    else
8512c27c18e8Smrg	      cmds=$module_cmds
8513c43cc173Smrg	    fi
8514c43cc173Smrg	  else
8515c27c18e8Smrg	    if test -n "$export_symbols" && test -n "$archive_expsym_cmds"; then
8516c27c18e8Smrg	      cmds=$archive_expsym_cmds
8517c27c18e8Smrg	    else
8518c27c18e8Smrg	      cmds=$archive_cmds
8519c27c18e8Smrg	    fi
8520c43cc173Smrg	  fi
8521c43cc173Smrg	fi
8522c43cc173Smrg
8523c27c18e8Smrg	if test -n "$delfiles"; then
8524c27c18e8Smrg	  # Append the command to remove temporary files to $cmds.
8525c27c18e8Smrg	  eval cmds=\"\$cmds~\$RM $delfiles\"
8526c27c18e8Smrg	fi
8527c43cc173Smrg
8528c27c18e8Smrg	# Add any objects from preloaded convenience libraries
8529c27c18e8Smrg	if test -n "$dlprefiles"; then
85300eb1301bSmrg	  gentop="$output_objdir/${outputname}x"
8531b789ec8aSmrg	  func_append generated " $gentop"
8532c43cc173Smrg
8533c27c18e8Smrg	  func_extract_archives $gentop $dlprefiles
8534b789ec8aSmrg	  func_append libobjs " $func_extract_archives_result"
8535c27c18e8Smrg	  test "X$libobjs" = "X " && libobjs=
8536c43cc173Smrg	fi
8537c43cc173Smrg
85380eb1301bSmrg	save_ifs="$IFS"; IFS='~'
8539c27c18e8Smrg	for cmd in $cmds; do
85400eb1301bSmrg	  IFS="$save_ifs"
8541c27c18e8Smrg	  eval cmd=\"$cmd\"
85420eb1301bSmrg	  $opt_silent || {
8543c27c18e8Smrg	    func_quote_for_expand "$cmd"
8544c27c18e8Smrg	    eval "func_echo $func_quote_for_expand_result"
8545c27c18e8Smrg	  }
8546c27c18e8Smrg	  $opt_dry_run || eval "$cmd" || {
8547c27c18e8Smrg	    lt_exit=$?
8548c43cc173Smrg
8549c27c18e8Smrg	    # Restore the uninstalled library and exit
85500eb1301bSmrg	    if test "$opt_mode" = relink; then
8551c27c18e8Smrg	      ( cd "$output_objdir" && \
8552c27c18e8Smrg	        $RM "${realname}T" && \
8553c27c18e8Smrg		$MV "${realname}U" "$realname" )
8554c43cc173Smrg	    fi
8555c43cc173Smrg
8556c27c18e8Smrg	    exit $lt_exit
8557c27c18e8Smrg	  }
8558c27c18e8Smrg	done
85590eb1301bSmrg	IFS="$save_ifs"
8560c43cc173Smrg
8561c27c18e8Smrg	# Restore the uninstalled library and exit
85620eb1301bSmrg	if test "$opt_mode" = relink; then
8563c27c18e8Smrg	  $opt_dry_run || eval '(cd $output_objdir && $RM ${realname}T && $MV $realname ${realname}T && $MV ${realname}U $realname)' || exit $?
8564c43cc173Smrg
8565c27c18e8Smrg	  if test -n "$convenience"; then
8566c27c18e8Smrg	    if test -z "$whole_archive_flag_spec"; then
8567c27c18e8Smrg	      func_show_eval '${RM}r "$gentop"'
8568c27c18e8Smrg	    fi
8569c27c18e8Smrg	  fi
8570c43cc173Smrg
8571c27c18e8Smrg	  exit $EXIT_SUCCESS
8572c27c18e8Smrg	fi
8573c43cc173Smrg
8574c27c18e8Smrg	# Create links to the real library.
8575c27c18e8Smrg	for linkname in $linknames; do
8576c27c18e8Smrg	  if test "$realname" != "$linkname"; then
8577c27c18e8Smrg	    func_show_eval '(cd "$output_objdir" && $RM "$linkname" && $LN_S "$realname" "$linkname")' 'exit $?'
8578c43cc173Smrg	  fi
8579c43cc173Smrg	done
8580c43cc173Smrg
8581c27c18e8Smrg	# If -module or -export-dynamic was specified, set the dlname.
85820eb1301bSmrg	if test "$module" = yes || test "$export_dynamic" = yes; then
8583c27c18e8Smrg	  # On all known operating systems, these are identical.
85840eb1301bSmrg	  dlname="$soname"
8585c27c18e8Smrg	fi
8586c27c18e8Smrg      fi
8587c43cc173Smrg      ;;
8588c43cc173Smrg
8589c27c18e8Smrg    obj)
85900eb1301bSmrg      if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then
85910eb1301bSmrg	func_warning "\`-dlopen' is ignored for objects"
8592c27c18e8Smrg      fi
8593c43cc173Smrg
8594c27c18e8Smrg      case " $deplibs" in
8595c27c18e8Smrg      *\ -l* | *\ -L*)
85960eb1301bSmrg	func_warning "\`-l' and \`-L' are ignored for objects" ;;
8597c43cc173Smrg      esac
8598c43cc173Smrg
8599c27c18e8Smrg      test -n "$rpath" && \
86000eb1301bSmrg	func_warning "\`-rpath' is ignored for objects"
8601c43cc173Smrg
8602c27c18e8Smrg      test -n "$xrpath" && \
86030eb1301bSmrg	func_warning "\`-R' is ignored for objects"
8604c43cc173Smrg
8605c27c18e8Smrg      test -n "$vinfo" && \
86060eb1301bSmrg	func_warning "\`-version-info' is ignored for objects"
8607c27c18e8Smrg
8608c27c18e8Smrg      test -n "$release" && \
86090eb1301bSmrg	func_warning "\`-release' is ignored for objects"
8610c27c18e8Smrg
8611c27c18e8Smrg      case $output in
8612c27c18e8Smrg      *.lo)
8613c27c18e8Smrg	test -n "$objs$old_deplibs" && \
86140eb1301bSmrg	  func_fatal_error "cannot build library object \`$output' from non-libtool objects"
8615c27c18e8Smrg
8616c27c18e8Smrg	libobj=$output
8617c27c18e8Smrg	func_lo2o "$libobj"
8618c27c18e8Smrg	obj=$func_lo2o_result
8619c43cc173Smrg	;;
8620c43cc173Smrg      *)
8621c27c18e8Smrg	libobj=
86220eb1301bSmrg	obj="$output"
8623c43cc173Smrg	;;
8624c43cc173Smrg      esac
8625c43cc173Smrg
8626c27c18e8Smrg      # Delete the old objects.
8627c27c18e8Smrg      $opt_dry_run || $RM $obj $libobj
8628c43cc173Smrg
8629c27c18e8Smrg      # Objects from convenience libraries.  This assumes
8630c27c18e8Smrg      # single-version convenience libraries.  Whenever we create
8631c27c18e8Smrg      # different ones for PIC/non-PIC, this we'll have to duplicate
8632c27c18e8Smrg      # the extraction.
8633c27c18e8Smrg      reload_conv_objs=
8634c27c18e8Smrg      gentop=
86350eb1301bSmrg      # reload_cmds runs $LD directly, so let us get rid of
86360eb1301bSmrg      # -Wl from whole_archive_flag_spec and hope we can get by with
86370eb1301bSmrg      # turning comma into space..
86380eb1301bSmrg      wl=
86390eb1301bSmrg
8640c27c18e8Smrg      if test -n "$convenience"; then
8641c27c18e8Smrg	if test -n "$whole_archive_flag_spec"; then
8642c27c18e8Smrg	  eval tmp_whole_archive_flags=\"$whole_archive_flag_spec\"
86430eb1301bSmrg	  reload_conv_objs=$reload_objs\ `$ECHO "$tmp_whole_archive_flags" | $SED 's|,| |g'`
8644c27c18e8Smrg	else
86450eb1301bSmrg	  gentop="$output_objdir/${obj}x"
8646b789ec8aSmrg	  func_append generated " $gentop"
8647c43cc173Smrg
8648c27c18e8Smrg	  func_extract_archives $gentop $convenience
8649c27c18e8Smrg	  reload_conv_objs="$reload_objs $func_extract_archives_result"
8650c27c18e8Smrg	fi
8651c43cc173Smrg      fi
8652c43cc173Smrg
8653b789ec8aSmrg      # If we're not building shared, we need to use non_pic_objs
86540eb1301bSmrg      test "$build_libtool_libs" != yes && libobjs="$non_pic_objects"
8655b789ec8aSmrg
8656c27c18e8Smrg      # Create the old-style object.
86570eb1301bSmrg      reload_objs="$objs$old_deplibs "`$ECHO "$libobjs" | $SP2NL | $SED "/\.${libext}$/d; /\.lib$/d; $lo2o" | $NL2SP`" $reload_conv_objs" ### testsuite: skip nested quoting test
8658c43cc173Smrg
86590eb1301bSmrg      output="$obj"
8660c27c18e8Smrg      func_execute_cmds "$reload_cmds" 'exit $?'
8661c43cc173Smrg
8662c27c18e8Smrg      # Exit if we aren't doing a library object file.
8663c27c18e8Smrg      if test -z "$libobj"; then
8664c27c18e8Smrg	if test -n "$gentop"; then
8665c27c18e8Smrg	  func_show_eval '${RM}r "$gentop"'
8666c27c18e8Smrg	fi
8667c27c18e8Smrg
8668c27c18e8Smrg	exit $EXIT_SUCCESS
8669c43cc173Smrg      fi
8670c27c18e8Smrg
86710eb1301bSmrg      if test "$build_libtool_libs" != yes; then
8672c27c18e8Smrg	if test -n "$gentop"; then
8673c27c18e8Smrg	  func_show_eval '${RM}r "$gentop"'
8674c27c18e8Smrg	fi
8675c27c18e8Smrg
8676c27c18e8Smrg	# Create an invalid libtool object if no PIC, so that we don't
8677c27c18e8Smrg	# accidentally link it into a program.
8678c27c18e8Smrg	# $show "echo timestamp > $libobj"
8679c27c18e8Smrg	# $opt_dry_run || eval "echo timestamp > $libobj" || exit $?
8680c27c18e8Smrg	exit $EXIT_SUCCESS
86810eb1301bSmrg      fi
8682c27c18e8Smrg
86830eb1301bSmrg      if test -n "$pic_flag" || test "$pic_mode" != default; then
8684c27c18e8Smrg	# Only do commands if we really have different PIC objects.
8685c27c18e8Smrg	reload_objs="$libobjs $reload_conv_objs"
86860eb1301bSmrg	output="$libobj"
8687c27c18e8Smrg	func_execute_cmds "$reload_cmds" 'exit $?'
8688c27c18e8Smrg      fi
8689c27c18e8Smrg
8690c27c18e8Smrg      if test -n "$gentop"; then
8691c27c18e8Smrg	func_show_eval '${RM}r "$gentop"'
8692c27c18e8Smrg      fi
8693c27c18e8Smrg
8694c27c18e8Smrg      exit $EXIT_SUCCESS
8695c43cc173Smrg      ;;
8696c43cc173Smrg
8697c27c18e8Smrg    prog)
8698c27c18e8Smrg      case $host in
8699c27c18e8Smrg	*cygwin*) func_stripname '' '.exe' "$output"
8700c27c18e8Smrg	          output=$func_stripname_result.exe;;
8701c27c18e8Smrg      esac
8702c27c18e8Smrg      test -n "$vinfo" && \
87030eb1301bSmrg	func_warning "\`-version-info' is ignored for programs"
8704c43cc173Smrg
8705c27c18e8Smrg      test -n "$release" && \
87060eb1301bSmrg	func_warning "\`-release' is ignored for programs"
8707c43cc173Smrg
87080eb1301bSmrg      test "$preload" = yes \
87090eb1301bSmrg        && test "$dlopen_support" = unknown \
87100eb1301bSmrg	&& test "$dlopen_self" = unknown \
87110eb1301bSmrg	&& test "$dlopen_self_static" = unknown && \
87120eb1301bSmrg	  func_warning "\`LT_INIT([dlopen])' not used. Assuming no dlopen support."
8713c27c18e8Smrg
8714c27c18e8Smrg      case $host in
8715c27c18e8Smrg      *-*-rhapsody* | *-*-darwin1.[012])
8716c27c18e8Smrg	# On Rhapsody replace the C library is the System framework
871737eb1ca1Smrg	compile_deplibs=`$ECHO " $compile_deplibs" | $SED 's/ -lc / System.ltframework /'`
871837eb1ca1Smrg	finalize_deplibs=`$ECHO " $finalize_deplibs" | $SED 's/ -lc / System.ltframework /'`
8719c43cc173Smrg	;;
8720c27c18e8Smrg      esac
8721c43cc173Smrg
8722c27c18e8Smrg      case $host in
8723c27c18e8Smrg      *-*-darwin*)
8724c27c18e8Smrg	# Don't allow lazy linking, it breaks C++ global constructors
8725c27c18e8Smrg	# But is supposedly fixed on 10.4 or later (yay!).
87260eb1301bSmrg	if test "$tagname" = CXX ; then
8727c27c18e8Smrg	  case ${MACOSX_DEPLOYMENT_TARGET-10.0} in
8728c27c18e8Smrg	    10.[0123])
87290eb1301bSmrg	      func_append compile_command " ${wl}-bind_at_load"
87300eb1301bSmrg	      func_append finalize_command " ${wl}-bind_at_load"
8731c27c18e8Smrg	    ;;
8732c27c18e8Smrg	  esac
8733c43cc173Smrg	fi
8734c27c18e8Smrg	# Time to change all our "foo.ltframework" stuff back to "-framework foo"
873537eb1ca1Smrg	compile_deplibs=`$ECHO " $compile_deplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'`
873637eb1ca1Smrg	finalize_deplibs=`$ECHO " $finalize_deplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'`
8737c27c18e8Smrg	;;
8738c27c18e8Smrg      esac
8739c43cc173Smrg
8740c43cc173Smrg
8741c27c18e8Smrg      # move library search paths that coincide with paths to not yet
8742c27c18e8Smrg      # installed libraries to the beginning of the library search list
8743c27c18e8Smrg      new_libs=
8744c27c18e8Smrg      for path in $notinst_path; do
8745c27c18e8Smrg	case " $new_libs " in
8746c27c18e8Smrg	*" -L$path/$objdir "*) ;;
8747c27c18e8Smrg	*)
8748c27c18e8Smrg	  case " $compile_deplibs " in
8749c27c18e8Smrg	  *" -L$path/$objdir "*)
8750b789ec8aSmrg	    func_append new_libs " -L$path/$objdir" ;;
8751c43cc173Smrg	  esac
8752c27c18e8Smrg	  ;;
8753c27c18e8Smrg	esac
8754c27c18e8Smrg      done
8755c27c18e8Smrg      for deplib in $compile_deplibs; do
8756c27c18e8Smrg	case $deplib in
8757c27c18e8Smrg	-L*)
8758c27c18e8Smrg	  case " $new_libs " in
8759c27c18e8Smrg	  *" $deplib "*) ;;
8760b789ec8aSmrg	  *) func_append new_libs " $deplib" ;;
8761c43cc173Smrg	  esac
8762c27c18e8Smrg	  ;;
8763b789ec8aSmrg	*) func_append new_libs " $deplib" ;;
8764c27c18e8Smrg	esac
8765c27c18e8Smrg      done
87660eb1301bSmrg      compile_deplibs="$new_libs"
8767c43cc173Smrg
8768c43cc173Smrg
8769b789ec8aSmrg      func_append compile_command " $compile_deplibs"
8770b789ec8aSmrg      func_append finalize_command " $finalize_deplibs"
8771c43cc173Smrg
8772c27c18e8Smrg      if test -n "$rpath$xrpath"; then
8773c27c18e8Smrg	# If the user specified any rpath flags, then add them.
8774c27c18e8Smrg	for libdir in $rpath $xrpath; do
8775c27c18e8Smrg	  # This is the magic to use -rpath.
8776c27c18e8Smrg	  case "$finalize_rpath " in
8777c27c18e8Smrg	  *" $libdir "*) ;;
8778b789ec8aSmrg	  *) func_append finalize_rpath " $libdir" ;;
8779c27c18e8Smrg	  esac
8780c27c18e8Smrg	done
8781c27c18e8Smrg      fi
8782c43cc173Smrg
8783c27c18e8Smrg      # Now hardcode the library paths
8784c27c18e8Smrg      rpath=
8785c27c18e8Smrg      hardcode_libdirs=
8786c27c18e8Smrg      for libdir in $compile_rpath $finalize_rpath; do
8787c27c18e8Smrg	if test -n "$hardcode_libdir_flag_spec"; then
8788c27c18e8Smrg	  if test -n "$hardcode_libdir_separator"; then
8789c27c18e8Smrg	    if test -z "$hardcode_libdirs"; then
87900eb1301bSmrg	      hardcode_libdirs="$libdir"
8791c27c18e8Smrg	    else
8792c27c18e8Smrg	      # Just accumulate the unique libdirs.
8793c27c18e8Smrg	      case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in
8794c27c18e8Smrg	      *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*)
8795c27c18e8Smrg		;;
8796c27c18e8Smrg	      *)
8797b789ec8aSmrg		func_append hardcode_libdirs "$hardcode_libdir_separator$libdir"
8798c27c18e8Smrg		;;
8799c27c18e8Smrg	      esac
8800c27c18e8Smrg	    fi
8801c43cc173Smrg	  else
8802c27c18e8Smrg	    eval flag=\"$hardcode_libdir_flag_spec\"
8803b789ec8aSmrg	    func_append rpath " $flag"
8804c43cc173Smrg	  fi
8805c27c18e8Smrg	elif test -n "$runpath_var"; then
8806c27c18e8Smrg	  case "$perm_rpath " in
8807c27c18e8Smrg	  *" $libdir "*) ;;
8808b789ec8aSmrg	  *) func_append perm_rpath " $libdir" ;;
8809c27c18e8Smrg	  esac
8810c27c18e8Smrg	fi
8811c27c18e8Smrg	case $host in
8812c27c18e8Smrg	*-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-cegcc*)
88130eb1301bSmrg	  testbindir=`${ECHO} "$libdir" | ${SED} -e 's*/lib$*/bin*'`
8814c27c18e8Smrg	  case :$dllsearchpath: in
8815c27c18e8Smrg	  *":$libdir:"*) ;;
8816c27c18e8Smrg	  ::) dllsearchpath=$libdir;;
8817b789ec8aSmrg	  *) func_append dllsearchpath ":$libdir";;
8818c27c18e8Smrg	  esac
8819c27c18e8Smrg	  case :$dllsearchpath: in
8820c27c18e8Smrg	  *":$testbindir:"*) ;;
8821c27c18e8Smrg	  ::) dllsearchpath=$testbindir;;
8822b789ec8aSmrg	  *) func_append dllsearchpath ":$testbindir";;
8823c27c18e8Smrg	  esac
8824c27c18e8Smrg	  ;;
8825c27c18e8Smrg	esac
8826c27c18e8Smrg      done
8827c27c18e8Smrg      # Substitute the hardcoded libdirs into the rpath.
8828c27c18e8Smrg      if test -n "$hardcode_libdir_separator" &&
8829c27c18e8Smrg	 test -n "$hardcode_libdirs"; then
88300eb1301bSmrg	libdir="$hardcode_libdirs"
8831c27c18e8Smrg	eval rpath=\" $hardcode_libdir_flag_spec\"
8832c27c18e8Smrg      fi
88330eb1301bSmrg      compile_rpath="$rpath"
8834c43cc173Smrg
8835c27c18e8Smrg      rpath=
8836c27c18e8Smrg      hardcode_libdirs=
8837c27c18e8Smrg      for libdir in $finalize_rpath; do
8838c27c18e8Smrg	if test -n "$hardcode_libdir_flag_spec"; then
8839c27c18e8Smrg	  if test -n "$hardcode_libdir_separator"; then
8840c27c18e8Smrg	    if test -z "$hardcode_libdirs"; then
88410eb1301bSmrg	      hardcode_libdirs="$libdir"
8842c27c18e8Smrg	    else
8843c27c18e8Smrg	      # Just accumulate the unique libdirs.
8844c27c18e8Smrg	      case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in
8845c27c18e8Smrg	      *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*)
8846c27c18e8Smrg		;;
8847c27c18e8Smrg	      *)
8848b789ec8aSmrg		func_append hardcode_libdirs "$hardcode_libdir_separator$libdir"
8849c27c18e8Smrg		;;
8850c27c18e8Smrg	      esac
8851c27c18e8Smrg	    fi
8852c43cc173Smrg	  else
8853c27c18e8Smrg	    eval flag=\"$hardcode_libdir_flag_spec\"
8854b789ec8aSmrg	    func_append rpath " $flag"
8855c43cc173Smrg	  fi
8856c27c18e8Smrg	elif test -n "$runpath_var"; then
8857c27c18e8Smrg	  case "$finalize_perm_rpath " in
8858c27c18e8Smrg	  *" $libdir "*) ;;
8859b789ec8aSmrg	  *) func_append finalize_perm_rpath " $libdir" ;;
8860c27c18e8Smrg	  esac
8861c43cc173Smrg	fi
8862c27c18e8Smrg      done
8863c27c18e8Smrg      # Substitute the hardcoded libdirs into the rpath.
8864c27c18e8Smrg      if test -n "$hardcode_libdir_separator" &&
8865c27c18e8Smrg	 test -n "$hardcode_libdirs"; then
88660eb1301bSmrg	libdir="$hardcode_libdirs"
8867c27c18e8Smrg	eval rpath=\" $hardcode_libdir_flag_spec\"
8868c27c18e8Smrg      fi
88690eb1301bSmrg      finalize_rpath="$rpath"
8870c43cc173Smrg
88710eb1301bSmrg      if test -n "$libobjs" && test "$build_old_libs" = yes; then
8872c27c18e8Smrg	# Transform all the library objects into standard objects.
887337eb1ca1Smrg	compile_command=`$ECHO "$compile_command" | $SP2NL | $SED "$lo2o" | $NL2SP`
887437eb1ca1Smrg	finalize_command=`$ECHO "$finalize_command" | $SP2NL | $SED "$lo2o" | $NL2SP`
8875c27c18e8Smrg      fi
8876c43cc173Smrg
88770eb1301bSmrg      func_generate_dlsyms "$outputname" "@PROGRAM@" "no"
8878c43cc173Smrg
8879c27c18e8Smrg      # template prelinking step
8880c27c18e8Smrg      if test -n "$prelink_cmds"; then
8881c27c18e8Smrg	func_execute_cmds "$prelink_cmds" 'exit $?'
8882c27c18e8Smrg      fi
8883c43cc173Smrg
88840eb1301bSmrg      wrappers_required=yes
8885c27c18e8Smrg      case $host in
888637eb1ca1Smrg      *cegcc* | *mingw32ce*)
888737eb1ca1Smrg        # Disable wrappers for cegcc and mingw32ce hosts, we are cross compiling anyway.
88880eb1301bSmrg        wrappers_required=no
888937eb1ca1Smrg        ;;
8890c27c18e8Smrg      *cygwin* | *mingw* )
88910eb1301bSmrg        if test "$build_libtool_libs" != yes; then
88920eb1301bSmrg          wrappers_required=no
88930eb1301bSmrg        fi
8894c27c18e8Smrg        ;;
8895c27c18e8Smrg      *)
88960eb1301bSmrg        if test "$need_relink" = no || test "$build_libtool_libs" != yes; then
88970eb1301bSmrg          wrappers_required=no
8898c27c18e8Smrg        fi
8899c27c18e8Smrg        ;;
8900c27c18e8Smrg      esac
89010eb1301bSmrg      if test "$wrappers_required" = no; then
8902c27c18e8Smrg	# Replace the output file specification.
890337eb1ca1Smrg	compile_command=`$ECHO "$compile_command" | $SED 's%@OUTPUT@%'"$output"'%g'`
89040eb1301bSmrg	link_command="$compile_command$compile_rpath"
8905c43cc173Smrg
8906c27c18e8Smrg	# We have no uninstalled library dependencies, so finalize right now.
8907c27c18e8Smrg	exit_status=0
8908c27c18e8Smrg	func_show_eval "$link_command" 'exit_status=$?'
8909c43cc173Smrg
8910b789ec8aSmrg	if test -n "$postlink_cmds"; then
8911b789ec8aSmrg	  func_to_tool_file "$output"
8912b789ec8aSmrg	  postlink_cmds=`func_echo_all "$postlink_cmds" | $SED -e 's%@OUTPUT@%'"$output"'%g' -e 's%@TOOL_OUTPUT@%'"$func_to_tool_file_result"'%g'`
8913b789ec8aSmrg	  func_execute_cmds "$postlink_cmds" 'exit $?'
8914b789ec8aSmrg	fi
8915b789ec8aSmrg
8916c27c18e8Smrg	# Delete the generated files.
89170eb1301bSmrg	if test -f "$output_objdir/${outputname}S.${objext}"; then
89180eb1301bSmrg	  func_show_eval '$RM "$output_objdir/${outputname}S.${objext}"'
8919c43cc173Smrg	fi
8920c43cc173Smrg
8921c27c18e8Smrg	exit $exit_status
89220eb1301bSmrg      fi
8923c43cc173Smrg
8924c27c18e8Smrg      if test -n "$compile_shlibpath$finalize_shlibpath"; then
8925c27c18e8Smrg	compile_command="$shlibpath_var=\"$compile_shlibpath$finalize_shlibpath\$$shlibpath_var\" $compile_command"
8926c27c18e8Smrg      fi
8927c27c18e8Smrg      if test -n "$finalize_shlibpath"; then
8928c27c18e8Smrg	finalize_command="$shlibpath_var=\"$finalize_shlibpath\$$shlibpath_var\" $finalize_command"
8929c27c18e8Smrg      fi
8930c43cc173Smrg
8931c27c18e8Smrg      compile_var=
8932c27c18e8Smrg      finalize_var=
8933c27c18e8Smrg      if test -n "$runpath_var"; then
8934c27c18e8Smrg	if test -n "$perm_rpath"; then
8935c27c18e8Smrg	  # We should set the runpath_var.
8936c27c18e8Smrg	  rpath=
8937c27c18e8Smrg	  for dir in $perm_rpath; do
8938b789ec8aSmrg	    func_append rpath "$dir:"
8939c27c18e8Smrg	  done
8940c27c18e8Smrg	  compile_var="$runpath_var=\"$rpath\$$runpath_var\" "
8941c43cc173Smrg	fi
8942c27c18e8Smrg	if test -n "$finalize_perm_rpath"; then
8943c27c18e8Smrg	  # We should set the runpath_var.
8944c27c18e8Smrg	  rpath=
8945c27c18e8Smrg	  for dir in $finalize_perm_rpath; do
8946b789ec8aSmrg	    func_append rpath "$dir:"
8947c27c18e8Smrg	  done
8948c27c18e8Smrg	  finalize_var="$runpath_var=\"$rpath\$$runpath_var\" "
8949c43cc173Smrg	fi
8950c27c18e8Smrg      fi
8951c43cc173Smrg
89520eb1301bSmrg      if test "$no_install" = yes; then
8953c27c18e8Smrg	# We don't need to create a wrapper script.
89540eb1301bSmrg	link_command="$compile_var$compile_command$compile_rpath"
8955c27c18e8Smrg	# Replace the output file specification.
895637eb1ca1Smrg	link_command=`$ECHO "$link_command" | $SED 's%@OUTPUT@%'"$output"'%g'`
8957c27c18e8Smrg	# Delete the old output file.
8958c27c18e8Smrg	$opt_dry_run || $RM $output
8959c27c18e8Smrg	# Link the executable and exit
8960c27c18e8Smrg	func_show_eval "$link_command" 'exit $?'
8961b789ec8aSmrg
8962b789ec8aSmrg	if test -n "$postlink_cmds"; then
8963b789ec8aSmrg	  func_to_tool_file "$output"
8964b789ec8aSmrg	  postlink_cmds=`func_echo_all "$postlink_cmds" | $SED -e 's%@OUTPUT@%'"$output"'%g' -e 's%@TOOL_OUTPUT@%'"$func_to_tool_file_result"'%g'`
8965b789ec8aSmrg	  func_execute_cmds "$postlink_cmds" 'exit $?'
8966b789ec8aSmrg	fi
8967b789ec8aSmrg
8968c43cc173Smrg	exit $EXIT_SUCCESS
8969c27c18e8Smrg      fi
8970c43cc173Smrg
89710eb1301bSmrg      if test "$hardcode_action" = relink; then
89720eb1301bSmrg	# Fast installation is not supported
89730eb1301bSmrg	link_command="$compile_var$compile_command$compile_rpath"
89740eb1301bSmrg	relink_command="$finalize_var$finalize_command$finalize_rpath"
8975c27c18e8Smrg
89760eb1301bSmrg	func_warning "this platform does not like uninstalled shared libraries"
89770eb1301bSmrg	func_warning "\`$output' will be relinked during installation"
89780eb1301bSmrg      else
89790eb1301bSmrg	if test "$fast_install" != no; then
89800eb1301bSmrg	  link_command="$finalize_var$compile_command$finalize_rpath"
89810eb1301bSmrg	  if test "$fast_install" = yes; then
89820eb1301bSmrg	    relink_command=`$ECHO "$compile_var$compile_command$compile_rpath" | $SED 's%@OUTPUT@%\$progdir/\$file%g'`
89830eb1301bSmrg	  else
89840eb1301bSmrg	    # fast_install is set to needless
89850eb1301bSmrg	    relink_command=
89860eb1301bSmrg	  fi
89870eb1301bSmrg	else
89880eb1301bSmrg	  link_command="$compile_var$compile_command$compile_rpath"
89890eb1301bSmrg	  relink_command="$finalize_var$finalize_command$finalize_rpath"
89900eb1301bSmrg	fi
89910eb1301bSmrg      fi
8992c43cc173Smrg
8993c27c18e8Smrg      # Replace the output file specification.
899437eb1ca1Smrg      link_command=`$ECHO "$link_command" | $SED 's%@OUTPUT@%'"$output_objdir/$outputname"'%g'`
8995c43cc173Smrg
8996c27c18e8Smrg      # Delete the old output files.
8997c27c18e8Smrg      $opt_dry_run || $RM $output $output_objdir/$outputname $output_objdir/lt-$outputname
8998c43cc173Smrg
8999c27c18e8Smrg      func_show_eval "$link_command" 'exit $?'
9000c43cc173Smrg
9001b789ec8aSmrg      if test -n "$postlink_cmds"; then
9002b789ec8aSmrg	func_to_tool_file "$output_objdir/$outputname"
9003b789ec8aSmrg	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'`
9004b789ec8aSmrg	func_execute_cmds "$postlink_cmds" 'exit $?'
9005b789ec8aSmrg      fi
9006b789ec8aSmrg
9007c27c18e8Smrg      # Now create the wrapper script.
9008c27c18e8Smrg      func_verbose "creating $output"
9009c43cc173Smrg
9010c27c18e8Smrg      # Quote the relink command for shipping.
9011c27c18e8Smrg      if test -n "$relink_command"; then
9012c27c18e8Smrg	# Preserve any variables that may affect compiler behavior
9013c27c18e8Smrg	for var in $variables_saved_for_relink; do
9014c27c18e8Smrg	  if eval test -z \"\${$var+set}\"; then
9015c27c18e8Smrg	    relink_command="{ test -z \"\${$var+set}\" || $lt_unset $var || { $var=; export $var; }; }; $relink_command"
9016c27c18e8Smrg	  elif eval var_value=\$$var; test -z "$var_value"; then
9017c27c18e8Smrg	    relink_command="$var=; export $var; $relink_command"
9018c43cc173Smrg	  else
9019c27c18e8Smrg	    func_quote_for_eval "$var_value"
9020c27c18e8Smrg	    relink_command="$var=$func_quote_for_eval_result; export $var; $relink_command"
9021c43cc173Smrg	  fi
9022c27c18e8Smrg	done
9023c27c18e8Smrg	relink_command="(cd `pwd`; $relink_command)"
902437eb1ca1Smrg	relink_command=`$ECHO "$relink_command" | $SED "$sed_quote_subst"`
9025c27c18e8Smrg      fi
9026c27c18e8Smrg
9027c27c18e8Smrg      # Only actually do things if not in dry run mode.
9028c27c18e8Smrg      $opt_dry_run || {
9029c27c18e8Smrg	# win32 will think the script is a binary if it has
9030c27c18e8Smrg	# a .exe suffix, so we strip it off here.
9031c27c18e8Smrg	case $output in
9032c27c18e8Smrg	  *.exe) func_stripname '' '.exe' "$output"
9033c27c18e8Smrg	         output=$func_stripname_result ;;
9034c27c18e8Smrg	esac
9035c27c18e8Smrg	# test for cygwin because mv fails w/o .exe extensions
9036c27c18e8Smrg	case $host in
9037c27c18e8Smrg	  *cygwin*)
9038c27c18e8Smrg	    exeext=.exe
9039c27c18e8Smrg	    func_stripname '' '.exe' "$outputname"
9040c27c18e8Smrg	    outputname=$func_stripname_result ;;
9041c27c18e8Smrg	  *) exeext= ;;
9042c43cc173Smrg	esac
9043c27c18e8Smrg	case $host in
9044c27c18e8Smrg	  *cygwin* | *mingw* )
9045c27c18e8Smrg	    func_dirname_and_basename "$output" "" "."
9046c27c18e8Smrg	    output_name=$func_basename_result
9047c27c18e8Smrg	    output_path=$func_dirname_result
90480eb1301bSmrg	    cwrappersource="$output_path/$objdir/lt-$output_name.c"
90490eb1301bSmrg	    cwrapper="$output_path/$output_name.exe"
9050c27c18e8Smrg	    $RM $cwrappersource $cwrapper
9051c27c18e8Smrg	    trap "$RM $cwrappersource $cwrapper; exit $EXIT_FAILURE" 1 2 15
9052c27c18e8Smrg
9053c27c18e8Smrg	    func_emit_cwrapperexe_src > $cwrappersource
9054c27c18e8Smrg
9055c27c18e8Smrg	    # The wrapper executable is built using the $host compiler,
9056c27c18e8Smrg	    # because it contains $host paths and files. If cross-
9057c27c18e8Smrg	    # compiling, it, like the target executable, must be
9058c27c18e8Smrg	    # executed on the $host or under an emulation environment.
9059c27c18e8Smrg	    $opt_dry_run || {
9060c27c18e8Smrg	      $LTCC $LTCFLAGS -o $cwrapper $cwrappersource
9061c27c18e8Smrg	      $STRIP $cwrapper
9062c27c18e8Smrg	    }
9063c43cc173Smrg
9064c27c18e8Smrg	    # Now, create the wrapper script for func_source use:
9065c27c18e8Smrg	    func_ltwrapper_scriptname $cwrapper
9066c27c18e8Smrg	    $RM $func_ltwrapper_scriptname_result
9067c27c18e8Smrg	    trap "$RM $func_ltwrapper_scriptname_result; exit $EXIT_FAILURE" 1 2 15
9068c27c18e8Smrg	    $opt_dry_run || {
9069c27c18e8Smrg	      # note: this script will not be executed, so do not chmod.
90700eb1301bSmrg	      if test "x$build" = "x$host" ; then
9071c27c18e8Smrg		$cwrapper --lt-dump-script > $func_ltwrapper_scriptname_result
9072c27c18e8Smrg	      else
9073c27c18e8Smrg		func_emit_wrapper no > $func_ltwrapper_scriptname_result
9074c27c18e8Smrg	      fi
9075c27c18e8Smrg	    }
9076c27c18e8Smrg	  ;;
9077c27c18e8Smrg	  * )
9078c27c18e8Smrg	    $RM $output
9079c27c18e8Smrg	    trap "$RM $output; exit $EXIT_FAILURE" 1 2 15
9080c43cc173Smrg
9081c27c18e8Smrg	    func_emit_wrapper no > $output
9082c27c18e8Smrg	    chmod +x $output
9083c27c18e8Smrg	  ;;
9084c27c18e8Smrg	esac
9085c27c18e8Smrg      }
9086c27c18e8Smrg      exit $EXIT_SUCCESS
9087c27c18e8Smrg      ;;
9088c27c18e8Smrg    esac
9089c43cc173Smrg
9090c27c18e8Smrg    # See if we need to build an old-fashioned archive.
9091c27c18e8Smrg    for oldlib in $oldlibs; do
9092c43cc173Smrg
90930eb1301bSmrg      if test "$build_libtool_libs" = convenience; then
90940eb1301bSmrg	oldobjs="$libobjs_save $symfileobj"
90950eb1301bSmrg	addlibs="$convenience"
90960eb1301bSmrg	build_libtool_libs=no
90970eb1301bSmrg      else
90980eb1301bSmrg	if test "$build_libtool_libs" = module; then
90990eb1301bSmrg	  oldobjs="$libobjs_save"
910044584a44Smrg	  build_libtool_libs=no
91010eb1301bSmrg	else
9102c27c18e8Smrg	  oldobjs="$old_deplibs $non_pic_objects"
91030eb1301bSmrg	  if test "$preload" = yes && test -f "$symfileobj"; then
91040eb1301bSmrg	    func_append oldobjs " $symfileobj"
91050eb1301bSmrg	  fi
91060eb1301bSmrg	fi
91070eb1301bSmrg	addlibs="$old_convenience"
91080eb1301bSmrg      fi
9109c43cc173Smrg
9110c27c18e8Smrg      if test -n "$addlibs"; then
91110eb1301bSmrg	gentop="$output_objdir/${outputname}x"
9112b789ec8aSmrg	func_append generated " $gentop"
9113c43cc173Smrg
9114c27c18e8Smrg	func_extract_archives $gentop $addlibs
9115b789ec8aSmrg	func_append oldobjs " $func_extract_archives_result"
9116c27c18e8Smrg      fi
9117c43cc173Smrg
9118c27c18e8Smrg      # Do each command in the archive commands.
91190eb1301bSmrg      if test -n "$old_archive_from_new_cmds" && test "$build_libtool_libs" = yes; then
9120c27c18e8Smrg	cmds=$old_archive_from_new_cmds
9121c27c18e8Smrg      else
9122c43cc173Smrg
9123c27c18e8Smrg	# Add any objects from preloaded convenience libraries
9124c27c18e8Smrg	if test -n "$dlprefiles"; then
91250eb1301bSmrg	  gentop="$output_objdir/${outputname}x"
9126b789ec8aSmrg	  func_append generated " $gentop"
9127c43cc173Smrg
9128c27c18e8Smrg	  func_extract_archives $gentop $dlprefiles
9129b789ec8aSmrg	  func_append oldobjs " $func_extract_archives_result"
9130c27c18e8Smrg	fi
9131c43cc173Smrg
9132c27c18e8Smrg	# POSIX demands no paths to be encoded in archives.  We have
9133c27c18e8Smrg	# to avoid creating archives with duplicate basenames if we
9134c27c18e8Smrg	# might have to extract them afterwards, e.g., when creating a
9135c27c18e8Smrg	# static archive out of a convenience library, or when linking
9136c27c18e8Smrg	# the entirety of a libtool archive into another (currently
9137c27c18e8Smrg	# not supported by libtool).
9138c27c18e8Smrg	if (for obj in $oldobjs
9139c27c18e8Smrg	    do
9140c27c18e8Smrg	      func_basename "$obj"
9141c27c18e8Smrg	      $ECHO "$func_basename_result"
9142c27c18e8Smrg	    done | sort | sort -uc >/dev/null 2>&1); then
9143c27c18e8Smrg	  :
9144c27c18e8Smrg	else
914537eb1ca1Smrg	  echo "copying selected object files to avoid basename conflicts..."
91460eb1301bSmrg	  gentop="$output_objdir/${outputname}x"
9147b789ec8aSmrg	  func_append generated " $gentop"
9148c27c18e8Smrg	  func_mkdir_p "$gentop"
9149c27c18e8Smrg	  save_oldobjs=$oldobjs
9150c27c18e8Smrg	  oldobjs=
9151c27c18e8Smrg	  counter=1
9152c27c18e8Smrg	  for obj in $save_oldobjs
9153c27c18e8Smrg	  do
9154c27c18e8Smrg	    func_basename "$obj"
91550eb1301bSmrg	    objbase="$func_basename_result"
9156c27c18e8Smrg	    case " $oldobjs " in
9157c27c18e8Smrg	    " ") oldobjs=$obj ;;
9158c27c18e8Smrg	    *[\ /]"$objbase "*)
9159c27c18e8Smrg	      while :; do
9160c27c18e8Smrg		# Make sure we don't pick an alternate name that also
9161c27c18e8Smrg		# overlaps.
9162c27c18e8Smrg		newobj=lt$counter-$objbase
9163c27c18e8Smrg		func_arith $counter + 1
9164c27c18e8Smrg		counter=$func_arith_result
9165c27c18e8Smrg		case " $oldobjs " in
9166c27c18e8Smrg		*[\ /]"$newobj "*) ;;
9167c27c18e8Smrg		*) if test ! -f "$gentop/$newobj"; then break; fi ;;
9168c27c18e8Smrg		esac
9169c27c18e8Smrg	      done
9170c27c18e8Smrg	      func_show_eval "ln $obj $gentop/$newobj || cp $obj $gentop/$newobj"
9171b789ec8aSmrg	      func_append oldobjs " $gentop/$newobj"
9172c27c18e8Smrg	      ;;
9173b789ec8aSmrg	    *) func_append oldobjs " $obj" ;;
9174c27c18e8Smrg	    esac
9175c43cc173Smrg	  done
9176c43cc173Smrg	fi
9177f1ee322dSmrg	func_to_tool_file "$oldlib" func_convert_file_msys_to_w32
9178f1ee322dSmrg	tool_oldlib=$func_to_tool_file_result
9179c27c18e8Smrg	eval cmds=\"$old_archive_cmds\"
9180c43cc173Smrg
9181c27c18e8Smrg	func_len " $cmds"
9182c27c18e8Smrg	len=$func_len_result
9183c27c18e8Smrg	if test "$len" -lt "$max_cmd_len" || test "$max_cmd_len" -le -1; then
9184c27c18e8Smrg	  cmds=$old_archive_cmds
9185b789ec8aSmrg	elif test -n "$archiver_list_spec"; then
9186b789ec8aSmrg	  func_verbose "using command file archive linking..."
9187b789ec8aSmrg	  for obj in $oldobjs
9188b789ec8aSmrg	  do
9189b789ec8aSmrg	    func_to_tool_file "$obj"
9190b789ec8aSmrg	    $ECHO "$func_to_tool_file_result"
9191b789ec8aSmrg	  done > $output_objdir/$libname.libcmd
9192b789ec8aSmrg	  func_to_tool_file "$output_objdir/$libname.libcmd"
9193b789ec8aSmrg	  oldobjs=" $archiver_list_spec$func_to_tool_file_result"
9194b789ec8aSmrg	  cmds=$old_archive_cmds
9195c27c18e8Smrg	else
9196c27c18e8Smrg	  # the command line is too long to link in one step, link in parts
9197c27c18e8Smrg	  func_verbose "using piecewise archive linking..."
9198c27c18e8Smrg	  save_RANLIB=$RANLIB
9199c27c18e8Smrg	  RANLIB=:
9200c27c18e8Smrg	  objlist=
9201c27c18e8Smrg	  concat_cmds=
9202c27c18e8Smrg	  save_oldobjs=$oldobjs
9203c27c18e8Smrg	  oldobjs=
9204c27c18e8Smrg	  # Is there a better way of finding the last object in the list?
9205c27c18e8Smrg	  for obj in $save_oldobjs
9206c27c18e8Smrg	  do
9207c27c18e8Smrg	    last_oldobj=$obj
9208c27c18e8Smrg	  done
9209c27c18e8Smrg	  eval test_cmds=\"$old_archive_cmds\"
9210c27c18e8Smrg	  func_len " $test_cmds"
9211c27c18e8Smrg	  len0=$func_len_result
9212c27c18e8Smrg	  len=$len0
9213c27c18e8Smrg	  for obj in $save_oldobjs
9214c27c18e8Smrg	  do
9215c27c18e8Smrg	    func_len " $obj"
9216c27c18e8Smrg	    func_arith $len + $func_len_result
9217c27c18e8Smrg	    len=$func_arith_result
9218c27c18e8Smrg	    func_append objlist " $obj"
9219c27c18e8Smrg	    if test "$len" -lt "$max_cmd_len"; then
9220c27c18e8Smrg	      :
9221c27c18e8Smrg	    else
9222c27c18e8Smrg	      # the above command should be used before it gets too long
9223c27c18e8Smrg	      oldobjs=$objlist
92240eb1301bSmrg	      if test "$obj" = "$last_oldobj" ; then
9225c27c18e8Smrg		RANLIB=$save_RANLIB
9226c27c18e8Smrg	      fi
9227c27c18e8Smrg	      test -z "$concat_cmds" || concat_cmds=$concat_cmds~
92280eb1301bSmrg	      eval concat_cmds=\"\${concat_cmds}$old_archive_cmds\"
9229c27c18e8Smrg	      objlist=
9230c27c18e8Smrg	      len=$len0
9231c27c18e8Smrg	    fi
9232c27c18e8Smrg	  done
9233c27c18e8Smrg	  RANLIB=$save_RANLIB
9234c27c18e8Smrg	  oldobjs=$objlist
92350eb1301bSmrg	  if test "X$oldobjs" = "X" ; then
9236c27c18e8Smrg	    eval cmds=\"\$concat_cmds\"
9237c27c18e8Smrg	  else
9238c27c18e8Smrg	    eval cmds=\"\$concat_cmds~\$old_archive_cmds\"
9239c27c18e8Smrg	  fi
9240c27c18e8Smrg	fi
9241c27c18e8Smrg      fi
9242c27c18e8Smrg      func_execute_cmds "$cmds" 'exit $?'
9243c43cc173Smrg    done
9244c43cc173Smrg
9245c27c18e8Smrg    test -n "$generated" && \
9246c27c18e8Smrg      func_show_eval "${RM}r$generated"
9247c43cc173Smrg
9248c27c18e8Smrg    # Now create the libtool archive.
9249c27c18e8Smrg    case $output in
9250c27c18e8Smrg    *.la)
9251c27c18e8Smrg      old_library=
92520eb1301bSmrg      test "$build_old_libs" = yes && old_library="$libname.$libext"
9253c27c18e8Smrg      func_verbose "creating $output"
9254c43cc173Smrg
9255c27c18e8Smrg      # Preserve any variables that may affect compiler behavior
9256c27c18e8Smrg      for var in $variables_saved_for_relink; do
9257c27c18e8Smrg	if eval test -z \"\${$var+set}\"; then
9258c27c18e8Smrg	  relink_command="{ test -z \"\${$var+set}\" || $lt_unset $var || { $var=; export $var; }; }; $relink_command"
9259c27c18e8Smrg	elif eval var_value=\$$var; test -z "$var_value"; then
9260c27c18e8Smrg	  relink_command="$var=; export $var; $relink_command"
9261c43cc173Smrg	else
9262c27c18e8Smrg	  func_quote_for_eval "$var_value"
9263c27c18e8Smrg	  relink_command="$var=$func_quote_for_eval_result; export $var; $relink_command"
9264c43cc173Smrg	fi
9265c27c18e8Smrg      done
9266c27c18e8Smrg      # Quote the link command for shipping.
92670eb1301bSmrg      relink_command="(cd `pwd`; $SHELL $progpath $preserve_args --mode=relink $libtool_args @inst_prefix_dir@)"
926837eb1ca1Smrg      relink_command=`$ECHO "$relink_command" | $SED "$sed_quote_subst"`
92690eb1301bSmrg      if test "$hardcode_automatic" = yes ; then
9270c27c18e8Smrg	relink_command=
9271c27c18e8Smrg      fi
9272c43cc173Smrg
9273c27c18e8Smrg      # Only create the output if not a dry run.
9274c27c18e8Smrg      $opt_dry_run || {
9275c27c18e8Smrg	for installed in no yes; do
92760eb1301bSmrg	  if test "$installed" = yes; then
9277c27c18e8Smrg	    if test -z "$install_libdir"; then
9278c27c18e8Smrg	      break
9279c27c18e8Smrg	    fi
92800eb1301bSmrg	    output="$output_objdir/$outputname"i
9281c27c18e8Smrg	    # Replace all uninstalled libtool libraries with the installed ones
9282c27c18e8Smrg	    newdependency_libs=
9283c27c18e8Smrg	    for deplib in $dependency_libs; do
9284c27c18e8Smrg	      case $deplib in
9285c27c18e8Smrg	      *.la)
9286c27c18e8Smrg		func_basename "$deplib"
92870eb1301bSmrg		name="$func_basename_result"
9288f1ee322dSmrg		func_resolve_sysroot "$deplib"
92890eb1301bSmrg		eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $func_resolve_sysroot_result`
9290c27c18e8Smrg		test -z "$libdir" && \
92910eb1301bSmrg		  func_fatal_error "\`$deplib' is not a valid libtool archive"
9292b789ec8aSmrg		func_append newdependency_libs " ${lt_sysroot:+=}$libdir/$name"
9293b789ec8aSmrg		;;
9294b789ec8aSmrg	      -L*)
9295b789ec8aSmrg		func_stripname -L '' "$deplib"
9296b789ec8aSmrg		func_replace_sysroot "$func_stripname_result"
9297b789ec8aSmrg		func_append newdependency_libs " -L$func_replace_sysroot_result"
9298b789ec8aSmrg		;;
9299b789ec8aSmrg	      -R*)
9300b789ec8aSmrg		func_stripname -R '' "$deplib"
9301b789ec8aSmrg		func_replace_sysroot "$func_stripname_result"
9302b789ec8aSmrg		func_append newdependency_libs " -R$func_replace_sysroot_result"
9303c27c18e8Smrg		;;
9304b789ec8aSmrg	      *) func_append newdependency_libs " $deplib" ;;
9305c27c18e8Smrg	      esac
9306c27c18e8Smrg	    done
93070eb1301bSmrg	    dependency_libs="$newdependency_libs"
9308c27c18e8Smrg	    newdlfiles=
9309c27c18e8Smrg
9310c27c18e8Smrg	    for lib in $dlfiles; do
9311c27c18e8Smrg	      case $lib in
9312c27c18e8Smrg	      *.la)
9313c27c18e8Smrg	        func_basename "$lib"
93140eb1301bSmrg		name="$func_basename_result"
93150eb1301bSmrg		eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $lib`
9316c27c18e8Smrg		test -z "$libdir" && \
93170eb1301bSmrg		  func_fatal_error "\`$lib' is not a valid libtool archive"
9318b789ec8aSmrg		func_append newdlfiles " ${lt_sysroot:+=}$libdir/$name"
9319c27c18e8Smrg		;;
9320b789ec8aSmrg	      *) func_append newdlfiles " $lib" ;;
9321c27c18e8Smrg	      esac
9322c27c18e8Smrg	    done
93230eb1301bSmrg	    dlfiles="$newdlfiles"
9324c27c18e8Smrg	    newdlprefiles=
9325c27c18e8Smrg	    for lib in $dlprefiles; do
9326c27c18e8Smrg	      case $lib in
9327c27c18e8Smrg	      *.la)
9328c27c18e8Smrg		# Only pass preopened files to the pseudo-archive (for
9329c27c18e8Smrg		# eventual linking with the app. that links it) if we
9330c27c18e8Smrg		# didn't already link the preopened objects directly into
9331c27c18e8Smrg		# the library:
9332c27c18e8Smrg		func_basename "$lib"
93330eb1301bSmrg		name="$func_basename_result"
93340eb1301bSmrg		eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $lib`
9335c27c18e8Smrg		test -z "$libdir" && \
93360eb1301bSmrg		  func_fatal_error "\`$lib' is not a valid libtool archive"
9337b789ec8aSmrg		func_append newdlprefiles " ${lt_sysroot:+=}$libdir/$name"
9338c27c18e8Smrg		;;
9339c27c18e8Smrg	      esac
9340c27c18e8Smrg	    done
93410eb1301bSmrg	    dlprefiles="$newdlprefiles"
9342c27c18e8Smrg	  else
9343c27c18e8Smrg	    newdlfiles=
9344c27c18e8Smrg	    for lib in $dlfiles; do
9345c27c18e8Smrg	      case $lib in
93460eb1301bSmrg		[\\/]* | [A-Za-z]:[\\/]*) abs="$lib" ;;
9347c27c18e8Smrg		*) abs=`pwd`"/$lib" ;;
9348c27c18e8Smrg	      esac
9349b789ec8aSmrg	      func_append newdlfiles " $abs"
9350c27c18e8Smrg	    done
93510eb1301bSmrg	    dlfiles="$newdlfiles"
9352c27c18e8Smrg	    newdlprefiles=
9353c27c18e8Smrg	    for lib in $dlprefiles; do
9354c27c18e8Smrg	      case $lib in
93550eb1301bSmrg		[\\/]* | [A-Za-z]:[\\/]*) abs="$lib" ;;
9356c27c18e8Smrg		*) abs=`pwd`"/$lib" ;;
9357c27c18e8Smrg	      esac
9358b789ec8aSmrg	      func_append newdlprefiles " $abs"
9359c27c18e8Smrg	    done
93600eb1301bSmrg	    dlprefiles="$newdlprefiles"
9361c27c18e8Smrg	  fi
9362c27c18e8Smrg	  $RM $output
9363c27c18e8Smrg	  # place dlname in correct position for cygwin
936437eb1ca1Smrg	  # In fact, it would be nice if we could use this code for all target
936537eb1ca1Smrg	  # systems that can't hard-code library paths into their executables
936637eb1ca1Smrg	  # and that have no shared library path variable independent of PATH,
936737eb1ca1Smrg	  # but it turns out we can't easily determine that from inspecting
936837eb1ca1Smrg	  # libtool variables, so we have to hard-code the OSs to which it
936937eb1ca1Smrg	  # applies here; at the moment, that means platforms that use the PE
937037eb1ca1Smrg	  # object format with DLL files.  See the long comment at the top of
937137eb1ca1Smrg	  # tests/bindir.at for full details.
9372c27c18e8Smrg	  tdlname=$dlname
9373c27c18e8Smrg	  case $host,$output,$installed,$module,$dlname in
937437eb1ca1Smrg	    *cygwin*,*lai,yes,no,*.dll | *mingw*,*lai,yes,no,*.dll | *cegcc*,*lai,yes,no,*.dll)
937537eb1ca1Smrg	      # If a -bindir argument was supplied, place the dll there.
93760eb1301bSmrg	      if test "x$bindir" != x ;
93770eb1301bSmrg	      then
937837eb1ca1Smrg		func_relative_path "$install_libdir" "$bindir"
93790eb1301bSmrg		tdlname=$func_relative_path_result$dlname
938037eb1ca1Smrg	      else
938137eb1ca1Smrg		# Otherwise fall back on heuristic.
938237eb1ca1Smrg		tdlname=../bin/$dlname
938337eb1ca1Smrg	      fi
938437eb1ca1Smrg	      ;;
9385c27c18e8Smrg	  esac
9386c27c18e8Smrg	  $ECHO > $output "\
9387c27c18e8Smrg# $outputname - a libtool library file
93880eb1301bSmrg# Generated by $PROGRAM (GNU $PACKAGE$TIMESTAMP) $VERSION
9389c27c18e8Smrg#
9390c27c18e8Smrg# Please DO NOT delete this file!
9391c27c18e8Smrg# It is necessary for linking the library.
9392c43cc173Smrg
9393c27c18e8Smrg# The name that we can dlopen(3).
9394c27c18e8Smrgdlname='$tdlname'
9395c43cc173Smrg
9396c27c18e8Smrg# Names of this library.
9397c27c18e8Smrglibrary_names='$library_names'
9398c43cc173Smrg
9399c27c18e8Smrg# The name of the static archive.
9400c27c18e8Smrgold_library='$old_library'
9401c43cc173Smrg
94020eb1301bSmrg# Linker flags that can not go in dependency_libs.
9403c27c18e8Smrginherited_linker_flags='$new_inherited_linker_flags'
9404c43cc173Smrg
9405c27c18e8Smrg# Libraries that this one depends upon.
9406c27c18e8Smrgdependency_libs='$dependency_libs'
9407c43cc173Smrg
9408c27c18e8Smrg# Names of additional weak libraries provided by this library
9409c27c18e8Smrgweak_library_names='$weak_libs'
9410c43cc173Smrg
9411c27c18e8Smrg# Version information for $libname.
9412c27c18e8Smrgcurrent=$current
9413c27c18e8Smrgage=$age
9414c27c18e8Smrgrevision=$revision
9415c43cc173Smrg
9416c27c18e8Smrg# Is this an already installed library?
9417c27c18e8Smrginstalled=$installed
9418c43cc173Smrg
9419c27c18e8Smrg# Should we warn about portability when linking against -modules?
9420c27c18e8Smrgshouldnotlink=$module
9421c43cc173Smrg
9422c27c18e8Smrg# Files to dlopen/dlpreopen
9423c27c18e8Smrgdlopen='$dlfiles'
9424c27c18e8Smrgdlpreopen='$dlprefiles'
9425c43cc173Smrg
9426c27c18e8Smrg# Directory that this library needs to be installed in:
9427c27c18e8Smrglibdir='$install_libdir'"
94280eb1301bSmrg	  if test "$installed" = no && test "$need_relink" = yes; then
9429c27c18e8Smrg	    $ECHO >> $output "\
9430c27c18e8Smrgrelink_command=\"$relink_command\""
9431c27c18e8Smrg	  fi
9432c27c18e8Smrg	done
9433c27c18e8Smrg      }
9434c43cc173Smrg
9435c27c18e8Smrg      # Do a symbolic link so that the libtool archive can be found in
9436c27c18e8Smrg      # LD_LIBRARY_PATH before the program is installed.
9437c27c18e8Smrg      func_show_eval '( cd "$output_objdir" && $RM "$outputname" && $LN_S "../$outputname" "$outputname" )' 'exit $?'
9438c27c18e8Smrg      ;;
9439c27c18e8Smrg    esac
9440c27c18e8Smrg    exit $EXIT_SUCCESS
9441c27c18e8Smrg}
9442c43cc173Smrg
94430eb1301bSmrg{ test "$opt_mode" = link || test "$opt_mode" = relink; } &&
94440eb1301bSmrg    func_mode_link ${1+"$@"}
9445c43cc173Smrg
9446c43cc173Smrg
9447c27c18e8Smrg# func_mode_uninstall arg...
9448c27c18e8Smrgfunc_mode_uninstall ()
9449c27c18e8Smrg{
94500eb1301bSmrg    $opt_debug
94510eb1301bSmrg    RM="$nonopt"
9452c43cc173Smrg    files=
94530eb1301bSmrg    rmforce=
9454c43cc173Smrg    exit_status=0
9455c43cc173Smrg
9456c43cc173Smrg    # This variable tells wrapper scripts just to set variables rather
9457c43cc173Smrg    # than running their programs.
94580eb1301bSmrg    libtool_install_magic="$magic"
9459c43cc173Smrg
9460c43cc173Smrg    for arg
9461c43cc173Smrg    do
9462c43cc173Smrg      case $arg in
94630eb1301bSmrg      -f) func_append RM " $arg"; rmforce=yes ;;
9464b789ec8aSmrg      -*) func_append RM " $arg" ;;
9465b789ec8aSmrg      *) func_append files " $arg" ;;
9466c43cc173Smrg      esac
9467c43cc173Smrg    done
9468c43cc173Smrg
9469c27c18e8Smrg    test -z "$RM" && \
9470c27c18e8Smrg      func_fatal_help "you must specify an RM program"
9471c43cc173Smrg
9472c43cc173Smrg    rmdirs=
9473c43cc173Smrg
9474c43cc173Smrg    for file in $files; do
9475c27c18e8Smrg      func_dirname "$file" "" "."
94760eb1301bSmrg      dir="$func_dirname_result"
94770eb1301bSmrg      if test "X$dir" = X.; then
94780eb1301bSmrg	odir="$objdir"
9479c43cc173Smrg      else
94800eb1301bSmrg	odir="$dir/$objdir"
9481c43cc173Smrg      fi
9482c27c18e8Smrg      func_basename "$file"
94830eb1301bSmrg      name="$func_basename_result"
94840eb1301bSmrg      test "$opt_mode" = uninstall && odir="$dir"
9485c43cc173Smrg
9486b789ec8aSmrg      # Remember odir for removal later, being careful to avoid duplicates
94870eb1301bSmrg      if test "$opt_mode" = clean; then
9488c43cc173Smrg	case " $rmdirs " in
9489b789ec8aSmrg	  *" $odir "*) ;;
9490b789ec8aSmrg	  *) func_append rmdirs " $odir" ;;
9491c43cc173Smrg	esac
9492c43cc173Smrg      fi
9493c43cc173Smrg
9494c43cc173Smrg      # Don't error if the file doesn't exist and rm -f was used.
9495c27c18e8Smrg      if { test -L "$file"; } >/dev/null 2>&1 ||
9496c27c18e8Smrg	 { test -h "$file"; } >/dev/null 2>&1 ||
9497c27c18e8Smrg	 test -f "$file"; then
9498c43cc173Smrg	:
9499c43cc173Smrg      elif test -d "$file"; then
9500c43cc173Smrg	exit_status=1
9501c43cc173Smrg	continue
95020eb1301bSmrg      elif test "$rmforce" = yes; then
9503c43cc173Smrg	continue
9504c43cc173Smrg      fi
9505c43cc173Smrg
95060eb1301bSmrg      rmfiles="$file"
9507c43cc173Smrg
9508c43cc173Smrg      case $name in
9509c43cc173Smrg      *.la)
9510c43cc173Smrg	# Possibly a libtool archive, so verify it.
9511c27c18e8Smrg	if func_lalib_p "$file"; then
9512c27c18e8Smrg	  func_source $dir/$name
9513c43cc173Smrg
9514c43cc173Smrg	  # Delete the libtool libraries and symlinks.
9515c43cc173Smrg	  for n in $library_names; do
9516b789ec8aSmrg	    func_append rmfiles " $odir/$n"
9517c43cc173Smrg	  done
9518b789ec8aSmrg	  test -n "$old_library" && func_append rmfiles " $odir/$old_library"
9519c43cc173Smrg
95200eb1301bSmrg	  case "$opt_mode" in
9521c43cc173Smrg	  clean)
9522b789ec8aSmrg	    case " $library_names " in
9523c43cc173Smrg	    *" $dlname "*) ;;
9524b789ec8aSmrg	    *) test -n "$dlname" && func_append rmfiles " $odir/$dlname" ;;
9525c43cc173Smrg	    esac
9526b789ec8aSmrg	    test -n "$libdir" && func_append rmfiles " $odir/$name $odir/${name}i"
9527c43cc173Smrg	    ;;
9528c43cc173Smrg	  uninstall)
9529c43cc173Smrg	    if test -n "$library_names"; then
9530c43cc173Smrg	      # Do each command in the postuninstall commands.
95310eb1301bSmrg	      func_execute_cmds "$postuninstall_cmds" 'test "$rmforce" = yes || exit_status=1'
9532c43cc173Smrg	    fi
9533c43cc173Smrg
9534c43cc173Smrg	    if test -n "$old_library"; then
9535c43cc173Smrg	      # Do each command in the old_postuninstall commands.
95360eb1301bSmrg	      func_execute_cmds "$old_postuninstall_cmds" 'test "$rmforce" = yes || exit_status=1'
9537c43cc173Smrg	    fi
9538c43cc173Smrg	    # FIXME: should reinstall the best remaining shared library.
9539c43cc173Smrg	    ;;
9540c43cc173Smrg	  esac
9541c43cc173Smrg	fi
9542c43cc173Smrg	;;
9543c43cc173Smrg
9544c43cc173Smrg      *.lo)
9545c43cc173Smrg	# Possibly a libtool object, so verify it.
9546c27c18e8Smrg	if func_lalib_p "$file"; then
9547c43cc173Smrg
9548c43cc173Smrg	  # Read the .lo file
9549c27c18e8Smrg	  func_source $dir/$name
9550c43cc173Smrg
9551c43cc173Smrg	  # Add PIC object to the list of files to remove.
95520eb1301bSmrg	  if test -n "$pic_object" &&
95530eb1301bSmrg	     test "$pic_object" != none; then
9554b789ec8aSmrg	    func_append rmfiles " $dir/$pic_object"
9555c43cc173Smrg	  fi
9556c43cc173Smrg
9557c43cc173Smrg	  # Add non-PIC object to the list of files to remove.
95580eb1301bSmrg	  if test -n "$non_pic_object" &&
95590eb1301bSmrg	     test "$non_pic_object" != none; then
9560b789ec8aSmrg	    func_append rmfiles " $dir/$non_pic_object"
9561c43cc173Smrg	  fi
9562c43cc173Smrg	fi
9563c43cc173Smrg	;;
9564c43cc173Smrg
9565c43cc173Smrg      *)
95660eb1301bSmrg	if test "$opt_mode" = clean ; then
9567c43cc173Smrg	  noexename=$name
9568c43cc173Smrg	  case $file in
9569c43cc173Smrg	  *.exe)
9570c27c18e8Smrg	    func_stripname '' '.exe' "$file"
9571c27c18e8Smrg	    file=$func_stripname_result
9572c27c18e8Smrg	    func_stripname '' '.exe' "$name"
9573c27c18e8Smrg	    noexename=$func_stripname_result
9574c43cc173Smrg	    # $file with .exe has already been added to rmfiles,
9575c43cc173Smrg	    # add $file without .exe
9576b789ec8aSmrg	    func_append rmfiles " $file"
9577c43cc173Smrg	    ;;
9578c43cc173Smrg	  esac
9579c43cc173Smrg	  # Do a test to see if this is a libtool program.
9580c27c18e8Smrg	  if func_ltwrapper_p "$file"; then
9581c27c18e8Smrg	    if func_ltwrapper_executable_p "$file"; then
9582c27c18e8Smrg	      func_ltwrapper_scriptname "$file"
9583c27c18e8Smrg	      relink_command=
9584c27c18e8Smrg	      func_source $func_ltwrapper_scriptname_result
9585b789ec8aSmrg	      func_append rmfiles " $func_ltwrapper_scriptname_result"
9586c27c18e8Smrg	    else
9587c27c18e8Smrg	      relink_command=
9588c27c18e8Smrg	      func_source $dir/$noexename
9589c27c18e8Smrg	    fi
9590c43cc173Smrg
9591c43cc173Smrg	    # note $name still contains .exe if it was in $file originally
9592c43cc173Smrg	    # as does the version of $file that was added into $rmfiles
95930eb1301bSmrg	    func_append rmfiles " $odir/$name $odir/${name}S.${objext}"
95940eb1301bSmrg	    if test "$fast_install" = yes && test -n "$relink_command"; then
9595b789ec8aSmrg	      func_append rmfiles " $odir/lt-$name"
9596c43cc173Smrg	    fi
95970eb1301bSmrg	    if test "X$noexename" != "X$name" ; then
95980eb1301bSmrg	      func_append rmfiles " $odir/lt-${noexename}.c"
9599c43cc173Smrg	    fi
9600c43cc173Smrg	  fi
9601c43cc173Smrg	fi
9602c43cc173Smrg	;;
9603c43cc173Smrg      esac
9604c27c18e8Smrg      func_show_eval "$RM $rmfiles" 'exit_status=1'
9605c43cc173Smrg    done
9606c43cc173Smrg
96070eb1301bSmrg    # Try to remove the ${objdir}s in the directories where we deleted files
9608c43cc173Smrg    for dir in $rmdirs; do
9609c43cc173Smrg      if test -d "$dir"; then
9610c27c18e8Smrg	func_show_eval "rmdir $dir >/dev/null 2>&1"
9611c43cc173Smrg      fi
9612c43cc173Smrg    done
9613c43cc173Smrg
9614c43cc173Smrg    exit $exit_status
9615c27c18e8Smrg}
9616c43cc173Smrg
96170eb1301bSmrg{ test "$opt_mode" = uninstall || test "$opt_mode" = clean; } &&
96180eb1301bSmrg    func_mode_uninstall ${1+"$@"}
9619c43cc173Smrg
9620b789ec8aSmrgtest -z "$opt_mode" && {
96210eb1301bSmrg  help="$generic_help"
9622c27c18e8Smrg  func_fatal_help "you must specify a MODE"
9623c27c18e8Smrg}
9624c27c18e8Smrg
9625c27c18e8Smrgtest -z "$exec_cmd" && \
96260eb1301bSmrg  func_fatal_help "invalid operation mode \`$opt_mode'"
9627c43cc173Smrg
9628c43cc173Smrgif test -n "$exec_cmd"; then
9629c27c18e8Smrg  eval exec "$exec_cmd"
9630c43cc173Smrg  exit $EXIT_FAILURE
9631c43cc173Smrgfi
9632c43cc173Smrg
9633c27c18e8Smrgexit $exit_status
9634c43cc173Smrg
9635c43cc173Smrg
9636c43cc173Smrg# The TAGs below are defined such that we never get into a situation
96370eb1301bSmrg# in which we disable both kinds of libraries.  Given conflicting
9638c43cc173Smrg# choices, we go for a static library, that is the most portable,
9639c43cc173Smrg# since we can't tell whether shared libraries were disabled because
9640c43cc173Smrg# the user asked for that or because the platform doesn't support
9641c43cc173Smrg# them.  This is particularly important on AIX, because we don't
9642c43cc173Smrg# support having both static and shared libraries enabled at the same
9643c43cc173Smrg# time on that platform, so we default to a shared-only configuration.
9644c43cc173Smrg# If a disable-shared tag is given, we'll fallback to a static-only
9645c43cc173Smrg# configuration.  But we'll never go from static-only to shared-only.
9646c43cc173Smrg
9647c43cc173Smrg# ### BEGIN LIBTOOL TAG CONFIG: disable-shared
9648c27c18e8Smrgbuild_libtool_libs=no
9649c27c18e8Smrgbuild_old_libs=yes
9650c43cc173Smrg# ### END LIBTOOL TAG CONFIG: disable-shared
9651c43cc173Smrg
9652c43cc173Smrg# ### BEGIN LIBTOOL TAG CONFIG: disable-static
9653c27c18e8Smrgbuild_old_libs=`case $build_libtool_libs in yes) echo no;; *) echo yes;; esac`
9654c43cc173Smrg# ### END LIBTOOL TAG CONFIG: disable-static
9655c43cc173Smrg
9656c43cc173Smrg# Local Variables:
9657c43cc173Smrg# mode:shell-script
9658c43cc173Smrg# sh-indentation:2
9659c43cc173Smrg# End:
96600eb1301bSmrg# vi:sw=2
96610eb1301bSmrg
9662