ltmain.sh revision 200d7199
165eef222Smrg
2200d7199Smrg# libtool (GNU libtool) 2.4
365eef222Smrg# Written by Gordon Matzigkeit <gord@gnu.ai.mit.edu>, 1996
465eef222Smrg
556957a04Smrg# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005, 2006,
656957a04Smrg# 2007, 2008, 2009, 2010 Free Software Foundation, Inc.
765eef222Smrg# This is free software; see the source for copying conditions.  There is NO
865eef222Smrg# warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
965eef222Smrg
1065eef222Smrg# GNU Libtool is free software; you can redistribute it and/or modify
11ef981d24Smrg# it under the terms of the GNU General Public License as published by
12ef981d24Smrg# the Free Software Foundation; either version 2 of the License, or
13ef981d24Smrg# (at your option) any later version.
14ef981d24Smrg#
1565eef222Smrg# As a special exception to the GNU General Public License,
1665eef222Smrg# if you distribute this file as part of a program or library that
1765eef222Smrg# is built using GNU Libtool, you may include this file under the
1865eef222Smrg# same distribution terms that you use for the rest of that program.
1965eef222Smrg#
2065eef222Smrg# GNU Libtool is distributed in the hope that it will be useful, but
21ef981d24Smrg# WITHOUT ANY WARRANTY; without even the implied warranty of
22ef981d24Smrg# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
23ef981d24Smrg# General Public License for more details.
24ef981d24Smrg#
25ef981d24Smrg# You should have received a copy of the GNU General Public License
2665eef222Smrg# along with GNU Libtool; see the file COPYING.  If not, a copy
2765eef222Smrg# can be downloaded from http://www.gnu.org/licenses/gpl.html,
2865eef222Smrg# or obtained by writing to the Free Software Foundation, Inc.,
2965eef222Smrg# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
3065eef222Smrg
3165eef222Smrg# Usage: $progname [OPTION]... [MODE-ARG]...
3265eef222Smrg#
3365eef222Smrg# Provide generalized library-building support services.
34ef981d24Smrg#
3556957a04Smrg#       --config             show all configuration variables
3656957a04Smrg#       --debug              enable verbose shell tracing
3756957a04Smrg#   -n, --dry-run            display commands without modifying any files
3856957a04Smrg#       --features           display basic configuration information and exit
3956957a04Smrg#       --mode=MODE          use operation mode MODE
4056957a04Smrg#       --preserve-dup-deps  don't remove duplicate dependency libraries
4156957a04Smrg#       --quiet, --silent    don't print informational messages
4256957a04Smrg#       --no-quiet, --no-silent
4356957a04Smrg#                            print informational messages (default)
4456957a04Smrg#       --tag=TAG            use configuration variables from tag TAG
4556957a04Smrg#   -v, --verbose            print more informational messages than default
4656957a04Smrg#       --no-verbose         don't print the extra informational messages
4756957a04Smrg#       --version            print version information
4856957a04Smrg#   -h, --help, --help-all   print short, long, or detailed help message
4965eef222Smrg#
5065eef222Smrg# MODE must be one of the following:
5165eef222Smrg#
5256957a04Smrg#         clean              remove files from the build directory
5356957a04Smrg#         compile            compile a source file into a libtool object
5456957a04Smrg#         execute            automatically set library path, then run a program
5556957a04Smrg#         finish             complete the installation of libtool libraries
5656957a04Smrg#         install            install libraries or executables
5756957a04Smrg#         link               create a library or an executable
5856957a04Smrg#         uninstall          remove libraries from an installed directory
5965eef222Smrg#
6056957a04Smrg# MODE-ARGS vary depending on the MODE.  When passed as first option,
6156957a04Smrg# `--mode=MODE' may be abbreviated as `MODE' or a unique abbreviation of that.
6265eef222Smrg# Try `$progname --help --mode=MODE' for a more detailed description of MODE.
6365eef222Smrg#
6465eef222Smrg# When reporting a bug, please describe a test case to reproduce it and
6565eef222Smrg# include the following information:
6665eef222Smrg#
6756957a04Smrg#         host-triplet:	$host
6856957a04Smrg#         shell:		$SHELL
6956957a04Smrg#         compiler:		$LTCC
7056957a04Smrg#         compiler flags:		$LTCFLAGS
7156957a04Smrg#         linker:		$LD (gnu? $with_gnu_ld)
72200d7199Smrg#         $progname:	(GNU libtool) 2.4
7356957a04Smrg#         automake:	$automake_version
7456957a04Smrg#         autoconf:	$autoconf_version
7565eef222Smrg#
7665eef222Smrg# Report bugs to <bug-libtool@gnu.org>.
77200d7199Smrg# GNU libtool home page: <http://www.gnu.org/software/libtool/>.
78200d7199Smrg# General help using GNU software: <http://www.gnu.org/gethelp/>.
7965eef222Smrg
8056957a04SmrgPROGRAM=libtool
8165eef222SmrgPACKAGE=libtool
82200d7199SmrgVERSION=2.4
8365eef222SmrgTIMESTAMP=""
84200d7199Smrgpackage_revision=1.3293
8565eef222Smrg
8665eef222Smrg# Be Bourne compatible
8765eef222Smrgif test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then
8865eef222Smrg  emulate sh
8965eef222Smrg  NULLCMD=:
9065eef222Smrg  # Zsh 3.x and 4.x performs word splitting on ${1+"$@"}, which
9165eef222Smrg  # is contrary to our usage.  Disable this feature.
9265eef222Smrg  alias -g '${1+"$@"}'='"$@"'
9365eef222Smrg  setopt NO_GLOB_SUBST
9465eef222Smrgelse
9565eef222Smrg  case `(set -o) 2>/dev/null` in *posix*) set -o posix;; esac
9665eef222Smrgfi
9765eef222SmrgBIN_SH=xpg4; export BIN_SH # for Tru64
9865eef222SmrgDUALCASE=1; export DUALCASE # for MKS sh
9965eef222Smrg
10056957a04Smrg# A function that is used when there is no print builtin or printf.
10156957a04Smrgfunc_fallback_echo ()
10256957a04Smrg{
10356957a04Smrg  eval 'cat <<_LTECHO_EOF
10456957a04Smrg$1
10556957a04Smrg_LTECHO_EOF'
10656957a04Smrg}
10756957a04Smrg
10865eef222Smrg# NLS nuisances: We save the old values to restore during execute mode.
10965eef222Smrglt_user_locale=
11065eef222Smrglt_safe_locale=
11165eef222Smrgfor lt_var in LANG LANGUAGE LC_ALL LC_CTYPE LC_COLLATE LC_MESSAGES
11265eef222Smrgdo
11365eef222Smrg  eval "if test \"\${$lt_var+set}\" = set; then
11465eef222Smrg          save_$lt_var=\$$lt_var
11565eef222Smrg          $lt_var=C
11665eef222Smrg	  export $lt_var
11765eef222Smrg	  lt_user_locale=\"$lt_var=\\\$save_\$lt_var; \$lt_user_locale\"
11865eef222Smrg	  lt_safe_locale=\"$lt_var=C; \$lt_safe_locale\"
11965eef222Smrg	fi"
12065eef222Smrgdone
12156957a04SmrgLC_ALL=C
12256957a04SmrgLANGUAGE=C
12356957a04Smrgexport LANGUAGE LC_ALL
12465eef222Smrg
12565eef222Smrg$lt_unset CDPATH
12665eef222Smrg
12765eef222Smrg
12856957a04Smrg# Work around backward compatibility issue on IRIX 6.5. On IRIX 6.4+, sh
12956957a04Smrg# is ksh but when the shell is invoked as "sh" and the current value of
13056957a04Smrg# the _XPG environment variable is not equal to 1 (one), the special
13156957a04Smrg# positional parameter $0, within a function call, is the name of the
13256957a04Smrg# function.
13356957a04Smrgprogpath="$0"
13465eef222Smrg
13565eef222Smrg
13665eef222Smrg
13765eef222Smrg: ${CP="cp -f"}
13856957a04Smrgtest "${ECHO+set}" = set || ECHO=${as_echo-'printf %s\n'}
13956957a04Smrg: ${EGREP="grep -E"}
14056957a04Smrg: ${FGREP="grep -F"}
14156957a04Smrg: ${GREP="grep"}
14265eef222Smrg: ${LN_S="ln -s"}
14365eef222Smrg: ${MAKE="make"}
14465eef222Smrg: ${MKDIR="mkdir"}
14565eef222Smrg: ${MV="mv -f"}
14665eef222Smrg: ${RM="rm -f"}
14756957a04Smrg: ${SED="sed"}
14865eef222Smrg: ${SHELL="${CONFIG_SHELL-/bin/sh}"}
14965eef222Smrg: ${Xsed="$SED -e 1s/^X//"}
150ef981d24Smrg
15165eef222Smrg# Global variables:
15265eef222SmrgEXIT_SUCCESS=0
15365eef222SmrgEXIT_FAILURE=1
15465eef222SmrgEXIT_MISMATCH=63  # $? = 63 is used to indicate version mismatch to missing.
15565eef222SmrgEXIT_SKIP=77	  # $? = 77 is used to indicate a skipped test to automake.
15665eef222Smrg
15765eef222Smrgexit_status=$EXIT_SUCCESS
15865eef222Smrg
15965eef222Smrg# Make sure IFS has a sensible default
16065eef222Smrglt_nl='
16165eef222Smrg'
16265eef222SmrgIFS=" 	$lt_nl"
16365eef222Smrg
16465eef222Smrgdirname="s,/[^/]*$,,"
16565eef222Smrgbasename="s,^.*/,,"
16665eef222Smrg
167200d7199Smrg# func_dirname file append nondir_replacement
168200d7199Smrg# Compute the dirname of FILE.  If nonempty, add APPEND to the result,
169200d7199Smrg# otherwise set result to NONDIR_REPLACEMENT.
170200d7199Smrgfunc_dirname ()
171200d7199Smrg{
172200d7199Smrg    func_dirname_result=`$ECHO "${1}" | $SED "$dirname"`
173200d7199Smrg    if test "X$func_dirname_result" = "X${1}"; then
174200d7199Smrg      func_dirname_result="${3}"
175200d7199Smrg    else
176200d7199Smrg      func_dirname_result="$func_dirname_result${2}"
177200d7199Smrg    fi
178200d7199Smrg} # func_dirname may be replaced by extended shell implementation
179200d7199Smrg
180200d7199Smrg
181200d7199Smrg# func_basename file
182200d7199Smrgfunc_basename ()
183200d7199Smrg{
184200d7199Smrg    func_basename_result=`$ECHO "${1}" | $SED "$basename"`
185200d7199Smrg} # func_basename may be replaced by extended shell implementation
186200d7199Smrg
187200d7199Smrg
18865eef222Smrg# func_dirname_and_basename file append nondir_replacement
18965eef222Smrg# perform func_basename and func_dirname in a single function
19065eef222Smrg# call:
19165eef222Smrg#   dirname:  Compute the dirname of FILE.  If nonempty,
19265eef222Smrg#             add APPEND to the result, otherwise set result
19365eef222Smrg#             to NONDIR_REPLACEMENT.
19465eef222Smrg#             value returned in "$func_dirname_result"
19565eef222Smrg#   basename: Compute filename of FILE.
19665eef222Smrg#             value retuned in "$func_basename_result"
19765eef222Smrg# Implementation must be kept synchronized with func_dirname
19865eef222Smrg# and func_basename. For efficiency, we do not delegate to
19965eef222Smrg# those functions but instead duplicate the functionality here.
20065eef222Smrgfunc_dirname_and_basename ()
20165eef222Smrg{
202200d7199Smrg    # Extract subdirectory from the argument.
203200d7199Smrg    func_dirname_result=`$ECHO "${1}" | $SED -e "$dirname"`
204200d7199Smrg    if test "X$func_dirname_result" = "X${1}"; then
205200d7199Smrg      func_dirname_result="${3}"
206200d7199Smrg    else
207200d7199Smrg      func_dirname_result="$func_dirname_result${2}"
208200d7199Smrg    fi
209200d7199Smrg    func_basename_result=`$ECHO "${1}" | $SED -e "$basename"`
210200d7199Smrg} # func_dirname_and_basename may be replaced by extended shell implementation
211200d7199Smrg
212200d7199Smrg
213200d7199Smrg# func_stripname prefix suffix name
214200d7199Smrg# strip PREFIX and SUFFIX off of NAME.
215200d7199Smrg# PREFIX and SUFFIX must not contain globbing or regex special
216200d7199Smrg# characters, hashes, percent signs, but SUFFIX may contain a leading
217200d7199Smrg# dot (in which case that matches only a dot).
218200d7199Smrg# func_strip_suffix prefix name
219200d7199Smrgfunc_stripname ()
220200d7199Smrg{
221200d7199Smrg    case ${2} in
222200d7199Smrg      .*) func_stripname_result=`$ECHO "${3}" | $SED "s%^${1}%%; s%\\\\${2}\$%%"`;;
223200d7199Smrg      *)  func_stripname_result=`$ECHO "${3}" | $SED "s%^${1}%%; s%${2}\$%%"`;;
224200d7199Smrg    esac
225200d7199Smrg} # func_stripname may be replaced by extended shell implementation
22665eef222Smrg
227ef981d24Smrg
22856957a04Smrg# These SED scripts presuppose an absolute path with a trailing slash.
22956957a04Smrgpathcar='s,^/\([^/]*\).*$,\1,'
23056957a04Smrgpathcdr='s,^/[^/]*,,'
23156957a04Smrgremovedotparts=':dotsl
23256957a04Smrg		s@/\./@/@g
23356957a04Smrg		t dotsl
23456957a04Smrg		s,/\.$,/,'
23556957a04Smrgcollapseslashes='s@/\{1,\}@/@g'
23656957a04Smrgfinalslash='s,/*$,/,'
23756957a04Smrg
23856957a04Smrg# func_normal_abspath PATH
23956957a04Smrg# Remove doubled-up and trailing slashes, "." path components,
24056957a04Smrg# and cancel out any ".." path components in PATH after making
24156957a04Smrg# it an absolute path.
24256957a04Smrg#             value returned in "$func_normal_abspath_result"
24356957a04Smrgfunc_normal_abspath ()
24456957a04Smrg{
24556957a04Smrg  # Start from root dir and reassemble the path.
24656957a04Smrg  func_normal_abspath_result=
24756957a04Smrg  func_normal_abspath_tpath=$1
24856957a04Smrg  func_normal_abspath_altnamespace=
24956957a04Smrg  case $func_normal_abspath_tpath in
25056957a04Smrg    "")
25156957a04Smrg      # Empty path, that just means $cwd.
25256957a04Smrg      func_stripname '' '/' "`pwd`"
25356957a04Smrg      func_normal_abspath_result=$func_stripname_result
25456957a04Smrg      return
25556957a04Smrg    ;;
25656957a04Smrg    # The next three entries are used to spot a run of precisely
25756957a04Smrg    # two leading slashes without using negated character classes;
25856957a04Smrg    # we take advantage of case's first-match behaviour.
25956957a04Smrg    ///*)
26056957a04Smrg      # Unusual form of absolute path, do nothing.
26156957a04Smrg    ;;
26256957a04Smrg    //*)
26356957a04Smrg      # Not necessarily an ordinary path; POSIX reserves leading '//'
26456957a04Smrg      # and for example Cygwin uses it to access remote file shares
26556957a04Smrg      # over CIFS/SMB, so we conserve a leading double slash if found.
26656957a04Smrg      func_normal_abspath_altnamespace=/
26756957a04Smrg    ;;
26856957a04Smrg    /*)
26956957a04Smrg      # Absolute path, do nothing.
27056957a04Smrg    ;;
27156957a04Smrg    *)
27256957a04Smrg      # Relative path, prepend $cwd.
27356957a04Smrg      func_normal_abspath_tpath=`pwd`/$func_normal_abspath_tpath
27456957a04Smrg    ;;
27556957a04Smrg  esac
27656957a04Smrg  # Cancel out all the simple stuff to save iterations.  We also want
27756957a04Smrg  # the path to end with a slash for ease of parsing, so make sure
27856957a04Smrg  # there is one (and only one) here.
27956957a04Smrg  func_normal_abspath_tpath=`$ECHO "$func_normal_abspath_tpath" | $SED \
28056957a04Smrg        -e "$removedotparts" -e "$collapseslashes" -e "$finalslash"`
28156957a04Smrg  while :; do
28256957a04Smrg    # Processed it all yet?
28356957a04Smrg    if test "$func_normal_abspath_tpath" = / ; then
28456957a04Smrg      # If we ascended to the root using ".." the result may be empty now.
28556957a04Smrg      if test -z "$func_normal_abspath_result" ; then
28656957a04Smrg        func_normal_abspath_result=/
28756957a04Smrg      fi
28856957a04Smrg      break
28956957a04Smrg    fi
29056957a04Smrg    func_normal_abspath_tcomponent=`$ECHO "$func_normal_abspath_tpath" | $SED \
29156957a04Smrg        -e "$pathcar"`
29256957a04Smrg    func_normal_abspath_tpath=`$ECHO "$func_normal_abspath_tpath" | $SED \
29356957a04Smrg        -e "$pathcdr"`
29456957a04Smrg    # Figure out what to do with it
29556957a04Smrg    case $func_normal_abspath_tcomponent in
29656957a04Smrg      "")
29756957a04Smrg        # Trailing empty path component, ignore it.
29856957a04Smrg      ;;
29956957a04Smrg      ..)
30056957a04Smrg        # Parent dir; strip last assembled component from result.
30156957a04Smrg        func_dirname "$func_normal_abspath_result"
30256957a04Smrg        func_normal_abspath_result=$func_dirname_result
30356957a04Smrg      ;;
30456957a04Smrg      *)
30556957a04Smrg        # Actual path component, append it.
30656957a04Smrg        func_normal_abspath_result=$func_normal_abspath_result/$func_normal_abspath_tcomponent
30756957a04Smrg      ;;
30856957a04Smrg    esac
30956957a04Smrg  done
31056957a04Smrg  # Restore leading double-slash if one was found on entry.
31156957a04Smrg  func_normal_abspath_result=$func_normal_abspath_altnamespace$func_normal_abspath_result
31256957a04Smrg}
31356957a04Smrg
31456957a04Smrg# func_relative_path SRCDIR DSTDIR
31556957a04Smrg# generates a relative path from SRCDIR to DSTDIR, with a trailing
31656957a04Smrg# slash if non-empty, suitable for immediately appending a filename
31756957a04Smrg# without needing to append a separator.
31856957a04Smrg#             value returned in "$func_relative_path_result"
31956957a04Smrgfunc_relative_path ()
32056957a04Smrg{
32156957a04Smrg  func_relative_path_result=
32256957a04Smrg  func_normal_abspath "$1"
32356957a04Smrg  func_relative_path_tlibdir=$func_normal_abspath_result
32456957a04Smrg  func_normal_abspath "$2"
32556957a04Smrg  func_relative_path_tbindir=$func_normal_abspath_result
32656957a04Smrg
32756957a04Smrg  # Ascend the tree starting from libdir
32856957a04Smrg  while :; do
32956957a04Smrg    # check if we have found a prefix of bindir
33056957a04Smrg    case $func_relative_path_tbindir in
33156957a04Smrg      $func_relative_path_tlibdir)
33256957a04Smrg        # found an exact match
33356957a04Smrg        func_relative_path_tcancelled=
33456957a04Smrg        break
33556957a04Smrg        ;;
33656957a04Smrg      $func_relative_path_tlibdir*)
33756957a04Smrg        # found a matching prefix
33856957a04Smrg        func_stripname "$func_relative_path_tlibdir" '' "$func_relative_path_tbindir"
33956957a04Smrg        func_relative_path_tcancelled=$func_stripname_result
34056957a04Smrg        if test -z "$func_relative_path_result"; then
34156957a04Smrg          func_relative_path_result=.
34256957a04Smrg        fi
34356957a04Smrg        break
34456957a04Smrg        ;;
34556957a04Smrg      *)
34656957a04Smrg        func_dirname $func_relative_path_tlibdir
34756957a04Smrg        func_relative_path_tlibdir=${func_dirname_result}
34856957a04Smrg        if test "x$func_relative_path_tlibdir" = x ; then
34956957a04Smrg          # Have to descend all the way to the root!
35056957a04Smrg          func_relative_path_result=../$func_relative_path_result
35156957a04Smrg          func_relative_path_tcancelled=$func_relative_path_tbindir
35256957a04Smrg          break
35356957a04Smrg        fi
35456957a04Smrg        func_relative_path_result=../$func_relative_path_result
35556957a04Smrg        ;;
35656957a04Smrg    esac
35756957a04Smrg  done
35856957a04Smrg
35956957a04Smrg  # Now calculate path; take care to avoid doubling-up slashes.
36056957a04Smrg  func_stripname '' '/' "$func_relative_path_result"
36156957a04Smrg  func_relative_path_result=$func_stripname_result
36256957a04Smrg  func_stripname '/' '/' "$func_relative_path_tcancelled"
36356957a04Smrg  if test "x$func_stripname_result" != x ; then
36456957a04Smrg    func_relative_path_result=${func_relative_path_result}/${func_stripname_result}
36556957a04Smrg  fi
36656957a04Smrg
36756957a04Smrg  # Normalisation. If bindir is libdir, return empty string,
36856957a04Smrg  # else relative path ending with a slash; either way, target
36956957a04Smrg  # file name can be directly appended.
37056957a04Smrg  if test ! -z "$func_relative_path_result"; then
37156957a04Smrg    func_stripname './' '' "$func_relative_path_result/"
37256957a04Smrg    func_relative_path_result=$func_stripname_result
37356957a04Smrg  fi
37456957a04Smrg}
375ef981d24Smrg
376ef981d24Smrg# The name of this program:
37765eef222Smrgfunc_dirname_and_basename "$progpath"
37865eef222Smrgprogname=$func_basename_result
379ef981d24Smrg
38065eef222Smrg# Make sure we have an absolute path for reexecution:
38165eef222Smrgcase $progpath in
38265eef222Smrg  [\\/]*|[A-Za-z]:\\*) ;;
38365eef222Smrg  *[\\/]*)
38465eef222Smrg     progdir=$func_dirname_result
38565eef222Smrg     progdir=`cd "$progdir" && pwd`
38665eef222Smrg     progpath="$progdir/$progname"
38765eef222Smrg     ;;
38865eef222Smrg  *)
38965eef222Smrg     save_IFS="$IFS"
39065eef222Smrg     IFS=:
39165eef222Smrg     for progdir in $PATH; do
39265eef222Smrg       IFS="$save_IFS"
39365eef222Smrg       test -x "$progdir/$progname" && break
39465eef222Smrg     done
39565eef222Smrg     IFS="$save_IFS"
39665eef222Smrg     test -n "$progdir" || progdir=`pwd`
39765eef222Smrg     progpath="$progdir/$progname"
39865eef222Smrg     ;;
39965eef222Smrgesac
400ef981d24Smrg
40165eef222Smrg# Sed substitution that helps us do robust quoting.  It backslashifies
40265eef222Smrg# metacharacters that are still active within double-quoted strings.
40365eef222SmrgXsed="${SED}"' -e 1s/^X//'
40465eef222Smrgsed_quote_subst='s/\([`"$\\]\)/\\\1/g'
40565eef222Smrg
40665eef222Smrg# Same as above, but do not quote variable references.
40765eef222Smrgdouble_quote_subst='s/\(["`\\]\)/\\\1/g'
40865eef222Smrg
409200d7199Smrg# Sed substitution that turns a string into a regex matching for the
410200d7199Smrg# string literally.
411200d7199Smrgsed_make_literal_regex='s,[].[^$\\*\/],\\&,g'
412200d7199Smrg
413200d7199Smrg# Sed substitution that converts a w32 file name or path
414200d7199Smrg# which contains forward slashes, into one that contains
415200d7199Smrg# (escaped) backslashes.  A very naive implementation.
416200d7199Smrglt_sed_naive_backslashify='s|\\\\*|\\|g;s|/|\\|g;s|\\|\\\\|g'
417200d7199Smrg
41865eef222Smrg# Re-`\' parameter expansions in output of double_quote_subst that were
41965eef222Smrg# `\'-ed in input to the same.  If an odd number of `\' preceded a '$'
42065eef222Smrg# in input to double_quote_subst, that '$' was protected from expansion.
42165eef222Smrg# Since each input `\' is now two `\'s, look for any number of runs of
42265eef222Smrg# four `\'s followed by two `\'s and then a '$'.  `\' that '$'.
42365eef222Smrgbs='\\'
42465eef222Smrgbs2='\\\\'
42565eef222Smrgbs4='\\\\\\\\'
42665eef222Smrgdollar='\$'
42765eef222Smrgsed_double_backslash="\
42865eef222Smrg  s/$bs4/&\\
42965eef222Smrg/g
43065eef222Smrg  s/^$bs2$dollar/$bs&/
43165eef222Smrg  s/\\([^$bs]\\)$bs2$dollar/\\1$bs2$bs$dollar/g
43265eef222Smrg  s/\n//g"
43365eef222Smrg
43465eef222Smrg# Standard options:
43565eef222Smrgopt_dry_run=false
43665eef222Smrgopt_help=false
43765eef222Smrgopt_quiet=false
43865eef222Smrgopt_verbose=false
43965eef222Smrgopt_warning=:
44065eef222Smrg
44165eef222Smrg# func_echo arg...
44265eef222Smrg# Echo program name prefixed message, along with the current mode
44365eef222Smrg# name if it has been set yet.
44465eef222Smrgfunc_echo ()
44565eef222Smrg{
446200d7199Smrg    $ECHO "$progname: ${opt_mode+$opt_mode: }$*"
44765eef222Smrg}
448ef981d24Smrg
44965eef222Smrg# func_verbose arg...
45065eef222Smrg# Echo program name prefixed message in verbose mode only.
45165eef222Smrgfunc_verbose ()
45265eef222Smrg{
45365eef222Smrg    $opt_verbose && func_echo ${1+"$@"}
454ef981d24Smrg
45565eef222Smrg    # A bug in bash halts the script if the last line of a function
45665eef222Smrg    # fails when set -e is in force, so we need another command to
45765eef222Smrg    # work around that:
45865eef222Smrg    :
45965eef222Smrg}
460ef981d24Smrg
46156957a04Smrg# func_echo_all arg...
46256957a04Smrg# Invoke $ECHO with all args, space-separated.
46356957a04Smrgfunc_echo_all ()
46456957a04Smrg{
46556957a04Smrg    $ECHO "$*"
46656957a04Smrg}
46756957a04Smrg
46865eef222Smrg# func_error arg...
46965eef222Smrg# Echo program name prefixed message to standard error.
47065eef222Smrgfunc_error ()
47165eef222Smrg{
472200d7199Smrg    $ECHO "$progname: ${opt_mode+$opt_mode: }"${1+"$@"} 1>&2
47365eef222Smrg}
474ef981d24Smrg
47565eef222Smrg# func_warning arg...
47665eef222Smrg# Echo program name prefixed warning message to standard error.
47765eef222Smrgfunc_warning ()
47865eef222Smrg{
479200d7199Smrg    $opt_warning && $ECHO "$progname: ${opt_mode+$opt_mode: }warning: "${1+"$@"} 1>&2
480ef981d24Smrg
48165eef222Smrg    # bash bug again:
48265eef222Smrg    :
48365eef222Smrg}
484ef981d24Smrg
48565eef222Smrg# func_fatal_error arg...
48665eef222Smrg# Echo program name prefixed message to standard error, and exit.
48765eef222Smrgfunc_fatal_error ()
48865eef222Smrg{
48965eef222Smrg    func_error ${1+"$@"}
49065eef222Smrg    exit $EXIT_FAILURE
49165eef222Smrg}
492ef981d24Smrg
49365eef222Smrg# func_fatal_help arg...
49465eef222Smrg# Echo program name prefixed message to standard error, followed by
49565eef222Smrg# a help hint, and exit.
49665eef222Smrgfunc_fatal_help ()
49765eef222Smrg{
49865eef222Smrg    func_error ${1+"$@"}
49965eef222Smrg    func_fatal_error "$help"
50065eef222Smrg}
50165eef222Smrghelp="Try \`$progname --help' for more information."  ## default
502ef981d24Smrg
503ef981d24Smrg
50465eef222Smrg# func_grep expression filename
50565eef222Smrg# Check whether EXPRESSION matches any line of FILENAME, without output.
50665eef222Smrgfunc_grep ()
50765eef222Smrg{
50865eef222Smrg    $GREP "$1" "$2" >/dev/null 2>&1
50965eef222Smrg}
51065eef222Smrg
51165eef222Smrg
51265eef222Smrg# func_mkdir_p directory-path
51365eef222Smrg# Make sure the entire path to DIRECTORY-PATH is available.
51465eef222Smrgfunc_mkdir_p ()
51565eef222Smrg{
51665eef222Smrg    my_directory_path="$1"
51765eef222Smrg    my_dir_list=
51865eef222Smrg
51965eef222Smrg    if test -n "$my_directory_path" && test "$opt_dry_run" != ":"; then
52065eef222Smrg
52165eef222Smrg      # Protect directory names starting with `-'
52265eef222Smrg      case $my_directory_path in
52365eef222Smrg        -*) my_directory_path="./$my_directory_path" ;;
52465eef222Smrg      esac
52565eef222Smrg
52665eef222Smrg      # While some portion of DIR does not yet exist...
52765eef222Smrg      while test ! -d "$my_directory_path"; do
52865eef222Smrg        # ...make a list in topmost first order.  Use a colon delimited
52965eef222Smrg	# list incase some portion of path contains whitespace.
53065eef222Smrg        my_dir_list="$my_directory_path:$my_dir_list"
53165eef222Smrg
53265eef222Smrg        # If the last portion added has no slash in it, the list is done
53365eef222Smrg        case $my_directory_path in */*) ;; *) break ;; esac
53465eef222Smrg
53565eef222Smrg        # ...otherwise throw away the child directory and loop
53656957a04Smrg        my_directory_path=`$ECHO "$my_directory_path" | $SED -e "$dirname"`
53765eef222Smrg      done
53856957a04Smrg      my_dir_list=`$ECHO "$my_dir_list" | $SED 's,:*$,,'`
53965eef222Smrg
54065eef222Smrg      save_mkdir_p_IFS="$IFS"; IFS=':'
54165eef222Smrg      for my_dir in $my_dir_list; do
54265eef222Smrg	IFS="$save_mkdir_p_IFS"
54365eef222Smrg        # mkdir can fail with a `File exist' error if two processes
54465eef222Smrg        # try to create one of the directories concurrently.  Don't
54565eef222Smrg        # stop in that case!
54665eef222Smrg        $MKDIR "$my_dir" 2>/dev/null || :
54765eef222Smrg      done
54865eef222Smrg      IFS="$save_mkdir_p_IFS"
54965eef222Smrg
55065eef222Smrg      # Bail out if we (or some other process) failed to create a directory.
55165eef222Smrg      test -d "$my_directory_path" || \
55265eef222Smrg        func_fatal_error "Failed to create \`$1'"
55365eef222Smrg    fi
55465eef222Smrg}
555ef981d24Smrg
556ef981d24Smrg
557ef981d24Smrg# func_mktempdir [string]
558ef981d24Smrg# Make a temporary directory that won't clash with other running
559ef981d24Smrg# libtool processes, and avoids race conditions if possible.  If
560ef981d24Smrg# given, STRING is the basename for that directory.
561ef981d24Smrgfunc_mktempdir ()
562ef981d24Smrg{
563ef981d24Smrg    my_template="${TMPDIR-/tmp}/${1-$progname}"
564ef981d24Smrg
56565eef222Smrg    if test "$opt_dry_run" = ":"; then
566ef981d24Smrg      # Return a directory name, but don't create it in dry-run mode
567ef981d24Smrg      my_tmpdir="${my_template}-$$"
568ef981d24Smrg    else
569ef981d24Smrg
570ef981d24Smrg      # If mktemp works, use that first and foremost
571ef981d24Smrg      my_tmpdir=`mktemp -d "${my_template}-XXXXXXXX" 2>/dev/null`
572ef981d24Smrg
573ef981d24Smrg      if test ! -d "$my_tmpdir"; then
57465eef222Smrg        # Failing that, at least try and use $RANDOM to avoid a race
57565eef222Smrg        my_tmpdir="${my_template}-${RANDOM-0}$$"
576ef981d24Smrg
57765eef222Smrg        save_mktempdir_umask=`umask`
57865eef222Smrg        umask 0077
57965eef222Smrg        $MKDIR "$my_tmpdir"
58065eef222Smrg        umask $save_mktempdir_umask
581ef981d24Smrg      fi
582ef981d24Smrg
583ef981d24Smrg      # If we're not in dry-run mode, bomb out on failure
58465eef222Smrg      test -d "$my_tmpdir" || \
58565eef222Smrg        func_fatal_error "cannot create temporary directory \`$my_tmpdir'"
586ef981d24Smrg    fi
587ef981d24Smrg
58856957a04Smrg    $ECHO "$my_tmpdir"
589ef981d24Smrg}
590ef981d24Smrg
591ef981d24Smrg
59265eef222Smrg# func_quote_for_eval arg
59365eef222Smrg# Aesthetically quote ARG to be evaled later.
59465eef222Smrg# This function returns two values: FUNC_QUOTE_FOR_EVAL_RESULT
59565eef222Smrg# is double-quoted, suitable for a subsequent eval, whereas
59665eef222Smrg# FUNC_QUOTE_FOR_EVAL_UNQUOTED_RESULT has merely all characters
59765eef222Smrg# which are still active within double quotes backslashified.
59865eef222Smrgfunc_quote_for_eval ()
599ef981d24Smrg{
60065eef222Smrg    case $1 in
60165eef222Smrg      *[\\\`\"\$]*)
60256957a04Smrg	func_quote_for_eval_unquoted_result=`$ECHO "$1" | $SED "$sed_quote_subst"` ;;
60365eef222Smrg      *)
60465eef222Smrg        func_quote_for_eval_unquoted_result="$1" ;;
60565eef222Smrg    esac
60665eef222Smrg
60765eef222Smrg    case $func_quote_for_eval_unquoted_result in
60865eef222Smrg      # Double-quote args containing shell metacharacters to delay
60965eef222Smrg      # word splitting, command substitution and and variable
61065eef222Smrg      # expansion for a subsequent eval.
61165eef222Smrg      # Many Bourne shells cannot handle close brackets correctly
61265eef222Smrg      # in scan sets, so we specify it separately.
61365eef222Smrg      *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \	]*|*]*|"")
61465eef222Smrg        func_quote_for_eval_result="\"$func_quote_for_eval_unquoted_result\""
61565eef222Smrg        ;;
61665eef222Smrg      *)
61765eef222Smrg        func_quote_for_eval_result="$func_quote_for_eval_unquoted_result"
618ef981d24Smrg    esac
619ef981d24Smrg}
620ef981d24Smrg
621ef981d24Smrg
62265eef222Smrg# func_quote_for_expand arg
62365eef222Smrg# Aesthetically quote ARG to be evaled later; same as above,
62465eef222Smrg# but do not quote variable references.
62565eef222Smrgfunc_quote_for_expand ()
626ef981d24Smrg{
62765eef222Smrg    case $1 in
62865eef222Smrg      *[\\\`\"]*)
62956957a04Smrg	my_arg=`$ECHO "$1" | $SED \
63065eef222Smrg	    -e "$double_quote_subst" -e "$sed_double_backslash"` ;;
631ef981d24Smrg      *)
63265eef222Smrg        my_arg="$1" ;;
63365eef222Smrg    esac
63465eef222Smrg
63565eef222Smrg    case $my_arg in
63665eef222Smrg      # Double-quote args containing shell metacharacters to delay
63765eef222Smrg      # word splitting and command substitution for a subsequent eval.
63865eef222Smrg      # Many Bourne shells cannot handle close brackets correctly
63965eef222Smrg      # in scan sets, so we specify it separately.
64065eef222Smrg      *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \	]*|*]*|"")
64165eef222Smrg        my_arg="\"$my_arg\""
64265eef222Smrg        ;;
64365eef222Smrg    esac
64465eef222Smrg
64565eef222Smrg    func_quote_for_expand_result="$my_arg"
646ef981d24Smrg}
647ef981d24Smrg
648ef981d24Smrg
64965eef222Smrg# func_show_eval cmd [fail_exp]
65065eef222Smrg# Unless opt_silent is true, then output CMD.  Then, if opt_dryrun is
65165eef222Smrg# not true, evaluate CMD.  If the evaluation of CMD fails, and FAIL_EXP
65265eef222Smrg# is given, then evaluate it.
65365eef222Smrgfunc_show_eval ()
654ef981d24Smrg{
65565eef222Smrg    my_cmd="$1"
65665eef222Smrg    my_fail_exp="${2-:}"
657ef981d24Smrg
65865eef222Smrg    ${opt_silent-false} || {
65965eef222Smrg      func_quote_for_expand "$my_cmd"
66065eef222Smrg      eval "func_echo $func_quote_for_expand_result"
66165eef222Smrg    }
66265eef222Smrg
66365eef222Smrg    if ${opt_dry_run-false}; then :; else
66465eef222Smrg      eval "$my_cmd"
66565eef222Smrg      my_status=$?
66665eef222Smrg      if test "$my_status" -eq 0; then :; else
66765eef222Smrg	eval "(exit $my_status); $my_fail_exp"
66865eef222Smrg      fi
669ef981d24Smrg    fi
670ef981d24Smrg}
671ef981d24Smrg
67265eef222Smrg
67365eef222Smrg# func_show_eval_locale cmd [fail_exp]
67465eef222Smrg# Unless opt_silent is true, then output CMD.  Then, if opt_dryrun is
67565eef222Smrg# not true, evaluate CMD.  If the evaluation of CMD fails, and FAIL_EXP
67665eef222Smrg# is given, then evaluate it.  Use the saved locale for evaluation.
67765eef222Smrgfunc_show_eval_locale ()
678ef981d24Smrg{
67965eef222Smrg    my_cmd="$1"
68065eef222Smrg    my_fail_exp="${2-:}"
681ef981d24Smrg
68265eef222Smrg    ${opt_silent-false} || {
68365eef222Smrg      func_quote_for_expand "$my_cmd"
68465eef222Smrg      eval "func_echo $func_quote_for_expand_result"
68565eef222Smrg    }
68665eef222Smrg
68765eef222Smrg    if ${opt_dry_run-false}; then :; else
68865eef222Smrg      eval "$lt_user_locale
68965eef222Smrg	    $my_cmd"
69065eef222Smrg      my_status=$?
69165eef222Smrg      eval "$lt_safe_locale"
69265eef222Smrg      if test "$my_status" -eq 0; then :; else
69365eef222Smrg	eval "(exit $my_status); $my_fail_exp"
694ef981d24Smrg      fi
69565eef222Smrg    fi
696ef981d24Smrg}
697ef981d24Smrg
698200d7199Smrg# func_tr_sh
699200d7199Smrg# Turn $1 into a string suitable for a shell variable name.
700200d7199Smrg# Result is stored in $func_tr_sh_result.  All characters
701200d7199Smrg# not in the set a-zA-Z0-9_ are replaced with '_'. Further,
702200d7199Smrg# if $1 begins with a digit, a '_' is prepended as well.
703200d7199Smrgfunc_tr_sh ()
704200d7199Smrg{
705200d7199Smrg  case $1 in
706200d7199Smrg  [0-9]* | *[!a-zA-Z0-9_]*)
707200d7199Smrg    func_tr_sh_result=`$ECHO "$1" | $SED 's/^\([0-9]\)/_\1/; s/[^a-zA-Z0-9_]/_/g'`
708200d7199Smrg    ;;
709200d7199Smrg  * )
710200d7199Smrg    func_tr_sh_result=$1
711200d7199Smrg    ;;
712200d7199Smrg  esac
713200d7199Smrg}
714200d7199Smrg
715ef981d24Smrg
71665eef222Smrg# func_version
71765eef222Smrg# Echo version message to standard output and exit.
71865eef222Smrgfunc_version ()
71965eef222Smrg{
720200d7199Smrg    $opt_debug
721200d7199Smrg
72256957a04Smrg    $SED -n '/(C)/!b go
72356957a04Smrg	:more
72456957a04Smrg	/\./!{
72556957a04Smrg	  N
72656957a04Smrg	  s/\n# / /
72756957a04Smrg	  b more
72856957a04Smrg	}
72956957a04Smrg	:go
73056957a04Smrg	/^# '$PROGRAM' (GNU /,/# warranty; / {
73165eef222Smrg        s/^# //
73265eef222Smrg	s/^# *$//
73365eef222Smrg        s/\((C)\)[ 0-9,-]*\( [1-9][0-9]*\)/\1\2/
73465eef222Smrg        p
73565eef222Smrg     }' < "$progpath"
73665eef222Smrg     exit $?
73765eef222Smrg}
73865eef222Smrg
73965eef222Smrg# func_usage
74065eef222Smrg# Echo short help message to standard output and exit.
74165eef222Smrgfunc_usage ()
74265eef222Smrg{
743200d7199Smrg    $opt_debug
744200d7199Smrg
74556957a04Smrg    $SED -n '/^# Usage:/,/^#  *.*--help/ {
74665eef222Smrg        s/^# //
74765eef222Smrg	s/^# *$//
74865eef222Smrg	s/\$progname/'$progname'/
74965eef222Smrg	p
75065eef222Smrg    }' < "$progpath"
75156957a04Smrg    echo
75265eef222Smrg    $ECHO "run \`$progname --help | more' for full usage"
75365eef222Smrg    exit $?
75465eef222Smrg}
75565eef222Smrg
75656957a04Smrg# func_help [NOEXIT]
75756957a04Smrg# Echo long help message to standard output and exit,
75856957a04Smrg# unless 'noexit' is passed as argument.
75965eef222Smrgfunc_help ()
76065eef222Smrg{
761200d7199Smrg    $opt_debug
762200d7199Smrg
76365eef222Smrg    $SED -n '/^# Usage:/,/# Report bugs to/ {
764200d7199Smrg	:print
76565eef222Smrg        s/^# //
76665eef222Smrg	s/^# *$//
76765eef222Smrg	s*\$progname*'$progname'*
76865eef222Smrg	s*\$host*'"$host"'*
76965eef222Smrg	s*\$SHELL*'"$SHELL"'*
77065eef222Smrg	s*\$LTCC*'"$LTCC"'*
77165eef222Smrg	s*\$LTCFLAGS*'"$LTCFLAGS"'*
77265eef222Smrg	s*\$LD*'"$LD"'*
77365eef222Smrg	s/\$with_gnu_ld/'"$with_gnu_ld"'/
77465eef222Smrg	s/\$automake_version/'"`(automake --version) 2>/dev/null |$SED 1q`"'/
77565eef222Smrg	s/\$autoconf_version/'"`(autoconf --version) 2>/dev/null |$SED 1q`"'/
77665eef222Smrg	p
777200d7199Smrg	d
778200d7199Smrg     }
779200d7199Smrg     /^# .* home page:/b print
780200d7199Smrg     /^# General help using/b print
781200d7199Smrg     ' < "$progpath"
78256957a04Smrg    ret=$?
78356957a04Smrg    if test -z "$1"; then
78456957a04Smrg      exit $ret
78556957a04Smrg    fi
78665eef222Smrg}
78765eef222Smrg
78865eef222Smrg# func_missing_arg argname
78965eef222Smrg# Echo program name prefixed message to standard error and set global
79065eef222Smrg# exit_cmd.
79165eef222Smrgfunc_missing_arg ()
79265eef222Smrg{
793200d7199Smrg    $opt_debug
794200d7199Smrg
79556957a04Smrg    func_error "missing argument for $1."
79665eef222Smrg    exit_cmd=exit
79765eef222Smrg}
79865eef222Smrg
79965eef222Smrg
800200d7199Smrg# func_split_short_opt shortopt
801200d7199Smrg# Set func_split_short_opt_name and func_split_short_opt_arg shell
802200d7199Smrg# variables after splitting SHORTOPT after the 2nd character.
803200d7199Smrgfunc_split_short_opt ()
804200d7199Smrg{
805200d7199Smrg    my_sed_short_opt='1s/^\(..\).*$/\1/;q'
806200d7199Smrg    my_sed_short_rest='1s/^..\(.*\)$/\1/;q'
807200d7199Smrg
808200d7199Smrg    func_split_short_opt_name=`$ECHO "$1" | $SED "$my_sed_short_opt"`
809200d7199Smrg    func_split_short_opt_arg=`$ECHO "$1" | $SED "$my_sed_short_rest"`
810200d7199Smrg} # func_split_short_opt may be replaced by extended shell implementation
811200d7199Smrg
812200d7199Smrg
813200d7199Smrg# func_split_long_opt longopt
814200d7199Smrg# Set func_split_long_opt_name and func_split_long_opt_arg shell
815200d7199Smrg# variables after splitting LONGOPT at the `=' sign.
816200d7199Smrgfunc_split_long_opt ()
817200d7199Smrg{
818200d7199Smrg    my_sed_long_opt='1s/^\(--[^=]*\)=.*/\1/;q'
819200d7199Smrg    my_sed_long_arg='1s/^--[^=]*=//'
820200d7199Smrg
821200d7199Smrg    func_split_long_opt_name=`$ECHO "$1" | $SED "$my_sed_long_opt"`
822200d7199Smrg    func_split_long_opt_arg=`$ECHO "$1" | $SED "$my_sed_long_arg"`
823200d7199Smrg} # func_split_long_opt may be replaced by extended shell implementation
824200d7199Smrg
825200d7199Smrgexit_cmd=:
82665eef222Smrg
82765eef222Smrg
82865eef222Smrg
82965eef222Smrg
830ef981d24Smrg
83165eef222Smrgmagic="%%%MAGIC variable%%%"
83265eef222Smrgmagic_exe="%%%MAGIC EXE variable%%%"
833ef981d24Smrg
83465eef222Smrg# Global variables.
83565eef222Smrgnonopt=
83665eef222Smrgpreserve_args=
83765eef222Smrglo2o="s/\\.lo\$/.${objext}/"
83865eef222Smrgo2lo="s/\\.${objext}\$/.lo/"
83965eef222Smrgextracted_archives=
84065eef222Smrgextracted_serial=0
841ef981d24Smrg
84265eef222Smrg# If this variable is set in any of the actions, the command in it
84365eef222Smrg# will be execed at the end.  This prevents here-documents from being
84465eef222Smrg# left over by shells.
84565eef222Smrgexec_cmd=
846ef981d24Smrg
847200d7199Smrg# func_append var value
848200d7199Smrg# Append VALUE to the end of shell variable VAR.
849200d7199Smrgfunc_append ()
850200d7199Smrg{
851200d7199Smrg    eval "${1}=\$${1}\${2}"
852200d7199Smrg} # func_append may be replaced by extended shell implementation
853200d7199Smrg
854200d7199Smrg# func_append_quoted var value
855200d7199Smrg# Quote VALUE and append to the end of shell variable VAR, separated
856200d7199Smrg# by a space.
857200d7199Smrgfunc_append_quoted ()
858200d7199Smrg{
859200d7199Smrg    func_quote_for_eval "${2}"
860200d7199Smrg    eval "${1}=\$${1}\\ \$func_quote_for_eval_result"
861200d7199Smrg} # func_append_quoted may be replaced by extended shell implementation
862200d7199Smrg
863200d7199Smrg
864200d7199Smrg# func_arith arithmetic-term...
865200d7199Smrgfunc_arith ()
866200d7199Smrg{
867200d7199Smrg    func_arith_result=`expr "${@}"`
868200d7199Smrg} # func_arith may be replaced by extended shell implementation
869200d7199Smrg
870200d7199Smrg
871200d7199Smrg# func_len string
872200d7199Smrg# STRING may not start with a hyphen.
873200d7199Smrgfunc_len ()
874200d7199Smrg{
875200d7199Smrg    func_len_result=`expr "${1}" : ".*" 2>/dev/null || echo $max_cmd_len`
876200d7199Smrg} # func_len may be replaced by extended shell implementation
877200d7199Smrg
878200d7199Smrg
879200d7199Smrg# func_lo2o object
880200d7199Smrgfunc_lo2o ()
881200d7199Smrg{
882200d7199Smrg    func_lo2o_result=`$ECHO "${1}" | $SED "$lo2o"`
883200d7199Smrg} # func_lo2o may be replaced by extended shell implementation
884200d7199Smrg
885200d7199Smrg
886200d7199Smrg# func_xform libobj-or-source
887200d7199Smrgfunc_xform ()
888200d7199Smrg{
889200d7199Smrg    func_xform_result=`$ECHO "${1}" | $SED 's/\.[^.]*$/.lo/'`
890200d7199Smrg} # func_xform may be replaced by extended shell implementation
891200d7199Smrg
892200d7199Smrg
89365eef222Smrg# func_fatal_configuration arg...
89465eef222Smrg# Echo program name prefixed message to standard error, followed by
89565eef222Smrg# a configuration failure hint, and exit.
89665eef222Smrgfunc_fatal_configuration ()
89765eef222Smrg{
89865eef222Smrg    func_error ${1+"$@"}
89965eef222Smrg    func_error "See the $PACKAGE documentation for more information."
90065eef222Smrg    func_fatal_error "Fatal configuration error."
90165eef222Smrg}
90265eef222Smrg
90365eef222Smrg
90465eef222Smrg# func_config
90565eef222Smrg# Display the configuration for all the tags in this script.
90665eef222Smrgfunc_config ()
90765eef222Smrg{
90865eef222Smrg    re_begincf='^# ### BEGIN LIBTOOL'
90965eef222Smrg    re_endcf='^# ### END LIBTOOL'
91065eef222Smrg
91165eef222Smrg    # Default configuration.
91265eef222Smrg    $SED "1,/$re_begincf CONFIG/d;/$re_endcf CONFIG/,\$d" < "$progpath"
913ef981d24Smrg
914ef981d24Smrg    # Now print the configurations for the tags.
915ef981d24Smrg    for tagname in $taglist; do
91665eef222Smrg      $SED -n "/$re_begincf TAG CONFIG: $tagname\$/,/$re_endcf TAG CONFIG: $tagname\$/p" < "$progpath"
917ef981d24Smrg    done
918ef981d24Smrg
91965eef222Smrg    exit $?
92065eef222Smrg}
921ef981d24Smrg
92265eef222Smrg# func_features
92365eef222Smrg# Display the features supported by this script.
92465eef222Smrgfunc_features ()
92565eef222Smrg{
92656957a04Smrg    echo "host: $host"
927ef981d24Smrg    if test "$build_libtool_libs" = yes; then
92856957a04Smrg      echo "enable shared libraries"
929ef981d24Smrg    else
93056957a04Smrg      echo "disable shared libraries"
931ef981d24Smrg    fi
932ef981d24Smrg    if test "$build_old_libs" = yes; then
93356957a04Smrg      echo "enable static libraries"
934ef981d24Smrg    else
93556957a04Smrg      echo "disable static libraries"
936ef981d24Smrg    fi
93765eef222Smrg
938ef981d24Smrg    exit $?
93965eef222Smrg}
94065eef222Smrg
94165eef222Smrg# func_enable_tag tagname
94265eef222Smrg# Verify that TAGNAME is valid, and either flag an error and exit, or
94365eef222Smrg# enable the TAGNAME tag.  We also add TAGNAME to the global $taglist
94465eef222Smrg# variable here.
94565eef222Smrgfunc_enable_tag ()
94665eef222Smrg{
94765eef222Smrg  # Global variable:
94865eef222Smrg  tagname="$1"
949ef981d24Smrg
95065eef222Smrg  re_begincf="^# ### BEGIN LIBTOOL TAG CONFIG: $tagname\$"
95165eef222Smrg  re_endcf="^# ### END LIBTOOL TAG CONFIG: $tagname\$"
95265eef222Smrg  sed_extractcf="/$re_begincf/,/$re_endcf/p"
953ef981d24Smrg
95465eef222Smrg  # Validate tagname.
95565eef222Smrg  case $tagname in
95665eef222Smrg    *[!-_A-Za-z0-9,/]*)
95765eef222Smrg      func_fatal_error "invalid tag name: $tagname"
95865eef222Smrg      ;;
95965eef222Smrg  esac
960ef981d24Smrg
96165eef222Smrg  # Don't test for the "default" C tag, as we know it's
96265eef222Smrg  # there but not specially marked.
96365eef222Smrg  case $tagname in
96465eef222Smrg    CC) ;;
96565eef222Smrg    *)
96665eef222Smrg      if $GREP "$re_begincf" "$progpath" >/dev/null 2>&1; then
96765eef222Smrg	taglist="$taglist $tagname"
96865eef222Smrg
96965eef222Smrg	# Evaluate the configuration.  Be careful to quote the path
97065eef222Smrg	# and the sed script, to avoid splitting on whitespace, but
97165eef222Smrg	# also don't use non-portable quotes within backquotes within
97265eef222Smrg	# quotes we have to do it in 2 steps:
97365eef222Smrg	extractedcf=`$SED -n -e "$sed_extractcf" < "$progpath"`
97465eef222Smrg	eval "$extractedcf"
97565eef222Smrg      else
97665eef222Smrg	func_error "ignoring unknown tag $tagname"
97765eef222Smrg      fi
97865eef222Smrg      ;;
97965eef222Smrg  esac
98065eef222Smrg}
981ef981d24Smrg
982200d7199Smrg# func_check_version_match
983200d7199Smrg# Ensure that we are using m4 macros, and libtool script from the same
984200d7199Smrg# release of libtool.
985200d7199Smrgfunc_check_version_match ()
98665eef222Smrg{
987200d7199Smrg  if test "$package_revision" != "$macro_revision"; then
988200d7199Smrg    if test "$VERSION" != "$macro_version"; then
989200d7199Smrg      if test -z "$macro_version"; then
990200d7199Smrg        cat >&2 <<_LT_EOF
991200d7199Smrg$progname: Version mismatch error.  This is $PACKAGE $VERSION, but the
992200d7199Smrg$progname: definition of this LT_INIT comes from an older release.
993200d7199Smrg$progname: You should recreate aclocal.m4 with macros from $PACKAGE $VERSION
994200d7199Smrg$progname: and run autoconf again.
995200d7199Smrg_LT_EOF
996200d7199Smrg      else
997200d7199Smrg        cat >&2 <<_LT_EOF
998200d7199Smrg$progname: Version mismatch error.  This is $PACKAGE $VERSION, but the
999200d7199Smrg$progname: definition of this LT_INIT comes from $PACKAGE $macro_version.
1000200d7199Smrg$progname: You should recreate aclocal.m4 with macros from $PACKAGE $VERSION
1001200d7199Smrg$progname: and run autoconf again.
1002200d7199Smrg_LT_EOF
1003200d7199Smrg      fi
1004200d7199Smrg    else
1005200d7199Smrg      cat >&2 <<_LT_EOF
1006200d7199Smrg$progname: Version mismatch error.  This is $PACKAGE $VERSION, revision $package_revision,
1007200d7199Smrg$progname: but the definition of this LT_INIT comes from revision $macro_revision.
1008200d7199Smrg$progname: You should recreate aclocal.m4 with macros from revision $package_revision
1009200d7199Smrg$progname: of $PACKAGE $VERSION and run autoconf again.
1010200d7199Smrg_LT_EOF
1011200d7199Smrg    fi
1012ef981d24Smrg
1013200d7199Smrg    exit $EXIT_MISMATCH
1014200d7199Smrg  fi
1015200d7199Smrg}
1016200d7199Smrg
1017200d7199Smrg
1018200d7199Smrg# Shorthand for --mode=foo, only valid as the first argument
1019200d7199Smrgcase $1 in
1020200d7199Smrgclean|clea|cle|cl)
1021200d7199Smrg  shift; set dummy --mode clean ${1+"$@"}; shift
1022200d7199Smrg  ;;
1023200d7199Smrgcompile|compil|compi|comp|com|co|c)
1024200d7199Smrg  shift; set dummy --mode compile ${1+"$@"}; shift
1025200d7199Smrg  ;;
1026200d7199Smrgexecute|execut|execu|exec|exe|ex|e)
1027200d7199Smrg  shift; set dummy --mode execute ${1+"$@"}; shift
1028200d7199Smrg  ;;
1029200d7199Smrgfinish|finis|fini|fin|fi|f)
1030200d7199Smrg  shift; set dummy --mode finish ${1+"$@"}; shift
1031200d7199Smrg  ;;
1032200d7199Smrginstall|instal|insta|inst|ins|in|i)
1033200d7199Smrg  shift; set dummy --mode install ${1+"$@"}; shift
1034200d7199Smrg  ;;
1035200d7199Smrglink|lin|li|l)
1036200d7199Smrg  shift; set dummy --mode link ${1+"$@"}; shift
1037200d7199Smrg  ;;
1038200d7199Smrguninstall|uninstal|uninsta|uninst|unins|unin|uni|un|u)
1039200d7199Smrg  shift; set dummy --mode uninstall ${1+"$@"}; shift
1040200d7199Smrg  ;;
1041200d7199Smrgesac
1042ef981d24Smrg
1043200d7199Smrg
1044200d7199Smrg
1045200d7199Smrg# Option defaults:
1046200d7199Smrgopt_debug=:
1047200d7199Smrgopt_dry_run=false
1048200d7199Smrgopt_config=false
1049200d7199Smrgopt_preserve_dup_deps=false
1050200d7199Smrgopt_features=false
1051200d7199Smrgopt_finish=false
1052200d7199Smrgopt_help=false
1053200d7199Smrgopt_help_all=false
1054200d7199Smrgopt_silent=:
1055200d7199Smrgopt_verbose=:
1056200d7199Smrgopt_silent=false
1057200d7199Smrgopt_verbose=false
1058200d7199Smrg
1059200d7199Smrg
1060200d7199Smrg# Parse options once, thoroughly.  This comes as soon as possible in the
1061200d7199Smrg# script to make things like `--version' happen as quickly as we can.
1062200d7199Smrg{
1063200d7199Smrg  # this just eases exit handling
1064200d7199Smrg  while test $# -gt 0; do
106565eef222Smrg    opt="$1"
106665eef222Smrg    shift
106765eef222Smrg    case $opt in
1068200d7199Smrg      --debug|-x)	opt_debug='set -x'
106965eef222Smrg			func_echo "enabling shell trace mode"
107065eef222Smrg			$opt_debug
107165eef222Smrg			;;
1072200d7199Smrg      --dry-run|--dryrun|-n)
1073200d7199Smrg			opt_dry_run=:
107465eef222Smrg			;;
1075200d7199Smrg      --config)
1076200d7199Smrg			opt_config=:
1077200d7199Smrgfunc_config
1078200d7199Smrg			;;
1079200d7199Smrg      --dlopen|-dlopen)
1080200d7199Smrg			optarg="$1"
1081200d7199Smrg			opt_dlopen="${opt_dlopen+$opt_dlopen
1082200d7199Smrg}$optarg"
108365eef222Smrg			shift
108465eef222Smrg			;;
108565eef222Smrg      --preserve-dup-deps)
1086200d7199Smrg			opt_preserve_dup_deps=:
108756957a04Smrg			;;
1088200d7199Smrg      --features)
1089200d7199Smrg			opt_features=:
1090200d7199Smrgfunc_features
109165eef222Smrg			;;
1092200d7199Smrg      --finish)
1093200d7199Smrg			opt_finish=:
1094200d7199Smrgset dummy --mode finish ${1+"$@"}; shift
1095200d7199Smrg			;;
1096200d7199Smrg      --help)
1097200d7199Smrg			opt_help=:
1098200d7199Smrg			;;
1099200d7199Smrg      --help-all)
1100200d7199Smrg			opt_help_all=:
1101200d7199Smrgopt_help=': help-all'
1102200d7199Smrg			;;
1103200d7199Smrg      --mode)
1104200d7199Smrg			test $# = 0 && func_missing_arg $opt && break
1105200d7199Smrg			optarg="$1"
1106200d7199Smrg			opt_mode="$optarg"
1107200d7199Smrgcase $optarg in
1108200d7199Smrg  # Valid mode arguments:
1109200d7199Smrg  clean|compile|execute|finish|install|link|relink|uninstall) ;;
1110200d7199Smrg
1111200d7199Smrg  # Catch anything else as an error
1112200d7199Smrg  *) func_error "invalid argument for $opt"
1113200d7199Smrg     exit_cmd=exit
1114200d7199Smrg     break
1115200d7199Smrg     ;;
1116200d7199Smrgesac
1117200d7199Smrg			shift
1118200d7199Smrg			;;
1119200d7199Smrg      --no-silent|--no-quiet)
112065eef222Smrg			opt_silent=false
1121200d7199Smrgfunc_append preserve_args " $opt"
112256957a04Smrg			;;
1123200d7199Smrg      --no-verbose)
112456957a04Smrg			opt_verbose=false
1125200d7199Smrgfunc_append preserve_args " $opt"
112665eef222Smrg			;;
1127200d7199Smrg      --silent|--quiet)
1128200d7199Smrg			opt_silent=:
1129200d7199Smrgfunc_append preserve_args " $opt"
1130200d7199Smrg        opt_verbose=false
1131200d7199Smrg			;;
1132200d7199Smrg      --verbose|-v)
1133200d7199Smrg			opt_verbose=:
1134200d7199Smrgfunc_append preserve_args " $opt"
1135200d7199Smrgopt_silent=false
1136200d7199Smrg			;;
1137200d7199Smrg      --tag)
1138200d7199Smrg			test $# = 0 && func_missing_arg $opt && break
1139200d7199Smrg			optarg="$1"
1140200d7199Smrg			opt_tag="$optarg"
1141200d7199Smrgfunc_append preserve_args " $opt $optarg"
1142200d7199Smrgfunc_enable_tag "$optarg"
114365eef222Smrg			shift
114465eef222Smrg			;;
114565eef222Smrg
1146200d7199Smrg      -\?|-h)		func_usage				;;
1147200d7199Smrg      --help)		func_help				;;
1148200d7199Smrg      --version)	func_version				;;
1149200d7199Smrg
115065eef222Smrg      # Separate optargs to long options:
1151200d7199Smrg      --*=*)
1152200d7199Smrg			func_split_long_opt "$opt"
1153200d7199Smrg			set dummy "$func_split_long_opt_name" "$func_split_long_opt_arg" ${1+"$@"}
115465eef222Smrg			shift
115565eef222Smrg			;;
115665eef222Smrg
1157200d7199Smrg      # Separate non-argument short options:
1158200d7199Smrg      -\?*|-h*|-n*|-v*)
1159200d7199Smrg			func_split_short_opt "$opt"
1160200d7199Smrg			set dummy "$func_split_short_opt_name" "-$func_split_short_opt_arg" ${1+"$@"}
1161200d7199Smrg			shift
116265eef222Smrg			;;
1163200d7199Smrg
1164200d7199Smrg      --)		break					;;
1165200d7199Smrg      -*)		func_fatal_help "unrecognized option \`$opt'" ;;
1166200d7199Smrg      *)		set dummy "$opt" ${1+"$@"};	shift; break  ;;
116765eef222Smrg    esac
116865eef222Smrg  done
116965eef222Smrg
1170200d7199Smrg  # Validate options:
1171200d7199Smrg
1172200d7199Smrg  # save first non-option argument
1173200d7199Smrg  if test "$#" -gt 0; then
1174200d7199Smrg    nonopt="$opt"
1175200d7199Smrg    shift
1176200d7199Smrg  fi
1177200d7199Smrg
1178200d7199Smrg  # preserve --debug
1179200d7199Smrg  test "$opt_debug" = : || func_append preserve_args " --debug"
118065eef222Smrg
118165eef222Smrg  case $host in
118265eef222Smrg    *cygwin* | *mingw* | *pw32* | *cegcc*)
118365eef222Smrg      # don't eliminate duplications in $postdeps and $predeps
118465eef222Smrg      opt_duplicate_compiler_generated_deps=:
1185ef981d24Smrg      ;;
1186ef981d24Smrg    *)
1187200d7199Smrg      opt_duplicate_compiler_generated_deps=$opt_preserve_dup_deps
118865eef222Smrg      ;;
118965eef222Smrg  esac
1190ef981d24Smrg
1191200d7199Smrg  $opt_help || {
1192200d7199Smrg    # Sanity checks first:
1193200d7199Smrg    func_check_version_match
119465eef222Smrg
1195200d7199Smrg    if test "$build_libtool_libs" != yes && test "$build_old_libs" != yes; then
1196200d7199Smrg      func_fatal_configuration "not configured to build any kind of library"
119765eef222Smrg    fi
119865eef222Smrg
1199200d7199Smrg    # Darwin sucks
1200200d7199Smrg    eval std_shrext=\"$shrext_cmds\"
120165eef222Smrg
1202200d7199Smrg    # Only execute mode is allowed to have -dlopen flags.
1203200d7199Smrg    if test -n "$opt_dlopen" && test "$opt_mode" != execute; then
1204200d7199Smrg      func_error "unrecognized option \`-dlopen'"
1205200d7199Smrg      $ECHO "$help" 1>&2
1206200d7199Smrg      exit $EXIT_FAILURE
1207200d7199Smrg    fi
120865eef222Smrg
1209200d7199Smrg    # Change the help message to a mode-specific one.
1210200d7199Smrg    generic_help="$help"
1211200d7199Smrg    help="Try \`$progname --help --mode=$opt_mode' for more information."
1212200d7199Smrg  }
121365eef222Smrg
121465eef222Smrg
1215200d7199Smrg  # Bail if the options were screwed
1216200d7199Smrg  $exit_cmd $EXIT_FAILURE
1217200d7199Smrg}
121865eef222Smrg
121965eef222Smrg
1220ef981d24Smrg
1221ef981d24Smrg
1222200d7199Smrg## ----------- ##
1223200d7199Smrg##    Main.    ##
1224200d7199Smrg## ----------- ##
1225ef981d24Smrg
122665eef222Smrg# func_lalib_p file
122765eef222Smrg# True iff FILE is a libtool `.la' library or `.lo' object file.
122865eef222Smrg# This function is only a basic sanity check; it will hardly flush out
122965eef222Smrg# determined imposters.
123065eef222Smrgfunc_lalib_p ()
123165eef222Smrg{
123265eef222Smrg    test -f "$1" &&
123365eef222Smrg      $SED -e 4q "$1" 2>/dev/null \
123465eef222Smrg        | $GREP "^# Generated by .*$PACKAGE" > /dev/null 2>&1
123565eef222Smrg}
1236ef981d24Smrg
123765eef222Smrg# func_lalib_unsafe_p file
123865eef222Smrg# True iff FILE is a libtool `.la' library or `.lo' object file.
123965eef222Smrg# This function implements the same check as func_lalib_p without
124065eef222Smrg# resorting to external programs.  To this end, it redirects stdin and
124165eef222Smrg# closes it afterwards, without saving the original file descriptor.
124265eef222Smrg# As a safety measure, use it only where a negative result would be
124365eef222Smrg# fatal anyway.  Works if `file' does not exist.
124465eef222Smrgfunc_lalib_unsafe_p ()
124565eef222Smrg{
124665eef222Smrg    lalib_p=no
124765eef222Smrg    if test -f "$1" && test -r "$1" && exec 5<&0 <"$1"; then
124865eef222Smrg	for lalib_p_l in 1 2 3 4
124965eef222Smrg	do
125065eef222Smrg	    read lalib_p_line
125165eef222Smrg	    case "$lalib_p_line" in
125265eef222Smrg		\#\ Generated\ by\ *$PACKAGE* ) lalib_p=yes; break;;
125365eef222Smrg	    esac
125465eef222Smrg	done
125565eef222Smrg	exec 0<&5 5<&-
125665eef222Smrg    fi
125765eef222Smrg    test "$lalib_p" = yes
125865eef222Smrg}
1259ef981d24Smrg
126065eef222Smrg# func_ltwrapper_script_p file
126165eef222Smrg# True iff FILE is a libtool wrapper script
126265eef222Smrg# This function is only a basic sanity check; it will hardly flush out
126365eef222Smrg# determined imposters.
126465eef222Smrgfunc_ltwrapper_script_p ()
126565eef222Smrg{
126665eef222Smrg    func_lalib_p "$1"
126765eef222Smrg}
1268ef981d24Smrg
126965eef222Smrg# func_ltwrapper_executable_p file
127065eef222Smrg# True iff FILE is a libtool wrapper executable
127165eef222Smrg# This function is only a basic sanity check; it will hardly flush out
127265eef222Smrg# determined imposters.
127365eef222Smrgfunc_ltwrapper_executable_p ()
127465eef222Smrg{
127565eef222Smrg    func_ltwrapper_exec_suffix=
127665eef222Smrg    case $1 in
127765eef222Smrg    *.exe) ;;
127865eef222Smrg    *) func_ltwrapper_exec_suffix=.exe ;;
127965eef222Smrg    esac
128065eef222Smrg    $GREP "$magic_exe" "$1$func_ltwrapper_exec_suffix" >/dev/null 2>&1
128165eef222Smrg}
1282ef981d24Smrg
128365eef222Smrg# func_ltwrapper_scriptname file
128465eef222Smrg# Assumes file is an ltwrapper_executable
128565eef222Smrg# uses $file to determine the appropriate filename for a
128665eef222Smrg# temporary ltwrapper_script.
128765eef222Smrgfunc_ltwrapper_scriptname ()
128865eef222Smrg{
1289200d7199Smrg    func_dirname_and_basename "$1" "" "."
1290200d7199Smrg    func_stripname '' '.exe' "$func_basename_result"
1291200d7199Smrg    func_ltwrapper_scriptname_result="$func_dirname_result/$objdir/${func_stripname_result}_ltshwrapper"
129265eef222Smrg}
1293ef981d24Smrg
129465eef222Smrg# func_ltwrapper_p file
129565eef222Smrg# True iff FILE is a libtool wrapper script or wrapper executable
129665eef222Smrg# This function is only a basic sanity check; it will hardly flush out
129765eef222Smrg# determined imposters.
129865eef222Smrgfunc_ltwrapper_p ()
129965eef222Smrg{
130065eef222Smrg    func_ltwrapper_script_p "$1" || func_ltwrapper_executable_p "$1"
130165eef222Smrg}
1302ef981d24Smrg
1303ef981d24Smrg
130465eef222Smrg# func_execute_cmds commands fail_cmd
130565eef222Smrg# Execute tilde-delimited COMMANDS.
130665eef222Smrg# If FAIL_CMD is given, eval that upon failure.
130765eef222Smrg# FAIL_CMD may read-access the current command in variable CMD!
130865eef222Smrgfunc_execute_cmds ()
130965eef222Smrg{
131065eef222Smrg    $opt_debug
131165eef222Smrg    save_ifs=$IFS; IFS='~'
131265eef222Smrg    for cmd in $1; do
131365eef222Smrg      IFS=$save_ifs
131465eef222Smrg      eval cmd=\"$cmd\"
131565eef222Smrg      func_show_eval "$cmd" "${2-:}"
131665eef222Smrg    done
131765eef222Smrg    IFS=$save_ifs
131865eef222Smrg}
131965eef222Smrg
132065eef222Smrg
132165eef222Smrg# func_source file
132265eef222Smrg# Source FILE, adding directory component if necessary.
132365eef222Smrg# Note that it is not necessary on cygwin/mingw to append a dot to
132465eef222Smrg# FILE even if both FILE and FILE.exe exist: automatic-append-.exe
132565eef222Smrg# behavior happens only for exec(3), not for open(2)!  Also, sourcing
132665eef222Smrg# `FILE.' does not work on cygwin managed mounts.
132765eef222Smrgfunc_source ()
132865eef222Smrg{
132965eef222Smrg    $opt_debug
133065eef222Smrg    case $1 in
133165eef222Smrg    */* | *\\*)	. "$1" ;;
133265eef222Smrg    *)		. "./$1" ;;
133365eef222Smrg    esac
133465eef222Smrg}
133565eef222Smrg
133665eef222Smrg
1337200d7199Smrg# func_resolve_sysroot PATH
1338200d7199Smrg# Replace a leading = in PATH with a sysroot.  Store the result into
1339200d7199Smrg# func_resolve_sysroot_result
1340200d7199Smrgfunc_resolve_sysroot ()
1341200d7199Smrg{
1342200d7199Smrg  func_resolve_sysroot_result=$1
1343200d7199Smrg  case $func_resolve_sysroot_result in
1344200d7199Smrg  =*)
1345200d7199Smrg    func_stripname '=' '' "$func_resolve_sysroot_result"
1346200d7199Smrg    func_resolve_sysroot_result=$lt_sysroot$func_stripname_result
1347200d7199Smrg    ;;
1348200d7199Smrg  esac
1349200d7199Smrg}
1350200d7199Smrg
1351200d7199Smrg# func_replace_sysroot PATH
1352200d7199Smrg# If PATH begins with the sysroot, replace it with = and
1353200d7199Smrg# store the result into func_replace_sysroot_result.
1354200d7199Smrgfunc_replace_sysroot ()
1355200d7199Smrg{
1356200d7199Smrg  case "$lt_sysroot:$1" in
1357200d7199Smrg  ?*:"$lt_sysroot"*)
1358200d7199Smrg    func_stripname "$lt_sysroot" '' "$1"
1359200d7199Smrg    func_replace_sysroot_result="=$func_stripname_result"
1360200d7199Smrg    ;;
1361200d7199Smrg  *)
1362200d7199Smrg    # Including no sysroot.
1363200d7199Smrg    func_replace_sysroot_result=$1
1364200d7199Smrg    ;;
1365200d7199Smrg  esac
1366200d7199Smrg}
1367200d7199Smrg
136865eef222Smrg# func_infer_tag arg
136965eef222Smrg# Infer tagged configuration to use if any are available and
137065eef222Smrg# if one wasn't chosen via the "--tag" command line option.
137165eef222Smrg# Only attempt this if the compiler in the base compile
137265eef222Smrg# command doesn't match the default compiler.
137365eef222Smrg# arg is usually of the form 'gcc ...'
137465eef222Smrgfunc_infer_tag ()
137565eef222Smrg{
137665eef222Smrg    $opt_debug
137765eef222Smrg    if test -n "$available_tags" && test -z "$tagname"; then
137865eef222Smrg      CC_quoted=
137965eef222Smrg      for arg in $CC; do
1380200d7199Smrg	func_append_quoted CC_quoted "$arg"
138165eef222Smrg      done
138256957a04Smrg      CC_expanded=`func_echo_all $CC`
138356957a04Smrg      CC_quoted_expanded=`func_echo_all $CC_quoted`
138465eef222Smrg      case $@ in
138565eef222Smrg      # Blanks in the command may have been stripped by the calling shell,
138665eef222Smrg      # but not from the CC environment variable when configure was run.
138756957a04Smrg      " $CC "* | "$CC "* | " $CC_expanded "* | "$CC_expanded "* | \
138856957a04Smrg      " $CC_quoted"* | "$CC_quoted "* | " $CC_quoted_expanded "* | "$CC_quoted_expanded "*) ;;
138965eef222Smrg      # Blanks at the start of $base_compile will cause this to fail
139065eef222Smrg      # if we don't check for them as well.
139165eef222Smrg      *)
139265eef222Smrg	for z in $available_tags; do
139365eef222Smrg	  if $GREP "^# ### BEGIN LIBTOOL TAG CONFIG: $z$" < "$progpath" > /dev/null; then
139465eef222Smrg	    # Evaluate the configuration.
139565eef222Smrg	    eval "`${SED} -n -e '/^# ### BEGIN LIBTOOL TAG CONFIG: '$z'$/,/^# ### END LIBTOOL TAG CONFIG: '$z'$/p' < $progpath`"
139665eef222Smrg	    CC_quoted=
139765eef222Smrg	    for arg in $CC; do
139865eef222Smrg	      # Double-quote args containing other shell metacharacters.
1399200d7199Smrg	      func_append_quoted CC_quoted "$arg"
140065eef222Smrg	    done
140156957a04Smrg	    CC_expanded=`func_echo_all $CC`
140256957a04Smrg	    CC_quoted_expanded=`func_echo_all $CC_quoted`
140365eef222Smrg	    case "$@ " in
140456957a04Smrg	    " $CC "* | "$CC "* | " $CC_expanded "* | "$CC_expanded "* | \
140556957a04Smrg	    " $CC_quoted"* | "$CC_quoted "* | " $CC_quoted_expanded "* | "$CC_quoted_expanded "*)
140665eef222Smrg	      # The compiler in the base compile command matches
140765eef222Smrg	      # the one in the tagged configuration.
140865eef222Smrg	      # Assume this is the tagged configuration we want.
140965eef222Smrg	      tagname=$z
141065eef222Smrg	      break
141165eef222Smrg	      ;;
1412ef981d24Smrg	    esac
141365eef222Smrg	  fi
141465eef222Smrg	done
141565eef222Smrg	# If $tagname still isn't set, then no tagged configuration
141665eef222Smrg	# was found and let the user know that the "--tag" command
141765eef222Smrg	# line option must be used.
141865eef222Smrg	if test -z "$tagname"; then
141965eef222Smrg	  func_echo "unable to infer tagged configuration"
142065eef222Smrg	  func_fatal_error "specify a tag with \`--tag'"
142165eef222Smrg#	else
142265eef222Smrg#	  func_verbose "using $tagname tagged configuration"
142365eef222Smrg	fi
142465eef222Smrg	;;
142565eef222Smrg      esac
142665eef222Smrg    fi
142765eef222Smrg}
142865eef222Smrg
142965eef222Smrg
143065eef222Smrg
1431200d7199Smrg# func_write_libtool_object output_name pic_name nonpic_name
1432200d7199Smrg# Create a libtool object file (analogous to a ".la" file),
1433200d7199Smrg# but don't create it if we're doing a dry run.
1434200d7199Smrgfunc_write_libtool_object ()
1435200d7199Smrg{
1436200d7199Smrg    write_libobj=${1}
1437200d7199Smrg    if test "$build_libtool_libs" = yes; then
1438200d7199Smrg      write_lobj=\'${2}\'
1439200d7199Smrg    else
1440200d7199Smrg      write_lobj=none
1441200d7199Smrg    fi
1442200d7199Smrg
1443200d7199Smrg    if test "$build_old_libs" = yes; then
1444200d7199Smrg      write_oldobj=\'${3}\'
1445200d7199Smrg    else
1446200d7199Smrg      write_oldobj=none
1447200d7199Smrg    fi
1448200d7199Smrg
1449200d7199Smrg    $opt_dry_run || {
1450200d7199Smrg      cat >${write_libobj}T <<EOF
1451200d7199Smrg# $write_libobj - a libtool object file
1452200d7199Smrg# Generated by $PROGRAM (GNU $PACKAGE$TIMESTAMP) $VERSION
1453200d7199Smrg#
1454200d7199Smrg# Please DO NOT delete this file!
1455200d7199Smrg# It is necessary for linking the library.
1456200d7199Smrg
1457200d7199Smrg# Name of the PIC object.
1458200d7199Smrgpic_object=$write_lobj
1459200d7199Smrg
1460200d7199Smrg# Name of the non-PIC object
1461200d7199Smrgnon_pic_object=$write_oldobj
1462200d7199Smrg
1463200d7199SmrgEOF
1464200d7199Smrg      $MV "${write_libobj}T" "${write_libobj}"
1465200d7199Smrg    }
1466200d7199Smrg}
1467200d7199Smrg
1468200d7199Smrg
1469200d7199Smrg##################################################
1470200d7199Smrg# FILE NAME AND PATH CONVERSION HELPER FUNCTIONS #
1471200d7199Smrg##################################################
1472200d7199Smrg
1473200d7199Smrg# func_convert_core_file_wine_to_w32 ARG
1474200d7199Smrg# Helper function used by file name conversion functions when $build is *nix,
1475200d7199Smrg# and $host is mingw, cygwin, or some other w32 environment. Relies on a
1476200d7199Smrg# correctly configured wine environment available, with the winepath program
1477200d7199Smrg# in $build's $PATH.
1478200d7199Smrg#
1479200d7199Smrg# ARG is the $build file name to be converted to w32 format.
1480200d7199Smrg# Result is available in $func_convert_core_file_wine_to_w32_result, and will
1481200d7199Smrg# be empty on error (or when ARG is empty)
1482200d7199Smrgfunc_convert_core_file_wine_to_w32 ()
1483200d7199Smrg{
1484200d7199Smrg  $opt_debug
1485200d7199Smrg  func_convert_core_file_wine_to_w32_result="$1"
1486200d7199Smrg  if test -n "$1"; then
1487200d7199Smrg    # Unfortunately, winepath does not exit with a non-zero error code, so we
1488200d7199Smrg    # are forced to check the contents of stdout. On the other hand, if the
1489200d7199Smrg    # command is not found, the shell will set an exit code of 127 and print
1490200d7199Smrg    # *an error message* to stdout. So we must check for both error code of
1491200d7199Smrg    # zero AND non-empty stdout, which explains the odd construction:
1492200d7199Smrg    func_convert_core_file_wine_to_w32_tmp=`winepath -w "$1" 2>/dev/null`
1493200d7199Smrg    if test "$?" -eq 0 && test -n "${func_convert_core_file_wine_to_w32_tmp}"; then
1494200d7199Smrg      func_convert_core_file_wine_to_w32_result=`$ECHO "$func_convert_core_file_wine_to_w32_tmp" |
1495200d7199Smrg        $SED -e "$lt_sed_naive_backslashify"`
1496200d7199Smrg    else
1497200d7199Smrg      func_convert_core_file_wine_to_w32_result=
1498200d7199Smrg    fi
1499200d7199Smrg  fi
1500200d7199Smrg}
1501200d7199Smrg# end: func_convert_core_file_wine_to_w32
1502200d7199Smrg
1503200d7199Smrg
1504200d7199Smrg# func_convert_core_path_wine_to_w32 ARG
1505200d7199Smrg# Helper function used by path conversion functions when $build is *nix, and
1506200d7199Smrg# $host is mingw, cygwin, or some other w32 environment. Relies on a correctly
1507200d7199Smrg# configured wine environment available, with the winepath program in $build's
1508200d7199Smrg# $PATH. Assumes ARG has no leading or trailing path separator characters.
1509200d7199Smrg#
1510200d7199Smrg# ARG is path to be converted from $build format to win32.
1511200d7199Smrg# Result is available in $func_convert_core_path_wine_to_w32_result.
1512200d7199Smrg# Unconvertible file (directory) names in ARG are skipped; if no directory names
1513200d7199Smrg# are convertible, then the result may be empty.
1514200d7199Smrgfunc_convert_core_path_wine_to_w32 ()
1515200d7199Smrg{
1516200d7199Smrg  $opt_debug
1517200d7199Smrg  # unfortunately, winepath doesn't convert paths, only file names
1518200d7199Smrg  func_convert_core_path_wine_to_w32_result=""
1519200d7199Smrg  if test -n "$1"; then
1520200d7199Smrg    oldIFS=$IFS
1521200d7199Smrg    IFS=:
1522200d7199Smrg    for func_convert_core_path_wine_to_w32_f in $1; do
1523200d7199Smrg      IFS=$oldIFS
1524200d7199Smrg      func_convert_core_file_wine_to_w32 "$func_convert_core_path_wine_to_w32_f"
1525200d7199Smrg      if test -n "$func_convert_core_file_wine_to_w32_result" ; then
1526200d7199Smrg        if test -z "$func_convert_core_path_wine_to_w32_result"; then
1527200d7199Smrg          func_convert_core_path_wine_to_w32_result="$func_convert_core_file_wine_to_w32_result"
1528200d7199Smrg        else
1529200d7199Smrg          func_append func_convert_core_path_wine_to_w32_result ";$func_convert_core_file_wine_to_w32_result"
1530200d7199Smrg        fi
1531200d7199Smrg      fi
1532200d7199Smrg    done
1533200d7199Smrg    IFS=$oldIFS
1534200d7199Smrg  fi
1535200d7199Smrg}
1536200d7199Smrg# end: func_convert_core_path_wine_to_w32
1537200d7199Smrg
1538200d7199Smrg
1539200d7199Smrg# func_cygpath ARGS...
1540200d7199Smrg# Wrapper around calling the cygpath program via LT_CYGPATH. This is used when
1541200d7199Smrg# when (1) $build is *nix and Cygwin is hosted via a wine environment; or (2)
1542200d7199Smrg# $build is MSYS and $host is Cygwin, or (3) $build is Cygwin. In case (1) or
1543200d7199Smrg# (2), returns the Cygwin file name or path in func_cygpath_result (input
1544200d7199Smrg# file name or path is assumed to be in w32 format, as previously converted
1545200d7199Smrg# from $build's *nix or MSYS format). In case (3), returns the w32 file name
1546200d7199Smrg# or path in func_cygpath_result (input file name or path is assumed to be in
1547200d7199Smrg# Cygwin format). Returns an empty string on error.
1548200d7199Smrg#
1549200d7199Smrg# ARGS are passed to cygpath, with the last one being the file name or path to
1550200d7199Smrg# be converted.
1551200d7199Smrg#
1552200d7199Smrg# Specify the absolute *nix (or w32) name to cygpath in the LT_CYGPATH
1553200d7199Smrg# environment variable; do not put it in $PATH.
1554200d7199Smrgfunc_cygpath ()
1555200d7199Smrg{
1556200d7199Smrg  $opt_debug
1557200d7199Smrg  if test -n "$LT_CYGPATH" && test -f "$LT_CYGPATH"; then
1558200d7199Smrg    func_cygpath_result=`$LT_CYGPATH "$@" 2>/dev/null`
1559200d7199Smrg    if test "$?" -ne 0; then
1560200d7199Smrg      # on failure, ensure result is empty
1561200d7199Smrg      func_cygpath_result=
1562200d7199Smrg    fi
1563200d7199Smrg  else
1564200d7199Smrg    func_cygpath_result=
1565200d7199Smrg    func_error "LT_CYGPATH is empty or specifies non-existent file: \`$LT_CYGPATH'"
1566200d7199Smrg  fi
1567200d7199Smrg}
1568200d7199Smrg#end: func_cygpath
1569200d7199Smrg
1570200d7199Smrg
1571200d7199Smrg# func_convert_core_msys_to_w32 ARG
1572200d7199Smrg# Convert file name or path ARG from MSYS format to w32 format.  Return
1573200d7199Smrg# result in func_convert_core_msys_to_w32_result.
1574200d7199Smrgfunc_convert_core_msys_to_w32 ()
1575200d7199Smrg{
1576200d7199Smrg  $opt_debug
1577200d7199Smrg  # awkward: cmd appends spaces to result
1578200d7199Smrg  func_convert_core_msys_to_w32_result=`( cmd //c echo "$1" ) 2>/dev/null |
1579200d7199Smrg    $SED -e 's/[ ]*$//' -e "$lt_sed_naive_backslashify"`
1580200d7199Smrg}
1581200d7199Smrg#end: func_convert_core_msys_to_w32
1582200d7199Smrg
1583200d7199Smrg
1584200d7199Smrg# func_convert_file_check ARG1 ARG2
1585200d7199Smrg# Verify that ARG1 (a file name in $build format) was converted to $host
1586200d7199Smrg# format in ARG2. Otherwise, emit an error message, but continue (resetting
1587200d7199Smrg# func_to_host_file_result to ARG1).
1588200d7199Smrgfunc_convert_file_check ()
1589200d7199Smrg{
1590200d7199Smrg  $opt_debug
1591200d7199Smrg  if test -z "$2" && test -n "$1" ; then
1592200d7199Smrg    func_error "Could not determine host file name corresponding to"
1593200d7199Smrg    func_error "  \`$1'"
1594200d7199Smrg    func_error "Continuing, but uninstalled executables may not work."
1595200d7199Smrg    # Fallback:
1596200d7199Smrg    func_to_host_file_result="$1"
1597200d7199Smrg  fi
1598200d7199Smrg}
1599200d7199Smrg# end func_convert_file_check
1600200d7199Smrg
1601200d7199Smrg
1602200d7199Smrg# func_convert_path_check FROM_PATHSEP TO_PATHSEP FROM_PATH TO_PATH
1603200d7199Smrg# Verify that FROM_PATH (a path in $build format) was converted to $host
1604200d7199Smrg# format in TO_PATH. Otherwise, emit an error message, but continue, resetting
1605200d7199Smrg# func_to_host_file_result to a simplistic fallback value (see below).
1606200d7199Smrgfunc_convert_path_check ()
1607200d7199Smrg{
1608200d7199Smrg  $opt_debug
1609200d7199Smrg  if test -z "$4" && test -n "$3"; then
1610200d7199Smrg    func_error "Could not determine the host path corresponding to"
1611200d7199Smrg    func_error "  \`$3'"
1612200d7199Smrg    func_error "Continuing, but uninstalled executables may not work."
1613200d7199Smrg    # Fallback.  This is a deliberately simplistic "conversion" and
1614200d7199Smrg    # should not be "improved".  See libtool.info.
1615200d7199Smrg    if test "x$1" != "x$2"; then
1616200d7199Smrg      lt_replace_pathsep_chars="s|$1|$2|g"
1617200d7199Smrg      func_to_host_path_result=`echo "$3" |
1618200d7199Smrg        $SED -e "$lt_replace_pathsep_chars"`
1619200d7199Smrg    else
1620200d7199Smrg      func_to_host_path_result="$3"
1621200d7199Smrg    fi
1622200d7199Smrg  fi
1623200d7199Smrg}
1624200d7199Smrg# end func_convert_path_check
1625200d7199Smrg
1626200d7199Smrg
1627200d7199Smrg# func_convert_path_front_back_pathsep FRONTPAT BACKPAT REPL ORIG
1628200d7199Smrg# Modifies func_to_host_path_result by prepending REPL if ORIG matches FRONTPAT
1629200d7199Smrg# and appending REPL if ORIG matches BACKPAT.
1630200d7199Smrgfunc_convert_path_front_back_pathsep ()
1631200d7199Smrg{
1632200d7199Smrg  $opt_debug
1633200d7199Smrg  case $4 in
1634200d7199Smrg  $1 ) func_to_host_path_result="$3$func_to_host_path_result"
1635200d7199Smrg    ;;
1636200d7199Smrg  esac
1637200d7199Smrg  case $4 in
1638200d7199Smrg  $2 ) func_append func_to_host_path_result "$3"
1639200d7199Smrg    ;;
1640200d7199Smrg  esac
1641200d7199Smrg}
1642200d7199Smrg# end func_convert_path_front_back_pathsep
1643200d7199Smrg
1644200d7199Smrg
1645200d7199Smrg##################################################
1646200d7199Smrg# $build to $host FILE NAME CONVERSION FUNCTIONS #
1647200d7199Smrg##################################################
1648200d7199Smrg# invoked via `$to_host_file_cmd ARG'
1649200d7199Smrg#
1650200d7199Smrg# In each case, ARG is the path to be converted from $build to $host format.
1651200d7199Smrg# Result will be available in $func_to_host_file_result.
1652200d7199Smrg
1653200d7199Smrg
1654200d7199Smrg# func_to_host_file ARG
1655200d7199Smrg# Converts the file name ARG from $build format to $host format. Return result
1656200d7199Smrg# in func_to_host_file_result.
1657200d7199Smrgfunc_to_host_file ()
1658200d7199Smrg{
1659200d7199Smrg  $opt_debug
1660200d7199Smrg  $to_host_file_cmd "$1"
1661200d7199Smrg}
1662200d7199Smrg# end func_to_host_file
1663200d7199Smrg
1664200d7199Smrg
1665200d7199Smrg# func_to_tool_file ARG LAZY
1666200d7199Smrg# converts the file name ARG from $build format to toolchain format. Return
1667200d7199Smrg# result in func_to_tool_file_result.  If the conversion in use is listed
1668200d7199Smrg# in (the comma separated) LAZY, no conversion takes place.
1669200d7199Smrgfunc_to_tool_file ()
1670200d7199Smrg{
1671200d7199Smrg  $opt_debug
1672200d7199Smrg  case ,$2, in
1673200d7199Smrg    *,"$to_tool_file_cmd",*)
1674200d7199Smrg      func_to_tool_file_result=$1
1675200d7199Smrg      ;;
1676200d7199Smrg    *)
1677200d7199Smrg      $to_tool_file_cmd "$1"
1678200d7199Smrg      func_to_tool_file_result=$func_to_host_file_result
1679200d7199Smrg      ;;
1680200d7199Smrg  esac
1681200d7199Smrg}
1682200d7199Smrg# end func_to_tool_file
1683200d7199Smrg
1684200d7199Smrg
1685200d7199Smrg# func_convert_file_noop ARG
1686200d7199Smrg# Copy ARG to func_to_host_file_result.
1687200d7199Smrgfunc_convert_file_noop ()
1688200d7199Smrg{
1689200d7199Smrg  func_to_host_file_result="$1"
1690200d7199Smrg}
1691200d7199Smrg# end func_convert_file_noop
1692200d7199Smrg
1693200d7199Smrg
1694200d7199Smrg# func_convert_file_msys_to_w32 ARG
1695200d7199Smrg# Convert file name ARG from (mingw) MSYS to (mingw) w32 format; automatic
1696200d7199Smrg# conversion to w32 is not available inside the cwrapper.  Returns result in
1697200d7199Smrg# func_to_host_file_result.
1698200d7199Smrgfunc_convert_file_msys_to_w32 ()
1699200d7199Smrg{
1700200d7199Smrg  $opt_debug
1701200d7199Smrg  func_to_host_file_result="$1"
1702200d7199Smrg  if test -n "$1"; then
1703200d7199Smrg    func_convert_core_msys_to_w32 "$1"
1704200d7199Smrg    func_to_host_file_result="$func_convert_core_msys_to_w32_result"
1705200d7199Smrg  fi
1706200d7199Smrg  func_convert_file_check "$1" "$func_to_host_file_result"
1707200d7199Smrg}
1708200d7199Smrg# end func_convert_file_msys_to_w32
1709200d7199Smrg
1710200d7199Smrg
1711200d7199Smrg# func_convert_file_cygwin_to_w32 ARG
1712200d7199Smrg# Convert file name ARG from Cygwin to w32 format.  Returns result in
1713200d7199Smrg# func_to_host_file_result.
1714200d7199Smrgfunc_convert_file_cygwin_to_w32 ()
1715200d7199Smrg{
1716200d7199Smrg  $opt_debug
1717200d7199Smrg  func_to_host_file_result="$1"
1718200d7199Smrg  if test -n "$1"; then
1719200d7199Smrg    # because $build is cygwin, we call "the" cygpath in $PATH; no need to use
1720200d7199Smrg    # LT_CYGPATH in this case.
1721200d7199Smrg    func_to_host_file_result=`cygpath -m "$1"`
1722200d7199Smrg  fi
1723200d7199Smrg  func_convert_file_check "$1" "$func_to_host_file_result"
1724200d7199Smrg}
1725200d7199Smrg# end func_convert_file_cygwin_to_w32
1726200d7199Smrg
1727200d7199Smrg
1728200d7199Smrg# func_convert_file_nix_to_w32 ARG
1729200d7199Smrg# Convert file name ARG from *nix to w32 format.  Requires a wine environment
1730200d7199Smrg# and a working winepath. Returns result in func_to_host_file_result.
1731200d7199Smrgfunc_convert_file_nix_to_w32 ()
1732200d7199Smrg{
1733200d7199Smrg  $opt_debug
1734200d7199Smrg  func_to_host_file_result="$1"
1735200d7199Smrg  if test -n "$1"; then
1736200d7199Smrg    func_convert_core_file_wine_to_w32 "$1"
1737200d7199Smrg    func_to_host_file_result="$func_convert_core_file_wine_to_w32_result"
1738200d7199Smrg  fi
1739200d7199Smrg  func_convert_file_check "$1" "$func_to_host_file_result"
1740200d7199Smrg}
1741200d7199Smrg# end func_convert_file_nix_to_w32
1742200d7199Smrg
1743200d7199Smrg
1744200d7199Smrg# func_convert_file_msys_to_cygwin ARG
1745200d7199Smrg# Convert file name ARG from MSYS to Cygwin format.  Requires LT_CYGPATH set.
1746200d7199Smrg# Returns result in func_to_host_file_result.
1747200d7199Smrgfunc_convert_file_msys_to_cygwin ()
1748200d7199Smrg{
1749200d7199Smrg  $opt_debug
1750200d7199Smrg  func_to_host_file_result="$1"
1751200d7199Smrg  if test -n "$1"; then
1752200d7199Smrg    func_convert_core_msys_to_w32 "$1"
1753200d7199Smrg    func_cygpath -u "$func_convert_core_msys_to_w32_result"
1754200d7199Smrg    func_to_host_file_result="$func_cygpath_result"
1755200d7199Smrg  fi
1756200d7199Smrg  func_convert_file_check "$1" "$func_to_host_file_result"
1757200d7199Smrg}
1758200d7199Smrg# end func_convert_file_msys_to_cygwin
1759200d7199Smrg
1760200d7199Smrg
1761200d7199Smrg# func_convert_file_nix_to_cygwin ARG
1762200d7199Smrg# Convert file name ARG from *nix to Cygwin format.  Requires Cygwin installed
1763200d7199Smrg# in a wine environment, working winepath, and LT_CYGPATH set.  Returns result
1764200d7199Smrg# in func_to_host_file_result.
1765200d7199Smrgfunc_convert_file_nix_to_cygwin ()
1766200d7199Smrg{
1767200d7199Smrg  $opt_debug
1768200d7199Smrg  func_to_host_file_result="$1"
1769200d7199Smrg  if test -n "$1"; then
1770200d7199Smrg    # convert from *nix to w32, then use cygpath to convert from w32 to cygwin.
1771200d7199Smrg    func_convert_core_file_wine_to_w32 "$1"
1772200d7199Smrg    func_cygpath -u "$func_convert_core_file_wine_to_w32_result"
1773200d7199Smrg    func_to_host_file_result="$func_cygpath_result"
1774200d7199Smrg  fi
1775200d7199Smrg  func_convert_file_check "$1" "$func_to_host_file_result"
1776200d7199Smrg}
1777200d7199Smrg# end func_convert_file_nix_to_cygwin
1778200d7199Smrg
1779200d7199Smrg
1780200d7199Smrg#############################################
1781200d7199Smrg# $build to $host PATH CONVERSION FUNCTIONS #
1782200d7199Smrg#############################################
1783200d7199Smrg# invoked via `$to_host_path_cmd ARG'
1784200d7199Smrg#
1785200d7199Smrg# In each case, ARG is the path to be converted from $build to $host format.
1786200d7199Smrg# The result will be available in $func_to_host_path_result.
1787200d7199Smrg#
1788200d7199Smrg# Path separators are also converted from $build format to $host format.  If
1789200d7199Smrg# ARG begins or ends with a path separator character, it is preserved (but
1790200d7199Smrg# converted to $host format) on output.
1791200d7199Smrg#
1792200d7199Smrg# All path conversion functions are named using the following convention:
1793200d7199Smrg#   file name conversion function    : func_convert_file_X_to_Y ()
1794200d7199Smrg#   path conversion function         : func_convert_path_X_to_Y ()
1795200d7199Smrg# where, for any given $build/$host combination the 'X_to_Y' value is the
1796200d7199Smrg# same.  If conversion functions are added for new $build/$host combinations,
1797200d7199Smrg# the two new functions must follow this pattern, or func_init_to_host_path_cmd
1798200d7199Smrg# will break.
1799200d7199Smrg
1800200d7199Smrg
1801200d7199Smrg# func_init_to_host_path_cmd
1802200d7199Smrg# Ensures that function "pointer" variable $to_host_path_cmd is set to the
1803200d7199Smrg# appropriate value, based on the value of $to_host_file_cmd.
1804200d7199Smrgto_host_path_cmd=
1805200d7199Smrgfunc_init_to_host_path_cmd ()
1806200d7199Smrg{
1807200d7199Smrg  $opt_debug
1808200d7199Smrg  if test -z "$to_host_path_cmd"; then
1809200d7199Smrg    func_stripname 'func_convert_file_' '' "$to_host_file_cmd"
1810200d7199Smrg    to_host_path_cmd="func_convert_path_${func_stripname_result}"
1811200d7199Smrg  fi
1812200d7199Smrg}
1813200d7199Smrg
1814200d7199Smrg
1815200d7199Smrg# func_to_host_path ARG
1816200d7199Smrg# Converts the path ARG from $build format to $host format. Return result
1817200d7199Smrg# in func_to_host_path_result.
1818200d7199Smrgfunc_to_host_path ()
1819200d7199Smrg{
1820200d7199Smrg  $opt_debug
1821200d7199Smrg  func_init_to_host_path_cmd
1822200d7199Smrg  $to_host_path_cmd "$1"
1823200d7199Smrg}
1824200d7199Smrg# end func_to_host_path
1825200d7199Smrg
1826200d7199Smrg
1827200d7199Smrg# func_convert_path_noop ARG
1828200d7199Smrg# Copy ARG to func_to_host_path_result.
1829200d7199Smrgfunc_convert_path_noop ()
1830200d7199Smrg{
1831200d7199Smrg  func_to_host_path_result="$1"
1832200d7199Smrg}
1833200d7199Smrg# end func_convert_path_noop
1834200d7199Smrg
1835200d7199Smrg
1836200d7199Smrg# func_convert_path_msys_to_w32 ARG
1837200d7199Smrg# Convert path ARG from (mingw) MSYS to (mingw) w32 format; automatic
1838200d7199Smrg# conversion to w32 is not available inside the cwrapper.  Returns result in
1839200d7199Smrg# func_to_host_path_result.
1840200d7199Smrgfunc_convert_path_msys_to_w32 ()
184165eef222Smrg{
1842200d7199Smrg  $opt_debug
1843200d7199Smrg  func_to_host_path_result="$1"
1844200d7199Smrg  if test -n "$1"; then
1845200d7199Smrg    # Remove leading and trailing path separator characters from ARG.  MSYS
1846200d7199Smrg    # behavior is inconsistent here; cygpath turns them into '.;' and ';.';
1847200d7199Smrg    # and winepath ignores them completely.
1848200d7199Smrg    func_stripname : : "$1"
1849200d7199Smrg    func_to_host_path_tmp1=$func_stripname_result
1850200d7199Smrg    func_convert_core_msys_to_w32 "$func_to_host_path_tmp1"
1851200d7199Smrg    func_to_host_path_result="$func_convert_core_msys_to_w32_result"
1852200d7199Smrg    func_convert_path_check : ";" \
1853200d7199Smrg      "$func_to_host_path_tmp1" "$func_to_host_path_result"
1854200d7199Smrg    func_convert_path_front_back_pathsep ":*" "*:" ";" "$1"
1855200d7199Smrg  fi
1856200d7199Smrg}
1857200d7199Smrg# end func_convert_path_msys_to_w32
185865eef222Smrg
185965eef222Smrg
1860200d7199Smrg# func_convert_path_cygwin_to_w32 ARG
1861200d7199Smrg# Convert path ARG from Cygwin to w32 format.  Returns result in
1862200d7199Smrg# func_to_host_file_result.
1863200d7199Smrgfunc_convert_path_cygwin_to_w32 ()
1864200d7199Smrg{
1865200d7199Smrg  $opt_debug
1866200d7199Smrg  func_to_host_path_result="$1"
1867200d7199Smrg  if test -n "$1"; then
1868200d7199Smrg    # See func_convert_path_msys_to_w32:
1869200d7199Smrg    func_stripname : : "$1"
1870200d7199Smrg    func_to_host_path_tmp1=$func_stripname_result
1871200d7199Smrg    func_to_host_path_result=`cygpath -m -p "$func_to_host_path_tmp1"`
1872200d7199Smrg    func_convert_path_check : ";" \
1873200d7199Smrg      "$func_to_host_path_tmp1" "$func_to_host_path_result"
1874200d7199Smrg    func_convert_path_front_back_pathsep ":*" "*:" ";" "$1"
1875200d7199Smrg  fi
1876200d7199Smrg}
1877200d7199Smrg# end func_convert_path_cygwin_to_w32
187865eef222Smrg
187965eef222Smrg
1880200d7199Smrg# func_convert_path_nix_to_w32 ARG
1881200d7199Smrg# Convert path ARG from *nix to w32 format.  Requires a wine environment and
1882200d7199Smrg# a working winepath.  Returns result in func_to_host_file_result.
1883200d7199Smrgfunc_convert_path_nix_to_w32 ()
1884200d7199Smrg{
1885200d7199Smrg  $opt_debug
1886200d7199Smrg  func_to_host_path_result="$1"
1887200d7199Smrg  if test -n "$1"; then
1888200d7199Smrg    # See func_convert_path_msys_to_w32:
1889200d7199Smrg    func_stripname : : "$1"
1890200d7199Smrg    func_to_host_path_tmp1=$func_stripname_result
1891200d7199Smrg    func_convert_core_path_wine_to_w32 "$func_to_host_path_tmp1"
1892200d7199Smrg    func_to_host_path_result="$func_convert_core_path_wine_to_w32_result"
1893200d7199Smrg    func_convert_path_check : ";" \
1894200d7199Smrg      "$func_to_host_path_tmp1" "$func_to_host_path_result"
1895200d7199Smrg    func_convert_path_front_back_pathsep ":*" "*:" ";" "$1"
1896200d7199Smrg  fi
1897200d7199Smrg}
1898200d7199Smrg# end func_convert_path_nix_to_w32
189965eef222Smrg
1900200d7199Smrg
1901200d7199Smrg# func_convert_path_msys_to_cygwin ARG
1902200d7199Smrg# Convert path ARG from MSYS to Cygwin format.  Requires LT_CYGPATH set.
1903200d7199Smrg# Returns result in func_to_host_file_result.
1904200d7199Smrgfunc_convert_path_msys_to_cygwin ()
1905200d7199Smrg{
1906200d7199Smrg  $opt_debug
1907200d7199Smrg  func_to_host_path_result="$1"
1908200d7199Smrg  if test -n "$1"; then
1909200d7199Smrg    # See func_convert_path_msys_to_w32:
1910200d7199Smrg    func_stripname : : "$1"
1911200d7199Smrg    func_to_host_path_tmp1=$func_stripname_result
1912200d7199Smrg    func_convert_core_msys_to_w32 "$func_to_host_path_tmp1"
1913200d7199Smrg    func_cygpath -u -p "$func_convert_core_msys_to_w32_result"
1914200d7199Smrg    func_to_host_path_result="$func_cygpath_result"
1915200d7199Smrg    func_convert_path_check : : \
1916200d7199Smrg      "$func_to_host_path_tmp1" "$func_to_host_path_result"
1917200d7199Smrg    func_convert_path_front_back_pathsep ":*" "*:" : "$1"
1918200d7199Smrg  fi
1919200d7199Smrg}
1920200d7199Smrg# end func_convert_path_msys_to_cygwin
1921200d7199Smrg
1922200d7199Smrg
1923200d7199Smrg# func_convert_path_nix_to_cygwin ARG
1924200d7199Smrg# Convert path ARG from *nix to Cygwin format.  Requires Cygwin installed in a
1925200d7199Smrg# a wine environment, working winepath, and LT_CYGPATH set.  Returns result in
1926200d7199Smrg# func_to_host_file_result.
1927200d7199Smrgfunc_convert_path_nix_to_cygwin ()
1928200d7199Smrg{
1929200d7199Smrg  $opt_debug
1930200d7199Smrg  func_to_host_path_result="$1"
1931200d7199Smrg  if test -n "$1"; then
1932200d7199Smrg    # Remove leading and trailing path separator characters from
1933200d7199Smrg    # ARG. msys behavior is inconsistent here, cygpath turns them
1934200d7199Smrg    # into '.;' and ';.', and winepath ignores them completely.
1935200d7199Smrg    func_stripname : : "$1"
1936200d7199Smrg    func_to_host_path_tmp1=$func_stripname_result
1937200d7199Smrg    func_convert_core_path_wine_to_w32 "$func_to_host_path_tmp1"
1938200d7199Smrg    func_cygpath -u -p "$func_convert_core_path_wine_to_w32_result"
1939200d7199Smrg    func_to_host_path_result="$func_cygpath_result"
1940200d7199Smrg    func_convert_path_check : : \
1941200d7199Smrg      "$func_to_host_path_tmp1" "$func_to_host_path_result"
1942200d7199Smrg    func_convert_path_front_back_pathsep ":*" "*:" : "$1"
1943200d7199Smrg  fi
194465eef222Smrg}
1945200d7199Smrg# end func_convert_path_nix_to_cygwin
1946200d7199Smrg
194765eef222Smrg
194865eef222Smrg# func_mode_compile arg...
194965eef222Smrgfunc_mode_compile ()
195065eef222Smrg{
195165eef222Smrg    $opt_debug
195265eef222Smrg    # Get the compilation command and the source file.
195365eef222Smrg    base_compile=
195465eef222Smrg    srcfile="$nonopt"  #  always keep a non-empty value in "srcfile"
195565eef222Smrg    suppress_opt=yes
195665eef222Smrg    suppress_output=
195765eef222Smrg    arg_mode=normal
195865eef222Smrg    libobj=
195965eef222Smrg    later=
196065eef222Smrg    pie_flag=
196165eef222Smrg
196265eef222Smrg    for arg
196365eef222Smrg    do
196465eef222Smrg      case $arg_mode in
196565eef222Smrg      arg  )
196665eef222Smrg	# do not "continue".  Instead, add this to base_compile
196765eef222Smrg	lastarg="$arg"
196865eef222Smrg	arg_mode=normal
196965eef222Smrg	;;
197065eef222Smrg
197165eef222Smrg      target )
197265eef222Smrg	libobj="$arg"
197365eef222Smrg	arg_mode=normal
197465eef222Smrg	continue
197565eef222Smrg	;;
197665eef222Smrg
197765eef222Smrg      normal )
197865eef222Smrg	# Accept any command-line options.
197965eef222Smrg	case $arg in
198065eef222Smrg	-o)
198165eef222Smrg	  test -n "$libobj" && \
198265eef222Smrg	    func_fatal_error "you cannot specify \`-o' more than once"
198365eef222Smrg	  arg_mode=target
198465eef222Smrg	  continue
198565eef222Smrg	  ;;
198665eef222Smrg
198765eef222Smrg	-pie | -fpie | -fPIE)
1988200d7199Smrg          func_append pie_flag " $arg"
198965eef222Smrg	  continue
199065eef222Smrg	  ;;
199165eef222Smrg
199265eef222Smrg	-shared | -static | -prefer-pic | -prefer-non-pic)
1993200d7199Smrg	  func_append later " $arg"
199465eef222Smrg	  continue
199565eef222Smrg	  ;;
199665eef222Smrg
199765eef222Smrg	-no-suppress)
199865eef222Smrg	  suppress_opt=no
199965eef222Smrg	  continue
200065eef222Smrg	  ;;
200165eef222Smrg
200265eef222Smrg	-Xcompiler)
200365eef222Smrg	  arg_mode=arg  #  the next one goes into the "base_compile" arg list
200465eef222Smrg	  continue      #  The current "srcfile" will either be retained or
200565eef222Smrg	  ;;            #  replaced later.  I would guess that would be a bug.
200665eef222Smrg
200765eef222Smrg	-Wc,*)
200865eef222Smrg	  func_stripname '-Wc,' '' "$arg"
200965eef222Smrg	  args=$func_stripname_result
201065eef222Smrg	  lastarg=
201165eef222Smrg	  save_ifs="$IFS"; IFS=','
201265eef222Smrg	  for arg in $args; do
201365eef222Smrg	    IFS="$save_ifs"
2014200d7199Smrg	    func_append_quoted lastarg "$arg"
2015ef981d24Smrg	  done
2016ef981d24Smrg	  IFS="$save_ifs"
201765eef222Smrg	  func_stripname ' ' '' "$lastarg"
201865eef222Smrg	  lastarg=$func_stripname_result
2019ef981d24Smrg
2020ef981d24Smrg	  # Add the arguments to base_compile.
2021200d7199Smrg	  func_append base_compile " $lastarg"
2022ef981d24Smrg	  continue
2023ef981d24Smrg	  ;;
2024ef981d24Smrg
202565eef222Smrg	*)
2026ef981d24Smrg	  # Accept the current argument as the source file.
2027ef981d24Smrg	  # The previous "srcfile" becomes the current argument.
2028ef981d24Smrg	  #
2029ef981d24Smrg	  lastarg="$srcfile"
2030ef981d24Smrg	  srcfile="$arg"
2031ef981d24Smrg	  ;;
2032ef981d24Smrg	esac  #  case $arg
2033ef981d24Smrg	;;
2034ef981d24Smrg      esac    #  case $arg_mode
2035ef981d24Smrg
2036ef981d24Smrg      # Aesthetically quote the previous argument.
2037200d7199Smrg      func_append_quoted base_compile "$lastarg"
2038ef981d24Smrg    done # for arg
2039ef981d24Smrg
2040ef981d24Smrg    case $arg_mode in
2041ef981d24Smrg    arg)
204265eef222Smrg      func_fatal_error "you must specify an argument for -Xcompile"
2043ef981d24Smrg      ;;
2044ef981d24Smrg    target)
204565eef222Smrg      func_fatal_error "you must specify a target with \`-o'"
2046ef981d24Smrg      ;;
2047ef981d24Smrg    *)
2048ef981d24Smrg      # Get the name of the library object.
204965eef222Smrg      test -z "$libobj" && {
205065eef222Smrg	func_basename "$srcfile"
205165eef222Smrg	libobj="$func_basename_result"
205265eef222Smrg      }
2053ef981d24Smrg      ;;
2054ef981d24Smrg    esac
2055ef981d24Smrg
2056ef981d24Smrg    # Recognize several different file suffixes.
2057ef981d24Smrg    # If the user specifies -o file.o, it is replaced with file.lo
2058ef981d24Smrg    case $libobj in
205965eef222Smrg    *.[cCFSifmso] | \
206065eef222Smrg    *.ada | *.adb | *.ads | *.asm | \
206165eef222Smrg    *.c++ | *.cc | *.ii | *.class | *.cpp | *.cxx | \
206256957a04Smrg    *.[fF][09]? | *.for | *.java | *.obj | *.sx | *.cu | *.cup)
206365eef222Smrg      func_xform "$libobj"
206465eef222Smrg      libobj=$func_xform_result
206565eef222Smrg      ;;
2066ef981d24Smrg    esac
2067ef981d24Smrg
2068ef981d24Smrg    case $libobj in
206965eef222Smrg    *.lo) func_lo2o "$libobj"; obj=$func_lo2o_result ;;
2070ef981d24Smrg    *)
207165eef222Smrg      func_fatal_error "cannot determine name of library object from \`$libobj'"
2072ef981d24Smrg      ;;
2073ef981d24Smrg    esac
2074ef981d24Smrg
2075ef981d24Smrg    func_infer_tag $base_compile
2076ef981d24Smrg
2077ef981d24Smrg    for arg in $later; do
2078ef981d24Smrg      case $arg in
207965eef222Smrg      -shared)
208065eef222Smrg	test "$build_libtool_libs" != yes && \
208165eef222Smrg	  func_fatal_configuration "can not build a shared library"
208265eef222Smrg	build_old_libs=no
208365eef222Smrg	continue
208465eef222Smrg	;;
208565eef222Smrg
2086ef981d24Smrg      -static)
208765eef222Smrg	build_libtool_libs=no
2088ef981d24Smrg	build_old_libs=yes
2089ef981d24Smrg	continue
2090ef981d24Smrg	;;
2091ef981d24Smrg
2092ef981d24Smrg      -prefer-pic)
2093ef981d24Smrg	pic_mode=yes
2094ef981d24Smrg	continue
2095ef981d24Smrg	;;
2096ef981d24Smrg
2097ef981d24Smrg      -prefer-non-pic)
2098ef981d24Smrg	pic_mode=no
2099ef981d24Smrg	continue
2100ef981d24Smrg	;;
2101ef981d24Smrg      esac
2102ef981d24Smrg    done
2103ef981d24Smrg
210465eef222Smrg    func_quote_for_eval "$libobj"
210565eef222Smrg    test "X$libobj" != "X$func_quote_for_eval_result" \
210665eef222Smrg      && $ECHO "X$libobj" | $GREP '[]~#^*{};<>?"'"'"'	 &()|`$[]' \
210765eef222Smrg      && func_warning "libobj name \`$libobj' may not contain shell special characters."
210865eef222Smrg    func_dirname_and_basename "$obj" "/" ""
210965eef222Smrg    objname="$func_basename_result"
211065eef222Smrg    xdir="$func_dirname_result"
2111ef981d24Smrg    lobj=${xdir}$objdir/$objname
2112ef981d24Smrg
211365eef222Smrg    test -z "$base_compile" && \
211465eef222Smrg      func_fatal_help "you must specify a compilation command"
2115ef981d24Smrg
2116ef981d24Smrg    # Delete any leftover library objects.
2117ef981d24Smrg    if test "$build_old_libs" = yes; then
2118ef981d24Smrg      removelist="$obj $lobj $libobj ${libobj}T"
2119ef981d24Smrg    else
2120ef981d24Smrg      removelist="$lobj $libobj ${libobj}T"
2121ef981d24Smrg    fi
2122ef981d24Smrg
2123ef981d24Smrg    # On Cygwin there's no "real" PIC flag so we must build both object types
2124ef981d24Smrg    case $host_os in
212565eef222Smrg    cygwin* | mingw* | pw32* | os2* | cegcc*)
2126ef981d24Smrg      pic_mode=default
2127ef981d24Smrg      ;;
2128ef981d24Smrg    esac
2129ef981d24Smrg    if test "$pic_mode" = no && test "$deplibs_check_method" != pass_all; then
2130ef981d24Smrg      # non-PIC code in shared libraries is not supported
2131ef981d24Smrg      pic_mode=default
2132ef981d24Smrg    fi
2133ef981d24Smrg
2134ef981d24Smrg    # Calculate the filename of the output object if compiler does
2135ef981d24Smrg    # not support -o with -c
2136ef981d24Smrg    if test "$compiler_c_o" = no; then
213756957a04Smrg      output_obj=`$ECHO "$srcfile" | $SED 's%^.*/%%; s%\.[^.]*$%%'`.${objext}
2138ef981d24Smrg      lockfile="$output_obj.lock"
2139ef981d24Smrg    else
2140ef981d24Smrg      output_obj=
2141ef981d24Smrg      need_locks=no
2142ef981d24Smrg      lockfile=
2143ef981d24Smrg    fi
2144ef981d24Smrg
2145ef981d24Smrg    # Lock this critical section if it is needed
2146ef981d24Smrg    # We use this script file to make the link, it avoids creating a new file
2147ef981d24Smrg    if test "$need_locks" = yes; then
214865eef222Smrg      until $opt_dry_run || ln "$progpath" "$lockfile" 2>/dev/null; do
214965eef222Smrg	func_echo "Waiting for $lockfile to be removed"
2150ef981d24Smrg	sleep 2
2151ef981d24Smrg      done
2152ef981d24Smrg    elif test "$need_locks" = warn; then
2153ef981d24Smrg      if test -f "$lockfile"; then
215465eef222Smrg	$ECHO "\
2155ef981d24Smrg*** ERROR, $lockfile exists and contains:
2156ef981d24Smrg`cat $lockfile 2>/dev/null`
2157ef981d24Smrg
2158ef981d24SmrgThis indicates that another process is trying to use the same
2159ef981d24Smrgtemporary object file, and libtool could not work around it because
2160ef981d24Smrgyour compiler does not support \`-c' and \`-o' together.  If you
2161ef981d24Smrgrepeat this compilation, it may succeed, by chance, but you had better
2162ef981d24Smrgavoid parallel builds (make -j) in this platform, or get a better
2163ef981d24Smrgcompiler."
2164ef981d24Smrg
216565eef222Smrg	$opt_dry_run || $RM $removelist
2166ef981d24Smrg	exit $EXIT_FAILURE
2167ef981d24Smrg      fi
2168200d7199Smrg      func_append removelist " $output_obj"
216965eef222Smrg      $ECHO "$srcfile" > "$lockfile"
2170ef981d24Smrg    fi
2171ef981d24Smrg
217265eef222Smrg    $opt_dry_run || $RM $removelist
2173200d7199Smrg    func_append removelist " $lockfile"
217465eef222Smrg    trap '$opt_dry_run || $RM $removelist; exit $EXIT_FAILURE' 1 2 15
217565eef222Smrg
2176200d7199Smrg    func_to_tool_file "$srcfile" func_convert_file_msys_to_w32
2177200d7199Smrg    srcfile=$func_to_tool_file_result
217865eef222Smrg    func_quote_for_eval "$srcfile"
217965eef222Smrg    qsrcfile=$func_quote_for_eval_result
2180ef981d24Smrg
2181ef981d24Smrg    # Only build a PIC object if we are building libtool libraries.
2182ef981d24Smrg    if test "$build_libtool_libs" = yes; then
2183ef981d24Smrg      # Without this assignment, base_compile gets emptied.
2184ef981d24Smrg      fbsd_hideous_sh_bug=$base_compile
2185ef981d24Smrg
2186ef981d24Smrg      if test "$pic_mode" != no; then
2187ef981d24Smrg	command="$base_compile $qsrcfile $pic_flag"
2188ef981d24Smrg      else
2189ef981d24Smrg	# Don't build PIC code
2190ef981d24Smrg	command="$base_compile $qsrcfile"
2191ef981d24Smrg      fi
2192ef981d24Smrg
219365eef222Smrg      func_mkdir_p "$xdir$objdir"
2194ef981d24Smrg
2195ef981d24Smrg      if test -z "$output_obj"; then
2196ef981d24Smrg	# Place PIC objects in $objdir
2197200d7199Smrg	func_append command " -o $lobj"
2198ef981d24Smrg      fi
2199ef981d24Smrg
220065eef222Smrg      func_show_eval_locale "$command"	\
220165eef222Smrg          'test -n "$output_obj" && $RM $removelist; exit $EXIT_FAILURE'
2202ef981d24Smrg
2203ef981d24Smrg      if test "$need_locks" = warn &&
2204ef981d24Smrg	 test "X`cat $lockfile 2>/dev/null`" != "X$srcfile"; then
220565eef222Smrg	$ECHO "\
2206ef981d24Smrg*** ERROR, $lockfile contains:
2207ef981d24Smrg`cat $lockfile 2>/dev/null`
2208ef981d24Smrg
2209ef981d24Smrgbut it should contain:
2210ef981d24Smrg$srcfile
2211ef981d24Smrg
2212ef981d24SmrgThis indicates that another process is trying to use the same
2213ef981d24Smrgtemporary object file, and libtool could not work around it because
2214ef981d24Smrgyour compiler does not support \`-c' and \`-o' together.  If you
2215ef981d24Smrgrepeat this compilation, it may succeed, by chance, but you had better
2216ef981d24Smrgavoid parallel builds (make -j) in this platform, or get a better
2217ef981d24Smrgcompiler."
2218ef981d24Smrg
221965eef222Smrg	$opt_dry_run || $RM $removelist
2220ef981d24Smrg	exit $EXIT_FAILURE
2221ef981d24Smrg      fi
2222ef981d24Smrg
2223ef981d24Smrg      # Just move the object if needed, then go on to compile the next one
2224ef981d24Smrg      if test -n "$output_obj" && test "X$output_obj" != "X$lobj"; then
222565eef222Smrg	func_show_eval '$MV "$output_obj" "$lobj"' \
222665eef222Smrg	  'error=$?; $opt_dry_run || $RM $removelist; exit $error'
2227ef981d24Smrg      fi
2228ef981d24Smrg
2229ef981d24Smrg      # Allow error messages only from the first compilation.
2230ef981d24Smrg      if test "$suppress_opt" = yes; then
223165eef222Smrg	suppress_output=' >/dev/null 2>&1'
2232ef981d24Smrg      fi
2233ef981d24Smrg    fi
2234ef981d24Smrg
2235ef981d24Smrg    # Only build a position-dependent object if we build old libraries.
2236ef981d24Smrg    if test "$build_old_libs" = yes; then
2237ef981d24Smrg      if test "$pic_mode" != yes; then
2238ef981d24Smrg	# Don't build PIC code
223965eef222Smrg	command="$base_compile $qsrcfile$pie_flag"
2240ef981d24Smrg      else
2241ef981d24Smrg	command="$base_compile $qsrcfile $pic_flag"
2242ef981d24Smrg      fi
2243ef981d24Smrg      if test "$compiler_c_o" = yes; then
2244200d7199Smrg	func_append command " -o $obj"
2245ef981d24Smrg      fi
2246ef981d24Smrg
2247ef981d24Smrg      # Suppress compiler output if we already did a PIC compilation.
2248200d7199Smrg      func_append command "$suppress_output"
224965eef222Smrg      func_show_eval_locale "$command" \
225065eef222Smrg        '$opt_dry_run || $RM $removelist; exit $EXIT_FAILURE'
2251ef981d24Smrg
2252ef981d24Smrg      if test "$need_locks" = warn &&
2253ef981d24Smrg	 test "X`cat $lockfile 2>/dev/null`" != "X$srcfile"; then
225465eef222Smrg	$ECHO "\
2255ef981d24Smrg*** ERROR, $lockfile contains:
2256ef981d24Smrg`cat $lockfile 2>/dev/null`
2257ef981d24Smrg
2258ef981d24Smrgbut it should contain:
2259ef981d24Smrg$srcfile
2260ef981d24Smrg
2261ef981d24SmrgThis indicates that another process is trying to use the same
2262ef981d24Smrgtemporary object file, and libtool could not work around it because
2263ef981d24Smrgyour compiler does not support \`-c' and \`-o' together.  If you
2264ef981d24Smrgrepeat this compilation, it may succeed, by chance, but you had better
2265ef981d24Smrgavoid parallel builds (make -j) in this platform, or get a better
2266ef981d24Smrgcompiler."
2267ef981d24Smrg
226865eef222Smrg	$opt_dry_run || $RM $removelist
2269ef981d24Smrg	exit $EXIT_FAILURE
2270ef981d24Smrg      fi
2271ef981d24Smrg
2272ef981d24Smrg      # Just move the object if needed
2273ef981d24Smrg      if test -n "$output_obj" && test "X$output_obj" != "X$obj"; then
227465eef222Smrg	func_show_eval '$MV "$output_obj" "$obj"' \
227565eef222Smrg	  'error=$?; $opt_dry_run || $RM $removelist; exit $error'
2276ef981d24Smrg      fi
2277ef981d24Smrg    fi
2278ef981d24Smrg
227965eef222Smrg    $opt_dry_run || {
228065eef222Smrg      func_write_libtool_object "$libobj" "$objdir/$objname" "$objname"
2281ef981d24Smrg
228265eef222Smrg      # Unlock the critical section if it was locked
228365eef222Smrg      if test "$need_locks" != no; then
228465eef222Smrg	removelist=$lockfile
228565eef222Smrg        $RM "$lockfile"
228665eef222Smrg      fi
228765eef222Smrg    }
2288ef981d24Smrg
2289ef981d24Smrg    exit $EXIT_SUCCESS
229065eef222Smrg}
2291ef981d24Smrg
229265eef222Smrg$opt_help || {
2293200d7199Smrg  test "$opt_mode" = compile && func_mode_compile ${1+"$@"}
229465eef222Smrg}
2295ef981d24Smrg
229665eef222Smrgfunc_mode_help ()
229765eef222Smrg{
229865eef222Smrg    # We need to display help for each of the modes.
2299200d7199Smrg    case $opt_mode in
230065eef222Smrg      "")
230165eef222Smrg        # Generic help is extracted from the usage comments
230265eef222Smrg        # at the start of this file.
230365eef222Smrg        func_help
230465eef222Smrg        ;;
2305ef981d24Smrg
230665eef222Smrg      clean)
230765eef222Smrg        $ECHO \
230865eef222Smrg"Usage: $progname [OPTION]... --mode=clean RM [RM-OPTION]... FILE...
2309ef981d24Smrg
231065eef222SmrgRemove files from the build directory.
2311ef981d24Smrg
231265eef222SmrgRM is the name of the program to use to delete files associated with each FILE
231365eef222Smrg(typically \`/bin/rm').  RM-OPTIONS are options (such as \`-f') to be passed
231465eef222Smrgto RM.
2315ef981d24Smrg
231665eef222SmrgIf FILE is a libtool library, object or program, all the files associated
231765eef222Smrgwith it are deleted. Otherwise, only FILE itself is deleted using RM."
231865eef222Smrg        ;;
2319ef981d24Smrg
232065eef222Smrg      compile)
232165eef222Smrg      $ECHO \
232265eef222Smrg"Usage: $progname [OPTION]... --mode=compile COMPILE-COMMAND... SOURCEFILE
2323ef981d24Smrg
232465eef222SmrgCompile a source file into a libtool library object.
2325ef981d24Smrg
232665eef222SmrgThis mode accepts the following additional options:
2327ef981d24Smrg
232865eef222Smrg  -o OUTPUT-FILE    set the output file name to OUTPUT-FILE
232965eef222Smrg  -no-suppress      do not suppress compiler output for multiple passes
233056957a04Smrg  -prefer-pic       try to build PIC objects only
233156957a04Smrg  -prefer-non-pic   try to build non-PIC objects only
233265eef222Smrg  -shared           do not build a \`.o' file suitable for static linking
233365eef222Smrg  -static           only build a \`.o' file suitable for static linking
233456957a04Smrg  -Wc,FLAG          pass FLAG directly to the compiler
2335ef981d24Smrg
233665eef222SmrgCOMPILE-COMMAND is a command to be used in creating a \`standard' object file
233765eef222Smrgfrom the given SOURCEFILE.
2338ef981d24Smrg
233965eef222SmrgThe output file name is determined by removing the directory component from
234065eef222SmrgSOURCEFILE, then substituting the C source code suffix \`.c' with the
234165eef222Smrglibrary object suffix, \`.lo'."
234265eef222Smrg        ;;
2343ef981d24Smrg
234465eef222Smrg      execute)
234565eef222Smrg        $ECHO \
234665eef222Smrg"Usage: $progname [OPTION]... --mode=execute COMMAND [ARGS]...
2347ef981d24Smrg
234865eef222SmrgAutomatically set library path, then run a program.
2349ef981d24Smrg
235065eef222SmrgThis mode accepts the following additional options:
2351ef981d24Smrg
235265eef222Smrg  -dlopen FILE      add the directory containing FILE to the library path
2353ef981d24Smrg
235465eef222SmrgThis mode sets the library path environment variable according to \`-dlopen'
235565eef222Smrgflags.
2356ef981d24Smrg
235765eef222SmrgIf any of the ARGS are libtool executable wrappers, then they are translated
235865eef222Smrginto their corresponding uninstalled binary, and any of their required library
235965eef222Smrgdirectories are added to the library path.
2360ef981d24Smrg
236165eef222SmrgThen, COMMAND is executed, with ARGS as arguments."
236265eef222Smrg        ;;
2363ef981d24Smrg
236465eef222Smrg      finish)
236565eef222Smrg        $ECHO \
236665eef222Smrg"Usage: $progname [OPTION]... --mode=finish [LIBDIR]...
2367ef981d24Smrg
236865eef222SmrgComplete the installation of libtool libraries.
2369ef981d24Smrg
237065eef222SmrgEach LIBDIR is a directory that contains libtool libraries.
2371ef981d24Smrg
237265eef222SmrgThe commands that this mode executes may require superuser privileges.  Use
237365eef222Smrgthe \`--dry-run' option if you just want to see what would be executed."
237465eef222Smrg        ;;
2375ef981d24Smrg
237665eef222Smrg      install)
237765eef222Smrg        $ECHO \
237865eef222Smrg"Usage: $progname [OPTION]... --mode=install INSTALL-COMMAND...
2379ef981d24Smrg
238065eef222SmrgInstall executables or libraries.
2381ef981d24Smrg
238265eef222SmrgINSTALL-COMMAND is the installation command.  The first component should be
238365eef222Smrgeither the \`install' or \`cp' program.
2384ef981d24Smrg
238565eef222SmrgThe following components of INSTALL-COMMAND are treated specially:
2386ef981d24Smrg
238756957a04Smrg  -inst-prefix-dir PREFIX-DIR  Use PREFIX-DIR as a staging area for installation
2388ef981d24Smrg
238965eef222SmrgThe rest of the components are interpreted as arguments to that command (only
239065eef222SmrgBSD-compatible install options are recognized)."
239165eef222Smrg        ;;
2392ef981d24Smrg
239365eef222Smrg      link)
239465eef222Smrg        $ECHO \
239565eef222Smrg"Usage: $progname [OPTION]... --mode=link LINK-COMMAND...
2396ef981d24Smrg
239765eef222SmrgLink object files or libraries together to form another library, or to
239865eef222Smrgcreate an executable program.
2399ef981d24Smrg
240065eef222SmrgLINK-COMMAND is a command using the C compiler that you would use to create
240165eef222Smrga program from several object files.
2402ef981d24Smrg
240365eef222SmrgThe following components of LINK-COMMAND are treated specially:
2404ef981d24Smrg
240565eef222Smrg  -all-static       do not do any dynamic linking at all
240665eef222Smrg  -avoid-version    do not add a version suffix if possible
240756957a04Smrg  -bindir BINDIR    specify path to binaries directory (for systems where
240856957a04Smrg                    libraries must be found in the PATH setting at runtime)
240965eef222Smrg  -dlopen FILE      \`-dlpreopen' FILE if it cannot be dlopened at runtime
241065eef222Smrg  -dlpreopen FILE   link in FILE and add its symbols to lt_preloaded_symbols
241165eef222Smrg  -export-dynamic   allow symbols from OUTPUT-FILE to be resolved with dlsym(3)
241265eef222Smrg  -export-symbols SYMFILE
241365eef222Smrg                    try to export only the symbols listed in SYMFILE
241465eef222Smrg  -export-symbols-regex REGEX
241565eef222Smrg                    try to export only the symbols matching REGEX
241665eef222Smrg  -LLIBDIR          search LIBDIR for required installed libraries
241765eef222Smrg  -lNAME            OUTPUT-FILE requires the installed library libNAME
241865eef222Smrg  -module           build a library that can dlopened
241965eef222Smrg  -no-fast-install  disable the fast-install mode
242065eef222Smrg  -no-install       link a not-installable executable
242165eef222Smrg  -no-undefined     declare that a library does not refer to external symbols
242265eef222Smrg  -o OUTPUT-FILE    create OUTPUT-FILE from the specified objects
242365eef222Smrg  -objectlist FILE  Use a list of object files found in FILE to specify objects
242465eef222Smrg  -precious-files-regex REGEX
242565eef222Smrg                    don't remove output files matching REGEX
242665eef222Smrg  -release RELEASE  specify package release information
242765eef222Smrg  -rpath LIBDIR     the created library will eventually be installed in LIBDIR
242865eef222Smrg  -R[ ]LIBDIR       add LIBDIR to the runtime path of programs and libraries
242965eef222Smrg  -shared           only do dynamic linking of libtool libraries
243065eef222Smrg  -shrext SUFFIX    override the standard shared library file extension
243165eef222Smrg  -static           do not do any dynamic linking of uninstalled libtool libraries
243265eef222Smrg  -static-libtool-libs
243365eef222Smrg                    do not do any dynamic linking of libtool libraries
243465eef222Smrg  -version-info CURRENT[:REVISION[:AGE]]
243565eef222Smrg                    specify library version info [each variable defaults to 0]
243665eef222Smrg  -weak LIBNAME     declare that the target provides the LIBNAME interface
243756957a04Smrg  -Wc,FLAG
243856957a04Smrg  -Xcompiler FLAG   pass linker-specific FLAG directly to the compiler
243956957a04Smrg  -Wl,FLAG
244056957a04Smrg  -Xlinker FLAG     pass linker-specific FLAG directly to the linker
244156957a04Smrg  -XCClinker FLAG   pass link-specific FLAG to the compiler driver (CC)
2442ef981d24Smrg
244365eef222SmrgAll other options (arguments beginning with \`-') are ignored.
2444ef981d24Smrg
244565eef222SmrgEvery other argument is treated as a filename.  Files ending in \`.la' are
244665eef222Smrgtreated as uninstalled libtool libraries, other files are standard or library
244765eef222Smrgobject files.
2448ef981d24Smrg
244965eef222SmrgIf the OUTPUT-FILE ends in \`.la', then a libtool library is created,
245065eef222Smrgonly library objects (\`.lo' files) may be specified, and \`-rpath' is
245165eef222Smrgrequired, except when creating a convenience library.
2452ef981d24Smrg
245365eef222SmrgIf OUTPUT-FILE ends in \`.a' or \`.lib', then a standard library is created
245465eef222Smrgusing \`ar' and \`ranlib', or on Windows using \`lib'.
2455ef981d24Smrg
245665eef222SmrgIf OUTPUT-FILE ends in \`.lo' or \`.${objext}', then a reloadable object file
245765eef222Smrgis created, otherwise an executable program is created."
2458ef981d24Smrg        ;;
2459ef981d24Smrg
246065eef222Smrg      uninstall)
246165eef222Smrg        $ECHO \
246265eef222Smrg"Usage: $progname [OPTION]... --mode=uninstall RM [RM-OPTION]... FILE...
2463ef981d24Smrg
246465eef222SmrgRemove libraries from an installation directory.
2465ef981d24Smrg
246665eef222SmrgRM is the name of the program to use to delete files associated with each FILE
246765eef222Smrg(typically \`/bin/rm').  RM-OPTIONS are options (such as \`-f') to be passed
246865eef222Smrgto RM.
2469ef981d24Smrg
247065eef222SmrgIf FILE is a libtool library, all the files associated with it are deleted.
247165eef222SmrgOtherwise, only FILE itself is deleted using RM."
247265eef222Smrg        ;;
2473ef981d24Smrg
247465eef222Smrg      *)
2475200d7199Smrg        func_fatal_help "invalid operation mode \`$opt_mode'"
247665eef222Smrg        ;;
247765eef222Smrg    esac
2478ef981d24Smrg
247956957a04Smrg    echo
248065eef222Smrg    $ECHO "Try \`$progname --help' for more information about other modes."
248165eef222Smrg}
2482ef981d24Smrg
248356957a04Smrg# Now that we've collected a possible --mode arg, show help if necessary
248456957a04Smrgif $opt_help; then
248556957a04Smrg  if test "$opt_help" = :; then
248656957a04Smrg    func_mode_help
248756957a04Smrg  else
248856957a04Smrg    {
248956957a04Smrg      func_help noexit
2490200d7199Smrg      for opt_mode in compile link execute install finish uninstall clean; do
249156957a04Smrg	func_mode_help
249256957a04Smrg      done
249356957a04Smrg    } | sed -n '1p; 2,$s/^Usage:/  or: /p'
249456957a04Smrg    {
249556957a04Smrg      func_help noexit
2496200d7199Smrg      for opt_mode in compile link execute install finish uninstall clean; do
249756957a04Smrg	echo
249856957a04Smrg	func_mode_help
249956957a04Smrg      done
250056957a04Smrg    } |
250156957a04Smrg    sed '1d
250256957a04Smrg      /^When reporting/,/^Report/{
250356957a04Smrg	H
250456957a04Smrg	d
250556957a04Smrg      }
250656957a04Smrg      $x
250756957a04Smrg      /information about other modes/d
250856957a04Smrg      /more detailed .*MODE/d
250956957a04Smrg      s/^Usage:.*--mode=\([^ ]*\) .*/Description of \1 mode:/'
251056957a04Smrg  fi
251156957a04Smrg  exit $?
251256957a04Smrgfi
2513ef981d24Smrg
2514ef981d24Smrg
251565eef222Smrg# func_mode_execute arg...
251665eef222Smrgfunc_mode_execute ()
251765eef222Smrg{
251865eef222Smrg    $opt_debug
251965eef222Smrg    # The first argument is the command name.
252065eef222Smrg    cmd="$nonopt"
252165eef222Smrg    test -z "$cmd" && \
252265eef222Smrg      func_fatal_help "you must specify a COMMAND"
2523ef981d24Smrg
252465eef222Smrg    # Handle -dlopen flags immediately.
2525200d7199Smrg    for file in $opt_dlopen; do
252665eef222Smrg      test -f "$file" \
252765eef222Smrg	|| func_fatal_help "\`$file' is not a file"
2528ef981d24Smrg
252965eef222Smrg      dir=
253065eef222Smrg      case $file in
253165eef222Smrg      *.la)
2532200d7199Smrg	func_resolve_sysroot "$file"
2533200d7199Smrg	file=$func_resolve_sysroot_result
2534200d7199Smrg
253565eef222Smrg	# Check to see that this really is a libtool archive.
253665eef222Smrg	func_lalib_unsafe_p "$file" \
253765eef222Smrg	  || func_fatal_help "\`$lib' is not a valid libtool archive"
2538ef981d24Smrg
253965eef222Smrg	# Read the libtool library.
254065eef222Smrg	dlname=
254165eef222Smrg	library_names=
254265eef222Smrg	func_source "$file"
2543ef981d24Smrg
254465eef222Smrg	# Skip this library if it cannot be dlopened.
254565eef222Smrg	if test -z "$dlname"; then
254665eef222Smrg	  # Warn if it was a shared library.
254765eef222Smrg	  test -n "$library_names" && \
254865eef222Smrg	    func_warning "\`$file' was not linked with \`-export-dynamic'"
254965eef222Smrg	  continue
255065eef222Smrg	fi
2551ef981d24Smrg
255265eef222Smrg	func_dirname "$file" "" "."
255365eef222Smrg	dir="$func_dirname_result"
2554ef981d24Smrg
255565eef222Smrg	if test -f "$dir/$objdir/$dlname"; then
2556200d7199Smrg	  func_append dir "/$objdir"
255765eef222Smrg	else
255865eef222Smrg	  if test ! -f "$dir/$dlname"; then
255965eef222Smrg	    func_fatal_error "cannot find \`$dlname' in \`$dir' or \`$dir/$objdir'"
256065eef222Smrg	  fi
256165eef222Smrg	fi
2562ef981d24Smrg	;;
2563ef981d24Smrg
256465eef222Smrg      *.lo)
256565eef222Smrg	# Just add the directory containing the .lo file.
256665eef222Smrg	func_dirname "$file" "" "."
256765eef222Smrg	dir="$func_dirname_result"
2568ef981d24Smrg	;;
2569ef981d24Smrg
257065eef222Smrg      *)
257165eef222Smrg	func_warning "\`-dlopen' is ignored for non-libtool libraries and objects"
2572ef981d24Smrg	continue
2573ef981d24Smrg	;;
257465eef222Smrg      esac
2575ef981d24Smrg
257665eef222Smrg      # Get the absolute pathname.
257765eef222Smrg      absdir=`cd "$dir" && pwd`
257865eef222Smrg      test -n "$absdir" && dir="$absdir"
2579ef981d24Smrg
258065eef222Smrg      # Now add the directory to shlibpath_var.
258165eef222Smrg      if eval "test -z \"\$$shlibpath_var\""; then
258265eef222Smrg	eval "$shlibpath_var=\"\$dir\""
258365eef222Smrg      else
258465eef222Smrg	eval "$shlibpath_var=\"\$dir:\$$shlibpath_var\""
258565eef222Smrg      fi
258665eef222Smrg    done
2587ef981d24Smrg
258865eef222Smrg    # This variable tells wrapper scripts just to set shlibpath_var
258965eef222Smrg    # rather than running their programs.
259065eef222Smrg    libtool_execute_magic="$magic"
2591ef981d24Smrg
259265eef222Smrg    # Check if any of the arguments is a wrapper script.
259365eef222Smrg    args=
259465eef222Smrg    for file
259565eef222Smrg    do
259665eef222Smrg      case $file in
259756957a04Smrg      -* | *.la | *.lo ) ;;
259865eef222Smrg      *)
259965eef222Smrg	# Do a test to see if this is really a libtool program.
260065eef222Smrg	if func_ltwrapper_script_p "$file"; then
260165eef222Smrg	  func_source "$file"
260265eef222Smrg	  # Transform arg to wrapped name.
260365eef222Smrg	  file="$progdir/$program"
260465eef222Smrg	elif func_ltwrapper_executable_p "$file"; then
260565eef222Smrg	  func_ltwrapper_scriptname "$file"
260665eef222Smrg	  func_source "$func_ltwrapper_scriptname_result"
260765eef222Smrg	  # Transform arg to wrapped name.
260865eef222Smrg	  file="$progdir/$program"
260965eef222Smrg	fi
261065eef222Smrg	;;
261165eef222Smrg      esac
261265eef222Smrg      # Quote arguments (to preserve shell metacharacters).
2613200d7199Smrg      func_append_quoted args "$file"
261465eef222Smrg    done
2615ef981d24Smrg
261665eef222Smrg    if test "X$opt_dry_run" = Xfalse; then
261765eef222Smrg      if test -n "$shlibpath_var"; then
261865eef222Smrg	# Export the shlibpath_var.
261965eef222Smrg	eval "export $shlibpath_var"
262065eef222Smrg      fi
2621ef981d24Smrg
262265eef222Smrg      # Restore saved environment variables
262365eef222Smrg      for lt_var in LANG LANGUAGE LC_ALL LC_CTYPE LC_COLLATE LC_MESSAGES
262465eef222Smrg      do
262565eef222Smrg	eval "if test \"\${save_$lt_var+set}\" = set; then
262665eef222Smrg                $lt_var=\$save_$lt_var; export $lt_var
262765eef222Smrg	      else
262865eef222Smrg		$lt_unset $lt_var
262965eef222Smrg	      fi"
263065eef222Smrg      done
2631ef981d24Smrg
263265eef222Smrg      # Now prepare to actually exec the command.
263365eef222Smrg      exec_cmd="\$cmd$args"
263465eef222Smrg    else
263565eef222Smrg      # Display what would be done.
263665eef222Smrg      if test -n "$shlibpath_var"; then
263765eef222Smrg	eval "\$ECHO \"\$shlibpath_var=\$$shlibpath_var\""
263856957a04Smrg	echo "export $shlibpath_var"
263965eef222Smrg      fi
264065eef222Smrg      $ECHO "$cmd$args"
264165eef222Smrg      exit $EXIT_SUCCESS
264265eef222Smrg    fi
264365eef222Smrg}
2644ef981d24Smrg
2645200d7199Smrgtest "$opt_mode" = execute && func_mode_execute ${1+"$@"}
2646ef981d24Smrg
2647ef981d24Smrg
264865eef222Smrg# func_mode_finish arg...
264965eef222Smrgfunc_mode_finish ()
265065eef222Smrg{
265165eef222Smrg    $opt_debug
2652200d7199Smrg    libs=
2653200d7199Smrg    libdirs=
265465eef222Smrg    admincmds=
2655ef981d24Smrg
2656200d7199Smrg    for opt in "$nonopt" ${1+"$@"}
2657200d7199Smrg    do
2658200d7199Smrg      if test -d "$opt"; then
2659200d7199Smrg	func_append libdirs " $opt"
2660200d7199Smrg
2661200d7199Smrg      elif test -f "$opt"; then
2662200d7199Smrg	if func_lalib_unsafe_p "$opt"; then
2663200d7199Smrg	  func_append libs " $opt"
2664200d7199Smrg	else
2665200d7199Smrg	  func_warning "\`$opt' is not a valid libtool archive"
2666200d7199Smrg	fi
2667200d7199Smrg
2668200d7199Smrg      else
2669200d7199Smrg	func_fatal_error "invalid argument \`$opt'"
2670200d7199Smrg      fi
2671200d7199Smrg    done
2672200d7199Smrg
2673200d7199Smrg    if test -n "$libs"; then
2674200d7199Smrg      if test -n "$lt_sysroot"; then
2675200d7199Smrg        sysroot_regex=`$ECHO "$lt_sysroot" | $SED "$sed_make_literal_regex"`
2676200d7199Smrg        sysroot_cmd="s/\([ ']\)$sysroot_regex/\1/g;"
2677200d7199Smrg      else
2678200d7199Smrg        sysroot_cmd=
2679200d7199Smrg      fi
2680200d7199Smrg
2681200d7199Smrg      # Remove sysroot references
2682200d7199Smrg      if $opt_dry_run; then
2683200d7199Smrg        for lib in $libs; do
2684200d7199Smrg          echo "removing references to $lt_sysroot and \`=' prefixes from $lib"
2685200d7199Smrg        done
2686200d7199Smrg      else
2687200d7199Smrg        tmpdir=`func_mktempdir`
2688200d7199Smrg        for lib in $libs; do
2689200d7199Smrg	  sed -e "${sysroot_cmd} s/\([ ']-[LR]\)=/\1/g; s/\([ ']\)=/\1/g" $lib \
2690200d7199Smrg	    > $tmpdir/tmp-la
2691200d7199Smrg	  mv -f $tmpdir/tmp-la $lib
2692200d7199Smrg	done
2693200d7199Smrg        ${RM}r "$tmpdir"
2694200d7199Smrg      fi
2695200d7199Smrg    fi
2696ef981d24Smrg
2697200d7199Smrg    if test -n "$finish_cmds$finish_eval" && test -n "$libdirs"; then
269865eef222Smrg      for libdir in $libdirs; do
269965eef222Smrg	if test -n "$finish_cmds"; then
270065eef222Smrg	  # Do each command in the finish commands.
270165eef222Smrg	  func_execute_cmds "$finish_cmds" 'admincmds="$admincmds
270265eef222Smrg'"$cmd"'"'
270365eef222Smrg	fi
270465eef222Smrg	if test -n "$finish_eval"; then
270565eef222Smrg	  # Do the single finish_eval.
270665eef222Smrg	  eval cmds=\"$finish_eval\"
2707200d7199Smrg	  $opt_dry_run || eval "$cmds" || func_append admincmds "
270865eef222Smrg       $cmds"
270965eef222Smrg	fi
271065eef222Smrg      done
271165eef222Smrg    fi
2712ef981d24Smrg
271365eef222Smrg    # Exit here if they wanted silent mode.
271465eef222Smrg    $opt_silent && exit $EXIT_SUCCESS
2715ef981d24Smrg
2716200d7199Smrg    if test -n "$finish_cmds$finish_eval" && test -n "$libdirs"; then
2717200d7199Smrg      echo "----------------------------------------------------------------------"
2718200d7199Smrg      echo "Libraries have been installed in:"
2719200d7199Smrg      for libdir in $libdirs; do
2720200d7199Smrg	$ECHO "   $libdir"
2721200d7199Smrg      done
2722200d7199Smrg      echo
2723200d7199Smrg      echo "If you ever happen to want to link against installed libraries"
2724200d7199Smrg      echo "in a given directory, LIBDIR, you must either use libtool, and"
2725200d7199Smrg      echo "specify the full pathname of the library, or use the \`-LLIBDIR'"
2726200d7199Smrg      echo "flag during linking and do at least one of the following:"
2727200d7199Smrg      if test -n "$shlibpath_var"; then
2728200d7199Smrg	echo "   - add LIBDIR to the \`$shlibpath_var' environment variable"
2729200d7199Smrg	echo "     during execution"
2730200d7199Smrg      fi
2731200d7199Smrg      if test -n "$runpath_var"; then
2732200d7199Smrg	echo "   - add LIBDIR to the \`$runpath_var' environment variable"
2733200d7199Smrg	echo "     during linking"
2734200d7199Smrg      fi
2735200d7199Smrg      if test -n "$hardcode_libdir_flag_spec"; then
2736200d7199Smrg	libdir=LIBDIR
2737200d7199Smrg	eval flag=\"$hardcode_libdir_flag_spec\"
2738ef981d24Smrg
2739200d7199Smrg	$ECHO "   - use the \`$flag' linker flag"
2740200d7199Smrg      fi
2741200d7199Smrg      if test -n "$admincmds"; then
2742200d7199Smrg	$ECHO "   - have your system administrator run these commands:$admincmds"
2743200d7199Smrg      fi
2744200d7199Smrg      if test -f /etc/ld.so.conf; then
2745200d7199Smrg	echo "   - have your system administrator add LIBDIR to \`/etc/ld.so.conf'"
2746200d7199Smrg      fi
2747200d7199Smrg      echo
2748ef981d24Smrg
2749200d7199Smrg      echo "See any operating system documentation about shared libraries for"
2750200d7199Smrg      case $host in
2751200d7199Smrg	solaris2.[6789]|solaris2.1[0-9])
2752200d7199Smrg	  echo "more information, such as the ld(1), crle(1) and ld.so(8) manual"
2753200d7199Smrg	  echo "pages."
2754200d7199Smrg	  ;;
2755200d7199Smrg	*)
2756200d7199Smrg	  echo "more information, such as the ld(1) and ld.so(8) manual pages."
2757200d7199Smrg	  ;;
2758200d7199Smrg      esac
2759200d7199Smrg      echo "----------------------------------------------------------------------"
2760200d7199Smrg    fi
276165eef222Smrg    exit $EXIT_SUCCESS
276265eef222Smrg}
2763ef981d24Smrg
2764200d7199Smrgtest "$opt_mode" = finish && func_mode_finish ${1+"$@"}
2765ef981d24Smrg
2766ef981d24Smrg
276765eef222Smrg# func_mode_install arg...
276865eef222Smrgfunc_mode_install ()
276965eef222Smrg{
277065eef222Smrg    $opt_debug
277165eef222Smrg    # There may be an optional sh(1) argument at the beginning of
277265eef222Smrg    # install_prog (especially on Windows NT).
277365eef222Smrg    if test "$nonopt" = "$SHELL" || test "$nonopt" = /bin/sh ||
277465eef222Smrg       # Allow the use of GNU shtool's install command.
277556957a04Smrg       case $nonopt in *shtool*) :;; *) false;; esac; then
277665eef222Smrg      # Aesthetically quote it.
277765eef222Smrg      func_quote_for_eval "$nonopt"
277865eef222Smrg      install_prog="$func_quote_for_eval_result "
277965eef222Smrg      arg=$1
278065eef222Smrg      shift
278165eef222Smrg    else
278265eef222Smrg      install_prog=
278365eef222Smrg      arg=$nonopt
278465eef222Smrg    fi
2785ef981d24Smrg
278665eef222Smrg    # The real first argument should be the name of the installation program.
278765eef222Smrg    # Aesthetically quote it.
278865eef222Smrg    func_quote_for_eval "$arg"
2789200d7199Smrg    func_append install_prog "$func_quote_for_eval_result"
279056957a04Smrg    install_shared_prog=$install_prog
279156957a04Smrg    case " $install_prog " in
279256957a04Smrg      *[\\\ /]cp\ *) install_cp=: ;;
279356957a04Smrg      *) install_cp=false ;;
279456957a04Smrg    esac
279565eef222Smrg
279665eef222Smrg    # We need to accept at least all the BSD install flags.
279765eef222Smrg    dest=
279865eef222Smrg    files=
279965eef222Smrg    opts=
280065eef222Smrg    prev=
280165eef222Smrg    install_type=
280265eef222Smrg    isdir=no
280365eef222Smrg    stripme=
280456957a04Smrg    no_mode=:
280565eef222Smrg    for arg
280665eef222Smrg    do
280756957a04Smrg      arg2=
280865eef222Smrg      if test -n "$dest"; then
2809200d7199Smrg	func_append files " $dest"
281065eef222Smrg	dest=$arg
281165eef222Smrg	continue
2812ef981d24Smrg      fi
2813ef981d24Smrg
281465eef222Smrg      case $arg in
281565eef222Smrg      -d) isdir=yes ;;
281665eef222Smrg      -f)
281756957a04Smrg	if $install_cp; then :; else
281856957a04Smrg	  prev=$arg
281956957a04Smrg	fi
282065eef222Smrg	;;
282165eef222Smrg      -g | -m | -o)
282265eef222Smrg	prev=$arg
282365eef222Smrg	;;
282465eef222Smrg      -s)
282565eef222Smrg	stripme=" -s"
282665eef222Smrg	continue
282765eef222Smrg	;;
282865eef222Smrg      -*)
282965eef222Smrg	;;
283065eef222Smrg      *)
283165eef222Smrg	# If the previous option needed an argument, then skip it.
283265eef222Smrg	if test -n "$prev"; then
283356957a04Smrg	  if test "x$prev" = x-m && test -n "$install_override_mode"; then
283456957a04Smrg	    arg2=$install_override_mode
283556957a04Smrg	    no_mode=false
283656957a04Smrg	  fi
283765eef222Smrg	  prev=
283865eef222Smrg	else
283965eef222Smrg	  dest=$arg
284065eef222Smrg	  continue
284165eef222Smrg	fi
284265eef222Smrg	;;
284365eef222Smrg      esac
2844ef981d24Smrg
284565eef222Smrg      # Aesthetically quote the argument.
284665eef222Smrg      func_quote_for_eval "$arg"
2847200d7199Smrg      func_append install_prog " $func_quote_for_eval_result"
284856957a04Smrg      if test -n "$arg2"; then
284956957a04Smrg	func_quote_for_eval "$arg2"
285056957a04Smrg      fi
2851200d7199Smrg      func_append install_shared_prog " $func_quote_for_eval_result"
285265eef222Smrg    done
2853ef981d24Smrg
285465eef222Smrg    test -z "$install_prog" && \
285565eef222Smrg      func_fatal_help "you must specify an install program"
2856ef981d24Smrg
285765eef222Smrg    test -n "$prev" && \
285865eef222Smrg      func_fatal_help "the \`$prev' option requires an argument"
2859ef981d24Smrg
286056957a04Smrg    if test -n "$install_override_mode" && $no_mode; then
286156957a04Smrg      if $install_cp; then :; else
286256957a04Smrg	func_quote_for_eval "$install_override_mode"
2863200d7199Smrg	func_append install_shared_prog " -m $func_quote_for_eval_result"
286456957a04Smrg      fi
286556957a04Smrg    fi
286656957a04Smrg
286765eef222Smrg    if test -z "$files"; then
286865eef222Smrg      if test -z "$dest"; then
286965eef222Smrg	func_fatal_help "no file or destination specified"
287065eef222Smrg      else
287165eef222Smrg	func_fatal_help "you must specify a destination"
2872ef981d24Smrg      fi
2873ef981d24Smrg    fi
2874ef981d24Smrg
287565eef222Smrg    # Strip any trailing slash from the destination.
287665eef222Smrg    func_stripname '' '/' "$dest"
287765eef222Smrg    dest=$func_stripname_result
2878ef981d24Smrg
287965eef222Smrg    # Check to see that the destination is a directory.
288065eef222Smrg    test -d "$dest" && isdir=yes
288165eef222Smrg    if test "$isdir" = yes; then
288265eef222Smrg      destdir="$dest"
288365eef222Smrg      destname=
288465eef222Smrg    else
288565eef222Smrg      func_dirname_and_basename "$dest" "" "."
288665eef222Smrg      destdir="$func_dirname_result"
288765eef222Smrg      destname="$func_basename_result"
288865eef222Smrg
288965eef222Smrg      # Not a directory, so check to see that there is only one file specified.
289065eef222Smrg      set dummy $files; shift
289165eef222Smrg      test "$#" -gt 1 && \
289265eef222Smrg	func_fatal_help "\`$dest' is not a directory"
289365eef222Smrg    fi
289465eef222Smrg    case $destdir in
289565eef222Smrg    [\\/]* | [A-Za-z]:[\\/]*) ;;
2896ef981d24Smrg    *)
289765eef222Smrg      for file in $files; do
289865eef222Smrg	case $file in
289965eef222Smrg	*.lo) ;;
290065eef222Smrg	*)
290165eef222Smrg	  func_fatal_help "\`$destdir' must be an absolute directory name"
290265eef222Smrg	  ;;
290365eef222Smrg	esac
290465eef222Smrg      done
2905ef981d24Smrg      ;;
2906ef981d24Smrg    esac
2907ef981d24Smrg
290865eef222Smrg    # This variable tells wrapper scripts just to set variables rather
290965eef222Smrg    # than running their programs.
291065eef222Smrg    libtool_install_magic="$magic"
2911ef981d24Smrg
291265eef222Smrg    staticlibs=
291365eef222Smrg    future_libdirs=
291465eef222Smrg    current_libdirs=
291565eef222Smrg    for file in $files; do
2916ef981d24Smrg
291765eef222Smrg      # Do each installation.
291865eef222Smrg      case $file in
291965eef222Smrg      *.$libext)
292065eef222Smrg	# Do the static libraries later.
2921200d7199Smrg	func_append staticlibs " $file"
292265eef222Smrg	;;
292365eef222Smrg
292465eef222Smrg      *.la)
2925200d7199Smrg	func_resolve_sysroot "$file"
2926200d7199Smrg	file=$func_resolve_sysroot_result
2927200d7199Smrg
292865eef222Smrg	# Check to see that this really is a libtool archive.
292965eef222Smrg	func_lalib_unsafe_p "$file" \
293065eef222Smrg	  || func_fatal_help "\`$file' is not a valid libtool archive"
293165eef222Smrg
293265eef222Smrg	library_names=
293365eef222Smrg	old_library=
293465eef222Smrg	relink_command=
293565eef222Smrg	func_source "$file"
293665eef222Smrg
293765eef222Smrg	# Add the libdir to current_libdirs if it is the destination.
293865eef222Smrg	if test "X$destdir" = "X$libdir"; then
293965eef222Smrg	  case "$current_libdirs " in
294065eef222Smrg	  *" $libdir "*) ;;
2941200d7199Smrg	  *) func_append current_libdirs " $libdir" ;;
2942ef981d24Smrg	  esac
294365eef222Smrg	else
294465eef222Smrg	  # Note the libdir as a future libdir.
294565eef222Smrg	  case "$future_libdirs " in
294665eef222Smrg	  *" $libdir "*) ;;
2947200d7199Smrg	  *) func_append future_libdirs " $libdir" ;;
294865eef222Smrg	  esac
294965eef222Smrg	fi
2950ef981d24Smrg
295165eef222Smrg	func_dirname "$file" "/" ""
295265eef222Smrg	dir="$func_dirname_result"
2953200d7199Smrg	func_append dir "$objdir"
295465eef222Smrg
295565eef222Smrg	if test -n "$relink_command"; then
295665eef222Smrg	  # Determine the prefix the user has applied to our future dir.
295756957a04Smrg	  inst_prefix_dir=`$ECHO "$destdir" | $SED -e "s%$libdir\$%%"`
295865eef222Smrg
295965eef222Smrg	  # Don't allow the user to place us outside of our expected
296065eef222Smrg	  # location b/c this prevents finding dependent libraries that
296165eef222Smrg	  # are installed to the same prefix.
296265eef222Smrg	  # At present, this check doesn't affect windows .dll's that
296365eef222Smrg	  # are installed into $libdir/../bin (currently, that works fine)
296465eef222Smrg	  # but it's something to keep an eye on.
296565eef222Smrg	  test "$inst_prefix_dir" = "$destdir" && \
296665eef222Smrg	    func_fatal_error "error: cannot install \`$file' to a directory not ending in $libdir"
296765eef222Smrg
296865eef222Smrg	  if test -n "$inst_prefix_dir"; then
296965eef222Smrg	    # Stick the inst_prefix_dir data into the link command.
297056957a04Smrg	    relink_command=`$ECHO "$relink_command" | $SED "s%@inst_prefix_dir@%-inst-prefix-dir $inst_prefix_dir%"`
297165eef222Smrg	  else
297256957a04Smrg	    relink_command=`$ECHO "$relink_command" | $SED "s%@inst_prefix_dir@%%"`
297365eef222Smrg	  fi
297465eef222Smrg
297565eef222Smrg	  func_warning "relinking \`$file'"
297665eef222Smrg	  func_show_eval "$relink_command" \
297765eef222Smrg	    'func_fatal_error "error: relink \`$file'\'' with the above command before installing it"'
297865eef222Smrg	fi
297965eef222Smrg
298065eef222Smrg	# See the names of the shared library.
298165eef222Smrg	set dummy $library_names; shift
298265eef222Smrg	if test -n "$1"; then
298365eef222Smrg	  realname="$1"
298465eef222Smrg	  shift
298565eef222Smrg
298665eef222Smrg	  srcname="$realname"
298765eef222Smrg	  test -n "$relink_command" && srcname="$realname"T
298865eef222Smrg
298965eef222Smrg	  # Install the shared library and build the symlinks.
299056957a04Smrg	  func_show_eval "$install_shared_prog $dir/$srcname $destdir/$realname" \
299165eef222Smrg	      'exit $?'
299265eef222Smrg	  tstripme="$stripme"
299365eef222Smrg	  case $host_os in
299465eef222Smrg	  cygwin* | mingw* | pw32* | cegcc*)
299565eef222Smrg	    case $realname in
299665eef222Smrg	    *.dll.a)
299765eef222Smrg	      tstripme=""
299865eef222Smrg	      ;;
299965eef222Smrg	    esac
3000ef981d24Smrg	    ;;
3001ef981d24Smrg	  esac
300265eef222Smrg	  if test -n "$tstripme" && test -n "$striplib"; then
300365eef222Smrg	    func_show_eval "$striplib $destdir/$realname" 'exit $?'
3004ef981d24Smrg	  fi
300565eef222Smrg
300665eef222Smrg	  if test "$#" -gt 0; then
300765eef222Smrg	    # Delete the old symlinks, and create new ones.
300865eef222Smrg	    # Try `ln -sf' first, because the `ln' binary might depend on
300965eef222Smrg	    # the symlink we replace!  Solaris /bin/ln does not understand -f,
301065eef222Smrg	    # so we also need to try rm && ln -s.
301165eef222Smrg	    for linkname
301265eef222Smrg	    do
301365eef222Smrg	      test "$linkname" != "$realname" \
301465eef222Smrg		&& func_show_eval "(cd $destdir && { $LN_S -f $realname $linkname || { $RM $linkname && $LN_S $realname $linkname; }; })"
3015ef981d24Smrg	    done
3016ef981d24Smrg	  fi
3017ef981d24Smrg
301865eef222Smrg	  # Do each command in the postinstall commands.
301965eef222Smrg	  lib="$destdir/$realname"
302065eef222Smrg	  func_execute_cmds "$postinstall_cmds" 'exit $?'
3021ef981d24Smrg	fi
3022ef981d24Smrg
302365eef222Smrg	# Install the pseudo-library for information purposes.
302465eef222Smrg	func_basename "$file"
302565eef222Smrg	name="$func_basename_result"
302665eef222Smrg	instname="$dir/$name"i
302765eef222Smrg	func_show_eval "$install_prog $instname $destdir/$name" 'exit $?'
3028ef981d24Smrg
302965eef222Smrg	# Maybe install the static library, too.
3030200d7199Smrg	test -n "$old_library" && func_append staticlibs " $dir/$old_library"
303165eef222Smrg	;;
3032ef981d24Smrg
303365eef222Smrg      *.lo)
303465eef222Smrg	# Install (i.e. copy) a libtool object.
3035ef981d24Smrg
303665eef222Smrg	# Figure out destination file name, if it wasn't already specified.
303765eef222Smrg	if test -n "$destname"; then
303865eef222Smrg	  destfile="$destdir/$destname"
303965eef222Smrg	else
304065eef222Smrg	  func_basename "$file"
304165eef222Smrg	  destfile="$func_basename_result"
304265eef222Smrg	  destfile="$destdir/$destfile"
304365eef222Smrg	fi
304465eef222Smrg
304565eef222Smrg	# Deduce the name of the destination old-style object file.
304665eef222Smrg	case $destfile in
304765eef222Smrg	*.lo)
304865eef222Smrg	  func_lo2o "$destfile"
304965eef222Smrg	  staticdest=$func_lo2o_result
305065eef222Smrg	  ;;
305165eef222Smrg	*.$objext)
305265eef222Smrg	  staticdest="$destfile"
305365eef222Smrg	  destfile=
305465eef222Smrg	  ;;
305565eef222Smrg	*)
305665eef222Smrg	  func_fatal_help "cannot copy a libtool object to \`$destfile'"
305765eef222Smrg	  ;;
3058ef981d24Smrg	esac
3059ef981d24Smrg
306065eef222Smrg	# Install the libtool object if requested.
306165eef222Smrg	test -n "$destfile" && \
306265eef222Smrg	  func_show_eval "$install_prog $file $destfile" 'exit $?'
306365eef222Smrg
306465eef222Smrg	# Install the old object if enabled.
306565eef222Smrg	if test "$build_old_libs" = yes; then
306665eef222Smrg	  # Deduce the name of the old-style object file.
306765eef222Smrg	  func_lo2o "$file"
306865eef222Smrg	  staticobj=$func_lo2o_result
306965eef222Smrg	  func_show_eval "$install_prog \$staticobj \$staticdest" 'exit $?'
3070ef981d24Smrg	fi
307165eef222Smrg	exit $EXIT_SUCCESS
307265eef222Smrg	;;
3073ef981d24Smrg
307465eef222Smrg      *)
307565eef222Smrg	# Figure out destination file name, if it wasn't already specified.
307665eef222Smrg	if test -n "$destname"; then
307765eef222Smrg	  destfile="$destdir/$destname"
307865eef222Smrg	else
307965eef222Smrg	  func_basename "$file"
308065eef222Smrg	  destfile="$func_basename_result"
308165eef222Smrg	  destfile="$destdir/$destfile"
308265eef222Smrg	fi
308365eef222Smrg
308465eef222Smrg	# If the file is missing, and there is a .exe on the end, strip it
308565eef222Smrg	# because it is most likely a libtool script we actually want to
308665eef222Smrg	# install
308765eef222Smrg	stripped_ext=""
308865eef222Smrg	case $file in
308965eef222Smrg	  *.exe)
309065eef222Smrg	    if test ! -f "$file"; then
309165eef222Smrg	      func_stripname '' '.exe' "$file"
309265eef222Smrg	      file=$func_stripname_result
309365eef222Smrg	      stripped_ext=".exe"
3094ef981d24Smrg	    fi
309565eef222Smrg	    ;;
309665eef222Smrg	esac
3097ef981d24Smrg
309865eef222Smrg	# Do a test to see if this is really a libtool program.
309965eef222Smrg	case $host in
310065eef222Smrg	*cygwin* | *mingw*)
310165eef222Smrg	    if func_ltwrapper_executable_p "$file"; then
310265eef222Smrg	      func_ltwrapper_scriptname "$file"
310365eef222Smrg	      wrapper=$func_ltwrapper_scriptname_result
310465eef222Smrg	    else
310565eef222Smrg	      func_stripname '' '.exe' "$file"
310665eef222Smrg	      wrapper=$func_stripname_result
310765eef222Smrg	    fi
310865eef222Smrg	    ;;
310965eef222Smrg	*)
311065eef222Smrg	    wrapper=$file
311165eef222Smrg	    ;;
311265eef222Smrg	esac
311365eef222Smrg	if func_ltwrapper_script_p "$wrapper"; then
311465eef222Smrg	  notinst_deplibs=
311565eef222Smrg	  relink_command=
3116ef981d24Smrg
311765eef222Smrg	  func_source "$wrapper"
3118ef981d24Smrg
311965eef222Smrg	  # Check the variables that should have been set.
312065eef222Smrg	  test -z "$generated_by_libtool_version" && \
312165eef222Smrg	    func_fatal_error "invalid libtool wrapper script \`$wrapper'"
312265eef222Smrg
312365eef222Smrg	  finalize=yes
312465eef222Smrg	  for lib in $notinst_deplibs; do
312565eef222Smrg	    # Check to see that each library is installed.
312665eef222Smrg	    libdir=
312765eef222Smrg	    if test -f "$lib"; then
312865eef222Smrg	      func_source "$lib"
312965eef222Smrg	    fi
313056957a04Smrg	    libfile="$libdir/"`$ECHO "$lib" | $SED 's%^.*/%%g'` ### testsuite: skip nested quoting test
313165eef222Smrg	    if test -n "$libdir" && test ! -f "$libfile"; then
313265eef222Smrg	      func_warning "\`$lib' has not been installed in \`$libdir'"
313365eef222Smrg	      finalize=no
313465eef222Smrg	    fi
313565eef222Smrg	  done
313665eef222Smrg
313765eef222Smrg	  relink_command=
313865eef222Smrg	  func_source "$wrapper"
313965eef222Smrg
314065eef222Smrg	  outputname=
314165eef222Smrg	  if test "$fast_install" = no && test -n "$relink_command"; then
314265eef222Smrg	    $opt_dry_run || {
314365eef222Smrg	      if test "$finalize" = yes; then
314465eef222Smrg	        tmpdir=`func_mktempdir`
314565eef222Smrg		func_basename "$file$stripped_ext"
314665eef222Smrg		file="$func_basename_result"
314765eef222Smrg	        outputname="$tmpdir/$file"
314865eef222Smrg	        # Replace the output file specification.
314956957a04Smrg	        relink_command=`$ECHO "$relink_command" | $SED 's%@OUTPUT@%'"$outputname"'%g'`
315065eef222Smrg
315165eef222Smrg	        $opt_silent || {
315265eef222Smrg	          func_quote_for_expand "$relink_command"
315365eef222Smrg		  eval "func_echo $func_quote_for_expand_result"
315465eef222Smrg	        }
315565eef222Smrg	        if eval "$relink_command"; then :
315665eef222Smrg	          else
315765eef222Smrg		  func_error "error: relink \`$file' with the above command before installing it"
315865eef222Smrg		  $opt_dry_run || ${RM}r "$tmpdir"
315965eef222Smrg		  continue
316065eef222Smrg	        fi
316165eef222Smrg	        file="$outputname"
316265eef222Smrg	      else
316365eef222Smrg	        func_warning "cannot relink \`$file'"
316465eef222Smrg	      fi
316565eef222Smrg	    }
3166ef981d24Smrg	  else
316765eef222Smrg	    # Install the binary that we compiled earlier.
316856957a04Smrg	    file=`$ECHO "$file$stripped_ext" | $SED "s%\([^/]*\)$%$objdir/\1%"`
3169ef981d24Smrg	  fi
317065eef222Smrg	fi
3171ef981d24Smrg
317265eef222Smrg	# remove .exe since cygwin /usr/bin/install will append another
317365eef222Smrg	# one anyway
317465eef222Smrg	case $install_prog,$host in
317565eef222Smrg	*/usr/bin/install*,*cygwin*)
317665eef222Smrg	  case $file:$destfile in
317765eef222Smrg	  *.exe:*.exe)
317865eef222Smrg	    # this is ok
317965eef222Smrg	    ;;
318065eef222Smrg	  *.exe:*)
318165eef222Smrg	    destfile=$destfile.exe
318265eef222Smrg	    ;;
318365eef222Smrg	  *:*.exe)
318465eef222Smrg	    func_stripname '' '.exe' "$destfile"
318565eef222Smrg	    destfile=$func_stripname_result
318665eef222Smrg	    ;;
318765eef222Smrg	  esac
3188ef981d24Smrg	  ;;
3189ef981d24Smrg	esac
319065eef222Smrg	func_show_eval "$install_prog\$stripme \$file \$destfile" 'exit $?'
319165eef222Smrg	$opt_dry_run || if test -n "$outputname"; then
319265eef222Smrg	  ${RM}r "$tmpdir"
319365eef222Smrg	fi
319465eef222Smrg	;;
319565eef222Smrg      esac
319665eef222Smrg    done
3197ef981d24Smrg
319865eef222Smrg    for file in $staticlibs; do
319965eef222Smrg      func_basename "$file"
320065eef222Smrg      name="$func_basename_result"
3201ef981d24Smrg
320265eef222Smrg      # Set up the ranlib parameters.
320365eef222Smrg      oldlib="$destdir/$name"
3204ef981d24Smrg
320565eef222Smrg      func_show_eval "$install_prog \$file \$oldlib" 'exit $?'
3206ef981d24Smrg
320765eef222Smrg      if test -n "$stripme" && test -n "$old_striplib"; then
320865eef222Smrg	func_show_eval "$old_striplib $oldlib" 'exit $?'
320965eef222Smrg      fi
3210ef981d24Smrg
321165eef222Smrg      # Do each command in the postinstall commands.
321265eef222Smrg      func_execute_cmds "$old_postinstall_cmds" 'exit $?'
321365eef222Smrg    done
3214ef981d24Smrg
321565eef222Smrg    test -n "$future_libdirs" && \
321665eef222Smrg      func_warning "remember to run \`$progname --finish$future_libdirs'"
3217ef981d24Smrg
321865eef222Smrg    if test -n "$current_libdirs"; then
321965eef222Smrg      # Maybe just do a dry run.
322065eef222Smrg      $opt_dry_run && current_libdirs=" -n$current_libdirs"
322165eef222Smrg      exec_cmd='$SHELL $progpath $preserve_args --finish$current_libdirs'
322265eef222Smrg    else
322365eef222Smrg      exit $EXIT_SUCCESS
322465eef222Smrg    fi
322565eef222Smrg}
3226ef981d24Smrg
3227200d7199Smrgtest "$opt_mode" = install && func_mode_install ${1+"$@"}
3228ef981d24Smrg
3229ef981d24Smrg
323065eef222Smrg# func_generate_dlsyms outputname originator pic_p
323165eef222Smrg# Extract symbols from dlprefiles and create ${outputname}S.o with
323265eef222Smrg# a dlpreopen symbol table.
323365eef222Smrgfunc_generate_dlsyms ()
323465eef222Smrg{
323565eef222Smrg    $opt_debug
323665eef222Smrg    my_outputname="$1"
323765eef222Smrg    my_originator="$2"
323865eef222Smrg    my_pic_p="${3-no}"
323965eef222Smrg    my_prefix=`$ECHO "$my_originator" | sed 's%[^a-zA-Z0-9]%_%g'`
324065eef222Smrg    my_dlsyms=
324165eef222Smrg
324265eef222Smrg    if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then
324365eef222Smrg      if test -n "$NM" && test -n "$global_symbol_pipe"; then
324465eef222Smrg	my_dlsyms="${my_outputname}S.c"
324565eef222Smrg      else
324665eef222Smrg	func_error "not configured to extract global symbols from dlpreopened files"
324765eef222Smrg      fi
324865eef222Smrg    fi
3249ef981d24Smrg
325065eef222Smrg    if test -n "$my_dlsyms"; then
325165eef222Smrg      case $my_dlsyms in
325265eef222Smrg      "") ;;
325365eef222Smrg      *.c)
325465eef222Smrg	# Discover the nlist of each of the dlfiles.
325565eef222Smrg	nlist="$output_objdir/${my_outputname}.nm"
325665eef222Smrg
325765eef222Smrg	func_show_eval "$RM $nlist ${nlist}S ${nlist}T"
325865eef222Smrg
325965eef222Smrg	# Parse the name list into a source file.
326065eef222Smrg	func_verbose "creating $output_objdir/$my_dlsyms"
326165eef222Smrg
326265eef222Smrg	$opt_dry_run || $ECHO > "$output_objdir/$my_dlsyms" "\
326365eef222Smrg/* $my_dlsyms - symbol resolution table for \`$my_outputname' dlsym emulation. */
326465eef222Smrg/* Generated by $PROGRAM (GNU $PACKAGE$TIMESTAMP) $VERSION */
326565eef222Smrg
326665eef222Smrg#ifdef __cplusplus
326765eef222Smrgextern \"C\" {
326865eef222Smrg#endif
326965eef222Smrg
327056957a04Smrg#if defined(__GNUC__) && (((__GNUC__ == 4) && (__GNUC_MINOR__ >= 4)) || (__GNUC__ > 4))
327156957a04Smrg#pragma GCC diagnostic ignored \"-Wstrict-prototypes\"
327256957a04Smrg#endif
327356957a04Smrg
3274200d7199Smrg/* Keep this code in sync between libtool.m4, ltmain, lt_system.h, and tests.  */
3275200d7199Smrg#if defined(_WIN32) || defined(__CYGWIN__) || defined(_WIN32_WCE)
3276200d7199Smrg/* DATA imports from DLLs on WIN32 con't be const, because runtime
3277200d7199Smrg   relocations are performed -- see ld's documentation on pseudo-relocs.  */
3278200d7199Smrg# define LT_DLSYM_CONST
3279200d7199Smrg#elif defined(__osf__)
3280200d7199Smrg/* This system does not cope well with relocations in const data.  */
3281200d7199Smrg# define LT_DLSYM_CONST
3282200d7199Smrg#else
3283200d7199Smrg# define LT_DLSYM_CONST const
3284200d7199Smrg#endif
3285200d7199Smrg
328665eef222Smrg/* External symbol declarations for the compiler. */\
328765eef222Smrg"
328865eef222Smrg
328965eef222Smrg	if test "$dlself" = yes; then
329065eef222Smrg	  func_verbose "generating symbol list for \`$output'"
329165eef222Smrg
329265eef222Smrg	  $opt_dry_run || echo ': @PROGRAM@ ' > "$nlist"
329365eef222Smrg
329465eef222Smrg	  # Add our own program objects to the symbol list.
329556957a04Smrg	  progfiles=`$ECHO "$objs$old_deplibs" | $SP2NL | $SED "$lo2o" | $NL2SP`
329665eef222Smrg	  for progfile in $progfiles; do
3297200d7199Smrg	    func_to_tool_file "$progfile" func_convert_file_msys_to_w32
3298200d7199Smrg	    func_verbose "extracting global C symbols from \`$func_to_tool_file_result'"
3299200d7199Smrg	    $opt_dry_run || eval "$NM $func_to_tool_file_result | $global_symbol_pipe >> '$nlist'"
330065eef222Smrg	  done
330165eef222Smrg
330265eef222Smrg	  if test -n "$exclude_expsyms"; then
330365eef222Smrg	    $opt_dry_run || {
330465eef222Smrg	      eval '$EGREP -v " ($exclude_expsyms)$" "$nlist" > "$nlist"T'
330565eef222Smrg	      eval '$MV "$nlist"T "$nlist"'
330665eef222Smrg	    }
3307ef981d24Smrg	  fi
3308ef981d24Smrg
330965eef222Smrg	  if test -n "$export_symbols_regex"; then
331065eef222Smrg	    $opt_dry_run || {
331165eef222Smrg	      eval '$EGREP -e "$export_symbols_regex" "$nlist" > "$nlist"T'
331265eef222Smrg	      eval '$MV "$nlist"T "$nlist"'
331365eef222Smrg	    }
3314ef981d24Smrg	  fi
331565eef222Smrg
331665eef222Smrg	  # Prepare the list of exported symbols
331765eef222Smrg	  if test -z "$export_symbols"; then
331865eef222Smrg	    export_symbols="$output_objdir/$outputname.exp"
331965eef222Smrg	    $opt_dry_run || {
332065eef222Smrg	      $RM $export_symbols
332165eef222Smrg	      eval "${SED} -n -e '/^: @PROGRAM@ $/d' -e 's/^.* \(.*\)$/\1/p' "'< "$nlist" > "$export_symbols"'
332265eef222Smrg	      case $host in
332365eef222Smrg	      *cygwin* | *mingw* | *cegcc* )
332465eef222Smrg                eval "echo EXPORTS "'> "$output_objdir/$outputname.def"'
332565eef222Smrg                eval 'cat "$export_symbols" >> "$output_objdir/$outputname.def"'
332665eef222Smrg	        ;;
3327ef981d24Smrg	      esac
332865eef222Smrg	    }
332965eef222Smrg	  else
333065eef222Smrg	    $opt_dry_run || {
333165eef222Smrg	      eval "${SED} -e 's/\([].[*^$]\)/\\\\\1/g' -e 's/^/ /' -e 's/$/$/'"' < "$export_symbols" > "$output_objdir/$outputname.exp"'
333265eef222Smrg	      eval '$GREP -f "$output_objdir/$outputname.exp" < "$nlist" > "$nlist"T'
333365eef222Smrg	      eval '$MV "$nlist"T "$nlist"'
333465eef222Smrg	      case $host in
333556957a04Smrg	        *cygwin* | *mingw* | *cegcc* )
333665eef222Smrg	          eval "echo EXPORTS "'> "$output_objdir/$outputname.def"'
333765eef222Smrg	          eval 'cat "$nlist" >> "$output_objdir/$outputname.def"'
333865eef222Smrg	          ;;
3339ef981d24Smrg	      esac
334065eef222Smrg	    }
3341ef981d24Smrg	  fi
334265eef222Smrg	fi
3343ef981d24Smrg
334465eef222Smrg	for dlprefile in $dlprefiles; do
334565eef222Smrg	  func_verbose "extracting global C symbols from \`$dlprefile'"
334665eef222Smrg	  func_basename "$dlprefile"
334765eef222Smrg	  name="$func_basename_result"
3348200d7199Smrg          case $host in
3349200d7199Smrg	    *cygwin* | *mingw* | *cegcc* )
3350200d7199Smrg	      # if an import library, we need to obtain dlname
3351200d7199Smrg	      if func_win32_import_lib_p "$dlprefile"; then
3352200d7199Smrg	        func_tr_sh "$dlprefile"
3353200d7199Smrg	        eval "curr_lafile=\$libfile_$func_tr_sh_result"
3354200d7199Smrg	        dlprefile_dlbasename=""
3355200d7199Smrg	        if test -n "$curr_lafile" && func_lalib_p "$curr_lafile"; then
3356200d7199Smrg	          # Use subshell, to avoid clobbering current variable values
3357200d7199Smrg	          dlprefile_dlname=`source "$curr_lafile" && echo "$dlname"`
3358200d7199Smrg	          if test -n "$dlprefile_dlname" ; then
3359200d7199Smrg	            func_basename "$dlprefile_dlname"
3360200d7199Smrg	            dlprefile_dlbasename="$func_basename_result"
3361200d7199Smrg	          else
3362200d7199Smrg	            # no lafile. user explicitly requested -dlpreopen <import library>.
3363200d7199Smrg	            $sharedlib_from_linklib_cmd "$dlprefile"
3364200d7199Smrg	            dlprefile_dlbasename=$sharedlib_from_linklib_result
3365200d7199Smrg	          fi
3366200d7199Smrg	        fi
3367200d7199Smrg	        $opt_dry_run || {
3368200d7199Smrg	          if test -n "$dlprefile_dlbasename" ; then
3369200d7199Smrg	            eval '$ECHO ": $dlprefile_dlbasename" >> "$nlist"'
3370200d7199Smrg	          else
3371200d7199Smrg	            func_warning "Could not compute DLL name from $name"
3372200d7199Smrg	            eval '$ECHO ": $name " >> "$nlist"'
3373200d7199Smrg	          fi
3374200d7199Smrg	          func_to_tool_file "$dlprefile" func_convert_file_msys_to_w32
3375200d7199Smrg	          eval "$NM \"$func_to_tool_file_result\" 2>/dev/null | $global_symbol_pipe |
3376200d7199Smrg	            $SED -e '/I __imp/d' -e 's/I __nm_/D /;s/_nm__//' >> '$nlist'"
3377200d7199Smrg	        }
3378200d7199Smrg	      else # not an import lib
3379200d7199Smrg	        $opt_dry_run || {
3380200d7199Smrg	          eval '$ECHO ": $name " >> "$nlist"'
3381200d7199Smrg	          func_to_tool_file "$dlprefile" func_convert_file_msys_to_w32
3382200d7199Smrg	          eval "$NM \"$func_to_tool_file_result\" 2>/dev/null | $global_symbol_pipe >> '$nlist'"
3383200d7199Smrg	        }
3384200d7199Smrg	      fi
3385200d7199Smrg	    ;;
3386200d7199Smrg	    *)
3387200d7199Smrg	      $opt_dry_run || {
3388200d7199Smrg	        eval '$ECHO ": $name " >> "$nlist"'
3389200d7199Smrg	        func_to_tool_file "$dlprefile" func_convert_file_msys_to_w32
3390200d7199Smrg	        eval "$NM \"$func_to_tool_file_result\" 2>/dev/null | $global_symbol_pipe >> '$nlist'"
3391200d7199Smrg	      }
3392200d7199Smrg	    ;;
3393200d7199Smrg          esac
339465eef222Smrg	done
3395ef981d24Smrg
339665eef222Smrg	$opt_dry_run || {
339765eef222Smrg	  # Make sure we have at least an empty file.
339865eef222Smrg	  test -f "$nlist" || : > "$nlist"
3399ef981d24Smrg
340065eef222Smrg	  if test -n "$exclude_expsyms"; then
340165eef222Smrg	    $EGREP -v " ($exclude_expsyms)$" "$nlist" > "$nlist"T
340265eef222Smrg	    $MV "$nlist"T "$nlist"
3403ef981d24Smrg	  fi
3404ef981d24Smrg
340565eef222Smrg	  # Try sorting and uniquifying the output.
340665eef222Smrg	  if $GREP -v "^: " < "$nlist" |
340765eef222Smrg	      if sort -k 3 </dev/null >/dev/null 2>&1; then
340865eef222Smrg		sort -k 3
3409ef981d24Smrg	      else
341065eef222Smrg		sort +2
341165eef222Smrg	      fi |
341265eef222Smrg	      uniq > "$nlist"S; then
341365eef222Smrg	    :
3414ef981d24Smrg	  else
341565eef222Smrg	    $GREP -v "^: " < "$nlist" > "$nlist"S
3416ef981d24Smrg	  fi
3417ef981d24Smrg
341865eef222Smrg	  if test -f "$nlist"S; then
341965eef222Smrg	    eval "$global_symbol_to_cdecl"' < "$nlist"S >> "$output_objdir/$my_dlsyms"'
3420ef981d24Smrg	  else
342156957a04Smrg	    echo '/* NONE */' >> "$output_objdir/$my_dlsyms"
3422ef981d24Smrg	  fi
3423ef981d24Smrg
342456957a04Smrg	  echo >> "$output_objdir/$my_dlsyms" "\
3425ef981d24Smrg
342665eef222Smrg/* The mapping between symbol names and symbols.  */
342765eef222Smrgtypedef struct {
342865eef222Smrg  const char *name;
342965eef222Smrg  void *address;
343065eef222Smrg} lt_dlsymlist;
3431200d7199Smrgextern LT_DLSYM_CONST lt_dlsymlist
343265eef222Smrglt_${my_prefix}_LTX_preloaded_symbols[];
3433200d7199SmrgLT_DLSYM_CONST lt_dlsymlist
343465eef222Smrglt_${my_prefix}_LTX_preloaded_symbols[] =
343565eef222Smrg{\
343665eef222Smrg  { \"$my_originator\", (void *) 0 },"
343765eef222Smrg
343865eef222Smrg	  case $need_lib_prefix in
343965eef222Smrg	  no)
344065eef222Smrg	    eval "$global_symbol_to_c_name_address" < "$nlist" >> "$output_objdir/$my_dlsyms"
344165eef222Smrg	    ;;
344265eef222Smrg	  *)
344365eef222Smrg	    eval "$global_symbol_to_c_name_address_lib_prefix" < "$nlist" >> "$output_objdir/$my_dlsyms"
344465eef222Smrg	    ;;
344565eef222Smrg	  esac
344656957a04Smrg	  echo >> "$output_objdir/$my_dlsyms" "\
344765eef222Smrg  {0, (void *) 0}
344865eef222Smrg};
344965eef222Smrg
345065eef222Smrg/* This works around a problem in FreeBSD linker */
345165eef222Smrg#ifdef FREEBSD_WORKAROUND
345265eef222Smrgstatic const void *lt_preloaded_setup() {
345365eef222Smrg  return lt_${my_prefix}_LTX_preloaded_symbols;
345465eef222Smrg}
345565eef222Smrg#endif
345665eef222Smrg
345765eef222Smrg#ifdef __cplusplus
345865eef222Smrg}
345965eef222Smrg#endif\
346065eef222Smrg"
346165eef222Smrg	} # !$opt_dry_run
346265eef222Smrg
346365eef222Smrg	pic_flag_for_symtable=
346465eef222Smrg	case "$compile_command " in
346565eef222Smrg	*" -static "*) ;;
346665eef222Smrg	*)
346765eef222Smrg	  case $host in
346865eef222Smrg	  # compiling the symbol table file with pic_flag works around
346965eef222Smrg	  # a FreeBSD bug that causes programs to crash when -lm is
347065eef222Smrg	  # linked before any other PIC object.  But we must not use
347165eef222Smrg	  # pic_flag when linking with -static.  The problem exists in
347265eef222Smrg	  # FreeBSD 2.2.6 and is fixed in FreeBSD 3.1.
347365eef222Smrg	  *-*-freebsd2*|*-*-freebsd3.0*|*-*-freebsdelf3.0*)
347465eef222Smrg	    pic_flag_for_symtable=" $pic_flag -DFREEBSD_WORKAROUND" ;;
347565eef222Smrg	  *-*-hpux*)
347665eef222Smrg	    pic_flag_for_symtable=" $pic_flag"  ;;
347765eef222Smrg	  *)
347865eef222Smrg	    if test "X$my_pic_p" != Xno; then
347965eef222Smrg	      pic_flag_for_symtable=" $pic_flag"
3480ef981d24Smrg	    fi
348165eef222Smrg	    ;;
348265eef222Smrg	  esac
348365eef222Smrg	  ;;
348465eef222Smrg	esac
348565eef222Smrg	symtab_cflags=
348665eef222Smrg	for arg in $LTCFLAGS; do
348765eef222Smrg	  case $arg in
348865eef222Smrg	  -pie | -fpie | -fPIE) ;;
3489200d7199Smrg	  *) func_append symtab_cflags " $arg" ;;
349065eef222Smrg	  esac
349165eef222Smrg	done
3492ef981d24Smrg
349365eef222Smrg	# Now compile the dynamic symbol file.
349465eef222Smrg	func_show_eval '(cd $output_objdir && $LTCC$symtab_cflags -c$no_builtin_flag$pic_flag_for_symtable "$my_dlsyms")' 'exit $?'
3495ef981d24Smrg
349665eef222Smrg	# Clean up the generated files.
349765eef222Smrg	func_show_eval '$RM "$output_objdir/$my_dlsyms" "$nlist" "${nlist}S" "${nlist}T"'
349865eef222Smrg
349965eef222Smrg	# Transform the symbol file into the correct name.
350065eef222Smrg	symfileobj="$output_objdir/${my_outputname}S.$objext"
350165eef222Smrg	case $host in
350265eef222Smrg	*cygwin* | *mingw* | *cegcc* )
350365eef222Smrg	  if test -f "$output_objdir/$my_outputname.def"; then
350456957a04Smrg	    compile_command=`$ECHO "$compile_command" | $SED "s%@SYMFILE@%$output_objdir/$my_outputname.def $symfileobj%"`
350556957a04Smrg	    finalize_command=`$ECHO "$finalize_command" | $SED "s%@SYMFILE@%$output_objdir/$my_outputname.def $symfileobj%"`
350665eef222Smrg	  else
350756957a04Smrg	    compile_command=`$ECHO "$compile_command" | $SED "s%@SYMFILE@%$symfileobj%"`
350856957a04Smrg	    finalize_command=`$ECHO "$finalize_command" | $SED "s%@SYMFILE@%$symfileobj%"`
350965eef222Smrg	  fi
351065eef222Smrg	  ;;
351165eef222Smrg	*)
351256957a04Smrg	  compile_command=`$ECHO "$compile_command" | $SED "s%@SYMFILE@%$symfileobj%"`
351356957a04Smrg	  finalize_command=`$ECHO "$finalize_command" | $SED "s%@SYMFILE@%$symfileobj%"`
3514ef981d24Smrg	  ;;
3515ef981d24Smrg	esac
351665eef222Smrg	;;
351765eef222Smrg      *)
351865eef222Smrg	func_fatal_error "unknown suffix for \`$my_dlsyms'"
351965eef222Smrg	;;
352065eef222Smrg      esac
352165eef222Smrg    else
352265eef222Smrg      # We keep going just in case the user didn't refer to
352365eef222Smrg      # lt_preloaded_symbols.  The linker will fail if global_symbol_pipe
352465eef222Smrg      # really was required.
352565eef222Smrg
352665eef222Smrg      # Nullify the symbol file.
352756957a04Smrg      compile_command=`$ECHO "$compile_command" | $SED "s% @SYMFILE@%%"`
352856957a04Smrg      finalize_command=`$ECHO "$finalize_command" | $SED "s% @SYMFILE@%%"`
3529ef981d24Smrg    fi
353065eef222Smrg}
3531ef981d24Smrg
353265eef222Smrg# func_win32_libid arg
353365eef222Smrg# return the library type of file 'arg'
353465eef222Smrg#
353565eef222Smrg# Need a lot of goo to handle *both* DLLs and import libs
353665eef222Smrg# Has to be a shell function in order to 'eat' the argument
353765eef222Smrg# that is supplied when $file_magic_command is called.
353856957a04Smrg# Despite the name, also deal with 64 bit binaries.
353965eef222Smrgfunc_win32_libid ()
354065eef222Smrg{
354165eef222Smrg  $opt_debug
354265eef222Smrg  win32_libid_type="unknown"
354365eef222Smrg  win32_fileres=`file -L $1 2>/dev/null`
354465eef222Smrg  case $win32_fileres in
354565eef222Smrg  *ar\ archive\ import\ library*) # definitely import
354665eef222Smrg    win32_libid_type="x86 archive import"
354765eef222Smrg    ;;
354865eef222Smrg  *ar\ archive*) # could be an import, or static
354956957a04Smrg    # Keep the egrep pattern in sync with the one in _LT_CHECK_MAGIC_METHOD.
355065eef222Smrg    if eval $OBJDUMP -f $1 | $SED -e '10q' 2>/dev/null |
355156957a04Smrg       $EGREP 'file format (pei*-i386(.*architecture: i386)?|pe-arm-wince|pe-x86-64)' >/dev/null; then
3552200d7199Smrg      func_to_tool_file "$1" func_convert_file_msys_to_w32
3553200d7199Smrg      win32_nmres=`eval $NM -f posix -A \"$func_to_tool_file_result\" |
355465eef222Smrg	$SED -n -e '
355565eef222Smrg	    1,100{
355665eef222Smrg		/ I /{
355765eef222Smrg		    s,.*,import,
355865eef222Smrg		    p
355965eef222Smrg		    q
356065eef222Smrg		}
356165eef222Smrg	    }'`
356265eef222Smrg      case $win32_nmres in
356365eef222Smrg      import*)  win32_libid_type="x86 archive import";;
356465eef222Smrg      *)        win32_libid_type="x86 archive static";;
356565eef222Smrg      esac
356665eef222Smrg    fi
356765eef222Smrg    ;;
356865eef222Smrg  *DLL*)
356965eef222Smrg    win32_libid_type="x86 DLL"
357065eef222Smrg    ;;
357165eef222Smrg  *executable*) # but shell scripts are "executable" too...
357265eef222Smrg    case $win32_fileres in
357365eef222Smrg    *MS\ Windows\ PE\ Intel*)
357465eef222Smrg      win32_libid_type="x86 DLL"
357565eef222Smrg      ;;
357665eef222Smrg    esac
357765eef222Smrg    ;;
357865eef222Smrg  esac
357965eef222Smrg  $ECHO "$win32_libid_type"
358065eef222Smrg}
3581ef981d24Smrg
3582200d7199Smrg# func_cygming_dll_for_implib ARG
3583200d7199Smrg#
3584200d7199Smrg# Platform-specific function to extract the
3585200d7199Smrg# name of the DLL associated with the specified
3586200d7199Smrg# import library ARG.
3587200d7199Smrg# Invoked by eval'ing the libtool variable
3588200d7199Smrg#    $sharedlib_from_linklib_cmd
3589200d7199Smrg# Result is available in the variable
3590200d7199Smrg#    $sharedlib_from_linklib_result
3591200d7199Smrgfunc_cygming_dll_for_implib ()
3592200d7199Smrg{
3593200d7199Smrg  $opt_debug
3594200d7199Smrg  sharedlib_from_linklib_result=`$DLLTOOL --identify-strict --identify "$1"`
3595200d7199Smrg}
3596200d7199Smrg
3597200d7199Smrg# func_cygming_dll_for_implib_fallback_core SECTION_NAME LIBNAMEs
3598200d7199Smrg#
3599200d7199Smrg# The is the core of a fallback implementation of a
3600200d7199Smrg# platform-specific function to extract the name of the
3601200d7199Smrg# DLL associated with the specified import library LIBNAME.
3602200d7199Smrg#
3603200d7199Smrg# SECTION_NAME is either .idata$6 or .idata$7, depending
3604200d7199Smrg# on the platform and compiler that created the implib.
3605200d7199Smrg#
3606200d7199Smrg# Echos the name of the DLL associated with the
3607200d7199Smrg# specified import library.
3608200d7199Smrgfunc_cygming_dll_for_implib_fallback_core ()
3609200d7199Smrg{
3610200d7199Smrg  $opt_debug
3611200d7199Smrg  match_literal=`$ECHO "$1" | $SED "$sed_make_literal_regex"`
3612200d7199Smrg  $OBJDUMP -s --section "$1" "$2" 2>/dev/null |
3613200d7199Smrg    $SED '/^Contents of section '"$match_literal"':/{
3614200d7199Smrg      # Place marker at beginning of archive member dllname section
3615200d7199Smrg      s/.*/====MARK====/
3616200d7199Smrg      p
3617200d7199Smrg      d
3618200d7199Smrg    }
3619200d7199Smrg    # These lines can sometimes be longer than 43 characters, but
3620200d7199Smrg    # are always uninteresting
3621200d7199Smrg    /:[	 ]*file format pe[i]\{,1\}-/d
3622200d7199Smrg    /^In archive [^:]*:/d
3623200d7199Smrg    # Ensure marker is printed
3624200d7199Smrg    /^====MARK====/p
3625200d7199Smrg    # Remove all lines with less than 43 characters
3626200d7199Smrg    /^.\{43\}/!d
3627200d7199Smrg    # From remaining lines, remove first 43 characters
3628200d7199Smrg    s/^.\{43\}//' |
3629200d7199Smrg    $SED -n '
3630200d7199Smrg      # Join marker and all lines until next marker into a single line
3631200d7199Smrg      /^====MARK====/ b para
3632200d7199Smrg      H
3633200d7199Smrg      $ b para
3634200d7199Smrg      b
3635200d7199Smrg      :para
3636200d7199Smrg      x
3637200d7199Smrg      s/\n//g
3638200d7199Smrg      # Remove the marker
3639200d7199Smrg      s/^====MARK====//
3640200d7199Smrg      # Remove trailing dots and whitespace
3641200d7199Smrg      s/[\. \t]*$//
3642200d7199Smrg      # Print
3643200d7199Smrg      /./p' |
3644200d7199Smrg    # we now have a list, one entry per line, of the stringified
3645200d7199Smrg    # contents of the appropriate section of all members of the
3646200d7199Smrg    # archive which possess that section. Heuristic: eliminate
3647200d7199Smrg    # all those which have a first or second character that is
3648200d7199Smrg    # a '.' (that is, objdump's representation of an unprintable
3649200d7199Smrg    # character.) This should work for all archives with less than
3650200d7199Smrg    # 0x302f exports -- but will fail for DLLs whose name actually
3651200d7199Smrg    # begins with a literal '.' or a single character followed by
3652200d7199Smrg    # a '.'.
3653200d7199Smrg    #
3654200d7199Smrg    # Of those that remain, print the first one.
3655200d7199Smrg    $SED -e '/^\./d;/^.\./d;q'
3656200d7199Smrg}
3657200d7199Smrg
3658200d7199Smrg# func_cygming_gnu_implib_p ARG
3659200d7199Smrg# This predicate returns with zero status (TRUE) if
3660200d7199Smrg# ARG is a GNU/binutils-style import library. Returns
3661200d7199Smrg# with nonzero status (FALSE) otherwise.
3662200d7199Smrgfunc_cygming_gnu_implib_p ()
3663200d7199Smrg{
3664200d7199Smrg  $opt_debug
3665200d7199Smrg  func_to_tool_file "$1" func_convert_file_msys_to_w32
3666200d7199Smrg  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)$'`
3667200d7199Smrg  test -n "$func_cygming_gnu_implib_tmp"
3668200d7199Smrg}
3669200d7199Smrg
3670200d7199Smrg# func_cygming_ms_implib_p ARG
3671200d7199Smrg# This predicate returns with zero status (TRUE) if
3672200d7199Smrg# ARG is an MS-style import library. Returns
3673200d7199Smrg# with nonzero status (FALSE) otherwise.
3674200d7199Smrgfunc_cygming_ms_implib_p ()
3675200d7199Smrg{
3676200d7199Smrg  $opt_debug
3677200d7199Smrg  func_to_tool_file "$1" func_convert_file_msys_to_w32
3678200d7199Smrg  func_cygming_ms_implib_tmp=`$NM "$func_to_tool_file_result" | eval "$global_symbol_pipe" | $GREP '_NULL_IMPORT_DESCRIPTOR'`
3679200d7199Smrg  test -n "$func_cygming_ms_implib_tmp"
3680200d7199Smrg}
3681200d7199Smrg
3682200d7199Smrg# func_cygming_dll_for_implib_fallback ARG
3683200d7199Smrg# Platform-specific function to extract the
3684200d7199Smrg# name of the DLL associated with the specified
3685200d7199Smrg# import library ARG.
3686200d7199Smrg#
3687200d7199Smrg# This fallback implementation is for use when $DLLTOOL
3688200d7199Smrg# does not support the --identify-strict option.
3689200d7199Smrg# Invoked by eval'ing the libtool variable
3690200d7199Smrg#    $sharedlib_from_linklib_cmd
3691200d7199Smrg# Result is available in the variable
3692200d7199Smrg#    $sharedlib_from_linklib_result
3693200d7199Smrgfunc_cygming_dll_for_implib_fallback ()
3694200d7199Smrg{
3695200d7199Smrg  $opt_debug
3696200d7199Smrg  if func_cygming_gnu_implib_p "$1" ; then
3697200d7199Smrg    # binutils import library
3698200d7199Smrg    sharedlib_from_linklib_result=`func_cygming_dll_for_implib_fallback_core '.idata$7' "$1"`
3699200d7199Smrg  elif func_cygming_ms_implib_p "$1" ; then
3700200d7199Smrg    # ms-generated import library
3701200d7199Smrg    sharedlib_from_linklib_result=`func_cygming_dll_for_implib_fallback_core '.idata$6' "$1"`
3702200d7199Smrg  else
3703200d7199Smrg    # unknown
3704200d7199Smrg    sharedlib_from_linklib_result=""
3705200d7199Smrg  fi
3706200d7199Smrg}
3707ef981d24Smrg
3708ef981d24Smrg
370965eef222Smrg# func_extract_an_archive dir oldlib
371065eef222Smrgfunc_extract_an_archive ()
371165eef222Smrg{
371265eef222Smrg    $opt_debug
371365eef222Smrg    f_ex_an_ar_dir="$1"; shift
371465eef222Smrg    f_ex_an_ar_oldlib="$1"
371556957a04Smrg    if test "$lock_old_archive_extraction" = yes; then
371656957a04Smrg      lockfile=$f_ex_an_ar_oldlib.lock
371756957a04Smrg      until $opt_dry_run || ln "$progpath" "$lockfile" 2>/dev/null; do
371856957a04Smrg	func_echo "Waiting for $lockfile to be removed"
371956957a04Smrg	sleep 2
372056957a04Smrg      done
372156957a04Smrg    fi
372256957a04Smrg    func_show_eval "(cd \$f_ex_an_ar_dir && $AR x \"\$f_ex_an_ar_oldlib\")" \
372356957a04Smrg		   'stat=$?; rm -f "$lockfile"; exit $stat'
372456957a04Smrg    if test "$lock_old_archive_extraction" = yes; then
372556957a04Smrg      $opt_dry_run || rm -f "$lockfile"
372656957a04Smrg    fi
372765eef222Smrg    if ($AR t "$f_ex_an_ar_oldlib" | sort | sort -uc >/dev/null 2>&1); then
372865eef222Smrg     :
372965eef222Smrg    else
373065eef222Smrg      func_fatal_error "object name conflicts in archive: $f_ex_an_ar_dir/$f_ex_an_ar_oldlib"
373165eef222Smrg    fi
373265eef222Smrg}
3733ef981d24Smrg
3734ef981d24Smrg
373565eef222Smrg# func_extract_archives gentop oldlib ...
373665eef222Smrgfunc_extract_archives ()
373765eef222Smrg{
373865eef222Smrg    $opt_debug
373965eef222Smrg    my_gentop="$1"; shift
374065eef222Smrg    my_oldlibs=${1+"$@"}
374165eef222Smrg    my_oldobjs=""
374265eef222Smrg    my_xlib=""
374365eef222Smrg    my_xabs=""
374465eef222Smrg    my_xdir=""
3745ef981d24Smrg
374665eef222Smrg    for my_xlib in $my_oldlibs; do
374765eef222Smrg      # Extract the objects.
374865eef222Smrg      case $my_xlib in
374965eef222Smrg	[\\/]* | [A-Za-z]:[\\/]*) my_xabs="$my_xlib" ;;
375065eef222Smrg	*) my_xabs=`pwd`"/$my_xlib" ;;
375165eef222Smrg      esac
375265eef222Smrg      func_basename "$my_xlib"
375365eef222Smrg      my_xlib="$func_basename_result"
375465eef222Smrg      my_xlib_u=$my_xlib
375565eef222Smrg      while :; do
375665eef222Smrg        case " $extracted_archives " in
375765eef222Smrg	*" $my_xlib_u "*)
375865eef222Smrg	  func_arith $extracted_serial + 1
375965eef222Smrg	  extracted_serial=$func_arith_result
376065eef222Smrg	  my_xlib_u=lt$extracted_serial-$my_xlib ;;
376165eef222Smrg	*) break ;;
376265eef222Smrg	esac
376365eef222Smrg      done
376465eef222Smrg      extracted_archives="$extracted_archives $my_xlib_u"
376565eef222Smrg      my_xdir="$my_gentop/$my_xlib_u"
3766ef981d24Smrg
376765eef222Smrg      func_mkdir_p "$my_xdir"
3768ef981d24Smrg
376965eef222Smrg      case $host in
377065eef222Smrg      *-darwin*)
377165eef222Smrg	func_verbose "Extracting $my_xabs"
377265eef222Smrg	# Do not bother doing anything if just a dry run
377365eef222Smrg	$opt_dry_run || {
377465eef222Smrg	  darwin_orig_dir=`pwd`
377565eef222Smrg	  cd $my_xdir || exit $?
377665eef222Smrg	  darwin_archive=$my_xabs
377765eef222Smrg	  darwin_curdir=`pwd`
377865eef222Smrg	  darwin_base_archive=`basename "$darwin_archive"`
377965eef222Smrg	  darwin_arches=`$LIPO -info "$darwin_archive" 2>/dev/null | $GREP Architectures 2>/dev/null || true`
378065eef222Smrg	  if test -n "$darwin_arches"; then
378165eef222Smrg	    darwin_arches=`$ECHO "$darwin_arches" | $SED -e 's/.*are://'`
378265eef222Smrg	    darwin_arch=
378365eef222Smrg	    func_verbose "$darwin_base_archive has multiple architectures $darwin_arches"
378465eef222Smrg	    for darwin_arch in  $darwin_arches ; do
378565eef222Smrg	      func_mkdir_p "unfat-$$/${darwin_base_archive}-${darwin_arch}"
378665eef222Smrg	      $LIPO -thin $darwin_arch -output "unfat-$$/${darwin_base_archive}-${darwin_arch}/${darwin_base_archive}" "${darwin_archive}"
378765eef222Smrg	      cd "unfat-$$/${darwin_base_archive}-${darwin_arch}"
378865eef222Smrg	      func_extract_an_archive "`pwd`" "${darwin_base_archive}"
378965eef222Smrg	      cd "$darwin_curdir"
379065eef222Smrg	      $RM "unfat-$$/${darwin_base_archive}-${darwin_arch}/${darwin_base_archive}"
379165eef222Smrg	    done # $darwin_arches
379265eef222Smrg            ## Okay now we've a bunch of thin objects, gotta fatten them up :)
379365eef222Smrg	    darwin_filelist=`find unfat-$$ -type f -name \*.o -print -o -name \*.lo -print | $SED -e "$basename" | sort -u`
379465eef222Smrg	    darwin_file=
379565eef222Smrg	    darwin_files=
379665eef222Smrg	    for darwin_file in $darwin_filelist; do
379756957a04Smrg	      darwin_files=`find unfat-$$ -name $darwin_file -print | sort | $NL2SP`
379865eef222Smrg	      $LIPO -create -output "$darwin_file" $darwin_files
379965eef222Smrg	    done # $darwin_filelist
380065eef222Smrg	    $RM -rf unfat-$$
380165eef222Smrg	    cd "$darwin_orig_dir"
380265eef222Smrg	  else
380365eef222Smrg	    cd $darwin_orig_dir
380465eef222Smrg	    func_extract_an_archive "$my_xdir" "$my_xabs"
380565eef222Smrg	  fi # $darwin_arches
380665eef222Smrg	} # !$opt_dry_run
380765eef222Smrg	;;
380865eef222Smrg      *)
380965eef222Smrg        func_extract_an_archive "$my_xdir" "$my_xabs"
381065eef222Smrg	;;
3811ef981d24Smrg      esac
381256957a04Smrg      my_oldobjs="$my_oldobjs "`find $my_xdir -name \*.$objext -print -o -name \*.lo -print | sort | $NL2SP`
381365eef222Smrg    done
3814ef981d24Smrg
381565eef222Smrg    func_extract_archives_result="$my_oldobjs"
381665eef222Smrg}
3817ef981d24Smrg
3818ef981d24Smrg
381956957a04Smrg# func_emit_wrapper [arg=no]
382056957a04Smrg#
382156957a04Smrg# Emit a libtool wrapper script on stdout.
382256957a04Smrg# Don't directly open a file because we may want to
382356957a04Smrg# incorporate the script contents within a cygwin/mingw
382456957a04Smrg# wrapper executable.  Must ONLY be called from within
382556957a04Smrg# func_mode_link because it depends on a number of variables
382656957a04Smrg# set therein.
382765eef222Smrg#
382856957a04Smrg# ARG is the value that the WRAPPER_SCRIPT_BELONGS_IN_OBJDIR
382956957a04Smrg# variable will take.  If 'yes', then the emitted script
383056957a04Smrg# will assume that the directory in which it is stored is
383156957a04Smrg# the $objdir directory.  This is a cygwin/mingw-specific
383256957a04Smrg# behavior.
383356957a04Smrgfunc_emit_wrapper ()
383465eef222Smrg{
383556957a04Smrg	func_emit_wrapper_arg1=${1-no}
3836ef981d24Smrg
383765eef222Smrg	$ECHO "\
383865eef222Smrg#! $SHELL
3839ef981d24Smrg
384065eef222Smrg# $output - temporary wrapper script for $objdir/$outputname
384165eef222Smrg# Generated by $PROGRAM (GNU $PACKAGE$TIMESTAMP) $VERSION
384265eef222Smrg#
384365eef222Smrg# The $output program cannot be directly executed until all the libtool
384465eef222Smrg# libraries that it depends on are installed.
384565eef222Smrg#
384665eef222Smrg# This wrapper script should never be moved out of the build directory.
384765eef222Smrg# If it is, it will not operate correctly.
3848ef981d24Smrg
384965eef222Smrg# Sed substitution that helps us do robust quoting.  It backslashifies
385065eef222Smrg# metacharacters that are still active within double-quoted strings.
385165eef222Smrgsed_quote_subst='$sed_quote_subst'
3852ef981d24Smrg
385365eef222Smrg# Be Bourne compatible
385465eef222Smrgif test -n \"\${ZSH_VERSION+set}\" && (emulate sh) >/dev/null 2>&1; then
385565eef222Smrg  emulate sh
385665eef222Smrg  NULLCMD=:
385765eef222Smrg  # Zsh 3.x and 4.x performs word splitting on \${1+\"\$@\"}, which
385865eef222Smrg  # is contrary to our usage.  Disable this feature.
385965eef222Smrg  alias -g '\${1+\"\$@\"}'='\"\$@\"'
386065eef222Smrg  setopt NO_GLOB_SUBST
386165eef222Smrgelse
386265eef222Smrg  case \`(set -o) 2>/dev/null\` in *posix*) set -o posix;; esac
386365eef222Smrgfi
386465eef222SmrgBIN_SH=xpg4; export BIN_SH # for Tru64
386565eef222SmrgDUALCASE=1; export DUALCASE # for MKS sh
3866ef981d24Smrg
386765eef222Smrg# The HP-UX ksh and POSIX shell print the target directory to stdout
386865eef222Smrg# if CDPATH is set.
386965eef222Smrg(unset CDPATH) >/dev/null 2>&1 && unset CDPATH
3870ef981d24Smrg
387165eef222Smrgrelink_command=\"$relink_command\"
3872ef981d24Smrg
387365eef222Smrg# This environment variable determines our operation mode.
387465eef222Smrgif test \"\$libtool_install_magic\" = \"$magic\"; then
387565eef222Smrg  # install mode needs the following variables:
387665eef222Smrg  generated_by_libtool_version='$macro_version'
387765eef222Smrg  notinst_deplibs='$notinst_deplibs'
387865eef222Smrgelse
387965eef222Smrg  # When we are sourced in execute mode, \$file and \$ECHO are already set.
388065eef222Smrg  if test \"\$libtool_execute_magic\" != \"$magic\"; then
388156957a04Smrg    file=\"\$0\""
388256957a04Smrg
388356957a04Smrg    qECHO=`$ECHO "$ECHO" | $SED "$sed_quote_subst"`
388456957a04Smrg    $ECHO "\
388556957a04Smrg
388656957a04Smrg# A function that is used when there is no print builtin or printf.
388756957a04Smrgfunc_fallback_echo ()
388856957a04Smrg{
388956957a04Smrg  eval 'cat <<_LTECHO_EOF
389056957a04Smrg\$1
389156957a04Smrg_LTECHO_EOF'
389256957a04Smrg}
389356957a04Smrg    ECHO=\"$qECHO\"
389456957a04Smrg  fi
389556957a04Smrg
389656957a04Smrg# Very basic option parsing. These options are (a) specific to
389756957a04Smrg# the libtool wrapper, (b) are identical between the wrapper
389856957a04Smrg# /script/ and the wrapper /executable/ which is used only on
389956957a04Smrg# windows platforms, and (c) all begin with the string "--lt-"
390056957a04Smrg# (application programs are unlikely to have options which match
390156957a04Smrg# this pattern).
390256957a04Smrg#
390356957a04Smrg# There are only two supported options: --lt-debug and
390456957a04Smrg# --lt-dump-script. There is, deliberately, no --lt-help.
390556957a04Smrg#
390656957a04Smrg# The first argument to this parsing function should be the
390756957a04Smrg# script's $0 value, followed by "$@".
390856957a04Smrglt_option_debug=
390956957a04Smrgfunc_parse_lt_options ()
391056957a04Smrg{
391156957a04Smrg  lt_script_arg0=\$0
391256957a04Smrg  shift
391356957a04Smrg  for lt_opt
391456957a04Smrg  do
391556957a04Smrg    case \"\$lt_opt\" in
391656957a04Smrg    --lt-debug) lt_option_debug=1 ;;
391756957a04Smrg    --lt-dump-script)
391856957a04Smrg        lt_dump_D=\`\$ECHO \"X\$lt_script_arg0\" | $SED -e 's/^X//' -e 's%/[^/]*$%%'\`
391956957a04Smrg        test \"X\$lt_dump_D\" = \"X\$lt_script_arg0\" && lt_dump_D=.
392056957a04Smrg        lt_dump_F=\`\$ECHO \"X\$lt_script_arg0\" | $SED -e 's/^X//' -e 's%^.*/%%'\`
392156957a04Smrg        cat \"\$lt_dump_D/\$lt_dump_F\"
392256957a04Smrg        exit 0
392356957a04Smrg      ;;
392456957a04Smrg    --lt-*)
392556957a04Smrg        \$ECHO \"Unrecognized --lt- option: '\$lt_opt'\" 1>&2
392656957a04Smrg        exit 1
392756957a04Smrg      ;;
392856957a04Smrg    esac
392956957a04Smrg  done
393056957a04Smrg
393156957a04Smrg  # Print the debug banner immediately:
393256957a04Smrg  if test -n \"\$lt_option_debug\"; then
393356957a04Smrg    echo \"${outputname}:${output}:\${LINENO}: libtool wrapper (GNU $PACKAGE$TIMESTAMP) $VERSION\" 1>&2
393456957a04Smrg  fi
393556957a04Smrg}
393656957a04Smrg
393756957a04Smrg# Used when --lt-debug. Prints its arguments to stdout
393856957a04Smrg# (redirection is the responsibility of the caller)
393956957a04Smrgfunc_lt_dump_args ()
394056957a04Smrg{
394156957a04Smrg  lt_dump_args_N=1;
394256957a04Smrg  for lt_arg
394356957a04Smrg  do
394456957a04Smrg    \$ECHO \"${outputname}:${output}:\${LINENO}: newargv[\$lt_dump_args_N]: \$lt_arg\"
394556957a04Smrg    lt_dump_args_N=\`expr \$lt_dump_args_N + 1\`
394656957a04Smrg  done
394756957a04Smrg}
394856957a04Smrg
394956957a04Smrg# Core function for launching the target application
395056957a04Smrgfunc_exec_program_core ()
395156957a04Smrg{
395265eef222Smrg"
395356957a04Smrg  case $host in
395456957a04Smrg  # Backslashes separate directories on plain windows
395556957a04Smrg  *-*-mingw | *-*-os2* | *-cegcc*)
395656957a04Smrg    $ECHO "\
395756957a04Smrg      if test -n \"\$lt_option_debug\"; then
395856957a04Smrg        \$ECHO \"${outputname}:${output}:\${LINENO}: newargv[0]: \$progdir\\\\\$program\" 1>&2
395956957a04Smrg        func_lt_dump_args \${1+\"\$@\"} 1>&2
396056957a04Smrg      fi
396156957a04Smrg      exec \"\$progdir\\\\\$program\" \${1+\"\$@\"}
396256957a04Smrg"
396356957a04Smrg    ;;
396456957a04Smrg
396556957a04Smrg  *)
396656957a04Smrg    $ECHO "\
396756957a04Smrg      if test -n \"\$lt_option_debug\"; then
396856957a04Smrg        \$ECHO \"${outputname}:${output}:\${LINENO}: newargv[0]: \$progdir/\$program\" 1>&2
396956957a04Smrg        func_lt_dump_args \${1+\"\$@\"} 1>&2
397056957a04Smrg      fi
397156957a04Smrg      exec \"\$progdir/\$program\" \${1+\"\$@\"}
397256957a04Smrg"
397356957a04Smrg    ;;
397456957a04Smrg  esac
397556957a04Smrg  $ECHO "\
397656957a04Smrg      \$ECHO \"\$0: cannot exec \$program \$*\" 1>&2
397756957a04Smrg      exit 1
397856957a04Smrg}
397956957a04Smrg
398056957a04Smrg# A function to encapsulate launching the target application
398156957a04Smrg# Strips options in the --lt-* namespace from \$@ and
398256957a04Smrg# launches target application with the remaining arguments.
398356957a04Smrgfunc_exec_program ()
398456957a04Smrg{
398556957a04Smrg  for lt_wr_arg
398656957a04Smrg  do
398756957a04Smrg    case \$lt_wr_arg in
398856957a04Smrg    --lt-*) ;;
398956957a04Smrg    *) set x \"\$@\" \"\$lt_wr_arg\"; shift;;
399056957a04Smrg    esac
399156957a04Smrg    shift
399256957a04Smrg  done
399356957a04Smrg  func_exec_program_core \${1+\"\$@\"}
399456957a04Smrg}
399556957a04Smrg
399656957a04Smrg  # Parse options
399756957a04Smrg  func_parse_lt_options \"\$0\" \${1+\"\$@\"}
3998ef981d24Smrg
399965eef222Smrg  # Find the directory that this script lives in.
400056957a04Smrg  thisdir=\`\$ECHO \"\$file\" | $SED 's%/[^/]*$%%'\`
400165eef222Smrg  test \"x\$thisdir\" = \"x\$file\" && thisdir=.
4002ef981d24Smrg
400365eef222Smrg  # Follow symbolic links until we get to the real thisdir.
400456957a04Smrg  file=\`ls -ld \"\$file\" | $SED -n 's/.*-> //p'\`
400565eef222Smrg  while test -n \"\$file\"; do
400656957a04Smrg    destdir=\`\$ECHO \"\$file\" | $SED 's%/[^/]*\$%%'\`
4007ef981d24Smrg
400865eef222Smrg    # If there was a directory component, then change thisdir.
400965eef222Smrg    if test \"x\$destdir\" != \"x\$file\"; then
401065eef222Smrg      case \"\$destdir\" in
401165eef222Smrg      [\\\\/]* | [A-Za-z]:[\\\\/]*) thisdir=\"\$destdir\" ;;
401265eef222Smrg      *) thisdir=\"\$thisdir/\$destdir\" ;;
401365eef222Smrg      esac
401465eef222Smrg    fi
4015ef981d24Smrg
401656957a04Smrg    file=\`\$ECHO \"\$file\" | $SED 's%^.*/%%'\`
401756957a04Smrg    file=\`ls -ld \"\$thisdir/\$file\" | $SED -n 's/.*-> //p'\`
401865eef222Smrg  done
4019ef981d24Smrg
402065eef222Smrg  # Usually 'no', except on cygwin/mingw when embedded into
402165eef222Smrg  # the cwrapper.
402256957a04Smrg  WRAPPER_SCRIPT_BELONGS_IN_OBJDIR=$func_emit_wrapper_arg1
402365eef222Smrg  if test \"\$WRAPPER_SCRIPT_BELONGS_IN_OBJDIR\" = \"yes\"; then
402465eef222Smrg    # special case for '.'
402565eef222Smrg    if test \"\$thisdir\" = \".\"; then
402665eef222Smrg      thisdir=\`pwd\`
402765eef222Smrg    fi
402865eef222Smrg    # remove .libs from thisdir
402965eef222Smrg    case \"\$thisdir\" in
403056957a04Smrg    *[\\\\/]$objdir ) thisdir=\`\$ECHO \"\$thisdir\" | $SED 's%[\\\\/][^\\\\/]*$%%'\` ;;
403165eef222Smrg    $objdir )   thisdir=. ;;
403265eef222Smrg    esac
403365eef222Smrg  fi
4034ef981d24Smrg
403565eef222Smrg  # Try to get the absolute directory name.
403665eef222Smrg  absdir=\`cd \"\$thisdir\" && pwd\`
403765eef222Smrg  test -n \"\$absdir\" && thisdir=\"\$absdir\"
403865eef222Smrg"
4039ef981d24Smrg
404065eef222Smrg	if test "$fast_install" = yes; then
404165eef222Smrg	  $ECHO "\
404265eef222Smrg  program=lt-'$outputname'$exeext
404365eef222Smrg  progdir=\"\$thisdir/$objdir\"
4044ef981d24Smrg
404565eef222Smrg  if test ! -f \"\$progdir/\$program\" ||
404665eef222Smrg     { file=\`ls -1dt \"\$progdir/\$program\" \"\$progdir/../\$program\" 2>/dev/null | ${SED} 1q\`; \\
404765eef222Smrg       test \"X\$file\" != \"X\$progdir/\$program\"; }; then
4048ef981d24Smrg
404965eef222Smrg    file=\"\$\$-\$program\"
4050ef981d24Smrg
405165eef222Smrg    if test ! -d \"\$progdir\"; then
405265eef222Smrg      $MKDIR \"\$progdir\"
405365eef222Smrg    else
405465eef222Smrg      $RM \"\$progdir/\$file\"
405565eef222Smrg    fi"
4056ef981d24Smrg
405765eef222Smrg	  $ECHO "\
4058ef981d24Smrg
405965eef222Smrg    # relink executable if necessary
406065eef222Smrg    if test -n \"\$relink_command\"; then
406165eef222Smrg      if relink_command_output=\`eval \$relink_command 2>&1\`; then :
406265eef222Smrg      else
406365eef222Smrg	$ECHO \"\$relink_command_output\" >&2
406465eef222Smrg	$RM \"\$progdir/\$file\"
406565eef222Smrg	exit 1
406665eef222Smrg      fi
406765eef222Smrg    fi
4068ef981d24Smrg
406965eef222Smrg    $MV \"\$progdir/\$file\" \"\$progdir/\$program\" 2>/dev/null ||
407065eef222Smrg    { $RM \"\$progdir/\$program\";
407165eef222Smrg      $MV \"\$progdir/\$file\" \"\$progdir/\$program\"; }
407265eef222Smrg    $RM \"\$progdir/\$file\"
407365eef222Smrg  fi"
407465eef222Smrg	else
407565eef222Smrg	  $ECHO "\
407665eef222Smrg  program='$outputname'
407765eef222Smrg  progdir=\"\$thisdir/$objdir\"
407865eef222Smrg"
407965eef222Smrg	fi
4080ef981d24Smrg
408165eef222Smrg	$ECHO "\
4082ef981d24Smrg
408365eef222Smrg  if test -f \"\$progdir/\$program\"; then"
4084ef981d24Smrg
4085200d7199Smrg	# fixup the dll searchpath if we need to.
4086200d7199Smrg	#
4087200d7199Smrg	# Fix the DLL searchpath if we need to.  Do this before prepending
4088200d7199Smrg	# to shlibpath, because on Windows, both are PATH and uninstalled
4089200d7199Smrg	# libraries must come first.
4090200d7199Smrg	if test -n "$dllsearchpath"; then
4091200d7199Smrg	  $ECHO "\
4092200d7199Smrg    # Add the dll search path components to the executable PATH
4093200d7199Smrg    PATH=$dllsearchpath:\$PATH
4094200d7199Smrg"
4095200d7199Smrg	fi
4096200d7199Smrg
409765eef222Smrg	# Export our shlibpath_var if we have one.
409865eef222Smrg	if test "$shlibpath_overrides_runpath" = yes && test -n "$shlibpath_var" && test -n "$temp_rpath"; then
409965eef222Smrg	  $ECHO "\
410065eef222Smrg    # Add our own library path to $shlibpath_var
410165eef222Smrg    $shlibpath_var=\"$temp_rpath\$$shlibpath_var\"
4102ef981d24Smrg
410365eef222Smrg    # Some systems cannot cope with colon-terminated $shlibpath_var
410465eef222Smrg    # The second colon is a workaround for a bug in BeOS R4 sed
410556957a04Smrg    $shlibpath_var=\`\$ECHO \"\$$shlibpath_var\" | $SED 's/::*\$//'\`
4106ef981d24Smrg
410765eef222Smrg    export $shlibpath_var
410865eef222Smrg"
4109ef981d24Smrg	fi
4110ef981d24Smrg
411165eef222Smrg	$ECHO "\
411265eef222Smrg    if test \"\$libtool_execute_magic\" != \"$magic\"; then
411365eef222Smrg      # Run the actual program with our arguments.
411456957a04Smrg      func_exec_program \${1+\"\$@\"}
411565eef222Smrg    fi
411665eef222Smrg  else
411765eef222Smrg    # The program doesn't exist.
411865eef222Smrg    \$ECHO \"\$0: error: \\\`\$progdir/\$program' does not exist\" 1>&2
411965eef222Smrg    \$ECHO \"This script is just a wrapper for \$program.\" 1>&2
412056957a04Smrg    \$ECHO \"See the $PACKAGE documentation for more information.\" 1>&2
412165eef222Smrg    exit 1
412265eef222Smrg  fi
412365eef222Smrgfi\
412465eef222Smrg"
412565eef222Smrg}
4126ef981d24Smrg
4127ef981d24Smrg
412865eef222Smrg# func_emit_cwrapperexe_src
412965eef222Smrg# emit the source code for a wrapper executable on stdout
413065eef222Smrg# Must ONLY be called from within func_mode_link because
413165eef222Smrg# it depends on a number of variable set therein.
413265eef222Smrgfunc_emit_cwrapperexe_src ()
413365eef222Smrg{
413465eef222Smrg	cat <<EOF
4135ef981d24Smrg
413665eef222Smrg/* $cwrappersource - temporary wrapper executable for $objdir/$outputname
413765eef222Smrg   Generated by $PROGRAM (GNU $PACKAGE$TIMESTAMP) $VERSION
4138ef981d24Smrg
413965eef222Smrg   The $output program cannot be directly executed until all the libtool
414065eef222Smrg   libraries that it depends on are installed.
4141ef981d24Smrg
414265eef222Smrg   This wrapper executable should never be moved out of the build directory.
414365eef222Smrg   If it is, it will not operate correctly.
414465eef222Smrg*/
414565eef222SmrgEOF
414665eef222Smrg	    cat <<"EOF"
414756957a04Smrg#ifdef _MSC_VER
414856957a04Smrg# define _CRT_SECURE_NO_DEPRECATE 1
414956957a04Smrg#endif
415065eef222Smrg#include <stdio.h>
415165eef222Smrg#include <stdlib.h>
415265eef222Smrg#ifdef _MSC_VER
415365eef222Smrg# include <direct.h>
415465eef222Smrg# include <process.h>
415565eef222Smrg# include <io.h>
415665eef222Smrg#else
415765eef222Smrg# include <unistd.h>
415865eef222Smrg# include <stdint.h>
415965eef222Smrg# ifdef __CYGWIN__
416065eef222Smrg#  include <io.h>
416165eef222Smrg# endif
416265eef222Smrg#endif
416365eef222Smrg#include <malloc.h>
416465eef222Smrg#include <stdarg.h>
416565eef222Smrg#include <assert.h>
416665eef222Smrg#include <string.h>
416765eef222Smrg#include <ctype.h>
416865eef222Smrg#include <errno.h>
416965eef222Smrg#include <fcntl.h>
417065eef222Smrg#include <sys/stat.h>
417165eef222Smrg
417256957a04Smrg/* declarations of non-ANSI functions */
417356957a04Smrg#if defined(__MINGW32__)
417456957a04Smrg# ifdef __STRICT_ANSI__
417556957a04Smrgint _putenv (const char *);
417656957a04Smrg# endif
417756957a04Smrg#elif defined(__CYGWIN__)
417856957a04Smrg# ifdef __STRICT_ANSI__
417956957a04Smrgchar *realpath (const char *, char *);
418056957a04Smrgint putenv (char *);
418156957a04Smrgint setenv (const char *, const char *, int);
418256957a04Smrg# endif
418356957a04Smrg/* #elif defined (other platforms) ... */
418456957a04Smrg#endif
418556957a04Smrg
418656957a04Smrg/* portability defines, excluding path handling macros */
418756957a04Smrg#if defined(_MSC_VER)
418856957a04Smrg# define setmode _setmode
418956957a04Smrg# define stat    _stat
419056957a04Smrg# define chmod   _chmod
419156957a04Smrg# define getcwd  _getcwd
419256957a04Smrg# define putenv  _putenv
419356957a04Smrg# define S_IXUSR _S_IEXEC
419456957a04Smrg# ifndef _INTPTR_T_DEFINED
419556957a04Smrg#  define _INTPTR_T_DEFINED
419656957a04Smrg#  define intptr_t int
419756957a04Smrg# endif
419856957a04Smrg#elif defined(__MINGW32__)
419956957a04Smrg# define setmode _setmode
420056957a04Smrg# define stat    _stat
420156957a04Smrg# define chmod   _chmod
420256957a04Smrg# define getcwd  _getcwd
420356957a04Smrg# define putenv  _putenv
420456957a04Smrg#elif defined(__CYGWIN__)
420556957a04Smrg# define HAVE_SETENV
420656957a04Smrg# define FOPEN_WB "wb"
420756957a04Smrg/* #elif defined (other platforms) ... */
420856957a04Smrg#endif
420956957a04Smrg
421065eef222Smrg#if defined(PATH_MAX)
421165eef222Smrg# define LT_PATHMAX PATH_MAX
421265eef222Smrg#elif defined(MAXPATHLEN)
421365eef222Smrg# define LT_PATHMAX MAXPATHLEN
421465eef222Smrg#else
421565eef222Smrg# define LT_PATHMAX 1024
421665eef222Smrg#endif
421765eef222Smrg
421865eef222Smrg#ifndef S_IXOTH
421965eef222Smrg# define S_IXOTH 0
422065eef222Smrg#endif
422165eef222Smrg#ifndef S_IXGRP
422265eef222Smrg# define S_IXGRP 0
422365eef222Smrg#endif
422465eef222Smrg
422556957a04Smrg/* path handling portability macros */
422665eef222Smrg#ifndef DIR_SEPARATOR
422765eef222Smrg# define DIR_SEPARATOR '/'
422865eef222Smrg# define PATH_SEPARATOR ':'
422965eef222Smrg#endif
423065eef222Smrg
423165eef222Smrg#if defined (_WIN32) || defined (__MSDOS__) || defined (__DJGPP__) || \
423265eef222Smrg  defined (__OS2__)
423365eef222Smrg# define HAVE_DOS_BASED_FILE_SYSTEM
423465eef222Smrg# define FOPEN_WB "wb"
423565eef222Smrg# ifndef DIR_SEPARATOR_2
423665eef222Smrg#  define DIR_SEPARATOR_2 '\\'
423765eef222Smrg# endif
423865eef222Smrg# ifndef PATH_SEPARATOR_2
423965eef222Smrg#  define PATH_SEPARATOR_2 ';'
424065eef222Smrg# endif
424165eef222Smrg#endif
424265eef222Smrg
424365eef222Smrg#ifndef DIR_SEPARATOR_2
424465eef222Smrg# define IS_DIR_SEPARATOR(ch) ((ch) == DIR_SEPARATOR)
424565eef222Smrg#else /* DIR_SEPARATOR_2 */
424665eef222Smrg# define IS_DIR_SEPARATOR(ch) \
424765eef222Smrg	(((ch) == DIR_SEPARATOR) || ((ch) == DIR_SEPARATOR_2))
424865eef222Smrg#endif /* DIR_SEPARATOR_2 */
424965eef222Smrg
425065eef222Smrg#ifndef PATH_SEPARATOR_2
425165eef222Smrg# define IS_PATH_SEPARATOR(ch) ((ch) == PATH_SEPARATOR)
425265eef222Smrg#else /* PATH_SEPARATOR_2 */
425365eef222Smrg# define IS_PATH_SEPARATOR(ch) ((ch) == PATH_SEPARATOR_2)
425465eef222Smrg#endif /* PATH_SEPARATOR_2 */
425565eef222Smrg
425665eef222Smrg#ifndef FOPEN_WB
425765eef222Smrg# define FOPEN_WB "w"
425865eef222Smrg#endif
425965eef222Smrg#ifndef _O_BINARY
426065eef222Smrg# define _O_BINARY 0
426165eef222Smrg#endif
426265eef222Smrg
426365eef222Smrg#define XMALLOC(type, num)      ((type *) xmalloc ((num) * sizeof(type)))
426465eef222Smrg#define XFREE(stale) do { \
426565eef222Smrg  if (stale) { free ((void *) stale); stale = 0; } \
426665eef222Smrg} while (0)
426765eef222Smrg
426856957a04Smrg#if defined(LT_DEBUGWRAPPER)
426956957a04Smrgstatic int lt_debug = 1;
427065eef222Smrg#else
427156957a04Smrgstatic int lt_debug = 0;
427265eef222Smrg#endif
427365eef222Smrg
427456957a04Smrgconst char *program_name = "libtool-wrapper"; /* in case xstrdup fails */
427565eef222Smrg
427665eef222Smrgvoid *xmalloc (size_t num);
427765eef222Smrgchar *xstrdup (const char *string);
427865eef222Smrgconst char *base_name (const char *name);
427965eef222Smrgchar *find_executable (const char *wrapper);
428065eef222Smrgchar *chase_symlinks (const char *pathspec);
428165eef222Smrgint make_executable (const char *path);
428265eef222Smrgint check_executable (const char *path);
428365eef222Smrgchar *strendzap (char *str, const char *pat);
428456957a04Smrgvoid lt_debugprintf (const char *file, int line, const char *fmt, ...);
428556957a04Smrgvoid lt_fatal (const char *file, int line, const char *message, ...);
428656957a04Smrgstatic const char *nonnull (const char *s);
428756957a04Smrgstatic const char *nonempty (const char *s);
428865eef222Smrgvoid lt_setenv (const char *name, const char *value);
428965eef222Smrgchar *lt_extend_str (const char *orig_value, const char *add, int to_end);
429065eef222Smrgvoid lt_update_exe_path (const char *name, const char *value);
429165eef222Smrgvoid lt_update_lib_path (const char *name, const char *value);
429256957a04Smrgchar **prepare_spawn (char **argv);
429356957a04Smrgvoid lt_dump_script (FILE *f);
429465eef222SmrgEOF
429565eef222Smrg
429665eef222Smrg	    cat <<EOF
4297200d7199Smrgvolatile const char * MAGIC_EXE = "$magic_exe";
429865eef222Smrgconst char * LIB_PATH_VARNAME = "$shlibpath_var";
429965eef222SmrgEOF
430065eef222Smrg
430165eef222Smrg	    if test "$shlibpath_overrides_runpath" = yes && test -n "$shlibpath_var" && test -n "$temp_rpath"; then
4302200d7199Smrg              func_to_host_path "$temp_rpath"
430365eef222Smrg	      cat <<EOF
4304200d7199Smrgconst char * LIB_PATH_VALUE   = "$func_to_host_path_result";
4305ef981d24SmrgEOF
4306ef981d24Smrg	    else
430765eef222Smrg	      cat <<"EOF"
430865eef222Smrgconst char * LIB_PATH_VALUE   = "";
430965eef222SmrgEOF
4310ef981d24Smrg	    fi
431165eef222Smrg
431265eef222Smrg	    if test -n "$dllsearchpath"; then
4313200d7199Smrg              func_to_host_path "$dllsearchpath:"
431465eef222Smrg	      cat <<EOF
431565eef222Smrgconst char * EXE_PATH_VARNAME = "PATH";
4316200d7199Smrgconst char * EXE_PATH_VALUE   = "$func_to_host_path_result";
431765eef222SmrgEOF
4318ef981d24Smrg	    else
431965eef222Smrg	      cat <<"EOF"
432065eef222Smrgconst char * EXE_PATH_VARNAME = "";
432165eef222Smrgconst char * EXE_PATH_VALUE   = "";
432265eef222SmrgEOF
4323ef981d24Smrg	    fi
432465eef222Smrg
432565eef222Smrg	    if test "$fast_install" = yes; then
432665eef222Smrg	      cat <<EOF
432765eef222Smrgconst char * TARGET_PROGRAM_NAME = "lt-$outputname"; /* hopefully, no .exe */
432865eef222SmrgEOF
4329ef981d24Smrg	    else
433065eef222Smrg	      cat <<EOF
433165eef222Smrgconst char * TARGET_PROGRAM_NAME = "$outputname"; /* hopefully, no .exe */
433265eef222SmrgEOF
4333ef981d24Smrg	    fi
4334ef981d24Smrg
4335ef981d24Smrg
433665eef222Smrg	    cat <<"EOF"
4337ef981d24Smrg
433865eef222Smrg#define LTWRAPPER_OPTION_PREFIX         "--lt-"
4339ef981d24Smrg
434065eef222Smrgstatic const char *ltwrapper_option_prefix = LTWRAPPER_OPTION_PREFIX;
434165eef222Smrgstatic const char *dumpscript_opt       = LTWRAPPER_OPTION_PREFIX "dump-script";
434256957a04Smrgstatic const char *debug_opt            = LTWRAPPER_OPTION_PREFIX "debug";
4343ef981d24Smrg
434465eef222Smrgint
434565eef222Smrgmain (int argc, char *argv[])
434665eef222Smrg{
434765eef222Smrg  char **newargz;
434865eef222Smrg  int  newargc;
434965eef222Smrg  char *tmp_pathspec;
435065eef222Smrg  char *actual_cwrapper_path;
435165eef222Smrg  char *actual_cwrapper_name;
435265eef222Smrg  char *target_name;
435365eef222Smrg  char *lt_argv_zero;
435465eef222Smrg  intptr_t rval = 127;
4355ef981d24Smrg
435665eef222Smrg  int i;
4357ef981d24Smrg
435865eef222Smrg  program_name = (char *) xstrdup (base_name (argv[0]));
435956957a04Smrg  newargz = XMALLOC (char *, argc + 1);
4360ef981d24Smrg
436156957a04Smrg  /* very simple arg parsing; don't want to rely on getopt
436256957a04Smrg   * also, copy all non cwrapper options to newargz, except
436356957a04Smrg   * argz[0], which is handled differently
436456957a04Smrg   */
436556957a04Smrg  newargc=0;
436665eef222Smrg  for (i = 1; i < argc; i++)
436765eef222Smrg    {
436865eef222Smrg      if (strcmp (argv[i], dumpscript_opt) == 0)
436965eef222Smrg	{
437065eef222SmrgEOF
437165eef222Smrg	    case "$host" in
437265eef222Smrg	      *mingw* | *cygwin* )
437365eef222Smrg		# make stdout use "unix" line endings
437465eef222Smrg		echo "          setmode(1,_O_BINARY);"
437565eef222Smrg		;;
437665eef222Smrg	      esac
4377ef981d24Smrg
437865eef222Smrg	    cat <<"EOF"
437956957a04Smrg	  lt_dump_script (stdout);
438065eef222Smrg	  return 0;
438165eef222Smrg	}
438256957a04Smrg      if (strcmp (argv[i], debug_opt) == 0)
438356957a04Smrg	{
438456957a04Smrg          lt_debug = 1;
438556957a04Smrg          continue;
438656957a04Smrg	}
438756957a04Smrg      if (strcmp (argv[i], ltwrapper_option_prefix) == 0)
438856957a04Smrg        {
438956957a04Smrg          /* however, if there is an option in the LTWRAPPER_OPTION_PREFIX
439056957a04Smrg             namespace, but it is not one of the ones we know about and
439156957a04Smrg             have already dealt with, above (inluding dump-script), then
439256957a04Smrg             report an error. Otherwise, targets might begin to believe
439356957a04Smrg             they are allowed to use options in the LTWRAPPER_OPTION_PREFIX
439456957a04Smrg             namespace. The first time any user complains about this, we'll
439556957a04Smrg             need to make LTWRAPPER_OPTION_PREFIX a configure-time option
439656957a04Smrg             or a configure.ac-settable value.
439756957a04Smrg           */
439856957a04Smrg          lt_fatal (__FILE__, __LINE__,
439956957a04Smrg		    "unrecognized %s option: '%s'",
440056957a04Smrg                    ltwrapper_option_prefix, argv[i]);
440156957a04Smrg        }
440256957a04Smrg      /* otherwise ... */
440356957a04Smrg      newargz[++newargc] = xstrdup (argv[i]);
440465eef222Smrg    }
440556957a04Smrg  newargz[++newargc] = NULL;
440656957a04Smrg
440756957a04SmrgEOF
440856957a04Smrg	    cat <<EOF
440956957a04Smrg  /* The GNU banner must be the first non-error debug message */
441056957a04Smrg  lt_debugprintf (__FILE__, __LINE__, "libtool wrapper (GNU $PACKAGE$TIMESTAMP) $VERSION\n");
441156957a04SmrgEOF
441256957a04Smrg	    cat <<"EOF"
441356957a04Smrg  lt_debugprintf (__FILE__, __LINE__, "(main) argv[0]: %s\n", argv[0]);
441456957a04Smrg  lt_debugprintf (__FILE__, __LINE__, "(main) program_name: %s\n", program_name);
4415ef981d24Smrg
441665eef222Smrg  tmp_pathspec = find_executable (argv[0]);
441765eef222Smrg  if (tmp_pathspec == NULL)
441856957a04Smrg    lt_fatal (__FILE__, __LINE__, "couldn't find %s", argv[0]);
441956957a04Smrg  lt_debugprintf (__FILE__, __LINE__,
442056957a04Smrg                  "(main) found exe (before symlink chase) at: %s\n",
442156957a04Smrg		  tmp_pathspec);
442265eef222Smrg
442365eef222Smrg  actual_cwrapper_path = chase_symlinks (tmp_pathspec);
442456957a04Smrg  lt_debugprintf (__FILE__, __LINE__,
442556957a04Smrg                  "(main) found exe (after symlink chase) at: %s\n",
442656957a04Smrg		  actual_cwrapper_path);
442765eef222Smrg  XFREE (tmp_pathspec);
442865eef222Smrg
442956957a04Smrg  actual_cwrapper_name = xstrdup (base_name (actual_cwrapper_path));
443065eef222Smrg  strendzap (actual_cwrapper_path, actual_cwrapper_name);
443165eef222Smrg
443265eef222Smrg  /* wrapper name transforms */
443365eef222Smrg  strendzap (actual_cwrapper_name, ".exe");
443465eef222Smrg  tmp_pathspec = lt_extend_str (actual_cwrapper_name, ".exe", 1);
443565eef222Smrg  XFREE (actual_cwrapper_name);
443665eef222Smrg  actual_cwrapper_name = tmp_pathspec;
443765eef222Smrg  tmp_pathspec = 0;
443865eef222Smrg
443965eef222Smrg  /* target_name transforms -- use actual target program name; might have lt- prefix */
444065eef222Smrg  target_name = xstrdup (base_name (TARGET_PROGRAM_NAME));
444165eef222Smrg  strendzap (target_name, ".exe");
444265eef222Smrg  tmp_pathspec = lt_extend_str (target_name, ".exe", 1);
444365eef222Smrg  XFREE (target_name);
444465eef222Smrg  target_name = tmp_pathspec;
444565eef222Smrg  tmp_pathspec = 0;
444665eef222Smrg
444756957a04Smrg  lt_debugprintf (__FILE__, __LINE__,
444856957a04Smrg		  "(main) libtool target name: %s\n",
444956957a04Smrg		  target_name);
445065eef222SmrgEOF
4451ef981d24Smrg
445265eef222Smrg	    cat <<EOF
445365eef222Smrg  newargz[0] =
445465eef222Smrg    XMALLOC (char, (strlen (actual_cwrapper_path) +
445565eef222Smrg		    strlen ("$objdir") + 1 + strlen (actual_cwrapper_name) + 1));
445665eef222Smrg  strcpy (newargz[0], actual_cwrapper_path);
445765eef222Smrg  strcat (newargz[0], "$objdir");
445865eef222Smrg  strcat (newargz[0], "/");
445965eef222SmrgEOF
4460ef981d24Smrg
446165eef222Smrg	    cat <<"EOF"
446265eef222Smrg  /* stop here, and copy so we don't have to do this twice */
446365eef222Smrg  tmp_pathspec = xstrdup (newargz[0]);
4464ef981d24Smrg
446565eef222Smrg  /* do NOT want the lt- prefix here, so use actual_cwrapper_name */
446665eef222Smrg  strcat (newargz[0], actual_cwrapper_name);
4467ef981d24Smrg
446865eef222Smrg  /* DO want the lt- prefix here if it exists, so use target_name */
446965eef222Smrg  lt_argv_zero = lt_extend_str (tmp_pathspec, target_name, 1);
447065eef222Smrg  XFREE (tmp_pathspec);
447165eef222Smrg  tmp_pathspec = NULL;
447265eef222SmrgEOF
4473ef981d24Smrg
447465eef222Smrg	    case $host_os in
447565eef222Smrg	      mingw*)
447665eef222Smrg	    cat <<"EOF"
447765eef222Smrg  {
447865eef222Smrg    char* p;
447965eef222Smrg    while ((p = strchr (newargz[0], '\\')) != NULL)
448065eef222Smrg      {
448165eef222Smrg	*p = '/';
448265eef222Smrg      }
448365eef222Smrg    while ((p = strchr (lt_argv_zero, '\\')) != NULL)
448465eef222Smrg      {
448565eef222Smrg	*p = '/';
448665eef222Smrg      }
448765eef222Smrg  }
448865eef222SmrgEOF
448965eef222Smrg	    ;;
449065eef222Smrg	    esac
4491ef981d24Smrg
449265eef222Smrg	    cat <<"EOF"
449365eef222Smrg  XFREE (target_name);
449465eef222Smrg  XFREE (actual_cwrapper_path);
449565eef222Smrg  XFREE (actual_cwrapper_name);
4496ef981d24Smrg
449765eef222Smrg  lt_setenv ("BIN_SH", "xpg4"); /* for Tru64 */
449865eef222Smrg  lt_setenv ("DUALCASE", "1");  /* for MSK sh */
4499200d7199Smrg  /* Update the DLL searchpath.  EXE_PATH_VALUE ($dllsearchpath) must
4500200d7199Smrg     be prepended before (that is, appear after) LIB_PATH_VALUE ($temp_rpath)
4501200d7199Smrg     because on Windows, both *_VARNAMEs are PATH but uninstalled
4502200d7199Smrg     libraries must come first. */
450365eef222Smrg  lt_update_exe_path (EXE_PATH_VARNAME, EXE_PATH_VALUE);
4504200d7199Smrg  lt_update_lib_path (LIB_PATH_VARNAME, LIB_PATH_VALUE);
4505ef981d24Smrg
450656957a04Smrg  lt_debugprintf (__FILE__, __LINE__, "(main) lt_argv_zero: %s\n",
450756957a04Smrg		  nonnull (lt_argv_zero));
450865eef222Smrg  for (i = 0; i < newargc; i++)
450965eef222Smrg    {
451056957a04Smrg      lt_debugprintf (__FILE__, __LINE__, "(main) newargz[%d]: %s\n",
451156957a04Smrg		      i, nonnull (newargz[i]));
451265eef222Smrg    }
4513ef981d24Smrg
451465eef222SmrgEOF
4515ef981d24Smrg
451665eef222Smrg	    case $host_os in
451765eef222Smrg	      mingw*)
451865eef222Smrg		cat <<"EOF"
451965eef222Smrg  /* execv doesn't actually work on mingw as expected on unix */
452056957a04Smrg  newargz = prepare_spawn (newargz);
452165eef222Smrg  rval = _spawnv (_P_WAIT, lt_argv_zero, (const char * const *) newargz);
452265eef222Smrg  if (rval == -1)
452365eef222Smrg    {
452465eef222Smrg      /* failed to start process */
452556957a04Smrg      lt_debugprintf (__FILE__, __LINE__,
452656957a04Smrg		      "(main) failed to launch target \"%s\": %s\n",
452756957a04Smrg		      lt_argv_zero, nonnull (strerror (errno)));
452865eef222Smrg      return 127;
452965eef222Smrg    }
453065eef222Smrg  return rval;
453165eef222SmrgEOF
453265eef222Smrg		;;
453365eef222Smrg	      *)
453465eef222Smrg		cat <<"EOF"
453565eef222Smrg  execv (lt_argv_zero, newargz);
453665eef222Smrg  return rval; /* =127, but avoids unused variable warning */
453765eef222SmrgEOF
453865eef222Smrg		;;
453965eef222Smrg	    esac
4540ef981d24Smrg
454165eef222Smrg	    cat <<"EOF"
454265eef222Smrg}
4543ef981d24Smrg
454465eef222Smrgvoid *
454565eef222Smrgxmalloc (size_t num)
454665eef222Smrg{
454765eef222Smrg  void *p = (void *) malloc (num);
454865eef222Smrg  if (!p)
454956957a04Smrg    lt_fatal (__FILE__, __LINE__, "memory exhausted");
4550ef981d24Smrg
455165eef222Smrg  return p;
455265eef222Smrg}
4553ef981d24Smrg
455465eef222Smrgchar *
455565eef222Smrgxstrdup (const char *string)
455665eef222Smrg{
455765eef222Smrg  return string ? strcpy ((char *) xmalloc (strlen (string) + 1),
455865eef222Smrg			  string) : NULL;
455965eef222Smrg}
4560ef981d24Smrg
456165eef222Smrgconst char *
456265eef222Smrgbase_name (const char *name)
456365eef222Smrg{
456465eef222Smrg  const char *base;
4565ef981d24Smrg
456665eef222Smrg#if defined (HAVE_DOS_BASED_FILE_SYSTEM)
456765eef222Smrg  /* Skip over the disk name in MSDOS pathnames. */
456865eef222Smrg  if (isalpha ((unsigned char) name[0]) && name[1] == ':')
456965eef222Smrg    name += 2;
457065eef222Smrg#endif
4571ef981d24Smrg
457265eef222Smrg  for (base = name; *name; name++)
457365eef222Smrg    if (IS_DIR_SEPARATOR (*name))
457465eef222Smrg      base = name + 1;
457565eef222Smrg  return base;
457665eef222Smrg}
4577ef981d24Smrg
457865eef222Smrgint
457965eef222Smrgcheck_executable (const char *path)
458065eef222Smrg{
458165eef222Smrg  struct stat st;
4582ef981d24Smrg
458356957a04Smrg  lt_debugprintf (__FILE__, __LINE__, "(check_executable): %s\n",
458456957a04Smrg                  nonempty (path));
458565eef222Smrg  if ((!path) || (!*path))
458665eef222Smrg    return 0;
4587ef981d24Smrg
458865eef222Smrg  if ((stat (path, &st) >= 0)
458965eef222Smrg      && (st.st_mode & (S_IXUSR | S_IXGRP | S_IXOTH)))
459065eef222Smrg    return 1;
459165eef222Smrg  else
459265eef222Smrg    return 0;
459365eef222Smrg}
4594ef981d24Smrg
459565eef222Smrgint
459665eef222Smrgmake_executable (const char *path)
459765eef222Smrg{
459865eef222Smrg  int rval = 0;
459965eef222Smrg  struct stat st;
4600ef981d24Smrg
460156957a04Smrg  lt_debugprintf (__FILE__, __LINE__, "(make_executable): %s\n",
460256957a04Smrg                  nonempty (path));
460365eef222Smrg  if ((!path) || (!*path))
460465eef222Smrg    return 0;
4605ef981d24Smrg
460665eef222Smrg  if (stat (path, &st) >= 0)
460765eef222Smrg    {
460865eef222Smrg      rval = chmod (path, st.st_mode | S_IXOTH | S_IXGRP | S_IXUSR);
460965eef222Smrg    }
461065eef222Smrg  return rval;
461165eef222Smrg}
4612ef981d24Smrg
461365eef222Smrg/* Searches for the full path of the wrapper.  Returns
461465eef222Smrg   newly allocated full path name if found, NULL otherwise
461565eef222Smrg   Does not chase symlinks, even on platforms that support them.
461665eef222Smrg*/
461765eef222Smrgchar *
461865eef222Smrgfind_executable (const char *wrapper)
461965eef222Smrg{
462065eef222Smrg  int has_slash = 0;
462165eef222Smrg  const char *p;
462265eef222Smrg  const char *p_next;
462365eef222Smrg  /* static buffer for getcwd */
462465eef222Smrg  char tmp[LT_PATHMAX + 1];
462565eef222Smrg  int tmp_len;
462665eef222Smrg  char *concat_name;
4627ef981d24Smrg
462856957a04Smrg  lt_debugprintf (__FILE__, __LINE__, "(find_executable): %s\n",
462956957a04Smrg                  nonempty (wrapper));
4630ef981d24Smrg
463165eef222Smrg  if ((wrapper == NULL) || (*wrapper == '\0'))
463265eef222Smrg    return NULL;
4633ef981d24Smrg
463465eef222Smrg  /* Absolute path? */
463565eef222Smrg#if defined (HAVE_DOS_BASED_FILE_SYSTEM)
463665eef222Smrg  if (isalpha ((unsigned char) wrapper[0]) && wrapper[1] == ':')
463765eef222Smrg    {
463865eef222Smrg      concat_name = xstrdup (wrapper);
463965eef222Smrg      if (check_executable (concat_name))
464065eef222Smrg	return concat_name;
464165eef222Smrg      XFREE (concat_name);
464265eef222Smrg    }
464365eef222Smrg  else
464465eef222Smrg    {
464565eef222Smrg#endif
464665eef222Smrg      if (IS_DIR_SEPARATOR (wrapper[0]))
464765eef222Smrg	{
464865eef222Smrg	  concat_name = xstrdup (wrapper);
464965eef222Smrg	  if (check_executable (concat_name))
465065eef222Smrg	    return concat_name;
465165eef222Smrg	  XFREE (concat_name);
465265eef222Smrg	}
465365eef222Smrg#if defined (HAVE_DOS_BASED_FILE_SYSTEM)
465465eef222Smrg    }
465565eef222Smrg#endif
4656ef981d24Smrg
465765eef222Smrg  for (p = wrapper; *p; p++)
465865eef222Smrg    if (*p == '/')
465965eef222Smrg      {
466065eef222Smrg	has_slash = 1;
466165eef222Smrg	break;
466265eef222Smrg      }
466365eef222Smrg  if (!has_slash)
466465eef222Smrg    {
466565eef222Smrg      /* no slashes; search PATH */
466665eef222Smrg      const char *path = getenv ("PATH");
466765eef222Smrg      if (path != NULL)
466865eef222Smrg	{
466965eef222Smrg	  for (p = path; *p; p = p_next)
467065eef222Smrg	    {
467165eef222Smrg	      const char *q;
467265eef222Smrg	      size_t p_len;
467365eef222Smrg	      for (q = p; *q; q++)
467465eef222Smrg		if (IS_PATH_SEPARATOR (*q))
467565eef222Smrg		  break;
467665eef222Smrg	      p_len = q - p;
467765eef222Smrg	      p_next = (*q == '\0' ? q : q + 1);
467865eef222Smrg	      if (p_len == 0)
467965eef222Smrg		{
468065eef222Smrg		  /* empty path: current directory */
468165eef222Smrg		  if (getcwd (tmp, LT_PATHMAX) == NULL)
468256957a04Smrg		    lt_fatal (__FILE__, __LINE__, "getcwd failed: %s",
468356957a04Smrg                              nonnull (strerror (errno)));
468465eef222Smrg		  tmp_len = strlen (tmp);
468565eef222Smrg		  concat_name =
468665eef222Smrg		    XMALLOC (char, tmp_len + 1 + strlen (wrapper) + 1);
468765eef222Smrg		  memcpy (concat_name, tmp, tmp_len);
468865eef222Smrg		  concat_name[tmp_len] = '/';
468965eef222Smrg		  strcpy (concat_name + tmp_len + 1, wrapper);
469065eef222Smrg		}
469165eef222Smrg	      else
469265eef222Smrg		{
469365eef222Smrg		  concat_name =
469465eef222Smrg		    XMALLOC (char, p_len + 1 + strlen (wrapper) + 1);
469565eef222Smrg		  memcpy (concat_name, p, p_len);
469665eef222Smrg		  concat_name[p_len] = '/';
469765eef222Smrg		  strcpy (concat_name + p_len + 1, wrapper);
469865eef222Smrg		}
469965eef222Smrg	      if (check_executable (concat_name))
470065eef222Smrg		return concat_name;
470165eef222Smrg	      XFREE (concat_name);
470265eef222Smrg	    }
470365eef222Smrg	}
470465eef222Smrg      /* not found in PATH; assume curdir */
470565eef222Smrg    }
470665eef222Smrg  /* Relative path | not found in path: prepend cwd */
470765eef222Smrg  if (getcwd (tmp, LT_PATHMAX) == NULL)
470856957a04Smrg    lt_fatal (__FILE__, __LINE__, "getcwd failed: %s",
470956957a04Smrg              nonnull (strerror (errno)));
471065eef222Smrg  tmp_len = strlen (tmp);
471165eef222Smrg  concat_name = XMALLOC (char, tmp_len + 1 + strlen (wrapper) + 1);
471265eef222Smrg  memcpy (concat_name, tmp, tmp_len);
471365eef222Smrg  concat_name[tmp_len] = '/';
471465eef222Smrg  strcpy (concat_name + tmp_len + 1, wrapper);
4715ef981d24Smrg
471665eef222Smrg  if (check_executable (concat_name))
471765eef222Smrg    return concat_name;
471865eef222Smrg  XFREE (concat_name);
471965eef222Smrg  return NULL;
472065eef222Smrg}
4721ef981d24Smrg
472265eef222Smrgchar *
472365eef222Smrgchase_symlinks (const char *pathspec)
472465eef222Smrg{
472565eef222Smrg#ifndef S_ISLNK
472665eef222Smrg  return xstrdup (pathspec);
472765eef222Smrg#else
472865eef222Smrg  char buf[LT_PATHMAX];
472965eef222Smrg  struct stat s;
473065eef222Smrg  char *tmp_pathspec = xstrdup (pathspec);
473165eef222Smrg  char *p;
473265eef222Smrg  int has_symlinks = 0;
473365eef222Smrg  while (strlen (tmp_pathspec) && !has_symlinks)
473465eef222Smrg    {
473556957a04Smrg      lt_debugprintf (__FILE__, __LINE__,
473656957a04Smrg		      "checking path component for symlinks: %s\n",
473756957a04Smrg		      tmp_pathspec);
473865eef222Smrg      if (lstat (tmp_pathspec, &s) == 0)
473965eef222Smrg	{
474065eef222Smrg	  if (S_ISLNK (s.st_mode) != 0)
474165eef222Smrg	    {
474265eef222Smrg	      has_symlinks = 1;
474365eef222Smrg	      break;
474465eef222Smrg	    }
4745ef981d24Smrg
474665eef222Smrg	  /* search backwards for last DIR_SEPARATOR */
474765eef222Smrg	  p = tmp_pathspec + strlen (tmp_pathspec) - 1;
474865eef222Smrg	  while ((p > tmp_pathspec) && (!IS_DIR_SEPARATOR (*p)))
474965eef222Smrg	    p--;
475065eef222Smrg	  if ((p == tmp_pathspec) && (!IS_DIR_SEPARATOR (*p)))
475165eef222Smrg	    {
475265eef222Smrg	      /* no more DIR_SEPARATORS left */
475365eef222Smrg	      break;
475465eef222Smrg	    }
475565eef222Smrg	  *p = '\0';
475665eef222Smrg	}
475765eef222Smrg      else
475865eef222Smrg	{
475956957a04Smrg	  lt_fatal (__FILE__, __LINE__,
476056957a04Smrg		    "error accessing file \"%s\": %s",
476156957a04Smrg		    tmp_pathspec, nonnull (strerror (errno)));
476265eef222Smrg	}
476365eef222Smrg    }
476465eef222Smrg  XFREE (tmp_pathspec);
4765ef981d24Smrg
476665eef222Smrg  if (!has_symlinks)
476765eef222Smrg    {
476865eef222Smrg      return xstrdup (pathspec);
476965eef222Smrg    }
4770ef981d24Smrg
477165eef222Smrg  tmp_pathspec = realpath (pathspec, buf);
477265eef222Smrg  if (tmp_pathspec == 0)
477365eef222Smrg    {
477456957a04Smrg      lt_fatal (__FILE__, __LINE__,
477556957a04Smrg		"could not follow symlinks for %s", pathspec);
477665eef222Smrg    }
477765eef222Smrg  return xstrdup (tmp_pathspec);
477865eef222Smrg#endif
477965eef222Smrg}
4780ef981d24Smrg
478165eef222Smrgchar *
478265eef222Smrgstrendzap (char *str, const char *pat)
478365eef222Smrg{
478465eef222Smrg  size_t len, patlen;
4785ef981d24Smrg
478665eef222Smrg  assert (str != NULL);
478765eef222Smrg  assert (pat != NULL);
4788ef981d24Smrg
478965eef222Smrg  len = strlen (str);
479065eef222Smrg  patlen = strlen (pat);
4791ef981d24Smrg
479265eef222Smrg  if (patlen <= len)
479365eef222Smrg    {
479465eef222Smrg      str += len - patlen;
479565eef222Smrg      if (strcmp (str, pat) == 0)
479665eef222Smrg	*str = '\0';
479765eef222Smrg    }
479865eef222Smrg  return str;
479965eef222Smrg}
4800ef981d24Smrg
480156957a04Smrgvoid
480256957a04Smrglt_debugprintf (const char *file, int line, const char *fmt, ...)
480356957a04Smrg{
480456957a04Smrg  va_list args;
480556957a04Smrg  if (lt_debug)
480656957a04Smrg    {
480756957a04Smrg      (void) fprintf (stderr, "%s:%s:%d: ", program_name, file, line);
480856957a04Smrg      va_start (args, fmt);
480956957a04Smrg      (void) vfprintf (stderr, fmt, args);
481056957a04Smrg      va_end (args);
481156957a04Smrg    }
481256957a04Smrg}
481356957a04Smrg
481465eef222Smrgstatic void
481556957a04Smrglt_error_core (int exit_status, const char *file,
481656957a04Smrg	       int line, const char *mode,
481765eef222Smrg	       const char *message, va_list ap)
481865eef222Smrg{
481956957a04Smrg  fprintf (stderr, "%s:%s:%d: %s: ", program_name, file, line, mode);
482065eef222Smrg  vfprintf (stderr, message, ap);
482165eef222Smrg  fprintf (stderr, ".\n");
4822ef981d24Smrg
482365eef222Smrg  if (exit_status >= 0)
482465eef222Smrg    exit (exit_status);
482565eef222Smrg}
4826ef981d24Smrg
482765eef222Smrgvoid
482856957a04Smrglt_fatal (const char *file, int line, const char *message, ...)
482965eef222Smrg{
483065eef222Smrg  va_list ap;
483165eef222Smrg  va_start (ap, message);
483256957a04Smrg  lt_error_core (EXIT_FAILURE, file, line, "FATAL", message, ap);
483365eef222Smrg  va_end (ap);
483465eef222Smrg}
4835ef981d24Smrg
483656957a04Smrgstatic const char *
483756957a04Smrgnonnull (const char *s)
483856957a04Smrg{
483956957a04Smrg  return s ? s : "(null)";
484056957a04Smrg}
484156957a04Smrg
484256957a04Smrgstatic const char *
484356957a04Smrgnonempty (const char *s)
484456957a04Smrg{
484556957a04Smrg  return (s && !*s) ? "(empty)" : nonnull (s);
484656957a04Smrg}
484756957a04Smrg
484865eef222Smrgvoid
484965eef222Smrglt_setenv (const char *name, const char *value)
485065eef222Smrg{
485156957a04Smrg  lt_debugprintf (__FILE__, __LINE__,
485256957a04Smrg		  "(lt_setenv) setting '%s' to '%s'\n",
485356957a04Smrg                  nonnull (name), nonnull (value));
485465eef222Smrg  {
485565eef222Smrg#ifdef HAVE_SETENV
485665eef222Smrg    /* always make a copy, for consistency with !HAVE_SETENV */
485765eef222Smrg    char *str = xstrdup (value);
485865eef222Smrg    setenv (name, str, 1);
485965eef222Smrg#else
486065eef222Smrg    int len = strlen (name) + 1 + strlen (value) + 1;
486165eef222Smrg    char *str = XMALLOC (char, len);
486265eef222Smrg    sprintf (str, "%s=%s", name, value);
486365eef222Smrg    if (putenv (str) != EXIT_SUCCESS)
486465eef222Smrg      {
486565eef222Smrg        XFREE (str);
486665eef222Smrg      }
486765eef222Smrg#endif
486865eef222Smrg  }
486965eef222Smrg}
4870ef981d24Smrg
487165eef222Smrgchar *
487265eef222Smrglt_extend_str (const char *orig_value, const char *add, int to_end)
487365eef222Smrg{
487465eef222Smrg  char *new_value;
487565eef222Smrg  if (orig_value && *orig_value)
487665eef222Smrg    {
487765eef222Smrg      int orig_value_len = strlen (orig_value);
487865eef222Smrg      int add_len = strlen (add);
487965eef222Smrg      new_value = XMALLOC (char, add_len + orig_value_len + 1);
488065eef222Smrg      if (to_end)
488165eef222Smrg        {
488265eef222Smrg          strcpy (new_value, orig_value);
488365eef222Smrg          strcpy (new_value + orig_value_len, add);
488465eef222Smrg        }
488565eef222Smrg      else
488665eef222Smrg        {
488765eef222Smrg          strcpy (new_value, add);
488865eef222Smrg          strcpy (new_value + add_len, orig_value);
488965eef222Smrg        }
489065eef222Smrg    }
489165eef222Smrg  else
489265eef222Smrg    {
489365eef222Smrg      new_value = xstrdup (add);
489465eef222Smrg    }
489565eef222Smrg  return new_value;
489665eef222Smrg}
4897ef981d24Smrg
489865eef222Smrgvoid
489965eef222Smrglt_update_exe_path (const char *name, const char *value)
490065eef222Smrg{
490156957a04Smrg  lt_debugprintf (__FILE__, __LINE__,
490256957a04Smrg		  "(lt_update_exe_path) modifying '%s' by prepending '%s'\n",
490356957a04Smrg                  nonnull (name), nonnull (value));
4904ef981d24Smrg
490565eef222Smrg  if (name && *name && value && *value)
490665eef222Smrg    {
490765eef222Smrg      char *new_value = lt_extend_str (getenv (name), value, 0);
490865eef222Smrg      /* some systems can't cope with a ':'-terminated path #' */
490965eef222Smrg      int len = strlen (new_value);
491065eef222Smrg      while (((len = strlen (new_value)) > 0) && IS_PATH_SEPARATOR (new_value[len-1]))
491165eef222Smrg        {
491265eef222Smrg          new_value[len-1] = '\0';
491365eef222Smrg        }
491465eef222Smrg      lt_setenv (name, new_value);
491565eef222Smrg      XFREE (new_value);
491665eef222Smrg    }
491765eef222Smrg}
4918ef981d24Smrg
491965eef222Smrgvoid
492065eef222Smrglt_update_lib_path (const char *name, const char *value)
492165eef222Smrg{
492256957a04Smrg  lt_debugprintf (__FILE__, __LINE__,
492356957a04Smrg		  "(lt_update_lib_path) modifying '%s' by prepending '%s'\n",
492456957a04Smrg                  nonnull (name), nonnull (value));
4925ef981d24Smrg
492665eef222Smrg  if (name && *name && value && *value)
492765eef222Smrg    {
492865eef222Smrg      char *new_value = lt_extend_str (getenv (name), value, 0);
492965eef222Smrg      lt_setenv (name, new_value);
493065eef222Smrg      XFREE (new_value);
493165eef222Smrg    }
493265eef222Smrg}
4933ef981d24Smrg
493456957a04SmrgEOF
493556957a04Smrg	    case $host_os in
493656957a04Smrg	      mingw*)
493756957a04Smrg		cat <<"EOF"
493856957a04Smrg
493956957a04Smrg/* Prepares an argument vector before calling spawn().
494056957a04Smrg   Note that spawn() does not by itself call the command interpreter
494156957a04Smrg     (getenv ("COMSPEC") != NULL ? getenv ("COMSPEC") :
494256957a04Smrg      ({ OSVERSIONINFO v; v.dwOSVersionInfoSize = sizeof(OSVERSIONINFO);
494356957a04Smrg         GetVersionEx(&v);
494456957a04Smrg         v.dwPlatformId == VER_PLATFORM_WIN32_NT;
494556957a04Smrg      }) ? "cmd.exe" : "command.com").
494656957a04Smrg   Instead it simply concatenates the arguments, separated by ' ', and calls
494756957a04Smrg   CreateProcess().  We must quote the arguments since Win32 CreateProcess()
494856957a04Smrg   interprets characters like ' ', '\t', '\\', '"' (but not '<' and '>') in a
494956957a04Smrg   special way:
495056957a04Smrg   - Space and tab are interpreted as delimiters. They are not treated as
495156957a04Smrg     delimiters if they are surrounded by double quotes: "...".
495256957a04Smrg   - Unescaped double quotes are removed from the input. Their only effect is
495356957a04Smrg     that within double quotes, space and tab are treated like normal
495456957a04Smrg     characters.
495556957a04Smrg   - Backslashes not followed by double quotes are not special.
495656957a04Smrg   - But 2*n+1 backslashes followed by a double quote become
495756957a04Smrg     n backslashes followed by a double quote (n >= 0):
495856957a04Smrg       \" -> "
495956957a04Smrg       \\\" -> \"
496056957a04Smrg       \\\\\" -> \\"
496156957a04Smrg */
496256957a04Smrg#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"
496356957a04Smrg#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"
496456957a04Smrgchar **
496556957a04Smrgprepare_spawn (char **argv)
496656957a04Smrg{
496756957a04Smrg  size_t argc;
496856957a04Smrg  char **new_argv;
496956957a04Smrg  size_t i;
497056957a04Smrg
497156957a04Smrg  /* Count number of arguments.  */
497256957a04Smrg  for (argc = 0; argv[argc] != NULL; argc++)
497356957a04Smrg    ;
497456957a04Smrg
497556957a04Smrg  /* Allocate new argument vector.  */
497656957a04Smrg  new_argv = XMALLOC (char *, argc + 1);
497756957a04Smrg
497856957a04Smrg  /* Put quoted arguments into the new argument vector.  */
497956957a04Smrg  for (i = 0; i < argc; i++)
498056957a04Smrg    {
498156957a04Smrg      const char *string = argv[i];
498256957a04Smrg
498356957a04Smrg      if (string[0] == '\0')
498456957a04Smrg	new_argv[i] = xstrdup ("\"\"");
498556957a04Smrg      else if (strpbrk (string, SHELL_SPECIAL_CHARS) != NULL)
498656957a04Smrg	{
498756957a04Smrg	  int quote_around = (strpbrk (string, SHELL_SPACE_CHARS) != NULL);
498856957a04Smrg	  size_t length;
498956957a04Smrg	  unsigned int backslashes;
499056957a04Smrg	  const char *s;
499156957a04Smrg	  char *quoted_string;
499256957a04Smrg	  char *p;
499356957a04Smrg
499456957a04Smrg	  length = 0;
499556957a04Smrg	  backslashes = 0;
499656957a04Smrg	  if (quote_around)
499756957a04Smrg	    length++;
499856957a04Smrg	  for (s = string; *s != '\0'; s++)
499956957a04Smrg	    {
500056957a04Smrg	      char c = *s;
500156957a04Smrg	      if (c == '"')
500256957a04Smrg		length += backslashes + 1;
500356957a04Smrg	      length++;
500456957a04Smrg	      if (c == '\\')
500556957a04Smrg		backslashes++;
500656957a04Smrg	      else
500756957a04Smrg		backslashes = 0;
500856957a04Smrg	    }
500956957a04Smrg	  if (quote_around)
501056957a04Smrg	    length += backslashes + 1;
501156957a04Smrg
501256957a04Smrg	  quoted_string = XMALLOC (char, length + 1);
501356957a04Smrg
501456957a04Smrg	  p = quoted_string;
501556957a04Smrg	  backslashes = 0;
501656957a04Smrg	  if (quote_around)
501756957a04Smrg	    *p++ = '"';
501856957a04Smrg	  for (s = string; *s != '\0'; s++)
501956957a04Smrg	    {
502056957a04Smrg	      char c = *s;
502156957a04Smrg	      if (c == '"')
502256957a04Smrg		{
502356957a04Smrg		  unsigned int j;
502456957a04Smrg		  for (j = backslashes + 1; j > 0; j--)
502556957a04Smrg		    *p++ = '\\';
502656957a04Smrg		}
502756957a04Smrg	      *p++ = c;
502856957a04Smrg	      if (c == '\\')
502956957a04Smrg		backslashes++;
503056957a04Smrg	      else
503156957a04Smrg		backslashes = 0;
503256957a04Smrg	    }
503356957a04Smrg	  if (quote_around)
503456957a04Smrg	    {
503556957a04Smrg	      unsigned int j;
503656957a04Smrg	      for (j = backslashes; j > 0; j--)
503756957a04Smrg		*p++ = '\\';
503856957a04Smrg	      *p++ = '"';
503956957a04Smrg	    }
504056957a04Smrg	  *p = '\0';
504156957a04Smrg
504256957a04Smrg	  new_argv[i] = quoted_string;
504356957a04Smrg	}
504456957a04Smrg      else
504556957a04Smrg	new_argv[i] = (char *) string;
504656957a04Smrg    }
504756957a04Smrg  new_argv[argc] = NULL;
504856957a04Smrg
504956957a04Smrg  return new_argv;
505056957a04Smrg}
505156957a04SmrgEOF
505256957a04Smrg		;;
505356957a04Smrg	    esac
505456957a04Smrg
505556957a04Smrg            cat <<"EOF"
505656957a04Smrgvoid lt_dump_script (FILE* f)
505756957a04Smrg{
505856957a04SmrgEOF
505956957a04Smrg	    func_emit_wrapper yes |
506056957a04Smrg              $SED -e 's/\([\\"]\)/\\\1/g' \
506156957a04Smrg	           -e 's/^/  fputs ("/' -e 's/$/\\n", f);/'
5062ef981d24Smrg
506356957a04Smrg            cat <<"EOF"
506456957a04Smrg}
506565eef222SmrgEOF
506665eef222Smrg}
506765eef222Smrg# end: func_emit_cwrapperexe_src
5068ef981d24Smrg
506956957a04Smrg# func_win32_import_lib_p ARG
507056957a04Smrg# True if ARG is an import lib, as indicated by $file_magic_cmd
507156957a04Smrgfunc_win32_import_lib_p ()
507256957a04Smrg{
507356957a04Smrg    $opt_debug
507456957a04Smrg    case `eval $file_magic_cmd \"\$1\" 2>/dev/null | $SED -e 10q` in
507556957a04Smrg    *import*) : ;;
507656957a04Smrg    *) false ;;
507756957a04Smrg    esac
507856957a04Smrg}
507956957a04Smrg
508065eef222Smrg# func_mode_link arg...
508165eef222Smrgfunc_mode_link ()
508265eef222Smrg{
508365eef222Smrg    $opt_debug
508465eef222Smrg    case $host in
508565eef222Smrg    *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-cegcc*)
508665eef222Smrg      # It is impossible to link a dll without this setting, and
508765eef222Smrg      # we shouldn't force the makefile maintainer to figure out
508865eef222Smrg      # which system we are compiling for in order to pass an extra
508965eef222Smrg      # flag for every libtool invocation.
509065eef222Smrg      # allow_undefined=no
5091ef981d24Smrg
509265eef222Smrg      # FIXME: Unfortunately, there are problems with the above when trying
509365eef222Smrg      # to make a dll which has undefined symbols, in which case not
509465eef222Smrg      # even a static library is built.  For now, we need to specify
509565eef222Smrg      # -no-undefined on the libtool link line when we can be certain
509665eef222Smrg      # that all symbols are satisfied, otherwise we get a static library.
509765eef222Smrg      allow_undefined=yes
509865eef222Smrg      ;;
509965eef222Smrg    *)
510065eef222Smrg      allow_undefined=yes
510165eef222Smrg      ;;
510265eef222Smrg    esac
510365eef222Smrg    libtool_args=$nonopt
510465eef222Smrg    base_compile="$nonopt $@"
510565eef222Smrg    compile_command=$nonopt
510665eef222Smrg    finalize_command=$nonopt
5107ef981d24Smrg
510865eef222Smrg    compile_rpath=
510965eef222Smrg    finalize_rpath=
511065eef222Smrg    compile_shlibpath=
511165eef222Smrg    finalize_shlibpath=
511265eef222Smrg    convenience=
511365eef222Smrg    old_convenience=
511465eef222Smrg    deplibs=
511565eef222Smrg    old_deplibs=
511665eef222Smrg    compiler_flags=
511765eef222Smrg    linker_flags=
511865eef222Smrg    dllsearchpath=
511965eef222Smrg    lib_search_path=`pwd`
512065eef222Smrg    inst_prefix_dir=
512165eef222Smrg    new_inherited_linker_flags=
5122ef981d24Smrg
512365eef222Smrg    avoid_version=no
512456957a04Smrg    bindir=
512565eef222Smrg    dlfiles=
512665eef222Smrg    dlprefiles=
512765eef222Smrg    dlself=no
512865eef222Smrg    export_dynamic=no
512965eef222Smrg    export_symbols=
513065eef222Smrg    export_symbols_regex=
513165eef222Smrg    generated=
513265eef222Smrg    libobjs=
513365eef222Smrg    ltlibs=
513465eef222Smrg    module=no
513565eef222Smrg    no_install=no
513665eef222Smrg    objs=
513765eef222Smrg    non_pic_objects=
513865eef222Smrg    precious_files_regex=
513965eef222Smrg    prefer_static_libs=no
514065eef222Smrg    preload=no
514165eef222Smrg    prev=
514265eef222Smrg    prevarg=
514365eef222Smrg    release=
514465eef222Smrg    rpath=
514565eef222Smrg    xrpath=
514665eef222Smrg    perm_rpath=
514765eef222Smrg    temp_rpath=
514865eef222Smrg    thread_safe=no
514965eef222Smrg    vinfo=
515065eef222Smrg    vinfo_number=no
515165eef222Smrg    weak_libs=
515265eef222Smrg    single_module="${wl}-single_module"
515365eef222Smrg    func_infer_tag $base_compile
5154ef981d24Smrg
515565eef222Smrg    # We need to know -static, to get the right output filenames.
515665eef222Smrg    for arg
515765eef222Smrg    do
515865eef222Smrg      case $arg in
515965eef222Smrg      -shared)
516065eef222Smrg	test "$build_libtool_libs" != yes && \
516165eef222Smrg	  func_fatal_configuration "can not build a shared library"
516265eef222Smrg	build_old_libs=no
516365eef222Smrg	break
516465eef222Smrg	;;
516565eef222Smrg      -all-static | -static | -static-libtool-libs)
516665eef222Smrg	case $arg in
516765eef222Smrg	-all-static)
516865eef222Smrg	  if test "$build_libtool_libs" = yes && test -z "$link_static_flag"; then
516965eef222Smrg	    func_warning "complete static linking is impossible in this configuration"
5170ef981d24Smrg	  fi
517165eef222Smrg	  if test -n "$link_static_flag"; then
517265eef222Smrg	    dlopen_self=$dlopen_self_static
5173ef981d24Smrg	  fi
517465eef222Smrg	  prefer_static_libs=yes
5175ef981d24Smrg	  ;;
517665eef222Smrg	-static)
517765eef222Smrg	  if test -z "$pic_flag" && test -n "$link_static_flag"; then
517865eef222Smrg	    dlopen_self=$dlopen_self_static
517965eef222Smrg	  fi
518065eef222Smrg	  prefer_static_libs=built
518165eef222Smrg	  ;;
518265eef222Smrg	-static-libtool-libs)
518365eef222Smrg	  if test -z "$pic_flag" && test -n "$link_static_flag"; then
518465eef222Smrg	    dlopen_self=$dlopen_self_static
518565eef222Smrg	  fi
518665eef222Smrg	  prefer_static_libs=yes
5187ef981d24Smrg	  ;;
5188ef981d24Smrg	esac
518965eef222Smrg	build_libtool_libs=no
519065eef222Smrg	build_old_libs=yes
519165eef222Smrg	break
519265eef222Smrg	;;
519365eef222Smrg      esac
519465eef222Smrg    done
5195ef981d24Smrg
519665eef222Smrg    # See if our shared archives depend on static archives.
519765eef222Smrg    test -n "$old_archive_from_new_cmds" && build_old_libs=yes
5198ef981d24Smrg
519965eef222Smrg    # Go through the arguments, transforming them on the way.
520065eef222Smrg    while test "$#" -gt 0; do
520165eef222Smrg      arg="$1"
520265eef222Smrg      shift
520365eef222Smrg      func_quote_for_eval "$arg"
520465eef222Smrg      qarg=$func_quote_for_eval_unquoted_result
520565eef222Smrg      func_append libtool_args " $func_quote_for_eval_result"
5206ef981d24Smrg
520765eef222Smrg      # If the previous option needs an argument, assign it.
520865eef222Smrg      if test -n "$prev"; then
520965eef222Smrg	case $prev in
521065eef222Smrg	output)
521165eef222Smrg	  func_append compile_command " @OUTPUT@"
521265eef222Smrg	  func_append finalize_command " @OUTPUT@"
521365eef222Smrg	  ;;
521465eef222Smrg	esac
5215ef981d24Smrg
521665eef222Smrg	case $prev in
521756957a04Smrg	bindir)
521856957a04Smrg	  bindir="$arg"
521956957a04Smrg	  prev=
522056957a04Smrg	  continue
522156957a04Smrg	  ;;
522265eef222Smrg	dlfiles|dlprefiles)
522365eef222Smrg	  if test "$preload" = no; then
522465eef222Smrg	    # Add the symbol object into the linking commands.
522565eef222Smrg	    func_append compile_command " @SYMFILE@"
522665eef222Smrg	    func_append finalize_command " @SYMFILE@"
522765eef222Smrg	    preload=yes
522865eef222Smrg	  fi
522965eef222Smrg	  case $arg in
523065eef222Smrg	  *.la | *.lo) ;;  # We handle these cases below.
523165eef222Smrg	  force)
523265eef222Smrg	    if test "$dlself" = no; then
523365eef222Smrg	      dlself=needless
523465eef222Smrg	      export_dynamic=yes
523565eef222Smrg	    fi
523665eef222Smrg	    prev=
523765eef222Smrg	    continue
523865eef222Smrg	    ;;
523965eef222Smrg	  self)
524065eef222Smrg	    if test "$prev" = dlprefiles; then
524165eef222Smrg	      dlself=yes
524265eef222Smrg	    elif test "$prev" = dlfiles && test "$dlopen_self" != yes; then
524365eef222Smrg	      dlself=yes
524465eef222Smrg	    else
524565eef222Smrg	      dlself=needless
524665eef222Smrg	      export_dynamic=yes
524765eef222Smrg	    fi
524865eef222Smrg	    prev=
524965eef222Smrg	    continue
5250ef981d24Smrg	    ;;
5251ef981d24Smrg	  *)
525265eef222Smrg	    if test "$prev" = dlfiles; then
5253200d7199Smrg	      func_append dlfiles " $arg"
525465eef222Smrg	    else
5255200d7199Smrg	      func_append dlprefiles " $arg"
525665eef222Smrg	    fi
525765eef222Smrg	    prev=
525865eef222Smrg	    continue
5259ef981d24Smrg	    ;;
5260ef981d24Smrg	  esac
526165eef222Smrg	  ;;
526265eef222Smrg	expsyms)
526365eef222Smrg	  export_symbols="$arg"
526465eef222Smrg	  test -f "$arg" \
526565eef222Smrg	    || func_fatal_error "symbol file \`$arg' does not exist"
526665eef222Smrg	  prev=
526765eef222Smrg	  continue
526865eef222Smrg	  ;;
526965eef222Smrg	expsyms_regex)
527065eef222Smrg	  export_symbols_regex="$arg"
527165eef222Smrg	  prev=
527265eef222Smrg	  continue
527365eef222Smrg	  ;;
527465eef222Smrg	framework)
527565eef222Smrg	  case $host in
527665eef222Smrg	    *-*-darwin*)
527765eef222Smrg	      case "$deplibs " in
527865eef222Smrg		*" $qarg.ltframework "*) ;;
5279200d7199Smrg		*) func_append deplibs " $qarg.ltframework" # this is fixed later
528065eef222Smrg		   ;;
528165eef222Smrg	      esac
528265eef222Smrg	      ;;
528365eef222Smrg	  esac
528465eef222Smrg	  prev=
528565eef222Smrg	  continue
528665eef222Smrg	  ;;
528765eef222Smrg	inst_prefix)
528865eef222Smrg	  inst_prefix_dir="$arg"
528965eef222Smrg	  prev=
529065eef222Smrg	  continue
529165eef222Smrg	  ;;
529265eef222Smrg	objectlist)
529365eef222Smrg	  if test -f "$arg"; then
529465eef222Smrg	    save_arg=$arg
529565eef222Smrg	    moreargs=
529665eef222Smrg	    for fil in `cat "$save_arg"`
529765eef222Smrg	    do
5298200d7199Smrg#	      func_append moreargs " $fil"
529965eef222Smrg	      arg=$fil
530065eef222Smrg	      # A libtool-controlled object.
5301ef981d24Smrg
530265eef222Smrg	      # Check to see that this really is a libtool object.
530365eef222Smrg	      if func_lalib_unsafe_p "$arg"; then
530465eef222Smrg		pic_object=
530565eef222Smrg		non_pic_object=
5306ef981d24Smrg
530765eef222Smrg		# Read the .lo file
530865eef222Smrg		func_source "$arg"
5309ef981d24Smrg
531065eef222Smrg		if test -z "$pic_object" ||
531165eef222Smrg		   test -z "$non_pic_object" ||
531265eef222Smrg		   test "$pic_object" = none &&
531365eef222Smrg		   test "$non_pic_object" = none; then
531465eef222Smrg		  func_fatal_error "cannot find name of object for \`$arg'"
531565eef222Smrg		fi
5316ef981d24Smrg
531765eef222Smrg		# Extract subdirectory from the argument.
531865eef222Smrg		func_dirname "$arg" "/" ""
531965eef222Smrg		xdir="$func_dirname_result"
5320ef981d24Smrg
532165eef222Smrg		if test "$pic_object" != none; then
532265eef222Smrg		  # Prepend the subdirectory the object is found in.
532365eef222Smrg		  pic_object="$xdir$pic_object"
5324ef981d24Smrg
532565eef222Smrg		  if test "$prev" = dlfiles; then
532665eef222Smrg		    if test "$build_libtool_libs" = yes && test "$dlopen_support" = yes; then
5327200d7199Smrg		      func_append dlfiles " $pic_object"
532865eef222Smrg		      prev=
532965eef222Smrg		      continue
533065eef222Smrg		    else
533165eef222Smrg		      # If libtool objects are unsupported, then we need to preload.
533265eef222Smrg		      prev=dlprefiles
533365eef222Smrg		    fi
533465eef222Smrg		  fi
5335ef981d24Smrg
533665eef222Smrg		  # CHECK ME:  I think I busted this.  -Ossama
533765eef222Smrg		  if test "$prev" = dlprefiles; then
533865eef222Smrg		    # Preload the old-style object.
5339200d7199Smrg		    func_append dlprefiles " $pic_object"
534065eef222Smrg		    prev=
534165eef222Smrg		  fi
5342ef981d24Smrg
534365eef222Smrg		  # A PIC object.
534465eef222Smrg		  func_append libobjs " $pic_object"
534565eef222Smrg		  arg="$pic_object"
534665eef222Smrg		fi
5347ef981d24Smrg
534865eef222Smrg		# Non-PIC object.
534965eef222Smrg		if test "$non_pic_object" != none; then
535065eef222Smrg		  # Prepend the subdirectory the object is found in.
535165eef222Smrg		  non_pic_object="$xdir$non_pic_object"
5352ef981d24Smrg
535365eef222Smrg		  # A standard non-PIC object
535465eef222Smrg		  func_append non_pic_objects " $non_pic_object"
535565eef222Smrg		  if test -z "$pic_object" || test "$pic_object" = none ; then
535665eef222Smrg		    arg="$non_pic_object"
535765eef222Smrg		  fi
535865eef222Smrg		else
535965eef222Smrg		  # If the PIC object exists, use it instead.
536065eef222Smrg		  # $xdir was prepended to $pic_object above.
536165eef222Smrg		  non_pic_object="$pic_object"
536265eef222Smrg		  func_append non_pic_objects " $non_pic_object"
536365eef222Smrg		fi
536465eef222Smrg	      else
536565eef222Smrg		# Only an error if not doing a dry-run.
536665eef222Smrg		if $opt_dry_run; then
536765eef222Smrg		  # Extract subdirectory from the argument.
536865eef222Smrg		  func_dirname "$arg" "/" ""
536965eef222Smrg		  xdir="$func_dirname_result"
537065eef222Smrg
537165eef222Smrg		  func_lo2o "$arg"
537265eef222Smrg		  pic_object=$xdir$objdir/$func_lo2o_result
537365eef222Smrg		  non_pic_object=$xdir$func_lo2o_result
537465eef222Smrg		  func_append libobjs " $pic_object"
537565eef222Smrg		  func_append non_pic_objects " $non_pic_object"
537665eef222Smrg	        else
537765eef222Smrg		  func_fatal_error "\`$arg' is not a valid libtool object"
537865eef222Smrg		fi
537965eef222Smrg	      fi
538065eef222Smrg	    done
538165eef222Smrg	  else
538265eef222Smrg	    func_fatal_error "link input file \`$arg' does not exist"
538365eef222Smrg	  fi
538465eef222Smrg	  arg=$save_arg
538565eef222Smrg	  prev=
538665eef222Smrg	  continue
538765eef222Smrg	  ;;
538865eef222Smrg	precious_regex)
538965eef222Smrg	  precious_files_regex="$arg"
539065eef222Smrg	  prev=
539165eef222Smrg	  continue
539265eef222Smrg	  ;;
539365eef222Smrg	release)
539465eef222Smrg	  release="-$arg"
539565eef222Smrg	  prev=
539665eef222Smrg	  continue
539765eef222Smrg	  ;;
539865eef222Smrg	rpath | xrpath)
539965eef222Smrg	  # We need an absolute path.
540065eef222Smrg	  case $arg in
540165eef222Smrg	  [\\/]* | [A-Za-z]:[\\/]*) ;;
540265eef222Smrg	  *)
540365eef222Smrg	    func_fatal_error "only absolute run-paths are allowed"
540465eef222Smrg	    ;;
540565eef222Smrg	  esac
540665eef222Smrg	  if test "$prev" = rpath; then
540765eef222Smrg	    case "$rpath " in
540865eef222Smrg	    *" $arg "*) ;;
5409200d7199Smrg	    *) func_append rpath " $arg" ;;
541065eef222Smrg	    esac
541165eef222Smrg	  else
541265eef222Smrg	    case "$xrpath " in
541365eef222Smrg	    *" $arg "*) ;;
5414200d7199Smrg	    *) func_append xrpath " $arg" ;;
541565eef222Smrg	    esac
541665eef222Smrg	  fi
541765eef222Smrg	  prev=
541865eef222Smrg	  continue
541965eef222Smrg	  ;;
542065eef222Smrg	shrext)
542165eef222Smrg	  shrext_cmds="$arg"
542265eef222Smrg	  prev=
542365eef222Smrg	  continue
542465eef222Smrg	  ;;
542565eef222Smrg	weak)
5426200d7199Smrg	  func_append weak_libs " $arg"
542765eef222Smrg	  prev=
542865eef222Smrg	  continue
542965eef222Smrg	  ;;
543065eef222Smrg	xcclinker)
5431200d7199Smrg	  func_append linker_flags " $qarg"
5432200d7199Smrg	  func_append compiler_flags " $qarg"
543365eef222Smrg	  prev=
543465eef222Smrg	  func_append compile_command " $qarg"
543565eef222Smrg	  func_append finalize_command " $qarg"
543665eef222Smrg	  continue
543765eef222Smrg	  ;;
543865eef222Smrg	xcompiler)
5439200d7199Smrg	  func_append compiler_flags " $qarg"
544065eef222Smrg	  prev=
544165eef222Smrg	  func_append compile_command " $qarg"
544265eef222Smrg	  func_append finalize_command " $qarg"
544365eef222Smrg	  continue
544465eef222Smrg	  ;;
544565eef222Smrg	xlinker)
5446200d7199Smrg	  func_append linker_flags " $qarg"
5447200d7199Smrg	  func_append compiler_flags " $wl$qarg"
544865eef222Smrg	  prev=
544965eef222Smrg	  func_append compile_command " $wl$qarg"
545065eef222Smrg	  func_append finalize_command " $wl$qarg"
545165eef222Smrg	  continue
545265eef222Smrg	  ;;
545365eef222Smrg	*)
545465eef222Smrg	  eval "$prev=\"\$arg\""
545565eef222Smrg	  prev=
545665eef222Smrg	  continue
545765eef222Smrg	  ;;
5458ef981d24Smrg	esac
545965eef222Smrg      fi # test -n "$prev"
5460ef981d24Smrg
546165eef222Smrg      prevarg="$arg"
5462ef981d24Smrg
546365eef222Smrg      case $arg in
546465eef222Smrg      -all-static)
546565eef222Smrg	if test -n "$link_static_flag"; then
546665eef222Smrg	  # See comment for -static flag below, for more details.
546765eef222Smrg	  func_append compile_command " $link_static_flag"
546865eef222Smrg	  func_append finalize_command " $link_static_flag"
546965eef222Smrg	fi
547065eef222Smrg	continue
547165eef222Smrg	;;
5472ef981d24Smrg
547365eef222Smrg      -allow-undefined)
547465eef222Smrg	# FIXME: remove this flag sometime in the future.
547565eef222Smrg	func_fatal_error "\`-allow-undefined' must not be used because it is the default"
547665eef222Smrg	;;
5477ef981d24Smrg
547865eef222Smrg      -avoid-version)
547965eef222Smrg	avoid_version=yes
548065eef222Smrg	continue
548165eef222Smrg	;;
5482ef981d24Smrg
548356957a04Smrg      -bindir)
548456957a04Smrg	prev=bindir
548556957a04Smrg	continue
548656957a04Smrg	;;
548756957a04Smrg
548865eef222Smrg      -dlopen)
548965eef222Smrg	prev=dlfiles
549065eef222Smrg	continue
549165eef222Smrg	;;
5492ef981d24Smrg
549365eef222Smrg      -dlpreopen)
549465eef222Smrg	prev=dlprefiles
549565eef222Smrg	continue
549665eef222Smrg	;;
5497ef981d24Smrg
549865eef222Smrg      -export-dynamic)
549965eef222Smrg	export_dynamic=yes
550065eef222Smrg	continue
550165eef222Smrg	;;
5502ef981d24Smrg
550365eef222Smrg      -export-symbols | -export-symbols-regex)
550465eef222Smrg	if test -n "$export_symbols" || test -n "$export_symbols_regex"; then
550565eef222Smrg	  func_fatal_error "more than one -exported-symbols argument is not allowed"
550665eef222Smrg	fi
550765eef222Smrg	if test "X$arg" = "X-export-symbols"; then
550865eef222Smrg	  prev=expsyms
550965eef222Smrg	else
551065eef222Smrg	  prev=expsyms_regex
551165eef222Smrg	fi
551265eef222Smrg	continue
551365eef222Smrg	;;
5514ef981d24Smrg
551565eef222Smrg      -framework)
551665eef222Smrg	prev=framework
551765eef222Smrg	continue
551865eef222Smrg	;;
5519ef981d24Smrg
552065eef222Smrg      -inst-prefix-dir)
552165eef222Smrg	prev=inst_prefix
552265eef222Smrg	continue
552365eef222Smrg	;;
5524ef981d24Smrg
552565eef222Smrg      # The native IRIX linker understands -LANG:*, -LIST:* and -LNO:*
552665eef222Smrg      # so, if we see these flags be careful not to treat them like -L
552765eef222Smrg      -L[A-Z][A-Z]*:*)
552865eef222Smrg	case $with_gcc/$host in
552965eef222Smrg	no/*-*-irix* | /*-*-irix*)
553065eef222Smrg	  func_append compile_command " $arg"
553165eef222Smrg	  func_append finalize_command " $arg"
553265eef222Smrg	  ;;
553365eef222Smrg	esac
553465eef222Smrg	continue
553565eef222Smrg	;;
5536ef981d24Smrg
553765eef222Smrg      -L*)
5538200d7199Smrg	func_stripname "-L" '' "$arg"
5539200d7199Smrg	if test -z "$func_stripname_result"; then
554065eef222Smrg	  if test "$#" -gt 0; then
554165eef222Smrg	    func_fatal_error "require no space between \`-L' and \`$1'"
554265eef222Smrg	  else
554365eef222Smrg	    func_fatal_error "need path for \`-L' option"
554465eef222Smrg	  fi
554565eef222Smrg	fi
5546200d7199Smrg	func_resolve_sysroot "$func_stripname_result"
5547200d7199Smrg	dir=$func_resolve_sysroot_result
554865eef222Smrg	# We need an absolute path.
554965eef222Smrg	case $dir in
555065eef222Smrg	[\\/]* | [A-Za-z]:[\\/]*) ;;
555165eef222Smrg	*)
555265eef222Smrg	  absdir=`cd "$dir" && pwd`
555365eef222Smrg	  test -z "$absdir" && \
555465eef222Smrg	    func_fatal_error "cannot determine absolute directory name of \`$dir'"
555565eef222Smrg	  dir="$absdir"
555665eef222Smrg	  ;;
555765eef222Smrg	esac
555865eef222Smrg	case "$deplibs " in
5559200d7199Smrg	*" -L$dir "* | *" $arg "*)
5560200d7199Smrg	  # Will only happen for absolute or sysroot arguments
5561200d7199Smrg	  ;;
556265eef222Smrg	*)
5563200d7199Smrg	  # Preserve sysroot, but never include relative directories
5564200d7199Smrg	  case $dir in
5565200d7199Smrg	    [\\/]* | [A-Za-z]:[\\/]* | =*) func_append deplibs " $arg" ;;
5566200d7199Smrg	    *) func_append deplibs " -L$dir" ;;
5567200d7199Smrg	  esac
5568200d7199Smrg	  func_append lib_search_path " $dir"
556965eef222Smrg	  ;;
557065eef222Smrg	esac
557165eef222Smrg	case $host in
557265eef222Smrg	*-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-cegcc*)
557356957a04Smrg	  testbindir=`$ECHO "$dir" | $SED 's*/lib$*/bin*'`
557465eef222Smrg	  case :$dllsearchpath: in
557565eef222Smrg	  *":$dir:"*) ;;
557665eef222Smrg	  ::) dllsearchpath=$dir;;
5577200d7199Smrg	  *) func_append dllsearchpath ":$dir";;
557865eef222Smrg	  esac
557965eef222Smrg	  case :$dllsearchpath: in
558065eef222Smrg	  *":$testbindir:"*) ;;
558165eef222Smrg	  ::) dllsearchpath=$testbindir;;
5582200d7199Smrg	  *) func_append dllsearchpath ":$testbindir";;
558365eef222Smrg	  esac
558465eef222Smrg	  ;;
558565eef222Smrg	esac
558665eef222Smrg	continue
558765eef222Smrg	;;
5588ef981d24Smrg
558965eef222Smrg      -l*)
559065eef222Smrg	if test "X$arg" = "X-lc" || test "X$arg" = "X-lm"; then
559165eef222Smrg	  case $host in
559256957a04Smrg	  *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-beos* | *-cegcc* | *-*-haiku*)
559365eef222Smrg	    # These systems don't actually have a C or math library (as such)
559465eef222Smrg	    continue
559565eef222Smrg	    ;;
559665eef222Smrg	  *-*-os2*)
559765eef222Smrg	    # These systems don't actually have a C library (as such)
559865eef222Smrg	    test "X$arg" = "X-lc" && continue
559965eef222Smrg	    ;;
560065eef222Smrg	  *-*-openbsd* | *-*-freebsd* | *-*-dragonfly*)
560165eef222Smrg	    # Do not include libc due to us having libc/libc_r.
560265eef222Smrg	    test "X$arg" = "X-lc" && continue
560365eef222Smrg	    ;;
560465eef222Smrg	  *-*-rhapsody* | *-*-darwin1.[012])
560565eef222Smrg	    # Rhapsody C and math libraries are in the System framework
5606200d7199Smrg	    func_append deplibs " System.ltframework"
560765eef222Smrg	    continue
560865eef222Smrg	    ;;
560965eef222Smrg	  *-*-sco3.2v5* | *-*-sco5v6*)
561065eef222Smrg	    # Causes problems with __ctype
561165eef222Smrg	    test "X$arg" = "X-lc" && continue
561265eef222Smrg	    ;;
561365eef222Smrg	  *-*-sysv4.2uw2* | *-*-sysv5* | *-*-unixware* | *-*-OpenUNIX*)
561465eef222Smrg	    # Compiler inserts libc in the correct place for threads to work
561565eef222Smrg	    test "X$arg" = "X-lc" && continue
561665eef222Smrg	    ;;
561765eef222Smrg	  esac
561865eef222Smrg	elif test "X$arg" = "X-lc_r"; then
561965eef222Smrg	 case $host in
562065eef222Smrg	 *-*-openbsd* | *-*-freebsd* | *-*-dragonfly*)
562165eef222Smrg	   # Do not include libc_r directly, use -pthread flag.
562265eef222Smrg	   continue
562365eef222Smrg	   ;;
562465eef222Smrg	 esac
562565eef222Smrg	fi
5626200d7199Smrg	func_append deplibs " $arg"
562765eef222Smrg	continue
562865eef222Smrg	;;
5629ef981d24Smrg
563065eef222Smrg      -module)
563165eef222Smrg	module=yes
563265eef222Smrg	continue
563365eef222Smrg	;;
5634ef981d24Smrg
563565eef222Smrg      # Tru64 UNIX uses -model [arg] to determine the layout of C++
563665eef222Smrg      # classes, name mangling, and exception handling.
563765eef222Smrg      # Darwin uses the -arch flag to determine output architecture.
5638200d7199Smrg      -model|-arch|-isysroot|--sysroot)
5639200d7199Smrg	func_append compiler_flags " $arg"
564065eef222Smrg	func_append compile_command " $arg"
564165eef222Smrg	func_append finalize_command " $arg"
564265eef222Smrg	prev=xcompiler
564365eef222Smrg	continue
564465eef222Smrg	;;
5645ef981d24Smrg
564665eef222Smrg      -mt|-mthreads|-kthread|-Kthread|-pthread|-pthreads|--thread-safe|-threads)
5647200d7199Smrg	func_append compiler_flags " $arg"
564865eef222Smrg	func_append compile_command " $arg"
564965eef222Smrg	func_append finalize_command " $arg"
565065eef222Smrg	case "$new_inherited_linker_flags " in
565165eef222Smrg	    *" $arg "*) ;;
5652200d7199Smrg	    * ) func_append new_inherited_linker_flags " $arg" ;;
565365eef222Smrg	esac
565465eef222Smrg	continue
565565eef222Smrg	;;
5656ef981d24Smrg
565765eef222Smrg      -multi_module)
565865eef222Smrg	single_module="${wl}-multi_module"
565965eef222Smrg	continue
566065eef222Smrg	;;
5661ef981d24Smrg
566265eef222Smrg      -no-fast-install)
566365eef222Smrg	fast_install=no
566465eef222Smrg	continue
566565eef222Smrg	;;
5666ef981d24Smrg
566765eef222Smrg      -no-install)
566865eef222Smrg	case $host in
566965eef222Smrg	*-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-*-darwin* | *-cegcc*)
567065eef222Smrg	  # The PATH hackery in wrapper scripts is required on Windows
567165eef222Smrg	  # and Darwin in order for the loader to find any dlls it needs.
567265eef222Smrg	  func_warning "\`-no-install' is ignored for $host"
567365eef222Smrg	  func_warning "assuming \`-no-fast-install' instead"
567465eef222Smrg	  fast_install=no
567565eef222Smrg	  ;;
567665eef222Smrg	*) no_install=yes ;;
567765eef222Smrg	esac
567865eef222Smrg	continue
567965eef222Smrg	;;
5680ef981d24Smrg
568165eef222Smrg      -no-undefined)
568265eef222Smrg	allow_undefined=no
568365eef222Smrg	continue
568465eef222Smrg	;;
5685ef981d24Smrg
568665eef222Smrg      -objectlist)
568765eef222Smrg	prev=objectlist
568865eef222Smrg	continue
568965eef222Smrg	;;
5690ef981d24Smrg
569165eef222Smrg      -o) prev=output ;;
5692ef981d24Smrg
569365eef222Smrg      -precious-files-regex)
569465eef222Smrg	prev=precious_regex
569565eef222Smrg	continue
569665eef222Smrg	;;
5697ef981d24Smrg
569865eef222Smrg      -release)
569965eef222Smrg	prev=release
570065eef222Smrg	continue
570165eef222Smrg	;;
5702ef981d24Smrg
570365eef222Smrg      -rpath)
570465eef222Smrg	prev=rpath
570565eef222Smrg	continue
570665eef222Smrg	;;
5707ef981d24Smrg
570865eef222Smrg      -R)
570965eef222Smrg	prev=xrpath
571065eef222Smrg	continue
571165eef222Smrg	;;
5712ef981d24Smrg
571365eef222Smrg      -R*)
571465eef222Smrg	func_stripname '-R' '' "$arg"
571565eef222Smrg	dir=$func_stripname_result
571665eef222Smrg	# We need an absolute path.
571765eef222Smrg	case $dir in
571865eef222Smrg	[\\/]* | [A-Za-z]:[\\/]*) ;;
5719200d7199Smrg	=*)
5720200d7199Smrg	  func_stripname '=' '' "$dir"
5721200d7199Smrg	  dir=$lt_sysroot$func_stripname_result
5722200d7199Smrg	  ;;
572365eef222Smrg	*)
572465eef222Smrg	  func_fatal_error "only absolute run-paths are allowed"
572565eef222Smrg	  ;;
572665eef222Smrg	esac
572765eef222Smrg	case "$xrpath " in
572865eef222Smrg	*" $dir "*) ;;
5729200d7199Smrg	*) func_append xrpath " $dir" ;;
573065eef222Smrg	esac
573165eef222Smrg	continue
573265eef222Smrg	;;
5733ef981d24Smrg
573465eef222Smrg      -shared)
573565eef222Smrg	# The effects of -shared are defined in a previous loop.
573665eef222Smrg	continue
573765eef222Smrg	;;
5738ef981d24Smrg
573965eef222Smrg      -shrext)
574065eef222Smrg	prev=shrext
574165eef222Smrg	continue
574265eef222Smrg	;;
5743ef981d24Smrg
574465eef222Smrg      -static | -static-libtool-libs)
574565eef222Smrg	# The effects of -static are defined in a previous loop.
574665eef222Smrg	# We used to do the same as -all-static on platforms that
574765eef222Smrg	# didn't have a PIC flag, but the assumption that the effects
574865eef222Smrg	# would be equivalent was wrong.  It would break on at least
574965eef222Smrg	# Digital Unix and AIX.
575065eef222Smrg	continue
575165eef222Smrg	;;
5752ef981d24Smrg
575365eef222Smrg      -thread-safe)
575465eef222Smrg	thread_safe=yes
575565eef222Smrg	continue
575665eef222Smrg	;;
5757ef981d24Smrg
575865eef222Smrg      -version-info)
575965eef222Smrg	prev=vinfo
576065eef222Smrg	continue
576165eef222Smrg	;;
5762ef981d24Smrg
576365eef222Smrg      -version-number)
576465eef222Smrg	prev=vinfo
576565eef222Smrg	vinfo_number=yes
576665eef222Smrg	continue
576765eef222Smrg	;;
5768ef981d24Smrg
576965eef222Smrg      -weak)
577065eef222Smrg        prev=weak
577165eef222Smrg	continue
577265eef222Smrg	;;
5773ef981d24Smrg
577465eef222Smrg      -Wc,*)
577565eef222Smrg	func_stripname '-Wc,' '' "$arg"
577665eef222Smrg	args=$func_stripname_result
577765eef222Smrg	arg=
577865eef222Smrg	save_ifs="$IFS"; IFS=','
577965eef222Smrg	for flag in $args; do
578065eef222Smrg	  IFS="$save_ifs"
578165eef222Smrg          func_quote_for_eval "$flag"
5782200d7199Smrg	  func_append arg " $func_quote_for_eval_result"
5783200d7199Smrg	  func_append compiler_flags " $func_quote_for_eval_result"
578465eef222Smrg	done
578565eef222Smrg	IFS="$save_ifs"
578665eef222Smrg	func_stripname ' ' '' "$arg"
578765eef222Smrg	arg=$func_stripname_result
578865eef222Smrg	;;
5789ef981d24Smrg
579065eef222Smrg      -Wl,*)
579165eef222Smrg	func_stripname '-Wl,' '' "$arg"
579265eef222Smrg	args=$func_stripname_result
579365eef222Smrg	arg=
579465eef222Smrg	save_ifs="$IFS"; IFS=','
579565eef222Smrg	for flag in $args; do
579665eef222Smrg	  IFS="$save_ifs"
579765eef222Smrg          func_quote_for_eval "$flag"
5798200d7199Smrg	  func_append arg " $wl$func_quote_for_eval_result"
5799200d7199Smrg	  func_append compiler_flags " $wl$func_quote_for_eval_result"
5800200d7199Smrg	  func_append linker_flags " $func_quote_for_eval_result"
580165eef222Smrg	done
580265eef222Smrg	IFS="$save_ifs"
580365eef222Smrg	func_stripname ' ' '' "$arg"
580465eef222Smrg	arg=$func_stripname_result
580565eef222Smrg	;;
5806ef981d24Smrg
580765eef222Smrg      -Xcompiler)
580865eef222Smrg	prev=xcompiler
580965eef222Smrg	continue
581065eef222Smrg	;;
5811ef981d24Smrg
581265eef222Smrg      -Xlinker)
581365eef222Smrg	prev=xlinker
581465eef222Smrg	continue
581565eef222Smrg	;;
5816ef981d24Smrg
581765eef222Smrg      -XCClinker)
581865eef222Smrg	prev=xcclinker
581965eef222Smrg	continue
582065eef222Smrg	;;
5821ef981d24Smrg
582265eef222Smrg      # -msg_* for osf cc
582365eef222Smrg      -msg_*)
582465eef222Smrg	func_quote_for_eval "$arg"
582565eef222Smrg	arg="$func_quote_for_eval_result"
582665eef222Smrg	;;
5827ef981d24Smrg
582856957a04Smrg      # Flags to be passed through unchanged, with rationale:
582956957a04Smrg      # -64, -mips[0-9]      enable 64-bit mode for the SGI compiler
583056957a04Smrg      # -r[0-9][0-9]*        specify processor for the SGI compiler
583156957a04Smrg      # -xarch=*, -xtarget=* enable 64-bit mode for the Sun compiler
583256957a04Smrg      # +DA*, +DD*           enable 64-bit mode for the HP compiler
583356957a04Smrg      # -q*                  compiler args for the IBM compiler
583456957a04Smrg      # -m*, -t[45]*, -txscale* architecture-specific flags for GCC
583556957a04Smrg      # -F/path              path to uninstalled frameworks, gcc on darwin
583656957a04Smrg      # -p, -pg, --coverage, -fprofile-*  profiling flags for GCC
583756957a04Smrg      # @file                GCC response files
583856957a04Smrg      # -tp=*                Portland pgcc target processor selection
5839200d7199Smrg      # --sysroot=*          for sysroot support
5840200d7199Smrg      # -O*, -flto*, -fwhopr*, -fuse-linker-plugin GCC link-time optimization
584165eef222Smrg      -64|-mips[0-9]|-r[0-9][0-9]*|-xarch=*|-xtarget=*|+DA*|+DD*|-q*|-m*| \
5842200d7199Smrg      -t[45]*|-txscale*|-p|-pg|--coverage|-fprofile-*|-F*|@*|-tp=*|--sysroot=*| \
5843200d7199Smrg      -O*|-flto*|-fwhopr*|-fuse-linker-plugin)
584465eef222Smrg        func_quote_for_eval "$arg"
584565eef222Smrg	arg="$func_quote_for_eval_result"
584665eef222Smrg        func_append compile_command " $arg"
584765eef222Smrg        func_append finalize_command " $arg"
5848200d7199Smrg        func_append compiler_flags " $arg"
584965eef222Smrg        continue
585065eef222Smrg        ;;
5851ef981d24Smrg
585265eef222Smrg      # Some other compiler flag.
585365eef222Smrg      -* | +*)
585465eef222Smrg        func_quote_for_eval "$arg"
585565eef222Smrg	arg="$func_quote_for_eval_result"
585665eef222Smrg	;;
5857ef981d24Smrg
585865eef222Smrg      *.$objext)
585965eef222Smrg	# A standard object.
5860200d7199Smrg	func_append objs " $arg"
586165eef222Smrg	;;
586265eef222Smrg
586365eef222Smrg      *.lo)
586465eef222Smrg	# A libtool-controlled object.
586565eef222Smrg
586665eef222Smrg	# Check to see that this really is a libtool object.
586765eef222Smrg	if func_lalib_unsafe_p "$arg"; then
586865eef222Smrg	  pic_object=
586965eef222Smrg	  non_pic_object=
587065eef222Smrg
587165eef222Smrg	  # Read the .lo file
587265eef222Smrg	  func_source "$arg"
587365eef222Smrg
587465eef222Smrg	  if test -z "$pic_object" ||
587565eef222Smrg	     test -z "$non_pic_object" ||
587665eef222Smrg	     test "$pic_object" = none &&
587765eef222Smrg	     test "$non_pic_object" = none; then
587865eef222Smrg	    func_fatal_error "cannot find name of object for \`$arg'"
587965eef222Smrg	  fi
588065eef222Smrg
588165eef222Smrg	  # Extract subdirectory from the argument.
588265eef222Smrg	  func_dirname "$arg" "/" ""
588365eef222Smrg	  xdir="$func_dirname_result"
588465eef222Smrg
588565eef222Smrg	  if test "$pic_object" != none; then
588665eef222Smrg	    # Prepend the subdirectory the object is found in.
588765eef222Smrg	    pic_object="$xdir$pic_object"
588865eef222Smrg
588965eef222Smrg	    if test "$prev" = dlfiles; then
589065eef222Smrg	      if test "$build_libtool_libs" = yes && test "$dlopen_support" = yes; then
5891200d7199Smrg		func_append dlfiles " $pic_object"
589265eef222Smrg		prev=
589365eef222Smrg		continue
589465eef222Smrg	      else
589565eef222Smrg		# If libtool objects are unsupported, then we need to preload.
589665eef222Smrg		prev=dlprefiles
589765eef222Smrg	      fi
589865eef222Smrg	    fi
589965eef222Smrg
590065eef222Smrg	    # CHECK ME:  I think I busted this.  -Ossama
590165eef222Smrg	    if test "$prev" = dlprefiles; then
590265eef222Smrg	      # Preload the old-style object.
5903200d7199Smrg	      func_append dlprefiles " $pic_object"
590465eef222Smrg	      prev=
590565eef222Smrg	    fi
590665eef222Smrg
590765eef222Smrg	    # A PIC object.
590865eef222Smrg	    func_append libobjs " $pic_object"
590965eef222Smrg	    arg="$pic_object"
591065eef222Smrg	  fi
591165eef222Smrg
591265eef222Smrg	  # Non-PIC object.
591365eef222Smrg	  if test "$non_pic_object" != none; then
591465eef222Smrg	    # Prepend the subdirectory the object is found in.
591565eef222Smrg	    non_pic_object="$xdir$non_pic_object"
591665eef222Smrg
591765eef222Smrg	    # A standard non-PIC object
591865eef222Smrg	    func_append non_pic_objects " $non_pic_object"
591965eef222Smrg	    if test -z "$pic_object" || test "$pic_object" = none ; then
592065eef222Smrg	      arg="$non_pic_object"
592165eef222Smrg	    fi
592265eef222Smrg	  else
592365eef222Smrg	    # If the PIC object exists, use it instead.
592465eef222Smrg	    # $xdir was prepended to $pic_object above.
592565eef222Smrg	    non_pic_object="$pic_object"
592665eef222Smrg	    func_append non_pic_objects " $non_pic_object"
592765eef222Smrg	  fi
592865eef222Smrg	else
592965eef222Smrg	  # Only an error if not doing a dry-run.
593065eef222Smrg	  if $opt_dry_run; then
593165eef222Smrg	    # Extract subdirectory from the argument.
593265eef222Smrg	    func_dirname "$arg" "/" ""
593365eef222Smrg	    xdir="$func_dirname_result"
593465eef222Smrg
593565eef222Smrg	    func_lo2o "$arg"
593665eef222Smrg	    pic_object=$xdir$objdir/$func_lo2o_result
593765eef222Smrg	    non_pic_object=$xdir$func_lo2o_result
593865eef222Smrg	    func_append libobjs " $pic_object"
593965eef222Smrg	    func_append non_pic_objects " $non_pic_object"
594065eef222Smrg	  else
594165eef222Smrg	    func_fatal_error "\`$arg' is not a valid libtool object"
594265eef222Smrg	  fi
594365eef222Smrg	fi
594465eef222Smrg	;;
594565eef222Smrg
594665eef222Smrg      *.$libext)
594765eef222Smrg	# An archive.
5948200d7199Smrg	func_append deplibs " $arg"
5949200d7199Smrg	func_append old_deplibs " $arg"
595065eef222Smrg	continue
595165eef222Smrg	;;
595265eef222Smrg
595365eef222Smrg      *.la)
595465eef222Smrg	# A libtool-controlled library.
595565eef222Smrg
5956200d7199Smrg	func_resolve_sysroot "$arg"
595765eef222Smrg	if test "$prev" = dlfiles; then
595865eef222Smrg	  # This library was specified with -dlopen.
5959200d7199Smrg	  func_append dlfiles " $func_resolve_sysroot_result"
596065eef222Smrg	  prev=
596165eef222Smrg	elif test "$prev" = dlprefiles; then
596265eef222Smrg	  # The library was specified with -dlpreopen.
5963200d7199Smrg	  func_append dlprefiles " $func_resolve_sysroot_result"
596465eef222Smrg	  prev=
596565eef222Smrg	else
5966200d7199Smrg	  func_append deplibs " $func_resolve_sysroot_result"
596765eef222Smrg	fi
596865eef222Smrg	continue
596965eef222Smrg	;;
597065eef222Smrg
597165eef222Smrg      # Some other compiler argument.
597265eef222Smrg      *)
597365eef222Smrg	# Unknown arguments in both finalize_command and compile_command need
597465eef222Smrg	# to be aesthetically quoted because they are evaled later.
597565eef222Smrg	func_quote_for_eval "$arg"
597665eef222Smrg	arg="$func_quote_for_eval_result"
597765eef222Smrg	;;
597865eef222Smrg      esac # arg
597965eef222Smrg
598065eef222Smrg      # Now actually substitute the argument into the commands.
598165eef222Smrg      if test -n "$arg"; then
598265eef222Smrg	func_append compile_command " $arg"
598365eef222Smrg	func_append finalize_command " $arg"
598465eef222Smrg      fi
598565eef222Smrg    done # argument parsing loop
598665eef222Smrg
598765eef222Smrg    test -n "$prev" && \
598865eef222Smrg      func_fatal_help "the \`$prevarg' option requires an argument"
598965eef222Smrg
599065eef222Smrg    if test "$export_dynamic" = yes && test -n "$export_dynamic_flag_spec"; then
599165eef222Smrg      eval arg=\"$export_dynamic_flag_spec\"
599265eef222Smrg      func_append compile_command " $arg"
599365eef222Smrg      func_append finalize_command " $arg"
599465eef222Smrg    fi
599565eef222Smrg
599665eef222Smrg    oldlibs=
599765eef222Smrg    # calculate the name of the file, without its directory
599865eef222Smrg    func_basename "$output"
599965eef222Smrg    outputname="$func_basename_result"
600065eef222Smrg    libobjs_save="$libobjs"
600165eef222Smrg
600265eef222Smrg    if test -n "$shlibpath_var"; then
600365eef222Smrg      # get the directories listed in $shlibpath_var
600456957a04Smrg      eval shlib_search_path=\`\$ECHO \"\${$shlibpath_var}\" \| \$SED \'s/:/ /g\'\`
6005ef981d24Smrg    else
600665eef222Smrg      shlib_search_path=
6007ef981d24Smrg    fi
600865eef222Smrg    eval sys_lib_search_path=\"$sys_lib_search_path_spec\"
600965eef222Smrg    eval sys_lib_dlsearch_path=\"$sys_lib_dlsearch_path_spec\"
6010ef981d24Smrg
601165eef222Smrg    func_dirname "$output" "/" ""
601265eef222Smrg    output_objdir="$func_dirname_result$objdir"
6013200d7199Smrg    func_to_tool_file "$output_objdir/"
6014200d7199Smrg    tool_output_objdir=$func_to_tool_file_result
601565eef222Smrg    # Create the object directory.
601665eef222Smrg    func_mkdir_p "$output_objdir"
6017ef981d24Smrg
601865eef222Smrg    # Determine the type of output
601965eef222Smrg    case $output in
602065eef222Smrg    "")
602165eef222Smrg      func_fatal_help "you must specify an output file"
602265eef222Smrg      ;;
602365eef222Smrg    *.$libext) linkmode=oldlib ;;
602465eef222Smrg    *.lo | *.$objext) linkmode=obj ;;
602565eef222Smrg    *.la) linkmode=lib ;;
602665eef222Smrg    *) linkmode=prog ;; # Anything else should be a program.
602765eef222Smrg    esac
602865eef222Smrg
602965eef222Smrg    specialdeplibs=
603065eef222Smrg
603165eef222Smrg    libs=
603265eef222Smrg    # Find all interdependent deplibs by searching for libraries
603365eef222Smrg    # that are linked more than once (e.g. -la -lb -la)
603465eef222Smrg    for deplib in $deplibs; do
6035200d7199Smrg      if $opt_preserve_dup_deps ; then
603665eef222Smrg	case "$libs " in
6037200d7199Smrg	*" $deplib "*) func_append specialdeplibs " $deplib" ;;
603865eef222Smrg	esac
603965eef222Smrg      fi
6040200d7199Smrg      func_append libs " $deplib"
604165eef222Smrg    done
604265eef222Smrg
604365eef222Smrg    if test "$linkmode" = lib; then
604465eef222Smrg      libs="$predeps $libs $compiler_lib_search_path $postdeps"
604565eef222Smrg
604665eef222Smrg      # Compute libraries that are listed more than once in $predeps
604765eef222Smrg      # $postdeps and mark them as special (i.e., whose duplicates are
604865eef222Smrg      # not to be eliminated).
604965eef222Smrg      pre_post_deps=
605065eef222Smrg      if $opt_duplicate_compiler_generated_deps; then
605165eef222Smrg	for pre_post_dep in $predeps $postdeps; do
605265eef222Smrg	  case "$pre_post_deps " in
6053200d7199Smrg	  *" $pre_post_dep "*) func_append specialdeplibs " $pre_post_deps" ;;
605465eef222Smrg	  esac
6055200d7199Smrg	  func_append pre_post_deps " $pre_post_dep"
605665eef222Smrg	done
605765eef222Smrg      fi
605865eef222Smrg      pre_post_deps=
605965eef222Smrg    fi
606065eef222Smrg
606165eef222Smrg    deplibs=
606265eef222Smrg    newdependency_libs=
606365eef222Smrg    newlib_search_path=
606465eef222Smrg    need_relink=no # whether we're linking any uninstalled libtool libraries
606565eef222Smrg    notinst_deplibs= # not-installed libtool libraries
606665eef222Smrg    notinst_path= # paths that contain not-installed libtool libraries
606765eef222Smrg
606865eef222Smrg    case $linkmode in
606965eef222Smrg    lib)
607065eef222Smrg	passes="conv dlpreopen link"
607165eef222Smrg	for file in $dlfiles $dlprefiles; do
607265eef222Smrg	  case $file in
607365eef222Smrg	  *.la) ;;
607465eef222Smrg	  *)
607565eef222Smrg	    func_fatal_help "libraries can \`-dlopen' only libtool libraries: $file"
607665eef222Smrg	    ;;
607765eef222Smrg	  esac
607865eef222Smrg	done
607965eef222Smrg	;;
608065eef222Smrg    prog)
608165eef222Smrg	compile_deplibs=
608265eef222Smrg	finalize_deplibs=
608365eef222Smrg	alldeplibs=no
608465eef222Smrg	newdlfiles=
608565eef222Smrg	newdlprefiles=
608665eef222Smrg	passes="conv scan dlopen dlpreopen link"
608765eef222Smrg	;;
608865eef222Smrg    *)  passes="conv"
608965eef222Smrg	;;
609065eef222Smrg    esac
609165eef222Smrg
609265eef222Smrg    for pass in $passes; do
609365eef222Smrg      # The preopen pass in lib mode reverses $deplibs; put it back here
609465eef222Smrg      # so that -L comes before libs that need it for instance...
609565eef222Smrg      if test "$linkmode,$pass" = "lib,link"; then
609665eef222Smrg	## FIXME: Find the place where the list is rebuilt in the wrong
609765eef222Smrg	##        order, and fix it there properly
609865eef222Smrg        tmp_deplibs=
609965eef222Smrg	for deplib in $deplibs; do
610065eef222Smrg	  tmp_deplibs="$deplib $tmp_deplibs"
610165eef222Smrg	done
610265eef222Smrg	deplibs="$tmp_deplibs"
610365eef222Smrg      fi
610465eef222Smrg
610565eef222Smrg      if test "$linkmode,$pass" = "lib,link" ||
610665eef222Smrg	 test "$linkmode,$pass" = "prog,scan"; then
610765eef222Smrg	libs="$deplibs"
610865eef222Smrg	deplibs=
610965eef222Smrg      fi
611065eef222Smrg      if test "$linkmode" = prog; then
611165eef222Smrg	case $pass in
611265eef222Smrg	dlopen) libs="$dlfiles" ;;
611365eef222Smrg	dlpreopen) libs="$dlprefiles" ;;
611465eef222Smrg	link) libs="$deplibs %DEPLIBS% $dependency_libs" ;;
611565eef222Smrg	esac
611665eef222Smrg      fi
611765eef222Smrg      if test "$linkmode,$pass" = "lib,dlpreopen"; then
611865eef222Smrg	# Collect and forward deplibs of preopened libtool libs
611965eef222Smrg	for lib in $dlprefiles; do
612065eef222Smrg	  # Ignore non-libtool-libs
612165eef222Smrg	  dependency_libs=
6122200d7199Smrg	  func_resolve_sysroot "$lib"
612365eef222Smrg	  case $lib in
6124200d7199Smrg	  *.la)	func_source "$func_resolve_sysroot_result" ;;
612565eef222Smrg	  esac
612665eef222Smrg
612765eef222Smrg	  # Collect preopened libtool deplibs, except any this library
612865eef222Smrg	  # has declared as weak libs
612965eef222Smrg	  for deplib in $dependency_libs; do
613056957a04Smrg	    func_basename "$deplib"
613156957a04Smrg            deplib_base=$func_basename_result
613265eef222Smrg	    case " $weak_libs " in
613365eef222Smrg	    *" $deplib_base "*) ;;
6134200d7199Smrg	    *) func_append deplibs " $deplib" ;;
613565eef222Smrg	    esac
613665eef222Smrg	  done
613765eef222Smrg	done
613865eef222Smrg	libs="$dlprefiles"
613965eef222Smrg      fi
614065eef222Smrg      if test "$pass" = dlopen; then
614165eef222Smrg	# Collect dlpreopened libraries
614265eef222Smrg	save_deplibs="$deplibs"
614365eef222Smrg	deplibs=
614465eef222Smrg      fi
614565eef222Smrg
614665eef222Smrg      for deplib in $libs; do
614765eef222Smrg	lib=
614865eef222Smrg	found=no
614965eef222Smrg	case $deplib in
615065eef222Smrg	-mt|-mthreads|-kthread|-Kthread|-pthread|-pthreads|--thread-safe|-threads)
615165eef222Smrg	  if test "$linkmode,$pass" = "prog,link"; then
615265eef222Smrg	    compile_deplibs="$deplib $compile_deplibs"
615365eef222Smrg	    finalize_deplibs="$deplib $finalize_deplibs"
615465eef222Smrg	  else
6155200d7199Smrg	    func_append compiler_flags " $deplib"
615665eef222Smrg	    if test "$linkmode" = lib ; then
615765eef222Smrg		case "$new_inherited_linker_flags " in
615865eef222Smrg		    *" $deplib "*) ;;
6159200d7199Smrg		    * ) func_append new_inherited_linker_flags " $deplib" ;;
616065eef222Smrg		esac
616165eef222Smrg	    fi
616265eef222Smrg	  fi
616365eef222Smrg	  continue
616465eef222Smrg	  ;;
616565eef222Smrg	-l*)
616665eef222Smrg	  if test "$linkmode" != lib && test "$linkmode" != prog; then
616765eef222Smrg	    func_warning "\`-l' is ignored for archives/objects"
616865eef222Smrg	    continue
616965eef222Smrg	  fi
617065eef222Smrg	  func_stripname '-l' '' "$deplib"
617165eef222Smrg	  name=$func_stripname_result
617265eef222Smrg	  if test "$linkmode" = lib; then
617365eef222Smrg	    searchdirs="$newlib_search_path $lib_search_path $compiler_lib_search_dirs $sys_lib_search_path $shlib_search_path"
617465eef222Smrg	  else
617565eef222Smrg	    searchdirs="$newlib_search_path $lib_search_path $sys_lib_search_path $shlib_search_path"
617665eef222Smrg	  fi
617765eef222Smrg	  for searchdir in $searchdirs; do
617865eef222Smrg	    for search_ext in .la $std_shrext .so .a; do
617965eef222Smrg	      # Search the libtool library
618065eef222Smrg	      lib="$searchdir/lib${name}${search_ext}"
618165eef222Smrg	      if test -f "$lib"; then
618265eef222Smrg		if test "$search_ext" = ".la"; then
618365eef222Smrg		  found=yes
618465eef222Smrg		else
618565eef222Smrg		  found=no
618665eef222Smrg		fi
618765eef222Smrg		break 2
618865eef222Smrg	      fi
618965eef222Smrg	    done
619065eef222Smrg	  done
619165eef222Smrg	  if test "$found" != yes; then
619265eef222Smrg	    # deplib doesn't seem to be a libtool library
619365eef222Smrg	    if test "$linkmode,$pass" = "prog,link"; then
619465eef222Smrg	      compile_deplibs="$deplib $compile_deplibs"
619565eef222Smrg	      finalize_deplibs="$deplib $finalize_deplibs"
619665eef222Smrg	    else
619765eef222Smrg	      deplibs="$deplib $deplibs"
619865eef222Smrg	      test "$linkmode" = lib && newdependency_libs="$deplib $newdependency_libs"
619965eef222Smrg	    fi
620065eef222Smrg	    continue
620165eef222Smrg	  else # deplib is a libtool library
620265eef222Smrg	    # If $allow_libtool_libs_with_static_runtimes && $deplib is a stdlib,
620365eef222Smrg	    # We need to do some special things here, and not later.
620465eef222Smrg	    if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then
620565eef222Smrg	      case " $predeps $postdeps " in
620665eef222Smrg	      *" $deplib "*)
620765eef222Smrg		if func_lalib_p "$lib"; then
620865eef222Smrg		  library_names=
620965eef222Smrg		  old_library=
621065eef222Smrg		  func_source "$lib"
621165eef222Smrg		  for l in $old_library $library_names; do
621265eef222Smrg		    ll="$l"
621365eef222Smrg		  done
621465eef222Smrg		  if test "X$ll" = "X$old_library" ; then # only static version available
621565eef222Smrg		    found=no
621665eef222Smrg		    func_dirname "$lib" "" "."
621765eef222Smrg		    ladir="$func_dirname_result"
621865eef222Smrg		    lib=$ladir/$old_library
621965eef222Smrg		    if test "$linkmode,$pass" = "prog,link"; then
622065eef222Smrg		      compile_deplibs="$deplib $compile_deplibs"
622165eef222Smrg		      finalize_deplibs="$deplib $finalize_deplibs"
622265eef222Smrg		    else
622365eef222Smrg		      deplibs="$deplib $deplibs"
622465eef222Smrg		      test "$linkmode" = lib && newdependency_libs="$deplib $newdependency_libs"
622565eef222Smrg		    fi
622665eef222Smrg		    continue
622765eef222Smrg		  fi
622865eef222Smrg		fi
622965eef222Smrg		;;
623065eef222Smrg	      *) ;;
623165eef222Smrg	      esac
623265eef222Smrg	    fi
623365eef222Smrg	  fi
623465eef222Smrg	  ;; # -l
623565eef222Smrg	*.ltframework)
623665eef222Smrg	  if test "$linkmode,$pass" = "prog,link"; then
623765eef222Smrg	    compile_deplibs="$deplib $compile_deplibs"
623865eef222Smrg	    finalize_deplibs="$deplib $finalize_deplibs"
623965eef222Smrg	  else
624065eef222Smrg	    deplibs="$deplib $deplibs"
624165eef222Smrg	    if test "$linkmode" = lib ; then
624265eef222Smrg		case "$new_inherited_linker_flags " in
624365eef222Smrg		    *" $deplib "*) ;;
6244200d7199Smrg		    * ) func_append new_inherited_linker_flags " $deplib" ;;
624565eef222Smrg		esac
624665eef222Smrg	    fi
624765eef222Smrg	  fi
624865eef222Smrg	  continue
624965eef222Smrg	  ;;
625065eef222Smrg	-L*)
625165eef222Smrg	  case $linkmode in
625265eef222Smrg	  lib)
625365eef222Smrg	    deplibs="$deplib $deplibs"
625465eef222Smrg	    test "$pass" = conv && continue
625565eef222Smrg	    newdependency_libs="$deplib $newdependency_libs"
625665eef222Smrg	    func_stripname '-L' '' "$deplib"
6257200d7199Smrg	    func_resolve_sysroot "$func_stripname_result"
6258200d7199Smrg	    func_append newlib_search_path " $func_resolve_sysroot_result"
625965eef222Smrg	    ;;
626065eef222Smrg	  prog)
626165eef222Smrg	    if test "$pass" = conv; then
626265eef222Smrg	      deplibs="$deplib $deplibs"
626365eef222Smrg	      continue
626465eef222Smrg	    fi
626565eef222Smrg	    if test "$pass" = scan; then
626665eef222Smrg	      deplibs="$deplib $deplibs"
626765eef222Smrg	    else
626865eef222Smrg	      compile_deplibs="$deplib $compile_deplibs"
626965eef222Smrg	      finalize_deplibs="$deplib $finalize_deplibs"
627065eef222Smrg	    fi
627165eef222Smrg	    func_stripname '-L' '' "$deplib"
6272200d7199Smrg	    func_resolve_sysroot "$func_stripname_result"
6273200d7199Smrg	    func_append newlib_search_path " $func_resolve_sysroot_result"
627465eef222Smrg	    ;;
627565eef222Smrg	  *)
627665eef222Smrg	    func_warning "\`-L' is ignored for archives/objects"
627765eef222Smrg	    ;;
627865eef222Smrg	  esac # linkmode
627965eef222Smrg	  continue
628065eef222Smrg	  ;; # -L
628165eef222Smrg	-R*)
628265eef222Smrg	  if test "$pass" = link; then
628365eef222Smrg	    func_stripname '-R' '' "$deplib"
6284200d7199Smrg	    func_resolve_sysroot "$func_stripname_result"
6285200d7199Smrg	    dir=$func_resolve_sysroot_result
628665eef222Smrg	    # Make sure the xrpath contains only unique directories.
628765eef222Smrg	    case "$xrpath " in
628865eef222Smrg	    *" $dir "*) ;;
6289200d7199Smrg	    *) func_append xrpath " $dir" ;;
629065eef222Smrg	    esac
629165eef222Smrg	  fi
629265eef222Smrg	  deplibs="$deplib $deplibs"
629365eef222Smrg	  continue
629465eef222Smrg	  ;;
6295200d7199Smrg	*.la)
6296200d7199Smrg	  func_resolve_sysroot "$deplib"
6297200d7199Smrg	  lib=$func_resolve_sysroot_result
6298200d7199Smrg	  ;;
629965eef222Smrg	*.$libext)
630065eef222Smrg	  if test "$pass" = conv; then
630165eef222Smrg	    deplibs="$deplib $deplibs"
630265eef222Smrg	    continue
630365eef222Smrg	  fi
630465eef222Smrg	  case $linkmode in
630565eef222Smrg	  lib)
630665eef222Smrg	    # Linking convenience modules into shared libraries is allowed,
630765eef222Smrg	    # but linking other static libraries is non-portable.
630865eef222Smrg	    case " $dlpreconveniencelibs " in
630965eef222Smrg	    *" $deplib "*) ;;
631065eef222Smrg	    *)
631165eef222Smrg	      valid_a_lib=no
631265eef222Smrg	      case $deplibs_check_method in
631365eef222Smrg		match_pattern*)
631465eef222Smrg		  set dummy $deplibs_check_method; shift
631565eef222Smrg		  match_pattern_regex=`expr "$deplibs_check_method" : "$1 \(.*\)"`
631656957a04Smrg		  if eval "\$ECHO \"$deplib\"" 2>/dev/null | $SED 10q \
631765eef222Smrg		    | $EGREP "$match_pattern_regex" > /dev/null; then
631865eef222Smrg		    valid_a_lib=yes
631965eef222Smrg		  fi
632065eef222Smrg		;;
632165eef222Smrg		pass_all)
632265eef222Smrg		  valid_a_lib=yes
632365eef222Smrg		;;
632465eef222Smrg	      esac
632565eef222Smrg	      if test "$valid_a_lib" != yes; then
632656957a04Smrg		echo
632765eef222Smrg		$ECHO "*** Warning: Trying to link with static lib archive $deplib."
632856957a04Smrg		echo "*** I have the capability to make that library automatically link in when"
632956957a04Smrg		echo "*** you link to this library.  But I can only do this if you have a"
633056957a04Smrg		echo "*** shared version of the library, which you do not appear to have"
633156957a04Smrg		echo "*** because the file extensions .$libext of this argument makes me believe"
633256957a04Smrg		echo "*** that it is just a static archive that I should not use here."
633365eef222Smrg	      else
633456957a04Smrg		echo
633565eef222Smrg		$ECHO "*** Warning: Linking the shared library $output against the"
633665eef222Smrg		$ECHO "*** static library $deplib is not portable!"
633765eef222Smrg		deplibs="$deplib $deplibs"
633865eef222Smrg	      fi
633965eef222Smrg	      ;;
634065eef222Smrg	    esac
634165eef222Smrg	    continue
634265eef222Smrg	    ;;
634365eef222Smrg	  prog)
634465eef222Smrg	    if test "$pass" != link; then
634565eef222Smrg	      deplibs="$deplib $deplibs"
634665eef222Smrg	    else
634765eef222Smrg	      compile_deplibs="$deplib $compile_deplibs"
634865eef222Smrg	      finalize_deplibs="$deplib $finalize_deplibs"
634965eef222Smrg	    fi
635065eef222Smrg	    continue
635165eef222Smrg	    ;;
635265eef222Smrg	  esac # linkmode
635365eef222Smrg	  ;; # *.$libext
635465eef222Smrg	*.lo | *.$objext)
635565eef222Smrg	  if test "$pass" = conv; then
635665eef222Smrg	    deplibs="$deplib $deplibs"
635765eef222Smrg	  elif test "$linkmode" = prog; then
635865eef222Smrg	    if test "$pass" = dlpreopen || test "$dlopen_support" != yes || test "$build_libtool_libs" = no; then
635965eef222Smrg	      # If there is no dlopen support or we're linking statically,
636065eef222Smrg	      # we need to preload.
6361200d7199Smrg	      func_append newdlprefiles " $deplib"
636265eef222Smrg	      compile_deplibs="$deplib $compile_deplibs"
636365eef222Smrg	      finalize_deplibs="$deplib $finalize_deplibs"
636465eef222Smrg	    else
6365200d7199Smrg	      func_append newdlfiles " $deplib"
636665eef222Smrg	    fi
636765eef222Smrg	  fi
636865eef222Smrg	  continue
636965eef222Smrg	  ;;
637065eef222Smrg	%DEPLIBS%)
637165eef222Smrg	  alldeplibs=yes
637265eef222Smrg	  continue
637365eef222Smrg	  ;;
637465eef222Smrg	esac # case $deplib
637565eef222Smrg
637665eef222Smrg	if test "$found" = yes || test -f "$lib"; then :
637765eef222Smrg	else
637865eef222Smrg	  func_fatal_error "cannot find the library \`$lib' or unhandled argument \`$deplib'"
637965eef222Smrg	fi
638065eef222Smrg
638165eef222Smrg	# Check to see that this really is a libtool archive.
638265eef222Smrg	func_lalib_unsafe_p "$lib" \
638365eef222Smrg	  || func_fatal_error "\`$lib' is not a valid libtool archive"
638465eef222Smrg
638565eef222Smrg	func_dirname "$lib" "" "."
638665eef222Smrg	ladir="$func_dirname_result"
638765eef222Smrg
638865eef222Smrg	dlname=
638965eef222Smrg	dlopen=
639065eef222Smrg	dlpreopen=
639165eef222Smrg	libdir=
639265eef222Smrg	library_names=
639365eef222Smrg	old_library=
639465eef222Smrg	inherited_linker_flags=
639565eef222Smrg	# If the library was installed with an old release of libtool,
639665eef222Smrg	# it will not redefine variables installed, or shouldnotlink
639765eef222Smrg	installed=yes
639865eef222Smrg	shouldnotlink=no
639965eef222Smrg	avoidtemprpath=
640065eef222Smrg
640165eef222Smrg
640265eef222Smrg	# Read the .la file
640365eef222Smrg	func_source "$lib"
640465eef222Smrg
640565eef222Smrg	# Convert "-framework foo" to "foo.ltframework"
640665eef222Smrg	if test -n "$inherited_linker_flags"; then
640756957a04Smrg	  tmp_inherited_linker_flags=`$ECHO "$inherited_linker_flags" | $SED 's/-framework \([^ $]*\)/\1.ltframework/g'`
640865eef222Smrg	  for tmp_inherited_linker_flag in $tmp_inherited_linker_flags; do
640965eef222Smrg	    case " $new_inherited_linker_flags " in
641065eef222Smrg	      *" $tmp_inherited_linker_flag "*) ;;
6411200d7199Smrg	      *) func_append new_inherited_linker_flags " $tmp_inherited_linker_flag";;
641265eef222Smrg	    esac
641365eef222Smrg	  done
641465eef222Smrg	fi
641556957a04Smrg	dependency_libs=`$ECHO " $dependency_libs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'`
641665eef222Smrg	if test "$linkmode,$pass" = "lib,link" ||
641765eef222Smrg	   test "$linkmode,$pass" = "prog,scan" ||
641865eef222Smrg	   { test "$linkmode" != prog && test "$linkmode" != lib; }; then
6419200d7199Smrg	  test -n "$dlopen" && func_append dlfiles " $dlopen"
6420200d7199Smrg	  test -n "$dlpreopen" && func_append dlprefiles " $dlpreopen"
642165eef222Smrg	fi
642265eef222Smrg
642365eef222Smrg	if test "$pass" = conv; then
642465eef222Smrg	  # Only check for convenience libraries
642565eef222Smrg	  deplibs="$lib $deplibs"
642665eef222Smrg	  if test -z "$libdir"; then
642765eef222Smrg	    if test -z "$old_library"; then
642865eef222Smrg	      func_fatal_error "cannot find name of link library for \`$lib'"
642965eef222Smrg	    fi
643065eef222Smrg	    # It is a libtool convenience library, so add in its objects.
6431200d7199Smrg	    func_append convenience " $ladir/$objdir/$old_library"
6432200d7199Smrg	    func_append old_convenience " $ladir/$objdir/$old_library"
643365eef222Smrg	  elif test "$linkmode" != prog && test "$linkmode" != lib; then
643465eef222Smrg	    func_fatal_error "\`$lib' is not a convenience library"
643565eef222Smrg	  fi
643665eef222Smrg	  tmp_libs=
643765eef222Smrg	  for deplib in $dependency_libs; do
643865eef222Smrg	    deplibs="$deplib $deplibs"
6439200d7199Smrg	    if $opt_preserve_dup_deps ; then
644065eef222Smrg	      case "$tmp_libs " in
6441200d7199Smrg	      *" $deplib "*) func_append specialdeplibs " $deplib" ;;
644265eef222Smrg	      esac
644365eef222Smrg	    fi
6444200d7199Smrg	    func_append tmp_libs " $deplib"
644565eef222Smrg	  done
644665eef222Smrg	  continue
644765eef222Smrg	fi # $pass = conv
644865eef222Smrg
644965eef222Smrg
645065eef222Smrg	# Get the name of the library we link against.
645165eef222Smrg	linklib=
6452200d7199Smrg	if test -n "$old_library" &&
6453200d7199Smrg	   { test "$prefer_static_libs" = yes ||
6454200d7199Smrg	     test "$prefer_static_libs,$installed" = "built,no"; }; then
6455200d7199Smrg	  linklib=$old_library
6456200d7199Smrg	else
6457200d7199Smrg	  for l in $old_library $library_names; do
6458200d7199Smrg	    linklib="$l"
6459200d7199Smrg	  done
6460200d7199Smrg	fi
646165eef222Smrg	if test -z "$linklib"; then
646265eef222Smrg	  func_fatal_error "cannot find name of link library for \`$lib'"
646365eef222Smrg	fi
646465eef222Smrg
646565eef222Smrg	# This library was specified with -dlopen.
646665eef222Smrg	if test "$pass" = dlopen; then
646765eef222Smrg	  if test -z "$libdir"; then
646865eef222Smrg	    func_fatal_error "cannot -dlopen a convenience library: \`$lib'"
646965eef222Smrg	  fi
647065eef222Smrg	  if test -z "$dlname" ||
647165eef222Smrg	     test "$dlopen_support" != yes ||
647265eef222Smrg	     test "$build_libtool_libs" = no; then
647365eef222Smrg	    # If there is no dlname, no dlopen support or we're linking
647465eef222Smrg	    # statically, we need to preload.  We also need to preload any
647565eef222Smrg	    # dependent libraries so libltdl's deplib preloader doesn't
647665eef222Smrg	    # bomb out in the load deplibs phase.
6477200d7199Smrg	    func_append dlprefiles " $lib $dependency_libs"
647865eef222Smrg	  else
6479200d7199Smrg	    func_append newdlfiles " $lib"
648065eef222Smrg	  fi
648165eef222Smrg	  continue
648265eef222Smrg	fi # $pass = dlopen
648365eef222Smrg
648465eef222Smrg	# We need an absolute path.
648565eef222Smrg	case $ladir in
648665eef222Smrg	[\\/]* | [A-Za-z]:[\\/]*) abs_ladir="$ladir" ;;
648765eef222Smrg	*)
648865eef222Smrg	  abs_ladir=`cd "$ladir" && pwd`
648965eef222Smrg	  if test -z "$abs_ladir"; then
649065eef222Smrg	    func_warning "cannot determine absolute directory name of \`$ladir'"
649165eef222Smrg	    func_warning "passing it literally to the linker, although it might fail"
649265eef222Smrg	    abs_ladir="$ladir"
649365eef222Smrg	  fi
649465eef222Smrg	  ;;
649565eef222Smrg	esac
649665eef222Smrg	func_basename "$lib"
649765eef222Smrg	laname="$func_basename_result"
649865eef222Smrg
649965eef222Smrg	# Find the relevant object directory and library name.
650065eef222Smrg	if test "X$installed" = Xyes; then
6501200d7199Smrg	  if test ! -f "$lt_sysroot$libdir/$linklib" && test -f "$abs_ladir/$linklib"; then
650265eef222Smrg	    func_warning "library \`$lib' was moved."
650365eef222Smrg	    dir="$ladir"
650465eef222Smrg	    absdir="$abs_ladir"
650565eef222Smrg	    libdir="$abs_ladir"
650665eef222Smrg	  else
6507200d7199Smrg	    dir="$lt_sysroot$libdir"
6508200d7199Smrg	    absdir="$lt_sysroot$libdir"
650965eef222Smrg	  fi
651065eef222Smrg	  test "X$hardcode_automatic" = Xyes && avoidtemprpath=yes
651165eef222Smrg	else
651265eef222Smrg	  if test ! -f "$ladir/$objdir/$linklib" && test -f "$abs_ladir/$linklib"; then
651365eef222Smrg	    dir="$ladir"
651465eef222Smrg	    absdir="$abs_ladir"
651565eef222Smrg	    # Remove this search path later
6516200d7199Smrg	    func_append notinst_path " $abs_ladir"
651765eef222Smrg	  else
651865eef222Smrg	    dir="$ladir/$objdir"
651965eef222Smrg	    absdir="$abs_ladir/$objdir"
652065eef222Smrg	    # Remove this search path later
6521200d7199Smrg	    func_append notinst_path " $abs_ladir"
652265eef222Smrg	  fi
652365eef222Smrg	fi # $installed = yes
652465eef222Smrg	func_stripname 'lib' '.la' "$laname"
652565eef222Smrg	name=$func_stripname_result
652665eef222Smrg
652765eef222Smrg	# This library was specified with -dlpreopen.
652865eef222Smrg	if test "$pass" = dlpreopen; then
652965eef222Smrg	  if test -z "$libdir" && test "$linkmode" = prog; then
653065eef222Smrg	    func_fatal_error "only libraries may -dlpreopen a convenience library: \`$lib'"
653165eef222Smrg	  fi
6532200d7199Smrg	  case "$host" in
6533200d7199Smrg	    # special handling for platforms with PE-DLLs.
6534200d7199Smrg	    *cygwin* | *mingw* | *cegcc* )
6535200d7199Smrg	      # Linker will automatically link against shared library if both
6536200d7199Smrg	      # static and shared are present.  Therefore, ensure we extract
6537200d7199Smrg	      # symbols from the import library if a shared library is present
6538200d7199Smrg	      # (otherwise, the dlopen module name will be incorrect).  We do
6539200d7199Smrg	      # this by putting the import library name into $newdlprefiles.
6540200d7199Smrg	      # We recover the dlopen module name by 'saving' the la file
6541200d7199Smrg	      # name in a special purpose variable, and (later) extracting the
6542200d7199Smrg	      # dlname from the la file.
6543200d7199Smrg	      if test -n "$dlname"; then
6544200d7199Smrg	        func_tr_sh "$dir/$linklib"
6545200d7199Smrg	        eval "libfile_$func_tr_sh_result=\$abs_ladir/\$laname"
6546200d7199Smrg	        func_append newdlprefiles " $dir/$linklib"
6547200d7199Smrg	      else
6548200d7199Smrg	        func_append newdlprefiles " $dir/$old_library"
6549200d7199Smrg	        # Keep a list of preopened convenience libraries to check
6550200d7199Smrg	        # that they are being used correctly in the link pass.
6551200d7199Smrg	        test -z "$libdir" && \
6552200d7199Smrg	          func_append dlpreconveniencelibs " $dir/$old_library"
6553200d7199Smrg	      fi
6554200d7199Smrg	    ;;
6555200d7199Smrg	    * )
6556200d7199Smrg	      # Prefer using a static library (so that no silly _DYNAMIC symbols
6557200d7199Smrg	      # are required to link).
6558200d7199Smrg	      if test -n "$old_library"; then
6559200d7199Smrg	        func_append newdlprefiles " $dir/$old_library"
6560200d7199Smrg	        # Keep a list of preopened convenience libraries to check
6561200d7199Smrg	        # that they are being used correctly in the link pass.
6562200d7199Smrg	        test -z "$libdir" && \
6563200d7199Smrg	          func_append dlpreconveniencelibs " $dir/$old_library"
6564200d7199Smrg	      # Otherwise, use the dlname, so that lt_dlopen finds it.
6565200d7199Smrg	      elif test -n "$dlname"; then
6566200d7199Smrg	        func_append newdlprefiles " $dir/$dlname"
6567200d7199Smrg	      else
6568200d7199Smrg	        func_append newdlprefiles " $dir/$linklib"
6569200d7199Smrg	      fi
6570200d7199Smrg	    ;;
6571200d7199Smrg	  esac
657265eef222Smrg	fi # $pass = dlpreopen
657365eef222Smrg
657465eef222Smrg	if test -z "$libdir"; then
657565eef222Smrg	  # Link the convenience library
657665eef222Smrg	  if test "$linkmode" = lib; then
657765eef222Smrg	    deplibs="$dir/$old_library $deplibs"
657865eef222Smrg	  elif test "$linkmode,$pass" = "prog,link"; then
657965eef222Smrg	    compile_deplibs="$dir/$old_library $compile_deplibs"
658065eef222Smrg	    finalize_deplibs="$dir/$old_library $finalize_deplibs"
658165eef222Smrg	  else
658265eef222Smrg	    deplibs="$lib $deplibs" # used for prog,scan pass
658365eef222Smrg	  fi
658465eef222Smrg	  continue
658565eef222Smrg	fi
658665eef222Smrg
658765eef222Smrg
658865eef222Smrg	if test "$linkmode" = prog && test "$pass" != link; then
6589200d7199Smrg	  func_append newlib_search_path " $ladir"
659065eef222Smrg	  deplibs="$lib $deplibs"
659165eef222Smrg
659265eef222Smrg	  linkalldeplibs=no
659365eef222Smrg	  if test "$link_all_deplibs" != no || test -z "$library_names" ||
659465eef222Smrg	     test "$build_libtool_libs" = no; then
659565eef222Smrg	    linkalldeplibs=yes
659665eef222Smrg	  fi
659765eef222Smrg
659865eef222Smrg	  tmp_libs=
659965eef222Smrg	  for deplib in $dependency_libs; do
660065eef222Smrg	    case $deplib in
660165eef222Smrg	    -L*) func_stripname '-L' '' "$deplib"
6602200d7199Smrg	         func_resolve_sysroot "$func_stripname_result"
6603200d7199Smrg	         func_append newlib_search_path " $func_resolve_sysroot_result"
660465eef222Smrg		 ;;
660565eef222Smrg	    esac
660665eef222Smrg	    # Need to link against all dependency_libs?
660765eef222Smrg	    if test "$linkalldeplibs" = yes; then
660865eef222Smrg	      deplibs="$deplib $deplibs"
660965eef222Smrg	    else
661065eef222Smrg	      # Need to hardcode shared library paths
661165eef222Smrg	      # or/and link against static libraries
661265eef222Smrg	      newdependency_libs="$deplib $newdependency_libs"
661365eef222Smrg	    fi
6614200d7199Smrg	    if $opt_preserve_dup_deps ; then
661565eef222Smrg	      case "$tmp_libs " in
6616200d7199Smrg	      *" $deplib "*) func_append specialdeplibs " $deplib" ;;
661765eef222Smrg	      esac
661865eef222Smrg	    fi
6619200d7199Smrg	    func_append tmp_libs " $deplib"
662065eef222Smrg	  done # for deplib
662165eef222Smrg	  continue
662265eef222Smrg	fi # $linkmode = prog...
662365eef222Smrg
662465eef222Smrg	if test "$linkmode,$pass" = "prog,link"; then
662565eef222Smrg	  if test -n "$library_names" &&
662665eef222Smrg	     { { test "$prefer_static_libs" = no ||
662765eef222Smrg	         test "$prefer_static_libs,$installed" = "built,yes"; } ||
662865eef222Smrg	       test -z "$old_library"; }; then
662965eef222Smrg	    # We need to hardcode the library path
663065eef222Smrg	    if test -n "$shlibpath_var" && test -z "$avoidtemprpath" ; then
663165eef222Smrg	      # Make sure the rpath contains only unique directories.
663265eef222Smrg	      case "$temp_rpath:" in
663365eef222Smrg	      *"$absdir:"*) ;;
6634200d7199Smrg	      *) func_append temp_rpath "$absdir:" ;;
663565eef222Smrg	      esac
663665eef222Smrg	    fi
663765eef222Smrg
663865eef222Smrg	    # Hardcode the library path.
663965eef222Smrg	    # Skip directories that are in the system default run-time
664065eef222Smrg	    # search path.
664165eef222Smrg	    case " $sys_lib_dlsearch_path " in
664265eef222Smrg	    *" $absdir "*) ;;
664365eef222Smrg	    *)
664465eef222Smrg	      case "$compile_rpath " in
664565eef222Smrg	      *" $absdir "*) ;;
6646200d7199Smrg	      *) func_append compile_rpath " $absdir" ;;
664765eef222Smrg	      esac
664865eef222Smrg	      ;;
664965eef222Smrg	    esac
665065eef222Smrg	    case " $sys_lib_dlsearch_path " in
665165eef222Smrg	    *" $libdir "*) ;;
665265eef222Smrg	    *)
665365eef222Smrg	      case "$finalize_rpath " in
665465eef222Smrg	      *" $libdir "*) ;;
6655200d7199Smrg	      *) func_append finalize_rpath " $libdir" ;;
665665eef222Smrg	      esac
665765eef222Smrg	      ;;
665865eef222Smrg	    esac
665965eef222Smrg	  fi # $linkmode,$pass = prog,link...
666065eef222Smrg
666165eef222Smrg	  if test "$alldeplibs" = yes &&
666265eef222Smrg	     { test "$deplibs_check_method" = pass_all ||
666365eef222Smrg	       { test "$build_libtool_libs" = yes &&
666465eef222Smrg		 test -n "$library_names"; }; }; then
666565eef222Smrg	    # We only need to search for static libraries
666665eef222Smrg	    continue
666765eef222Smrg	  fi
666865eef222Smrg	fi
666965eef222Smrg
667065eef222Smrg	link_static=no # Whether the deplib will be linked statically
667165eef222Smrg	use_static_libs=$prefer_static_libs
667265eef222Smrg	if test "$use_static_libs" = built && test "$installed" = yes; then
667365eef222Smrg	  use_static_libs=no
667465eef222Smrg	fi
667565eef222Smrg	if test -n "$library_names" &&
667665eef222Smrg	   { test "$use_static_libs" = no || test -z "$old_library"; }; then
667765eef222Smrg	  case $host in
667865eef222Smrg	  *cygwin* | *mingw* | *cegcc*)
667965eef222Smrg	      # No point in relinking DLLs because paths are not encoded
6680200d7199Smrg	      func_append notinst_deplibs " $lib"
668165eef222Smrg	      need_relink=no
668265eef222Smrg	    ;;
668365eef222Smrg	  *)
668465eef222Smrg	    if test "$installed" = no; then
6685200d7199Smrg	      func_append notinst_deplibs " $lib"
668665eef222Smrg	      need_relink=yes
668765eef222Smrg	    fi
668865eef222Smrg	    ;;
668965eef222Smrg	  esac
669065eef222Smrg	  # This is a shared library
669165eef222Smrg
669265eef222Smrg	  # Warn about portability, can't link against -module's on some
669365eef222Smrg	  # systems (darwin).  Don't bleat about dlopened modules though!
669465eef222Smrg	  dlopenmodule=""
669565eef222Smrg	  for dlpremoduletest in $dlprefiles; do
669665eef222Smrg	    if test "X$dlpremoduletest" = "X$lib"; then
669765eef222Smrg	      dlopenmodule="$dlpremoduletest"
669865eef222Smrg	      break
669965eef222Smrg	    fi
670065eef222Smrg	  done
670165eef222Smrg	  if test -z "$dlopenmodule" && test "$shouldnotlink" = yes && test "$pass" = link; then
670256957a04Smrg	    echo
670365eef222Smrg	    if test "$linkmode" = prog; then
670465eef222Smrg	      $ECHO "*** Warning: Linking the executable $output against the loadable module"
670565eef222Smrg	    else
670665eef222Smrg	      $ECHO "*** Warning: Linking the shared library $output against the loadable module"
670765eef222Smrg	    fi
670865eef222Smrg	    $ECHO "*** $linklib is not portable!"
670965eef222Smrg	  fi
671065eef222Smrg	  if test "$linkmode" = lib &&
671165eef222Smrg	     test "$hardcode_into_libs" = yes; then
671265eef222Smrg	    # Hardcode the library path.
671365eef222Smrg	    # Skip directories that are in the system default run-time
671465eef222Smrg	    # search path.
671565eef222Smrg	    case " $sys_lib_dlsearch_path " in
671665eef222Smrg	    *" $absdir "*) ;;
671765eef222Smrg	    *)
671865eef222Smrg	      case "$compile_rpath " in
671965eef222Smrg	      *" $absdir "*) ;;
6720200d7199Smrg	      *) func_append compile_rpath " $absdir" ;;
672165eef222Smrg	      esac
672265eef222Smrg	      ;;
672365eef222Smrg	    esac
672465eef222Smrg	    case " $sys_lib_dlsearch_path " in
672565eef222Smrg	    *" $libdir "*) ;;
672665eef222Smrg	    *)
672765eef222Smrg	      case "$finalize_rpath " in
672865eef222Smrg	      *" $libdir "*) ;;
6729200d7199Smrg	      *) func_append finalize_rpath " $libdir" ;;
673065eef222Smrg	      esac
673165eef222Smrg	      ;;
673265eef222Smrg	    esac
673365eef222Smrg	  fi
673465eef222Smrg
673565eef222Smrg	  if test -n "$old_archive_from_expsyms_cmds"; then
673665eef222Smrg	    # figure out the soname
673765eef222Smrg	    set dummy $library_names
673865eef222Smrg	    shift
673965eef222Smrg	    realname="$1"
674065eef222Smrg	    shift
674165eef222Smrg	    libname=`eval "\\$ECHO \"$libname_spec\""`
674265eef222Smrg	    # use dlname if we got it. it's perfectly good, no?
674365eef222Smrg	    if test -n "$dlname"; then
674465eef222Smrg	      soname="$dlname"
674565eef222Smrg	    elif test -n "$soname_spec"; then
674665eef222Smrg	      # bleh windows
674765eef222Smrg	      case $host in
674865eef222Smrg	      *cygwin* | mingw* | *cegcc*)
674965eef222Smrg	        func_arith $current - $age
675065eef222Smrg		major=$func_arith_result
675165eef222Smrg		versuffix="-$major"
675265eef222Smrg		;;
675365eef222Smrg	      esac
675465eef222Smrg	      eval soname=\"$soname_spec\"
675565eef222Smrg	    else
675665eef222Smrg	      soname="$realname"
675765eef222Smrg	    fi
675865eef222Smrg
675965eef222Smrg	    # Make a new name for the extract_expsyms_cmds to use
676065eef222Smrg	    soroot="$soname"
676165eef222Smrg	    func_basename "$soroot"
676265eef222Smrg	    soname="$func_basename_result"
676365eef222Smrg	    func_stripname 'lib' '.dll' "$soname"
676465eef222Smrg	    newlib=libimp-$func_stripname_result.a
676565eef222Smrg
676665eef222Smrg	    # If the library has no export list, then create one now
676765eef222Smrg	    if test -f "$output_objdir/$soname-def"; then :
676865eef222Smrg	    else
676965eef222Smrg	      func_verbose "extracting exported symbol list from \`$soname'"
677065eef222Smrg	      func_execute_cmds "$extract_expsyms_cmds" 'exit $?'
677165eef222Smrg	    fi
677265eef222Smrg
677365eef222Smrg	    # Create $newlib
677465eef222Smrg	    if test -f "$output_objdir/$newlib"; then :; else
677565eef222Smrg	      func_verbose "generating import library for \`$soname'"
677665eef222Smrg	      func_execute_cmds "$old_archive_from_expsyms_cmds" 'exit $?'
677765eef222Smrg	    fi
677865eef222Smrg	    # make sure the library variables are pointing to the new library
677965eef222Smrg	    dir=$output_objdir
678065eef222Smrg	    linklib=$newlib
678165eef222Smrg	  fi # test -n "$old_archive_from_expsyms_cmds"
678265eef222Smrg
6783200d7199Smrg	  if test "$linkmode" = prog || test "$opt_mode" != relink; then
678465eef222Smrg	    add_shlibpath=
678565eef222Smrg	    add_dir=
678665eef222Smrg	    add=
678765eef222Smrg	    lib_linked=yes
678865eef222Smrg	    case $hardcode_action in
678965eef222Smrg	    immediate | unsupported)
679065eef222Smrg	      if test "$hardcode_direct" = no; then
679165eef222Smrg		add="$dir/$linklib"
679265eef222Smrg		case $host in
679365eef222Smrg		  *-*-sco3.2v5.0.[024]*) add_dir="-L$dir" ;;
679465eef222Smrg		  *-*-sysv4*uw2*) add_dir="-L$dir" ;;
679565eef222Smrg		  *-*-sysv5OpenUNIX* | *-*-sysv5UnixWare7.[01].[10]* | \
679665eef222Smrg		    *-*-unixware7*) add_dir="-L$dir" ;;
679765eef222Smrg		  *-*-darwin* )
679865eef222Smrg		    # if the lib is a (non-dlopened) module then we can not
679965eef222Smrg		    # link against it, someone is ignoring the earlier warnings
680065eef222Smrg		    if /usr/bin/file -L $add 2> /dev/null |
680165eef222Smrg			 $GREP ": [^:]* bundle" >/dev/null ; then
680265eef222Smrg		      if test "X$dlopenmodule" != "X$lib"; then
680365eef222Smrg			$ECHO "*** Warning: lib $linklib is a module, not a shared library"
680465eef222Smrg			if test -z "$old_library" ; then
680556957a04Smrg			  echo
680656957a04Smrg			  echo "*** And there doesn't seem to be a static archive available"
680756957a04Smrg			  echo "*** The link will probably fail, sorry"
680865eef222Smrg			else
680965eef222Smrg			  add="$dir/$old_library"
681065eef222Smrg			fi
681165eef222Smrg		      elif test -n "$old_library"; then
681265eef222Smrg			add="$dir/$old_library"
681365eef222Smrg		      fi
681465eef222Smrg		    fi
681565eef222Smrg		esac
681665eef222Smrg	      elif test "$hardcode_minus_L" = no; then
681765eef222Smrg		case $host in
681865eef222Smrg		*-*-sunos*) add_shlibpath="$dir" ;;
681965eef222Smrg		esac
682065eef222Smrg		add_dir="-L$dir"
682165eef222Smrg		add="-l$name"
682265eef222Smrg	      elif test "$hardcode_shlibpath_var" = no; then
682365eef222Smrg		add_shlibpath="$dir"
682465eef222Smrg		add="-l$name"
682565eef222Smrg	      else
682665eef222Smrg		lib_linked=no
682765eef222Smrg	      fi
682865eef222Smrg	      ;;
682965eef222Smrg	    relink)
683065eef222Smrg	      if test "$hardcode_direct" = yes &&
683165eef222Smrg	         test "$hardcode_direct_absolute" = no; then
683265eef222Smrg		add="$dir/$linklib"
683365eef222Smrg	      elif test "$hardcode_minus_L" = yes; then
683465eef222Smrg		add_dir="-L$dir"
683565eef222Smrg		# Try looking first in the location we're being installed to.
683665eef222Smrg		if test -n "$inst_prefix_dir"; then
683765eef222Smrg		  case $libdir in
683865eef222Smrg		    [\\/]*)
6839200d7199Smrg		      func_append add_dir " -L$inst_prefix_dir$libdir"
684065eef222Smrg		      ;;
684165eef222Smrg		  esac
684265eef222Smrg		fi
684365eef222Smrg		add="-l$name"
684465eef222Smrg	      elif test "$hardcode_shlibpath_var" = yes; then
684565eef222Smrg		add_shlibpath="$dir"
684665eef222Smrg		add="-l$name"
684765eef222Smrg	      else
684865eef222Smrg		lib_linked=no
684965eef222Smrg	      fi
685065eef222Smrg	      ;;
685165eef222Smrg	    *) lib_linked=no ;;
685265eef222Smrg	    esac
685365eef222Smrg
685465eef222Smrg	    if test "$lib_linked" != yes; then
685565eef222Smrg	      func_fatal_configuration "unsupported hardcode properties"
685665eef222Smrg	    fi
685765eef222Smrg
685865eef222Smrg	    if test -n "$add_shlibpath"; then
685965eef222Smrg	      case :$compile_shlibpath: in
686065eef222Smrg	      *":$add_shlibpath:"*) ;;
6861200d7199Smrg	      *) func_append compile_shlibpath "$add_shlibpath:" ;;
686265eef222Smrg	      esac
686365eef222Smrg	    fi
686465eef222Smrg	    if test "$linkmode" = prog; then
686565eef222Smrg	      test -n "$add_dir" && compile_deplibs="$add_dir $compile_deplibs"
686665eef222Smrg	      test -n "$add" && compile_deplibs="$add $compile_deplibs"
686765eef222Smrg	    else
686865eef222Smrg	      test -n "$add_dir" && deplibs="$add_dir $deplibs"
686965eef222Smrg	      test -n "$add" && deplibs="$add $deplibs"
687065eef222Smrg	      if test "$hardcode_direct" != yes &&
687165eef222Smrg		 test "$hardcode_minus_L" != yes &&
687265eef222Smrg		 test "$hardcode_shlibpath_var" = yes; then
687365eef222Smrg		case :$finalize_shlibpath: in
687465eef222Smrg		*":$libdir:"*) ;;
6875200d7199Smrg		*) func_append finalize_shlibpath "$libdir:" ;;
687665eef222Smrg		esac
687765eef222Smrg	      fi
687865eef222Smrg	    fi
687965eef222Smrg	  fi
688065eef222Smrg
6881200d7199Smrg	  if test "$linkmode" = prog || test "$opt_mode" = relink; then
688265eef222Smrg	    add_shlibpath=
688365eef222Smrg	    add_dir=
688465eef222Smrg	    add=
688565eef222Smrg	    # Finalize command for both is simple: just hardcode it.
688665eef222Smrg	    if test "$hardcode_direct" = yes &&
688765eef222Smrg	       test "$hardcode_direct_absolute" = no; then
688865eef222Smrg	      add="$libdir/$linklib"
688965eef222Smrg	    elif test "$hardcode_minus_L" = yes; then
689065eef222Smrg	      add_dir="-L$libdir"
689165eef222Smrg	      add="-l$name"
689265eef222Smrg	    elif test "$hardcode_shlibpath_var" = yes; then
689365eef222Smrg	      case :$finalize_shlibpath: in
689465eef222Smrg	      *":$libdir:"*) ;;
6895200d7199Smrg	      *) func_append finalize_shlibpath "$libdir:" ;;
689665eef222Smrg	      esac
689765eef222Smrg	      add="-l$name"
689865eef222Smrg	    elif test "$hardcode_automatic" = yes; then
689965eef222Smrg	      if test -n "$inst_prefix_dir" &&
690065eef222Smrg		 test -f "$inst_prefix_dir$libdir/$linklib" ; then
690165eef222Smrg		add="$inst_prefix_dir$libdir/$linklib"
690265eef222Smrg	      else
690365eef222Smrg		add="$libdir/$linklib"
690465eef222Smrg	      fi
690565eef222Smrg	    else
690665eef222Smrg	      # We cannot seem to hardcode it, guess we'll fake it.
690765eef222Smrg	      add_dir="-L$libdir"
690865eef222Smrg	      # Try looking first in the location we're being installed to.
690965eef222Smrg	      if test -n "$inst_prefix_dir"; then
691065eef222Smrg		case $libdir in
691165eef222Smrg		  [\\/]*)
6912200d7199Smrg		    func_append add_dir " -L$inst_prefix_dir$libdir"
691365eef222Smrg		    ;;
691465eef222Smrg		esac
691565eef222Smrg	      fi
691665eef222Smrg	      add="-l$name"
691765eef222Smrg	    fi
691865eef222Smrg
691965eef222Smrg	    if test "$linkmode" = prog; then
692065eef222Smrg	      test -n "$add_dir" && finalize_deplibs="$add_dir $finalize_deplibs"
692165eef222Smrg	      test -n "$add" && finalize_deplibs="$add $finalize_deplibs"
692265eef222Smrg	    else
692365eef222Smrg	      test -n "$add_dir" && deplibs="$add_dir $deplibs"
692465eef222Smrg	      test -n "$add" && deplibs="$add $deplibs"
692565eef222Smrg	    fi
692665eef222Smrg	  fi
692765eef222Smrg	elif test "$linkmode" = prog; then
692865eef222Smrg	  # Here we assume that one of hardcode_direct or hardcode_minus_L
692965eef222Smrg	  # is not unsupported.  This is valid on all known static and
693065eef222Smrg	  # shared platforms.
693165eef222Smrg	  if test "$hardcode_direct" != unsupported; then
693265eef222Smrg	    test -n "$old_library" && linklib="$old_library"
693365eef222Smrg	    compile_deplibs="$dir/$linklib $compile_deplibs"
693465eef222Smrg	    finalize_deplibs="$dir/$linklib $finalize_deplibs"
693565eef222Smrg	  else
693665eef222Smrg	    compile_deplibs="-l$name -L$dir $compile_deplibs"
693765eef222Smrg	    finalize_deplibs="-l$name -L$dir $finalize_deplibs"
693865eef222Smrg	  fi
693965eef222Smrg	elif test "$build_libtool_libs" = yes; then
694065eef222Smrg	  # Not a shared library
694165eef222Smrg	  if test "$deplibs_check_method" != pass_all; then
694265eef222Smrg	    # We're trying link a shared library against a static one
694365eef222Smrg	    # but the system doesn't support it.
694465eef222Smrg
694565eef222Smrg	    # Just print a warning and add the library to dependency_libs so
694665eef222Smrg	    # that the program can be linked against the static library.
694756957a04Smrg	    echo
694865eef222Smrg	    $ECHO "*** Warning: This system can not link to static lib archive $lib."
694956957a04Smrg	    echo "*** I have the capability to make that library automatically link in when"
695056957a04Smrg	    echo "*** you link to this library.  But I can only do this if you have a"
695156957a04Smrg	    echo "*** shared version of the library, which you do not appear to have."
695265eef222Smrg	    if test "$module" = yes; then
695356957a04Smrg	      echo "*** But as you try to build a module library, libtool will still create "
695456957a04Smrg	      echo "*** a static module, that should work as long as the dlopening application"
695556957a04Smrg	      echo "*** is linked with the -dlopen flag to resolve symbols at runtime."
695665eef222Smrg	      if test -z "$global_symbol_pipe"; then
695756957a04Smrg		echo
695856957a04Smrg		echo "*** However, this would only work if libtool was able to extract symbol"
695956957a04Smrg		echo "*** lists from a program, using \`nm' or equivalent, but libtool could"
696056957a04Smrg		echo "*** not find such a program.  So, this module is probably useless."
696156957a04Smrg		echo "*** \`nm' from GNU binutils and a full rebuild may help."
696265eef222Smrg	      fi
696365eef222Smrg	      if test "$build_old_libs" = no; then
696465eef222Smrg		build_libtool_libs=module
696565eef222Smrg		build_old_libs=yes
696665eef222Smrg	      else
696765eef222Smrg		build_libtool_libs=no
696865eef222Smrg	      fi
696965eef222Smrg	    fi
697065eef222Smrg	  else
697165eef222Smrg	    deplibs="$dir/$old_library $deplibs"
697265eef222Smrg	    link_static=yes
697365eef222Smrg	  fi
697465eef222Smrg	fi # link shared/static library?
697565eef222Smrg
697665eef222Smrg	if test "$linkmode" = lib; then
697765eef222Smrg	  if test -n "$dependency_libs" &&
697865eef222Smrg	     { test "$hardcode_into_libs" != yes ||
697965eef222Smrg	       test "$build_old_libs" = yes ||
698065eef222Smrg	       test "$link_static" = yes; }; then
698165eef222Smrg	    # Extract -R from dependency_libs
698265eef222Smrg	    temp_deplibs=
698365eef222Smrg	    for libdir in $dependency_libs; do
698465eef222Smrg	      case $libdir in
698565eef222Smrg	      -R*) func_stripname '-R' '' "$libdir"
698665eef222Smrg	           temp_xrpath=$func_stripname_result
698765eef222Smrg		   case " $xrpath " in
698865eef222Smrg		   *" $temp_xrpath "*) ;;
6989200d7199Smrg		   *) func_append xrpath " $temp_xrpath";;
699065eef222Smrg		   esac;;
6991200d7199Smrg	      *) func_append temp_deplibs " $libdir";;
699265eef222Smrg	      esac
699365eef222Smrg	    done
699465eef222Smrg	    dependency_libs="$temp_deplibs"
699565eef222Smrg	  fi
699665eef222Smrg
6997200d7199Smrg	  func_append newlib_search_path " $absdir"
699865eef222Smrg	  # Link against this library
699965eef222Smrg	  test "$link_static" = no && newdependency_libs="$abs_ladir/$laname $newdependency_libs"
700065eef222Smrg	  # ... and its dependency_libs
700165eef222Smrg	  tmp_libs=
700265eef222Smrg	  for deplib in $dependency_libs; do
700365eef222Smrg	    newdependency_libs="$deplib $newdependency_libs"
7004200d7199Smrg	    case $deplib in
7005200d7199Smrg              -L*) func_stripname '-L' '' "$deplib"
7006200d7199Smrg                   func_resolve_sysroot "$func_stripname_result";;
7007200d7199Smrg              *) func_resolve_sysroot "$deplib" ;;
7008200d7199Smrg            esac
7009200d7199Smrg	    if $opt_preserve_dup_deps ; then
701065eef222Smrg	      case "$tmp_libs " in
7011200d7199Smrg	      *" $func_resolve_sysroot_result "*)
7012200d7199Smrg                func_append specialdeplibs " $func_resolve_sysroot_result" ;;
701365eef222Smrg	      esac
701465eef222Smrg	    fi
7015200d7199Smrg	    func_append tmp_libs " $func_resolve_sysroot_result"
701665eef222Smrg	  done
701765eef222Smrg
701865eef222Smrg	  if test "$link_all_deplibs" != no; then
701965eef222Smrg	    # Add the search paths of all dependency libraries
702065eef222Smrg	    for deplib in $dependency_libs; do
702156957a04Smrg	      path=
702265eef222Smrg	      case $deplib in
702365eef222Smrg	      -L*) path="$deplib" ;;
702465eef222Smrg	      *.la)
7025200d7199Smrg	        func_resolve_sysroot "$deplib"
7026200d7199Smrg	        deplib=$func_resolve_sysroot_result
702765eef222Smrg	        func_dirname "$deplib" "" "."
7028200d7199Smrg		dir=$func_dirname_result
702965eef222Smrg		# We need an absolute path.
703065eef222Smrg		case $dir in
703165eef222Smrg		[\\/]* | [A-Za-z]:[\\/]*) absdir="$dir" ;;
703265eef222Smrg		*)
703365eef222Smrg		  absdir=`cd "$dir" && pwd`
703465eef222Smrg		  if test -z "$absdir"; then
703565eef222Smrg		    func_warning "cannot determine absolute directory name of \`$dir'"
703665eef222Smrg		    absdir="$dir"
703765eef222Smrg		  fi
703865eef222Smrg		  ;;
703965eef222Smrg		esac
704065eef222Smrg		if $GREP "^installed=no" $deplib > /dev/null; then
704165eef222Smrg		case $host in
704265eef222Smrg		*-*-darwin*)
704365eef222Smrg		  depdepl=
704465eef222Smrg		  eval deplibrary_names=`${SED} -n -e 's/^library_names=\(.*\)$/\1/p' $deplib`
704565eef222Smrg		  if test -n "$deplibrary_names" ; then
704665eef222Smrg		    for tmp in $deplibrary_names ; do
704765eef222Smrg		      depdepl=$tmp
704865eef222Smrg		    done
704965eef222Smrg		    if test -f "$absdir/$objdir/$depdepl" ; then
705065eef222Smrg		      depdepl="$absdir/$objdir/$depdepl"
705165eef222Smrg		      darwin_install_name=`${OTOOL} -L $depdepl | awk '{if (NR == 2) {print $1;exit}}'`
705265eef222Smrg                      if test -z "$darwin_install_name"; then
705365eef222Smrg                          darwin_install_name=`${OTOOL64} -L $depdepl  | awk '{if (NR == 2) {print $1;exit}}'`
705465eef222Smrg                      fi
7055200d7199Smrg		      func_append compiler_flags " ${wl}-dylib_file ${wl}${darwin_install_name}:${depdepl}"
7056200d7199Smrg		      func_append linker_flags " -dylib_file ${darwin_install_name}:${depdepl}"
705765eef222Smrg		      path=
705865eef222Smrg		    fi
705965eef222Smrg		  fi
706065eef222Smrg		  ;;
706165eef222Smrg		*)
706265eef222Smrg		  path="-L$absdir/$objdir"
706365eef222Smrg		  ;;
706465eef222Smrg		esac
706565eef222Smrg		else
706665eef222Smrg		  eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $deplib`
706765eef222Smrg		  test -z "$libdir" && \
706865eef222Smrg		    func_fatal_error "\`$deplib' is not a valid libtool archive"
706965eef222Smrg		  test "$absdir" != "$libdir" && \
707065eef222Smrg		    func_warning "\`$deplib' seems to be moved"
707165eef222Smrg
707265eef222Smrg		  path="-L$absdir"
707365eef222Smrg		fi
707465eef222Smrg		;;
707565eef222Smrg	      esac
707665eef222Smrg	      case " $deplibs " in
707765eef222Smrg	      *" $path "*) ;;
707865eef222Smrg	      *) deplibs="$path $deplibs" ;;
707965eef222Smrg	      esac
708065eef222Smrg	    done
708165eef222Smrg	  fi # link_all_deplibs != no
708265eef222Smrg	fi # linkmode = lib
708365eef222Smrg      done # for deplib in $libs
708465eef222Smrg      if test "$pass" = link; then
708565eef222Smrg	if test "$linkmode" = "prog"; then
708665eef222Smrg	  compile_deplibs="$new_inherited_linker_flags $compile_deplibs"
708765eef222Smrg	  finalize_deplibs="$new_inherited_linker_flags $finalize_deplibs"
708865eef222Smrg	else
708956957a04Smrg	  compiler_flags="$compiler_flags "`$ECHO " $new_inherited_linker_flags" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'`
709065eef222Smrg	fi
709165eef222Smrg      fi
709265eef222Smrg      dependency_libs="$newdependency_libs"
709365eef222Smrg      if test "$pass" = dlpreopen; then
709465eef222Smrg	# Link the dlpreopened libraries before other libraries
709565eef222Smrg	for deplib in $save_deplibs; do
709665eef222Smrg	  deplibs="$deplib $deplibs"
709765eef222Smrg	done
709865eef222Smrg      fi
709965eef222Smrg      if test "$pass" != dlopen; then
710065eef222Smrg	if test "$pass" != conv; then
710165eef222Smrg	  # Make sure lib_search_path contains only unique directories.
710265eef222Smrg	  lib_search_path=
710365eef222Smrg	  for dir in $newlib_search_path; do
710465eef222Smrg	    case "$lib_search_path " in
710565eef222Smrg	    *" $dir "*) ;;
7106200d7199Smrg	    *) func_append lib_search_path " $dir" ;;
710765eef222Smrg	    esac
710865eef222Smrg	  done
710965eef222Smrg	  newlib_search_path=
711065eef222Smrg	fi
711165eef222Smrg
711265eef222Smrg	if test "$linkmode,$pass" != "prog,link"; then
711365eef222Smrg	  vars="deplibs"
711465eef222Smrg	else
711565eef222Smrg	  vars="compile_deplibs finalize_deplibs"
711665eef222Smrg	fi
711765eef222Smrg	for var in $vars dependency_libs; do
711865eef222Smrg	  # Add libraries to $var in reverse order
711965eef222Smrg	  eval tmp_libs=\"\$$var\"
712065eef222Smrg	  new_libs=
712165eef222Smrg	  for deplib in $tmp_libs; do
712265eef222Smrg	    # FIXME: Pedantically, this is the right thing to do, so
712365eef222Smrg	    #        that some nasty dependency loop isn't accidentally
712465eef222Smrg	    #        broken:
712565eef222Smrg	    #new_libs="$deplib $new_libs"
712665eef222Smrg	    # Pragmatically, this seems to cause very few problems in
712765eef222Smrg	    # practice:
712865eef222Smrg	    case $deplib in
712965eef222Smrg	    -L*) new_libs="$deplib $new_libs" ;;
713065eef222Smrg	    -R*) ;;
713165eef222Smrg	    *)
713265eef222Smrg	      # And here is the reason: when a library appears more
713365eef222Smrg	      # than once as an explicit dependence of a library, or
713465eef222Smrg	      # is implicitly linked in more than once by the
713565eef222Smrg	      # compiler, it is considered special, and multiple
713665eef222Smrg	      # occurrences thereof are not removed.  Compare this
713765eef222Smrg	      # with having the same library being listed as a
713865eef222Smrg	      # dependency of multiple other libraries: in this case,
713965eef222Smrg	      # we know (pedantically, we assume) the library does not
714065eef222Smrg	      # need to be listed more than once, so we keep only the
714165eef222Smrg	      # last copy.  This is not always right, but it is rare
714265eef222Smrg	      # enough that we require users that really mean to play
714365eef222Smrg	      # such unportable linking tricks to link the library
714465eef222Smrg	      # using -Wl,-lname, so that libtool does not consider it
714565eef222Smrg	      # for duplicate removal.
714665eef222Smrg	      case " $specialdeplibs " in
714765eef222Smrg	      *" $deplib "*) new_libs="$deplib $new_libs" ;;
714865eef222Smrg	      *)
714965eef222Smrg		case " $new_libs " in
715065eef222Smrg		*" $deplib "*) ;;
715165eef222Smrg		*) new_libs="$deplib $new_libs" ;;
715265eef222Smrg		esac
715365eef222Smrg		;;
715465eef222Smrg	      esac
715565eef222Smrg	      ;;
715665eef222Smrg	    esac
715765eef222Smrg	  done
715865eef222Smrg	  tmp_libs=
715965eef222Smrg	  for deplib in $new_libs; do
716065eef222Smrg	    case $deplib in
716165eef222Smrg	    -L*)
716265eef222Smrg	      case " $tmp_libs " in
716365eef222Smrg	      *" $deplib "*) ;;
7164200d7199Smrg	      *) func_append tmp_libs " $deplib" ;;
716565eef222Smrg	      esac
716665eef222Smrg	      ;;
7167200d7199Smrg	    *) func_append tmp_libs " $deplib" ;;
716865eef222Smrg	    esac
716965eef222Smrg	  done
717065eef222Smrg	  eval $var=\"$tmp_libs\"
717165eef222Smrg	done # for var
717265eef222Smrg      fi
717365eef222Smrg      # Last step: remove runtime libs from dependency_libs
717465eef222Smrg      # (they stay in deplibs)
717565eef222Smrg      tmp_libs=
717665eef222Smrg      for i in $dependency_libs ; do
717765eef222Smrg	case " $predeps $postdeps $compiler_lib_search_path " in
717865eef222Smrg	*" $i "*)
717965eef222Smrg	  i=""
718065eef222Smrg	  ;;
718165eef222Smrg	esac
718265eef222Smrg	if test -n "$i" ; then
7183200d7199Smrg	  func_append tmp_libs " $i"
718465eef222Smrg	fi
718565eef222Smrg      done
718665eef222Smrg      dependency_libs=$tmp_libs
718765eef222Smrg    done # for pass
718865eef222Smrg    if test "$linkmode" = prog; then
718965eef222Smrg      dlfiles="$newdlfiles"
719065eef222Smrg    fi
719165eef222Smrg    if test "$linkmode" = prog || test "$linkmode" = lib; then
719265eef222Smrg      dlprefiles="$newdlprefiles"
719365eef222Smrg    fi
719465eef222Smrg
719565eef222Smrg    case $linkmode in
719665eef222Smrg    oldlib)
719765eef222Smrg      if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then
719865eef222Smrg	func_warning "\`-dlopen' is ignored for archives"
719965eef222Smrg      fi
720065eef222Smrg
720165eef222Smrg      case " $deplibs" in
720265eef222Smrg      *\ -l* | *\ -L*)
720365eef222Smrg	func_warning "\`-l' and \`-L' are ignored for archives" ;;
720465eef222Smrg      esac
720565eef222Smrg
720665eef222Smrg      test -n "$rpath" && \
720765eef222Smrg	func_warning "\`-rpath' is ignored for archives"
720865eef222Smrg
720965eef222Smrg      test -n "$xrpath" && \
721065eef222Smrg	func_warning "\`-R' is ignored for archives"
721165eef222Smrg
721265eef222Smrg      test -n "$vinfo" && \
721365eef222Smrg	func_warning "\`-version-info/-version-number' is ignored for archives"
721465eef222Smrg
721565eef222Smrg      test -n "$release" && \
721665eef222Smrg	func_warning "\`-release' is ignored for archives"
721765eef222Smrg
721865eef222Smrg      test -n "$export_symbols$export_symbols_regex" && \
721965eef222Smrg	func_warning "\`-export-symbols' is ignored for archives"
722065eef222Smrg
722165eef222Smrg      # Now set the variables for building old libraries.
722265eef222Smrg      build_libtool_libs=no
722365eef222Smrg      oldlibs="$output"
7224200d7199Smrg      func_append objs "$old_deplibs"
722565eef222Smrg      ;;
722665eef222Smrg
722765eef222Smrg    lib)
722865eef222Smrg      # Make sure we only generate libraries of the form `libNAME.la'.
722965eef222Smrg      case $outputname in
723065eef222Smrg      lib*)
723165eef222Smrg	func_stripname 'lib' '.la' "$outputname"
723265eef222Smrg	name=$func_stripname_result
723365eef222Smrg	eval shared_ext=\"$shrext_cmds\"
723465eef222Smrg	eval libname=\"$libname_spec\"
723565eef222Smrg	;;
723665eef222Smrg      *)
723765eef222Smrg	test "$module" = no && \
723865eef222Smrg	  func_fatal_help "libtool library \`$output' must begin with \`lib'"
723965eef222Smrg
724065eef222Smrg	if test "$need_lib_prefix" != no; then
724165eef222Smrg	  # Add the "lib" prefix for modules if required
724265eef222Smrg	  func_stripname '' '.la' "$outputname"
724365eef222Smrg	  name=$func_stripname_result
724465eef222Smrg	  eval shared_ext=\"$shrext_cmds\"
724565eef222Smrg	  eval libname=\"$libname_spec\"
724665eef222Smrg	else
724765eef222Smrg	  func_stripname '' '.la' "$outputname"
724865eef222Smrg	  libname=$func_stripname_result
724965eef222Smrg	fi
725065eef222Smrg	;;
725165eef222Smrg      esac
725265eef222Smrg
725365eef222Smrg      if test -n "$objs"; then
725465eef222Smrg	if test "$deplibs_check_method" != pass_all; then
725565eef222Smrg	  func_fatal_error "cannot build libtool library \`$output' from non-libtool objects on this host:$objs"
725665eef222Smrg	else
725756957a04Smrg	  echo
725865eef222Smrg	  $ECHO "*** Warning: Linking the shared library $output against the non-libtool"
725965eef222Smrg	  $ECHO "*** objects $objs is not portable!"
7260200d7199Smrg	  func_append libobjs " $objs"
726165eef222Smrg	fi
726265eef222Smrg      fi
726365eef222Smrg
726465eef222Smrg      test "$dlself" != no && \
726565eef222Smrg	func_warning "\`-dlopen self' is ignored for libtool libraries"
726665eef222Smrg
726765eef222Smrg      set dummy $rpath
726865eef222Smrg      shift
726965eef222Smrg      test "$#" -gt 1 && \
727065eef222Smrg	func_warning "ignoring multiple \`-rpath's for a libtool library"
727165eef222Smrg
727265eef222Smrg      install_libdir="$1"
727365eef222Smrg
727465eef222Smrg      oldlibs=
727565eef222Smrg      if test -z "$rpath"; then
727665eef222Smrg	if test "$build_libtool_libs" = yes; then
727765eef222Smrg	  # Building a libtool convenience library.
727865eef222Smrg	  # Some compilers have problems with a `.al' extension so
727965eef222Smrg	  # convenience libraries should have the same extension an
728065eef222Smrg	  # archive normally would.
728165eef222Smrg	  oldlibs="$output_objdir/$libname.$libext $oldlibs"
728265eef222Smrg	  build_libtool_libs=convenience
728365eef222Smrg	  build_old_libs=yes
728465eef222Smrg	fi
728565eef222Smrg
728665eef222Smrg	test -n "$vinfo" && \
728765eef222Smrg	  func_warning "\`-version-info/-version-number' is ignored for convenience libraries"
728865eef222Smrg
728965eef222Smrg	test -n "$release" && \
729065eef222Smrg	  func_warning "\`-release' is ignored for convenience libraries"
729165eef222Smrg      else
729265eef222Smrg
729365eef222Smrg	# Parse the version information argument.
729465eef222Smrg	save_ifs="$IFS"; IFS=':'
729565eef222Smrg	set dummy $vinfo 0 0 0
729665eef222Smrg	shift
729765eef222Smrg	IFS="$save_ifs"
729865eef222Smrg
729965eef222Smrg	test -n "$7" && \
730065eef222Smrg	  func_fatal_help "too many parameters to \`-version-info'"
730165eef222Smrg
730265eef222Smrg	# convert absolute version numbers to libtool ages
730365eef222Smrg	# this retains compatibility with .la files and attempts
730465eef222Smrg	# to make the code below a bit more comprehensible
730565eef222Smrg
730665eef222Smrg	case $vinfo_number in
730765eef222Smrg	yes)
730865eef222Smrg	  number_major="$1"
730965eef222Smrg	  number_minor="$2"
731065eef222Smrg	  number_revision="$3"
731165eef222Smrg	  #
731265eef222Smrg	  # There are really only two kinds -- those that
731365eef222Smrg	  # use the current revision as the major version
731465eef222Smrg	  # and those that subtract age and use age as
731565eef222Smrg	  # a minor version.  But, then there is irix
731665eef222Smrg	  # which has an extra 1 added just for fun
731765eef222Smrg	  #
731865eef222Smrg	  case $version_type in
731965eef222Smrg	  darwin|linux|osf|windows|none)
732065eef222Smrg	    func_arith $number_major + $number_minor
732165eef222Smrg	    current=$func_arith_result
732265eef222Smrg	    age="$number_minor"
732365eef222Smrg	    revision="$number_revision"
732465eef222Smrg	    ;;
732556957a04Smrg	  freebsd-aout|freebsd-elf|qnx|sunos)
732665eef222Smrg	    current="$number_major"
732765eef222Smrg	    revision="$number_minor"
732865eef222Smrg	    age="0"
732965eef222Smrg	    ;;
733065eef222Smrg	  irix|nonstopux)
733165eef222Smrg	    func_arith $number_major + $number_minor
733265eef222Smrg	    current=$func_arith_result
733365eef222Smrg	    age="$number_minor"
733465eef222Smrg	    revision="$number_minor"
733565eef222Smrg	    lt_irix_increment=no
733665eef222Smrg	    ;;
733765eef222Smrg	  esac
733865eef222Smrg	  ;;
733965eef222Smrg	no)
734065eef222Smrg	  current="$1"
734165eef222Smrg	  revision="$2"
734265eef222Smrg	  age="$3"
734365eef222Smrg	  ;;
734465eef222Smrg	esac
734565eef222Smrg
734665eef222Smrg	# Check that each of the things are valid numbers.
734765eef222Smrg	case $current in
734865eef222Smrg	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]) ;;
734965eef222Smrg	*)
735065eef222Smrg	  func_error "CURRENT \`$current' must be a nonnegative integer"
735165eef222Smrg	  func_fatal_error "\`$vinfo' is not valid version information"
735265eef222Smrg	  ;;
735365eef222Smrg	esac
735465eef222Smrg
735565eef222Smrg	case $revision in
735665eef222Smrg	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]) ;;
735765eef222Smrg	*)
735865eef222Smrg	  func_error "REVISION \`$revision' must be a nonnegative integer"
735965eef222Smrg	  func_fatal_error "\`$vinfo' is not valid version information"
736065eef222Smrg	  ;;
736165eef222Smrg	esac
736265eef222Smrg
736365eef222Smrg	case $age in
736465eef222Smrg	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]) ;;
736565eef222Smrg	*)
736665eef222Smrg	  func_error "AGE \`$age' must be a nonnegative integer"
736765eef222Smrg	  func_fatal_error "\`$vinfo' is not valid version information"
736865eef222Smrg	  ;;
736965eef222Smrg	esac
737065eef222Smrg
737165eef222Smrg	if test "$age" -gt "$current"; then
737265eef222Smrg	  func_error "AGE \`$age' is greater than the current interface number \`$current'"
737365eef222Smrg	  func_fatal_error "\`$vinfo' is not valid version information"
737465eef222Smrg	fi
737565eef222Smrg
737665eef222Smrg	# Calculate the version variables.
737765eef222Smrg	major=
737865eef222Smrg	versuffix=
737965eef222Smrg	verstring=
738065eef222Smrg	case $version_type in
738165eef222Smrg	none) ;;
738265eef222Smrg
738365eef222Smrg	darwin)
738465eef222Smrg	  # Like Linux, but with the current version available in
738565eef222Smrg	  # verstring for coding it into the library header
738665eef222Smrg	  func_arith $current - $age
738765eef222Smrg	  major=.$func_arith_result
738865eef222Smrg	  versuffix="$major.$age.$revision"
738965eef222Smrg	  # Darwin ld doesn't like 0 for these options...
739065eef222Smrg	  func_arith $current + 1
739165eef222Smrg	  minor_current=$func_arith_result
739265eef222Smrg	  xlcverstring="${wl}-compatibility_version ${wl}$minor_current ${wl}-current_version ${wl}$minor_current.$revision"
739365eef222Smrg	  verstring="-compatibility_version $minor_current -current_version $minor_current.$revision"
739465eef222Smrg	  ;;
739565eef222Smrg
739665eef222Smrg	freebsd-aout)
739765eef222Smrg	  major=".$current"
739865eef222Smrg	  versuffix=".$current.$revision";
739965eef222Smrg	  ;;
740065eef222Smrg
740165eef222Smrg	freebsd-elf)
740265eef222Smrg	  major=".$current"
740365eef222Smrg	  versuffix=".$current"
740465eef222Smrg	  ;;
740565eef222Smrg
740665eef222Smrg	irix | nonstopux)
740765eef222Smrg	  if test "X$lt_irix_increment" = "Xno"; then
740865eef222Smrg	    func_arith $current - $age
740965eef222Smrg	  else
741065eef222Smrg	    func_arith $current - $age + 1
741165eef222Smrg	  fi
741265eef222Smrg	  major=$func_arith_result
741365eef222Smrg
741465eef222Smrg	  case $version_type in
741565eef222Smrg	    nonstopux) verstring_prefix=nonstopux ;;
741665eef222Smrg	    *)         verstring_prefix=sgi ;;
741765eef222Smrg	  esac
741865eef222Smrg	  verstring="$verstring_prefix$major.$revision"
741965eef222Smrg
742065eef222Smrg	  # Add in all the interfaces that we are compatible with.
742165eef222Smrg	  loop=$revision
742265eef222Smrg	  while test "$loop" -ne 0; do
742365eef222Smrg	    func_arith $revision - $loop
742465eef222Smrg	    iface=$func_arith_result
742565eef222Smrg	    func_arith $loop - 1
742665eef222Smrg	    loop=$func_arith_result
742765eef222Smrg	    verstring="$verstring_prefix$major.$iface:$verstring"
742865eef222Smrg	  done
742965eef222Smrg
743065eef222Smrg	  # Before this point, $major must not contain `.'.
743165eef222Smrg	  major=.$major
743265eef222Smrg	  versuffix="$major.$revision"
743365eef222Smrg	  ;;
743465eef222Smrg
743565eef222Smrg	linux)
743665eef222Smrg	  func_arith $current - $age
743765eef222Smrg	  major=.$func_arith_result
743865eef222Smrg	  versuffix="$major.$age.$revision"
743965eef222Smrg	  ;;
744065eef222Smrg
744165eef222Smrg	osf)
744265eef222Smrg	  func_arith $current - $age
744365eef222Smrg	  major=.$func_arith_result
744465eef222Smrg	  versuffix=".$current.$age.$revision"
744565eef222Smrg	  verstring="$current.$age.$revision"
744665eef222Smrg
744765eef222Smrg	  # Add in all the interfaces that we are compatible with.
744865eef222Smrg	  loop=$age
744965eef222Smrg	  while test "$loop" -ne 0; do
745065eef222Smrg	    func_arith $current - $loop
745165eef222Smrg	    iface=$func_arith_result
745265eef222Smrg	    func_arith $loop - 1
745365eef222Smrg	    loop=$func_arith_result
745465eef222Smrg	    verstring="$verstring:${iface}.0"
745565eef222Smrg	  done
745665eef222Smrg
745765eef222Smrg	  # Make executables depend on our current version.
7458200d7199Smrg	  func_append verstring ":${current}.0"
745965eef222Smrg	  ;;
746065eef222Smrg
746165eef222Smrg	qnx)
746265eef222Smrg	  major=".$current"
746365eef222Smrg	  versuffix=".$current"
746465eef222Smrg	  ;;
746565eef222Smrg
746665eef222Smrg	sunos)
746765eef222Smrg	  major=".$current"
746865eef222Smrg	  versuffix=".$current.$revision"
746965eef222Smrg	  ;;
747065eef222Smrg
747165eef222Smrg	windows)
747265eef222Smrg	  # Use '-' rather than '.', since we only want one
747365eef222Smrg	  # extension on DOS 8.3 filesystems.
747465eef222Smrg	  func_arith $current - $age
747565eef222Smrg	  major=$func_arith_result
747665eef222Smrg	  versuffix="-$major"
747765eef222Smrg	  ;;
747865eef222Smrg
747965eef222Smrg	*)
748065eef222Smrg	  func_fatal_configuration "unknown library version type \`$version_type'"
748165eef222Smrg	  ;;
748265eef222Smrg	esac
748365eef222Smrg
748465eef222Smrg	# Clear the version info if we defaulted, and they specified a release.
748565eef222Smrg	if test -z "$vinfo" && test -n "$release"; then
748665eef222Smrg	  major=
748765eef222Smrg	  case $version_type in
748865eef222Smrg	  darwin)
748965eef222Smrg	    # we can't check for "0.0" in archive_cmds due to quoting
749065eef222Smrg	    # problems, so we reset it completely
749165eef222Smrg	    verstring=
749265eef222Smrg	    ;;
749365eef222Smrg	  *)
749465eef222Smrg	    verstring="0.0"
749565eef222Smrg	    ;;
749665eef222Smrg	  esac
749765eef222Smrg	  if test "$need_version" = no; then
749865eef222Smrg	    versuffix=
749965eef222Smrg	  else
750065eef222Smrg	    versuffix=".0.0"
750165eef222Smrg	  fi
750265eef222Smrg	fi
750365eef222Smrg
750465eef222Smrg	# Remove version info from name if versioning should be avoided
750565eef222Smrg	if test "$avoid_version" = yes && test "$need_version" = no; then
750665eef222Smrg	  major=
750765eef222Smrg	  versuffix=
750865eef222Smrg	  verstring=""
750965eef222Smrg	fi
751065eef222Smrg
751165eef222Smrg	# Check to see if the archive will have undefined symbols.
751265eef222Smrg	if test "$allow_undefined" = yes; then
751365eef222Smrg	  if test "$allow_undefined_flag" = unsupported; then
751465eef222Smrg	    func_warning "undefined symbols not allowed in $host shared libraries"
751565eef222Smrg	    build_libtool_libs=no
751665eef222Smrg	    build_old_libs=yes
751765eef222Smrg	  fi
751865eef222Smrg	else
751965eef222Smrg	  # Don't allow undefined symbols.
752065eef222Smrg	  allow_undefined_flag="$no_undefined_flag"
752165eef222Smrg	fi
752265eef222Smrg
752365eef222Smrg      fi
752465eef222Smrg
752565eef222Smrg      func_generate_dlsyms "$libname" "$libname" "yes"
7526200d7199Smrg      func_append libobjs " $symfileobj"
752765eef222Smrg      test "X$libobjs" = "X " && libobjs=
752865eef222Smrg
7529200d7199Smrg      if test "$opt_mode" != relink; then
753065eef222Smrg	# Remove our outputs, but don't remove object files since they
753165eef222Smrg	# may have been created when compiling PIC objects.
753265eef222Smrg	removelist=
753365eef222Smrg	tempremovelist=`$ECHO "$output_objdir/*"`
753465eef222Smrg	for p in $tempremovelist; do
753565eef222Smrg	  case $p in
753665eef222Smrg	    *.$objext | *.gcno)
753765eef222Smrg	       ;;
753865eef222Smrg	    $output_objdir/$outputname | $output_objdir/$libname.* | $output_objdir/${libname}${release}.*)
753965eef222Smrg	       if test "X$precious_files_regex" != "X"; then
754065eef222Smrg		 if $ECHO "$p" | $EGREP -e "$precious_files_regex" >/dev/null 2>&1
754165eef222Smrg		 then
754265eef222Smrg		   continue
754365eef222Smrg		 fi
754465eef222Smrg	       fi
7545200d7199Smrg	       func_append removelist " $p"
754665eef222Smrg	       ;;
754765eef222Smrg	    *) ;;
754865eef222Smrg	  esac
754965eef222Smrg	done
755065eef222Smrg	test -n "$removelist" && \
755165eef222Smrg	  func_show_eval "${RM}r \$removelist"
755265eef222Smrg      fi
755365eef222Smrg
755465eef222Smrg      # Now set the variables for building old libraries.
755565eef222Smrg      if test "$build_old_libs" = yes && test "$build_libtool_libs" != convenience ; then
7556200d7199Smrg	func_append oldlibs " $output_objdir/$libname.$libext"
755765eef222Smrg
755865eef222Smrg	# Transform .lo files to .o files.
755956957a04Smrg	oldobjs="$objs "`$ECHO "$libobjs" | $SP2NL | $SED "/\.${libext}$/d; $lo2o" | $NL2SP`
756065eef222Smrg      fi
756165eef222Smrg
756265eef222Smrg      # Eliminate all temporary directories.
756365eef222Smrg      #for path in $notinst_path; do
756456957a04Smrg      #	lib_search_path=`$ECHO "$lib_search_path " | $SED "s% $path % %g"`
756556957a04Smrg      #	deplibs=`$ECHO "$deplibs " | $SED "s% -L$path % %g"`
756656957a04Smrg      #	dependency_libs=`$ECHO "$dependency_libs " | $SED "s% -L$path % %g"`
756765eef222Smrg      #done
756865eef222Smrg
756965eef222Smrg      if test -n "$xrpath"; then
757065eef222Smrg	# If the user specified any rpath flags, then add them.
757165eef222Smrg	temp_xrpath=
757265eef222Smrg	for libdir in $xrpath; do
7573200d7199Smrg	  func_replace_sysroot "$libdir"
7574200d7199Smrg	  func_append temp_xrpath " -R$func_replace_sysroot_result"
757565eef222Smrg	  case "$finalize_rpath " in
757665eef222Smrg	  *" $libdir "*) ;;
7577200d7199Smrg	  *) func_append finalize_rpath " $libdir" ;;
757865eef222Smrg	  esac
757965eef222Smrg	done
758065eef222Smrg	if test "$hardcode_into_libs" != yes || test "$build_old_libs" = yes; then
758165eef222Smrg	  dependency_libs="$temp_xrpath $dependency_libs"
758265eef222Smrg	fi
758365eef222Smrg      fi
758465eef222Smrg
758565eef222Smrg      # Make sure dlfiles contains only unique files that won't be dlpreopened
758665eef222Smrg      old_dlfiles="$dlfiles"
758765eef222Smrg      dlfiles=
758865eef222Smrg      for lib in $old_dlfiles; do
758965eef222Smrg	case " $dlprefiles $dlfiles " in
759065eef222Smrg	*" $lib "*) ;;
7591200d7199Smrg	*) func_append dlfiles " $lib" ;;
759265eef222Smrg	esac
759365eef222Smrg      done
759465eef222Smrg
759565eef222Smrg      # Make sure dlprefiles contains only unique files
759665eef222Smrg      old_dlprefiles="$dlprefiles"
759765eef222Smrg      dlprefiles=
759865eef222Smrg      for lib in $old_dlprefiles; do
759965eef222Smrg	case "$dlprefiles " in
760065eef222Smrg	*" $lib "*) ;;
7601200d7199Smrg	*) func_append dlprefiles " $lib" ;;
760265eef222Smrg	esac
760365eef222Smrg      done
760465eef222Smrg
760565eef222Smrg      if test "$build_libtool_libs" = yes; then
760665eef222Smrg	if test -n "$rpath"; then
760765eef222Smrg	  case $host in
760856957a04Smrg	  *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-*-beos* | *-cegcc* | *-*-haiku*)
760965eef222Smrg	    # these systems don't actually have a c library (as such)!
761065eef222Smrg	    ;;
761165eef222Smrg	  *-*-rhapsody* | *-*-darwin1.[012])
761265eef222Smrg	    # Rhapsody C library is in the System framework
7613200d7199Smrg	    func_append deplibs " System.ltframework"
761465eef222Smrg	    ;;
761565eef222Smrg	  *-*-netbsd*)
761665eef222Smrg	    # Don't link with libc until the a.out ld.so is fixed.
761765eef222Smrg	    ;;
761865eef222Smrg	  *-*-openbsd* | *-*-freebsd* | *-*-dragonfly*)
761965eef222Smrg	    # Do not include libc due to us having libc/libc_r.
762065eef222Smrg	    ;;
762165eef222Smrg	  *-*-sco3.2v5* | *-*-sco5v6*)
762265eef222Smrg	    # Causes problems with __ctype
762365eef222Smrg	    ;;
762465eef222Smrg	  *-*-sysv4.2uw2* | *-*-sysv5* | *-*-unixware* | *-*-OpenUNIX*)
762565eef222Smrg	    # Compiler inserts libc in the correct place for threads to work
762665eef222Smrg	    ;;
762765eef222Smrg	  *)
762865eef222Smrg	    # Add libc to deplibs on all other systems if necessary.
762965eef222Smrg	    if test "$build_libtool_need_lc" = "yes"; then
7630200d7199Smrg	      func_append deplibs " -lc"
763165eef222Smrg	    fi
763265eef222Smrg	    ;;
763365eef222Smrg	  esac
763465eef222Smrg	fi
763565eef222Smrg
763665eef222Smrg	# Transform deplibs into only deplibs that can be linked in shared.
763765eef222Smrg	name_save=$name
763865eef222Smrg	libname_save=$libname
763965eef222Smrg	release_save=$release
764065eef222Smrg	versuffix_save=$versuffix
764165eef222Smrg	major_save=$major
764265eef222Smrg	# I'm not sure if I'm treating the release correctly.  I think
764365eef222Smrg	# release should show up in the -l (ie -lgmp5) so we don't want to
764465eef222Smrg	# add it in twice.  Is that correct?
764565eef222Smrg	release=""
764665eef222Smrg	versuffix=""
764765eef222Smrg	major=""
764865eef222Smrg	newdeplibs=
764965eef222Smrg	droppeddeps=no
765065eef222Smrg	case $deplibs_check_method in
765165eef222Smrg	pass_all)
765265eef222Smrg	  # Don't check for shared/static.  Everything works.
765365eef222Smrg	  # This might be a little naive.  We might want to check
765465eef222Smrg	  # whether the library exists or not.  But this is on
765565eef222Smrg	  # osf3 & osf4 and I'm not really sure... Just
765665eef222Smrg	  # implementing what was already the behavior.
765765eef222Smrg	  newdeplibs=$deplibs
765865eef222Smrg	  ;;
765965eef222Smrg	test_compile)
766065eef222Smrg	  # This code stresses the "libraries are programs" paradigm to its
766165eef222Smrg	  # limits. Maybe even breaks it.  We compile a program, linking it
766265eef222Smrg	  # against the deplibs as a proxy for the library.  Then we can check
766365eef222Smrg	  # whether they linked in statically or dynamically with ldd.
766465eef222Smrg	  $opt_dry_run || $RM conftest.c
766565eef222Smrg	  cat > conftest.c <<EOF
766665eef222Smrg	  int main() { return 0; }
766765eef222SmrgEOF
766865eef222Smrg	  $opt_dry_run || $RM conftest
766965eef222Smrg	  if $LTCC $LTCFLAGS -o conftest conftest.c $deplibs; then
767065eef222Smrg	    ldd_output=`ldd conftest`
767165eef222Smrg	    for i in $deplibs; do
767265eef222Smrg	      case $i in
767365eef222Smrg	      -l*)
767465eef222Smrg		func_stripname -l '' "$i"
767565eef222Smrg		name=$func_stripname_result
767665eef222Smrg		if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then
767765eef222Smrg		  case " $predeps $postdeps " in
767865eef222Smrg		  *" $i "*)
7679200d7199Smrg		    func_append newdeplibs " $i"
768065eef222Smrg		    i=""
768165eef222Smrg		    ;;
768265eef222Smrg		  esac
768365eef222Smrg		fi
768465eef222Smrg		if test -n "$i" ; then
768565eef222Smrg		  libname=`eval "\\$ECHO \"$libname_spec\""`
768665eef222Smrg		  deplib_matches=`eval "\\$ECHO \"$library_names_spec\""`
768765eef222Smrg		  set dummy $deplib_matches; shift
768865eef222Smrg		  deplib_match=$1
768965eef222Smrg		  if test `expr "$ldd_output" : ".*$deplib_match"` -ne 0 ; then
7690200d7199Smrg		    func_append newdeplibs " $i"
769165eef222Smrg		  else
769265eef222Smrg		    droppeddeps=yes
769356957a04Smrg		    echo
769465eef222Smrg		    $ECHO "*** Warning: dynamic linker does not accept needed library $i."
769556957a04Smrg		    echo "*** I have the capability to make that library automatically link in when"
769656957a04Smrg		    echo "*** you link to this library.  But I can only do this if you have a"
769756957a04Smrg		    echo "*** shared version of the library, which I believe you do not have"
769856957a04Smrg		    echo "*** because a test_compile did reveal that the linker did not use it for"
769956957a04Smrg		    echo "*** its dynamic dependency list that programs get resolved with at runtime."
770065eef222Smrg		  fi
770165eef222Smrg		fi
770265eef222Smrg		;;
770365eef222Smrg	      *)
7704200d7199Smrg		func_append newdeplibs " $i"
770565eef222Smrg		;;
770665eef222Smrg	      esac
770765eef222Smrg	    done
770865eef222Smrg	  else
770965eef222Smrg	    # Error occurred in the first compile.  Let's try to salvage
771065eef222Smrg	    # the situation: Compile a separate program for each library.
771165eef222Smrg	    for i in $deplibs; do
771265eef222Smrg	      case $i in
771365eef222Smrg	      -l*)
771465eef222Smrg		func_stripname -l '' "$i"
771565eef222Smrg		name=$func_stripname_result
771665eef222Smrg		$opt_dry_run || $RM conftest
771765eef222Smrg		if $LTCC $LTCFLAGS -o conftest conftest.c $i; then
771865eef222Smrg		  ldd_output=`ldd conftest`
771965eef222Smrg		  if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then
772065eef222Smrg		    case " $predeps $postdeps " in
772165eef222Smrg		    *" $i "*)
7722200d7199Smrg		      func_append newdeplibs " $i"
772365eef222Smrg		      i=""
772465eef222Smrg		      ;;
772565eef222Smrg		    esac
772665eef222Smrg		  fi
772765eef222Smrg		  if test -n "$i" ; then
772865eef222Smrg		    libname=`eval "\\$ECHO \"$libname_spec\""`
772965eef222Smrg		    deplib_matches=`eval "\\$ECHO \"$library_names_spec\""`
773065eef222Smrg		    set dummy $deplib_matches; shift
773165eef222Smrg		    deplib_match=$1
773265eef222Smrg		    if test `expr "$ldd_output" : ".*$deplib_match"` -ne 0 ; then
7733200d7199Smrg		      func_append newdeplibs " $i"
773465eef222Smrg		    else
773565eef222Smrg		      droppeddeps=yes
773656957a04Smrg		      echo
773765eef222Smrg		      $ECHO "*** Warning: dynamic linker does not accept needed library $i."
773856957a04Smrg		      echo "*** I have the capability to make that library automatically link in when"
773956957a04Smrg		      echo "*** you link to this library.  But I can only do this if you have a"
774056957a04Smrg		      echo "*** shared version of the library, which you do not appear to have"
774156957a04Smrg		      echo "*** because a test_compile did reveal that the linker did not use this one"
774256957a04Smrg		      echo "*** as a dynamic dependency that programs can get resolved with at runtime."
774365eef222Smrg		    fi
774465eef222Smrg		  fi
774565eef222Smrg		else
774665eef222Smrg		  droppeddeps=yes
774756957a04Smrg		  echo
774865eef222Smrg		  $ECHO "*** Warning!  Library $i is needed by this library but I was not able to"
774956957a04Smrg		  echo "*** make it link in!  You will probably need to install it or some"
775056957a04Smrg		  echo "*** library that it depends on before this library will be fully"
775156957a04Smrg		  echo "*** functional.  Installing it before continuing would be even better."
775265eef222Smrg		fi
775365eef222Smrg		;;
775465eef222Smrg	      *)
7755200d7199Smrg		func_append newdeplibs " $i"
775665eef222Smrg		;;
775765eef222Smrg	      esac
775865eef222Smrg	    done
775965eef222Smrg	  fi
776065eef222Smrg	  ;;
776165eef222Smrg	file_magic*)
776265eef222Smrg	  set dummy $deplibs_check_method; shift
776365eef222Smrg	  file_magic_regex=`expr "$deplibs_check_method" : "$1 \(.*\)"`
776465eef222Smrg	  for a_deplib in $deplibs; do
776565eef222Smrg	    case $a_deplib in
776665eef222Smrg	    -l*)
776765eef222Smrg	      func_stripname -l '' "$a_deplib"
776865eef222Smrg	      name=$func_stripname_result
776965eef222Smrg	      if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then
777065eef222Smrg		case " $predeps $postdeps " in
777165eef222Smrg		*" $a_deplib "*)
7772200d7199Smrg		  func_append newdeplibs " $a_deplib"
777365eef222Smrg		  a_deplib=""
777465eef222Smrg		  ;;
777565eef222Smrg		esac
777665eef222Smrg	      fi
777765eef222Smrg	      if test -n "$a_deplib" ; then
777865eef222Smrg		libname=`eval "\\$ECHO \"$libname_spec\""`
7779200d7199Smrg		if test -n "$file_magic_glob"; then
7780200d7199Smrg		  libnameglob=`func_echo_all "$libname" | $SED -e $file_magic_glob`
7781200d7199Smrg		else
7782200d7199Smrg		  libnameglob=$libname
7783200d7199Smrg		fi
7784200d7199Smrg		test "$want_nocaseglob" = yes && nocaseglob=`shopt -p nocaseglob`
778565eef222Smrg		for i in $lib_search_path $sys_lib_search_path $shlib_search_path; do
7786200d7199Smrg		  if test "$want_nocaseglob" = yes; then
7787200d7199Smrg		    shopt -s nocaseglob
7788200d7199Smrg		    potential_libs=`ls $i/$libnameglob[.-]* 2>/dev/null`
7789200d7199Smrg		    $nocaseglob
7790200d7199Smrg		  else
7791200d7199Smrg		    potential_libs=`ls $i/$libnameglob[.-]* 2>/dev/null`
7792200d7199Smrg		  fi
779365eef222Smrg		  for potent_lib in $potential_libs; do
779465eef222Smrg		      # Follow soft links.
779565eef222Smrg		      if ls -lLd "$potent_lib" 2>/dev/null |
779665eef222Smrg			 $GREP " -> " >/dev/null; then
779765eef222Smrg			continue
779865eef222Smrg		      fi
779965eef222Smrg		      # The statement above tries to avoid entering an
780065eef222Smrg		      # endless loop below, in case of cyclic links.
780165eef222Smrg		      # We might still enter an endless loop, since a link
780265eef222Smrg		      # loop can be closed while we follow links,
780365eef222Smrg		      # but so what?
780465eef222Smrg		      potlib="$potent_lib"
780565eef222Smrg		      while test -h "$potlib" 2>/dev/null; do
780665eef222Smrg			potliblink=`ls -ld $potlib | ${SED} 's/.* -> //'`
780765eef222Smrg			case $potliblink in
780865eef222Smrg			[\\/]* | [A-Za-z]:[\\/]*) potlib="$potliblink";;
780956957a04Smrg			*) potlib=`$ECHO "$potlib" | $SED 's,[^/]*$,,'`"$potliblink";;
781065eef222Smrg			esac
781165eef222Smrg		      done
781265eef222Smrg		      if eval $file_magic_cmd \"\$potlib\" 2>/dev/null |
781365eef222Smrg			 $SED -e 10q |
781465eef222Smrg			 $EGREP "$file_magic_regex" > /dev/null; then
7815200d7199Smrg			func_append newdeplibs " $a_deplib"
781665eef222Smrg			a_deplib=""
781765eef222Smrg			break 2
781865eef222Smrg		      fi
781965eef222Smrg		  done
782065eef222Smrg		done
782165eef222Smrg	      fi
782265eef222Smrg	      if test -n "$a_deplib" ; then
782365eef222Smrg		droppeddeps=yes
782456957a04Smrg		echo
782565eef222Smrg		$ECHO "*** Warning: linker path does not have real file for library $a_deplib."
782656957a04Smrg		echo "*** I have the capability to make that library automatically link in when"
782756957a04Smrg		echo "*** you link to this library.  But I can only do this if you have a"
782856957a04Smrg		echo "*** shared version of the library, which you do not appear to have"
782956957a04Smrg		echo "*** because I did check the linker path looking for a file starting"
783065eef222Smrg		if test -z "$potlib" ; then
783165eef222Smrg		  $ECHO "*** with $libname but no candidates were found. (...for file magic test)"
783265eef222Smrg		else
783365eef222Smrg		  $ECHO "*** with $libname and none of the candidates passed a file format test"
783465eef222Smrg		  $ECHO "*** using a file magic. Last file checked: $potlib"
783565eef222Smrg		fi
783665eef222Smrg	      fi
783765eef222Smrg	      ;;
783865eef222Smrg	    *)
783965eef222Smrg	      # Add a -L argument.
7840200d7199Smrg	      func_append newdeplibs " $a_deplib"
784165eef222Smrg	      ;;
784265eef222Smrg	    esac
784365eef222Smrg	  done # Gone through all deplibs.
784465eef222Smrg	  ;;
784565eef222Smrg	match_pattern*)
784665eef222Smrg	  set dummy $deplibs_check_method; shift
784765eef222Smrg	  match_pattern_regex=`expr "$deplibs_check_method" : "$1 \(.*\)"`
784865eef222Smrg	  for a_deplib in $deplibs; do
784965eef222Smrg	    case $a_deplib in
785065eef222Smrg	    -l*)
785165eef222Smrg	      func_stripname -l '' "$a_deplib"
785265eef222Smrg	      name=$func_stripname_result
785365eef222Smrg	      if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then
785465eef222Smrg		case " $predeps $postdeps " in
785565eef222Smrg		*" $a_deplib "*)
7856200d7199Smrg		  func_append newdeplibs " $a_deplib"
785765eef222Smrg		  a_deplib=""
785865eef222Smrg		  ;;
785965eef222Smrg		esac
786065eef222Smrg	      fi
786165eef222Smrg	      if test -n "$a_deplib" ; then
786265eef222Smrg		libname=`eval "\\$ECHO \"$libname_spec\""`
786365eef222Smrg		for i in $lib_search_path $sys_lib_search_path $shlib_search_path; do
786465eef222Smrg		  potential_libs=`ls $i/$libname[.-]* 2>/dev/null`
786565eef222Smrg		  for potent_lib in $potential_libs; do
786665eef222Smrg		    potlib="$potent_lib" # see symlink-check above in file_magic test
786756957a04Smrg		    if eval "\$ECHO \"$potent_lib\"" 2>/dev/null | $SED 10q | \
786865eef222Smrg		       $EGREP "$match_pattern_regex" > /dev/null; then
7869200d7199Smrg		      func_append newdeplibs " $a_deplib"
787065eef222Smrg		      a_deplib=""
787165eef222Smrg		      break 2
787265eef222Smrg		    fi
787365eef222Smrg		  done
787465eef222Smrg		done
787565eef222Smrg	      fi
787665eef222Smrg	      if test -n "$a_deplib" ; then
787765eef222Smrg		droppeddeps=yes
787856957a04Smrg		echo
787965eef222Smrg		$ECHO "*** Warning: linker path does not have real file for library $a_deplib."
788056957a04Smrg		echo "*** I have the capability to make that library automatically link in when"
788156957a04Smrg		echo "*** you link to this library.  But I can only do this if you have a"
788256957a04Smrg		echo "*** shared version of the library, which you do not appear to have"
788356957a04Smrg		echo "*** because I did check the linker path looking for a file starting"
788465eef222Smrg		if test -z "$potlib" ; then
788565eef222Smrg		  $ECHO "*** with $libname but no candidates were found. (...for regex pattern test)"
788665eef222Smrg		else
788765eef222Smrg		  $ECHO "*** with $libname and none of the candidates passed a file format test"
788865eef222Smrg		  $ECHO "*** using a regex pattern. Last file checked: $potlib"
788965eef222Smrg		fi
789065eef222Smrg	      fi
789165eef222Smrg	      ;;
789265eef222Smrg	    *)
789365eef222Smrg	      # Add a -L argument.
7894200d7199Smrg	      func_append newdeplibs " $a_deplib"
789565eef222Smrg	      ;;
789665eef222Smrg	    esac
789765eef222Smrg	  done # Gone through all deplibs.
789865eef222Smrg	  ;;
789965eef222Smrg	none | unknown | *)
790065eef222Smrg	  newdeplibs=""
790156957a04Smrg	  tmp_deplibs=`$ECHO " $deplibs" | $SED 's/ -lc$//; s/ -[LR][^ ]*//g'`
790265eef222Smrg	  if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then
790365eef222Smrg	    for i in $predeps $postdeps ; do
790465eef222Smrg	      # can't use Xsed below, because $i might contain '/'
790556957a04Smrg	      tmp_deplibs=`$ECHO " $tmp_deplibs" | $SED "s,$i,,"`
790665eef222Smrg	    done
790765eef222Smrg	  fi
790856957a04Smrg	  case $tmp_deplibs in
790956957a04Smrg	  *[!\	\ ]*)
791056957a04Smrg	    echo
791165eef222Smrg	    if test "X$deplibs_check_method" = "Xnone"; then
791256957a04Smrg	      echo "*** Warning: inter-library dependencies are not supported in this platform."
791365eef222Smrg	    else
791456957a04Smrg	      echo "*** Warning: inter-library dependencies are not known to be supported."
791565eef222Smrg	    fi
791656957a04Smrg	    echo "*** All declared inter-library dependencies are being dropped."
791765eef222Smrg	    droppeddeps=yes
791856957a04Smrg	    ;;
791956957a04Smrg	  esac
792065eef222Smrg	  ;;
792165eef222Smrg	esac
792265eef222Smrg	versuffix=$versuffix_save
792365eef222Smrg	major=$major_save
792465eef222Smrg	release=$release_save
792565eef222Smrg	libname=$libname_save
792665eef222Smrg	name=$name_save
792765eef222Smrg
792865eef222Smrg	case $host in
792965eef222Smrg	*-*-rhapsody* | *-*-darwin1.[012])
793065eef222Smrg	  # On Rhapsody replace the C library with the System framework
793156957a04Smrg	  newdeplibs=`$ECHO " $newdeplibs" | $SED 's/ -lc / System.ltframework /'`
793265eef222Smrg	  ;;
793365eef222Smrg	esac
793465eef222Smrg
793565eef222Smrg	if test "$droppeddeps" = yes; then
793665eef222Smrg	  if test "$module" = yes; then
793756957a04Smrg	    echo
793856957a04Smrg	    echo "*** Warning: libtool could not satisfy all declared inter-library"
793965eef222Smrg	    $ECHO "*** dependencies of module $libname.  Therefore, libtool will create"
794056957a04Smrg	    echo "*** a static module, that should work as long as the dlopening"
794156957a04Smrg	    echo "*** application is linked with the -dlopen flag."
794265eef222Smrg	    if test -z "$global_symbol_pipe"; then
794356957a04Smrg	      echo
794456957a04Smrg	      echo "*** However, this would only work if libtool was able to extract symbol"
794556957a04Smrg	      echo "*** lists from a program, using \`nm' or equivalent, but libtool could"
794656957a04Smrg	      echo "*** not find such a program.  So, this module is probably useless."
794756957a04Smrg	      echo "*** \`nm' from GNU binutils and a full rebuild may help."
794865eef222Smrg	    fi
794965eef222Smrg	    if test "$build_old_libs" = no; then
795065eef222Smrg	      oldlibs="$output_objdir/$libname.$libext"
795165eef222Smrg	      build_libtool_libs=module
795265eef222Smrg	      build_old_libs=yes
795365eef222Smrg	    else
795465eef222Smrg	      build_libtool_libs=no
795565eef222Smrg	    fi
795665eef222Smrg	  else
795756957a04Smrg	    echo "*** The inter-library dependencies that have been dropped here will be"
795856957a04Smrg	    echo "*** automatically added whenever a program is linked with this library"
795956957a04Smrg	    echo "*** or is declared to -dlopen it."
796065eef222Smrg
796165eef222Smrg	    if test "$allow_undefined" = no; then
796256957a04Smrg	      echo
796356957a04Smrg	      echo "*** Since this library must not contain undefined symbols,"
796456957a04Smrg	      echo "*** because either the platform does not support them or"
796556957a04Smrg	      echo "*** it was explicitly requested with -no-undefined,"
796656957a04Smrg	      echo "*** libtool will only create a static version of it."
796765eef222Smrg	      if test "$build_old_libs" = no; then
796865eef222Smrg		oldlibs="$output_objdir/$libname.$libext"
796965eef222Smrg		build_libtool_libs=module
797065eef222Smrg		build_old_libs=yes
797165eef222Smrg	      else
797265eef222Smrg		build_libtool_libs=no
797365eef222Smrg	      fi
797465eef222Smrg	    fi
797565eef222Smrg	  fi
797665eef222Smrg	fi
797765eef222Smrg	# Done checking deplibs!
797865eef222Smrg	deplibs=$newdeplibs
797965eef222Smrg      fi
798065eef222Smrg      # Time to change all our "foo.ltframework" stuff back to "-framework foo"
798165eef222Smrg      case $host in
798265eef222Smrg	*-*-darwin*)
798356957a04Smrg	  newdeplibs=`$ECHO " $newdeplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'`
798456957a04Smrg	  new_inherited_linker_flags=`$ECHO " $new_inherited_linker_flags" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'`
798556957a04Smrg	  deplibs=`$ECHO " $deplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'`
798665eef222Smrg	  ;;
798765eef222Smrg      esac
798865eef222Smrg
798965eef222Smrg      # move library search paths that coincide with paths to not yet
799065eef222Smrg      # installed libraries to the beginning of the library search list
799165eef222Smrg      new_libs=
799265eef222Smrg      for path in $notinst_path; do
799365eef222Smrg	case " $new_libs " in
799465eef222Smrg	*" -L$path/$objdir "*) ;;
799565eef222Smrg	*)
799665eef222Smrg	  case " $deplibs " in
799765eef222Smrg	  *" -L$path/$objdir "*)
7998200d7199Smrg	    func_append new_libs " -L$path/$objdir" ;;
799965eef222Smrg	  esac
800065eef222Smrg	  ;;
800165eef222Smrg	esac
800265eef222Smrg      done
800365eef222Smrg      for deplib in $deplibs; do
800465eef222Smrg	case $deplib in
800565eef222Smrg	-L*)
800665eef222Smrg	  case " $new_libs " in
800765eef222Smrg	  *" $deplib "*) ;;
8008200d7199Smrg	  *) func_append new_libs " $deplib" ;;
800965eef222Smrg	  esac
801065eef222Smrg	  ;;
8011200d7199Smrg	*) func_append new_libs " $deplib" ;;
801265eef222Smrg	esac
801365eef222Smrg      done
801465eef222Smrg      deplibs="$new_libs"
801565eef222Smrg
801665eef222Smrg      # All the library-specific variables (install_libdir is set above).
801765eef222Smrg      library_names=
801865eef222Smrg      old_library=
801965eef222Smrg      dlname=
802065eef222Smrg
802165eef222Smrg      # Test again, we may have decided not to build it any more
802265eef222Smrg      if test "$build_libtool_libs" = yes; then
802365eef222Smrg	if test "$hardcode_into_libs" = yes; then
802465eef222Smrg	  # Hardcode the library paths
802565eef222Smrg	  hardcode_libdirs=
802665eef222Smrg	  dep_rpath=
802765eef222Smrg	  rpath="$finalize_rpath"
8028200d7199Smrg	  test "$opt_mode" != relink && rpath="$compile_rpath$rpath"
802965eef222Smrg	  for libdir in $rpath; do
803065eef222Smrg	    if test -n "$hardcode_libdir_flag_spec"; then
803165eef222Smrg	      if test -n "$hardcode_libdir_separator"; then
8032200d7199Smrg		func_replace_sysroot "$libdir"
8033200d7199Smrg		libdir=$func_replace_sysroot_result
803465eef222Smrg		if test -z "$hardcode_libdirs"; then
803565eef222Smrg		  hardcode_libdirs="$libdir"
803665eef222Smrg		else
803765eef222Smrg		  # Just accumulate the unique libdirs.
803865eef222Smrg		  case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in
803965eef222Smrg		  *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*)
804065eef222Smrg		    ;;
804165eef222Smrg		  *)
8042200d7199Smrg		    func_append hardcode_libdirs "$hardcode_libdir_separator$libdir"
804365eef222Smrg		    ;;
804465eef222Smrg		  esac
804565eef222Smrg		fi
804665eef222Smrg	      else
804765eef222Smrg		eval flag=\"$hardcode_libdir_flag_spec\"
8048200d7199Smrg		func_append dep_rpath " $flag"
804965eef222Smrg	      fi
805065eef222Smrg	    elif test -n "$runpath_var"; then
805165eef222Smrg	      case "$perm_rpath " in
805265eef222Smrg	      *" $libdir "*) ;;
8053200d7199Smrg	      *) func_apped perm_rpath " $libdir" ;;
805465eef222Smrg	      esac
805565eef222Smrg	    fi
805665eef222Smrg	  done
805765eef222Smrg	  # Substitute the hardcoded libdirs into the rpath.
805865eef222Smrg	  if test -n "$hardcode_libdir_separator" &&
805965eef222Smrg	     test -n "$hardcode_libdirs"; then
806065eef222Smrg	    libdir="$hardcode_libdirs"
806165eef222Smrg	    if test -n "$hardcode_libdir_flag_spec_ld"; then
806265eef222Smrg	      eval dep_rpath=\"$hardcode_libdir_flag_spec_ld\"
806365eef222Smrg	    else
806465eef222Smrg	      eval dep_rpath=\"$hardcode_libdir_flag_spec\"
806565eef222Smrg	    fi
806665eef222Smrg	  fi
806765eef222Smrg	  if test -n "$runpath_var" && test -n "$perm_rpath"; then
806865eef222Smrg	    # We should set the runpath_var.
806965eef222Smrg	    rpath=
807065eef222Smrg	    for dir in $perm_rpath; do
8071200d7199Smrg	      func_append rpath "$dir:"
807265eef222Smrg	    done
807365eef222Smrg	    eval "$runpath_var='$rpath\$$runpath_var'; export $runpath_var"
807465eef222Smrg	  fi
807565eef222Smrg	  test -n "$dep_rpath" && deplibs="$dep_rpath $deplibs"
807665eef222Smrg	fi
8077ef981d24Smrg
807865eef222Smrg	shlibpath="$finalize_shlibpath"
8079200d7199Smrg	test "$opt_mode" != relink && shlibpath="$compile_shlibpath$shlibpath"
808065eef222Smrg	if test -n "$shlibpath"; then
808165eef222Smrg	  eval "$shlibpath_var='$shlibpath\$$shlibpath_var'; export $shlibpath_var"
808265eef222Smrg	fi
8083ef981d24Smrg
808465eef222Smrg	# Get the real and link names of the library.
808565eef222Smrg	eval shared_ext=\"$shrext_cmds\"
808665eef222Smrg	eval library_names=\"$library_names_spec\"
808765eef222Smrg	set dummy $library_names
808865eef222Smrg	shift
808965eef222Smrg	realname="$1"
809065eef222Smrg	shift
8091ef981d24Smrg
809265eef222Smrg	if test -n "$soname_spec"; then
809365eef222Smrg	  eval soname=\"$soname_spec\"
809465eef222Smrg	else
809565eef222Smrg	  soname="$realname"
809665eef222Smrg	fi
809765eef222Smrg	if test -z "$dlname"; then
809865eef222Smrg	  dlname=$soname
809965eef222Smrg	fi
8100ef981d24Smrg
810165eef222Smrg	lib="$output_objdir/$realname"
810265eef222Smrg	linknames=
810365eef222Smrg	for link
810465eef222Smrg	do
8105200d7199Smrg	  func_append linknames " $link"
810665eef222Smrg	done
8107ef981d24Smrg
810865eef222Smrg	# Use standard objects if they are pic
810956957a04Smrg	test -z "$pic_flag" && libobjs=`$ECHO "$libobjs" | $SP2NL | $SED "$lo2o" | $NL2SP`
811065eef222Smrg	test "X$libobjs" = "X " && libobjs=
8111ef981d24Smrg
811265eef222Smrg	delfiles=
811365eef222Smrg	if test -n "$export_symbols" && test -n "$include_expsyms"; then
811465eef222Smrg	  $opt_dry_run || cp "$export_symbols" "$output_objdir/$libname.uexp"
811565eef222Smrg	  export_symbols="$output_objdir/$libname.uexp"
8116200d7199Smrg	  func_append delfiles " $export_symbols"
811765eef222Smrg	fi
8118ef981d24Smrg
811965eef222Smrg	orig_export_symbols=
812065eef222Smrg	case $host_os in
812165eef222Smrg	cygwin* | mingw* | cegcc*)
812265eef222Smrg	  if test -n "$export_symbols" && test -z "$export_symbols_regex"; then
812365eef222Smrg	    # exporting using user supplied symfile
812465eef222Smrg	    if test "x`$SED 1q $export_symbols`" != xEXPORTS; then
812565eef222Smrg	      # and it's NOT already a .def file. Must figure out
812665eef222Smrg	      # which of the given symbols are data symbols and tag
812765eef222Smrg	      # them as such. So, trigger use of export_symbols_cmds.
812865eef222Smrg	      # export_symbols gets reassigned inside the "prepare
812965eef222Smrg	      # the list of exported symbols" if statement, so the
813065eef222Smrg	      # include_expsyms logic still works.
813165eef222Smrg	      orig_export_symbols="$export_symbols"
813265eef222Smrg	      export_symbols=
813365eef222Smrg	      always_export_symbols=yes
813465eef222Smrg	    fi
813565eef222Smrg	  fi
813665eef222Smrg	  ;;
813765eef222Smrg	esac
8138ef981d24Smrg
813965eef222Smrg	# Prepare the list of exported symbols
814065eef222Smrg	if test -z "$export_symbols"; then
814165eef222Smrg	  if test "$always_export_symbols" = yes || test -n "$export_symbols_regex"; then
814265eef222Smrg	    func_verbose "generating symbol list for \`$libname.la'"
814365eef222Smrg	    export_symbols="$output_objdir/$libname.exp"
814465eef222Smrg	    $opt_dry_run || $RM $export_symbols
814565eef222Smrg	    cmds=$export_symbols_cmds
814665eef222Smrg	    save_ifs="$IFS"; IFS='~'
8147200d7199Smrg	    for cmd1 in $cmds; do
814865eef222Smrg	      IFS="$save_ifs"
8149200d7199Smrg	      # Take the normal branch if the nm_file_list_spec branch
8150200d7199Smrg	      # doesn't work or if tool conversion is not needed.
8151200d7199Smrg	      case $nm_file_list_spec~$to_tool_file_cmd in
8152200d7199Smrg		*~func_convert_file_noop | *~func_convert_file_msys_to_w32 | ~*)
8153200d7199Smrg		  try_normal_branch=yes
8154200d7199Smrg		  eval cmd=\"$cmd1\"
8155200d7199Smrg		  func_len " $cmd"
8156200d7199Smrg		  len=$func_len_result
8157200d7199Smrg		  ;;
8158200d7199Smrg		*)
8159200d7199Smrg		  try_normal_branch=no
8160200d7199Smrg		  ;;
8161200d7199Smrg	      esac
8162200d7199Smrg	      if test "$try_normal_branch" = yes \
8163200d7199Smrg		 && { test "$len" -lt "$max_cmd_len" \
8164200d7199Smrg		      || test "$max_cmd_len" -le -1; }
8165200d7199Smrg	      then
8166200d7199Smrg		func_show_eval "$cmd" 'exit $?'
8167200d7199Smrg		skipped_export=false
8168200d7199Smrg	      elif test -n "$nm_file_list_spec"; then
8169200d7199Smrg		func_basename "$output"
8170200d7199Smrg		output_la=$func_basename_result
8171200d7199Smrg		save_libobjs=$libobjs
8172200d7199Smrg		save_output=$output
8173200d7199Smrg		output=${output_objdir}/${output_la}.nm
8174200d7199Smrg		func_to_tool_file "$output"
8175200d7199Smrg		libobjs=$nm_file_list_spec$func_to_tool_file_result
8176200d7199Smrg		func_append delfiles " $output"
8177200d7199Smrg		func_verbose "creating $NM input file list: $output"
8178200d7199Smrg		for obj in $save_libobjs; do
8179200d7199Smrg		  func_to_tool_file "$obj"
8180200d7199Smrg		  $ECHO "$func_to_tool_file_result"
8181200d7199Smrg		done > "$output"
8182200d7199Smrg		eval cmd=\"$cmd1\"
818365eef222Smrg		func_show_eval "$cmd" 'exit $?'
8184200d7199Smrg		output=$save_output
8185200d7199Smrg		libobjs=$save_libobjs
818665eef222Smrg		skipped_export=false
818765eef222Smrg	      else
818865eef222Smrg		# The command line is too long to execute in one step.
818965eef222Smrg		func_verbose "using reloadable object file for export list..."
819065eef222Smrg		skipped_export=:
819165eef222Smrg		# Break out early, otherwise skipped_export may be
819265eef222Smrg		# set to false by a later but shorter cmd.
819365eef222Smrg		break
819465eef222Smrg	      fi
819565eef222Smrg	    done
819665eef222Smrg	    IFS="$save_ifs"
819765eef222Smrg	    if test -n "$export_symbols_regex" && test "X$skipped_export" != "X:"; then
819865eef222Smrg	      func_show_eval '$EGREP -e "$export_symbols_regex" "$export_symbols" > "${export_symbols}T"'
819965eef222Smrg	      func_show_eval '$MV "${export_symbols}T" "$export_symbols"'
820065eef222Smrg	    fi
820165eef222Smrg	  fi
820265eef222Smrg	fi
8203ef981d24Smrg
820465eef222Smrg	if test -n "$export_symbols" && test -n "$include_expsyms"; then
820565eef222Smrg	  tmp_export_symbols="$export_symbols"
820665eef222Smrg	  test -n "$orig_export_symbols" && tmp_export_symbols="$orig_export_symbols"
820756957a04Smrg	  $opt_dry_run || eval '$ECHO "$include_expsyms" | $SP2NL >> "$tmp_export_symbols"'
820865eef222Smrg	fi
8209ef981d24Smrg
821065eef222Smrg	if test "X$skipped_export" != "X:" && test -n "$orig_export_symbols"; then
821165eef222Smrg	  # The given exports_symbols file has to be filtered, so filter it.
821265eef222Smrg	  func_verbose "filter symbol list for \`$libname.la' to tag DATA exports"
821365eef222Smrg	  # FIXME: $output_objdir/$libname.filter potentially contains lots of
821465eef222Smrg	  # 's' commands which not all seds can handle. GNU sed should be fine
821565eef222Smrg	  # though. Also, the filter scales superlinearly with the number of
821665eef222Smrg	  # global variables. join(1) would be nice here, but unfortunately
821765eef222Smrg	  # isn't a blessed tool.
821865eef222Smrg	  $opt_dry_run || $SED -e '/[ ,]DATA/!d;s,\(.*\)\([ \,].*\),s|^\1$|\1\2|,' < $export_symbols > $output_objdir/$libname.filter
8219200d7199Smrg	  func_append delfiles " $export_symbols $output_objdir/$libname.filter"
822065eef222Smrg	  export_symbols=$output_objdir/$libname.def
822165eef222Smrg	  $opt_dry_run || $SED -f $output_objdir/$libname.filter < $orig_export_symbols > $export_symbols
8222ef981d24Smrg	fi
8223ef981d24Smrg
822465eef222Smrg	tmp_deplibs=
822565eef222Smrg	for test_deplib in $deplibs; do
822665eef222Smrg	  case " $convenience " in
822765eef222Smrg	  *" $test_deplib "*) ;;
822865eef222Smrg	  *)
8229200d7199Smrg	    func_append tmp_deplibs " $test_deplib"
823065eef222Smrg	    ;;
823165eef222Smrg	  esac
823265eef222Smrg	done
823365eef222Smrg	deplibs="$tmp_deplibs"
8234ef981d24Smrg
823565eef222Smrg	if test -n "$convenience"; then
823665eef222Smrg	  if test -n "$whole_archive_flag_spec" &&
823765eef222Smrg	    test "$compiler_needs_object" = yes &&
823865eef222Smrg	    test -z "$libobjs"; then
823965eef222Smrg	    # extract the archives, so we have objects to list.
824065eef222Smrg	    # TODO: could optimize this to just extract one archive.
824165eef222Smrg	    whole_archive_flag_spec=
824265eef222Smrg	  fi
824365eef222Smrg	  if test -n "$whole_archive_flag_spec"; then
824465eef222Smrg	    save_libobjs=$libobjs
824565eef222Smrg	    eval libobjs=\"\$libobjs $whole_archive_flag_spec\"
824665eef222Smrg	    test "X$libobjs" = "X " && libobjs=
824765eef222Smrg	  else
824865eef222Smrg	    gentop="$output_objdir/${outputname}x"
8249200d7199Smrg	    func_append generated " $gentop"
8250ef981d24Smrg
825165eef222Smrg	    func_extract_archives $gentop $convenience
8252200d7199Smrg	    func_append libobjs " $func_extract_archives_result"
825365eef222Smrg	    test "X$libobjs" = "X " && libobjs=
825465eef222Smrg	  fi
825565eef222Smrg	fi
8256ef981d24Smrg
825765eef222Smrg	if test "$thread_safe" = yes && test -n "$thread_safe_flag_spec"; then
825865eef222Smrg	  eval flag=\"$thread_safe_flag_spec\"
8259200d7199Smrg	  func_append linker_flags " $flag"
826065eef222Smrg	fi
8261ef981d24Smrg
826265eef222Smrg	# Make a backup of the uninstalled library when relinking
8263200d7199Smrg	if test "$opt_mode" = relink; then
826465eef222Smrg	  $opt_dry_run || eval '(cd $output_objdir && $RM ${realname}U && $MV $realname ${realname}U)' || exit $?
8265ef981d24Smrg	fi
8266ef981d24Smrg
826765eef222Smrg	# Do each of the archive commands.
826865eef222Smrg	if test "$module" = yes && test -n "$module_cmds" ; then
826965eef222Smrg	  if test -n "$export_symbols" && test -n "$module_expsym_cmds"; then
827065eef222Smrg	    eval test_cmds=\"$module_expsym_cmds\"
827165eef222Smrg	    cmds=$module_expsym_cmds
827265eef222Smrg	  else
827365eef222Smrg	    eval test_cmds=\"$module_cmds\"
827465eef222Smrg	    cmds=$module_cmds
827565eef222Smrg	  fi
827665eef222Smrg	else
827765eef222Smrg	  if test -n "$export_symbols" && test -n "$archive_expsym_cmds"; then
827865eef222Smrg	    eval test_cmds=\"$archive_expsym_cmds\"
827965eef222Smrg	    cmds=$archive_expsym_cmds
828065eef222Smrg	  else
828165eef222Smrg	    eval test_cmds=\"$archive_cmds\"
828265eef222Smrg	    cmds=$archive_cmds
828365eef222Smrg	  fi
8284ef981d24Smrg	fi
8285ef981d24Smrg
828665eef222Smrg	if test "X$skipped_export" != "X:" &&
828765eef222Smrg	   func_len " $test_cmds" &&
828865eef222Smrg	   len=$func_len_result &&
828965eef222Smrg	   test "$len" -lt "$max_cmd_len" || test "$max_cmd_len" -le -1; then
829065eef222Smrg	  :
829165eef222Smrg	else
829265eef222Smrg	  # The command line is too long to link in one step, link piecewise
829365eef222Smrg	  # or, if using GNU ld and skipped_export is not :, use a linker
829465eef222Smrg	  # script.
8295ef981d24Smrg
829665eef222Smrg	  # Save the value of $output and $libobjs because we want to
829765eef222Smrg	  # use them later.  If we have whole_archive_flag_spec, we
829865eef222Smrg	  # want to use save_libobjs as it was before
829965eef222Smrg	  # whole_archive_flag_spec was expanded, because we can't
830065eef222Smrg	  # assume the linker understands whole_archive_flag_spec.
830165eef222Smrg	  # This may have to be revisited, in case too many
830265eef222Smrg	  # convenience libraries get linked in and end up exceeding
830365eef222Smrg	  # the spec.
830465eef222Smrg	  if test -z "$convenience" || test -z "$whole_archive_flag_spec"; then
830565eef222Smrg	    save_libobjs=$libobjs
830665eef222Smrg	  fi
830765eef222Smrg	  save_output=$output
830856957a04Smrg	  func_basename "$output"
830956957a04Smrg	  output_la=$func_basename_result
8310ef981d24Smrg
831165eef222Smrg	  # Clear the reloadable object creation command queue and
831265eef222Smrg	  # initialize k to one.
831365eef222Smrg	  test_cmds=
831465eef222Smrg	  concat_cmds=
831565eef222Smrg	  objlist=
831665eef222Smrg	  last_robj=
831765eef222Smrg	  k=1
8318ef981d24Smrg
831965eef222Smrg	  if test -n "$save_libobjs" && test "X$skipped_export" != "X:" && test "$with_gnu_ld" = yes; then
832065eef222Smrg	    output=${output_objdir}/${output_la}.lnkscript
832165eef222Smrg	    func_verbose "creating GNU ld script: $output"
832256957a04Smrg	    echo 'INPUT (' > $output
832365eef222Smrg	    for obj in $save_libobjs
832465eef222Smrg	    do
8325200d7199Smrg	      func_to_tool_file "$obj"
8326200d7199Smrg	      $ECHO "$func_to_tool_file_result" >> $output
832765eef222Smrg	    done
832856957a04Smrg	    echo ')' >> $output
8329200d7199Smrg	    func_append delfiles " $output"
8330200d7199Smrg	    func_to_tool_file "$output"
8331200d7199Smrg	    output=$func_to_tool_file_result
833265eef222Smrg	  elif test -n "$save_libobjs" && test "X$skipped_export" != "X:" && test "X$file_list_spec" != X; then
833365eef222Smrg	    output=${output_objdir}/${output_la}.lnk
833465eef222Smrg	    func_verbose "creating linker input file list: $output"
833565eef222Smrg	    : > $output
833665eef222Smrg	    set x $save_libobjs
833765eef222Smrg	    shift
833865eef222Smrg	    firstobj=
833965eef222Smrg	    if test "$compiler_needs_object" = yes; then
834065eef222Smrg	      firstobj="$1 "
834165eef222Smrg	      shift
834265eef222Smrg	    fi
834365eef222Smrg	    for obj
834465eef222Smrg	    do
8345200d7199Smrg	      func_to_tool_file "$obj"
8346200d7199Smrg	      $ECHO "$func_to_tool_file_result" >> $output
834765eef222Smrg	    done
8348200d7199Smrg	    func_append delfiles " $output"
8349200d7199Smrg	    func_to_tool_file "$output"
8350200d7199Smrg	    output=$firstobj\"$file_list_spec$func_to_tool_file_result\"
835165eef222Smrg	  else
835265eef222Smrg	    if test -n "$save_libobjs"; then
835365eef222Smrg	      func_verbose "creating reloadable object files..."
835465eef222Smrg	      output=$output_objdir/$output_la-${k}.$objext
835565eef222Smrg	      eval test_cmds=\"$reload_cmds\"
835665eef222Smrg	      func_len " $test_cmds"
835765eef222Smrg	      len0=$func_len_result
835865eef222Smrg	      len=$len0
835965eef222Smrg
836065eef222Smrg	      # Loop over the list of objects to be linked.
836165eef222Smrg	      for obj in $save_libobjs
836265eef222Smrg	      do
836365eef222Smrg		func_len " $obj"
836465eef222Smrg		func_arith $len + $func_len_result
836565eef222Smrg		len=$func_arith_result
836665eef222Smrg		if test "X$objlist" = X ||
836765eef222Smrg		   test "$len" -lt "$max_cmd_len"; then
836865eef222Smrg		  func_append objlist " $obj"
836965eef222Smrg		else
837065eef222Smrg		  # The command $test_cmds is almost too long, add a
837165eef222Smrg		  # command to the queue.
837265eef222Smrg		  if test "$k" -eq 1 ; then
837365eef222Smrg		    # The first file doesn't have a previous command to add.
837456957a04Smrg		    reload_objs=$objlist
837556957a04Smrg		    eval concat_cmds=\"$reload_cmds\"
837665eef222Smrg		  else
837765eef222Smrg		    # All subsequent reloadable object files will link in
837865eef222Smrg		    # the last one created.
837956957a04Smrg		    reload_objs="$objlist $last_robj"
838056957a04Smrg		    eval concat_cmds=\"\$concat_cmds~$reload_cmds~\$RM $last_robj\"
838165eef222Smrg		  fi
838265eef222Smrg		  last_robj=$output_objdir/$output_la-${k}.$objext
838365eef222Smrg		  func_arith $k + 1
838465eef222Smrg		  k=$func_arith_result
838565eef222Smrg		  output=$output_objdir/$output_la-${k}.$objext
838656957a04Smrg		  objlist=" $obj"
838765eef222Smrg		  func_len " $last_robj"
838865eef222Smrg		  func_arith $len0 + $func_len_result
838965eef222Smrg		  len=$func_arith_result
839065eef222Smrg		fi
839165eef222Smrg	      done
839265eef222Smrg	      # Handle the remaining objects by creating one last
839365eef222Smrg	      # reloadable object file.  All subsequent reloadable object
839465eef222Smrg	      # files will link in the last one created.
839565eef222Smrg	      test -z "$concat_cmds" || concat_cmds=$concat_cmds~
839656957a04Smrg	      reload_objs="$objlist $last_robj"
839756957a04Smrg	      eval concat_cmds=\"\${concat_cmds}$reload_cmds\"
839865eef222Smrg	      if test -n "$last_robj"; then
839965eef222Smrg	        eval concat_cmds=\"\${concat_cmds}~\$RM $last_robj\"
840065eef222Smrg	      fi
8401200d7199Smrg	      func_append delfiles " $output"
8402ef981d24Smrg
840365eef222Smrg	    else
840465eef222Smrg	      output=
840565eef222Smrg	    fi
8406ef981d24Smrg
840765eef222Smrg	    if ${skipped_export-false}; then
840865eef222Smrg	      func_verbose "generating symbol list for \`$libname.la'"
840965eef222Smrg	      export_symbols="$output_objdir/$libname.exp"
841065eef222Smrg	      $opt_dry_run || $RM $export_symbols
841165eef222Smrg	      libobjs=$output
841265eef222Smrg	      # Append the command to create the export file.
841365eef222Smrg	      test -z "$concat_cmds" || concat_cmds=$concat_cmds~
841465eef222Smrg	      eval concat_cmds=\"\$concat_cmds$export_symbols_cmds\"
841565eef222Smrg	      if test -n "$last_robj"; then
841665eef222Smrg		eval concat_cmds=\"\$concat_cmds~\$RM $last_robj\"
841765eef222Smrg	      fi
841865eef222Smrg	    fi
8419ef981d24Smrg
842065eef222Smrg	    test -n "$save_libobjs" &&
842165eef222Smrg	      func_verbose "creating a temporary reloadable object file: $output"
8422ef981d24Smrg
842365eef222Smrg	    # Loop through the commands generated above and execute them.
842465eef222Smrg	    save_ifs="$IFS"; IFS='~'
842565eef222Smrg	    for cmd in $concat_cmds; do
842665eef222Smrg	      IFS="$save_ifs"
842765eef222Smrg	      $opt_silent || {
842865eef222Smrg		  func_quote_for_expand "$cmd"
842965eef222Smrg		  eval "func_echo $func_quote_for_expand_result"
843065eef222Smrg	      }
843165eef222Smrg	      $opt_dry_run || eval "$cmd" || {
843265eef222Smrg		lt_exit=$?
843365eef222Smrg
843465eef222Smrg		# Restore the uninstalled library and exit
8435200d7199Smrg		if test "$opt_mode" = relink; then
843665eef222Smrg		  ( cd "$output_objdir" && \
843765eef222Smrg		    $RM "${realname}T" && \
843865eef222Smrg		    $MV "${realname}U" "$realname" )
843965eef222Smrg		fi
8440ef981d24Smrg
844165eef222Smrg		exit $lt_exit
844265eef222Smrg	      }
844365eef222Smrg	    done
844465eef222Smrg	    IFS="$save_ifs"
844565eef222Smrg
844665eef222Smrg	    if test -n "$export_symbols_regex" && ${skipped_export-false}; then
844765eef222Smrg	      func_show_eval '$EGREP -e "$export_symbols_regex" "$export_symbols" > "${export_symbols}T"'
844865eef222Smrg	      func_show_eval '$MV "${export_symbols}T" "$export_symbols"'
8449ef981d24Smrg	    fi
8450ef981d24Smrg	  fi
8451ef981d24Smrg
845265eef222Smrg          if ${skipped_export-false}; then
845365eef222Smrg	    if test -n "$export_symbols" && test -n "$include_expsyms"; then
845465eef222Smrg	      tmp_export_symbols="$export_symbols"
845565eef222Smrg	      test -n "$orig_export_symbols" && tmp_export_symbols="$orig_export_symbols"
845656957a04Smrg	      $opt_dry_run || eval '$ECHO "$include_expsyms" | $SP2NL >> "$tmp_export_symbols"'
845765eef222Smrg	    fi
8458ef981d24Smrg
845965eef222Smrg	    if test -n "$orig_export_symbols"; then
846065eef222Smrg	      # The given exports_symbols file has to be filtered, so filter it.
846165eef222Smrg	      func_verbose "filter symbol list for \`$libname.la' to tag DATA exports"
846265eef222Smrg	      # FIXME: $output_objdir/$libname.filter potentially contains lots of
846365eef222Smrg	      # 's' commands which not all seds can handle. GNU sed should be fine
846465eef222Smrg	      # though. Also, the filter scales superlinearly with the number of
846565eef222Smrg	      # global variables. join(1) would be nice here, but unfortunately
846665eef222Smrg	      # isn't a blessed tool.
846765eef222Smrg	      $opt_dry_run || $SED -e '/[ ,]DATA/!d;s,\(.*\)\([ \,].*\),s|^\1$|\1\2|,' < $export_symbols > $output_objdir/$libname.filter
8468200d7199Smrg	      func_append delfiles " $export_symbols $output_objdir/$libname.filter"
846965eef222Smrg	      export_symbols=$output_objdir/$libname.def
847065eef222Smrg	      $opt_dry_run || $SED -f $output_objdir/$libname.filter < $orig_export_symbols > $export_symbols
847165eef222Smrg	    fi
847265eef222Smrg	  fi
8473ef981d24Smrg
847465eef222Smrg	  libobjs=$output
847565eef222Smrg	  # Restore the value of output.
847665eef222Smrg	  output=$save_output
8477ef981d24Smrg
847865eef222Smrg	  if test -n "$convenience" && test -n "$whole_archive_flag_spec"; then
847965eef222Smrg	    eval libobjs=\"\$libobjs $whole_archive_flag_spec\"
848065eef222Smrg	    test "X$libobjs" = "X " && libobjs=
848165eef222Smrg	  fi
848265eef222Smrg	  # Expand the library linking commands again to reset the
848365eef222Smrg	  # value of $libobjs for piecewise linking.
848465eef222Smrg
848565eef222Smrg	  # Do each of the archive commands.
848665eef222Smrg	  if test "$module" = yes && test -n "$module_cmds" ; then
848765eef222Smrg	    if test -n "$export_symbols" && test -n "$module_expsym_cmds"; then
848865eef222Smrg	      cmds=$module_expsym_cmds
8489ef981d24Smrg	    else
849065eef222Smrg	      cmds=$module_cmds
8491ef981d24Smrg	    fi
8492ef981d24Smrg	  else
849365eef222Smrg	    if test -n "$export_symbols" && test -n "$archive_expsym_cmds"; then
849465eef222Smrg	      cmds=$archive_expsym_cmds
849565eef222Smrg	    else
849665eef222Smrg	      cmds=$archive_cmds
849765eef222Smrg	    fi
8498ef981d24Smrg	  fi
8499ef981d24Smrg	fi
8500ef981d24Smrg
850165eef222Smrg	if test -n "$delfiles"; then
850265eef222Smrg	  # Append the command to remove temporary files to $cmds.
850365eef222Smrg	  eval cmds=\"\$cmds~\$RM $delfiles\"
850465eef222Smrg	fi
8505ef981d24Smrg
850665eef222Smrg	# Add any objects from preloaded convenience libraries
850765eef222Smrg	if test -n "$dlprefiles"; then
850865eef222Smrg	  gentop="$output_objdir/${outputname}x"
8509200d7199Smrg	  func_append generated " $gentop"
8510ef981d24Smrg
851165eef222Smrg	  func_extract_archives $gentop $dlprefiles
8512200d7199Smrg	  func_append libobjs " $func_extract_archives_result"
851365eef222Smrg	  test "X$libobjs" = "X " && libobjs=
8514ef981d24Smrg	fi
8515ef981d24Smrg
851665eef222Smrg	save_ifs="$IFS"; IFS='~'
851765eef222Smrg	for cmd in $cmds; do
851865eef222Smrg	  IFS="$save_ifs"
851965eef222Smrg	  eval cmd=\"$cmd\"
852065eef222Smrg	  $opt_silent || {
852165eef222Smrg	    func_quote_for_expand "$cmd"
852265eef222Smrg	    eval "func_echo $func_quote_for_expand_result"
852365eef222Smrg	  }
852465eef222Smrg	  $opt_dry_run || eval "$cmd" || {
852565eef222Smrg	    lt_exit=$?
8526ef981d24Smrg
852765eef222Smrg	    # Restore the uninstalled library and exit
8528200d7199Smrg	    if test "$opt_mode" = relink; then
852965eef222Smrg	      ( cd "$output_objdir" && \
853065eef222Smrg	        $RM "${realname}T" && \
853165eef222Smrg		$MV "${realname}U" "$realname" )
853265eef222Smrg	    fi
853365eef222Smrg
853465eef222Smrg	    exit $lt_exit
853565eef222Smrg	  }
853665eef222Smrg	done
853765eef222Smrg	IFS="$save_ifs"
853865eef222Smrg
853965eef222Smrg	# Restore the uninstalled library and exit
8540200d7199Smrg	if test "$opt_mode" = relink; then
854165eef222Smrg	  $opt_dry_run || eval '(cd $output_objdir && $RM ${realname}T && $MV $realname ${realname}T && $MV ${realname}U $realname)' || exit $?
854265eef222Smrg
854365eef222Smrg	  if test -n "$convenience"; then
854465eef222Smrg	    if test -z "$whole_archive_flag_spec"; then
854565eef222Smrg	      func_show_eval '${RM}r "$gentop"'
8546ef981d24Smrg	    fi
8547ef981d24Smrg	  fi
8548ef981d24Smrg
854965eef222Smrg	  exit $EXIT_SUCCESS
855065eef222Smrg	fi
8551ef981d24Smrg
855265eef222Smrg	# Create links to the real library.
855365eef222Smrg	for linkname in $linknames; do
855465eef222Smrg	  if test "$realname" != "$linkname"; then
855565eef222Smrg	    func_show_eval '(cd "$output_objdir" && $RM "$linkname" && $LN_S "$realname" "$linkname")' 'exit $?'
855665eef222Smrg	  fi
855765eef222Smrg	done
855865eef222Smrg
855965eef222Smrg	# If -module or -export-dynamic was specified, set the dlname.
856065eef222Smrg	if test "$module" = yes || test "$export_dynamic" = yes; then
856165eef222Smrg	  # On all known operating systems, these are identical.
856265eef222Smrg	  dlname="$soname"
856365eef222Smrg	fi
856465eef222Smrg      fi
856565eef222Smrg      ;;
856665eef222Smrg
856765eef222Smrg    obj)
856865eef222Smrg      if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then
856965eef222Smrg	func_warning "\`-dlopen' is ignored for objects"
857065eef222Smrg      fi
857165eef222Smrg
857265eef222Smrg      case " $deplibs" in
857365eef222Smrg      *\ -l* | *\ -L*)
857465eef222Smrg	func_warning "\`-l' and \`-L' are ignored for objects" ;;
857565eef222Smrg      esac
857665eef222Smrg
857765eef222Smrg      test -n "$rpath" && \
857865eef222Smrg	func_warning "\`-rpath' is ignored for objects"
857965eef222Smrg
858065eef222Smrg      test -n "$xrpath" && \
858165eef222Smrg	func_warning "\`-R' is ignored for objects"
858265eef222Smrg
858365eef222Smrg      test -n "$vinfo" && \
858465eef222Smrg	func_warning "\`-version-info' is ignored for objects"
858565eef222Smrg
858665eef222Smrg      test -n "$release" && \
858765eef222Smrg	func_warning "\`-release' is ignored for objects"
858865eef222Smrg
858965eef222Smrg      case $output in
859065eef222Smrg      *.lo)
859165eef222Smrg	test -n "$objs$old_deplibs" && \
859265eef222Smrg	  func_fatal_error "cannot build library object \`$output' from non-libtool objects"
859365eef222Smrg
859465eef222Smrg	libobj=$output
859565eef222Smrg	func_lo2o "$libobj"
859665eef222Smrg	obj=$func_lo2o_result
859765eef222Smrg	;;
859865eef222Smrg      *)
859965eef222Smrg	libobj=
860065eef222Smrg	obj="$output"
860165eef222Smrg	;;
860265eef222Smrg      esac
860365eef222Smrg
860465eef222Smrg      # Delete the old objects.
860565eef222Smrg      $opt_dry_run || $RM $obj $libobj
860665eef222Smrg
860765eef222Smrg      # Objects from convenience libraries.  This assumes
860865eef222Smrg      # single-version convenience libraries.  Whenever we create
860965eef222Smrg      # different ones for PIC/non-PIC, this we'll have to duplicate
861065eef222Smrg      # the extraction.
861165eef222Smrg      reload_conv_objs=
861265eef222Smrg      gentop=
861365eef222Smrg      # reload_cmds runs $LD directly, so let us get rid of
861465eef222Smrg      # -Wl from whole_archive_flag_spec and hope we can get by with
861565eef222Smrg      # turning comma into space..
861665eef222Smrg      wl=
861765eef222Smrg
861865eef222Smrg      if test -n "$convenience"; then
861965eef222Smrg	if test -n "$whole_archive_flag_spec"; then
862065eef222Smrg	  eval tmp_whole_archive_flags=\"$whole_archive_flag_spec\"
862156957a04Smrg	  reload_conv_objs=$reload_objs\ `$ECHO "$tmp_whole_archive_flags" | $SED 's|,| |g'`
862265eef222Smrg	else
862365eef222Smrg	  gentop="$output_objdir/${obj}x"
8624200d7199Smrg	  func_append generated " $gentop"
862565eef222Smrg
862665eef222Smrg	  func_extract_archives $gentop $convenience
862765eef222Smrg	  reload_conv_objs="$reload_objs $func_extract_archives_result"
862865eef222Smrg	fi
862965eef222Smrg      fi
8630ef981d24Smrg
8631200d7199Smrg      # If we're not building shared, we need to use non_pic_objs
8632200d7199Smrg      test "$build_libtool_libs" != yes && libobjs="$non_pic_objects"
8633200d7199Smrg
863465eef222Smrg      # Create the old-style object.
863556957a04Smrg      reload_objs="$objs$old_deplibs "`$ECHO "$libobjs" | $SP2NL | $SED "/\.${libext}$/d; /\.lib$/d; $lo2o" | $NL2SP`" $reload_conv_objs" ### testsuite: skip nested quoting test
8636ef981d24Smrg
863765eef222Smrg      output="$obj"
863865eef222Smrg      func_execute_cmds "$reload_cmds" 'exit $?'
8639ef981d24Smrg
864065eef222Smrg      # Exit if we aren't doing a library object file.
864165eef222Smrg      if test -z "$libobj"; then
864265eef222Smrg	if test -n "$gentop"; then
864365eef222Smrg	  func_show_eval '${RM}r "$gentop"'
864465eef222Smrg	fi
8645ef981d24Smrg
864665eef222Smrg	exit $EXIT_SUCCESS
864765eef222Smrg      fi
8648ef981d24Smrg
864965eef222Smrg      if test "$build_libtool_libs" != yes; then
865065eef222Smrg	if test -n "$gentop"; then
865165eef222Smrg	  func_show_eval '${RM}r "$gentop"'
865265eef222Smrg	fi
8653ef981d24Smrg
865465eef222Smrg	# Create an invalid libtool object if no PIC, so that we don't
865565eef222Smrg	# accidentally link it into a program.
865665eef222Smrg	# $show "echo timestamp > $libobj"
865765eef222Smrg	# $opt_dry_run || eval "echo timestamp > $libobj" || exit $?
865865eef222Smrg	exit $EXIT_SUCCESS
865965eef222Smrg      fi
8660ef981d24Smrg
866165eef222Smrg      if test -n "$pic_flag" || test "$pic_mode" != default; then
866265eef222Smrg	# Only do commands if we really have different PIC objects.
866365eef222Smrg	reload_objs="$libobjs $reload_conv_objs"
866465eef222Smrg	output="$libobj"
866565eef222Smrg	func_execute_cmds "$reload_cmds" 'exit $?'
8666ef981d24Smrg      fi
8667ef981d24Smrg
866865eef222Smrg      if test -n "$gentop"; then
866965eef222Smrg	func_show_eval '${RM}r "$gentop"'
867065eef222Smrg      fi
8671ef981d24Smrg
867265eef222Smrg      exit $EXIT_SUCCESS
867365eef222Smrg      ;;
8674ef981d24Smrg
867565eef222Smrg    prog)
867665eef222Smrg      case $host in
867765eef222Smrg	*cygwin*) func_stripname '' '.exe' "$output"
867865eef222Smrg	          output=$func_stripname_result.exe;;
8679ef981d24Smrg      esac
868065eef222Smrg      test -n "$vinfo" && \
868165eef222Smrg	func_warning "\`-version-info' is ignored for programs"
8682ef981d24Smrg
868365eef222Smrg      test -n "$release" && \
868465eef222Smrg	func_warning "\`-release' is ignored for programs"
8685ef981d24Smrg
868665eef222Smrg      test "$preload" = yes \
868765eef222Smrg        && test "$dlopen_support" = unknown \
868865eef222Smrg	&& test "$dlopen_self" = unknown \
868965eef222Smrg	&& test "$dlopen_self_static" = unknown && \
869065eef222Smrg	  func_warning "\`LT_INIT([dlopen])' not used. Assuming no dlopen support."
8691ef981d24Smrg
869265eef222Smrg      case $host in
869365eef222Smrg      *-*-rhapsody* | *-*-darwin1.[012])
869465eef222Smrg	# On Rhapsody replace the C library is the System framework
869556957a04Smrg	compile_deplibs=`$ECHO " $compile_deplibs" | $SED 's/ -lc / System.ltframework /'`
869656957a04Smrg	finalize_deplibs=`$ECHO " $finalize_deplibs" | $SED 's/ -lc / System.ltframework /'`
8697ef981d24Smrg	;;
8698ef981d24Smrg      esac
8699ef981d24Smrg
870065eef222Smrg      case $host in
870165eef222Smrg      *-*-darwin*)
870265eef222Smrg	# Don't allow lazy linking, it breaks C++ global constructors
870365eef222Smrg	# But is supposedly fixed on 10.4 or later (yay!).
870465eef222Smrg	if test "$tagname" = CXX ; then
870565eef222Smrg	  case ${MACOSX_DEPLOYMENT_TARGET-10.0} in
870665eef222Smrg	    10.[0123])
8707200d7199Smrg	      func_append compile_command " ${wl}-bind_at_load"
8708200d7199Smrg	      func_append finalize_command " ${wl}-bind_at_load"
870965eef222Smrg	    ;;
871065eef222Smrg	  esac
871165eef222Smrg	fi
871265eef222Smrg	# Time to change all our "foo.ltframework" stuff back to "-framework foo"
871356957a04Smrg	compile_deplibs=`$ECHO " $compile_deplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'`
871456957a04Smrg	finalize_deplibs=`$ECHO " $finalize_deplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'`
8715ef981d24Smrg	;;
8716ef981d24Smrg      esac
8717ef981d24Smrg
8718ef981d24Smrg
871965eef222Smrg      # move library search paths that coincide with paths to not yet
872065eef222Smrg      # installed libraries to the beginning of the library search list
872165eef222Smrg      new_libs=
872265eef222Smrg      for path in $notinst_path; do
872365eef222Smrg	case " $new_libs " in
872465eef222Smrg	*" -L$path/$objdir "*) ;;
8725ef981d24Smrg	*)
872665eef222Smrg	  case " $compile_deplibs " in
872765eef222Smrg	  *" -L$path/$objdir "*)
8728200d7199Smrg	    func_append new_libs " -L$path/$objdir" ;;
872965eef222Smrg	  esac
8730ef981d24Smrg	  ;;
8731ef981d24Smrg	esac
8732ef981d24Smrg      done
873365eef222Smrg      for deplib in $compile_deplibs; do
873465eef222Smrg	case $deplib in
873565eef222Smrg	-L*)
873665eef222Smrg	  case " $new_libs " in
873765eef222Smrg	  *" $deplib "*) ;;
8738200d7199Smrg	  *) func_append new_libs " $deplib" ;;
873965eef222Smrg	  esac
874065eef222Smrg	  ;;
8741200d7199Smrg	*) func_append new_libs " $deplib" ;;
874265eef222Smrg	esac
874365eef222Smrg      done
874465eef222Smrg      compile_deplibs="$new_libs"
8745ef981d24Smrg
8746ef981d24Smrg
8747200d7199Smrg      func_append compile_command " $compile_deplibs"
8748200d7199Smrg      func_append finalize_command " $finalize_deplibs"
8749ef981d24Smrg
875065eef222Smrg      if test -n "$rpath$xrpath"; then
875165eef222Smrg	# If the user specified any rpath flags, then add them.
875265eef222Smrg	for libdir in $rpath $xrpath; do
875365eef222Smrg	  # This is the magic to use -rpath.
875465eef222Smrg	  case "$finalize_rpath " in
875565eef222Smrg	  *" $libdir "*) ;;
8756200d7199Smrg	  *) func_append finalize_rpath " $libdir" ;;
875765eef222Smrg	  esac
875865eef222Smrg	done
875965eef222Smrg      fi
8760ef981d24Smrg
876165eef222Smrg      # Now hardcode the library paths
876265eef222Smrg      rpath=
876365eef222Smrg      hardcode_libdirs=
876465eef222Smrg      for libdir in $compile_rpath $finalize_rpath; do
876565eef222Smrg	if test -n "$hardcode_libdir_flag_spec"; then
876665eef222Smrg	  if test -n "$hardcode_libdir_separator"; then
876765eef222Smrg	    if test -z "$hardcode_libdirs"; then
876865eef222Smrg	      hardcode_libdirs="$libdir"
876965eef222Smrg	    else
877065eef222Smrg	      # Just accumulate the unique libdirs.
877165eef222Smrg	      case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in
877265eef222Smrg	      *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*)
877365eef222Smrg		;;
877465eef222Smrg	      *)
8775200d7199Smrg		func_append hardcode_libdirs "$hardcode_libdir_separator$libdir"
877665eef222Smrg		;;
877765eef222Smrg	      esac
877865eef222Smrg	    fi
877965eef222Smrg	  else
878065eef222Smrg	    eval flag=\"$hardcode_libdir_flag_spec\"
8781200d7199Smrg	    func_append rpath " $flag"
878265eef222Smrg	  fi
878365eef222Smrg	elif test -n "$runpath_var"; then
878465eef222Smrg	  case "$perm_rpath " in
8785ef981d24Smrg	  *" $libdir "*) ;;
8786200d7199Smrg	  *) func_append perm_rpath " $libdir" ;;
8787ef981d24Smrg	  esac
878865eef222Smrg	fi
878965eef222Smrg	case $host in
879065eef222Smrg	*-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-cegcc*)
879165eef222Smrg	  testbindir=`${ECHO} "$libdir" | ${SED} -e 's*/lib$*/bin*'`
879265eef222Smrg	  case :$dllsearchpath: in
879365eef222Smrg	  *":$libdir:"*) ;;
879465eef222Smrg	  ::) dllsearchpath=$libdir;;
8795200d7199Smrg	  *) func_append dllsearchpath ":$libdir";;
879665eef222Smrg	  esac
879765eef222Smrg	  case :$dllsearchpath: in
879865eef222Smrg	  *":$testbindir:"*) ;;
879965eef222Smrg	  ::) dllsearchpath=$testbindir;;
8800200d7199Smrg	  *) func_append dllsearchpath ":$testbindir";;
880165eef222Smrg	  esac
880265eef222Smrg	  ;;
880365eef222Smrg	esac
880465eef222Smrg      done
880565eef222Smrg      # Substitute the hardcoded libdirs into the rpath.
880665eef222Smrg      if test -n "$hardcode_libdir_separator" &&
880765eef222Smrg	 test -n "$hardcode_libdirs"; then
880865eef222Smrg	libdir="$hardcode_libdirs"
880965eef222Smrg	eval rpath=\" $hardcode_libdir_flag_spec\"
881065eef222Smrg      fi
881165eef222Smrg      compile_rpath="$rpath"
881265eef222Smrg
881365eef222Smrg      rpath=
881465eef222Smrg      hardcode_libdirs=
881565eef222Smrg      for libdir in $finalize_rpath; do
881665eef222Smrg	if test -n "$hardcode_libdir_flag_spec"; then
881765eef222Smrg	  if test -n "$hardcode_libdir_separator"; then
881865eef222Smrg	    if test -z "$hardcode_libdirs"; then
881965eef222Smrg	      hardcode_libdirs="$libdir"
882065eef222Smrg	    else
882165eef222Smrg	      # Just accumulate the unique libdirs.
882265eef222Smrg	      case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in
882365eef222Smrg	      *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*)
882465eef222Smrg		;;
882565eef222Smrg	      *)
8826200d7199Smrg		func_append hardcode_libdirs "$hardcode_libdir_separator$libdir"
882765eef222Smrg		;;
882865eef222Smrg	      esac
882965eef222Smrg	    fi
883065eef222Smrg	  else
883165eef222Smrg	    eval flag=\"$hardcode_libdir_flag_spec\"
8832200d7199Smrg	    func_append rpath " $flag"
883365eef222Smrg	  fi
883465eef222Smrg	elif test -n "$runpath_var"; then
883565eef222Smrg	  case "$finalize_perm_rpath " in
8836ef981d24Smrg	  *" $libdir "*) ;;
8837200d7199Smrg	  *) func_append finalize_perm_rpath " $libdir" ;;
8838ef981d24Smrg	  esac
8839ef981d24Smrg	fi
884065eef222Smrg      done
884165eef222Smrg      # Substitute the hardcoded libdirs into the rpath.
884265eef222Smrg      if test -n "$hardcode_libdir_separator" &&
884365eef222Smrg	 test -n "$hardcode_libdirs"; then
884465eef222Smrg	libdir="$hardcode_libdirs"
884565eef222Smrg	eval rpath=\" $hardcode_libdir_flag_spec\"
884665eef222Smrg      fi
884765eef222Smrg      finalize_rpath="$rpath"
8848ef981d24Smrg
884965eef222Smrg      if test -n "$libobjs" && test "$build_old_libs" = yes; then
885065eef222Smrg	# Transform all the library objects into standard objects.
885156957a04Smrg	compile_command=`$ECHO "$compile_command" | $SP2NL | $SED "$lo2o" | $NL2SP`
885256957a04Smrg	finalize_command=`$ECHO "$finalize_command" | $SP2NL | $SED "$lo2o" | $NL2SP`
885365eef222Smrg      fi
8854ef981d24Smrg
885565eef222Smrg      func_generate_dlsyms "$outputname" "@PROGRAM@" "no"
8856ef981d24Smrg
885765eef222Smrg      # template prelinking step
885865eef222Smrg      if test -n "$prelink_cmds"; then
885965eef222Smrg	func_execute_cmds "$prelink_cmds" 'exit $?'
886065eef222Smrg      fi
8861ef981d24Smrg
886265eef222Smrg      wrappers_required=yes
886365eef222Smrg      case $host in
886456957a04Smrg      *cegcc* | *mingw32ce*)
886556957a04Smrg        # Disable wrappers for cegcc and mingw32ce hosts, we are cross compiling anyway.
886656957a04Smrg        wrappers_required=no
886756957a04Smrg        ;;
886865eef222Smrg      *cygwin* | *mingw* )
886965eef222Smrg        if test "$build_libtool_libs" != yes; then
887065eef222Smrg          wrappers_required=no
887165eef222Smrg        fi
887265eef222Smrg        ;;
887365eef222Smrg      *)
887465eef222Smrg        if test "$need_relink" = no || test "$build_libtool_libs" != yes; then
887565eef222Smrg          wrappers_required=no
887665eef222Smrg        fi
887765eef222Smrg        ;;
887865eef222Smrg      esac
887965eef222Smrg      if test "$wrappers_required" = no; then
888065eef222Smrg	# Replace the output file specification.
888156957a04Smrg	compile_command=`$ECHO "$compile_command" | $SED 's%@OUTPUT@%'"$output"'%g'`
888265eef222Smrg	link_command="$compile_command$compile_rpath"
8883ef981d24Smrg
888465eef222Smrg	# We have no uninstalled library dependencies, so finalize right now.
888565eef222Smrg	exit_status=0
888665eef222Smrg	func_show_eval "$link_command" 'exit_status=$?'
8887ef981d24Smrg
8888200d7199Smrg	if test -n "$postlink_cmds"; then
8889200d7199Smrg	  func_to_tool_file "$output"
8890200d7199Smrg	  postlink_cmds=`func_echo_all "$postlink_cmds" | $SED -e 's%@OUTPUT@%'"$output"'%g' -e 's%@TOOL_OUTPUT@%'"$func_to_tool_file_result"'%g'`
8891200d7199Smrg	  func_execute_cmds "$postlink_cmds" 'exit $?'
8892200d7199Smrg	fi
8893200d7199Smrg
889465eef222Smrg	# Delete the generated files.
889565eef222Smrg	if test -f "$output_objdir/${outputname}S.${objext}"; then
889665eef222Smrg	  func_show_eval '$RM "$output_objdir/${outputname}S.${objext}"'
889765eef222Smrg	fi
8898ef981d24Smrg
889965eef222Smrg	exit $exit_status
890065eef222Smrg      fi
8901ef981d24Smrg
890265eef222Smrg      if test -n "$compile_shlibpath$finalize_shlibpath"; then
890365eef222Smrg	compile_command="$shlibpath_var=\"$compile_shlibpath$finalize_shlibpath\$$shlibpath_var\" $compile_command"
890465eef222Smrg      fi
890565eef222Smrg      if test -n "$finalize_shlibpath"; then
890665eef222Smrg	finalize_command="$shlibpath_var=\"$finalize_shlibpath\$$shlibpath_var\" $finalize_command"
890765eef222Smrg      fi
8908ef981d24Smrg
890965eef222Smrg      compile_var=
891065eef222Smrg      finalize_var=
891165eef222Smrg      if test -n "$runpath_var"; then
891265eef222Smrg	if test -n "$perm_rpath"; then
891365eef222Smrg	  # We should set the runpath_var.
891465eef222Smrg	  rpath=
891565eef222Smrg	  for dir in $perm_rpath; do
8916200d7199Smrg	    func_append rpath "$dir:"
8917ef981d24Smrg	  done
891865eef222Smrg	  compile_var="$runpath_var=\"$rpath\$$runpath_var\" "
8919ef981d24Smrg	fi
892065eef222Smrg	if test -n "$finalize_perm_rpath"; then
892165eef222Smrg	  # We should set the runpath_var.
892265eef222Smrg	  rpath=
892365eef222Smrg	  for dir in $finalize_perm_rpath; do
8924200d7199Smrg	    func_append rpath "$dir:"
892565eef222Smrg	  done
892665eef222Smrg	  finalize_var="$runpath_var=\"$rpath\$$runpath_var\" "
892765eef222Smrg	fi
892865eef222Smrg      fi
8929ef981d24Smrg
893065eef222Smrg      if test "$no_install" = yes; then
893165eef222Smrg	# We don't need to create a wrapper script.
893265eef222Smrg	link_command="$compile_var$compile_command$compile_rpath"
893365eef222Smrg	# Replace the output file specification.
893456957a04Smrg	link_command=`$ECHO "$link_command" | $SED 's%@OUTPUT@%'"$output"'%g'`
893565eef222Smrg	# Delete the old output file.
893665eef222Smrg	$opt_dry_run || $RM $output
893765eef222Smrg	# Link the executable and exit
893865eef222Smrg	func_show_eval "$link_command" 'exit $?'
8939200d7199Smrg
8940200d7199Smrg	if test -n "$postlink_cmds"; then
8941200d7199Smrg	  func_to_tool_file "$output"
8942200d7199Smrg	  postlink_cmds=`func_echo_all "$postlink_cmds" | $SED -e 's%@OUTPUT@%'"$output"'%g' -e 's%@TOOL_OUTPUT@%'"$func_to_tool_file_result"'%g'`
8943200d7199Smrg	  func_execute_cmds "$postlink_cmds" 'exit $?'
8944200d7199Smrg	fi
8945200d7199Smrg
894665eef222Smrg	exit $EXIT_SUCCESS
894765eef222Smrg      fi
8948ef981d24Smrg
894965eef222Smrg      if test "$hardcode_action" = relink; then
895065eef222Smrg	# Fast installation is not supported
895165eef222Smrg	link_command="$compile_var$compile_command$compile_rpath"
895265eef222Smrg	relink_command="$finalize_var$finalize_command$finalize_rpath"
8953ef981d24Smrg
895465eef222Smrg	func_warning "this platform does not like uninstalled shared libraries"
895565eef222Smrg	func_warning "\`$output' will be relinked during installation"
895665eef222Smrg      else
895765eef222Smrg	if test "$fast_install" != no; then
895865eef222Smrg	  link_command="$finalize_var$compile_command$finalize_rpath"
895965eef222Smrg	  if test "$fast_install" = yes; then
896056957a04Smrg	    relink_command=`$ECHO "$compile_var$compile_command$compile_rpath" | $SED 's%@OUTPUT@%\$progdir/\$file%g'`
896165eef222Smrg	  else
896265eef222Smrg	    # fast_install is set to needless
896365eef222Smrg	    relink_command=
896465eef222Smrg	  fi
8965ef981d24Smrg	else
896665eef222Smrg	  link_command="$compile_var$compile_command$compile_rpath"
896765eef222Smrg	  relink_command="$finalize_var$finalize_command$finalize_rpath"
8968ef981d24Smrg	fi
896965eef222Smrg      fi
8970ef981d24Smrg
897165eef222Smrg      # Replace the output file specification.
897256957a04Smrg      link_command=`$ECHO "$link_command" | $SED 's%@OUTPUT@%'"$output_objdir/$outputname"'%g'`
8973ef981d24Smrg
897465eef222Smrg      # Delete the old output files.
897565eef222Smrg      $opt_dry_run || $RM $output $output_objdir/$outputname $output_objdir/lt-$outputname
8976ef981d24Smrg
897765eef222Smrg      func_show_eval "$link_command" 'exit $?'
8978ef981d24Smrg
8979200d7199Smrg      if test -n "$postlink_cmds"; then
8980200d7199Smrg	func_to_tool_file "$output_objdir/$outputname"
8981200d7199Smrg	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'`
8982200d7199Smrg	func_execute_cmds "$postlink_cmds" 'exit $?'
8983200d7199Smrg      fi
8984200d7199Smrg
898565eef222Smrg      # Now create the wrapper script.
898665eef222Smrg      func_verbose "creating $output"
8987ef981d24Smrg
898865eef222Smrg      # Quote the relink command for shipping.
898965eef222Smrg      if test -n "$relink_command"; then
899065eef222Smrg	# Preserve any variables that may affect compiler behavior
899165eef222Smrg	for var in $variables_saved_for_relink; do
899265eef222Smrg	  if eval test -z \"\${$var+set}\"; then
899365eef222Smrg	    relink_command="{ test -z \"\${$var+set}\" || $lt_unset $var || { $var=; export $var; }; }; $relink_command"
899465eef222Smrg	  elif eval var_value=\$$var; test -z "$var_value"; then
899565eef222Smrg	    relink_command="$var=; export $var; $relink_command"
899665eef222Smrg	  else
899765eef222Smrg	    func_quote_for_eval "$var_value"
899865eef222Smrg	    relink_command="$var=$func_quote_for_eval_result; export $var; $relink_command"
899965eef222Smrg	  fi
900065eef222Smrg	done
900165eef222Smrg	relink_command="(cd `pwd`; $relink_command)"
900256957a04Smrg	relink_command=`$ECHO "$relink_command" | $SED "$sed_quote_subst"`
900365eef222Smrg      fi
9004ef981d24Smrg
900565eef222Smrg      # Only actually do things if not in dry run mode.
900665eef222Smrg      $opt_dry_run || {
900765eef222Smrg	# win32 will think the script is a binary if it has
900865eef222Smrg	# a .exe suffix, so we strip it off here.
900965eef222Smrg	case $output in
901065eef222Smrg	  *.exe) func_stripname '' '.exe' "$output"
901165eef222Smrg	         output=$func_stripname_result ;;
901265eef222Smrg	esac
901365eef222Smrg	# test for cygwin because mv fails w/o .exe extensions
9014ef981d24Smrg	case $host in
901565eef222Smrg	  *cygwin*)
901665eef222Smrg	    exeext=.exe
901765eef222Smrg	    func_stripname '' '.exe' "$outputname"
901865eef222Smrg	    outputname=$func_stripname_result ;;
901965eef222Smrg	  *) exeext= ;;
9020ef981d24Smrg	esac
902165eef222Smrg	case $host in
902265eef222Smrg	  *cygwin* | *mingw* )
902365eef222Smrg	    func_dirname_and_basename "$output" "" "."
902465eef222Smrg	    output_name=$func_basename_result
902565eef222Smrg	    output_path=$func_dirname_result
902665eef222Smrg	    cwrappersource="$output_path/$objdir/lt-$output_name.c"
902765eef222Smrg	    cwrapper="$output_path/$output_name.exe"
902865eef222Smrg	    $RM $cwrappersource $cwrapper
902965eef222Smrg	    trap "$RM $cwrappersource $cwrapper; exit $EXIT_FAILURE" 1 2 15
903065eef222Smrg
903165eef222Smrg	    func_emit_cwrapperexe_src > $cwrappersource
903265eef222Smrg
903365eef222Smrg	    # The wrapper executable is built using the $host compiler,
903465eef222Smrg	    # because it contains $host paths and files. If cross-
903565eef222Smrg	    # compiling, it, like the target executable, must be
903665eef222Smrg	    # executed on the $host or under an emulation environment.
903765eef222Smrg	    $opt_dry_run || {
903865eef222Smrg	      $LTCC $LTCFLAGS -o $cwrapper $cwrappersource
903965eef222Smrg	      $STRIP $cwrapper
904065eef222Smrg	    }
9041ef981d24Smrg
904265eef222Smrg	    # Now, create the wrapper script for func_source use:
904365eef222Smrg	    func_ltwrapper_scriptname $cwrapper
904465eef222Smrg	    $RM $func_ltwrapper_scriptname_result
904565eef222Smrg	    trap "$RM $func_ltwrapper_scriptname_result; exit $EXIT_FAILURE" 1 2 15
904665eef222Smrg	    $opt_dry_run || {
904765eef222Smrg	      # note: this script will not be executed, so do not chmod.
904865eef222Smrg	      if test "x$build" = "x$host" ; then
904965eef222Smrg		$cwrapper --lt-dump-script > $func_ltwrapper_scriptname_result
9050ef981d24Smrg	      else
905165eef222Smrg		func_emit_wrapper no > $func_ltwrapper_scriptname_result
9052ef981d24Smrg	      fi
905365eef222Smrg	    }
905465eef222Smrg	  ;;
905565eef222Smrg	  * )
905665eef222Smrg	    $RM $output
905765eef222Smrg	    trap "$RM $output; exit $EXIT_FAILURE" 1 2 15
9058ef981d24Smrg
905965eef222Smrg	    func_emit_wrapper no > $output
906065eef222Smrg	    chmod +x $output
9061ef981d24Smrg	  ;;
9062ef981d24Smrg	esac
906365eef222Smrg      }
906465eef222Smrg      exit $EXIT_SUCCESS
906565eef222Smrg      ;;
906665eef222Smrg    esac
9067ef981d24Smrg
906865eef222Smrg    # See if we need to build an old-fashioned archive.
906965eef222Smrg    for oldlib in $oldlibs; do
9070ef981d24Smrg
907165eef222Smrg      if test "$build_libtool_libs" = convenience; then
907265eef222Smrg	oldobjs="$libobjs_save $symfileobj"
907365eef222Smrg	addlibs="$convenience"
907465eef222Smrg	build_libtool_libs=no
907565eef222Smrg      else
907665eef222Smrg	if test "$build_libtool_libs" = module; then
907765eef222Smrg	  oldobjs="$libobjs_save"
907865eef222Smrg	  build_libtool_libs=no
907965eef222Smrg	else
908065eef222Smrg	  oldobjs="$old_deplibs $non_pic_objects"
908165eef222Smrg	  if test "$preload" = yes && test -f "$symfileobj"; then
9082200d7199Smrg	    func_append oldobjs " $symfileobj"
908365eef222Smrg	  fi
908465eef222Smrg	fi
908565eef222Smrg	addlibs="$old_convenience"
9086ef981d24Smrg      fi
9087ef981d24Smrg
908865eef222Smrg      if test -n "$addlibs"; then
908965eef222Smrg	gentop="$output_objdir/${outputname}x"
9090200d7199Smrg	func_append generated " $gentop"
9091ef981d24Smrg
909265eef222Smrg	func_extract_archives $gentop $addlibs
9093200d7199Smrg	func_append oldobjs " $func_extract_archives_result"
909465eef222Smrg      fi
9095ef981d24Smrg
909665eef222Smrg      # Do each command in the archive commands.
909765eef222Smrg      if test -n "$old_archive_from_new_cmds" && test "$build_libtool_libs" = yes; then
909865eef222Smrg	cmds=$old_archive_from_new_cmds
909965eef222Smrg      else
9100ef981d24Smrg
910165eef222Smrg	# Add any objects from preloaded convenience libraries
910265eef222Smrg	if test -n "$dlprefiles"; then
910365eef222Smrg	  gentop="$output_objdir/${outputname}x"
9104200d7199Smrg	  func_append generated " $gentop"
9105ef981d24Smrg
910665eef222Smrg	  func_extract_archives $gentop $dlprefiles
9107200d7199Smrg	  func_append oldobjs " $func_extract_archives_result"
910865eef222Smrg	fi
9109ef981d24Smrg
911065eef222Smrg	# POSIX demands no paths to be encoded in archives.  We have
911165eef222Smrg	# to avoid creating archives with duplicate basenames if we
911265eef222Smrg	# might have to extract them afterwards, e.g., when creating a
911365eef222Smrg	# static archive out of a convenience library, or when linking
911465eef222Smrg	# the entirety of a libtool archive into another (currently
911565eef222Smrg	# not supported by libtool).
911665eef222Smrg	if (for obj in $oldobjs
911765eef222Smrg	    do
911865eef222Smrg	      func_basename "$obj"
911965eef222Smrg	      $ECHO "$func_basename_result"
912065eef222Smrg	    done | sort | sort -uc >/dev/null 2>&1); then
912165eef222Smrg	  :
912265eef222Smrg	else
912356957a04Smrg	  echo "copying selected object files to avoid basename conflicts..."
912465eef222Smrg	  gentop="$output_objdir/${outputname}x"
9125200d7199Smrg	  func_append generated " $gentop"
912665eef222Smrg	  func_mkdir_p "$gentop"
912765eef222Smrg	  save_oldobjs=$oldobjs
912865eef222Smrg	  oldobjs=
912965eef222Smrg	  counter=1
913065eef222Smrg	  for obj in $save_oldobjs
913165eef222Smrg	  do
913265eef222Smrg	    func_basename "$obj"
913365eef222Smrg	    objbase="$func_basename_result"
913465eef222Smrg	    case " $oldobjs " in
913565eef222Smrg	    " ") oldobjs=$obj ;;
913665eef222Smrg	    *[\ /]"$objbase "*)
913765eef222Smrg	      while :; do
913865eef222Smrg		# Make sure we don't pick an alternate name that also
913965eef222Smrg		# overlaps.
914065eef222Smrg		newobj=lt$counter-$objbase
914165eef222Smrg		func_arith $counter + 1
914265eef222Smrg		counter=$func_arith_result
914365eef222Smrg		case " $oldobjs " in
914465eef222Smrg		*[\ /]"$newobj "*) ;;
914565eef222Smrg		*) if test ! -f "$gentop/$newobj"; then break; fi ;;
914665eef222Smrg		esac
914765eef222Smrg	      done
914865eef222Smrg	      func_show_eval "ln $obj $gentop/$newobj || cp $obj $gentop/$newobj"
9149200d7199Smrg	      func_append oldobjs " $gentop/$newobj"
915065eef222Smrg	      ;;
9151200d7199Smrg	    *) func_append oldobjs " $obj" ;;
915265eef222Smrg	    esac
9153ef981d24Smrg	  done
9154ef981d24Smrg	fi
915565eef222Smrg	eval cmds=\"$old_archive_cmds\"
9156ef981d24Smrg
915765eef222Smrg	func_len " $cmds"
915865eef222Smrg	len=$func_len_result
915965eef222Smrg	if test "$len" -lt "$max_cmd_len" || test "$max_cmd_len" -le -1; then
916065eef222Smrg	  cmds=$old_archive_cmds
9161200d7199Smrg	elif test -n "$archiver_list_spec"; then
9162200d7199Smrg	  func_verbose "using command file archive linking..."
9163200d7199Smrg	  for obj in $oldobjs
9164200d7199Smrg	  do
9165200d7199Smrg	    func_to_tool_file "$obj"
9166200d7199Smrg	    $ECHO "$func_to_tool_file_result"
9167200d7199Smrg	  done > $output_objdir/$libname.libcmd
9168200d7199Smrg	  func_to_tool_file "$output_objdir/$libname.libcmd"
9169200d7199Smrg	  oldobjs=" $archiver_list_spec$func_to_tool_file_result"
9170200d7199Smrg	  cmds=$old_archive_cmds
917165eef222Smrg	else
917265eef222Smrg	  # the command line is too long to link in one step, link in parts
917365eef222Smrg	  func_verbose "using piecewise archive linking..."
917465eef222Smrg	  save_RANLIB=$RANLIB
917565eef222Smrg	  RANLIB=:
917665eef222Smrg	  objlist=
917765eef222Smrg	  concat_cmds=
917865eef222Smrg	  save_oldobjs=$oldobjs
917965eef222Smrg	  oldobjs=
918065eef222Smrg	  # Is there a better way of finding the last object in the list?
918165eef222Smrg	  for obj in $save_oldobjs
918265eef222Smrg	  do
918365eef222Smrg	    last_oldobj=$obj
918465eef222Smrg	  done
918565eef222Smrg	  eval test_cmds=\"$old_archive_cmds\"
918665eef222Smrg	  func_len " $test_cmds"
918765eef222Smrg	  len0=$func_len_result
918865eef222Smrg	  len=$len0
918965eef222Smrg	  for obj in $save_oldobjs
919065eef222Smrg	  do
919165eef222Smrg	    func_len " $obj"
919265eef222Smrg	    func_arith $len + $func_len_result
919365eef222Smrg	    len=$func_arith_result
919465eef222Smrg	    func_append objlist " $obj"
919565eef222Smrg	    if test "$len" -lt "$max_cmd_len"; then
919665eef222Smrg	      :
919765eef222Smrg	    else
919865eef222Smrg	      # the above command should be used before it gets too long
919965eef222Smrg	      oldobjs=$objlist
920065eef222Smrg	      if test "$obj" = "$last_oldobj" ; then
920165eef222Smrg		RANLIB=$save_RANLIB
920265eef222Smrg	      fi
920365eef222Smrg	      test -z "$concat_cmds" || concat_cmds=$concat_cmds~
920465eef222Smrg	      eval concat_cmds=\"\${concat_cmds}$old_archive_cmds\"
920565eef222Smrg	      objlist=
920665eef222Smrg	      len=$len0
920765eef222Smrg	    fi
920865eef222Smrg	  done
920965eef222Smrg	  RANLIB=$save_RANLIB
921065eef222Smrg	  oldobjs=$objlist
921165eef222Smrg	  if test "X$oldobjs" = "X" ; then
921265eef222Smrg	    eval cmds=\"\$concat_cmds\"
921365eef222Smrg	  else
921465eef222Smrg	    eval cmds=\"\$concat_cmds~\$old_archive_cmds\"
921565eef222Smrg	  fi
921665eef222Smrg	fi
921765eef222Smrg      fi
921865eef222Smrg      func_execute_cmds "$cmds" 'exit $?'
9219ef981d24Smrg    done
9220ef981d24Smrg
922165eef222Smrg    test -n "$generated" && \
922265eef222Smrg      func_show_eval "${RM}r$generated"
9223ef981d24Smrg
922465eef222Smrg    # Now create the libtool archive.
922565eef222Smrg    case $output in
922665eef222Smrg    *.la)
922765eef222Smrg      old_library=
922865eef222Smrg      test "$build_old_libs" = yes && old_library="$libname.$libext"
922965eef222Smrg      func_verbose "creating $output"
9230ef981d24Smrg
923165eef222Smrg      # Preserve any variables that may affect compiler behavior
923265eef222Smrg      for var in $variables_saved_for_relink; do
923365eef222Smrg	if eval test -z \"\${$var+set}\"; then
923465eef222Smrg	  relink_command="{ test -z \"\${$var+set}\" || $lt_unset $var || { $var=; export $var; }; }; $relink_command"
923565eef222Smrg	elif eval var_value=\$$var; test -z "$var_value"; then
923665eef222Smrg	  relink_command="$var=; export $var; $relink_command"
9237ef981d24Smrg	else
923865eef222Smrg	  func_quote_for_eval "$var_value"
923965eef222Smrg	  relink_command="$var=$func_quote_for_eval_result; export $var; $relink_command"
9240ef981d24Smrg	fi
924165eef222Smrg      done
924265eef222Smrg      # Quote the link command for shipping.
924365eef222Smrg      relink_command="(cd `pwd`; $SHELL $progpath $preserve_args --mode=relink $libtool_args @inst_prefix_dir@)"
924456957a04Smrg      relink_command=`$ECHO "$relink_command" | $SED "$sed_quote_subst"`
924565eef222Smrg      if test "$hardcode_automatic" = yes ; then
924665eef222Smrg	relink_command=
924765eef222Smrg      fi
9248ef981d24Smrg
924965eef222Smrg      # Only create the output if not a dry run.
925065eef222Smrg      $opt_dry_run || {
925165eef222Smrg	for installed in no yes; do
925265eef222Smrg	  if test "$installed" = yes; then
925365eef222Smrg	    if test -z "$install_libdir"; then
925465eef222Smrg	      break
925565eef222Smrg	    fi
925665eef222Smrg	    output="$output_objdir/$outputname"i
925765eef222Smrg	    # Replace all uninstalled libtool libraries with the installed ones
925865eef222Smrg	    newdependency_libs=
925965eef222Smrg	    for deplib in $dependency_libs; do
926065eef222Smrg	      case $deplib in
926165eef222Smrg	      *.la)
926265eef222Smrg		func_basename "$deplib"
926365eef222Smrg		name="$func_basename_result"
926465eef222Smrg		eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $deplib`
926565eef222Smrg		test -z "$libdir" && \
926665eef222Smrg		  func_fatal_error "\`$deplib' is not a valid libtool archive"
9267200d7199Smrg		func_append newdependency_libs " ${lt_sysroot:+=}$libdir/$name"
9268200d7199Smrg		;;
9269200d7199Smrg	      -L*)
9270200d7199Smrg		func_stripname -L '' "$deplib"
9271200d7199Smrg		func_replace_sysroot "$func_stripname_result"
9272200d7199Smrg		func_append newdependency_libs " -L$func_replace_sysroot_result"
9273200d7199Smrg		;;
9274200d7199Smrg	      -R*)
9275200d7199Smrg		func_stripname -R '' "$deplib"
9276200d7199Smrg		func_replace_sysroot "$func_stripname_result"
9277200d7199Smrg		func_append newdependency_libs " -R$func_replace_sysroot_result"
927865eef222Smrg		;;
9279200d7199Smrg	      *) func_append newdependency_libs " $deplib" ;;
928065eef222Smrg	      esac
928165eef222Smrg	    done
928265eef222Smrg	    dependency_libs="$newdependency_libs"
928365eef222Smrg	    newdlfiles=
928465eef222Smrg
928565eef222Smrg	    for lib in $dlfiles; do
928665eef222Smrg	      case $lib in
928765eef222Smrg	      *.la)
928865eef222Smrg	        func_basename "$lib"
928965eef222Smrg		name="$func_basename_result"
929065eef222Smrg		eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $lib`
929165eef222Smrg		test -z "$libdir" && \
929265eef222Smrg		  func_fatal_error "\`$lib' is not a valid libtool archive"
9293200d7199Smrg		func_append newdlfiles " ${lt_sysroot:+=}$libdir/$name"
929465eef222Smrg		;;
9295200d7199Smrg	      *) func_append newdlfiles " $lib" ;;
929665eef222Smrg	      esac
929765eef222Smrg	    done
929865eef222Smrg	    dlfiles="$newdlfiles"
929965eef222Smrg	    newdlprefiles=
930065eef222Smrg	    for lib in $dlprefiles; do
930165eef222Smrg	      case $lib in
930265eef222Smrg	      *.la)
930365eef222Smrg		# Only pass preopened files to the pseudo-archive (for
930465eef222Smrg		# eventual linking with the app. that links it) if we
930565eef222Smrg		# didn't already link the preopened objects directly into
930665eef222Smrg		# the library:
930765eef222Smrg		func_basename "$lib"
930865eef222Smrg		name="$func_basename_result"
930965eef222Smrg		eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $lib`
931065eef222Smrg		test -z "$libdir" && \
931165eef222Smrg		  func_fatal_error "\`$lib' is not a valid libtool archive"
9312200d7199Smrg		func_append newdlprefiles " ${lt_sysroot:+=}$libdir/$name"
931365eef222Smrg		;;
931465eef222Smrg	      esac
931565eef222Smrg	    done
931665eef222Smrg	    dlprefiles="$newdlprefiles"
931765eef222Smrg	  else
931865eef222Smrg	    newdlfiles=
931965eef222Smrg	    for lib in $dlfiles; do
932065eef222Smrg	      case $lib in
932165eef222Smrg		[\\/]* | [A-Za-z]:[\\/]*) abs="$lib" ;;
932265eef222Smrg		*) abs=`pwd`"/$lib" ;;
932365eef222Smrg	      esac
9324200d7199Smrg	      func_append newdlfiles " $abs"
932565eef222Smrg	    done
932665eef222Smrg	    dlfiles="$newdlfiles"
932765eef222Smrg	    newdlprefiles=
932865eef222Smrg	    for lib in $dlprefiles; do
932965eef222Smrg	      case $lib in
933065eef222Smrg		[\\/]* | [A-Za-z]:[\\/]*) abs="$lib" ;;
933165eef222Smrg		*) abs=`pwd`"/$lib" ;;
933265eef222Smrg	      esac
9333200d7199Smrg	      func_append newdlprefiles " $abs"
933465eef222Smrg	    done
933565eef222Smrg	    dlprefiles="$newdlprefiles"
933665eef222Smrg	  fi
933765eef222Smrg	  $RM $output
933865eef222Smrg	  # place dlname in correct position for cygwin
933956957a04Smrg	  # In fact, it would be nice if we could use this code for all target
934056957a04Smrg	  # systems that can't hard-code library paths into their executables
934156957a04Smrg	  # and that have no shared library path variable independent of PATH,
934256957a04Smrg	  # but it turns out we can't easily determine that from inspecting
934356957a04Smrg	  # libtool variables, so we have to hard-code the OSs to which it
934456957a04Smrg	  # applies here; at the moment, that means platforms that use the PE
934556957a04Smrg	  # object format with DLL files.  See the long comment at the top of
934656957a04Smrg	  # tests/bindir.at for full details.
934765eef222Smrg	  tdlname=$dlname
934865eef222Smrg	  case $host,$output,$installed,$module,$dlname in
934956957a04Smrg	    *cygwin*,*lai,yes,no,*.dll | *mingw*,*lai,yes,no,*.dll | *cegcc*,*lai,yes,no,*.dll)
935056957a04Smrg	      # If a -bindir argument was supplied, place the dll there.
935156957a04Smrg	      if test "x$bindir" != x ;
935256957a04Smrg	      then
935356957a04Smrg		func_relative_path "$install_libdir" "$bindir"
935456957a04Smrg		tdlname=$func_relative_path_result$dlname
935556957a04Smrg	      else
935656957a04Smrg		# Otherwise fall back on heuristic.
935756957a04Smrg		tdlname=../bin/$dlname
935856957a04Smrg	      fi
935956957a04Smrg	      ;;
936065eef222Smrg	  esac
936165eef222Smrg	  $ECHO > $output "\
936265eef222Smrg# $outputname - a libtool library file
936365eef222Smrg# Generated by $PROGRAM (GNU $PACKAGE$TIMESTAMP) $VERSION
936465eef222Smrg#
936565eef222Smrg# Please DO NOT delete this file!
936665eef222Smrg# It is necessary for linking the library.
9367ef981d24Smrg
936865eef222Smrg# The name that we can dlopen(3).
936965eef222Smrgdlname='$tdlname'
9370ef981d24Smrg
937165eef222Smrg# Names of this library.
937265eef222Smrglibrary_names='$library_names'
9373ef981d24Smrg
937465eef222Smrg# The name of the static archive.
937565eef222Smrgold_library='$old_library'
9376ef981d24Smrg
937765eef222Smrg# Linker flags that can not go in dependency_libs.
937865eef222Smrginherited_linker_flags='$new_inherited_linker_flags'
9379ef981d24Smrg
938065eef222Smrg# Libraries that this one depends upon.
938165eef222Smrgdependency_libs='$dependency_libs'
9382ef981d24Smrg
938365eef222Smrg# Names of additional weak libraries provided by this library
938465eef222Smrgweak_library_names='$weak_libs'
9385ef981d24Smrg
938665eef222Smrg# Version information for $libname.
938765eef222Smrgcurrent=$current
938865eef222Smrgage=$age
938965eef222Smrgrevision=$revision
9390ef981d24Smrg
939165eef222Smrg# Is this an already installed library?
939265eef222Smrginstalled=$installed
9393ef981d24Smrg
939465eef222Smrg# Should we warn about portability when linking against -modules?
939565eef222Smrgshouldnotlink=$module
9396ef981d24Smrg
939765eef222Smrg# Files to dlopen/dlpreopen
939865eef222Smrgdlopen='$dlfiles'
939965eef222Smrgdlpreopen='$dlprefiles'
9400ef981d24Smrg
940165eef222Smrg# Directory that this library needs to be installed in:
940265eef222Smrglibdir='$install_libdir'"
940365eef222Smrg	  if test "$installed" = no && test "$need_relink" = yes; then
940465eef222Smrg	    $ECHO >> $output "\
940565eef222Smrgrelink_command=\"$relink_command\""
940665eef222Smrg	  fi
940765eef222Smrg	done
940865eef222Smrg      }
9409ef981d24Smrg
941065eef222Smrg      # Do a symbolic link so that the libtool archive can be found in
941165eef222Smrg      # LD_LIBRARY_PATH before the program is installed.
941265eef222Smrg      func_show_eval '( cd "$output_objdir" && $RM "$outputname" && $LN_S "../$outputname" "$outputname" )' 'exit $?'
941365eef222Smrg      ;;
941465eef222Smrg    esac
941565eef222Smrg    exit $EXIT_SUCCESS
941665eef222Smrg}
9417ef981d24Smrg
9418200d7199Smrg{ test "$opt_mode" = link || test "$opt_mode" = relink; } &&
941965eef222Smrg    func_mode_link ${1+"$@"}
9420ef981d24Smrg
9421ef981d24Smrg
942265eef222Smrg# func_mode_uninstall arg...
942365eef222Smrgfunc_mode_uninstall ()
942465eef222Smrg{
942565eef222Smrg    $opt_debug
942665eef222Smrg    RM="$nonopt"
9427ef981d24Smrg    files=
9428ef981d24Smrg    rmforce=
9429ef981d24Smrg    exit_status=0
9430ef981d24Smrg
9431ef981d24Smrg    # This variable tells wrapper scripts just to set variables rather
9432ef981d24Smrg    # than running their programs.
9433ef981d24Smrg    libtool_install_magic="$magic"
9434ef981d24Smrg
9435ef981d24Smrg    for arg
9436ef981d24Smrg    do
9437ef981d24Smrg      case $arg in
9438200d7199Smrg      -f) func_append RM " $arg"; rmforce=yes ;;
9439200d7199Smrg      -*) func_append RM " $arg" ;;
9440200d7199Smrg      *) func_append files " $arg" ;;
9441ef981d24Smrg      esac
9442ef981d24Smrg    done
9443ef981d24Smrg
944465eef222Smrg    test -z "$RM" && \
944565eef222Smrg      func_fatal_help "you must specify an RM program"
9446ef981d24Smrg
9447ef981d24Smrg    rmdirs=
9448ef981d24Smrg
9449ef981d24Smrg    for file in $files; do
945065eef222Smrg      func_dirname "$file" "" "."
945165eef222Smrg      dir="$func_dirname_result"
945265eef222Smrg      if test "X$dir" = X.; then
9453200d7199Smrg	odir="$objdir"
9454ef981d24Smrg      else
9455200d7199Smrg	odir="$dir/$objdir"
9456ef981d24Smrg      fi
945765eef222Smrg      func_basename "$file"
945865eef222Smrg      name="$func_basename_result"
9459200d7199Smrg      test "$opt_mode" = uninstall && odir="$dir"
9460ef981d24Smrg
9461200d7199Smrg      # Remember odir for removal later, being careful to avoid duplicates
9462200d7199Smrg      if test "$opt_mode" = clean; then
9463ef981d24Smrg	case " $rmdirs " in
9464200d7199Smrg	  *" $odir "*) ;;
9465200d7199Smrg	  *) func_append rmdirs " $odir" ;;
9466ef981d24Smrg	esac
9467ef981d24Smrg      fi
9468ef981d24Smrg
9469ef981d24Smrg      # Don't error if the file doesn't exist and rm -f was used.
947065eef222Smrg      if { test -L "$file"; } >/dev/null 2>&1 ||
947165eef222Smrg	 { test -h "$file"; } >/dev/null 2>&1 ||
947265eef222Smrg	 test -f "$file"; then
9473ef981d24Smrg	:
9474ef981d24Smrg      elif test -d "$file"; then
9475ef981d24Smrg	exit_status=1
9476ef981d24Smrg	continue
9477ef981d24Smrg      elif test "$rmforce" = yes; then
9478ef981d24Smrg	continue
9479ef981d24Smrg      fi
9480ef981d24Smrg
9481ef981d24Smrg      rmfiles="$file"
9482ef981d24Smrg
9483ef981d24Smrg      case $name in
9484ef981d24Smrg      *.la)
9485ef981d24Smrg	# Possibly a libtool archive, so verify it.
948665eef222Smrg	if func_lalib_p "$file"; then
948765eef222Smrg	  func_source $dir/$name
9488ef981d24Smrg
9489ef981d24Smrg	  # Delete the libtool libraries and symlinks.
9490ef981d24Smrg	  for n in $library_names; do
9491200d7199Smrg	    func_append rmfiles " $odir/$n"
9492ef981d24Smrg	  done
9493200d7199Smrg	  test -n "$old_library" && func_append rmfiles " $odir/$old_library"
9494ef981d24Smrg
9495200d7199Smrg	  case "$opt_mode" in
9496ef981d24Smrg	  clean)
9497200d7199Smrg	    case " $library_names " in
9498ef981d24Smrg	    *" $dlname "*) ;;
9499200d7199Smrg	    *) test -n "$dlname" && func_append rmfiles " $odir/$dlname" ;;
9500ef981d24Smrg	    esac
9501200d7199Smrg	    test -n "$libdir" && func_append rmfiles " $odir/$name $odir/${name}i"
9502ef981d24Smrg	    ;;
9503ef981d24Smrg	  uninstall)
9504ef981d24Smrg	    if test -n "$library_names"; then
9505ef981d24Smrg	      # Do each command in the postuninstall commands.
950665eef222Smrg	      func_execute_cmds "$postuninstall_cmds" 'test "$rmforce" = yes || exit_status=1'
9507ef981d24Smrg	    fi
9508ef981d24Smrg
9509ef981d24Smrg	    if test -n "$old_library"; then
9510ef981d24Smrg	      # Do each command in the old_postuninstall commands.
951165eef222Smrg	      func_execute_cmds "$old_postuninstall_cmds" 'test "$rmforce" = yes || exit_status=1'
9512ef981d24Smrg	    fi
9513ef981d24Smrg	    # FIXME: should reinstall the best remaining shared library.
9514ef981d24Smrg	    ;;
9515ef981d24Smrg	  esac
9516ef981d24Smrg	fi
9517ef981d24Smrg	;;
9518ef981d24Smrg
9519ef981d24Smrg      *.lo)
9520ef981d24Smrg	# Possibly a libtool object, so verify it.
952165eef222Smrg	if func_lalib_p "$file"; then
9522ef981d24Smrg
9523ef981d24Smrg	  # Read the .lo file
952465eef222Smrg	  func_source $dir/$name
9525ef981d24Smrg
9526ef981d24Smrg	  # Add PIC object to the list of files to remove.
952765eef222Smrg	  if test -n "$pic_object" &&
952865eef222Smrg	     test "$pic_object" != none; then
9529200d7199Smrg	    func_append rmfiles " $dir/$pic_object"
9530ef981d24Smrg	  fi
9531ef981d24Smrg
9532ef981d24Smrg	  # Add non-PIC object to the list of files to remove.
953365eef222Smrg	  if test -n "$non_pic_object" &&
953465eef222Smrg	     test "$non_pic_object" != none; then
9535200d7199Smrg	    func_append rmfiles " $dir/$non_pic_object"
9536ef981d24Smrg	  fi
9537ef981d24Smrg	fi
9538ef981d24Smrg	;;
9539ef981d24Smrg
9540ef981d24Smrg      *)
9541200d7199Smrg	if test "$opt_mode" = clean ; then
9542ef981d24Smrg	  noexename=$name
9543ef981d24Smrg	  case $file in
9544ef981d24Smrg	  *.exe)
954565eef222Smrg	    func_stripname '' '.exe' "$file"
954665eef222Smrg	    file=$func_stripname_result
954765eef222Smrg	    func_stripname '' '.exe' "$name"
954865eef222Smrg	    noexename=$func_stripname_result
9549ef981d24Smrg	    # $file with .exe has already been added to rmfiles,
9550ef981d24Smrg	    # add $file without .exe
9551200d7199Smrg	    func_append rmfiles " $file"
9552ef981d24Smrg	    ;;
9553ef981d24Smrg	  esac
9554ef981d24Smrg	  # Do a test to see if this is a libtool program.
955565eef222Smrg	  if func_ltwrapper_p "$file"; then
955665eef222Smrg	    if func_ltwrapper_executable_p "$file"; then
955765eef222Smrg	      func_ltwrapper_scriptname "$file"
955865eef222Smrg	      relink_command=
955965eef222Smrg	      func_source $func_ltwrapper_scriptname_result
9560200d7199Smrg	      func_append rmfiles " $func_ltwrapper_scriptname_result"
956165eef222Smrg	    else
956265eef222Smrg	      relink_command=
956365eef222Smrg	      func_source $dir/$noexename
956465eef222Smrg	    fi
9565ef981d24Smrg
9566ef981d24Smrg	    # note $name still contains .exe if it was in $file originally
9567ef981d24Smrg	    # as does the version of $file that was added into $rmfiles
9568200d7199Smrg	    func_append rmfiles " $odir/$name $odir/${name}S.${objext}"
9569ef981d24Smrg	    if test "$fast_install" = yes && test -n "$relink_command"; then
9570200d7199Smrg	      func_append rmfiles " $odir/lt-$name"
9571ef981d24Smrg	    fi
9572ef981d24Smrg	    if test "X$noexename" != "X$name" ; then
9573200d7199Smrg	      func_append rmfiles " $odir/lt-${noexename}.c"
9574ef981d24Smrg	    fi
9575ef981d24Smrg	  fi
9576ef981d24Smrg	fi
9577ef981d24Smrg	;;
9578ef981d24Smrg      esac
957965eef222Smrg      func_show_eval "$RM $rmfiles" 'exit_status=1'
9580ef981d24Smrg    done
9581ef981d24Smrg
9582ef981d24Smrg    # Try to remove the ${objdir}s in the directories where we deleted files
9583ef981d24Smrg    for dir in $rmdirs; do
9584ef981d24Smrg      if test -d "$dir"; then
958565eef222Smrg	func_show_eval "rmdir $dir >/dev/null 2>&1"
9586ef981d24Smrg      fi
9587ef981d24Smrg    done
9588ef981d24Smrg
9589ef981d24Smrg    exit $exit_status
959065eef222Smrg}
9591ef981d24Smrg
9592200d7199Smrg{ test "$opt_mode" = uninstall || test "$opt_mode" = clean; } &&
959365eef222Smrg    func_mode_uninstall ${1+"$@"}
9594ef981d24Smrg
9595200d7199Smrgtest -z "$opt_mode" && {
959665eef222Smrg  help="$generic_help"
959765eef222Smrg  func_fatal_help "you must specify a MODE"
959865eef222Smrg}
959965eef222Smrg
960065eef222Smrgtest -z "$exec_cmd" && \
9601200d7199Smrg  func_fatal_help "invalid operation mode \`$opt_mode'"
9602ef981d24Smrg
9603ef981d24Smrgif test -n "$exec_cmd"; then
960465eef222Smrg  eval exec "$exec_cmd"
9605ef981d24Smrg  exit $EXIT_FAILURE
9606ef981d24Smrgfi
9607ef981d24Smrg
960865eef222Smrgexit $exit_status
9609ef981d24Smrg
9610ef981d24Smrg
9611ef981d24Smrg# The TAGs below are defined such that we never get into a situation
9612ef981d24Smrg# in which we disable both kinds of libraries.  Given conflicting
9613ef981d24Smrg# choices, we go for a static library, that is the most portable,
9614ef981d24Smrg# since we can't tell whether shared libraries were disabled because
9615ef981d24Smrg# the user asked for that or because the platform doesn't support
9616ef981d24Smrg# them.  This is particularly important on AIX, because we don't
9617ef981d24Smrg# support having both static and shared libraries enabled at the same
9618ef981d24Smrg# time on that platform, so we default to a shared-only configuration.
9619ef981d24Smrg# If a disable-shared tag is given, we'll fallback to a static-only
9620ef981d24Smrg# configuration.  But we'll never go from static-only to shared-only.
9621ef981d24Smrg
9622ef981d24Smrg# ### BEGIN LIBTOOL TAG CONFIG: disable-shared
962365eef222Smrgbuild_libtool_libs=no
962465eef222Smrgbuild_old_libs=yes
9625ef981d24Smrg# ### END LIBTOOL TAG CONFIG: disable-shared
9626ef981d24Smrg
9627ef981d24Smrg# ### BEGIN LIBTOOL TAG CONFIG: disable-static
962865eef222Smrgbuild_old_libs=`case $build_libtool_libs in yes) echo no;; *) echo yes;; esac`
9629ef981d24Smrg# ### END LIBTOOL TAG CONFIG: disable-static
9630ef981d24Smrg
9631ef981d24Smrg# Local Variables:
9632ef981d24Smrg# mode:shell-script
9633ef981d24Smrg# sh-indentation:2
9634ef981d24Smrg# End:
963565eef222Smrg# vi:sw=2
963665eef222Smrg
9637