ltmain.sh revision fb5e8d76
1698f425bSmrg
2fb5e8d76Smrg# libtool (GNU libtool) 2.4.2
3698f425bSmrg# Written by Gordon Matzigkeit <gord@gnu.ai.mit.edu>, 1996
4698f425bSmrg
59ef0b394Smrg# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005, 2006,
6fb5e8d76Smrg# 2007, 2008, 2009, 2010, 2011 Free Software Foundation, Inc.
7698f425bSmrg# This is free software; see the source for copying conditions.  There is NO
8698f425bSmrg# warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
9698f425bSmrg
10698f425bSmrg# GNU Libtool is free software; you can redistribute it and/or modify
11266e564dSmrg# it under the terms of the GNU General Public License as published by
12266e564dSmrg# the Free Software Foundation; either version 2 of the License, or
13266e564dSmrg# (at your option) any later version.
14266e564dSmrg#
15698f425bSmrg# As a special exception to the GNU General Public License,
16698f425bSmrg# if you distribute this file as part of a program or library that
17698f425bSmrg# is built using GNU Libtool, you may include this file under the
18698f425bSmrg# same distribution terms that you use for the rest of that program.
19698f425bSmrg#
20698f425bSmrg# GNU Libtool is distributed in the hope that it will be useful, but
21266e564dSmrg# WITHOUT ANY WARRANTY; without even the implied warranty of
22266e564dSmrg# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
23266e564dSmrg# General Public License for more details.
24266e564dSmrg#
25266e564dSmrg# You should have received a copy of the GNU General Public License
26698f425bSmrg# along with GNU Libtool; see the file COPYING.  If not, a copy
27698f425bSmrg# can be downloaded from http://www.gnu.org/licenses/gpl.html,
28698f425bSmrg# or obtained by writing to the Free Software Foundation, Inc.,
29698f425bSmrg# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
30c5629e66Smrg
31698f425bSmrg# Usage: $progname [OPTION]... [MODE-ARG]...
32698f425bSmrg#
33698f425bSmrg# Provide generalized library-building support services.
34698f425bSmrg#
359ef0b394Smrg#       --config             show all configuration variables
369ef0b394Smrg#       --debug              enable verbose shell tracing
379ef0b394Smrg#   -n, --dry-run            display commands without modifying any files
389ef0b394Smrg#       --features           display basic configuration information and exit
399ef0b394Smrg#       --mode=MODE          use operation mode MODE
409ef0b394Smrg#       --preserve-dup-deps  don't remove duplicate dependency libraries
419ef0b394Smrg#       --quiet, --silent    don't print informational messages
429ef0b394Smrg#       --no-quiet, --no-silent
439ef0b394Smrg#                            print informational messages (default)
44fb5e8d76Smrg#       --no-warn            don't display warning messages
459ef0b394Smrg#       --tag=TAG            use configuration variables from tag TAG
469ef0b394Smrg#   -v, --verbose            print more informational messages than default
479ef0b394Smrg#       --no-verbose         don't print the extra informational messages
489ef0b394Smrg#       --version            print version information
499ef0b394Smrg#   -h, --help, --help-all   print short, long, or detailed help message
50698f425bSmrg#
51698f425bSmrg# MODE must be one of the following:
52698f425bSmrg#
539ef0b394Smrg#         clean              remove files from the build directory
549ef0b394Smrg#         compile            compile a source file into a libtool object
559ef0b394Smrg#         execute            automatically set library path, then run a program
569ef0b394Smrg#         finish             complete the installation of libtool libraries
579ef0b394Smrg#         install            install libraries or executables
589ef0b394Smrg#         link               create a library or an executable
599ef0b394Smrg#         uninstall          remove libraries from an installed directory
60698f425bSmrg#
619ef0b394Smrg# MODE-ARGS vary depending on the MODE.  When passed as first option,
629ef0b394Smrg# `--mode=MODE' may be abbreviated as `MODE' or a unique abbreviation of that.
63698f425bSmrg# Try `$progname --help --mode=MODE' for a more detailed description of MODE.
64698f425bSmrg#
65698f425bSmrg# When reporting a bug, please describe a test case to reproduce it and
66698f425bSmrg# include the following information:
67698f425bSmrg#
689ef0b394Smrg#         host-triplet:	$host
699ef0b394Smrg#         shell:		$SHELL
709ef0b394Smrg#         compiler:		$LTCC
719ef0b394Smrg#         compiler flags:		$LTCFLAGS
729ef0b394Smrg#         linker:		$LD (gnu? $with_gnu_ld)
73fb5e8d76Smrg#         $progname:	(GNU libtool) 2.4.2
749ef0b394Smrg#         automake:	$automake_version
759ef0b394Smrg#         autoconf:	$autoconf_version
76698f425bSmrg#
77698f425bSmrg# Report bugs to <bug-libtool@gnu.org>.
789ef0b394Smrg# GNU libtool home page: <http://www.gnu.org/software/libtool/>.
799ef0b394Smrg# General help using GNU software: <http://www.gnu.org/gethelp/>.
80266e564dSmrg
819ef0b394SmrgPROGRAM=libtool
82266e564dSmrgPACKAGE=libtool
83fb5e8d76SmrgVERSION=2.4.2
84698f425bSmrgTIMESTAMP=""
85fb5e8d76Smrgpackage_revision=1.3337
86c5629e66Smrg
87698f425bSmrg# Be Bourne compatible
88c5629e66Smrgif test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then
89c5629e66Smrg  emulate sh
90c5629e66Smrg  NULLCMD=:
91c5629e66Smrg  # Zsh 3.x and 4.x performs word splitting on ${1+"$@"}, which
92c5629e66Smrg  # is contrary to our usage.  Disable this feature.
93c5629e66Smrg  alias -g '${1+"$@"}'='"$@"'
94266e564dSmrg  setopt NO_GLOB_SUBST
95c5629e66Smrgelse
96c5629e66Smrg  case `(set -o) 2>/dev/null` in *posix*) set -o posix;; esac
97266e564dSmrgfi
98c5629e66SmrgBIN_SH=xpg4; export BIN_SH # for Tru64
99c5629e66SmrgDUALCASE=1; export DUALCASE # for MKS sh
100266e564dSmrg
1019ef0b394Smrg# A function that is used when there is no print builtin or printf.
1029ef0b394Smrgfunc_fallback_echo ()
1039ef0b394Smrg{
1049ef0b394Smrg  eval 'cat <<_LTECHO_EOF
1059ef0b394Smrg$1
1069ef0b394Smrg_LTECHO_EOF'
1079ef0b394Smrg}
1089ef0b394Smrg
109698f425bSmrg# NLS nuisances: We save the old values to restore during execute mode.
110698f425bSmrglt_user_locale=
111698f425bSmrglt_safe_locale=
112c5629e66Smrgfor lt_var in LANG LANGUAGE LC_ALL LC_CTYPE LC_COLLATE LC_MESSAGES
113c5629e66Smrgdo
114c5629e66Smrg  eval "if test \"\${$lt_var+set}\" = set; then
115698f425bSmrg          save_$lt_var=\$$lt_var
116698f425bSmrg          $lt_var=C
117c5629e66Smrg	  export $lt_var
118698f425bSmrg	  lt_user_locale=\"$lt_var=\\\$save_\$lt_var; \$lt_user_locale\"
119698f425bSmrg	  lt_safe_locale=\"$lt_var=C; \$lt_safe_locale\"
120c5629e66Smrg	fi"
121c5629e66Smrgdone
1229ef0b394SmrgLC_ALL=C
1239ef0b394SmrgLANGUAGE=C
1249ef0b394Smrgexport LANGUAGE LC_ALL
125c5629e66Smrg
126698f425bSmrg$lt_unset CDPATH
127698f425bSmrg
128698f425bSmrg
1299ef0b394Smrg# Work around backward compatibility issue on IRIX 6.5. On IRIX 6.4+, sh
1309ef0b394Smrg# is ksh but when the shell is invoked as "sh" and the current value of
1319ef0b394Smrg# the _XPG environment variable is not equal to 1 (one), the special
1329ef0b394Smrg# positional parameter $0, within a function call, is the name of the
1339ef0b394Smrg# function.
1349ef0b394Smrgprogpath="$0"
135698f425bSmrg
136698f425bSmrg
137698f425bSmrg
138698f425bSmrg: ${CP="cp -f"}
1399ef0b394Smrgtest "${ECHO+set}" = set || ECHO=${as_echo-'printf %s\n'}
140698f425bSmrg: ${MAKE="make"}
141698f425bSmrg: ${MKDIR="mkdir"}
142698f425bSmrg: ${MV="mv -f"}
143698f425bSmrg: ${RM="rm -f"}
144698f425bSmrg: ${SHELL="${CONFIG_SHELL-/bin/sh}"}
145698f425bSmrg: ${Xsed="$SED -e 1s/^X//"}
146698f425bSmrg
147698f425bSmrg# Global variables:
148698f425bSmrgEXIT_SUCCESS=0
149698f425bSmrgEXIT_FAILURE=1
150698f425bSmrgEXIT_MISMATCH=63  # $? = 63 is used to indicate version mismatch to missing.
151698f425bSmrgEXIT_SKIP=77	  # $? = 77 is used to indicate a skipped test to automake.
152698f425bSmrg
153698f425bSmrgexit_status=$EXIT_SUCCESS
154266e564dSmrg
155266e564dSmrg# Make sure IFS has a sensible default
156266e564dSmrglt_nl='
157266e564dSmrg'
158266e564dSmrgIFS=" 	$lt_nl"
159266e564dSmrg
160698f425bSmrgdirname="s,/[^/]*$,,"
161698f425bSmrgbasename="s,^.*/,,"
162698f425bSmrg
1639ef0b394Smrg# func_dirname file append nondir_replacement
1649ef0b394Smrg# Compute the dirname of FILE.  If nonempty, add APPEND to the result,
1659ef0b394Smrg# otherwise set result to NONDIR_REPLACEMENT.
1669ef0b394Smrgfunc_dirname ()
1679ef0b394Smrg{
1689ef0b394Smrg    func_dirname_result=`$ECHO "${1}" | $SED "$dirname"`
1699ef0b394Smrg    if test "X$func_dirname_result" = "X${1}"; then
1709ef0b394Smrg      func_dirname_result="${3}"
1719ef0b394Smrg    else
1729ef0b394Smrg      func_dirname_result="$func_dirname_result${2}"
1739ef0b394Smrg    fi
1749ef0b394Smrg} # func_dirname may be replaced by extended shell implementation
1759ef0b394Smrg
1769ef0b394Smrg
1779ef0b394Smrg# func_basename file
1789ef0b394Smrgfunc_basename ()
1799ef0b394Smrg{
1809ef0b394Smrg    func_basename_result=`$ECHO "${1}" | $SED "$basename"`
1819ef0b394Smrg} # func_basename may be replaced by extended shell implementation
1829ef0b394Smrg
1839ef0b394Smrg
184698f425bSmrg# func_dirname_and_basename file append nondir_replacement
185698f425bSmrg# perform func_basename and func_dirname in a single function
186698f425bSmrg# call:
187698f425bSmrg#   dirname:  Compute the dirname of FILE.  If nonempty,
188698f425bSmrg#             add APPEND to the result, otherwise set result
189698f425bSmrg#             to NONDIR_REPLACEMENT.
190698f425bSmrg#             value returned in "$func_dirname_result"
191698f425bSmrg#   basename: Compute filename of FILE.
192698f425bSmrg#             value retuned in "$func_basename_result"
193698f425bSmrg# Implementation must be kept synchronized with func_dirname
194698f425bSmrg# and func_basename. For efficiency, we do not delegate to
195698f425bSmrg# those functions but instead duplicate the functionality here.
196698f425bSmrgfunc_dirname_and_basename ()
197698f425bSmrg{
1989ef0b394Smrg    # Extract subdirectory from the argument.
1999ef0b394Smrg    func_dirname_result=`$ECHO "${1}" | $SED -e "$dirname"`
2009ef0b394Smrg    if test "X$func_dirname_result" = "X${1}"; then
2019ef0b394Smrg      func_dirname_result="${3}"
2029ef0b394Smrg    else
2039ef0b394Smrg      func_dirname_result="$func_dirname_result${2}"
2049ef0b394Smrg    fi
2059ef0b394Smrg    func_basename_result=`$ECHO "${1}" | $SED -e "$basename"`
2069ef0b394Smrg} # func_dirname_and_basename may be replaced by extended shell implementation
2079ef0b394Smrg
2089ef0b394Smrg
2099ef0b394Smrg# func_stripname prefix suffix name
2109ef0b394Smrg# strip PREFIX and SUFFIX off of NAME.
2119ef0b394Smrg# PREFIX and SUFFIX must not contain globbing or regex special
2129ef0b394Smrg# characters, hashes, percent signs, but SUFFIX may contain a leading
2139ef0b394Smrg# dot (in which case that matches only a dot).
2149ef0b394Smrg# func_strip_suffix prefix name
2159ef0b394Smrgfunc_stripname ()
2169ef0b394Smrg{
2179ef0b394Smrg    case ${2} in
2189ef0b394Smrg      .*) func_stripname_result=`$ECHO "${3}" | $SED "s%^${1}%%; s%\\\\${2}\$%%"`;;
2199ef0b394Smrg      *)  func_stripname_result=`$ECHO "${3}" | $SED "s%^${1}%%; s%${2}\$%%"`;;
2209ef0b394Smrg    esac
2219ef0b394Smrg} # func_stripname may be replaced by extended shell implementation
2229ef0b394Smrg
2239ef0b394Smrg
2249ef0b394Smrg# These SED scripts presuppose an absolute path with a trailing slash.
2259ef0b394Smrgpathcar='s,^/\([^/]*\).*$,\1,'
2269ef0b394Smrgpathcdr='s,^/[^/]*,,'
2279ef0b394Smrgremovedotparts=':dotsl
2289ef0b394Smrg		s@/\./@/@g
2299ef0b394Smrg		t dotsl
2309ef0b394Smrg		s,/\.$,/,'
2319ef0b394Smrgcollapseslashes='s@/\{1,\}@/@g'
2329ef0b394Smrgfinalslash='s,/*$,/,'
2339ef0b394Smrg
2349ef0b394Smrg# func_normal_abspath PATH
2359ef0b394Smrg# Remove doubled-up and trailing slashes, "." path components,
2369ef0b394Smrg# and cancel out any ".." path components in PATH after making
2379ef0b394Smrg# it an absolute path.
2389ef0b394Smrg#             value returned in "$func_normal_abspath_result"
2399ef0b394Smrgfunc_normal_abspath ()
2409ef0b394Smrg{
2419ef0b394Smrg  # Start from root dir and reassemble the path.
2429ef0b394Smrg  func_normal_abspath_result=
2439ef0b394Smrg  func_normal_abspath_tpath=$1
2449ef0b394Smrg  func_normal_abspath_altnamespace=
2459ef0b394Smrg  case $func_normal_abspath_tpath in
2469ef0b394Smrg    "")
2479ef0b394Smrg      # Empty path, that just means $cwd.
2489ef0b394Smrg      func_stripname '' '/' "`pwd`"
2499ef0b394Smrg      func_normal_abspath_result=$func_stripname_result
2509ef0b394Smrg      return
2519ef0b394Smrg    ;;
2529ef0b394Smrg    # The next three entries are used to spot a run of precisely
2539ef0b394Smrg    # two leading slashes without using negated character classes;
2549ef0b394Smrg    # we take advantage of case's first-match behaviour.
2559ef0b394Smrg    ///*)
2569ef0b394Smrg      # Unusual form of absolute path, do nothing.
2579ef0b394Smrg    ;;
2589ef0b394Smrg    //*)
2599ef0b394Smrg      # Not necessarily an ordinary path; POSIX reserves leading '//'
2609ef0b394Smrg      # and for example Cygwin uses it to access remote file shares
2619ef0b394Smrg      # over CIFS/SMB, so we conserve a leading double slash if found.
2629ef0b394Smrg      func_normal_abspath_altnamespace=/
2639ef0b394Smrg    ;;
2649ef0b394Smrg    /*)
2659ef0b394Smrg      # Absolute path, do nothing.
2669ef0b394Smrg    ;;
2679ef0b394Smrg    *)
2689ef0b394Smrg      # Relative path, prepend $cwd.
2699ef0b394Smrg      func_normal_abspath_tpath=`pwd`/$func_normal_abspath_tpath
2709ef0b394Smrg    ;;
2719ef0b394Smrg  esac
2729ef0b394Smrg  # Cancel out all the simple stuff to save iterations.  We also want
2739ef0b394Smrg  # the path to end with a slash for ease of parsing, so make sure
2749ef0b394Smrg  # there is one (and only one) here.
2759ef0b394Smrg  func_normal_abspath_tpath=`$ECHO "$func_normal_abspath_tpath" | $SED \
2769ef0b394Smrg        -e "$removedotparts" -e "$collapseslashes" -e "$finalslash"`
2779ef0b394Smrg  while :; do
2789ef0b394Smrg    # Processed it all yet?
2799ef0b394Smrg    if test "$func_normal_abspath_tpath" = / ; then
2809ef0b394Smrg      # If we ascended to the root using ".." the result may be empty now.
2819ef0b394Smrg      if test -z "$func_normal_abspath_result" ; then
2829ef0b394Smrg        func_normal_abspath_result=/
2839ef0b394Smrg      fi
2849ef0b394Smrg      break
2859ef0b394Smrg    fi
2869ef0b394Smrg    func_normal_abspath_tcomponent=`$ECHO "$func_normal_abspath_tpath" | $SED \
2879ef0b394Smrg        -e "$pathcar"`
2889ef0b394Smrg    func_normal_abspath_tpath=`$ECHO "$func_normal_abspath_tpath" | $SED \
2899ef0b394Smrg        -e "$pathcdr"`
2909ef0b394Smrg    # Figure out what to do with it
2919ef0b394Smrg    case $func_normal_abspath_tcomponent in
2929ef0b394Smrg      "")
2939ef0b394Smrg        # Trailing empty path component, ignore it.
2949ef0b394Smrg      ;;
2959ef0b394Smrg      ..)
2969ef0b394Smrg        # Parent dir; strip last assembled component from result.
2979ef0b394Smrg        func_dirname "$func_normal_abspath_result"
2989ef0b394Smrg        func_normal_abspath_result=$func_dirname_result
2999ef0b394Smrg      ;;
3009ef0b394Smrg      *)
3019ef0b394Smrg        # Actual path component, append it.
3029ef0b394Smrg        func_normal_abspath_result=$func_normal_abspath_result/$func_normal_abspath_tcomponent
3039ef0b394Smrg      ;;
3049ef0b394Smrg    esac
3059ef0b394Smrg  done
3069ef0b394Smrg  # Restore leading double-slash if one was found on entry.
3079ef0b394Smrg  func_normal_abspath_result=$func_normal_abspath_altnamespace$func_normal_abspath_result
308698f425bSmrg}
309266e564dSmrg
3109ef0b394Smrg# func_relative_path SRCDIR DSTDIR
3119ef0b394Smrg# generates a relative path from SRCDIR to DSTDIR, with a trailing
3129ef0b394Smrg# slash if non-empty, suitable for immediately appending a filename
3139ef0b394Smrg# without needing to append a separator.
3149ef0b394Smrg#             value returned in "$func_relative_path_result"
3159ef0b394Smrgfunc_relative_path ()
3169ef0b394Smrg{
3179ef0b394Smrg  func_relative_path_result=
3189ef0b394Smrg  func_normal_abspath "$1"
3199ef0b394Smrg  func_relative_path_tlibdir=$func_normal_abspath_result
3209ef0b394Smrg  func_normal_abspath "$2"
3219ef0b394Smrg  func_relative_path_tbindir=$func_normal_abspath_result
3229ef0b394Smrg
3239ef0b394Smrg  # Ascend the tree starting from libdir
3249ef0b394Smrg  while :; do
3259ef0b394Smrg    # check if we have found a prefix of bindir
3269ef0b394Smrg    case $func_relative_path_tbindir in
3279ef0b394Smrg      $func_relative_path_tlibdir)
3289ef0b394Smrg        # found an exact match
3299ef0b394Smrg        func_relative_path_tcancelled=
3309ef0b394Smrg        break
3319ef0b394Smrg        ;;
3329ef0b394Smrg      $func_relative_path_tlibdir*)
3339ef0b394Smrg        # found a matching prefix
3349ef0b394Smrg        func_stripname "$func_relative_path_tlibdir" '' "$func_relative_path_tbindir"
3359ef0b394Smrg        func_relative_path_tcancelled=$func_stripname_result
3369ef0b394Smrg        if test -z "$func_relative_path_result"; then
3379ef0b394Smrg          func_relative_path_result=.
3389ef0b394Smrg        fi
3399ef0b394Smrg        break
3409ef0b394Smrg        ;;
3419ef0b394Smrg      *)
3429ef0b394Smrg        func_dirname $func_relative_path_tlibdir
3439ef0b394Smrg        func_relative_path_tlibdir=${func_dirname_result}
3449ef0b394Smrg        if test "x$func_relative_path_tlibdir" = x ; then
3459ef0b394Smrg          # Have to descend all the way to the root!
3469ef0b394Smrg          func_relative_path_result=../$func_relative_path_result
3479ef0b394Smrg          func_relative_path_tcancelled=$func_relative_path_tbindir
3489ef0b394Smrg          break
3499ef0b394Smrg        fi
3509ef0b394Smrg        func_relative_path_result=../$func_relative_path_result
3519ef0b394Smrg        ;;
3529ef0b394Smrg    esac
3539ef0b394Smrg  done
354698f425bSmrg
3559ef0b394Smrg  # Now calculate path; take care to avoid doubling-up slashes.
3569ef0b394Smrg  func_stripname '' '/' "$func_relative_path_result"
3579ef0b394Smrg  func_relative_path_result=$func_stripname_result
3589ef0b394Smrg  func_stripname '/' '/' "$func_relative_path_tcancelled"
3599ef0b394Smrg  if test "x$func_stripname_result" != x ; then
3609ef0b394Smrg    func_relative_path_result=${func_relative_path_result}/${func_stripname_result}
3619ef0b394Smrg  fi
3629ef0b394Smrg
3639ef0b394Smrg  # Normalisation. If bindir is libdir, return empty string,
3649ef0b394Smrg  # else relative path ending with a slash; either way, target
3659ef0b394Smrg  # file name can be directly appended.
3669ef0b394Smrg  if test ! -z "$func_relative_path_result"; then
3679ef0b394Smrg    func_stripname './' '' "$func_relative_path_result/"
3689ef0b394Smrg    func_relative_path_result=$func_stripname_result
3699ef0b394Smrg  fi
3709ef0b394Smrg}
371698f425bSmrg
372698f425bSmrg# The name of this program:
373698f425bSmrgfunc_dirname_and_basename "$progpath"
374698f425bSmrgprogname=$func_basename_result
375698f425bSmrg
376698f425bSmrg# Make sure we have an absolute path for reexecution:
377698f425bSmrgcase $progpath in
378698f425bSmrg  [\\/]*|[A-Za-z]:\\*) ;;
379698f425bSmrg  *[\\/]*)
380698f425bSmrg     progdir=$func_dirname_result
381698f425bSmrg     progdir=`cd "$progdir" && pwd`
382698f425bSmrg     progpath="$progdir/$progname"
383698f425bSmrg     ;;
384698f425bSmrg  *)
385698f425bSmrg     save_IFS="$IFS"
386fb5e8d76Smrg     IFS=${PATH_SEPARATOR-:}
387698f425bSmrg     for progdir in $PATH; do
388698f425bSmrg       IFS="$save_IFS"
389698f425bSmrg       test -x "$progdir/$progname" && break
390698f425bSmrg     done
391698f425bSmrg     IFS="$save_IFS"
392698f425bSmrg     test -n "$progdir" || progdir=`pwd`
393698f425bSmrg     progpath="$progdir/$progname"
394698f425bSmrg     ;;
395698f425bSmrgesac
396698f425bSmrg
397698f425bSmrg# Sed substitution that helps us do robust quoting.  It backslashifies
398698f425bSmrg# metacharacters that are still active within double-quoted strings.
399698f425bSmrgXsed="${SED}"' -e 1s/^X//'
400698f425bSmrgsed_quote_subst='s/\([`"$\\]\)/\\\1/g'
401698f425bSmrg
402698f425bSmrg# Same as above, but do not quote variable references.
403698f425bSmrgdouble_quote_subst='s/\(["`\\]\)/\\\1/g'
404698f425bSmrg
4059ef0b394Smrg# Sed substitution that turns a string into a regex matching for the
4069ef0b394Smrg# string literally.
4079ef0b394Smrgsed_make_literal_regex='s,[].[^$\\*\/],\\&,g'
4089ef0b394Smrg
4099ef0b394Smrg# Sed substitution that converts a w32 file name or path
4109ef0b394Smrg# which contains forward slashes, into one that contains
4119ef0b394Smrg# (escaped) backslashes.  A very naive implementation.
4129ef0b394Smrglt_sed_naive_backslashify='s|\\\\*|\\|g;s|/|\\|g;s|\\|\\\\|g'
4139ef0b394Smrg
414698f425bSmrg# Re-`\' parameter expansions in output of double_quote_subst that were
415698f425bSmrg# `\'-ed in input to the same.  If an odd number of `\' preceded a '$'
416698f425bSmrg# in input to double_quote_subst, that '$' was protected from expansion.
417698f425bSmrg# Since each input `\' is now two `\'s, look for any number of runs of
418698f425bSmrg# four `\'s followed by two `\'s and then a '$'.  `\' that '$'.
419698f425bSmrgbs='\\'
420698f425bSmrgbs2='\\\\'
421698f425bSmrgbs4='\\\\\\\\'
422698f425bSmrgdollar='\$'
423698f425bSmrgsed_double_backslash="\
424698f425bSmrg  s/$bs4/&\\
425698f425bSmrg/g
426698f425bSmrg  s/^$bs2$dollar/$bs&/
427698f425bSmrg  s/\\([^$bs]\\)$bs2$dollar/\\1$bs2$bs$dollar/g
428698f425bSmrg  s/\n//g"
429698f425bSmrg
430698f425bSmrg# Standard options:
431698f425bSmrgopt_dry_run=false
432698f425bSmrgopt_help=false
433698f425bSmrgopt_quiet=false
434698f425bSmrgopt_verbose=false
435698f425bSmrgopt_warning=:
436698f425bSmrg
437698f425bSmrg# func_echo arg...
438698f425bSmrg# Echo program name prefixed message, along with the current mode
439698f425bSmrg# name if it has been set yet.
440698f425bSmrgfunc_echo ()
441698f425bSmrg{
4429ef0b394Smrg    $ECHO "$progname: ${opt_mode+$opt_mode: }$*"
443698f425bSmrg}
444698f425bSmrg
445698f425bSmrg# func_verbose arg...
446698f425bSmrg# Echo program name prefixed message in verbose mode only.
447698f425bSmrgfunc_verbose ()
448698f425bSmrg{
449698f425bSmrg    $opt_verbose && func_echo ${1+"$@"}
450698f425bSmrg
451698f425bSmrg    # A bug in bash halts the script if the last line of a function
452698f425bSmrg    # fails when set -e is in force, so we need another command to
453698f425bSmrg    # work around that:
454698f425bSmrg    :
455698f425bSmrg}
456698f425bSmrg
4579ef0b394Smrg# func_echo_all arg...
4589ef0b394Smrg# Invoke $ECHO with all args, space-separated.
4599ef0b394Smrgfunc_echo_all ()
4609ef0b394Smrg{
4619ef0b394Smrg    $ECHO "$*"
4629ef0b394Smrg}
4639ef0b394Smrg
464698f425bSmrg# func_error arg...
465698f425bSmrg# Echo program name prefixed message to standard error.
466698f425bSmrgfunc_error ()
467698f425bSmrg{
4689ef0b394Smrg    $ECHO "$progname: ${opt_mode+$opt_mode: }"${1+"$@"} 1>&2
469698f425bSmrg}
470698f425bSmrg
471698f425bSmrg# func_warning arg...
472698f425bSmrg# Echo program name prefixed warning message to standard error.
473698f425bSmrgfunc_warning ()
474698f425bSmrg{
4759ef0b394Smrg    $opt_warning && $ECHO "$progname: ${opt_mode+$opt_mode: }warning: "${1+"$@"} 1>&2
476698f425bSmrg
477698f425bSmrg    # bash bug again:
478698f425bSmrg    :
479698f425bSmrg}
480698f425bSmrg
481698f425bSmrg# func_fatal_error arg...
482698f425bSmrg# Echo program name prefixed message to standard error, and exit.
483698f425bSmrgfunc_fatal_error ()
484698f425bSmrg{
485698f425bSmrg    func_error ${1+"$@"}
486698f425bSmrg    exit $EXIT_FAILURE
487698f425bSmrg}
488698f425bSmrg
489698f425bSmrg# func_fatal_help arg...
490698f425bSmrg# Echo program name prefixed message to standard error, followed by
491698f425bSmrg# a help hint, and exit.
492698f425bSmrgfunc_fatal_help ()
493698f425bSmrg{
494698f425bSmrg    func_error ${1+"$@"}
495698f425bSmrg    func_fatal_error "$help"
496698f425bSmrg}
497698f425bSmrghelp="Try \`$progname --help' for more information."  ## default
498698f425bSmrg
499698f425bSmrg
500698f425bSmrg# func_grep expression filename
501698f425bSmrg# Check whether EXPRESSION matches any line of FILENAME, without output.
502698f425bSmrgfunc_grep ()
503698f425bSmrg{
504698f425bSmrg    $GREP "$1" "$2" >/dev/null 2>&1
505698f425bSmrg}
506698f425bSmrg
507698f425bSmrg
508698f425bSmrg# func_mkdir_p directory-path
509698f425bSmrg# Make sure the entire path to DIRECTORY-PATH is available.
510698f425bSmrgfunc_mkdir_p ()
511698f425bSmrg{
512698f425bSmrg    my_directory_path="$1"
513698f425bSmrg    my_dir_list=
514698f425bSmrg
515698f425bSmrg    if test -n "$my_directory_path" && test "$opt_dry_run" != ":"; then
516698f425bSmrg
517698f425bSmrg      # Protect directory names starting with `-'
518698f425bSmrg      case $my_directory_path in
519698f425bSmrg        -*) my_directory_path="./$my_directory_path" ;;
520698f425bSmrg      esac
521698f425bSmrg
522698f425bSmrg      # While some portion of DIR does not yet exist...
523698f425bSmrg      while test ! -d "$my_directory_path"; do
524698f425bSmrg        # ...make a list in topmost first order.  Use a colon delimited
525698f425bSmrg	# list incase some portion of path contains whitespace.
526698f425bSmrg        my_dir_list="$my_directory_path:$my_dir_list"
527698f425bSmrg
528698f425bSmrg        # If the last portion added has no slash in it, the list is done
529698f425bSmrg        case $my_directory_path in */*) ;; *) break ;; esac
530698f425bSmrg
531698f425bSmrg        # ...otherwise throw away the child directory and loop
5329ef0b394Smrg        my_directory_path=`$ECHO "$my_directory_path" | $SED -e "$dirname"`
533698f425bSmrg      done
5349ef0b394Smrg      my_dir_list=`$ECHO "$my_dir_list" | $SED 's,:*$,,'`
535698f425bSmrg
536698f425bSmrg      save_mkdir_p_IFS="$IFS"; IFS=':'
537698f425bSmrg      for my_dir in $my_dir_list; do
538698f425bSmrg	IFS="$save_mkdir_p_IFS"
539698f425bSmrg        # mkdir can fail with a `File exist' error if two processes
540698f425bSmrg        # try to create one of the directories concurrently.  Don't
541698f425bSmrg        # stop in that case!
542698f425bSmrg        $MKDIR "$my_dir" 2>/dev/null || :
543698f425bSmrg      done
544698f425bSmrg      IFS="$save_mkdir_p_IFS"
545698f425bSmrg
546698f425bSmrg      # Bail out if we (or some other process) failed to create a directory.
547698f425bSmrg      test -d "$my_directory_path" || \
548698f425bSmrg        func_fatal_error "Failed to create \`$1'"
549698f425bSmrg    fi
550698f425bSmrg}
551266e564dSmrg
552266e564dSmrg
553266e564dSmrg# func_mktempdir [string]
554266e564dSmrg# Make a temporary directory that won't clash with other running
555266e564dSmrg# libtool processes, and avoids race conditions if possible.  If
556266e564dSmrg# given, STRING is the basename for that directory.
557266e564dSmrgfunc_mktempdir ()
558266e564dSmrg{
559266e564dSmrg    my_template="${TMPDIR-/tmp}/${1-$progname}"
560266e564dSmrg
561698f425bSmrg    if test "$opt_dry_run" = ":"; then
562266e564dSmrg      # Return a directory name, but don't create it in dry-run mode
563266e564dSmrg      my_tmpdir="${my_template}-$$"
564266e564dSmrg    else
565266e564dSmrg
566266e564dSmrg      # If mktemp works, use that first and foremost
567266e564dSmrg      my_tmpdir=`mktemp -d "${my_template}-XXXXXXXX" 2>/dev/null`
568266e564dSmrg
569266e564dSmrg      if test ! -d "$my_tmpdir"; then
570698f425bSmrg        # Failing that, at least try and use $RANDOM to avoid a race
571698f425bSmrg        my_tmpdir="${my_template}-${RANDOM-0}$$"
572266e564dSmrg
573698f425bSmrg        save_mktempdir_umask=`umask`
574698f425bSmrg        umask 0077
575698f425bSmrg        $MKDIR "$my_tmpdir"
576698f425bSmrg        umask $save_mktempdir_umask
577266e564dSmrg      fi
578266e564dSmrg
579266e564dSmrg      # If we're not in dry-run mode, bomb out on failure
580698f425bSmrg      test -d "$my_tmpdir" || \
581698f425bSmrg        func_fatal_error "cannot create temporary directory \`$my_tmpdir'"
582266e564dSmrg    fi
583266e564dSmrg
5849ef0b394Smrg    $ECHO "$my_tmpdir"
585266e564dSmrg}
586266e564dSmrg
587266e564dSmrg
588698f425bSmrg# func_quote_for_eval arg
589698f425bSmrg# Aesthetically quote ARG to be evaled later.
590698f425bSmrg# This function returns two values: FUNC_QUOTE_FOR_EVAL_RESULT
591698f425bSmrg# is double-quoted, suitable for a subsequent eval, whereas
592698f425bSmrg# FUNC_QUOTE_FOR_EVAL_UNQUOTED_RESULT has merely all characters
593698f425bSmrg# which are still active within double quotes backslashified.
594698f425bSmrgfunc_quote_for_eval ()
595266e564dSmrg{
596698f425bSmrg    case $1 in
597698f425bSmrg      *[\\\`\"\$]*)
5989ef0b394Smrg	func_quote_for_eval_unquoted_result=`$ECHO "$1" | $SED "$sed_quote_subst"` ;;
599698f425bSmrg      *)
600698f425bSmrg        func_quote_for_eval_unquoted_result="$1" ;;
601698f425bSmrg    esac
602698f425bSmrg
603698f425bSmrg    case $func_quote_for_eval_unquoted_result in
604698f425bSmrg      # Double-quote args containing shell metacharacters to delay
605698f425bSmrg      # word splitting, command substitution and and variable
606698f425bSmrg      # expansion for a subsequent eval.
607698f425bSmrg      # Many Bourne shells cannot handle close brackets correctly
608698f425bSmrg      # in scan sets, so we specify it separately.
609698f425bSmrg      *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \	]*|*]*|"")
610698f425bSmrg        func_quote_for_eval_result="\"$func_quote_for_eval_unquoted_result\""
611698f425bSmrg        ;;
612698f425bSmrg      *)
613698f425bSmrg        func_quote_for_eval_result="$func_quote_for_eval_unquoted_result"
614266e564dSmrg    esac
615266e564dSmrg}
616266e564dSmrg
617266e564dSmrg
618698f425bSmrg# func_quote_for_expand arg
619698f425bSmrg# Aesthetically quote ARG to be evaled later; same as above,
620698f425bSmrg# but do not quote variable references.
621698f425bSmrgfunc_quote_for_expand ()
622266e564dSmrg{
623698f425bSmrg    case $1 in
624698f425bSmrg      *[\\\`\"]*)
6259ef0b394Smrg	my_arg=`$ECHO "$1" | $SED \
626698f425bSmrg	    -e "$double_quote_subst" -e "$sed_double_backslash"` ;;
627266e564dSmrg      *)
628698f425bSmrg        my_arg="$1" ;;
629698f425bSmrg    esac
630698f425bSmrg
631698f425bSmrg    case $my_arg in
632698f425bSmrg      # Double-quote args containing shell metacharacters to delay
633698f425bSmrg      # word splitting and command substitution for a subsequent eval.
634698f425bSmrg      # Many Bourne shells cannot handle close brackets correctly
635698f425bSmrg      # in scan sets, so we specify it separately.
636698f425bSmrg      *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \	]*|*]*|"")
637698f425bSmrg        my_arg="\"$my_arg\""
638698f425bSmrg        ;;
639698f425bSmrg    esac
640698f425bSmrg
641698f425bSmrg    func_quote_for_expand_result="$my_arg"
642266e564dSmrg}
643266e564dSmrg
644266e564dSmrg
645698f425bSmrg# func_show_eval cmd [fail_exp]
646698f425bSmrg# Unless opt_silent is true, then output CMD.  Then, if opt_dryrun is
647698f425bSmrg# not true, evaluate CMD.  If the evaluation of CMD fails, and FAIL_EXP
648698f425bSmrg# is given, then evaluate it.
649698f425bSmrgfunc_show_eval ()
650266e564dSmrg{
651698f425bSmrg    my_cmd="$1"
652698f425bSmrg    my_fail_exp="${2-:}"
653266e564dSmrg
654698f425bSmrg    ${opt_silent-false} || {
655698f425bSmrg      func_quote_for_expand "$my_cmd"
656698f425bSmrg      eval "func_echo $func_quote_for_expand_result"
657698f425bSmrg    }
658698f425bSmrg
659698f425bSmrg    if ${opt_dry_run-false}; then :; else
660698f425bSmrg      eval "$my_cmd"
661698f425bSmrg      my_status=$?
662698f425bSmrg      if test "$my_status" -eq 0; then :; else
663698f425bSmrg	eval "(exit $my_status); $my_fail_exp"
664698f425bSmrg      fi
665266e564dSmrg    fi
666266e564dSmrg}
667266e564dSmrg
668698f425bSmrg
669698f425bSmrg# func_show_eval_locale cmd [fail_exp]
670698f425bSmrg# Unless opt_silent is true, then output CMD.  Then, if opt_dryrun is
671698f425bSmrg# not true, evaluate CMD.  If the evaluation of CMD fails, and FAIL_EXP
672698f425bSmrg# is given, then evaluate it.  Use the saved locale for evaluation.
673698f425bSmrgfunc_show_eval_locale ()
674266e564dSmrg{
675698f425bSmrg    my_cmd="$1"
676698f425bSmrg    my_fail_exp="${2-:}"
677698f425bSmrg
678698f425bSmrg    ${opt_silent-false} || {
679698f425bSmrg      func_quote_for_expand "$my_cmd"
680698f425bSmrg      eval "func_echo $func_quote_for_expand_result"
681698f425bSmrg    }
682698f425bSmrg
683698f425bSmrg    if ${opt_dry_run-false}; then :; else
684698f425bSmrg      eval "$lt_user_locale
685698f425bSmrg	    $my_cmd"
686698f425bSmrg      my_status=$?
687698f425bSmrg      eval "$lt_safe_locale"
688698f425bSmrg      if test "$my_status" -eq 0; then :; else
689698f425bSmrg	eval "(exit $my_status); $my_fail_exp"
690698f425bSmrg      fi
691266e564dSmrg    fi
692698f425bSmrg}
693266e564dSmrg
6949ef0b394Smrg# func_tr_sh
6959ef0b394Smrg# Turn $1 into a string suitable for a shell variable name.
6969ef0b394Smrg# Result is stored in $func_tr_sh_result.  All characters
6979ef0b394Smrg# not in the set a-zA-Z0-9_ are replaced with '_'. Further,
6989ef0b394Smrg# if $1 begins with a digit, a '_' is prepended as well.
6999ef0b394Smrgfunc_tr_sh ()
7009ef0b394Smrg{
7019ef0b394Smrg  case $1 in
7029ef0b394Smrg  [0-9]* | *[!a-zA-Z0-9_]*)
7039ef0b394Smrg    func_tr_sh_result=`$ECHO "$1" | $SED 's/^\([0-9]\)/_\1/; s/[^a-zA-Z0-9_]/_/g'`
7049ef0b394Smrg    ;;
7059ef0b394Smrg  * )
7069ef0b394Smrg    func_tr_sh_result=$1
7079ef0b394Smrg    ;;
7089ef0b394Smrg  esac
7099ef0b394Smrg}
710698f425bSmrg
711698f425bSmrg
712698f425bSmrg# func_version
713698f425bSmrg# Echo version message to standard output and exit.
714698f425bSmrgfunc_version ()
715698f425bSmrg{
7169ef0b394Smrg    $opt_debug
7179ef0b394Smrg
7189ef0b394Smrg    $SED -n '/(C)/!b go
7199ef0b394Smrg	:more
7209ef0b394Smrg	/\./!{
7219ef0b394Smrg	  N
7229ef0b394Smrg	  s/\n# / /
7239ef0b394Smrg	  b more
7249ef0b394Smrg	}
7259ef0b394Smrg	:go
7269ef0b394Smrg	/^# '$PROGRAM' (GNU /,/# warranty; / {
727698f425bSmrg        s/^# //
728698f425bSmrg	s/^# *$//
729698f425bSmrg        s/\((C)\)[ 0-9,-]*\( [1-9][0-9]*\)/\1\2/
730698f425bSmrg        p
731698f425bSmrg     }' < "$progpath"
732698f425bSmrg     exit $?
733266e564dSmrg}
734266e564dSmrg
735698f425bSmrg# func_usage
736698f425bSmrg# Echo short help message to standard output and exit.
737698f425bSmrgfunc_usage ()
738698f425bSmrg{
7399ef0b394Smrg    $opt_debug
7409ef0b394Smrg
7419ef0b394Smrg    $SED -n '/^# Usage:/,/^#  *.*--help/ {
742698f425bSmrg        s/^# //
743698f425bSmrg	s/^# *$//
744698f425bSmrg	s/\$progname/'$progname'/
745698f425bSmrg	p
746698f425bSmrg    }' < "$progpath"
7479ef0b394Smrg    echo
748698f425bSmrg    $ECHO "run \`$progname --help | more' for full usage"
749698f425bSmrg    exit $?
750698f425bSmrg}
751266e564dSmrg
7529ef0b394Smrg# func_help [NOEXIT]
7539ef0b394Smrg# Echo long help message to standard output and exit,
7549ef0b394Smrg# unless 'noexit' is passed as argument.
755698f425bSmrgfunc_help ()
756698f425bSmrg{
7579ef0b394Smrg    $opt_debug
7589ef0b394Smrg
759698f425bSmrg    $SED -n '/^# Usage:/,/# Report bugs to/ {
7609ef0b394Smrg	:print
761698f425bSmrg        s/^# //
762698f425bSmrg	s/^# *$//
763698f425bSmrg	s*\$progname*'$progname'*
764698f425bSmrg	s*\$host*'"$host"'*
765698f425bSmrg	s*\$SHELL*'"$SHELL"'*
766698f425bSmrg	s*\$LTCC*'"$LTCC"'*
767698f425bSmrg	s*\$LTCFLAGS*'"$LTCFLAGS"'*
768698f425bSmrg	s*\$LD*'"$LD"'*
769698f425bSmrg	s/\$with_gnu_ld/'"$with_gnu_ld"'/
770fb5e8d76Smrg	s/\$automake_version/'"`(${AUTOMAKE-automake} --version) 2>/dev/null |$SED 1q`"'/
771fb5e8d76Smrg	s/\$autoconf_version/'"`(${AUTOCONF-autoconf} --version) 2>/dev/null |$SED 1q`"'/
772698f425bSmrg	p
7739ef0b394Smrg	d
7749ef0b394Smrg     }
7759ef0b394Smrg     /^# .* home page:/b print
7769ef0b394Smrg     /^# General help using/b print
7779ef0b394Smrg     ' < "$progpath"
7789ef0b394Smrg    ret=$?
7799ef0b394Smrg    if test -z "$1"; then
7809ef0b394Smrg      exit $ret
7819ef0b394Smrg    fi
782698f425bSmrg}
783266e564dSmrg
784698f425bSmrg# func_missing_arg argname
785698f425bSmrg# Echo program name prefixed message to standard error and set global
786698f425bSmrg# exit_cmd.
787698f425bSmrgfunc_missing_arg ()
788698f425bSmrg{
7899ef0b394Smrg    $opt_debug
7909ef0b394Smrg
7919ef0b394Smrg    func_error "missing argument for $1."
792698f425bSmrg    exit_cmd=exit
793698f425bSmrg}
794698f425bSmrg
795698f425bSmrg
7969ef0b394Smrg# func_split_short_opt shortopt
7979ef0b394Smrg# Set func_split_short_opt_name and func_split_short_opt_arg shell
7989ef0b394Smrg# variables after splitting SHORTOPT after the 2nd character.
7999ef0b394Smrgfunc_split_short_opt ()
8009ef0b394Smrg{
8019ef0b394Smrg    my_sed_short_opt='1s/^\(..\).*$/\1/;q'
8029ef0b394Smrg    my_sed_short_rest='1s/^..\(.*\)$/\1/;q'
803698f425bSmrg
8049ef0b394Smrg    func_split_short_opt_name=`$ECHO "$1" | $SED "$my_sed_short_opt"`
8059ef0b394Smrg    func_split_short_opt_arg=`$ECHO "$1" | $SED "$my_sed_short_rest"`
8069ef0b394Smrg} # func_split_short_opt may be replaced by extended shell implementation
8079ef0b394Smrg
8089ef0b394Smrg
8099ef0b394Smrg# func_split_long_opt longopt
8109ef0b394Smrg# Set func_split_long_opt_name and func_split_long_opt_arg shell
8119ef0b394Smrg# variables after splitting LONGOPT at the `=' sign.
8129ef0b394Smrgfunc_split_long_opt ()
8139ef0b394Smrg{
8149ef0b394Smrg    my_sed_long_opt='1s/^\(--[^=]*\)=.*/\1/;q'
8159ef0b394Smrg    my_sed_long_arg='1s/^--[^=]*=//'
8169ef0b394Smrg
8179ef0b394Smrg    func_split_long_opt_name=`$ECHO "$1" | $SED "$my_sed_long_opt"`
8189ef0b394Smrg    func_split_long_opt_arg=`$ECHO "$1" | $SED "$my_sed_long_arg"`
8199ef0b394Smrg} # func_split_long_opt may be replaced by extended shell implementation
8209ef0b394Smrg
8219ef0b394Smrgexit_cmd=:
822698f425bSmrg
823698f425bSmrg
824698f425bSmrg
825266e564dSmrg
826266e564dSmrg
827698f425bSmrgmagic="%%%MAGIC variable%%%"
828698f425bSmrgmagic_exe="%%%MAGIC EXE variable%%%"
829266e564dSmrg
830698f425bSmrg# Global variables.
831698f425bSmrgnonopt=
832698f425bSmrgpreserve_args=
833698f425bSmrglo2o="s/\\.lo\$/.${objext}/"
834698f425bSmrgo2lo="s/\\.${objext}\$/.lo/"
835698f425bSmrgextracted_archives=
836698f425bSmrgextracted_serial=0
837266e564dSmrg
838698f425bSmrg# If this variable is set in any of the actions, the command in it
839698f425bSmrg# will be execed at the end.  This prevents here-documents from being
840698f425bSmrg# left over by shells.
841698f425bSmrgexec_cmd=
842698f425bSmrg
8439ef0b394Smrg# func_append var value
8449ef0b394Smrg# Append VALUE to the end of shell variable VAR.
8459ef0b394Smrgfunc_append ()
8469ef0b394Smrg{
8479ef0b394Smrg    eval "${1}=\$${1}\${2}"
8489ef0b394Smrg} # func_append may be replaced by extended shell implementation
8499ef0b394Smrg
8509ef0b394Smrg# func_append_quoted var value
8519ef0b394Smrg# Quote VALUE and append to the end of shell variable VAR, separated
8529ef0b394Smrg# by a space.
8539ef0b394Smrgfunc_append_quoted ()
8549ef0b394Smrg{
8559ef0b394Smrg    func_quote_for_eval "${2}"
8569ef0b394Smrg    eval "${1}=\$${1}\\ \$func_quote_for_eval_result"
8579ef0b394Smrg} # func_append_quoted may be replaced by extended shell implementation
8589ef0b394Smrg
8599ef0b394Smrg
8609ef0b394Smrg# func_arith arithmetic-term...
8619ef0b394Smrgfunc_arith ()
8629ef0b394Smrg{
8639ef0b394Smrg    func_arith_result=`expr "${@}"`
8649ef0b394Smrg} # func_arith may be replaced by extended shell implementation
8659ef0b394Smrg
8669ef0b394Smrg
8679ef0b394Smrg# func_len string
8689ef0b394Smrg# STRING may not start with a hyphen.
8699ef0b394Smrgfunc_len ()
8709ef0b394Smrg{
8719ef0b394Smrg    func_len_result=`expr "${1}" : ".*" 2>/dev/null || echo $max_cmd_len`
8729ef0b394Smrg} # func_len may be replaced by extended shell implementation
8739ef0b394Smrg
8749ef0b394Smrg
8759ef0b394Smrg# func_lo2o object
8769ef0b394Smrgfunc_lo2o ()
8779ef0b394Smrg{
8789ef0b394Smrg    func_lo2o_result=`$ECHO "${1}" | $SED "$lo2o"`
8799ef0b394Smrg} # func_lo2o may be replaced by extended shell implementation
8809ef0b394Smrg
8819ef0b394Smrg
8829ef0b394Smrg# func_xform libobj-or-source
8839ef0b394Smrgfunc_xform ()
8849ef0b394Smrg{
8859ef0b394Smrg    func_xform_result=`$ECHO "${1}" | $SED 's/\.[^.]*$/.lo/'`
8869ef0b394Smrg} # func_xform may be replaced by extended shell implementation
8879ef0b394Smrg
8889ef0b394Smrg
889698f425bSmrg# func_fatal_configuration arg...
890698f425bSmrg# Echo program name prefixed message to standard error, followed by
891698f425bSmrg# a configuration failure hint, and exit.
892698f425bSmrgfunc_fatal_configuration ()
893698f425bSmrg{
894698f425bSmrg    func_error ${1+"$@"}
895698f425bSmrg    func_error "See the $PACKAGE documentation for more information."
896698f425bSmrg    func_fatal_error "Fatal configuration error."
897698f425bSmrg}
898266e564dSmrg
899c5629e66Smrg
900698f425bSmrg# func_config
901698f425bSmrg# Display the configuration for all the tags in this script.
902698f425bSmrgfunc_config ()
903698f425bSmrg{
904698f425bSmrg    re_begincf='^# ### BEGIN LIBTOOL'
905698f425bSmrg    re_endcf='^# ### END LIBTOOL'
906698f425bSmrg
907698f425bSmrg    # Default configuration.
908698f425bSmrg    $SED "1,/$re_begincf CONFIG/d;/$re_endcf CONFIG/,\$d" < "$progpath"
909266e564dSmrg
910266e564dSmrg    # Now print the configurations for the tags.
911266e564dSmrg    for tagname in $taglist; do
912698f425bSmrg      $SED -n "/$re_begincf TAG CONFIG: $tagname\$/,/$re_endcf TAG CONFIG: $tagname\$/p" < "$progpath"
913266e564dSmrg    done
914266e564dSmrg
915698f425bSmrg    exit $?
916698f425bSmrg}
917266e564dSmrg
918698f425bSmrg# func_features
919698f425bSmrg# Display the features supported by this script.
920698f425bSmrgfunc_features ()
921698f425bSmrg{
9229ef0b394Smrg    echo "host: $host"
923266e564dSmrg    if test "$build_libtool_libs" = yes; then
9249ef0b394Smrg      echo "enable shared libraries"
925266e564dSmrg    else
9269ef0b394Smrg      echo "disable shared libraries"
927266e564dSmrg    fi
928266e564dSmrg    if test "$build_old_libs" = yes; then
9299ef0b394Smrg      echo "enable static libraries"
930266e564dSmrg    else
9319ef0b394Smrg      echo "disable static libraries"
932266e564dSmrg    fi
933698f425bSmrg
934266e564dSmrg    exit $?
935698f425bSmrg}
936266e564dSmrg
937698f425bSmrg# func_enable_tag tagname
938698f425bSmrg# Verify that TAGNAME is valid, and either flag an error and exit, or
939698f425bSmrg# enable the TAGNAME tag.  We also add TAGNAME to the global $taglist
940698f425bSmrg# variable here.
941698f425bSmrgfunc_enable_tag ()
942698f425bSmrg{
943698f425bSmrg  # Global variable:
944698f425bSmrg  tagname="$1"
945266e564dSmrg
946698f425bSmrg  re_begincf="^# ### BEGIN LIBTOOL TAG CONFIG: $tagname\$"
947698f425bSmrg  re_endcf="^# ### END LIBTOOL TAG CONFIG: $tagname\$"
948698f425bSmrg  sed_extractcf="/$re_begincf/,/$re_endcf/p"
949266e564dSmrg
950698f425bSmrg  # Validate tagname.
951698f425bSmrg  case $tagname in
952698f425bSmrg    *[!-_A-Za-z0-9,/]*)
953698f425bSmrg      func_fatal_error "invalid tag name: $tagname"
954698f425bSmrg      ;;
955698f425bSmrg  esac
956266e564dSmrg
957698f425bSmrg  # Don't test for the "default" C tag, as we know it's
958698f425bSmrg  # there but not specially marked.
959698f425bSmrg  case $tagname in
960698f425bSmrg    CC) ;;
961698f425bSmrg    *)
962698f425bSmrg      if $GREP "$re_begincf" "$progpath" >/dev/null 2>&1; then
963698f425bSmrg	taglist="$taglist $tagname"
964698f425bSmrg
965698f425bSmrg	# Evaluate the configuration.  Be careful to quote the path
966698f425bSmrg	# and the sed script, to avoid splitting on whitespace, but
967698f425bSmrg	# also don't use non-portable quotes within backquotes within
968698f425bSmrg	# quotes we have to do it in 2 steps:
969698f425bSmrg	extractedcf=`$SED -n -e "$sed_extractcf" < "$progpath"`
970698f425bSmrg	eval "$extractedcf"
971698f425bSmrg      else
972698f425bSmrg	func_error "ignoring unknown tag $tagname"
973698f425bSmrg      fi
974698f425bSmrg      ;;
975698f425bSmrg  esac
976698f425bSmrg}
977698f425bSmrg
9789ef0b394Smrg# func_check_version_match
9799ef0b394Smrg# Ensure that we are using m4 macros, and libtool script from the same
9809ef0b394Smrg# release of libtool.
9819ef0b394Smrgfunc_check_version_match ()
982698f425bSmrg{
9839ef0b394Smrg  if test "$package_revision" != "$macro_revision"; then
9849ef0b394Smrg    if test "$VERSION" != "$macro_version"; then
9859ef0b394Smrg      if test -z "$macro_version"; then
9869ef0b394Smrg        cat >&2 <<_LT_EOF
9879ef0b394Smrg$progname: Version mismatch error.  This is $PACKAGE $VERSION, but the
9889ef0b394Smrg$progname: definition of this LT_INIT comes from an older release.
9899ef0b394Smrg$progname: You should recreate aclocal.m4 with macros from $PACKAGE $VERSION
9909ef0b394Smrg$progname: and run autoconf again.
9919ef0b394Smrg_LT_EOF
9929ef0b394Smrg      else
9939ef0b394Smrg        cat >&2 <<_LT_EOF
9949ef0b394Smrg$progname: Version mismatch error.  This is $PACKAGE $VERSION, but the
9959ef0b394Smrg$progname: definition of this LT_INIT comes from $PACKAGE $macro_version.
9969ef0b394Smrg$progname: You should recreate aclocal.m4 with macros from $PACKAGE $VERSION
9979ef0b394Smrg$progname: and run autoconf again.
9989ef0b394Smrg_LT_EOF
9999ef0b394Smrg      fi
10009ef0b394Smrg    else
10019ef0b394Smrg      cat >&2 <<_LT_EOF
10029ef0b394Smrg$progname: Version mismatch error.  This is $PACKAGE $VERSION, revision $package_revision,
10039ef0b394Smrg$progname: but the definition of this LT_INIT comes from revision $macro_revision.
10049ef0b394Smrg$progname: You should recreate aclocal.m4 with macros from revision $package_revision
10059ef0b394Smrg$progname: of $PACKAGE $VERSION and run autoconf again.
10069ef0b394Smrg_LT_EOF
10079ef0b394Smrg    fi
1008266e564dSmrg
10099ef0b394Smrg    exit $EXIT_MISMATCH
10109ef0b394Smrg  fi
10119ef0b394Smrg}
10129ef0b394Smrg
10139ef0b394Smrg
10149ef0b394Smrg# Shorthand for --mode=foo, only valid as the first argument
10159ef0b394Smrgcase $1 in
10169ef0b394Smrgclean|clea|cle|cl)
10179ef0b394Smrg  shift; set dummy --mode clean ${1+"$@"}; shift
10189ef0b394Smrg  ;;
10199ef0b394Smrgcompile|compil|compi|comp|com|co|c)
10209ef0b394Smrg  shift; set dummy --mode compile ${1+"$@"}; shift
10219ef0b394Smrg  ;;
10229ef0b394Smrgexecute|execut|execu|exec|exe|ex|e)
10239ef0b394Smrg  shift; set dummy --mode execute ${1+"$@"}; shift
10249ef0b394Smrg  ;;
10259ef0b394Smrgfinish|finis|fini|fin|fi|f)
10269ef0b394Smrg  shift; set dummy --mode finish ${1+"$@"}; shift
10279ef0b394Smrg  ;;
10289ef0b394Smrginstall|instal|insta|inst|ins|in|i)
10299ef0b394Smrg  shift; set dummy --mode install ${1+"$@"}; shift
10309ef0b394Smrg  ;;
10319ef0b394Smrglink|lin|li|l)
10329ef0b394Smrg  shift; set dummy --mode link ${1+"$@"}; shift
10339ef0b394Smrg  ;;
10349ef0b394Smrguninstall|uninstal|uninsta|uninst|unins|unin|uni|un|u)
10359ef0b394Smrg  shift; set dummy --mode uninstall ${1+"$@"}; shift
10369ef0b394Smrg  ;;
10379ef0b394Smrgesac
10389ef0b394Smrg
10399ef0b394Smrg
10409ef0b394Smrg
10419ef0b394Smrg# Option defaults:
10429ef0b394Smrgopt_debug=:
10439ef0b394Smrgopt_dry_run=false
10449ef0b394Smrgopt_config=false
10459ef0b394Smrgopt_preserve_dup_deps=false
10469ef0b394Smrgopt_features=false
10479ef0b394Smrgopt_finish=false
10489ef0b394Smrgopt_help=false
10499ef0b394Smrgopt_help_all=false
10509ef0b394Smrgopt_silent=:
1051fb5e8d76Smrgopt_warning=:
10529ef0b394Smrgopt_verbose=:
10539ef0b394Smrgopt_silent=false
10549ef0b394Smrgopt_verbose=false
1055266e564dSmrg
10569ef0b394Smrg
10579ef0b394Smrg# Parse options once, thoroughly.  This comes as soon as possible in the
10589ef0b394Smrg# script to make things like `--version' happen as quickly as we can.
10599ef0b394Smrg{
10609ef0b394Smrg  # this just eases exit handling
10619ef0b394Smrg  while test $# -gt 0; do
1062698f425bSmrg    opt="$1"
1063698f425bSmrg    shift
1064698f425bSmrg    case $opt in
10659ef0b394Smrg      --debug|-x)	opt_debug='set -x'
1066698f425bSmrg			func_echo "enabling shell trace mode"
1067698f425bSmrg			$opt_debug
1068698f425bSmrg			;;
10699ef0b394Smrg      --dry-run|--dryrun|-n)
10709ef0b394Smrg			opt_dry_run=:
1071698f425bSmrg			;;
10729ef0b394Smrg      --config)
10739ef0b394Smrg			opt_config=:
10749ef0b394Smrgfunc_config
10759ef0b394Smrg			;;
10769ef0b394Smrg      --dlopen|-dlopen)
10779ef0b394Smrg			optarg="$1"
10789ef0b394Smrg			opt_dlopen="${opt_dlopen+$opt_dlopen
10799ef0b394Smrg}$optarg"
1080698f425bSmrg			shift
1081698f425bSmrg			;;
1082698f425bSmrg      --preserve-dup-deps)
10839ef0b394Smrg			opt_preserve_dup_deps=:
1084698f425bSmrg			;;
10859ef0b394Smrg      --features)
10869ef0b394Smrg			opt_features=:
10879ef0b394Smrgfunc_features
10889ef0b394Smrg			;;
10899ef0b394Smrg      --finish)
10909ef0b394Smrg			opt_finish=:
10919ef0b394Smrgset dummy --mode finish ${1+"$@"}; shift
10929ef0b394Smrg			;;
10939ef0b394Smrg      --help)
10949ef0b394Smrg			opt_help=:
10959ef0b394Smrg			;;
10969ef0b394Smrg      --help-all)
10979ef0b394Smrg			opt_help_all=:
10989ef0b394Smrgopt_help=': help-all'
10999ef0b394Smrg			;;
11009ef0b394Smrg      --mode)
11019ef0b394Smrg			test $# = 0 && func_missing_arg $opt && break
11029ef0b394Smrg			optarg="$1"
11039ef0b394Smrg			opt_mode="$optarg"
11049ef0b394Smrgcase $optarg in
11059ef0b394Smrg  # Valid mode arguments:
11069ef0b394Smrg  clean|compile|execute|finish|install|link|relink|uninstall) ;;
11079ef0b394Smrg
11089ef0b394Smrg  # Catch anything else as an error
11099ef0b394Smrg  *) func_error "invalid argument for $opt"
11109ef0b394Smrg     exit_cmd=exit
11119ef0b394Smrg     break
11129ef0b394Smrg     ;;
11139ef0b394Smrgesac
11149ef0b394Smrg			shift
11159ef0b394Smrg			;;
11169ef0b394Smrg      --no-silent|--no-quiet)
1117698f425bSmrg			opt_silent=false
1118fb5e8d76Smrgfunc_append preserve_args " $opt"
1119fb5e8d76Smrg			;;
1120fb5e8d76Smrg      --no-warning|--no-warn)
1121fb5e8d76Smrg			opt_warning=false
11229ef0b394Smrgfunc_append preserve_args " $opt"
1123698f425bSmrg			;;
11249ef0b394Smrg      --no-verbose)
11259ef0b394Smrg			opt_verbose=false
11269ef0b394Smrgfunc_append preserve_args " $opt"
11279ef0b394Smrg			;;
11289ef0b394Smrg      --silent|--quiet)
11299ef0b394Smrg			opt_silent=:
11309ef0b394Smrgfunc_append preserve_args " $opt"
11319ef0b394Smrg        opt_verbose=false
11329ef0b394Smrg			;;
11339ef0b394Smrg      --verbose|-v)
11349ef0b394Smrg			opt_verbose=:
11359ef0b394Smrgfunc_append preserve_args " $opt"
11369ef0b394Smrgopt_silent=false
11379ef0b394Smrg			;;
11389ef0b394Smrg      --tag)
11399ef0b394Smrg			test $# = 0 && func_missing_arg $opt && break
11409ef0b394Smrg			optarg="$1"
11419ef0b394Smrg			opt_tag="$optarg"
11429ef0b394Smrgfunc_append preserve_args " $opt $optarg"
11439ef0b394Smrgfunc_enable_tag "$optarg"
1144698f425bSmrg			shift
1145698f425bSmrg			;;
1146698f425bSmrg
11479ef0b394Smrg      -\?|-h)		func_usage				;;
11489ef0b394Smrg      --help)		func_help				;;
11499ef0b394Smrg      --version)	func_version				;;
11509ef0b394Smrg
1151698f425bSmrg      # Separate optargs to long options:
11529ef0b394Smrg      --*=*)
11539ef0b394Smrg			func_split_long_opt "$opt"
11549ef0b394Smrg			set dummy "$func_split_long_opt_name" "$func_split_long_opt_arg" ${1+"$@"}
1155698f425bSmrg			shift
1156698f425bSmrg			;;
1157698f425bSmrg
11589ef0b394Smrg      # Separate non-argument short options:
11599ef0b394Smrg      -\?*|-h*|-n*|-v*)
11609ef0b394Smrg			func_split_short_opt "$opt"
11619ef0b394Smrg			set dummy "$func_split_short_opt_name" "-$func_split_short_opt_arg" ${1+"$@"}
11629ef0b394Smrg			shift
1163698f425bSmrg			;;
11649ef0b394Smrg
11659ef0b394Smrg      --)		break					;;
11669ef0b394Smrg      -*)		func_fatal_help "unrecognized option \`$opt'" ;;
11679ef0b394Smrg      *)		set dummy "$opt" ${1+"$@"};	shift; break  ;;
1168698f425bSmrg    esac
1169698f425bSmrg  done
1170698f425bSmrg
11719ef0b394Smrg  # Validate options:
11729ef0b394Smrg
11739ef0b394Smrg  # save first non-option argument
11749ef0b394Smrg  if test "$#" -gt 0; then
11759ef0b394Smrg    nonopt="$opt"
11769ef0b394Smrg    shift
11779ef0b394Smrg  fi
11789ef0b394Smrg
11799ef0b394Smrg  # preserve --debug
11809ef0b394Smrg  test "$opt_debug" = : || func_append preserve_args " --debug"
1181698f425bSmrg
1182698f425bSmrg  case $host in
1183698f425bSmrg    *cygwin* | *mingw* | *pw32* | *cegcc*)
1184698f425bSmrg      # don't eliminate duplications in $postdeps and $predeps
1185698f425bSmrg      opt_duplicate_compiler_generated_deps=:
1186266e564dSmrg      ;;
1187266e564dSmrg    *)
11889ef0b394Smrg      opt_duplicate_compiler_generated_deps=$opt_preserve_dup_deps
1189698f425bSmrg      ;;
1190698f425bSmrg  esac
1191266e564dSmrg
11929ef0b394Smrg  $opt_help || {
11939ef0b394Smrg    # Sanity checks first:
11949ef0b394Smrg    func_check_version_match
1195698f425bSmrg
11969ef0b394Smrg    if test "$build_libtool_libs" != yes && test "$build_old_libs" != yes; then
11979ef0b394Smrg      func_fatal_configuration "not configured to build any kind of library"
1198698f425bSmrg    fi
1199698f425bSmrg
12009ef0b394Smrg    # Darwin sucks
12019ef0b394Smrg    eval std_shrext=\"$shrext_cmds\"
1202698f425bSmrg
12039ef0b394Smrg    # Only execute mode is allowed to have -dlopen flags.
12049ef0b394Smrg    if test -n "$opt_dlopen" && test "$opt_mode" != execute; then
12059ef0b394Smrg      func_error "unrecognized option \`-dlopen'"
12069ef0b394Smrg      $ECHO "$help" 1>&2
12079ef0b394Smrg      exit $EXIT_FAILURE
12089ef0b394Smrg    fi
1209698f425bSmrg
12109ef0b394Smrg    # Change the help message to a mode-specific one.
12119ef0b394Smrg    generic_help="$help"
12129ef0b394Smrg    help="Try \`$progname --help --mode=$opt_mode' for more information."
12139ef0b394Smrg  }
1214698f425bSmrg
1215698f425bSmrg
12169ef0b394Smrg  # Bail if the options were screwed
12179ef0b394Smrg  $exit_cmd $EXIT_FAILURE
12189ef0b394Smrg}
1219698f425bSmrg
1220266e564dSmrg
1221266e564dSmrg
1222266e564dSmrg
12239ef0b394Smrg## ----------- ##
12249ef0b394Smrg##    Main.    ##
12259ef0b394Smrg## ----------- ##
1226266e564dSmrg
1227698f425bSmrg# func_lalib_p file
1228698f425bSmrg# True iff FILE is a libtool `.la' library or `.lo' object file.
1229698f425bSmrg# This function is only a basic sanity check; it will hardly flush out
1230698f425bSmrg# determined imposters.
1231698f425bSmrgfunc_lalib_p ()
1232698f425bSmrg{
1233698f425bSmrg    test -f "$1" &&
1234698f425bSmrg      $SED -e 4q "$1" 2>/dev/null \
1235698f425bSmrg        | $GREP "^# Generated by .*$PACKAGE" > /dev/null 2>&1
1236698f425bSmrg}
1237266e564dSmrg
1238698f425bSmrg# func_lalib_unsafe_p file
1239698f425bSmrg# True iff FILE is a libtool `.la' library or `.lo' object file.
1240698f425bSmrg# This function implements the same check as func_lalib_p without
1241698f425bSmrg# resorting to external programs.  To this end, it redirects stdin and
1242698f425bSmrg# closes it afterwards, without saving the original file descriptor.
1243698f425bSmrg# As a safety measure, use it only where a negative result would be
1244698f425bSmrg# fatal anyway.  Works if `file' does not exist.
1245698f425bSmrgfunc_lalib_unsafe_p ()
1246698f425bSmrg{
1247698f425bSmrg    lalib_p=no
1248698f425bSmrg    if test -f "$1" && test -r "$1" && exec 5<&0 <"$1"; then
1249698f425bSmrg	for lalib_p_l in 1 2 3 4
1250698f425bSmrg	do
1251698f425bSmrg	    read lalib_p_line
1252698f425bSmrg	    case "$lalib_p_line" in
1253698f425bSmrg		\#\ Generated\ by\ *$PACKAGE* ) lalib_p=yes; break;;
1254698f425bSmrg	    esac
1255698f425bSmrg	done
1256698f425bSmrg	exec 0<&5 5<&-
1257698f425bSmrg    fi
1258698f425bSmrg    test "$lalib_p" = yes
1259698f425bSmrg}
1260266e564dSmrg
1261698f425bSmrg# func_ltwrapper_script_p file
1262698f425bSmrg# True iff FILE is a libtool wrapper script
1263698f425bSmrg# This function is only a basic sanity check; it will hardly flush out
1264698f425bSmrg# determined imposters.
1265698f425bSmrgfunc_ltwrapper_script_p ()
1266698f425bSmrg{
1267698f425bSmrg    func_lalib_p "$1"
1268698f425bSmrg}
1269266e564dSmrg
1270698f425bSmrg# func_ltwrapper_executable_p file
1271698f425bSmrg# True iff FILE is a libtool wrapper executable
1272698f425bSmrg# This function is only a basic sanity check; it will hardly flush out
1273698f425bSmrg# determined imposters.
1274698f425bSmrgfunc_ltwrapper_executable_p ()
1275698f425bSmrg{
1276698f425bSmrg    func_ltwrapper_exec_suffix=
1277698f425bSmrg    case $1 in
1278698f425bSmrg    *.exe) ;;
1279698f425bSmrg    *) func_ltwrapper_exec_suffix=.exe ;;
1280698f425bSmrg    esac
1281698f425bSmrg    $GREP "$magic_exe" "$1$func_ltwrapper_exec_suffix" >/dev/null 2>&1
1282698f425bSmrg}
1283698f425bSmrg
1284698f425bSmrg# func_ltwrapper_scriptname file
1285698f425bSmrg# Assumes file is an ltwrapper_executable
1286698f425bSmrg# uses $file to determine the appropriate filename for a
1287698f425bSmrg# temporary ltwrapper_script.
1288698f425bSmrgfunc_ltwrapper_scriptname ()
1289698f425bSmrg{
12909ef0b394Smrg    func_dirname_and_basename "$1" "" "."
12919ef0b394Smrg    func_stripname '' '.exe' "$func_basename_result"
12929ef0b394Smrg    func_ltwrapper_scriptname_result="$func_dirname_result/$objdir/${func_stripname_result}_ltshwrapper"
1293698f425bSmrg}
1294698f425bSmrg
1295698f425bSmrg# func_ltwrapper_p file
1296698f425bSmrg# True iff FILE is a libtool wrapper script or wrapper executable
1297698f425bSmrg# This function is only a basic sanity check; it will hardly flush out
1298698f425bSmrg# determined imposters.
1299698f425bSmrgfunc_ltwrapper_p ()
1300698f425bSmrg{
1301698f425bSmrg    func_ltwrapper_script_p "$1" || func_ltwrapper_executable_p "$1"
1302698f425bSmrg}
1303698f425bSmrg
1304698f425bSmrg
1305698f425bSmrg# func_execute_cmds commands fail_cmd
1306698f425bSmrg# Execute tilde-delimited COMMANDS.
1307698f425bSmrg# If FAIL_CMD is given, eval that upon failure.
1308698f425bSmrg# FAIL_CMD may read-access the current command in variable CMD!
1309698f425bSmrgfunc_execute_cmds ()
1310698f425bSmrg{
1311698f425bSmrg    $opt_debug
1312698f425bSmrg    save_ifs=$IFS; IFS='~'
1313698f425bSmrg    for cmd in $1; do
1314698f425bSmrg      IFS=$save_ifs
1315698f425bSmrg      eval cmd=\"$cmd\"
1316698f425bSmrg      func_show_eval "$cmd" "${2-:}"
1317698f425bSmrg    done
1318698f425bSmrg    IFS=$save_ifs
1319698f425bSmrg}
1320698f425bSmrg
1321698f425bSmrg
1322698f425bSmrg# func_source file
1323698f425bSmrg# Source FILE, adding directory component if necessary.
1324698f425bSmrg# Note that it is not necessary on cygwin/mingw to append a dot to
1325698f425bSmrg# FILE even if both FILE and FILE.exe exist: automatic-append-.exe
1326698f425bSmrg# behavior happens only for exec(3), not for open(2)!  Also, sourcing
1327698f425bSmrg# `FILE.' does not work on cygwin managed mounts.
1328698f425bSmrgfunc_source ()
1329698f425bSmrg{
1330698f425bSmrg    $opt_debug
1331698f425bSmrg    case $1 in
1332698f425bSmrg    */* | *\\*)	. "$1" ;;
1333698f425bSmrg    *)		. "./$1" ;;
1334698f425bSmrg    esac
1335698f425bSmrg}
1336698f425bSmrg
1337698f425bSmrg
13389ef0b394Smrg# func_resolve_sysroot PATH
13399ef0b394Smrg# Replace a leading = in PATH with a sysroot.  Store the result into
13409ef0b394Smrg# func_resolve_sysroot_result
13419ef0b394Smrgfunc_resolve_sysroot ()
13429ef0b394Smrg{
13439ef0b394Smrg  func_resolve_sysroot_result=$1
13449ef0b394Smrg  case $func_resolve_sysroot_result in
13459ef0b394Smrg  =*)
13469ef0b394Smrg    func_stripname '=' '' "$func_resolve_sysroot_result"
13479ef0b394Smrg    func_resolve_sysroot_result=$lt_sysroot$func_stripname_result
13489ef0b394Smrg    ;;
13499ef0b394Smrg  esac
13509ef0b394Smrg}
13519ef0b394Smrg
13529ef0b394Smrg# func_replace_sysroot PATH
13539ef0b394Smrg# If PATH begins with the sysroot, replace it with = and
13549ef0b394Smrg# store the result into func_replace_sysroot_result.
13559ef0b394Smrgfunc_replace_sysroot ()
13569ef0b394Smrg{
13579ef0b394Smrg  case "$lt_sysroot:$1" in
13589ef0b394Smrg  ?*:"$lt_sysroot"*)
13599ef0b394Smrg    func_stripname "$lt_sysroot" '' "$1"
13609ef0b394Smrg    func_replace_sysroot_result="=$func_stripname_result"
13619ef0b394Smrg    ;;
13629ef0b394Smrg  *)
13639ef0b394Smrg    # Including no sysroot.
13649ef0b394Smrg    func_replace_sysroot_result=$1
13659ef0b394Smrg    ;;
13669ef0b394Smrg  esac
13679ef0b394Smrg}
13689ef0b394Smrg
1369698f425bSmrg# func_infer_tag arg
1370698f425bSmrg# Infer tagged configuration to use if any are available and
1371698f425bSmrg# if one wasn't chosen via the "--tag" command line option.
1372698f425bSmrg# Only attempt this if the compiler in the base compile
1373698f425bSmrg# command doesn't match the default compiler.
1374698f425bSmrg# arg is usually of the form 'gcc ...'
1375698f425bSmrgfunc_infer_tag ()
1376698f425bSmrg{
1377698f425bSmrg    $opt_debug
1378698f425bSmrg    if test -n "$available_tags" && test -z "$tagname"; then
1379698f425bSmrg      CC_quoted=
1380698f425bSmrg      for arg in $CC; do
13819ef0b394Smrg	func_append_quoted CC_quoted "$arg"
1382698f425bSmrg      done
13839ef0b394Smrg      CC_expanded=`func_echo_all $CC`
13849ef0b394Smrg      CC_quoted_expanded=`func_echo_all $CC_quoted`
1385698f425bSmrg      case $@ in
1386698f425bSmrg      # Blanks in the command may have been stripped by the calling shell,
1387698f425bSmrg      # but not from the CC environment variable when configure was run.
13889ef0b394Smrg      " $CC "* | "$CC "* | " $CC_expanded "* | "$CC_expanded "* | \
13899ef0b394Smrg      " $CC_quoted"* | "$CC_quoted "* | " $CC_quoted_expanded "* | "$CC_quoted_expanded "*) ;;
1390698f425bSmrg      # Blanks at the start of $base_compile will cause this to fail
1391698f425bSmrg      # if we don't check for them as well.
1392698f425bSmrg      *)
1393698f425bSmrg	for z in $available_tags; do
1394698f425bSmrg	  if $GREP "^# ### BEGIN LIBTOOL TAG CONFIG: $z$" < "$progpath" > /dev/null; then
1395698f425bSmrg	    # Evaluate the configuration.
1396698f425bSmrg	    eval "`${SED} -n -e '/^# ### BEGIN LIBTOOL TAG CONFIG: '$z'$/,/^# ### END LIBTOOL TAG CONFIG: '$z'$/p' < $progpath`"
1397698f425bSmrg	    CC_quoted=
1398698f425bSmrg	    for arg in $CC; do
1399698f425bSmrg	      # Double-quote args containing other shell metacharacters.
14009ef0b394Smrg	      func_append_quoted CC_quoted "$arg"
1401698f425bSmrg	    done
14029ef0b394Smrg	    CC_expanded=`func_echo_all $CC`
14039ef0b394Smrg	    CC_quoted_expanded=`func_echo_all $CC_quoted`
1404698f425bSmrg	    case "$@ " in
14059ef0b394Smrg	    " $CC "* | "$CC "* | " $CC_expanded "* | "$CC_expanded "* | \
14069ef0b394Smrg	    " $CC_quoted"* | "$CC_quoted "* | " $CC_quoted_expanded "* | "$CC_quoted_expanded "*)
1407698f425bSmrg	      # The compiler in the base compile command matches
1408698f425bSmrg	      # the one in the tagged configuration.
1409698f425bSmrg	      # Assume this is the tagged configuration we want.
1410698f425bSmrg	      tagname=$z
1411698f425bSmrg	      break
1412698f425bSmrg	      ;;
1413698f425bSmrg	    esac
1414698f425bSmrg	  fi
1415698f425bSmrg	done
1416698f425bSmrg	# If $tagname still isn't set, then no tagged configuration
1417698f425bSmrg	# was found and let the user know that the "--tag" command
1418698f425bSmrg	# line option must be used.
1419698f425bSmrg	if test -z "$tagname"; then
1420698f425bSmrg	  func_echo "unable to infer tagged configuration"
1421698f425bSmrg	  func_fatal_error "specify a tag with \`--tag'"
1422698f425bSmrg#	else
1423698f425bSmrg#	  func_verbose "using $tagname tagged configuration"
1424698f425bSmrg	fi
1425698f425bSmrg	;;
1426698f425bSmrg      esac
1427698f425bSmrg    fi
1428698f425bSmrg}
1429698f425bSmrg
1430698f425bSmrg
1431698f425bSmrg
1432698f425bSmrg# func_write_libtool_object output_name pic_name nonpic_name
1433698f425bSmrg# Create a libtool object file (analogous to a ".la" file),
1434698f425bSmrg# but don't create it if we're doing a dry run.
1435698f425bSmrgfunc_write_libtool_object ()
1436698f425bSmrg{
1437698f425bSmrg    write_libobj=${1}
1438698f425bSmrg    if test "$build_libtool_libs" = yes; then
1439698f425bSmrg      write_lobj=\'${2}\'
1440698f425bSmrg    else
1441698f425bSmrg      write_lobj=none
1442698f425bSmrg    fi
1443698f425bSmrg
1444698f425bSmrg    if test "$build_old_libs" = yes; then
1445698f425bSmrg      write_oldobj=\'${3}\'
1446698f425bSmrg    else
1447698f425bSmrg      write_oldobj=none
1448698f425bSmrg    fi
1449698f425bSmrg
1450698f425bSmrg    $opt_dry_run || {
1451698f425bSmrg      cat >${write_libobj}T <<EOF
1452698f425bSmrg# $write_libobj - a libtool object file
1453698f425bSmrg# Generated by $PROGRAM (GNU $PACKAGE$TIMESTAMP) $VERSION
1454698f425bSmrg#
1455698f425bSmrg# Please DO NOT delete this file!
1456698f425bSmrg# It is necessary for linking the library.
1457698f425bSmrg
1458698f425bSmrg# Name of the PIC object.
1459698f425bSmrgpic_object=$write_lobj
1460698f425bSmrg
1461698f425bSmrg# Name of the non-PIC object
1462698f425bSmrgnon_pic_object=$write_oldobj
1463698f425bSmrg
1464698f425bSmrgEOF
1465698f425bSmrg      $MV "${write_libobj}T" "${write_libobj}"
1466698f425bSmrg    }
1467698f425bSmrg}
1468698f425bSmrg
14699ef0b394Smrg
14709ef0b394Smrg##################################################
14719ef0b394Smrg# FILE NAME AND PATH CONVERSION HELPER FUNCTIONS #
14729ef0b394Smrg##################################################
14739ef0b394Smrg
14749ef0b394Smrg# func_convert_core_file_wine_to_w32 ARG
14759ef0b394Smrg# Helper function used by file name conversion functions when $build is *nix,
14769ef0b394Smrg# and $host is mingw, cygwin, or some other w32 environment. Relies on a
14779ef0b394Smrg# correctly configured wine environment available, with the winepath program
14789ef0b394Smrg# in $build's $PATH.
14799ef0b394Smrg#
14809ef0b394Smrg# ARG is the $build file name to be converted to w32 format.
14819ef0b394Smrg# Result is available in $func_convert_core_file_wine_to_w32_result, and will
14829ef0b394Smrg# be empty on error (or when ARG is empty)
14839ef0b394Smrgfunc_convert_core_file_wine_to_w32 ()
14849ef0b394Smrg{
14859ef0b394Smrg  $opt_debug
14869ef0b394Smrg  func_convert_core_file_wine_to_w32_result="$1"
14879ef0b394Smrg  if test -n "$1"; then
14889ef0b394Smrg    # Unfortunately, winepath does not exit with a non-zero error code, so we
14899ef0b394Smrg    # are forced to check the contents of stdout. On the other hand, if the
14909ef0b394Smrg    # command is not found, the shell will set an exit code of 127 and print
14919ef0b394Smrg    # *an error message* to stdout. So we must check for both error code of
14929ef0b394Smrg    # zero AND non-empty stdout, which explains the odd construction:
14939ef0b394Smrg    func_convert_core_file_wine_to_w32_tmp=`winepath -w "$1" 2>/dev/null`
14949ef0b394Smrg    if test "$?" -eq 0 && test -n "${func_convert_core_file_wine_to_w32_tmp}"; then
14959ef0b394Smrg      func_convert_core_file_wine_to_w32_result=`$ECHO "$func_convert_core_file_wine_to_w32_tmp" |
14969ef0b394Smrg        $SED -e "$lt_sed_naive_backslashify"`
14979ef0b394Smrg    else
14989ef0b394Smrg      func_convert_core_file_wine_to_w32_result=
14999ef0b394Smrg    fi
15009ef0b394Smrg  fi
15019ef0b394Smrg}
15029ef0b394Smrg# end: func_convert_core_file_wine_to_w32
15039ef0b394Smrg
15049ef0b394Smrg
15059ef0b394Smrg# func_convert_core_path_wine_to_w32 ARG
15069ef0b394Smrg# Helper function used by path conversion functions when $build is *nix, and
15079ef0b394Smrg# $host is mingw, cygwin, or some other w32 environment. Relies on a correctly
15089ef0b394Smrg# configured wine environment available, with the winepath program in $build's
15099ef0b394Smrg# $PATH. Assumes ARG has no leading or trailing path separator characters.
15109ef0b394Smrg#
15119ef0b394Smrg# ARG is path to be converted from $build format to win32.
15129ef0b394Smrg# Result is available in $func_convert_core_path_wine_to_w32_result.
15139ef0b394Smrg# Unconvertible file (directory) names in ARG are skipped; if no directory names
15149ef0b394Smrg# are convertible, then the result may be empty.
15159ef0b394Smrgfunc_convert_core_path_wine_to_w32 ()
15169ef0b394Smrg{
15179ef0b394Smrg  $opt_debug
15189ef0b394Smrg  # unfortunately, winepath doesn't convert paths, only file names
15199ef0b394Smrg  func_convert_core_path_wine_to_w32_result=""
15209ef0b394Smrg  if test -n "$1"; then
15219ef0b394Smrg    oldIFS=$IFS
15229ef0b394Smrg    IFS=:
15239ef0b394Smrg    for func_convert_core_path_wine_to_w32_f in $1; do
15249ef0b394Smrg      IFS=$oldIFS
15259ef0b394Smrg      func_convert_core_file_wine_to_w32 "$func_convert_core_path_wine_to_w32_f"
15269ef0b394Smrg      if test -n "$func_convert_core_file_wine_to_w32_result" ; then
15279ef0b394Smrg        if test -z "$func_convert_core_path_wine_to_w32_result"; then
15289ef0b394Smrg          func_convert_core_path_wine_to_w32_result="$func_convert_core_file_wine_to_w32_result"
15299ef0b394Smrg        else
15309ef0b394Smrg          func_append func_convert_core_path_wine_to_w32_result ";$func_convert_core_file_wine_to_w32_result"
15319ef0b394Smrg        fi
15329ef0b394Smrg      fi
15339ef0b394Smrg    done
15349ef0b394Smrg    IFS=$oldIFS
15359ef0b394Smrg  fi
15369ef0b394Smrg}
15379ef0b394Smrg# end: func_convert_core_path_wine_to_w32
15389ef0b394Smrg
15399ef0b394Smrg
15409ef0b394Smrg# func_cygpath ARGS...
15419ef0b394Smrg# Wrapper around calling the cygpath program via LT_CYGPATH. This is used when
15429ef0b394Smrg# when (1) $build is *nix and Cygwin is hosted via a wine environment; or (2)
15439ef0b394Smrg# $build is MSYS and $host is Cygwin, or (3) $build is Cygwin. In case (1) or
15449ef0b394Smrg# (2), returns the Cygwin file name or path in func_cygpath_result (input
15459ef0b394Smrg# file name or path is assumed to be in w32 format, as previously converted
15469ef0b394Smrg# from $build's *nix or MSYS format). In case (3), returns the w32 file name
15479ef0b394Smrg# or path in func_cygpath_result (input file name or path is assumed to be in
15489ef0b394Smrg# Cygwin format). Returns an empty string on error.
15499ef0b394Smrg#
15509ef0b394Smrg# ARGS are passed to cygpath, with the last one being the file name or path to
15519ef0b394Smrg# be converted.
15529ef0b394Smrg#
15539ef0b394Smrg# Specify the absolute *nix (or w32) name to cygpath in the LT_CYGPATH
15549ef0b394Smrg# environment variable; do not put it in $PATH.
15559ef0b394Smrgfunc_cygpath ()
15569ef0b394Smrg{
15579ef0b394Smrg  $opt_debug
15589ef0b394Smrg  if test -n "$LT_CYGPATH" && test -f "$LT_CYGPATH"; then
15599ef0b394Smrg    func_cygpath_result=`$LT_CYGPATH "$@" 2>/dev/null`
15609ef0b394Smrg    if test "$?" -ne 0; then
15619ef0b394Smrg      # on failure, ensure result is empty
15629ef0b394Smrg      func_cygpath_result=
15639ef0b394Smrg    fi
15649ef0b394Smrg  else
15659ef0b394Smrg    func_cygpath_result=
15669ef0b394Smrg    func_error "LT_CYGPATH is empty or specifies non-existent file: \`$LT_CYGPATH'"
15679ef0b394Smrg  fi
15689ef0b394Smrg}
15699ef0b394Smrg#end: func_cygpath
15709ef0b394Smrg
15719ef0b394Smrg
15729ef0b394Smrg# func_convert_core_msys_to_w32 ARG
15739ef0b394Smrg# Convert file name or path ARG from MSYS format to w32 format.  Return
15749ef0b394Smrg# result in func_convert_core_msys_to_w32_result.
15759ef0b394Smrgfunc_convert_core_msys_to_w32 ()
15769ef0b394Smrg{
15779ef0b394Smrg  $opt_debug
15789ef0b394Smrg  # awkward: cmd appends spaces to result
15799ef0b394Smrg  func_convert_core_msys_to_w32_result=`( cmd //c echo "$1" ) 2>/dev/null |
15809ef0b394Smrg    $SED -e 's/[ ]*$//' -e "$lt_sed_naive_backslashify"`
15819ef0b394Smrg}
15829ef0b394Smrg#end: func_convert_core_msys_to_w32
15839ef0b394Smrg
15849ef0b394Smrg
15859ef0b394Smrg# func_convert_file_check ARG1 ARG2
15869ef0b394Smrg# Verify that ARG1 (a file name in $build format) was converted to $host
15879ef0b394Smrg# format in ARG2. Otherwise, emit an error message, but continue (resetting
15889ef0b394Smrg# func_to_host_file_result to ARG1).
15899ef0b394Smrgfunc_convert_file_check ()
15909ef0b394Smrg{
15919ef0b394Smrg  $opt_debug
15929ef0b394Smrg  if test -z "$2" && test -n "$1" ; then
15939ef0b394Smrg    func_error "Could not determine host file name corresponding to"
15949ef0b394Smrg    func_error "  \`$1'"
15959ef0b394Smrg    func_error "Continuing, but uninstalled executables may not work."
15969ef0b394Smrg    # Fallback:
15979ef0b394Smrg    func_to_host_file_result="$1"
15989ef0b394Smrg  fi
15999ef0b394Smrg}
16009ef0b394Smrg# end func_convert_file_check
16019ef0b394Smrg
16029ef0b394Smrg
16039ef0b394Smrg# func_convert_path_check FROM_PATHSEP TO_PATHSEP FROM_PATH TO_PATH
16049ef0b394Smrg# Verify that FROM_PATH (a path in $build format) was converted to $host
16059ef0b394Smrg# format in TO_PATH. Otherwise, emit an error message, but continue, resetting
16069ef0b394Smrg# func_to_host_file_result to a simplistic fallback value (see below).
16079ef0b394Smrgfunc_convert_path_check ()
16089ef0b394Smrg{
16099ef0b394Smrg  $opt_debug
16109ef0b394Smrg  if test -z "$4" && test -n "$3"; then
16119ef0b394Smrg    func_error "Could not determine the host path corresponding to"
16129ef0b394Smrg    func_error "  \`$3'"
16139ef0b394Smrg    func_error "Continuing, but uninstalled executables may not work."
16149ef0b394Smrg    # Fallback.  This is a deliberately simplistic "conversion" and
16159ef0b394Smrg    # should not be "improved".  See libtool.info.
16169ef0b394Smrg    if test "x$1" != "x$2"; then
16179ef0b394Smrg      lt_replace_pathsep_chars="s|$1|$2|g"
16189ef0b394Smrg      func_to_host_path_result=`echo "$3" |
16199ef0b394Smrg        $SED -e "$lt_replace_pathsep_chars"`
16209ef0b394Smrg    else
16219ef0b394Smrg      func_to_host_path_result="$3"
16229ef0b394Smrg    fi
16239ef0b394Smrg  fi
16249ef0b394Smrg}
16259ef0b394Smrg# end func_convert_path_check
16269ef0b394Smrg
16279ef0b394Smrg
16289ef0b394Smrg# func_convert_path_front_back_pathsep FRONTPAT BACKPAT REPL ORIG
16299ef0b394Smrg# Modifies func_to_host_path_result by prepending REPL if ORIG matches FRONTPAT
16309ef0b394Smrg# and appending REPL if ORIG matches BACKPAT.
16319ef0b394Smrgfunc_convert_path_front_back_pathsep ()
16329ef0b394Smrg{
16339ef0b394Smrg  $opt_debug
16349ef0b394Smrg  case $4 in
16359ef0b394Smrg  $1 ) func_to_host_path_result="$3$func_to_host_path_result"
16369ef0b394Smrg    ;;
16379ef0b394Smrg  esac
16389ef0b394Smrg  case $4 in
16399ef0b394Smrg  $2 ) func_append func_to_host_path_result "$3"
16409ef0b394Smrg    ;;
16419ef0b394Smrg  esac
16429ef0b394Smrg}
16439ef0b394Smrg# end func_convert_path_front_back_pathsep
16449ef0b394Smrg
16459ef0b394Smrg
16469ef0b394Smrg##################################################
16479ef0b394Smrg# $build to $host FILE NAME CONVERSION FUNCTIONS #
16489ef0b394Smrg##################################################
16499ef0b394Smrg# invoked via `$to_host_file_cmd ARG'
16509ef0b394Smrg#
16519ef0b394Smrg# In each case, ARG is the path to be converted from $build to $host format.
16529ef0b394Smrg# Result will be available in $func_to_host_file_result.
16539ef0b394Smrg
16549ef0b394Smrg
16559ef0b394Smrg# func_to_host_file ARG
16569ef0b394Smrg# Converts the file name ARG from $build format to $host format. Return result
16579ef0b394Smrg# in func_to_host_file_result.
16589ef0b394Smrgfunc_to_host_file ()
16599ef0b394Smrg{
16609ef0b394Smrg  $opt_debug
16619ef0b394Smrg  $to_host_file_cmd "$1"
16629ef0b394Smrg}
16639ef0b394Smrg# end func_to_host_file
16649ef0b394Smrg
16659ef0b394Smrg
16669ef0b394Smrg# func_to_tool_file ARG LAZY
16679ef0b394Smrg# converts the file name ARG from $build format to toolchain format. Return
16689ef0b394Smrg# result in func_to_tool_file_result.  If the conversion in use is listed
16699ef0b394Smrg# in (the comma separated) LAZY, no conversion takes place.
16709ef0b394Smrgfunc_to_tool_file ()
16719ef0b394Smrg{
16729ef0b394Smrg  $opt_debug
16739ef0b394Smrg  case ,$2, in
16749ef0b394Smrg    *,"$to_tool_file_cmd",*)
16759ef0b394Smrg      func_to_tool_file_result=$1
16769ef0b394Smrg      ;;
16779ef0b394Smrg    *)
16789ef0b394Smrg      $to_tool_file_cmd "$1"
16799ef0b394Smrg      func_to_tool_file_result=$func_to_host_file_result
16809ef0b394Smrg      ;;
16819ef0b394Smrg  esac
16829ef0b394Smrg}
16839ef0b394Smrg# end func_to_tool_file
16849ef0b394Smrg
16859ef0b394Smrg
16869ef0b394Smrg# func_convert_file_noop ARG
16879ef0b394Smrg# Copy ARG to func_to_host_file_result.
16889ef0b394Smrgfunc_convert_file_noop ()
16899ef0b394Smrg{
16909ef0b394Smrg  func_to_host_file_result="$1"
16919ef0b394Smrg}
16929ef0b394Smrg# end func_convert_file_noop
16939ef0b394Smrg
16949ef0b394Smrg
16959ef0b394Smrg# func_convert_file_msys_to_w32 ARG
16969ef0b394Smrg# Convert file name ARG from (mingw) MSYS to (mingw) w32 format; automatic
16979ef0b394Smrg# conversion to w32 is not available inside the cwrapper.  Returns result in
16989ef0b394Smrg# func_to_host_file_result.
16999ef0b394Smrgfunc_convert_file_msys_to_w32 ()
17009ef0b394Smrg{
17019ef0b394Smrg  $opt_debug
17029ef0b394Smrg  func_to_host_file_result="$1"
17039ef0b394Smrg  if test -n "$1"; then
17049ef0b394Smrg    func_convert_core_msys_to_w32 "$1"
17059ef0b394Smrg    func_to_host_file_result="$func_convert_core_msys_to_w32_result"
17069ef0b394Smrg  fi
17079ef0b394Smrg  func_convert_file_check "$1" "$func_to_host_file_result"
17089ef0b394Smrg}
17099ef0b394Smrg# end func_convert_file_msys_to_w32
17109ef0b394Smrg
17119ef0b394Smrg
17129ef0b394Smrg# func_convert_file_cygwin_to_w32 ARG
17139ef0b394Smrg# Convert file name ARG from Cygwin to w32 format.  Returns result in
17149ef0b394Smrg# func_to_host_file_result.
17159ef0b394Smrgfunc_convert_file_cygwin_to_w32 ()
17169ef0b394Smrg{
17179ef0b394Smrg  $opt_debug
17189ef0b394Smrg  func_to_host_file_result="$1"
17199ef0b394Smrg  if test -n "$1"; then
17209ef0b394Smrg    # because $build is cygwin, we call "the" cygpath in $PATH; no need to use
17219ef0b394Smrg    # LT_CYGPATH in this case.
17229ef0b394Smrg    func_to_host_file_result=`cygpath -m "$1"`
17239ef0b394Smrg  fi
17249ef0b394Smrg  func_convert_file_check "$1" "$func_to_host_file_result"
17259ef0b394Smrg}
17269ef0b394Smrg# end func_convert_file_cygwin_to_w32
17279ef0b394Smrg
17289ef0b394Smrg
17299ef0b394Smrg# func_convert_file_nix_to_w32 ARG
17309ef0b394Smrg# Convert file name ARG from *nix to w32 format.  Requires a wine environment
17319ef0b394Smrg# and a working winepath. Returns result in func_to_host_file_result.
17329ef0b394Smrgfunc_convert_file_nix_to_w32 ()
17339ef0b394Smrg{
17349ef0b394Smrg  $opt_debug
17359ef0b394Smrg  func_to_host_file_result="$1"
17369ef0b394Smrg  if test -n "$1"; then
17379ef0b394Smrg    func_convert_core_file_wine_to_w32 "$1"
17389ef0b394Smrg    func_to_host_file_result="$func_convert_core_file_wine_to_w32_result"
17399ef0b394Smrg  fi
17409ef0b394Smrg  func_convert_file_check "$1" "$func_to_host_file_result"
17419ef0b394Smrg}
17429ef0b394Smrg# end func_convert_file_nix_to_w32
17439ef0b394Smrg
17449ef0b394Smrg
17459ef0b394Smrg# func_convert_file_msys_to_cygwin ARG
17469ef0b394Smrg# Convert file name ARG from MSYS to Cygwin format.  Requires LT_CYGPATH set.
17479ef0b394Smrg# Returns result in func_to_host_file_result.
17489ef0b394Smrgfunc_convert_file_msys_to_cygwin ()
17499ef0b394Smrg{
17509ef0b394Smrg  $opt_debug
17519ef0b394Smrg  func_to_host_file_result="$1"
17529ef0b394Smrg  if test -n "$1"; then
17539ef0b394Smrg    func_convert_core_msys_to_w32 "$1"
17549ef0b394Smrg    func_cygpath -u "$func_convert_core_msys_to_w32_result"
17559ef0b394Smrg    func_to_host_file_result="$func_cygpath_result"
17569ef0b394Smrg  fi
17579ef0b394Smrg  func_convert_file_check "$1" "$func_to_host_file_result"
17589ef0b394Smrg}
17599ef0b394Smrg# end func_convert_file_msys_to_cygwin
17609ef0b394Smrg
17619ef0b394Smrg
17629ef0b394Smrg# func_convert_file_nix_to_cygwin ARG
17639ef0b394Smrg# Convert file name ARG from *nix to Cygwin format.  Requires Cygwin installed
17649ef0b394Smrg# in a wine environment, working winepath, and LT_CYGPATH set.  Returns result
17659ef0b394Smrg# in func_to_host_file_result.
17669ef0b394Smrgfunc_convert_file_nix_to_cygwin ()
17679ef0b394Smrg{
17689ef0b394Smrg  $opt_debug
17699ef0b394Smrg  func_to_host_file_result="$1"
17709ef0b394Smrg  if test -n "$1"; then
17719ef0b394Smrg    # convert from *nix to w32, then use cygpath to convert from w32 to cygwin.
17729ef0b394Smrg    func_convert_core_file_wine_to_w32 "$1"
17739ef0b394Smrg    func_cygpath -u "$func_convert_core_file_wine_to_w32_result"
17749ef0b394Smrg    func_to_host_file_result="$func_cygpath_result"
17759ef0b394Smrg  fi
17769ef0b394Smrg  func_convert_file_check "$1" "$func_to_host_file_result"
17779ef0b394Smrg}
17789ef0b394Smrg# end func_convert_file_nix_to_cygwin
17799ef0b394Smrg
17809ef0b394Smrg
17819ef0b394Smrg#############################################
17829ef0b394Smrg# $build to $host PATH CONVERSION FUNCTIONS #
17839ef0b394Smrg#############################################
17849ef0b394Smrg# invoked via `$to_host_path_cmd ARG'
17859ef0b394Smrg#
17869ef0b394Smrg# In each case, ARG is the path to be converted from $build to $host format.
17879ef0b394Smrg# The result will be available in $func_to_host_path_result.
17889ef0b394Smrg#
17899ef0b394Smrg# Path separators are also converted from $build format to $host format.  If
17909ef0b394Smrg# ARG begins or ends with a path separator character, it is preserved (but
17919ef0b394Smrg# converted to $host format) on output.
17929ef0b394Smrg#
17939ef0b394Smrg# All path conversion functions are named using the following convention:
17949ef0b394Smrg#   file name conversion function    : func_convert_file_X_to_Y ()
17959ef0b394Smrg#   path conversion function         : func_convert_path_X_to_Y ()
17969ef0b394Smrg# where, for any given $build/$host combination the 'X_to_Y' value is the
17979ef0b394Smrg# same.  If conversion functions are added for new $build/$host combinations,
17989ef0b394Smrg# the two new functions must follow this pattern, or func_init_to_host_path_cmd
17999ef0b394Smrg# will break.
18009ef0b394Smrg
18019ef0b394Smrg
18029ef0b394Smrg# func_init_to_host_path_cmd
18039ef0b394Smrg# Ensures that function "pointer" variable $to_host_path_cmd is set to the
18049ef0b394Smrg# appropriate value, based on the value of $to_host_file_cmd.
18059ef0b394Smrgto_host_path_cmd=
18069ef0b394Smrgfunc_init_to_host_path_cmd ()
18079ef0b394Smrg{
18089ef0b394Smrg  $opt_debug
18099ef0b394Smrg  if test -z "$to_host_path_cmd"; then
18109ef0b394Smrg    func_stripname 'func_convert_file_' '' "$to_host_file_cmd"
18119ef0b394Smrg    to_host_path_cmd="func_convert_path_${func_stripname_result}"
18129ef0b394Smrg  fi
18139ef0b394Smrg}
18149ef0b394Smrg
18159ef0b394Smrg
18169ef0b394Smrg# func_to_host_path ARG
18179ef0b394Smrg# Converts the path ARG from $build format to $host format. Return result
18189ef0b394Smrg# in func_to_host_path_result.
18199ef0b394Smrgfunc_to_host_path ()
18209ef0b394Smrg{
18219ef0b394Smrg  $opt_debug
18229ef0b394Smrg  func_init_to_host_path_cmd
18239ef0b394Smrg  $to_host_path_cmd "$1"
18249ef0b394Smrg}
18259ef0b394Smrg# end func_to_host_path
18269ef0b394Smrg
18279ef0b394Smrg
18289ef0b394Smrg# func_convert_path_noop ARG
18299ef0b394Smrg# Copy ARG to func_to_host_path_result.
18309ef0b394Smrgfunc_convert_path_noop ()
18319ef0b394Smrg{
18329ef0b394Smrg  func_to_host_path_result="$1"
18339ef0b394Smrg}
18349ef0b394Smrg# end func_convert_path_noop
18359ef0b394Smrg
18369ef0b394Smrg
18379ef0b394Smrg# func_convert_path_msys_to_w32 ARG
18389ef0b394Smrg# Convert path ARG from (mingw) MSYS to (mingw) w32 format; automatic
18399ef0b394Smrg# conversion to w32 is not available inside the cwrapper.  Returns result in
18409ef0b394Smrg# func_to_host_path_result.
18419ef0b394Smrgfunc_convert_path_msys_to_w32 ()
18429ef0b394Smrg{
18439ef0b394Smrg  $opt_debug
18449ef0b394Smrg  func_to_host_path_result="$1"
18459ef0b394Smrg  if test -n "$1"; then
18469ef0b394Smrg    # Remove leading and trailing path separator characters from ARG.  MSYS
18479ef0b394Smrg    # behavior is inconsistent here; cygpath turns them into '.;' and ';.';
18489ef0b394Smrg    # and winepath ignores them completely.
18499ef0b394Smrg    func_stripname : : "$1"
18509ef0b394Smrg    func_to_host_path_tmp1=$func_stripname_result
18519ef0b394Smrg    func_convert_core_msys_to_w32 "$func_to_host_path_tmp1"
18529ef0b394Smrg    func_to_host_path_result="$func_convert_core_msys_to_w32_result"
18539ef0b394Smrg    func_convert_path_check : ";" \
18549ef0b394Smrg      "$func_to_host_path_tmp1" "$func_to_host_path_result"
18559ef0b394Smrg    func_convert_path_front_back_pathsep ":*" "*:" ";" "$1"
18569ef0b394Smrg  fi
18579ef0b394Smrg}
18589ef0b394Smrg# end func_convert_path_msys_to_w32
18599ef0b394Smrg
18609ef0b394Smrg
18619ef0b394Smrg# func_convert_path_cygwin_to_w32 ARG
18629ef0b394Smrg# Convert path ARG from Cygwin to w32 format.  Returns result in
18639ef0b394Smrg# func_to_host_file_result.
18649ef0b394Smrgfunc_convert_path_cygwin_to_w32 ()
18659ef0b394Smrg{
18669ef0b394Smrg  $opt_debug
18679ef0b394Smrg  func_to_host_path_result="$1"
18689ef0b394Smrg  if test -n "$1"; then
18699ef0b394Smrg    # See func_convert_path_msys_to_w32:
18709ef0b394Smrg    func_stripname : : "$1"
18719ef0b394Smrg    func_to_host_path_tmp1=$func_stripname_result
18729ef0b394Smrg    func_to_host_path_result=`cygpath -m -p "$func_to_host_path_tmp1"`
18739ef0b394Smrg    func_convert_path_check : ";" \
18749ef0b394Smrg      "$func_to_host_path_tmp1" "$func_to_host_path_result"
18759ef0b394Smrg    func_convert_path_front_back_pathsep ":*" "*:" ";" "$1"
18769ef0b394Smrg  fi
18779ef0b394Smrg}
18789ef0b394Smrg# end func_convert_path_cygwin_to_w32
18799ef0b394Smrg
18809ef0b394Smrg
18819ef0b394Smrg# func_convert_path_nix_to_w32 ARG
18829ef0b394Smrg# Convert path ARG from *nix to w32 format.  Requires a wine environment and
18839ef0b394Smrg# a working winepath.  Returns result in func_to_host_file_result.
18849ef0b394Smrgfunc_convert_path_nix_to_w32 ()
18859ef0b394Smrg{
18869ef0b394Smrg  $opt_debug
18879ef0b394Smrg  func_to_host_path_result="$1"
18889ef0b394Smrg  if test -n "$1"; then
18899ef0b394Smrg    # See func_convert_path_msys_to_w32:
18909ef0b394Smrg    func_stripname : : "$1"
18919ef0b394Smrg    func_to_host_path_tmp1=$func_stripname_result
18929ef0b394Smrg    func_convert_core_path_wine_to_w32 "$func_to_host_path_tmp1"
18939ef0b394Smrg    func_to_host_path_result="$func_convert_core_path_wine_to_w32_result"
18949ef0b394Smrg    func_convert_path_check : ";" \
18959ef0b394Smrg      "$func_to_host_path_tmp1" "$func_to_host_path_result"
18969ef0b394Smrg    func_convert_path_front_back_pathsep ":*" "*:" ";" "$1"
18979ef0b394Smrg  fi
18989ef0b394Smrg}
18999ef0b394Smrg# end func_convert_path_nix_to_w32
19009ef0b394Smrg
19019ef0b394Smrg
19029ef0b394Smrg# func_convert_path_msys_to_cygwin ARG
19039ef0b394Smrg# Convert path ARG from MSYS to Cygwin format.  Requires LT_CYGPATH set.
19049ef0b394Smrg# Returns result in func_to_host_file_result.
19059ef0b394Smrgfunc_convert_path_msys_to_cygwin ()
19069ef0b394Smrg{
19079ef0b394Smrg  $opt_debug
19089ef0b394Smrg  func_to_host_path_result="$1"
19099ef0b394Smrg  if test -n "$1"; then
19109ef0b394Smrg    # See func_convert_path_msys_to_w32:
19119ef0b394Smrg    func_stripname : : "$1"
19129ef0b394Smrg    func_to_host_path_tmp1=$func_stripname_result
19139ef0b394Smrg    func_convert_core_msys_to_w32 "$func_to_host_path_tmp1"
19149ef0b394Smrg    func_cygpath -u -p "$func_convert_core_msys_to_w32_result"
19159ef0b394Smrg    func_to_host_path_result="$func_cygpath_result"
19169ef0b394Smrg    func_convert_path_check : : \
19179ef0b394Smrg      "$func_to_host_path_tmp1" "$func_to_host_path_result"
19189ef0b394Smrg    func_convert_path_front_back_pathsep ":*" "*:" : "$1"
19199ef0b394Smrg  fi
19209ef0b394Smrg}
19219ef0b394Smrg# end func_convert_path_msys_to_cygwin
19229ef0b394Smrg
19239ef0b394Smrg
19249ef0b394Smrg# func_convert_path_nix_to_cygwin ARG
19259ef0b394Smrg# Convert path ARG from *nix to Cygwin format.  Requires Cygwin installed in a
19269ef0b394Smrg# a wine environment, working winepath, and LT_CYGPATH set.  Returns result in
19279ef0b394Smrg# func_to_host_file_result.
19289ef0b394Smrgfunc_convert_path_nix_to_cygwin ()
19299ef0b394Smrg{
19309ef0b394Smrg  $opt_debug
19319ef0b394Smrg  func_to_host_path_result="$1"
19329ef0b394Smrg  if test -n "$1"; then
19339ef0b394Smrg    # Remove leading and trailing path separator characters from
19349ef0b394Smrg    # ARG. msys behavior is inconsistent here, cygpath turns them
19359ef0b394Smrg    # into '.;' and ';.', and winepath ignores them completely.
19369ef0b394Smrg    func_stripname : : "$1"
19379ef0b394Smrg    func_to_host_path_tmp1=$func_stripname_result
19389ef0b394Smrg    func_convert_core_path_wine_to_w32 "$func_to_host_path_tmp1"
19399ef0b394Smrg    func_cygpath -u -p "$func_convert_core_path_wine_to_w32_result"
19409ef0b394Smrg    func_to_host_path_result="$func_cygpath_result"
19419ef0b394Smrg    func_convert_path_check : : \
19429ef0b394Smrg      "$func_to_host_path_tmp1" "$func_to_host_path_result"
19439ef0b394Smrg    func_convert_path_front_back_pathsep ":*" "*:" : "$1"
19449ef0b394Smrg  fi
19459ef0b394Smrg}
19469ef0b394Smrg# end func_convert_path_nix_to_cygwin
19479ef0b394Smrg
19489ef0b394Smrg
1949698f425bSmrg# func_mode_compile arg...
1950698f425bSmrgfunc_mode_compile ()
1951698f425bSmrg{
1952698f425bSmrg    $opt_debug
1953698f425bSmrg    # Get the compilation command and the source file.
1954698f425bSmrg    base_compile=
1955698f425bSmrg    srcfile="$nonopt"  #  always keep a non-empty value in "srcfile"
1956698f425bSmrg    suppress_opt=yes
1957698f425bSmrg    suppress_output=
1958698f425bSmrg    arg_mode=normal
1959698f425bSmrg    libobj=
1960698f425bSmrg    later=
1961698f425bSmrg    pie_flag=
1962698f425bSmrg
1963698f425bSmrg    for arg
1964698f425bSmrg    do
1965698f425bSmrg      case $arg_mode in
1966698f425bSmrg      arg  )
1967698f425bSmrg	# do not "continue".  Instead, add this to base_compile
1968698f425bSmrg	lastarg="$arg"
1969698f425bSmrg	arg_mode=normal
1970698f425bSmrg	;;
1971698f425bSmrg
1972698f425bSmrg      target )
1973698f425bSmrg	libobj="$arg"
1974698f425bSmrg	arg_mode=normal
1975698f425bSmrg	continue
1976698f425bSmrg	;;
1977698f425bSmrg
1978698f425bSmrg      normal )
1979698f425bSmrg	# Accept any command-line options.
1980698f425bSmrg	case $arg in
1981698f425bSmrg	-o)
1982698f425bSmrg	  test -n "$libobj" && \
1983698f425bSmrg	    func_fatal_error "you cannot specify \`-o' more than once"
1984698f425bSmrg	  arg_mode=target
1985698f425bSmrg	  continue
1986698f425bSmrg	  ;;
1987698f425bSmrg
1988698f425bSmrg	-pie | -fpie | -fPIE)
19899ef0b394Smrg          func_append pie_flag " $arg"
1990698f425bSmrg	  continue
1991698f425bSmrg	  ;;
1992698f425bSmrg
1993698f425bSmrg	-shared | -static | -prefer-pic | -prefer-non-pic)
19949ef0b394Smrg	  func_append later " $arg"
1995698f425bSmrg	  continue
1996698f425bSmrg	  ;;
1997266e564dSmrg
1998266e564dSmrg	-no-suppress)
1999266e564dSmrg	  suppress_opt=no
2000266e564dSmrg	  continue
2001266e564dSmrg	  ;;
2002266e564dSmrg
2003266e564dSmrg	-Xcompiler)
2004266e564dSmrg	  arg_mode=arg  #  the next one goes into the "base_compile" arg list
2005266e564dSmrg	  continue      #  The current "srcfile" will either be retained or
2006266e564dSmrg	  ;;            #  replaced later.  I would guess that would be a bug.
2007266e564dSmrg
2008266e564dSmrg	-Wc,*)
2009698f425bSmrg	  func_stripname '-Wc,' '' "$arg"
2010698f425bSmrg	  args=$func_stripname_result
2011266e564dSmrg	  lastarg=
2012266e564dSmrg	  save_ifs="$IFS"; IFS=','
2013698f425bSmrg	  for arg in $args; do
2014266e564dSmrg	    IFS="$save_ifs"
20159ef0b394Smrg	    func_append_quoted lastarg "$arg"
2016266e564dSmrg	  done
2017266e564dSmrg	  IFS="$save_ifs"
2018698f425bSmrg	  func_stripname ' ' '' "$lastarg"
2019698f425bSmrg	  lastarg=$func_stripname_result
2020266e564dSmrg
2021266e564dSmrg	  # Add the arguments to base_compile.
20229ef0b394Smrg	  func_append base_compile " $lastarg"
2023266e564dSmrg	  continue
2024266e564dSmrg	  ;;
2025266e564dSmrg
2026698f425bSmrg	*)
2027266e564dSmrg	  # Accept the current argument as the source file.
2028266e564dSmrg	  # The previous "srcfile" becomes the current argument.
2029266e564dSmrg	  #
2030266e564dSmrg	  lastarg="$srcfile"
2031266e564dSmrg	  srcfile="$arg"
2032266e564dSmrg	  ;;
2033266e564dSmrg	esac  #  case $arg
2034266e564dSmrg	;;
2035266e564dSmrg      esac    #  case $arg_mode
2036266e564dSmrg
2037266e564dSmrg      # Aesthetically quote the previous argument.
20389ef0b394Smrg      func_append_quoted base_compile "$lastarg"
2039266e564dSmrg    done # for arg
2040266e564dSmrg
2041266e564dSmrg    case $arg_mode in
2042266e564dSmrg    arg)
2043698f425bSmrg      func_fatal_error "you must specify an argument for -Xcompile"
2044266e564dSmrg      ;;
2045266e564dSmrg    target)
2046698f425bSmrg      func_fatal_error "you must specify a target with \`-o'"
2047266e564dSmrg      ;;
2048266e564dSmrg    *)
2049266e564dSmrg      # Get the name of the library object.
2050698f425bSmrg      test -z "$libobj" && {
2051698f425bSmrg	func_basename "$srcfile"
2052698f425bSmrg	libobj="$func_basename_result"
2053698f425bSmrg      }
2054266e564dSmrg      ;;
2055266e564dSmrg    esac
2056266e564dSmrg
2057266e564dSmrg    # Recognize several different file suffixes.
2058266e564dSmrg    # If the user specifies -o file.o, it is replaced with file.lo
2059266e564dSmrg    case $libobj in
2060698f425bSmrg    *.[cCFSifmso] | \
2061698f425bSmrg    *.ada | *.adb | *.ads | *.asm | \
2062698f425bSmrg    *.c++ | *.cc | *.ii | *.class | *.cpp | *.cxx | \
2063fb5e8d76Smrg    *.[fF][09]? | *.for | *.java | *.go | *.obj | *.sx | *.cu | *.cup)
2064698f425bSmrg      func_xform "$libobj"
2065698f425bSmrg      libobj=$func_xform_result
2066698f425bSmrg      ;;
2067266e564dSmrg    esac
2068266e564dSmrg
2069266e564dSmrg    case $libobj in
2070698f425bSmrg    *.lo) func_lo2o "$libobj"; obj=$func_lo2o_result ;;
2071266e564dSmrg    *)
2072698f425bSmrg      func_fatal_error "cannot determine name of library object from \`$libobj'"
2073266e564dSmrg      ;;
2074266e564dSmrg    esac
2075266e564dSmrg
2076266e564dSmrg    func_infer_tag $base_compile
2077266e564dSmrg
2078266e564dSmrg    for arg in $later; do
2079266e564dSmrg      case $arg in
2080698f425bSmrg      -shared)
2081698f425bSmrg	test "$build_libtool_libs" != yes && \
2082698f425bSmrg	  func_fatal_configuration "can not build a shared library"
2083698f425bSmrg	build_old_libs=no
2084698f425bSmrg	continue
2085698f425bSmrg	;;
2086698f425bSmrg
2087266e564dSmrg      -static)
2088698f425bSmrg	build_libtool_libs=no
2089266e564dSmrg	build_old_libs=yes
2090266e564dSmrg	continue
2091266e564dSmrg	;;
2092266e564dSmrg
2093266e564dSmrg      -prefer-pic)
2094266e564dSmrg	pic_mode=yes
2095266e564dSmrg	continue
2096266e564dSmrg	;;
2097266e564dSmrg
2098266e564dSmrg      -prefer-non-pic)
2099266e564dSmrg	pic_mode=no
2100266e564dSmrg	continue
2101266e564dSmrg	;;
2102266e564dSmrg      esac
2103266e564dSmrg    done
2104266e564dSmrg
2105698f425bSmrg    func_quote_for_eval "$libobj"
2106698f425bSmrg    test "X$libobj" != "X$func_quote_for_eval_result" \
2107698f425bSmrg      && $ECHO "X$libobj" | $GREP '[]~#^*{};<>?"'"'"'	 &()|`$[]' \
2108698f425bSmrg      && func_warning "libobj name \`$libobj' may not contain shell special characters."
2109698f425bSmrg    func_dirname_and_basename "$obj" "/" ""
2110698f425bSmrg    objname="$func_basename_result"
2111698f425bSmrg    xdir="$func_dirname_result"
2112266e564dSmrg    lobj=${xdir}$objdir/$objname
2113266e564dSmrg
2114698f425bSmrg    test -z "$base_compile" && \
2115698f425bSmrg      func_fatal_help "you must specify a compilation command"
2116266e564dSmrg
2117266e564dSmrg    # Delete any leftover library objects.
2118266e564dSmrg    if test "$build_old_libs" = yes; then
2119266e564dSmrg      removelist="$obj $lobj $libobj ${libobj}T"
2120266e564dSmrg    else
2121266e564dSmrg      removelist="$lobj $libobj ${libobj}T"
2122266e564dSmrg    fi
2123266e564dSmrg
2124266e564dSmrg    # On Cygwin there's no "real" PIC flag so we must build both object types
2125266e564dSmrg    case $host_os in
2126698f425bSmrg    cygwin* | mingw* | pw32* | os2* | cegcc*)
2127266e564dSmrg      pic_mode=default
2128266e564dSmrg      ;;
2129266e564dSmrg    esac
2130266e564dSmrg    if test "$pic_mode" = no && test "$deplibs_check_method" != pass_all; then
2131266e564dSmrg      # non-PIC code in shared libraries is not supported
2132266e564dSmrg      pic_mode=default
2133266e564dSmrg    fi
2134266e564dSmrg
2135266e564dSmrg    # Calculate the filename of the output object if compiler does
2136266e564dSmrg    # not support -o with -c
2137266e564dSmrg    if test "$compiler_c_o" = no; then
21389ef0b394Smrg      output_obj=`$ECHO "$srcfile" | $SED 's%^.*/%%; s%\.[^.]*$%%'`.${objext}
2139266e564dSmrg      lockfile="$output_obj.lock"
2140266e564dSmrg    else
2141266e564dSmrg      output_obj=
2142266e564dSmrg      need_locks=no
2143266e564dSmrg      lockfile=
2144266e564dSmrg    fi
2145266e564dSmrg
2146266e564dSmrg    # Lock this critical section if it is needed
2147266e564dSmrg    # We use this script file to make the link, it avoids creating a new file
2148266e564dSmrg    if test "$need_locks" = yes; then
2149698f425bSmrg      until $opt_dry_run || ln "$progpath" "$lockfile" 2>/dev/null; do
2150698f425bSmrg	func_echo "Waiting for $lockfile to be removed"
2151266e564dSmrg	sleep 2
2152266e564dSmrg      done
2153266e564dSmrg    elif test "$need_locks" = warn; then
2154266e564dSmrg      if test -f "$lockfile"; then
2155698f425bSmrg	$ECHO "\
2156266e564dSmrg*** ERROR, $lockfile exists and contains:
2157266e564dSmrg`cat $lockfile 2>/dev/null`
2158266e564dSmrg
2159266e564dSmrgThis indicates that another process is trying to use the same
2160266e564dSmrgtemporary object file, and libtool could not work around it because
2161266e564dSmrgyour compiler does not support \`-c' and \`-o' together.  If you
2162266e564dSmrgrepeat this compilation, it may succeed, by chance, but you had better
2163266e564dSmrgavoid parallel builds (make -j) in this platform, or get a better
2164266e564dSmrgcompiler."
2165266e564dSmrg
2166698f425bSmrg	$opt_dry_run || $RM $removelist
2167266e564dSmrg	exit $EXIT_FAILURE
2168266e564dSmrg      fi
21699ef0b394Smrg      func_append removelist " $output_obj"
2170698f425bSmrg      $ECHO "$srcfile" > "$lockfile"
2171266e564dSmrg    fi
2172266e564dSmrg
2173698f425bSmrg    $opt_dry_run || $RM $removelist
21749ef0b394Smrg    func_append removelist " $lockfile"
2175698f425bSmrg    trap '$opt_dry_run || $RM $removelist; exit $EXIT_FAILURE' 1 2 15
2176698f425bSmrg
21779ef0b394Smrg    func_to_tool_file "$srcfile" func_convert_file_msys_to_w32
21789ef0b394Smrg    srcfile=$func_to_tool_file_result
2179698f425bSmrg    func_quote_for_eval "$srcfile"
2180698f425bSmrg    qsrcfile=$func_quote_for_eval_result
2181266e564dSmrg
2182266e564dSmrg    # Only build a PIC object if we are building libtool libraries.
2183266e564dSmrg    if test "$build_libtool_libs" = yes; then
2184266e564dSmrg      # Without this assignment, base_compile gets emptied.
2185266e564dSmrg      fbsd_hideous_sh_bug=$base_compile
2186266e564dSmrg
2187266e564dSmrg      if test "$pic_mode" != no; then
2188266e564dSmrg	command="$base_compile $qsrcfile $pic_flag"
2189266e564dSmrg      else
2190266e564dSmrg	# Don't build PIC code
2191266e564dSmrg	command="$base_compile $qsrcfile"
2192266e564dSmrg      fi
2193266e564dSmrg
2194698f425bSmrg      func_mkdir_p "$xdir$objdir"
2195266e564dSmrg
2196266e564dSmrg      if test -z "$output_obj"; then
2197266e564dSmrg	# Place PIC objects in $objdir
21989ef0b394Smrg	func_append command " -o $lobj"
2199266e564dSmrg      fi
2200266e564dSmrg
2201698f425bSmrg      func_show_eval_locale "$command"	\
2202698f425bSmrg          'test -n "$output_obj" && $RM $removelist; exit $EXIT_FAILURE'
2203266e564dSmrg
2204266e564dSmrg      if test "$need_locks" = warn &&
2205266e564dSmrg	 test "X`cat $lockfile 2>/dev/null`" != "X$srcfile"; then
2206698f425bSmrg	$ECHO "\
2207266e564dSmrg*** ERROR, $lockfile contains:
2208266e564dSmrg`cat $lockfile 2>/dev/null`
2209266e564dSmrg
2210266e564dSmrgbut it should contain:
2211266e564dSmrg$srcfile
2212266e564dSmrg
2213266e564dSmrgThis indicates that another process is trying to use the same
2214266e564dSmrgtemporary object file, and libtool could not work around it because
2215266e564dSmrgyour compiler does not support \`-c' and \`-o' together.  If you
2216266e564dSmrgrepeat this compilation, it may succeed, by chance, but you had better
2217266e564dSmrgavoid parallel builds (make -j) in this platform, or get a better
2218266e564dSmrgcompiler."
2219266e564dSmrg
2220698f425bSmrg	$opt_dry_run || $RM $removelist
2221266e564dSmrg	exit $EXIT_FAILURE
2222266e564dSmrg      fi
2223266e564dSmrg
2224266e564dSmrg      # Just move the object if needed, then go on to compile the next one
2225266e564dSmrg      if test -n "$output_obj" && test "X$output_obj" != "X$lobj"; then
2226698f425bSmrg	func_show_eval '$MV "$output_obj" "$lobj"' \
2227698f425bSmrg	  'error=$?; $opt_dry_run || $RM $removelist; exit $error'
2228266e564dSmrg      fi
2229266e564dSmrg
2230266e564dSmrg      # Allow error messages only from the first compilation.
2231266e564dSmrg      if test "$suppress_opt" = yes; then
2232698f425bSmrg	suppress_output=' >/dev/null 2>&1'
2233266e564dSmrg      fi
2234266e564dSmrg    fi
2235266e564dSmrg
2236266e564dSmrg    # Only build a position-dependent object if we build old libraries.
2237266e564dSmrg    if test "$build_old_libs" = yes; then
2238266e564dSmrg      if test "$pic_mode" != yes; then
2239266e564dSmrg	# Don't build PIC code
2240698f425bSmrg	command="$base_compile $qsrcfile$pie_flag"
2241266e564dSmrg      else
2242266e564dSmrg	command="$base_compile $qsrcfile $pic_flag"
2243266e564dSmrg      fi
2244266e564dSmrg      if test "$compiler_c_o" = yes; then
22459ef0b394Smrg	func_append command " -o $obj"
2246266e564dSmrg      fi
2247266e564dSmrg
2248266e564dSmrg      # Suppress compiler output if we already did a PIC compilation.
22499ef0b394Smrg      func_append command "$suppress_output"
2250698f425bSmrg      func_show_eval_locale "$command" \
2251698f425bSmrg        '$opt_dry_run || $RM $removelist; exit $EXIT_FAILURE'
2252266e564dSmrg
2253266e564dSmrg      if test "$need_locks" = warn &&
2254266e564dSmrg	 test "X`cat $lockfile 2>/dev/null`" != "X$srcfile"; then
2255698f425bSmrg	$ECHO "\
2256266e564dSmrg*** ERROR, $lockfile contains:
2257266e564dSmrg`cat $lockfile 2>/dev/null`
2258266e564dSmrg
2259266e564dSmrgbut it should contain:
2260266e564dSmrg$srcfile
2261266e564dSmrg
2262266e564dSmrgThis indicates that another process is trying to use the same
2263266e564dSmrgtemporary object file, and libtool could not work around it because
2264266e564dSmrgyour compiler does not support \`-c' and \`-o' together.  If you
2265266e564dSmrgrepeat this compilation, it may succeed, by chance, but you had better
2266266e564dSmrgavoid parallel builds (make -j) in this platform, or get a better
2267266e564dSmrgcompiler."
2268266e564dSmrg
2269698f425bSmrg	$opt_dry_run || $RM $removelist
2270266e564dSmrg	exit $EXIT_FAILURE
2271266e564dSmrg      fi
2272266e564dSmrg
2273266e564dSmrg      # Just move the object if needed
2274266e564dSmrg      if test -n "$output_obj" && test "X$output_obj" != "X$obj"; then
2275698f425bSmrg	func_show_eval '$MV "$output_obj" "$obj"' \
2276698f425bSmrg	  'error=$?; $opt_dry_run || $RM $removelist; exit $error'
2277266e564dSmrg      fi
2278266e564dSmrg    fi
2279266e564dSmrg
2280698f425bSmrg    $opt_dry_run || {
2281698f425bSmrg      func_write_libtool_object "$libobj" "$objdir/$objname" "$objname"
2282266e564dSmrg
2283698f425bSmrg      # Unlock the critical section if it was locked
2284698f425bSmrg      if test "$need_locks" != no; then
2285698f425bSmrg	removelist=$lockfile
2286698f425bSmrg        $RM "$lockfile"
2287698f425bSmrg      fi
2288698f425bSmrg    }
2289266e564dSmrg
2290266e564dSmrg    exit $EXIT_SUCCESS
2291698f425bSmrg}
2292266e564dSmrg
2293698f425bSmrg$opt_help || {
22949ef0b394Smrg  test "$opt_mode" = compile && func_mode_compile ${1+"$@"}
2295698f425bSmrg}
2296266e564dSmrg
2297698f425bSmrgfunc_mode_help ()
2298698f425bSmrg{
2299698f425bSmrg    # We need to display help for each of the modes.
23009ef0b394Smrg    case $opt_mode in
2301698f425bSmrg      "")
2302698f425bSmrg        # Generic help is extracted from the usage comments
2303698f425bSmrg        # at the start of this file.
2304698f425bSmrg        func_help
2305698f425bSmrg        ;;
2306266e564dSmrg
2307698f425bSmrg      clean)
2308698f425bSmrg        $ECHO \
2309698f425bSmrg"Usage: $progname [OPTION]... --mode=clean RM [RM-OPTION]... FILE...
2310266e564dSmrg
2311698f425bSmrgRemove files from the build directory.
2312266e564dSmrg
2313698f425bSmrgRM is the name of the program to use to delete files associated with each FILE
2314698f425bSmrg(typically \`/bin/rm').  RM-OPTIONS are options (such as \`-f') to be passed
2315698f425bSmrgto RM.
2316266e564dSmrg
2317698f425bSmrgIf FILE is a libtool library, object or program, all the files associated
2318698f425bSmrgwith it are deleted. Otherwise, only FILE itself is deleted using RM."
2319698f425bSmrg        ;;
2320266e564dSmrg
2321698f425bSmrg      compile)
2322698f425bSmrg      $ECHO \
2323698f425bSmrg"Usage: $progname [OPTION]... --mode=compile COMPILE-COMMAND... SOURCEFILE
2324266e564dSmrg
2325698f425bSmrgCompile a source file into a libtool library object.
2326266e564dSmrg
2327698f425bSmrgThis mode accepts the following additional options:
2328266e564dSmrg
2329698f425bSmrg  -o OUTPUT-FILE    set the output file name to OUTPUT-FILE
2330698f425bSmrg  -no-suppress      do not suppress compiler output for multiple passes
23319ef0b394Smrg  -prefer-pic       try to build PIC objects only
23329ef0b394Smrg  -prefer-non-pic   try to build non-PIC objects only
2333698f425bSmrg  -shared           do not build a \`.o' file suitable for static linking
2334698f425bSmrg  -static           only build a \`.o' file suitable for static linking
23359ef0b394Smrg  -Wc,FLAG          pass FLAG directly to the compiler
2336266e564dSmrg
2337698f425bSmrgCOMPILE-COMMAND is a command to be used in creating a \`standard' object file
2338698f425bSmrgfrom the given SOURCEFILE.
2339266e564dSmrg
2340698f425bSmrgThe output file name is determined by removing the directory component from
2341698f425bSmrgSOURCEFILE, then substituting the C source code suffix \`.c' with the
2342698f425bSmrglibrary object suffix, \`.lo'."
2343698f425bSmrg        ;;
2344266e564dSmrg
2345698f425bSmrg      execute)
2346698f425bSmrg        $ECHO \
2347698f425bSmrg"Usage: $progname [OPTION]... --mode=execute COMMAND [ARGS]...
2348266e564dSmrg
2349698f425bSmrgAutomatically set library path, then run a program.
2350266e564dSmrg
2351698f425bSmrgThis mode accepts the following additional options:
2352266e564dSmrg
2353698f425bSmrg  -dlopen FILE      add the directory containing FILE to the library path
2354266e564dSmrg
2355698f425bSmrgThis mode sets the library path environment variable according to \`-dlopen'
2356698f425bSmrgflags.
2357266e564dSmrg
2358698f425bSmrgIf any of the ARGS are libtool executable wrappers, then they are translated
2359698f425bSmrginto their corresponding uninstalled binary, and any of their required library
2360698f425bSmrgdirectories are added to the library path.
2361266e564dSmrg
2362698f425bSmrgThen, COMMAND is executed, with ARGS as arguments."
2363698f425bSmrg        ;;
2364266e564dSmrg
2365698f425bSmrg      finish)
2366698f425bSmrg        $ECHO \
2367698f425bSmrg"Usage: $progname [OPTION]... --mode=finish [LIBDIR]...
2368266e564dSmrg
2369698f425bSmrgComplete the installation of libtool libraries.
2370266e564dSmrg
2371698f425bSmrgEach LIBDIR is a directory that contains libtool libraries.
2372266e564dSmrg
2373698f425bSmrgThe commands that this mode executes may require superuser privileges.  Use
2374698f425bSmrgthe \`--dry-run' option if you just want to see what would be executed."
2375698f425bSmrg        ;;
2376266e564dSmrg
2377698f425bSmrg      install)
2378698f425bSmrg        $ECHO \
2379698f425bSmrg"Usage: $progname [OPTION]... --mode=install INSTALL-COMMAND...
2380266e564dSmrg
2381698f425bSmrgInstall executables or libraries.
2382266e564dSmrg
2383698f425bSmrgINSTALL-COMMAND is the installation command.  The first component should be
2384698f425bSmrgeither the \`install' or \`cp' program.
2385266e564dSmrg
2386698f425bSmrgThe following components of INSTALL-COMMAND are treated specially:
2387266e564dSmrg
23889ef0b394Smrg  -inst-prefix-dir PREFIX-DIR  Use PREFIX-DIR as a staging area for installation
2389266e564dSmrg
2390698f425bSmrgThe rest of the components are interpreted as arguments to that command (only
2391698f425bSmrgBSD-compatible install options are recognized)."
2392698f425bSmrg        ;;
2393266e564dSmrg
2394698f425bSmrg      link)
2395698f425bSmrg        $ECHO \
2396698f425bSmrg"Usage: $progname [OPTION]... --mode=link LINK-COMMAND...
2397266e564dSmrg
2398698f425bSmrgLink object files or libraries together to form another library, or to
2399698f425bSmrgcreate an executable program.
2400266e564dSmrg
2401698f425bSmrgLINK-COMMAND is a command using the C compiler that you would use to create
2402698f425bSmrga program from several object files.
2403266e564dSmrg
2404698f425bSmrgThe following components of LINK-COMMAND are treated specially:
2405266e564dSmrg
2406698f425bSmrg  -all-static       do not do any dynamic linking at all
2407698f425bSmrg  -avoid-version    do not add a version suffix if possible
24089ef0b394Smrg  -bindir BINDIR    specify path to binaries directory (for systems where
24099ef0b394Smrg                    libraries must be found in the PATH setting at runtime)
2410698f425bSmrg  -dlopen FILE      \`-dlpreopen' FILE if it cannot be dlopened at runtime
2411698f425bSmrg  -dlpreopen FILE   link in FILE and add its symbols to lt_preloaded_symbols
2412698f425bSmrg  -export-dynamic   allow symbols from OUTPUT-FILE to be resolved with dlsym(3)
2413698f425bSmrg  -export-symbols SYMFILE
2414698f425bSmrg                    try to export only the symbols listed in SYMFILE
2415698f425bSmrg  -export-symbols-regex REGEX
2416698f425bSmrg                    try to export only the symbols matching REGEX
2417698f425bSmrg  -LLIBDIR          search LIBDIR for required installed libraries
2418698f425bSmrg  -lNAME            OUTPUT-FILE requires the installed library libNAME
2419698f425bSmrg  -module           build a library that can dlopened
2420698f425bSmrg  -no-fast-install  disable the fast-install mode
2421698f425bSmrg  -no-install       link a not-installable executable
2422698f425bSmrg  -no-undefined     declare that a library does not refer to external symbols
2423698f425bSmrg  -o OUTPUT-FILE    create OUTPUT-FILE from the specified objects
2424698f425bSmrg  -objectlist FILE  Use a list of object files found in FILE to specify objects
2425698f425bSmrg  -precious-files-regex REGEX
2426698f425bSmrg                    don't remove output files matching REGEX
2427698f425bSmrg  -release RELEASE  specify package release information
2428698f425bSmrg  -rpath LIBDIR     the created library will eventually be installed in LIBDIR
2429698f425bSmrg  -R[ ]LIBDIR       add LIBDIR to the runtime path of programs and libraries
2430698f425bSmrg  -shared           only do dynamic linking of libtool libraries
2431698f425bSmrg  -shrext SUFFIX    override the standard shared library file extension
2432698f425bSmrg  -static           do not do any dynamic linking of uninstalled libtool libraries
2433698f425bSmrg  -static-libtool-libs
2434698f425bSmrg                    do not do any dynamic linking of libtool libraries
2435698f425bSmrg  -version-info CURRENT[:REVISION[:AGE]]
2436698f425bSmrg                    specify library version info [each variable defaults to 0]
2437698f425bSmrg  -weak LIBNAME     declare that the target provides the LIBNAME interface
24389ef0b394Smrg  -Wc,FLAG
24399ef0b394Smrg  -Xcompiler FLAG   pass linker-specific FLAG directly to the compiler
24409ef0b394Smrg  -Wl,FLAG
24419ef0b394Smrg  -Xlinker FLAG     pass linker-specific FLAG directly to the linker
24429ef0b394Smrg  -XCClinker FLAG   pass link-specific FLAG to the compiler driver (CC)
2443266e564dSmrg
2444698f425bSmrgAll other options (arguments beginning with \`-') are ignored.
2445266e564dSmrg
2446698f425bSmrgEvery other argument is treated as a filename.  Files ending in \`.la' are
2447698f425bSmrgtreated as uninstalled libtool libraries, other files are standard or library
2448698f425bSmrgobject files.
2449c5629e66Smrg
2450698f425bSmrgIf the OUTPUT-FILE ends in \`.la', then a libtool library is created,
2451698f425bSmrgonly library objects (\`.lo' files) may be specified, and \`-rpath' is
2452698f425bSmrgrequired, except when creating a convenience library.
2453266e564dSmrg
2454698f425bSmrgIf OUTPUT-FILE ends in \`.a' or \`.lib', then a standard library is created
2455698f425bSmrgusing \`ar' and \`ranlib', or on Windows using \`lib'.
2456266e564dSmrg
2457698f425bSmrgIf OUTPUT-FILE ends in \`.lo' or \`.${objext}', then a reloadable object file
2458698f425bSmrgis created, otherwise an executable program is created."
2459266e564dSmrg        ;;
2460266e564dSmrg
2461698f425bSmrg      uninstall)
2462698f425bSmrg        $ECHO \
2463698f425bSmrg"Usage: $progname [OPTION]... --mode=uninstall RM [RM-OPTION]... FILE...
2464266e564dSmrg
2465698f425bSmrgRemove libraries from an installation directory.
2466266e564dSmrg
2467698f425bSmrgRM is the name of the program to use to delete files associated with each FILE
2468698f425bSmrg(typically \`/bin/rm').  RM-OPTIONS are options (such as \`-f') to be passed
2469698f425bSmrgto RM.
2470266e564dSmrg
2471698f425bSmrgIf FILE is a libtool library, all the files associated with it are deleted.
2472698f425bSmrgOtherwise, only FILE itself is deleted using RM."
2473698f425bSmrg        ;;
2474266e564dSmrg
2475698f425bSmrg      *)
24769ef0b394Smrg        func_fatal_help "invalid operation mode \`$opt_mode'"
2477698f425bSmrg        ;;
2478698f425bSmrg    esac
2479266e564dSmrg
24809ef0b394Smrg    echo
2481698f425bSmrg    $ECHO "Try \`$progname --help' for more information about other modes."
2482698f425bSmrg}
2483266e564dSmrg
24849ef0b394Smrg# Now that we've collected a possible --mode arg, show help if necessary
24859ef0b394Smrgif $opt_help; then
24869ef0b394Smrg  if test "$opt_help" = :; then
24879ef0b394Smrg    func_mode_help
24889ef0b394Smrg  else
24899ef0b394Smrg    {
24909ef0b394Smrg      func_help noexit
24919ef0b394Smrg      for opt_mode in compile link execute install finish uninstall clean; do
24929ef0b394Smrg	func_mode_help
24939ef0b394Smrg      done
24949ef0b394Smrg    } | sed -n '1p; 2,$s/^Usage:/  or: /p'
24959ef0b394Smrg    {
24969ef0b394Smrg      func_help noexit
24979ef0b394Smrg      for opt_mode in compile link execute install finish uninstall clean; do
24989ef0b394Smrg	echo
24999ef0b394Smrg	func_mode_help
25009ef0b394Smrg      done
25019ef0b394Smrg    } |
25029ef0b394Smrg    sed '1d
25039ef0b394Smrg      /^When reporting/,/^Report/{
25049ef0b394Smrg	H
25059ef0b394Smrg	d
25069ef0b394Smrg      }
25079ef0b394Smrg      $x
25089ef0b394Smrg      /information about other modes/d
25099ef0b394Smrg      /more detailed .*MODE/d
25109ef0b394Smrg      s/^Usage:.*--mode=\([^ ]*\) .*/Description of \1 mode:/'
25119ef0b394Smrg  fi
25129ef0b394Smrg  exit $?
25139ef0b394Smrgfi
2514266e564dSmrg
2515266e564dSmrg
2516698f425bSmrg# func_mode_execute arg...
2517698f425bSmrgfunc_mode_execute ()
2518698f425bSmrg{
2519698f425bSmrg    $opt_debug
2520698f425bSmrg    # The first argument is the command name.
2521698f425bSmrg    cmd="$nonopt"
2522698f425bSmrg    test -z "$cmd" && \
2523698f425bSmrg      func_fatal_help "you must specify a COMMAND"
2524266e564dSmrg
2525698f425bSmrg    # Handle -dlopen flags immediately.
25269ef0b394Smrg    for file in $opt_dlopen; do
2527698f425bSmrg      test -f "$file" \
2528698f425bSmrg	|| func_fatal_help "\`$file' is not a file"
2529266e564dSmrg
2530698f425bSmrg      dir=
2531698f425bSmrg      case $file in
2532698f425bSmrg      *.la)
25339ef0b394Smrg	func_resolve_sysroot "$file"
25349ef0b394Smrg	file=$func_resolve_sysroot_result
25359ef0b394Smrg
2536698f425bSmrg	# Check to see that this really is a libtool archive.
2537698f425bSmrg	func_lalib_unsafe_p "$file" \
2538698f425bSmrg	  || func_fatal_help "\`$lib' is not a valid libtool archive"
2539266e564dSmrg
2540698f425bSmrg	# Read the libtool library.
2541698f425bSmrg	dlname=
2542698f425bSmrg	library_names=
2543698f425bSmrg	func_source "$file"
2544266e564dSmrg
2545698f425bSmrg	# Skip this library if it cannot be dlopened.
2546698f425bSmrg	if test -z "$dlname"; then
2547698f425bSmrg	  # Warn if it was a shared library.
2548698f425bSmrg	  test -n "$library_names" && \
2549698f425bSmrg	    func_warning "\`$file' was not linked with \`-export-dynamic'"
2550698f425bSmrg	  continue
2551698f425bSmrg	fi
2552266e564dSmrg
2553698f425bSmrg	func_dirname "$file" "" "."
2554698f425bSmrg	dir="$func_dirname_result"
2555266e564dSmrg
2556698f425bSmrg	if test -f "$dir/$objdir/$dlname"; then
25579ef0b394Smrg	  func_append dir "/$objdir"
2558698f425bSmrg	else
2559698f425bSmrg	  if test ! -f "$dir/$dlname"; then
2560698f425bSmrg	    func_fatal_error "cannot find \`$dlname' in \`$dir' or \`$dir/$objdir'"
2561698f425bSmrg	  fi
2562698f425bSmrg	fi
2563266e564dSmrg	;;
2564266e564dSmrg
2565698f425bSmrg      *.lo)
2566698f425bSmrg	# Just add the directory containing the .lo file.
2567698f425bSmrg	func_dirname "$file" "" "."
2568698f425bSmrg	dir="$func_dirname_result"
2569266e564dSmrg	;;
2570266e564dSmrg
2571698f425bSmrg      *)
2572698f425bSmrg	func_warning "\`-dlopen' is ignored for non-libtool libraries and objects"
2573266e564dSmrg	continue
2574266e564dSmrg	;;
2575698f425bSmrg      esac
2576266e564dSmrg
2577698f425bSmrg      # Get the absolute pathname.
2578698f425bSmrg      absdir=`cd "$dir" && pwd`
2579698f425bSmrg      test -n "$absdir" && dir="$absdir"
2580266e564dSmrg
2581698f425bSmrg      # Now add the directory to shlibpath_var.
2582698f425bSmrg      if eval "test -z \"\$$shlibpath_var\""; then
2583698f425bSmrg	eval "$shlibpath_var=\"\$dir\""
2584698f425bSmrg      else
2585698f425bSmrg	eval "$shlibpath_var=\"\$dir:\$$shlibpath_var\""
2586698f425bSmrg      fi
2587698f425bSmrg    done
2588266e564dSmrg
2589698f425bSmrg    # This variable tells wrapper scripts just to set shlibpath_var
2590698f425bSmrg    # rather than running their programs.
2591698f425bSmrg    libtool_execute_magic="$magic"
2592266e564dSmrg
2593698f425bSmrg    # Check if any of the arguments is a wrapper script.
2594698f425bSmrg    args=
2595698f425bSmrg    for file
2596698f425bSmrg    do
2597698f425bSmrg      case $file in
25989ef0b394Smrg      -* | *.la | *.lo ) ;;
2599698f425bSmrg      *)
2600698f425bSmrg	# Do a test to see if this is really a libtool program.
2601698f425bSmrg	if func_ltwrapper_script_p "$file"; then
2602698f425bSmrg	  func_source "$file"
2603698f425bSmrg	  # Transform arg to wrapped name.
2604698f425bSmrg	  file="$progdir/$program"
2605698f425bSmrg	elif func_ltwrapper_executable_p "$file"; then
2606698f425bSmrg	  func_ltwrapper_scriptname "$file"
2607698f425bSmrg	  func_source "$func_ltwrapper_scriptname_result"
2608698f425bSmrg	  # Transform arg to wrapped name.
2609698f425bSmrg	  file="$progdir/$program"
2610698f425bSmrg	fi
2611698f425bSmrg	;;
2612698f425bSmrg      esac
2613698f425bSmrg      # Quote arguments (to preserve shell metacharacters).
26149ef0b394Smrg      func_append_quoted args "$file"
2615698f425bSmrg    done
2616266e564dSmrg
2617698f425bSmrg    if test "X$opt_dry_run" = Xfalse; then
2618698f425bSmrg      if test -n "$shlibpath_var"; then
2619698f425bSmrg	# Export the shlibpath_var.
2620698f425bSmrg	eval "export $shlibpath_var"
2621698f425bSmrg      fi
2622266e564dSmrg
2623698f425bSmrg      # Restore saved environment variables
2624698f425bSmrg      for lt_var in LANG LANGUAGE LC_ALL LC_CTYPE LC_COLLATE LC_MESSAGES
2625698f425bSmrg      do
2626698f425bSmrg	eval "if test \"\${save_$lt_var+set}\" = set; then
2627698f425bSmrg                $lt_var=\$save_$lt_var; export $lt_var
2628266e564dSmrg	      else
2629698f425bSmrg		$lt_unset $lt_var
2630698f425bSmrg	      fi"
2631698f425bSmrg      done
2632266e564dSmrg
2633698f425bSmrg      # Now prepare to actually exec the command.
2634698f425bSmrg      exec_cmd="\$cmd$args"
2635698f425bSmrg    else
2636698f425bSmrg      # Display what would be done.
2637698f425bSmrg      if test -n "$shlibpath_var"; then
2638698f425bSmrg	eval "\$ECHO \"\$shlibpath_var=\$$shlibpath_var\""
26399ef0b394Smrg	echo "export $shlibpath_var"
2640698f425bSmrg      fi
2641698f425bSmrg      $ECHO "$cmd$args"
2642698f425bSmrg      exit $EXIT_SUCCESS
2643698f425bSmrg    fi
2644698f425bSmrg}
2645266e564dSmrg
26469ef0b394Smrgtest "$opt_mode" = execute && func_mode_execute ${1+"$@"}
26479ef0b394Smrg
26489ef0b394Smrg
26499ef0b394Smrg# func_mode_finish arg...
26509ef0b394Smrgfunc_mode_finish ()
26519ef0b394Smrg{
26529ef0b394Smrg    $opt_debug
26539ef0b394Smrg    libs=
26549ef0b394Smrg    libdirs=
26559ef0b394Smrg    admincmds=
26569ef0b394Smrg
26579ef0b394Smrg    for opt in "$nonopt" ${1+"$@"}
26589ef0b394Smrg    do
26599ef0b394Smrg      if test -d "$opt"; then
26609ef0b394Smrg	func_append libdirs " $opt"
26619ef0b394Smrg
26629ef0b394Smrg      elif test -f "$opt"; then
26639ef0b394Smrg	if func_lalib_unsafe_p "$opt"; then
26649ef0b394Smrg	  func_append libs " $opt"
26659ef0b394Smrg	else
26669ef0b394Smrg	  func_warning "\`$opt' is not a valid libtool archive"
26679ef0b394Smrg	fi
26689ef0b394Smrg
26699ef0b394Smrg      else
26709ef0b394Smrg	func_fatal_error "invalid argument \`$opt'"
26719ef0b394Smrg      fi
26729ef0b394Smrg    done
2673266e564dSmrg
26749ef0b394Smrg    if test -n "$libs"; then
26759ef0b394Smrg      if test -n "$lt_sysroot"; then
26769ef0b394Smrg        sysroot_regex=`$ECHO "$lt_sysroot" | $SED "$sed_make_literal_regex"`
26779ef0b394Smrg        sysroot_cmd="s/\([ ']\)$sysroot_regex/\1/g;"
26789ef0b394Smrg      else
26799ef0b394Smrg        sysroot_cmd=
26809ef0b394Smrg      fi
2681266e564dSmrg
26829ef0b394Smrg      # Remove sysroot references
26839ef0b394Smrg      if $opt_dry_run; then
26849ef0b394Smrg        for lib in $libs; do
26859ef0b394Smrg          echo "removing references to $lt_sysroot and \`=' prefixes from $lib"
26869ef0b394Smrg        done
26879ef0b394Smrg      else
26889ef0b394Smrg        tmpdir=`func_mktempdir`
26899ef0b394Smrg        for lib in $libs; do
26909ef0b394Smrg	  sed -e "${sysroot_cmd} s/\([ ']-[LR]\)=/\1/g; s/\([ ']\)=/\1/g" $lib \
26919ef0b394Smrg	    > $tmpdir/tmp-la
26929ef0b394Smrg	  mv -f $tmpdir/tmp-la $lib
26939ef0b394Smrg	done
26949ef0b394Smrg        ${RM}r "$tmpdir"
26959ef0b394Smrg      fi
26969ef0b394Smrg    fi
2697266e564dSmrg
2698698f425bSmrg    if test -n "$finish_cmds$finish_eval" && test -n "$libdirs"; then
2699698f425bSmrg      for libdir in $libdirs; do
2700698f425bSmrg	if test -n "$finish_cmds"; then
2701698f425bSmrg	  # Do each command in the finish commands.
2702698f425bSmrg	  func_execute_cmds "$finish_cmds" 'admincmds="$admincmds
2703698f425bSmrg'"$cmd"'"'
2704266e564dSmrg	fi
2705698f425bSmrg	if test -n "$finish_eval"; then
2706698f425bSmrg	  # Do the single finish_eval.
2707698f425bSmrg	  eval cmds=\"$finish_eval\"
27089ef0b394Smrg	  $opt_dry_run || eval "$cmds" || func_append admincmds "
2709698f425bSmrg       $cmds"
2710698f425bSmrg	fi
2711698f425bSmrg      done
2712698f425bSmrg    fi
2713266e564dSmrg
2714698f425bSmrg    # Exit here if they wanted silent mode.
2715698f425bSmrg    $opt_silent && exit $EXIT_SUCCESS
2716266e564dSmrg
27179ef0b394Smrg    if test -n "$finish_cmds$finish_eval" && test -n "$libdirs"; then
27189ef0b394Smrg      echo "----------------------------------------------------------------------"
27199ef0b394Smrg      echo "Libraries have been installed in:"
27209ef0b394Smrg      for libdir in $libdirs; do
27219ef0b394Smrg	$ECHO "   $libdir"
27229ef0b394Smrg      done
27239ef0b394Smrg      echo
27249ef0b394Smrg      echo "If you ever happen to want to link against installed libraries"
27259ef0b394Smrg      echo "in a given directory, LIBDIR, you must either use libtool, and"
27269ef0b394Smrg      echo "specify the full pathname of the library, or use the \`-LLIBDIR'"
27279ef0b394Smrg      echo "flag during linking and do at least one of the following:"
27289ef0b394Smrg      if test -n "$shlibpath_var"; then
27299ef0b394Smrg	echo "   - add LIBDIR to the \`$shlibpath_var' environment variable"
27309ef0b394Smrg	echo "     during execution"
27319ef0b394Smrg      fi
27329ef0b394Smrg      if test -n "$runpath_var"; then
27339ef0b394Smrg	echo "   - add LIBDIR to the \`$runpath_var' environment variable"
27349ef0b394Smrg	echo "     during linking"
27359ef0b394Smrg      fi
27369ef0b394Smrg      if test -n "$hardcode_libdir_flag_spec"; then
27379ef0b394Smrg	libdir=LIBDIR
27389ef0b394Smrg	eval flag=\"$hardcode_libdir_flag_spec\"
2739266e564dSmrg
27409ef0b394Smrg	$ECHO "   - use the \`$flag' linker flag"
27419ef0b394Smrg      fi
27429ef0b394Smrg      if test -n "$admincmds"; then
27439ef0b394Smrg	$ECHO "   - have your system administrator run these commands:$admincmds"
27449ef0b394Smrg      fi
27459ef0b394Smrg      if test -f /etc/ld.so.conf; then
27469ef0b394Smrg	echo "   - have your system administrator add LIBDIR to \`/etc/ld.so.conf'"
27479ef0b394Smrg      fi
27489ef0b394Smrg      echo
2749698f425bSmrg
27509ef0b394Smrg      echo "See any operating system documentation about shared libraries for"
27519ef0b394Smrg      case $host in
27529ef0b394Smrg	solaris2.[6789]|solaris2.1[0-9])
27539ef0b394Smrg	  echo "more information, such as the ld(1), crle(1) and ld.so(8) manual"
27549ef0b394Smrg	  echo "pages."
27559ef0b394Smrg	  ;;
27569ef0b394Smrg	*)
27579ef0b394Smrg	  echo "more information, such as the ld(1) and ld.so(8) manual pages."
27589ef0b394Smrg	  ;;
27599ef0b394Smrg      esac
27609ef0b394Smrg      echo "----------------------------------------------------------------------"
27619ef0b394Smrg    fi
2762698f425bSmrg    exit $EXIT_SUCCESS
2763698f425bSmrg}
2764266e564dSmrg
27659ef0b394Smrgtest "$opt_mode" = finish && func_mode_finish ${1+"$@"}
2766266e564dSmrg
2767c5629e66Smrg
2768698f425bSmrg# func_mode_install arg...
2769698f425bSmrgfunc_mode_install ()
2770698f425bSmrg{
2771698f425bSmrg    $opt_debug
2772698f425bSmrg    # There may be an optional sh(1) argument at the beginning of
2773698f425bSmrg    # install_prog (especially on Windows NT).
2774698f425bSmrg    if test "$nonopt" = "$SHELL" || test "$nonopt" = /bin/sh ||
2775698f425bSmrg       # Allow the use of GNU shtool's install command.
27769ef0b394Smrg       case $nonopt in *shtool*) :;; *) false;; esac; then
2777698f425bSmrg      # Aesthetically quote it.
2778698f425bSmrg      func_quote_for_eval "$nonopt"
2779698f425bSmrg      install_prog="$func_quote_for_eval_result "
2780698f425bSmrg      arg=$1
2781698f425bSmrg      shift
2782698f425bSmrg    else
2783698f425bSmrg      install_prog=
2784698f425bSmrg      arg=$nonopt
2785266e564dSmrg    fi
2786266e564dSmrg
2787698f425bSmrg    # The real first argument should be the name of the installation program.
2788698f425bSmrg    # Aesthetically quote it.
2789698f425bSmrg    func_quote_for_eval "$arg"
27909ef0b394Smrg    func_append install_prog "$func_quote_for_eval_result"
27919ef0b394Smrg    install_shared_prog=$install_prog
27929ef0b394Smrg    case " $install_prog " in
27939ef0b394Smrg      *[\\\ /]cp\ *) install_cp=: ;;
27949ef0b394Smrg      *) install_cp=false ;;
27959ef0b394Smrg    esac
2796266e564dSmrg
2797698f425bSmrg    # We need to accept at least all the BSD install flags.
2798698f425bSmrg    dest=
2799698f425bSmrg    files=
2800698f425bSmrg    opts=
2801698f425bSmrg    prev=
2802698f425bSmrg    install_type=
2803698f425bSmrg    isdir=no
2804698f425bSmrg    stripme=
28059ef0b394Smrg    no_mode=:
2806698f425bSmrg    for arg
2807698f425bSmrg    do
28089ef0b394Smrg      arg2=
2809698f425bSmrg      if test -n "$dest"; then
28109ef0b394Smrg	func_append files " $dest"
2811698f425bSmrg	dest=$arg
2812698f425bSmrg	continue
2813698f425bSmrg      fi
2814266e564dSmrg
2815698f425bSmrg      case $arg in
2816698f425bSmrg      -d) isdir=yes ;;
2817698f425bSmrg      -f)
28189ef0b394Smrg	if $install_cp; then :; else
28199ef0b394Smrg	  prev=$arg
28209ef0b394Smrg	fi
2821698f425bSmrg	;;
2822698f425bSmrg      -g | -m | -o)
2823698f425bSmrg	prev=$arg
2824698f425bSmrg	;;
2825698f425bSmrg      -s)
2826698f425bSmrg	stripme=" -s"
2827698f425bSmrg	continue
2828698f425bSmrg	;;
2829698f425bSmrg      -*)
2830698f425bSmrg	;;
2831698f425bSmrg      *)
2832698f425bSmrg	# If the previous option needed an argument, then skip it.
2833698f425bSmrg	if test -n "$prev"; then
28349ef0b394Smrg	  if test "x$prev" = x-m && test -n "$install_override_mode"; then
28359ef0b394Smrg	    arg2=$install_override_mode
28369ef0b394Smrg	    no_mode=false
28379ef0b394Smrg	  fi
2838698f425bSmrg	  prev=
2839698f425bSmrg	else
2840698f425bSmrg	  dest=$arg
2841698f425bSmrg	  continue
2842698f425bSmrg	fi
2843698f425bSmrg	;;
2844698f425bSmrg      esac
2845266e564dSmrg
2846698f425bSmrg      # Aesthetically quote the argument.
2847698f425bSmrg      func_quote_for_eval "$arg"
28489ef0b394Smrg      func_append install_prog " $func_quote_for_eval_result"
28499ef0b394Smrg      if test -n "$arg2"; then
28509ef0b394Smrg	func_quote_for_eval "$arg2"
28519ef0b394Smrg      fi
28529ef0b394Smrg      func_append install_shared_prog " $func_quote_for_eval_result"
2853698f425bSmrg    done
2854698f425bSmrg
2855698f425bSmrg    test -z "$install_prog" && \
2856698f425bSmrg      func_fatal_help "you must specify an install program"
2857698f425bSmrg
2858698f425bSmrg    test -n "$prev" && \
2859698f425bSmrg      func_fatal_help "the \`$prev' option requires an argument"
2860698f425bSmrg
28619ef0b394Smrg    if test -n "$install_override_mode" && $no_mode; then
28629ef0b394Smrg      if $install_cp; then :; else
28639ef0b394Smrg	func_quote_for_eval "$install_override_mode"
28649ef0b394Smrg	func_append install_shared_prog " -m $func_quote_for_eval_result"
28659ef0b394Smrg      fi
28669ef0b394Smrg    fi
28679ef0b394Smrg
2868698f425bSmrg    if test -z "$files"; then
2869698f425bSmrg      if test -z "$dest"; then
2870698f425bSmrg	func_fatal_help "no file or destination specified"
2871698f425bSmrg      else
2872698f425bSmrg	func_fatal_help "you must specify a destination"
2873266e564dSmrg      fi
2874266e564dSmrg    fi
2875266e564dSmrg
2876698f425bSmrg    # Strip any trailing slash from the destination.
2877698f425bSmrg    func_stripname '' '/' "$dest"
2878698f425bSmrg    dest=$func_stripname_result
2879266e564dSmrg
2880698f425bSmrg    # Check to see that the destination is a directory.
2881698f425bSmrg    test -d "$dest" && isdir=yes
2882698f425bSmrg    if test "$isdir" = yes; then
2883698f425bSmrg      destdir="$dest"
2884698f425bSmrg      destname=
2885698f425bSmrg    else
2886698f425bSmrg      func_dirname_and_basename "$dest" "" "."
2887698f425bSmrg      destdir="$func_dirname_result"
2888698f425bSmrg      destname="$func_basename_result"
2889698f425bSmrg
2890698f425bSmrg      # Not a directory, so check to see that there is only one file specified.
2891698f425bSmrg      set dummy $files; shift
2892698f425bSmrg      test "$#" -gt 1 && \
2893698f425bSmrg	func_fatal_help "\`$dest' is not a directory"
2894698f425bSmrg    fi
2895698f425bSmrg    case $destdir in
2896698f425bSmrg    [\\/]* | [A-Za-z]:[\\/]*) ;;
2897266e564dSmrg    *)
2898698f425bSmrg      for file in $files; do
2899698f425bSmrg	case $file in
2900698f425bSmrg	*.lo) ;;
2901698f425bSmrg	*)
2902698f425bSmrg	  func_fatal_help "\`$destdir' must be an absolute directory name"
2903698f425bSmrg	  ;;
2904698f425bSmrg	esac
2905698f425bSmrg      done
2906266e564dSmrg      ;;
2907266e564dSmrg    esac
2908266e564dSmrg
2909698f425bSmrg    # This variable tells wrapper scripts just to set variables rather
2910698f425bSmrg    # than running their programs.
2911698f425bSmrg    libtool_install_magic="$magic"
2912266e564dSmrg
2913698f425bSmrg    staticlibs=
2914698f425bSmrg    future_libdirs=
2915698f425bSmrg    current_libdirs=
2916698f425bSmrg    for file in $files; do
2917266e564dSmrg
2918698f425bSmrg      # Do each installation.
2919698f425bSmrg      case $file in
2920698f425bSmrg      *.$libext)
2921698f425bSmrg	# Do the static libraries later.
29229ef0b394Smrg	func_append staticlibs " $file"
2923698f425bSmrg	;;
2924698f425bSmrg
2925698f425bSmrg      *.la)
29269ef0b394Smrg	func_resolve_sysroot "$file"
29279ef0b394Smrg	file=$func_resolve_sysroot_result
29289ef0b394Smrg
2929698f425bSmrg	# Check to see that this really is a libtool archive.
2930698f425bSmrg	func_lalib_unsafe_p "$file" \
2931698f425bSmrg	  || func_fatal_help "\`$file' is not a valid libtool archive"
2932698f425bSmrg
2933698f425bSmrg	library_names=
2934698f425bSmrg	old_library=
2935698f425bSmrg	relink_command=
2936698f425bSmrg	func_source "$file"
2937698f425bSmrg
2938698f425bSmrg	# Add the libdir to current_libdirs if it is the destination.
2939698f425bSmrg	if test "X$destdir" = "X$libdir"; then
2940698f425bSmrg	  case "$current_libdirs " in
2941698f425bSmrg	  *" $libdir "*) ;;
29429ef0b394Smrg	  *) func_append current_libdirs " $libdir" ;;
2943266e564dSmrg	  esac
2944698f425bSmrg	else
2945698f425bSmrg	  # Note the libdir as a future libdir.
2946698f425bSmrg	  case "$future_libdirs " in
2947698f425bSmrg	  *" $libdir "*) ;;
29489ef0b394Smrg	  *) func_append future_libdirs " $libdir" ;;
2949698f425bSmrg	  esac
2950698f425bSmrg	fi
2951266e564dSmrg
2952698f425bSmrg	func_dirname "$file" "/" ""
2953698f425bSmrg	dir="$func_dirname_result"
29549ef0b394Smrg	func_append dir "$objdir"
2955698f425bSmrg
2956698f425bSmrg	if test -n "$relink_command"; then
2957698f425bSmrg	  # Determine the prefix the user has applied to our future dir.
29589ef0b394Smrg	  inst_prefix_dir=`$ECHO "$destdir" | $SED -e "s%$libdir\$%%"`
2959698f425bSmrg
2960698f425bSmrg	  # Don't allow the user to place us outside of our expected
2961698f425bSmrg	  # location b/c this prevents finding dependent libraries that
2962698f425bSmrg	  # are installed to the same prefix.
2963698f425bSmrg	  # At present, this check doesn't affect windows .dll's that
2964698f425bSmrg	  # are installed into $libdir/../bin (currently, that works fine)
2965698f425bSmrg	  # but it's something to keep an eye on.
2966698f425bSmrg	  test "$inst_prefix_dir" = "$destdir" && \
2967698f425bSmrg	    func_fatal_error "error: cannot install \`$file' to a directory not ending in $libdir"
2968698f425bSmrg
2969698f425bSmrg	  if test -n "$inst_prefix_dir"; then
2970698f425bSmrg	    # Stick the inst_prefix_dir data into the link command.
29719ef0b394Smrg	    relink_command=`$ECHO "$relink_command" | $SED "s%@inst_prefix_dir@%-inst-prefix-dir $inst_prefix_dir%"`
2972698f425bSmrg	  else
29739ef0b394Smrg	    relink_command=`$ECHO "$relink_command" | $SED "s%@inst_prefix_dir@%%"`
2974698f425bSmrg	  fi
2975698f425bSmrg
2976698f425bSmrg	  func_warning "relinking \`$file'"
2977698f425bSmrg	  func_show_eval "$relink_command" \
2978698f425bSmrg	    'func_fatal_error "error: relink \`$file'\'' with the above command before installing it"'
2979698f425bSmrg	fi
2980698f425bSmrg
2981698f425bSmrg	# See the names of the shared library.
2982698f425bSmrg	set dummy $library_names; shift
2983698f425bSmrg	if test -n "$1"; then
2984698f425bSmrg	  realname="$1"
2985698f425bSmrg	  shift
2986698f425bSmrg
2987698f425bSmrg	  srcname="$realname"
2988698f425bSmrg	  test -n "$relink_command" && srcname="$realname"T
2989698f425bSmrg
2990698f425bSmrg	  # Install the shared library and build the symlinks.
29919ef0b394Smrg	  func_show_eval "$install_shared_prog $dir/$srcname $destdir/$realname" \
2992698f425bSmrg	      'exit $?'
2993698f425bSmrg	  tstripme="$stripme"
2994698f425bSmrg	  case $host_os in
2995698f425bSmrg	  cygwin* | mingw* | pw32* | cegcc*)
2996698f425bSmrg	    case $realname in
2997698f425bSmrg	    *.dll.a)
2998698f425bSmrg	      tstripme=""
2999698f425bSmrg	      ;;
3000698f425bSmrg	    esac
3001266e564dSmrg	    ;;
3002266e564dSmrg	  esac
3003698f425bSmrg	  if test -n "$tstripme" && test -n "$striplib"; then
3004698f425bSmrg	    func_show_eval "$striplib $destdir/$realname" 'exit $?'
3005c5629e66Smrg	  fi
3006698f425bSmrg
3007698f425bSmrg	  if test "$#" -gt 0; then
3008698f425bSmrg	    # Delete the old symlinks, and create new ones.
3009698f425bSmrg	    # Try `ln -sf' first, because the `ln' binary might depend on
3010698f425bSmrg	    # the symlink we replace!  Solaris /bin/ln does not understand -f,
3011698f425bSmrg	    # so we also need to try rm && ln -s.
3012698f425bSmrg	    for linkname
3013698f425bSmrg	    do
3014698f425bSmrg	      test "$linkname" != "$realname" \
3015698f425bSmrg		&& func_show_eval "(cd $destdir && { $LN_S -f $realname $linkname || { $RM $linkname && $LN_S $realname $linkname; }; })"
3016266e564dSmrg	    done
3017266e564dSmrg	  fi
3018266e564dSmrg
3019698f425bSmrg	  # Do each command in the postinstall commands.
3020698f425bSmrg	  lib="$destdir/$realname"
3021698f425bSmrg	  func_execute_cmds "$postinstall_cmds" 'exit $?'
3022266e564dSmrg	fi
3023266e564dSmrg
3024698f425bSmrg	# Install the pseudo-library for information purposes.
3025698f425bSmrg	func_basename "$file"
3026698f425bSmrg	name="$func_basename_result"
3027698f425bSmrg	instname="$dir/$name"i
3028698f425bSmrg	func_show_eval "$install_prog $instname $destdir/$name" 'exit $?'
3029266e564dSmrg
3030698f425bSmrg	# Maybe install the static library, too.
30319ef0b394Smrg	test -n "$old_library" && func_append staticlibs " $dir/$old_library"
3032698f425bSmrg	;;
3033266e564dSmrg
3034698f425bSmrg      *.lo)
3035698f425bSmrg	# Install (i.e. copy) a libtool object.
3036266e564dSmrg
3037698f425bSmrg	# Figure out destination file name, if it wasn't already specified.
3038698f425bSmrg	if test -n "$destname"; then
3039698f425bSmrg	  destfile="$destdir/$destname"
3040698f425bSmrg	else
3041698f425bSmrg	  func_basename "$file"
3042698f425bSmrg	  destfile="$func_basename_result"
3043698f425bSmrg	  destfile="$destdir/$destfile"
3044698f425bSmrg	fi
3045698f425bSmrg
3046698f425bSmrg	# Deduce the name of the destination old-style object file.
3047698f425bSmrg	case $destfile in
3048698f425bSmrg	*.lo)
3049698f425bSmrg	  func_lo2o "$destfile"
3050698f425bSmrg	  staticdest=$func_lo2o_result
3051698f425bSmrg	  ;;
3052698f425bSmrg	*.$objext)
3053698f425bSmrg	  staticdest="$destfile"
3054698f425bSmrg	  destfile=
3055698f425bSmrg	  ;;
3056698f425bSmrg	*)
3057698f425bSmrg	  func_fatal_help "cannot copy a libtool object to \`$destfile'"
3058698f425bSmrg	  ;;
3059266e564dSmrg	esac
3060266e564dSmrg
3061698f425bSmrg	# Install the libtool object if requested.
3062698f425bSmrg	test -n "$destfile" && \
3063698f425bSmrg	  func_show_eval "$install_prog $file $destfile" 'exit $?'
3064698f425bSmrg
3065698f425bSmrg	# Install the old object if enabled.
3066698f425bSmrg	if test "$build_old_libs" = yes; then
3067698f425bSmrg	  # Deduce the name of the old-style object file.
3068698f425bSmrg	  func_lo2o "$file"
3069698f425bSmrg	  staticobj=$func_lo2o_result
3070698f425bSmrg	  func_show_eval "$install_prog \$staticobj \$staticdest" 'exit $?'
3071266e564dSmrg	fi
3072698f425bSmrg	exit $EXIT_SUCCESS
3073698f425bSmrg	;;
3074266e564dSmrg
3075698f425bSmrg      *)
3076698f425bSmrg	# Figure out destination file name, if it wasn't already specified.
3077698f425bSmrg	if test -n "$destname"; then
3078698f425bSmrg	  destfile="$destdir/$destname"
3079698f425bSmrg	else
3080698f425bSmrg	  func_basename "$file"
3081698f425bSmrg	  destfile="$func_basename_result"
3082698f425bSmrg	  destfile="$destdir/$destfile"
3083698f425bSmrg	fi
3084266e564dSmrg
3085698f425bSmrg	# If the file is missing, and there is a .exe on the end, strip it
3086698f425bSmrg	# because it is most likely a libtool script we actually want to
3087698f425bSmrg	# install
3088698f425bSmrg	stripped_ext=""
3089698f425bSmrg	case $file in
3090698f425bSmrg	  *.exe)
3091698f425bSmrg	    if test ! -f "$file"; then
3092698f425bSmrg	      func_stripname '' '.exe' "$file"
3093698f425bSmrg	      file=$func_stripname_result
3094698f425bSmrg	      stripped_ext=".exe"
3095698f425bSmrg	    fi
3096698f425bSmrg	    ;;
3097698f425bSmrg	esac
3098266e564dSmrg
3099698f425bSmrg	# Do a test to see if this is really a libtool program.
3100698f425bSmrg	case $host in
3101698f425bSmrg	*cygwin* | *mingw*)
3102698f425bSmrg	    if func_ltwrapper_executable_p "$file"; then
3103698f425bSmrg	      func_ltwrapper_scriptname "$file"
3104698f425bSmrg	      wrapper=$func_ltwrapper_scriptname_result
3105698f425bSmrg	    else
3106698f425bSmrg	      func_stripname '' '.exe' "$file"
3107698f425bSmrg	      wrapper=$func_stripname_result
3108698f425bSmrg	    fi
3109698f425bSmrg	    ;;
3110698f425bSmrg	*)
3111698f425bSmrg	    wrapper=$file
3112698f425bSmrg	    ;;
3113698f425bSmrg	esac
3114698f425bSmrg	if func_ltwrapper_script_p "$wrapper"; then
3115698f425bSmrg	  notinst_deplibs=
3116698f425bSmrg	  relink_command=
3117266e564dSmrg
3118698f425bSmrg	  func_source "$wrapper"
3119698f425bSmrg
3120698f425bSmrg	  # Check the variables that should have been set.
3121698f425bSmrg	  test -z "$generated_by_libtool_version" && \
3122698f425bSmrg	    func_fatal_error "invalid libtool wrapper script \`$wrapper'"
3123698f425bSmrg
3124698f425bSmrg	  finalize=yes
3125698f425bSmrg	  for lib in $notinst_deplibs; do
3126698f425bSmrg	    # Check to see that each library is installed.
3127698f425bSmrg	    libdir=
3128698f425bSmrg	    if test -f "$lib"; then
3129698f425bSmrg	      func_source "$lib"
3130698f425bSmrg	    fi
31319ef0b394Smrg	    libfile="$libdir/"`$ECHO "$lib" | $SED 's%^.*/%%g'` ### testsuite: skip nested quoting test
3132698f425bSmrg	    if test -n "$libdir" && test ! -f "$libfile"; then
3133698f425bSmrg	      func_warning "\`$lib' has not been installed in \`$libdir'"
3134698f425bSmrg	      finalize=no
3135698f425bSmrg	    fi
3136698f425bSmrg	  done
3137698f425bSmrg
3138698f425bSmrg	  relink_command=
3139698f425bSmrg	  func_source "$wrapper"
3140698f425bSmrg
3141698f425bSmrg	  outputname=
3142698f425bSmrg	  if test "$fast_install" = no && test -n "$relink_command"; then
3143698f425bSmrg	    $opt_dry_run || {
3144698f425bSmrg	      if test "$finalize" = yes; then
3145698f425bSmrg	        tmpdir=`func_mktempdir`
3146698f425bSmrg		func_basename "$file$stripped_ext"
3147698f425bSmrg		file="$func_basename_result"
3148698f425bSmrg	        outputname="$tmpdir/$file"
3149698f425bSmrg	        # Replace the output file specification.
31509ef0b394Smrg	        relink_command=`$ECHO "$relink_command" | $SED 's%@OUTPUT@%'"$outputname"'%g'`
3151698f425bSmrg
3152698f425bSmrg	        $opt_silent || {
3153698f425bSmrg	          func_quote_for_expand "$relink_command"
3154698f425bSmrg		  eval "func_echo $func_quote_for_expand_result"
3155698f425bSmrg	        }
3156698f425bSmrg	        if eval "$relink_command"; then :
3157698f425bSmrg	          else
3158698f425bSmrg		  func_error "error: relink \`$file' with the above command before installing it"
3159698f425bSmrg		  $opt_dry_run || ${RM}r "$tmpdir"
3160698f425bSmrg		  continue
3161698f425bSmrg	        fi
3162698f425bSmrg	        file="$outputname"
3163698f425bSmrg	      else
3164698f425bSmrg	        func_warning "cannot relink \`$file'"
3165698f425bSmrg	      fi
3166698f425bSmrg	    }
3167266e564dSmrg	  else
3168698f425bSmrg	    # Install the binary that we compiled earlier.
31699ef0b394Smrg	    file=`$ECHO "$file$stripped_ext" | $SED "s%\([^/]*\)$%$objdir/\1%"`
3170266e564dSmrg	  fi
3171698f425bSmrg	fi
3172266e564dSmrg
3173698f425bSmrg	# remove .exe since cygwin /usr/bin/install will append another
3174698f425bSmrg	# one anyway
3175698f425bSmrg	case $install_prog,$host in
3176698f425bSmrg	*/usr/bin/install*,*cygwin*)
3177698f425bSmrg	  case $file:$destfile in
3178698f425bSmrg	  *.exe:*.exe)
3179698f425bSmrg	    # this is ok
3180698f425bSmrg	    ;;
3181698f425bSmrg	  *.exe:*)
3182698f425bSmrg	    destfile=$destfile.exe
3183698f425bSmrg	    ;;
3184698f425bSmrg	  *:*.exe)
3185698f425bSmrg	    func_stripname '' '.exe' "$destfile"
3186698f425bSmrg	    destfile=$func_stripname_result
3187698f425bSmrg	    ;;
3188698f425bSmrg	  esac
3189266e564dSmrg	  ;;
3190266e564dSmrg	esac
3191698f425bSmrg	func_show_eval "$install_prog\$stripme \$file \$destfile" 'exit $?'
3192698f425bSmrg	$opt_dry_run || if test -n "$outputname"; then
3193698f425bSmrg	  ${RM}r "$tmpdir"
3194698f425bSmrg	fi
3195698f425bSmrg	;;
3196698f425bSmrg      esac
3197698f425bSmrg    done
3198266e564dSmrg
3199698f425bSmrg    for file in $staticlibs; do
3200698f425bSmrg      func_basename "$file"
3201698f425bSmrg      name="$func_basename_result"
3202698f425bSmrg
3203698f425bSmrg      # Set up the ranlib parameters.
3204698f425bSmrg      oldlib="$destdir/$name"
3205fb5e8d76Smrg      func_to_tool_file "$oldlib" func_convert_file_msys_to_w32
3206fb5e8d76Smrg      tool_oldlib=$func_to_tool_file_result
3207698f425bSmrg
3208698f425bSmrg      func_show_eval "$install_prog \$file \$oldlib" 'exit $?'
3209698f425bSmrg
3210698f425bSmrg      if test -n "$stripme" && test -n "$old_striplib"; then
3211fb5e8d76Smrg	func_show_eval "$old_striplib $tool_oldlib" 'exit $?'
3212698f425bSmrg      fi
3213698f425bSmrg
3214698f425bSmrg      # Do each command in the postinstall commands.
3215698f425bSmrg      func_execute_cmds "$old_postinstall_cmds" 'exit $?'
3216698f425bSmrg    done
3217698f425bSmrg
3218698f425bSmrg    test -n "$future_libdirs" && \
3219698f425bSmrg      func_warning "remember to run \`$progname --finish$future_libdirs'"
3220698f425bSmrg
3221698f425bSmrg    if test -n "$current_libdirs"; then
3222698f425bSmrg      # Maybe just do a dry run.
3223698f425bSmrg      $opt_dry_run && current_libdirs=" -n$current_libdirs"
3224698f425bSmrg      exec_cmd='$SHELL $progpath $preserve_args --finish$current_libdirs'
3225698f425bSmrg    else
3226698f425bSmrg      exit $EXIT_SUCCESS
3227698f425bSmrg    fi
3228698f425bSmrg}
3229698f425bSmrg
32309ef0b394Smrgtest "$opt_mode" = install && func_mode_install ${1+"$@"}
3231698f425bSmrg
3232698f425bSmrg
3233698f425bSmrg# func_generate_dlsyms outputname originator pic_p
3234698f425bSmrg# Extract symbols from dlprefiles and create ${outputname}S.o with
3235698f425bSmrg# a dlpreopen symbol table.
3236698f425bSmrgfunc_generate_dlsyms ()
3237698f425bSmrg{
3238698f425bSmrg    $opt_debug
3239698f425bSmrg    my_outputname="$1"
3240698f425bSmrg    my_originator="$2"
3241698f425bSmrg    my_pic_p="${3-no}"
3242698f425bSmrg    my_prefix=`$ECHO "$my_originator" | sed 's%[^a-zA-Z0-9]%_%g'`
3243698f425bSmrg    my_dlsyms=
3244698f425bSmrg
3245698f425bSmrg    if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then
3246698f425bSmrg      if test -n "$NM" && test -n "$global_symbol_pipe"; then
3247698f425bSmrg	my_dlsyms="${my_outputname}S.c"
3248698f425bSmrg      else
3249698f425bSmrg	func_error "not configured to extract global symbols from dlpreopened files"
3250698f425bSmrg      fi
3251698f425bSmrg    fi
3252698f425bSmrg
3253698f425bSmrg    if test -n "$my_dlsyms"; then
3254698f425bSmrg      case $my_dlsyms in
3255698f425bSmrg      "") ;;
3256698f425bSmrg      *.c)
3257698f425bSmrg	# Discover the nlist of each of the dlfiles.
3258698f425bSmrg	nlist="$output_objdir/${my_outputname}.nm"
3259698f425bSmrg
3260698f425bSmrg	func_show_eval "$RM $nlist ${nlist}S ${nlist}T"
3261698f425bSmrg
3262698f425bSmrg	# Parse the name list into a source file.
3263698f425bSmrg	func_verbose "creating $output_objdir/$my_dlsyms"
3264698f425bSmrg
3265698f425bSmrg	$opt_dry_run || $ECHO > "$output_objdir/$my_dlsyms" "\
3266698f425bSmrg/* $my_dlsyms - symbol resolution table for \`$my_outputname' dlsym emulation. */
3267698f425bSmrg/* Generated by $PROGRAM (GNU $PACKAGE$TIMESTAMP) $VERSION */
3268698f425bSmrg
3269698f425bSmrg#ifdef __cplusplus
3270698f425bSmrgextern \"C\" {
3271698f425bSmrg#endif
3272698f425bSmrg
32739ef0b394Smrg#if defined(__GNUC__) && (((__GNUC__ == 4) && (__GNUC_MINOR__ >= 4)) || (__GNUC__ > 4))
32749ef0b394Smrg#pragma GCC diagnostic ignored \"-Wstrict-prototypes\"
32759ef0b394Smrg#endif
32769ef0b394Smrg
32779ef0b394Smrg/* Keep this code in sync between libtool.m4, ltmain, lt_system.h, and tests.  */
32789ef0b394Smrg#if defined(_WIN32) || defined(__CYGWIN__) || defined(_WIN32_WCE)
32799ef0b394Smrg/* DATA imports from DLLs on WIN32 con't be const, because runtime
32809ef0b394Smrg   relocations are performed -- see ld's documentation on pseudo-relocs.  */
32819ef0b394Smrg# define LT_DLSYM_CONST
32829ef0b394Smrg#elif defined(__osf__)
32839ef0b394Smrg/* This system does not cope well with relocations in const data.  */
32849ef0b394Smrg# define LT_DLSYM_CONST
32859ef0b394Smrg#else
32869ef0b394Smrg# define LT_DLSYM_CONST const
32879ef0b394Smrg#endif
32889ef0b394Smrg
3289698f425bSmrg/* External symbol declarations for the compiler. */\
3290698f425bSmrg"
3291698f425bSmrg
3292698f425bSmrg	if test "$dlself" = yes; then
3293698f425bSmrg	  func_verbose "generating symbol list for \`$output'"
3294698f425bSmrg
3295698f425bSmrg	  $opt_dry_run || echo ': @PROGRAM@ ' > "$nlist"
3296698f425bSmrg
3297698f425bSmrg	  # Add our own program objects to the symbol list.
32989ef0b394Smrg	  progfiles=`$ECHO "$objs$old_deplibs" | $SP2NL | $SED "$lo2o" | $NL2SP`
3299698f425bSmrg	  for progfile in $progfiles; do
33009ef0b394Smrg	    func_to_tool_file "$progfile" func_convert_file_msys_to_w32
33019ef0b394Smrg	    func_verbose "extracting global C symbols from \`$func_to_tool_file_result'"
33029ef0b394Smrg	    $opt_dry_run || eval "$NM $func_to_tool_file_result | $global_symbol_pipe >> '$nlist'"
3303698f425bSmrg	  done
3304698f425bSmrg
3305698f425bSmrg	  if test -n "$exclude_expsyms"; then
3306698f425bSmrg	    $opt_dry_run || {
3307698f425bSmrg	      eval '$EGREP -v " ($exclude_expsyms)$" "$nlist" > "$nlist"T'
3308698f425bSmrg	      eval '$MV "$nlist"T "$nlist"'
3309698f425bSmrg	    }
3310266e564dSmrg	  fi
3311698f425bSmrg
3312698f425bSmrg	  if test -n "$export_symbols_regex"; then
3313698f425bSmrg	    $opt_dry_run || {
3314698f425bSmrg	      eval '$EGREP -e "$export_symbols_regex" "$nlist" > "$nlist"T'
3315698f425bSmrg	      eval '$MV "$nlist"T "$nlist"'
3316698f425bSmrg	    }
3317698f425bSmrg	  fi
3318698f425bSmrg
3319698f425bSmrg	  # Prepare the list of exported symbols
3320698f425bSmrg	  if test -z "$export_symbols"; then
3321698f425bSmrg	    export_symbols="$output_objdir/$outputname.exp"
3322698f425bSmrg	    $opt_dry_run || {
3323698f425bSmrg	      $RM $export_symbols
3324698f425bSmrg	      eval "${SED} -n -e '/^: @PROGRAM@ $/d' -e 's/^.* \(.*\)$/\1/p' "'< "$nlist" > "$export_symbols"'
3325698f425bSmrg	      case $host in
3326698f425bSmrg	      *cygwin* | *mingw* | *cegcc* )
3327698f425bSmrg                eval "echo EXPORTS "'> "$output_objdir/$outputname.def"'
3328698f425bSmrg                eval 'cat "$export_symbols" >> "$output_objdir/$outputname.def"'
3329698f425bSmrg	        ;;
3330698f425bSmrg	      esac
3331698f425bSmrg	    }
3332266e564dSmrg	  else
3333698f425bSmrg	    $opt_dry_run || {
3334698f425bSmrg	      eval "${SED} -e 's/\([].[*^$]\)/\\\\\1/g' -e 's/^/ /' -e 's/$/$/'"' < "$export_symbols" > "$output_objdir/$outputname.exp"'
3335698f425bSmrg	      eval '$GREP -f "$output_objdir/$outputname.exp" < "$nlist" > "$nlist"T'
3336698f425bSmrg	      eval '$MV "$nlist"T "$nlist"'
3337698f425bSmrg	      case $host in
33389ef0b394Smrg	        *cygwin* | *mingw* | *cegcc* )
3339698f425bSmrg	          eval "echo EXPORTS "'> "$output_objdir/$outputname.def"'
3340698f425bSmrg	          eval 'cat "$nlist" >> "$output_objdir/$outputname.def"'
3341698f425bSmrg	          ;;
3342698f425bSmrg	      esac
3343698f425bSmrg	    }
3344266e564dSmrg	  fi
3345698f425bSmrg	fi
3346266e564dSmrg
3347698f425bSmrg	for dlprefile in $dlprefiles; do
3348698f425bSmrg	  func_verbose "extracting global C symbols from \`$dlprefile'"
3349698f425bSmrg	  func_basename "$dlprefile"
3350698f425bSmrg	  name="$func_basename_result"
33519ef0b394Smrg          case $host in
33529ef0b394Smrg	    *cygwin* | *mingw* | *cegcc* )
33539ef0b394Smrg	      # if an import library, we need to obtain dlname
33549ef0b394Smrg	      if func_win32_import_lib_p "$dlprefile"; then
33559ef0b394Smrg	        func_tr_sh "$dlprefile"
33569ef0b394Smrg	        eval "curr_lafile=\$libfile_$func_tr_sh_result"
33579ef0b394Smrg	        dlprefile_dlbasename=""
33589ef0b394Smrg	        if test -n "$curr_lafile" && func_lalib_p "$curr_lafile"; then
33599ef0b394Smrg	          # Use subshell, to avoid clobbering current variable values
33609ef0b394Smrg	          dlprefile_dlname=`source "$curr_lafile" && echo "$dlname"`
33619ef0b394Smrg	          if test -n "$dlprefile_dlname" ; then
33629ef0b394Smrg	            func_basename "$dlprefile_dlname"
33639ef0b394Smrg	            dlprefile_dlbasename="$func_basename_result"
33649ef0b394Smrg	          else
33659ef0b394Smrg	            # no lafile. user explicitly requested -dlpreopen <import library>.
33669ef0b394Smrg	            $sharedlib_from_linklib_cmd "$dlprefile"
33679ef0b394Smrg	            dlprefile_dlbasename=$sharedlib_from_linklib_result
33689ef0b394Smrg	          fi
33699ef0b394Smrg	        fi
33709ef0b394Smrg	        $opt_dry_run || {
33719ef0b394Smrg	          if test -n "$dlprefile_dlbasename" ; then
33729ef0b394Smrg	            eval '$ECHO ": $dlprefile_dlbasename" >> "$nlist"'
33739ef0b394Smrg	          else
33749ef0b394Smrg	            func_warning "Could not compute DLL name from $name"
33759ef0b394Smrg	            eval '$ECHO ": $name " >> "$nlist"'
33769ef0b394Smrg	          fi
33779ef0b394Smrg	          func_to_tool_file "$dlprefile" func_convert_file_msys_to_w32
33789ef0b394Smrg	          eval "$NM \"$func_to_tool_file_result\" 2>/dev/null | $global_symbol_pipe |
33799ef0b394Smrg	            $SED -e '/I __imp/d' -e 's/I __nm_/D /;s/_nm__//' >> '$nlist'"
33809ef0b394Smrg	        }
33819ef0b394Smrg	      else # not an import lib
33829ef0b394Smrg	        $opt_dry_run || {
33839ef0b394Smrg	          eval '$ECHO ": $name " >> "$nlist"'
33849ef0b394Smrg	          func_to_tool_file "$dlprefile" func_convert_file_msys_to_w32
33859ef0b394Smrg	          eval "$NM \"$func_to_tool_file_result\" 2>/dev/null | $global_symbol_pipe >> '$nlist'"
33869ef0b394Smrg	        }
33879ef0b394Smrg	      fi
33889ef0b394Smrg	    ;;
33899ef0b394Smrg	    *)
33909ef0b394Smrg	      $opt_dry_run || {
33919ef0b394Smrg	        eval '$ECHO ": $name " >> "$nlist"'
33929ef0b394Smrg	        func_to_tool_file "$dlprefile" func_convert_file_msys_to_w32
33939ef0b394Smrg	        eval "$NM \"$func_to_tool_file_result\" 2>/dev/null | $global_symbol_pipe >> '$nlist'"
33949ef0b394Smrg	      }
33959ef0b394Smrg	    ;;
33969ef0b394Smrg          esac
3397698f425bSmrg	done
3398698f425bSmrg
3399698f425bSmrg	$opt_dry_run || {
3400698f425bSmrg	  # Make sure we have at least an empty file.
3401698f425bSmrg	  test -f "$nlist" || : > "$nlist"
3402698f425bSmrg
3403698f425bSmrg	  if test -n "$exclude_expsyms"; then
3404698f425bSmrg	    $EGREP -v " ($exclude_expsyms)$" "$nlist" > "$nlist"T
3405698f425bSmrg	    $MV "$nlist"T "$nlist"
3406266e564dSmrg	  fi
3407698f425bSmrg
3408698f425bSmrg	  # Try sorting and uniquifying the output.
3409698f425bSmrg	  if $GREP -v "^: " < "$nlist" |
3410698f425bSmrg	      if sort -k 3 </dev/null >/dev/null 2>&1; then
3411698f425bSmrg		sort -k 3
3412698f425bSmrg	      else
3413698f425bSmrg		sort +2
3414698f425bSmrg	      fi |
3415698f425bSmrg	      uniq > "$nlist"S; then
3416698f425bSmrg	    :
3417266e564dSmrg	  else
3418698f425bSmrg	    $GREP -v "^: " < "$nlist" > "$nlist"S
3419266e564dSmrg	  fi
3420266e564dSmrg
3421698f425bSmrg	  if test -f "$nlist"S; then
3422698f425bSmrg	    eval "$global_symbol_to_cdecl"' < "$nlist"S >> "$output_objdir/$my_dlsyms"'
3423266e564dSmrg	  else
34249ef0b394Smrg	    echo '/* NONE */' >> "$output_objdir/$my_dlsyms"
3425266e564dSmrg	  fi
3426266e564dSmrg
34279ef0b394Smrg	  echo >> "$output_objdir/$my_dlsyms" "\
3428266e564dSmrg
3429698f425bSmrg/* The mapping between symbol names and symbols.  */
3430698f425bSmrgtypedef struct {
3431698f425bSmrg  const char *name;
3432698f425bSmrg  void *address;
3433698f425bSmrg} lt_dlsymlist;
34349ef0b394Smrgextern LT_DLSYM_CONST lt_dlsymlist
3435698f425bSmrglt_${my_prefix}_LTX_preloaded_symbols[];
34369ef0b394SmrgLT_DLSYM_CONST lt_dlsymlist
3437698f425bSmrglt_${my_prefix}_LTX_preloaded_symbols[] =
3438698f425bSmrg{\
3439698f425bSmrg  { \"$my_originator\", (void *) 0 },"
3440266e564dSmrg
3441698f425bSmrg	  case $need_lib_prefix in
3442698f425bSmrg	  no)
3443698f425bSmrg	    eval "$global_symbol_to_c_name_address" < "$nlist" >> "$output_objdir/$my_dlsyms"
3444698f425bSmrg	    ;;
3445698f425bSmrg	  *)
3446698f425bSmrg	    eval "$global_symbol_to_c_name_address_lib_prefix" < "$nlist" >> "$output_objdir/$my_dlsyms"
3447698f425bSmrg	    ;;
3448698f425bSmrg	  esac
34499ef0b394Smrg	  echo >> "$output_objdir/$my_dlsyms" "\
3450698f425bSmrg  {0, (void *) 0}
3451698f425bSmrg};
3452266e564dSmrg
3453698f425bSmrg/* This works around a problem in FreeBSD linker */
3454698f425bSmrg#ifdef FREEBSD_WORKAROUND
3455698f425bSmrgstatic const void *lt_preloaded_setup() {
3456698f425bSmrg  return lt_${my_prefix}_LTX_preloaded_symbols;
3457698f425bSmrg}
3458698f425bSmrg#endif
3459698f425bSmrg
3460698f425bSmrg#ifdef __cplusplus
3461698f425bSmrg}
3462698f425bSmrg#endif\
3463698f425bSmrg"
3464698f425bSmrg	} # !$opt_dry_run
3465698f425bSmrg
3466698f425bSmrg	pic_flag_for_symtable=
3467698f425bSmrg	case "$compile_command " in
3468698f425bSmrg	*" -static "*) ;;
3469698f425bSmrg	*)
3470698f425bSmrg	  case $host in
3471698f425bSmrg	  # compiling the symbol table file with pic_flag works around
3472698f425bSmrg	  # a FreeBSD bug that causes programs to crash when -lm is
3473698f425bSmrg	  # linked before any other PIC object.  But we must not use
3474698f425bSmrg	  # pic_flag when linking with -static.  The problem exists in
3475698f425bSmrg	  # FreeBSD 2.2.6 and is fixed in FreeBSD 3.1.
3476fb5e8d76Smrg	  *-*-freebsd2.*|*-*-freebsd3.0*|*-*-freebsdelf3.0*)
3477698f425bSmrg	    pic_flag_for_symtable=" $pic_flag -DFREEBSD_WORKAROUND" ;;
3478698f425bSmrg	  *-*-hpux*)
3479698f425bSmrg	    pic_flag_for_symtable=" $pic_flag"  ;;
3480698f425bSmrg	  *)
3481698f425bSmrg	    if test "X$my_pic_p" != Xno; then
3482698f425bSmrg	      pic_flag_for_symtable=" $pic_flag"
3483266e564dSmrg	    fi
3484698f425bSmrg	    ;;
3485698f425bSmrg	  esac
3486698f425bSmrg	  ;;
3487698f425bSmrg	esac
3488698f425bSmrg	symtab_cflags=
3489698f425bSmrg	for arg in $LTCFLAGS; do
3490698f425bSmrg	  case $arg in
3491698f425bSmrg	  -pie | -fpie | -fPIE) ;;
34929ef0b394Smrg	  *) func_append symtab_cflags " $arg" ;;
3493698f425bSmrg	  esac
3494698f425bSmrg	done
3495266e564dSmrg
3496698f425bSmrg	# Now compile the dynamic symbol file.
3497698f425bSmrg	func_show_eval '(cd $output_objdir && $LTCC$symtab_cflags -c$no_builtin_flag$pic_flag_for_symtable "$my_dlsyms")' 'exit $?'
3498266e564dSmrg
3499698f425bSmrg	# Clean up the generated files.
3500698f425bSmrg	func_show_eval '$RM "$output_objdir/$my_dlsyms" "$nlist" "${nlist}S" "${nlist}T"'
3501266e564dSmrg
3502698f425bSmrg	# Transform the symbol file into the correct name.
3503698f425bSmrg	symfileobj="$output_objdir/${my_outputname}S.$objext"
3504698f425bSmrg	case $host in
3505698f425bSmrg	*cygwin* | *mingw* | *cegcc* )
3506698f425bSmrg	  if test -f "$output_objdir/$my_outputname.def"; then
35079ef0b394Smrg	    compile_command=`$ECHO "$compile_command" | $SED "s%@SYMFILE@%$output_objdir/$my_outputname.def $symfileobj%"`
35089ef0b394Smrg	    finalize_command=`$ECHO "$finalize_command" | $SED "s%@SYMFILE@%$output_objdir/$my_outputname.def $symfileobj%"`
3509698f425bSmrg	  else
35109ef0b394Smrg	    compile_command=`$ECHO "$compile_command" | $SED "s%@SYMFILE@%$symfileobj%"`
35119ef0b394Smrg	    finalize_command=`$ECHO "$finalize_command" | $SED "s%@SYMFILE@%$symfileobj%"`
3512266e564dSmrg	  fi
3513698f425bSmrg	  ;;
3514698f425bSmrg	*)
35159ef0b394Smrg	  compile_command=`$ECHO "$compile_command" | $SED "s%@SYMFILE@%$symfileobj%"`
35169ef0b394Smrg	  finalize_command=`$ECHO "$finalize_command" | $SED "s%@SYMFILE@%$symfileobj%"`
3517698f425bSmrg	  ;;
3518698f425bSmrg	esac
3519698f425bSmrg	;;
3520698f425bSmrg      *)
3521698f425bSmrg	func_fatal_error "unknown suffix for \`$my_dlsyms'"
3522698f425bSmrg	;;
3523698f425bSmrg      esac
3524698f425bSmrg    else
3525698f425bSmrg      # We keep going just in case the user didn't refer to
3526698f425bSmrg      # lt_preloaded_symbols.  The linker will fail if global_symbol_pipe
3527698f425bSmrg      # really was required.
3528266e564dSmrg
3529698f425bSmrg      # Nullify the symbol file.
35309ef0b394Smrg      compile_command=`$ECHO "$compile_command" | $SED "s% @SYMFILE@%%"`
35319ef0b394Smrg      finalize_command=`$ECHO "$finalize_command" | $SED "s% @SYMFILE@%%"`
3532698f425bSmrg    fi
3533698f425bSmrg}
3534266e564dSmrg
3535698f425bSmrg# func_win32_libid arg
3536698f425bSmrg# return the library type of file 'arg'
3537698f425bSmrg#
3538698f425bSmrg# Need a lot of goo to handle *both* DLLs and import libs
3539698f425bSmrg# Has to be a shell function in order to 'eat' the argument
3540698f425bSmrg# that is supplied when $file_magic_command is called.
35419ef0b394Smrg# Despite the name, also deal with 64 bit binaries.
3542698f425bSmrgfunc_win32_libid ()
3543698f425bSmrg{
3544698f425bSmrg  $opt_debug
3545698f425bSmrg  win32_libid_type="unknown"
3546698f425bSmrg  win32_fileres=`file -L $1 2>/dev/null`
3547698f425bSmrg  case $win32_fileres in
3548698f425bSmrg  *ar\ archive\ import\ library*) # definitely import
3549698f425bSmrg    win32_libid_type="x86 archive import"
3550698f425bSmrg    ;;
3551698f425bSmrg  *ar\ archive*) # could be an import, or static
35529ef0b394Smrg    # Keep the egrep pattern in sync with the one in _LT_CHECK_MAGIC_METHOD.
3553698f425bSmrg    if eval $OBJDUMP -f $1 | $SED -e '10q' 2>/dev/null |
35549ef0b394Smrg       $EGREP 'file format (pei*-i386(.*architecture: i386)?|pe-arm-wince|pe-x86-64)' >/dev/null; then
35559ef0b394Smrg      func_to_tool_file "$1" func_convert_file_msys_to_w32
35569ef0b394Smrg      win32_nmres=`eval $NM -f posix -A \"$func_to_tool_file_result\" |
3557698f425bSmrg	$SED -n -e '
3558698f425bSmrg	    1,100{
3559698f425bSmrg		/ I /{
3560698f425bSmrg		    s,.*,import,
3561698f425bSmrg		    p
3562698f425bSmrg		    q
3563698f425bSmrg		}
3564698f425bSmrg	    }'`
3565698f425bSmrg      case $win32_nmres in
3566698f425bSmrg      import*)  win32_libid_type="x86 archive import";;
3567698f425bSmrg      *)        win32_libid_type="x86 archive static";;
3568698f425bSmrg      esac
3569698f425bSmrg    fi
3570698f425bSmrg    ;;
3571698f425bSmrg  *DLL*)
3572698f425bSmrg    win32_libid_type="x86 DLL"
3573698f425bSmrg    ;;
3574698f425bSmrg  *executable*) # but shell scripts are "executable" too...
3575698f425bSmrg    case $win32_fileres in
3576698f425bSmrg    *MS\ Windows\ PE\ Intel*)
3577698f425bSmrg      win32_libid_type="x86 DLL"
3578698f425bSmrg      ;;
3579698f425bSmrg    esac
3580698f425bSmrg    ;;
3581698f425bSmrg  esac
3582698f425bSmrg  $ECHO "$win32_libid_type"
3583698f425bSmrg}
3584266e564dSmrg
35859ef0b394Smrg# func_cygming_dll_for_implib ARG
35869ef0b394Smrg#
35879ef0b394Smrg# Platform-specific function to extract the
35889ef0b394Smrg# name of the DLL associated with the specified
35899ef0b394Smrg# import library ARG.
35909ef0b394Smrg# Invoked by eval'ing the libtool variable
35919ef0b394Smrg#    $sharedlib_from_linklib_cmd
35929ef0b394Smrg# Result is available in the variable
35939ef0b394Smrg#    $sharedlib_from_linklib_result
35949ef0b394Smrgfunc_cygming_dll_for_implib ()
35959ef0b394Smrg{
35969ef0b394Smrg  $opt_debug
35979ef0b394Smrg  sharedlib_from_linklib_result=`$DLLTOOL --identify-strict --identify "$1"`
35989ef0b394Smrg}
35999ef0b394Smrg
36009ef0b394Smrg# func_cygming_dll_for_implib_fallback_core SECTION_NAME LIBNAMEs
36019ef0b394Smrg#
36029ef0b394Smrg# The is the core of a fallback implementation of a
36039ef0b394Smrg# platform-specific function to extract the name of the
36049ef0b394Smrg# DLL associated with the specified import library LIBNAME.
36059ef0b394Smrg#
36069ef0b394Smrg# SECTION_NAME is either .idata$6 or .idata$7, depending
36079ef0b394Smrg# on the platform and compiler that created the implib.
36089ef0b394Smrg#
36099ef0b394Smrg# Echos the name of the DLL associated with the
36109ef0b394Smrg# specified import library.
36119ef0b394Smrgfunc_cygming_dll_for_implib_fallback_core ()
36129ef0b394Smrg{
36139ef0b394Smrg  $opt_debug
36149ef0b394Smrg  match_literal=`$ECHO "$1" | $SED "$sed_make_literal_regex"`
36159ef0b394Smrg  $OBJDUMP -s --section "$1" "$2" 2>/dev/null |
36169ef0b394Smrg    $SED '/^Contents of section '"$match_literal"':/{
36179ef0b394Smrg      # Place marker at beginning of archive member dllname section
36189ef0b394Smrg      s/.*/====MARK====/
36199ef0b394Smrg      p
36209ef0b394Smrg      d
36219ef0b394Smrg    }
36229ef0b394Smrg    # These lines can sometimes be longer than 43 characters, but
36239ef0b394Smrg    # are always uninteresting
36249ef0b394Smrg    /:[	 ]*file format pe[i]\{,1\}-/d
36259ef0b394Smrg    /^In archive [^:]*:/d
36269ef0b394Smrg    # Ensure marker is printed
36279ef0b394Smrg    /^====MARK====/p
36289ef0b394Smrg    # Remove all lines with less than 43 characters
36299ef0b394Smrg    /^.\{43\}/!d
36309ef0b394Smrg    # From remaining lines, remove first 43 characters
36319ef0b394Smrg    s/^.\{43\}//' |
36329ef0b394Smrg    $SED -n '
36339ef0b394Smrg      # Join marker and all lines until next marker into a single line
36349ef0b394Smrg      /^====MARK====/ b para
36359ef0b394Smrg      H
36369ef0b394Smrg      $ b para
36379ef0b394Smrg      b
36389ef0b394Smrg      :para
36399ef0b394Smrg      x
36409ef0b394Smrg      s/\n//g
36419ef0b394Smrg      # Remove the marker
36429ef0b394Smrg      s/^====MARK====//
36439ef0b394Smrg      # Remove trailing dots and whitespace
36449ef0b394Smrg      s/[\. \t]*$//
36459ef0b394Smrg      # Print
36469ef0b394Smrg      /./p' |
36479ef0b394Smrg    # we now have a list, one entry per line, of the stringified
36489ef0b394Smrg    # contents of the appropriate section of all members of the
36499ef0b394Smrg    # archive which possess that section. Heuristic: eliminate
36509ef0b394Smrg    # all those which have a first or second character that is
36519ef0b394Smrg    # a '.' (that is, objdump's representation of an unprintable
36529ef0b394Smrg    # character.) This should work for all archives with less than
36539ef0b394Smrg    # 0x302f exports -- but will fail for DLLs whose name actually
36549ef0b394Smrg    # begins with a literal '.' or a single character followed by
36559ef0b394Smrg    # a '.'.
36569ef0b394Smrg    #
36579ef0b394Smrg    # Of those that remain, print the first one.
36589ef0b394Smrg    $SED -e '/^\./d;/^.\./d;q'
36599ef0b394Smrg}
36609ef0b394Smrg
36619ef0b394Smrg# func_cygming_gnu_implib_p ARG
36629ef0b394Smrg# This predicate returns with zero status (TRUE) if
36639ef0b394Smrg# ARG is a GNU/binutils-style import library. Returns
36649ef0b394Smrg# with nonzero status (FALSE) otherwise.
36659ef0b394Smrgfunc_cygming_gnu_implib_p ()
36669ef0b394Smrg{
36679ef0b394Smrg  $opt_debug
36689ef0b394Smrg  func_to_tool_file "$1" func_convert_file_msys_to_w32
36699ef0b394Smrg  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)$'`
36709ef0b394Smrg  test -n "$func_cygming_gnu_implib_tmp"
36719ef0b394Smrg}
36729ef0b394Smrg
36739ef0b394Smrg# func_cygming_ms_implib_p ARG
36749ef0b394Smrg# This predicate returns with zero status (TRUE) if
36759ef0b394Smrg# ARG is an MS-style import library. Returns
36769ef0b394Smrg# with nonzero status (FALSE) otherwise.
36779ef0b394Smrgfunc_cygming_ms_implib_p ()
36789ef0b394Smrg{
36799ef0b394Smrg  $opt_debug
36809ef0b394Smrg  func_to_tool_file "$1" func_convert_file_msys_to_w32
36819ef0b394Smrg  func_cygming_ms_implib_tmp=`$NM "$func_to_tool_file_result" | eval "$global_symbol_pipe" | $GREP '_NULL_IMPORT_DESCRIPTOR'`
36829ef0b394Smrg  test -n "$func_cygming_ms_implib_tmp"
36839ef0b394Smrg}
36849ef0b394Smrg
36859ef0b394Smrg# func_cygming_dll_for_implib_fallback ARG
36869ef0b394Smrg# Platform-specific function to extract the
36879ef0b394Smrg# name of the DLL associated with the specified
36889ef0b394Smrg# import library ARG.
36899ef0b394Smrg#
36909ef0b394Smrg# This fallback implementation is for use when $DLLTOOL
36919ef0b394Smrg# does not support the --identify-strict option.
36929ef0b394Smrg# Invoked by eval'ing the libtool variable
36939ef0b394Smrg#    $sharedlib_from_linklib_cmd
36949ef0b394Smrg# Result is available in the variable
36959ef0b394Smrg#    $sharedlib_from_linklib_result
36969ef0b394Smrgfunc_cygming_dll_for_implib_fallback ()
36979ef0b394Smrg{
36989ef0b394Smrg  $opt_debug
36999ef0b394Smrg  if func_cygming_gnu_implib_p "$1" ; then
37009ef0b394Smrg    # binutils import library
37019ef0b394Smrg    sharedlib_from_linklib_result=`func_cygming_dll_for_implib_fallback_core '.idata$7' "$1"`
37029ef0b394Smrg  elif func_cygming_ms_implib_p "$1" ; then
37039ef0b394Smrg    # ms-generated import library
37049ef0b394Smrg    sharedlib_from_linklib_result=`func_cygming_dll_for_implib_fallback_core '.idata$6' "$1"`
37059ef0b394Smrg  else
37069ef0b394Smrg    # unknown
37079ef0b394Smrg    sharedlib_from_linklib_result=""
37089ef0b394Smrg  fi
37099ef0b394Smrg}
3710266e564dSmrg
3711266e564dSmrg
3712698f425bSmrg# func_extract_an_archive dir oldlib
3713698f425bSmrgfunc_extract_an_archive ()
3714698f425bSmrg{
3715698f425bSmrg    $opt_debug
3716698f425bSmrg    f_ex_an_ar_dir="$1"; shift
3717698f425bSmrg    f_ex_an_ar_oldlib="$1"
37189ef0b394Smrg    if test "$lock_old_archive_extraction" = yes; then
37199ef0b394Smrg      lockfile=$f_ex_an_ar_oldlib.lock
37209ef0b394Smrg      until $opt_dry_run || ln "$progpath" "$lockfile" 2>/dev/null; do
37219ef0b394Smrg	func_echo "Waiting for $lockfile to be removed"
37229ef0b394Smrg	sleep 2
37239ef0b394Smrg      done
37249ef0b394Smrg    fi
37259ef0b394Smrg    func_show_eval "(cd \$f_ex_an_ar_dir && $AR x \"\$f_ex_an_ar_oldlib\")" \
37269ef0b394Smrg		   'stat=$?; rm -f "$lockfile"; exit $stat'
37279ef0b394Smrg    if test "$lock_old_archive_extraction" = yes; then
37289ef0b394Smrg      $opt_dry_run || rm -f "$lockfile"
37299ef0b394Smrg    fi
3730698f425bSmrg    if ($AR t "$f_ex_an_ar_oldlib" | sort | sort -uc >/dev/null 2>&1); then
3731698f425bSmrg     :
3732698f425bSmrg    else
3733698f425bSmrg      func_fatal_error "object name conflicts in archive: $f_ex_an_ar_dir/$f_ex_an_ar_oldlib"
3734698f425bSmrg    fi
3735698f425bSmrg}
3736266e564dSmrg
3737266e564dSmrg
3738698f425bSmrg# func_extract_archives gentop oldlib ...
3739698f425bSmrgfunc_extract_archives ()
3740698f425bSmrg{
3741698f425bSmrg    $opt_debug
3742698f425bSmrg    my_gentop="$1"; shift
3743698f425bSmrg    my_oldlibs=${1+"$@"}
3744698f425bSmrg    my_oldobjs=""
3745698f425bSmrg    my_xlib=""
3746698f425bSmrg    my_xabs=""
3747698f425bSmrg    my_xdir=""
3748266e564dSmrg
3749698f425bSmrg    for my_xlib in $my_oldlibs; do
3750698f425bSmrg      # Extract the objects.
3751698f425bSmrg      case $my_xlib in
3752698f425bSmrg	[\\/]* | [A-Za-z]:[\\/]*) my_xabs="$my_xlib" ;;
3753698f425bSmrg	*) my_xabs=`pwd`"/$my_xlib" ;;
3754698f425bSmrg      esac
3755698f425bSmrg      func_basename "$my_xlib"
3756698f425bSmrg      my_xlib="$func_basename_result"
3757698f425bSmrg      my_xlib_u=$my_xlib
3758698f425bSmrg      while :; do
3759698f425bSmrg        case " $extracted_archives " in
3760698f425bSmrg	*" $my_xlib_u "*)
3761698f425bSmrg	  func_arith $extracted_serial + 1
3762698f425bSmrg	  extracted_serial=$func_arith_result
3763698f425bSmrg	  my_xlib_u=lt$extracted_serial-$my_xlib ;;
3764698f425bSmrg	*) break ;;
3765698f425bSmrg	esac
3766698f425bSmrg      done
3767698f425bSmrg      extracted_archives="$extracted_archives $my_xlib_u"
3768698f425bSmrg      my_xdir="$my_gentop/$my_xlib_u"
3769266e564dSmrg
3770698f425bSmrg      func_mkdir_p "$my_xdir"
3771266e564dSmrg
3772698f425bSmrg      case $host in
3773698f425bSmrg      *-darwin*)
3774698f425bSmrg	func_verbose "Extracting $my_xabs"
3775698f425bSmrg	# Do not bother doing anything if just a dry run
3776698f425bSmrg	$opt_dry_run || {
3777698f425bSmrg	  darwin_orig_dir=`pwd`
3778698f425bSmrg	  cd $my_xdir || exit $?
3779698f425bSmrg	  darwin_archive=$my_xabs
3780698f425bSmrg	  darwin_curdir=`pwd`
3781698f425bSmrg	  darwin_base_archive=`basename "$darwin_archive"`
3782698f425bSmrg	  darwin_arches=`$LIPO -info "$darwin_archive" 2>/dev/null | $GREP Architectures 2>/dev/null || true`
3783698f425bSmrg	  if test -n "$darwin_arches"; then
3784698f425bSmrg	    darwin_arches=`$ECHO "$darwin_arches" | $SED -e 's/.*are://'`
3785698f425bSmrg	    darwin_arch=
3786698f425bSmrg	    func_verbose "$darwin_base_archive has multiple architectures $darwin_arches"
3787698f425bSmrg	    for darwin_arch in  $darwin_arches ; do
3788698f425bSmrg	      func_mkdir_p "unfat-$$/${darwin_base_archive}-${darwin_arch}"
3789698f425bSmrg	      $LIPO -thin $darwin_arch -output "unfat-$$/${darwin_base_archive}-${darwin_arch}/${darwin_base_archive}" "${darwin_archive}"
3790698f425bSmrg	      cd "unfat-$$/${darwin_base_archive}-${darwin_arch}"
3791698f425bSmrg	      func_extract_an_archive "`pwd`" "${darwin_base_archive}"
3792698f425bSmrg	      cd "$darwin_curdir"
3793698f425bSmrg	      $RM "unfat-$$/${darwin_base_archive}-${darwin_arch}/${darwin_base_archive}"
3794698f425bSmrg	    done # $darwin_arches
3795698f425bSmrg            ## Okay now we've a bunch of thin objects, gotta fatten them up :)
3796698f425bSmrg	    darwin_filelist=`find unfat-$$ -type f -name \*.o -print -o -name \*.lo -print | $SED -e "$basename" | sort -u`
3797698f425bSmrg	    darwin_file=
3798698f425bSmrg	    darwin_files=
3799698f425bSmrg	    for darwin_file in $darwin_filelist; do
38009ef0b394Smrg	      darwin_files=`find unfat-$$ -name $darwin_file -print | sort | $NL2SP`
3801698f425bSmrg	      $LIPO -create -output "$darwin_file" $darwin_files
3802698f425bSmrg	    done # $darwin_filelist
3803698f425bSmrg	    $RM -rf unfat-$$
3804698f425bSmrg	    cd "$darwin_orig_dir"
3805266e564dSmrg	  else
3806698f425bSmrg	    cd $darwin_orig_dir
3807698f425bSmrg	    func_extract_an_archive "$my_xdir" "$my_xabs"
3808698f425bSmrg	  fi # $darwin_arches
3809698f425bSmrg	} # !$opt_dry_run
3810698f425bSmrg	;;
3811698f425bSmrg      *)
3812698f425bSmrg        func_extract_an_archive "$my_xdir" "$my_xabs"
3813698f425bSmrg	;;
3814698f425bSmrg      esac
38159ef0b394Smrg      my_oldobjs="$my_oldobjs "`find $my_xdir -name \*.$objext -print -o -name \*.lo -print | sort | $NL2SP`
3816698f425bSmrg    done
3817266e564dSmrg
3818698f425bSmrg    func_extract_archives_result="$my_oldobjs"
3819698f425bSmrg}
3820266e564dSmrg
3821266e564dSmrg
38229ef0b394Smrg# func_emit_wrapper [arg=no]
38239ef0b394Smrg#
38249ef0b394Smrg# Emit a libtool wrapper script on stdout.
38259ef0b394Smrg# Don't directly open a file because we may want to
38269ef0b394Smrg# incorporate the script contents within a cygwin/mingw
38279ef0b394Smrg# wrapper executable.  Must ONLY be called from within
38289ef0b394Smrg# func_mode_link because it depends on a number of variables
38299ef0b394Smrg# set therein.
3830698f425bSmrg#
38319ef0b394Smrg# ARG is the value that the WRAPPER_SCRIPT_BELONGS_IN_OBJDIR
38329ef0b394Smrg# variable will take.  If 'yes', then the emitted script
38339ef0b394Smrg# will assume that the directory in which it is stored is
38349ef0b394Smrg# the $objdir directory.  This is a cygwin/mingw-specific
38359ef0b394Smrg# behavior.
38369ef0b394Smrgfunc_emit_wrapper ()
3837698f425bSmrg{
38389ef0b394Smrg	func_emit_wrapper_arg1=${1-no}
3839266e564dSmrg
3840698f425bSmrg	$ECHO "\
3841698f425bSmrg#! $SHELL
3842266e564dSmrg
3843698f425bSmrg# $output - temporary wrapper script for $objdir/$outputname
3844698f425bSmrg# Generated by $PROGRAM (GNU $PACKAGE$TIMESTAMP) $VERSION
3845698f425bSmrg#
3846698f425bSmrg# The $output program cannot be directly executed until all the libtool
3847698f425bSmrg# libraries that it depends on are installed.
3848698f425bSmrg#
3849698f425bSmrg# This wrapper script should never be moved out of the build directory.
3850698f425bSmrg# If it is, it will not operate correctly.
3851266e564dSmrg
3852698f425bSmrg# Sed substitution that helps us do robust quoting.  It backslashifies
3853698f425bSmrg# metacharacters that are still active within double-quoted strings.
3854698f425bSmrgsed_quote_subst='$sed_quote_subst'
3855266e564dSmrg
3856698f425bSmrg# Be Bourne compatible
3857698f425bSmrgif test -n \"\${ZSH_VERSION+set}\" && (emulate sh) >/dev/null 2>&1; then
3858698f425bSmrg  emulate sh
3859698f425bSmrg  NULLCMD=:
3860698f425bSmrg  # Zsh 3.x and 4.x performs word splitting on \${1+\"\$@\"}, which
3861698f425bSmrg  # is contrary to our usage.  Disable this feature.
3862698f425bSmrg  alias -g '\${1+\"\$@\"}'='\"\$@\"'
3863698f425bSmrg  setopt NO_GLOB_SUBST
3864698f425bSmrgelse
3865698f425bSmrg  case \`(set -o) 2>/dev/null\` in *posix*) set -o posix;; esac
3866698f425bSmrgfi
3867698f425bSmrgBIN_SH=xpg4; export BIN_SH # for Tru64
3868698f425bSmrgDUALCASE=1; export DUALCASE # for MKS sh
3869266e564dSmrg
3870698f425bSmrg# The HP-UX ksh and POSIX shell print the target directory to stdout
3871698f425bSmrg# if CDPATH is set.
3872698f425bSmrg(unset CDPATH) >/dev/null 2>&1 && unset CDPATH
3873266e564dSmrg
3874698f425bSmrgrelink_command=\"$relink_command\"
3875266e564dSmrg
3876698f425bSmrg# This environment variable determines our operation mode.
3877698f425bSmrgif test \"\$libtool_install_magic\" = \"$magic\"; then
3878698f425bSmrg  # install mode needs the following variables:
3879698f425bSmrg  generated_by_libtool_version='$macro_version'
3880698f425bSmrg  notinst_deplibs='$notinst_deplibs'
3881698f425bSmrgelse
3882698f425bSmrg  # When we are sourced in execute mode, \$file and \$ECHO are already set.
3883698f425bSmrg  if test \"\$libtool_execute_magic\" != \"$magic\"; then
38849ef0b394Smrg    file=\"\$0\""
38859ef0b394Smrg
38869ef0b394Smrg    qECHO=`$ECHO "$ECHO" | $SED "$sed_quote_subst"`
38879ef0b394Smrg    $ECHO "\
38889ef0b394Smrg
38899ef0b394Smrg# A function that is used when there is no print builtin or printf.
38909ef0b394Smrgfunc_fallback_echo ()
38919ef0b394Smrg{
38929ef0b394Smrg  eval 'cat <<_LTECHO_EOF
38939ef0b394Smrg\$1
38949ef0b394Smrg_LTECHO_EOF'
38959ef0b394Smrg}
38969ef0b394Smrg    ECHO=\"$qECHO\"
38979ef0b394Smrg  fi
38989ef0b394Smrg
38999ef0b394Smrg# Very basic option parsing. These options are (a) specific to
39009ef0b394Smrg# the libtool wrapper, (b) are identical between the wrapper
39019ef0b394Smrg# /script/ and the wrapper /executable/ which is used only on
39029ef0b394Smrg# windows platforms, and (c) all begin with the string "--lt-"
39039ef0b394Smrg# (application programs are unlikely to have options which match
39049ef0b394Smrg# this pattern).
39059ef0b394Smrg#
39069ef0b394Smrg# There are only two supported options: --lt-debug and
39079ef0b394Smrg# --lt-dump-script. There is, deliberately, no --lt-help.
39089ef0b394Smrg#
39099ef0b394Smrg# The first argument to this parsing function should be the
39109ef0b394Smrg# script's $0 value, followed by "$@".
39119ef0b394Smrglt_option_debug=
39129ef0b394Smrgfunc_parse_lt_options ()
39139ef0b394Smrg{
39149ef0b394Smrg  lt_script_arg0=\$0
39159ef0b394Smrg  shift
39169ef0b394Smrg  for lt_opt
39179ef0b394Smrg  do
39189ef0b394Smrg    case \"\$lt_opt\" in
39199ef0b394Smrg    --lt-debug) lt_option_debug=1 ;;
39209ef0b394Smrg    --lt-dump-script)
39219ef0b394Smrg        lt_dump_D=\`\$ECHO \"X\$lt_script_arg0\" | $SED -e 's/^X//' -e 's%/[^/]*$%%'\`
39229ef0b394Smrg        test \"X\$lt_dump_D\" = \"X\$lt_script_arg0\" && lt_dump_D=.
39239ef0b394Smrg        lt_dump_F=\`\$ECHO \"X\$lt_script_arg0\" | $SED -e 's/^X//' -e 's%^.*/%%'\`
39249ef0b394Smrg        cat \"\$lt_dump_D/\$lt_dump_F\"
39259ef0b394Smrg        exit 0
39269ef0b394Smrg      ;;
39279ef0b394Smrg    --lt-*)
39289ef0b394Smrg        \$ECHO \"Unrecognized --lt- option: '\$lt_opt'\" 1>&2
39299ef0b394Smrg        exit 1
39309ef0b394Smrg      ;;
39319ef0b394Smrg    esac
39329ef0b394Smrg  done
39339ef0b394Smrg
39349ef0b394Smrg  # Print the debug banner immediately:
39359ef0b394Smrg  if test -n \"\$lt_option_debug\"; then
39369ef0b394Smrg    echo \"${outputname}:${output}:\${LINENO}: libtool wrapper (GNU $PACKAGE$TIMESTAMP) $VERSION\" 1>&2
39379ef0b394Smrg  fi
39389ef0b394Smrg}
39399ef0b394Smrg
39409ef0b394Smrg# Used when --lt-debug. Prints its arguments to stdout
39419ef0b394Smrg# (redirection is the responsibility of the caller)
39429ef0b394Smrgfunc_lt_dump_args ()
39439ef0b394Smrg{
39449ef0b394Smrg  lt_dump_args_N=1;
39459ef0b394Smrg  for lt_arg
39469ef0b394Smrg  do
39479ef0b394Smrg    \$ECHO \"${outputname}:${output}:\${LINENO}: newargv[\$lt_dump_args_N]: \$lt_arg\"
39489ef0b394Smrg    lt_dump_args_N=\`expr \$lt_dump_args_N + 1\`
39499ef0b394Smrg  done
39509ef0b394Smrg}
39519ef0b394Smrg
39529ef0b394Smrg# Core function for launching the target application
39539ef0b394Smrgfunc_exec_program_core ()
39549ef0b394Smrg{
3955698f425bSmrg"
39569ef0b394Smrg  case $host in
39579ef0b394Smrg  # Backslashes separate directories on plain windows
39589ef0b394Smrg  *-*-mingw | *-*-os2* | *-cegcc*)
39599ef0b394Smrg    $ECHO "\
39609ef0b394Smrg      if test -n \"\$lt_option_debug\"; then
39619ef0b394Smrg        \$ECHO \"${outputname}:${output}:\${LINENO}: newargv[0]: \$progdir\\\\\$program\" 1>&2
39629ef0b394Smrg        func_lt_dump_args \${1+\"\$@\"} 1>&2
39639ef0b394Smrg      fi
39649ef0b394Smrg      exec \"\$progdir\\\\\$program\" \${1+\"\$@\"}
39659ef0b394Smrg"
39669ef0b394Smrg    ;;
39679ef0b394Smrg
39689ef0b394Smrg  *)
39699ef0b394Smrg    $ECHO "\
39709ef0b394Smrg      if test -n \"\$lt_option_debug\"; then
39719ef0b394Smrg        \$ECHO \"${outputname}:${output}:\${LINENO}: newargv[0]: \$progdir/\$program\" 1>&2
39729ef0b394Smrg        func_lt_dump_args \${1+\"\$@\"} 1>&2
39739ef0b394Smrg      fi
39749ef0b394Smrg      exec \"\$progdir/\$program\" \${1+\"\$@\"}
39759ef0b394Smrg"
39769ef0b394Smrg    ;;
39779ef0b394Smrg  esac
39789ef0b394Smrg  $ECHO "\
39799ef0b394Smrg      \$ECHO \"\$0: cannot exec \$program \$*\" 1>&2
39809ef0b394Smrg      exit 1
39819ef0b394Smrg}
39829ef0b394Smrg
39839ef0b394Smrg# A function to encapsulate launching the target application
39849ef0b394Smrg# Strips options in the --lt-* namespace from \$@ and
39859ef0b394Smrg# launches target application with the remaining arguments.
39869ef0b394Smrgfunc_exec_program ()
39879ef0b394Smrg{
3988fb5e8d76Smrg  case \" \$* \" in
3989fb5e8d76Smrg  *\\ --lt-*)
3990fb5e8d76Smrg    for lt_wr_arg
3991fb5e8d76Smrg    do
3992fb5e8d76Smrg      case \$lt_wr_arg in
3993fb5e8d76Smrg      --lt-*) ;;
3994fb5e8d76Smrg      *) set x \"\$@\" \"\$lt_wr_arg\"; shift;;
3995fb5e8d76Smrg      esac
3996fb5e8d76Smrg      shift
3997fb5e8d76Smrg    done ;;
3998fb5e8d76Smrg  esac
39999ef0b394Smrg  func_exec_program_core \${1+\"\$@\"}
40009ef0b394Smrg}
40019ef0b394Smrg
40029ef0b394Smrg  # Parse options
40039ef0b394Smrg  func_parse_lt_options \"\$0\" \${1+\"\$@\"}
4004266e564dSmrg
4005698f425bSmrg  # Find the directory that this script lives in.
40069ef0b394Smrg  thisdir=\`\$ECHO \"\$file\" | $SED 's%/[^/]*$%%'\`
4007698f425bSmrg  test \"x\$thisdir\" = \"x\$file\" && thisdir=.
4008266e564dSmrg
4009698f425bSmrg  # Follow symbolic links until we get to the real thisdir.
40109ef0b394Smrg  file=\`ls -ld \"\$file\" | $SED -n 's/.*-> //p'\`
4011698f425bSmrg  while test -n \"\$file\"; do
40129ef0b394Smrg    destdir=\`\$ECHO \"\$file\" | $SED 's%/[^/]*\$%%'\`
4013266e564dSmrg
4014698f425bSmrg    # If there was a directory component, then change thisdir.
4015698f425bSmrg    if test \"x\$destdir\" != \"x\$file\"; then
4016698f425bSmrg      case \"\$destdir\" in
4017698f425bSmrg      [\\\\/]* | [A-Za-z]:[\\\\/]*) thisdir=\"\$destdir\" ;;
4018698f425bSmrg      *) thisdir=\"\$thisdir/\$destdir\" ;;
4019266e564dSmrg      esac
4020698f425bSmrg    fi
4021266e564dSmrg
40229ef0b394Smrg    file=\`\$ECHO \"\$file\" | $SED 's%^.*/%%'\`
40239ef0b394Smrg    file=\`ls -ld \"\$thisdir/\$file\" | $SED -n 's/.*-> //p'\`
4024698f425bSmrg  done
4025266e564dSmrg
4026698f425bSmrg  # Usually 'no', except on cygwin/mingw when embedded into
4027698f425bSmrg  # the cwrapper.
40289ef0b394Smrg  WRAPPER_SCRIPT_BELONGS_IN_OBJDIR=$func_emit_wrapper_arg1
4029698f425bSmrg  if test \"\$WRAPPER_SCRIPT_BELONGS_IN_OBJDIR\" = \"yes\"; then
4030698f425bSmrg    # special case for '.'
4031698f425bSmrg    if test \"\$thisdir\" = \".\"; then
4032698f425bSmrg      thisdir=\`pwd\`
4033698f425bSmrg    fi
4034698f425bSmrg    # remove .libs from thisdir
4035698f425bSmrg    case \"\$thisdir\" in
40369ef0b394Smrg    *[\\\\/]$objdir ) thisdir=\`\$ECHO \"\$thisdir\" | $SED 's%[\\\\/][^\\\\/]*$%%'\` ;;
4037698f425bSmrg    $objdir )   thisdir=. ;;
4038698f425bSmrg    esac
4039698f425bSmrg  fi
4040698f425bSmrg
4041698f425bSmrg  # Try to get the absolute directory name.
4042698f425bSmrg  absdir=\`cd \"\$thisdir\" && pwd\`
4043698f425bSmrg  test -n \"\$absdir\" && thisdir=\"\$absdir\"
4044698f425bSmrg"
4045698f425bSmrg
4046698f425bSmrg	if test "$fast_install" = yes; then
4047698f425bSmrg	  $ECHO "\
4048698f425bSmrg  program=lt-'$outputname'$exeext
4049698f425bSmrg  progdir=\"\$thisdir/$objdir\"
4050698f425bSmrg
4051698f425bSmrg  if test ! -f \"\$progdir/\$program\" ||
4052698f425bSmrg     { file=\`ls -1dt \"\$progdir/\$program\" \"\$progdir/../\$program\" 2>/dev/null | ${SED} 1q\`; \\
4053698f425bSmrg       test \"X\$file\" != \"X\$progdir/\$program\"; }; then
4054698f425bSmrg
4055698f425bSmrg    file=\"\$\$-\$program\"
4056698f425bSmrg
4057698f425bSmrg    if test ! -d \"\$progdir\"; then
4058698f425bSmrg      $MKDIR \"\$progdir\"
4059698f425bSmrg    else
4060698f425bSmrg      $RM \"\$progdir/\$file\"
4061698f425bSmrg    fi"
4062698f425bSmrg
4063698f425bSmrg	  $ECHO "\
4064698f425bSmrg
4065698f425bSmrg    # relink executable if necessary
4066698f425bSmrg    if test -n \"\$relink_command\"; then
4067698f425bSmrg      if relink_command_output=\`eval \$relink_command 2>&1\`; then :
4068698f425bSmrg      else
4069698f425bSmrg	$ECHO \"\$relink_command_output\" >&2
4070698f425bSmrg	$RM \"\$progdir/\$file\"
4071698f425bSmrg	exit 1
4072266e564dSmrg      fi
4073698f425bSmrg    fi
4074266e564dSmrg
4075698f425bSmrg    $MV \"\$progdir/\$file\" \"\$progdir/\$program\" 2>/dev/null ||
4076698f425bSmrg    { $RM \"\$progdir/\$program\";
4077698f425bSmrg      $MV \"\$progdir/\$file\" \"\$progdir/\$program\"; }
4078698f425bSmrg    $RM \"\$progdir/\$file\"
4079698f425bSmrg  fi"
4080698f425bSmrg	else
4081698f425bSmrg	  $ECHO "\
4082698f425bSmrg  program='$outputname'
4083698f425bSmrg  progdir=\"\$thisdir/$objdir\"
4084698f425bSmrg"
4085266e564dSmrg	fi
4086266e564dSmrg
4087698f425bSmrg	$ECHO "\
4088266e564dSmrg
4089698f425bSmrg  if test -f \"\$progdir/\$program\"; then"
4090266e564dSmrg
40919ef0b394Smrg	# fixup the dll searchpath if we need to.
40929ef0b394Smrg	#
40939ef0b394Smrg	# Fix the DLL searchpath if we need to.  Do this before prepending
40949ef0b394Smrg	# to shlibpath, because on Windows, both are PATH and uninstalled
40959ef0b394Smrg	# libraries must come first.
40969ef0b394Smrg	if test -n "$dllsearchpath"; then
40979ef0b394Smrg	  $ECHO "\
40989ef0b394Smrg    # Add the dll search path components to the executable PATH
40999ef0b394Smrg    PATH=$dllsearchpath:\$PATH
41009ef0b394Smrg"
41019ef0b394Smrg	fi
41029ef0b394Smrg
4103698f425bSmrg	# Export our shlibpath_var if we have one.
4104698f425bSmrg	if test "$shlibpath_overrides_runpath" = yes && test -n "$shlibpath_var" && test -n "$temp_rpath"; then
4105698f425bSmrg	  $ECHO "\
4106698f425bSmrg    # Add our own library path to $shlibpath_var
4107698f425bSmrg    $shlibpath_var=\"$temp_rpath\$$shlibpath_var\"
4108266e564dSmrg
4109698f425bSmrg    # Some systems cannot cope with colon-terminated $shlibpath_var
4110698f425bSmrg    # The second colon is a workaround for a bug in BeOS R4 sed
41119ef0b394Smrg    $shlibpath_var=\`\$ECHO \"\$$shlibpath_var\" | $SED 's/::*\$//'\`
4112698f425bSmrg
4113698f425bSmrg    export $shlibpath_var
4114698f425bSmrg"
4115266e564dSmrg	fi
4116266e564dSmrg
4117698f425bSmrg	$ECHO "\
4118698f425bSmrg    if test \"\$libtool_execute_magic\" != \"$magic\"; then
4119698f425bSmrg      # Run the actual program with our arguments.
41209ef0b394Smrg      func_exec_program \${1+\"\$@\"}
4121698f425bSmrg    fi
4122698f425bSmrg  else
4123698f425bSmrg    # The program doesn't exist.
4124698f425bSmrg    \$ECHO \"\$0: error: \\\`\$progdir/\$program' does not exist\" 1>&2
4125698f425bSmrg    \$ECHO \"This script is just a wrapper for \$program.\" 1>&2
41269ef0b394Smrg    \$ECHO \"See the $PACKAGE documentation for more information.\" 1>&2
4127698f425bSmrg    exit 1
4128698f425bSmrg  fi
4129698f425bSmrgfi\
4130698f425bSmrg"
4131698f425bSmrg}
4132266e564dSmrg
4133266e564dSmrg
4134698f425bSmrg# func_emit_cwrapperexe_src
4135698f425bSmrg# emit the source code for a wrapper executable on stdout
4136698f425bSmrg# Must ONLY be called from within func_mode_link because
4137698f425bSmrg# it depends on a number of variable set therein.
4138698f425bSmrgfunc_emit_cwrapperexe_src ()
4139698f425bSmrg{
4140698f425bSmrg	cat <<EOF
4141266e564dSmrg
4142698f425bSmrg/* $cwrappersource - temporary wrapper executable for $objdir/$outputname
4143698f425bSmrg   Generated by $PROGRAM (GNU $PACKAGE$TIMESTAMP) $VERSION
4144266e564dSmrg
4145698f425bSmrg   The $output program cannot be directly executed until all the libtool
4146698f425bSmrg   libraries that it depends on are installed.
4147266e564dSmrg
4148698f425bSmrg   This wrapper executable should never be moved out of the build directory.
4149698f425bSmrg   If it is, it will not operate correctly.
4150698f425bSmrg*/
4151698f425bSmrgEOF
4152698f425bSmrg	    cat <<"EOF"
41539ef0b394Smrg#ifdef _MSC_VER
41549ef0b394Smrg# define _CRT_SECURE_NO_DEPRECATE 1
41559ef0b394Smrg#endif
4156698f425bSmrg#include <stdio.h>
4157698f425bSmrg#include <stdlib.h>
4158698f425bSmrg#ifdef _MSC_VER
4159698f425bSmrg# include <direct.h>
4160698f425bSmrg# include <process.h>
4161698f425bSmrg# include <io.h>
4162698f425bSmrg#else
4163698f425bSmrg# include <unistd.h>
4164698f425bSmrg# include <stdint.h>
4165698f425bSmrg# ifdef __CYGWIN__
4166698f425bSmrg#  include <io.h>
4167698f425bSmrg# endif
4168698f425bSmrg#endif
4169698f425bSmrg#include <malloc.h>
4170698f425bSmrg#include <stdarg.h>
4171698f425bSmrg#include <assert.h>
4172698f425bSmrg#include <string.h>
4173698f425bSmrg#include <ctype.h>
4174698f425bSmrg#include <errno.h>
4175698f425bSmrg#include <fcntl.h>
4176698f425bSmrg#include <sys/stat.h>
4177266e564dSmrg
41789ef0b394Smrg/* declarations of non-ANSI functions */
41799ef0b394Smrg#if defined(__MINGW32__)
41809ef0b394Smrg# ifdef __STRICT_ANSI__
41819ef0b394Smrgint _putenv (const char *);
41829ef0b394Smrg# endif
41839ef0b394Smrg#elif defined(__CYGWIN__)
41849ef0b394Smrg# ifdef __STRICT_ANSI__
41859ef0b394Smrgchar *realpath (const char *, char *);
41869ef0b394Smrgint putenv (char *);
41879ef0b394Smrgint setenv (const char *, const char *, int);
41889ef0b394Smrg# endif
41899ef0b394Smrg/* #elif defined (other platforms) ... */
41909ef0b394Smrg#endif
41919ef0b394Smrg
41929ef0b394Smrg/* portability defines, excluding path handling macros */
41939ef0b394Smrg#if defined(_MSC_VER)
41949ef0b394Smrg# define setmode _setmode
41959ef0b394Smrg# define stat    _stat
41969ef0b394Smrg# define chmod   _chmod
41979ef0b394Smrg# define getcwd  _getcwd
41989ef0b394Smrg# define putenv  _putenv
41999ef0b394Smrg# define S_IXUSR _S_IEXEC
42009ef0b394Smrg# ifndef _INTPTR_T_DEFINED
42019ef0b394Smrg#  define _INTPTR_T_DEFINED
42029ef0b394Smrg#  define intptr_t int
42039ef0b394Smrg# endif
42049ef0b394Smrg#elif defined(__MINGW32__)
42059ef0b394Smrg# define setmode _setmode
42069ef0b394Smrg# define stat    _stat
42079ef0b394Smrg# define chmod   _chmod
42089ef0b394Smrg# define getcwd  _getcwd
42099ef0b394Smrg# define putenv  _putenv
42109ef0b394Smrg#elif defined(__CYGWIN__)
42119ef0b394Smrg# define HAVE_SETENV
42129ef0b394Smrg# define FOPEN_WB "wb"
42139ef0b394Smrg/* #elif defined (other platforms) ... */
42149ef0b394Smrg#endif
42159ef0b394Smrg
4216698f425bSmrg#if defined(PATH_MAX)
4217698f425bSmrg# define LT_PATHMAX PATH_MAX
4218698f425bSmrg#elif defined(MAXPATHLEN)
4219698f425bSmrg# define LT_PATHMAX MAXPATHLEN
4220698f425bSmrg#else
4221698f425bSmrg# define LT_PATHMAX 1024
4222698f425bSmrg#endif
4223266e564dSmrg
4224698f425bSmrg#ifndef S_IXOTH
4225698f425bSmrg# define S_IXOTH 0
4226698f425bSmrg#endif
4227698f425bSmrg#ifndef S_IXGRP
4228698f425bSmrg# define S_IXGRP 0
4229698f425bSmrg#endif
4230266e564dSmrg
42319ef0b394Smrg/* path handling portability macros */
4232698f425bSmrg#ifndef DIR_SEPARATOR
4233698f425bSmrg# define DIR_SEPARATOR '/'
4234698f425bSmrg# define PATH_SEPARATOR ':'
4235698f425bSmrg#endif
4236266e564dSmrg
4237698f425bSmrg#if defined (_WIN32) || defined (__MSDOS__) || defined (__DJGPP__) || \
4238698f425bSmrg  defined (__OS2__)
4239698f425bSmrg# define HAVE_DOS_BASED_FILE_SYSTEM
4240698f425bSmrg# define FOPEN_WB "wb"
4241698f425bSmrg# ifndef DIR_SEPARATOR_2
4242698f425bSmrg#  define DIR_SEPARATOR_2 '\\'
4243698f425bSmrg# endif
4244698f425bSmrg# ifndef PATH_SEPARATOR_2
4245698f425bSmrg#  define PATH_SEPARATOR_2 ';'
4246698f425bSmrg# endif
4247698f425bSmrg#endif
4248266e564dSmrg
4249698f425bSmrg#ifndef DIR_SEPARATOR_2
4250698f425bSmrg# define IS_DIR_SEPARATOR(ch) ((ch) == DIR_SEPARATOR)
4251698f425bSmrg#else /* DIR_SEPARATOR_2 */
4252698f425bSmrg# define IS_DIR_SEPARATOR(ch) \
4253698f425bSmrg	(((ch) == DIR_SEPARATOR) || ((ch) == DIR_SEPARATOR_2))
4254698f425bSmrg#endif /* DIR_SEPARATOR_2 */
4255266e564dSmrg
4256698f425bSmrg#ifndef PATH_SEPARATOR_2
4257698f425bSmrg# define IS_PATH_SEPARATOR(ch) ((ch) == PATH_SEPARATOR)
4258698f425bSmrg#else /* PATH_SEPARATOR_2 */
4259698f425bSmrg# define IS_PATH_SEPARATOR(ch) ((ch) == PATH_SEPARATOR_2)
4260698f425bSmrg#endif /* PATH_SEPARATOR_2 */
4261266e564dSmrg
4262698f425bSmrg#ifndef FOPEN_WB
4263698f425bSmrg# define FOPEN_WB "w"
4264698f425bSmrg#endif
4265698f425bSmrg#ifndef _O_BINARY
4266698f425bSmrg# define _O_BINARY 0
4267698f425bSmrg#endif
4268266e564dSmrg
4269698f425bSmrg#define XMALLOC(type, num)      ((type *) xmalloc ((num) * sizeof(type)))
4270698f425bSmrg#define XFREE(stale) do { \
4271698f425bSmrg  if (stale) { free ((void *) stale); stale = 0; } \
4272698f425bSmrg} while (0)
4273266e564dSmrg
42749ef0b394Smrg#if defined(LT_DEBUGWRAPPER)
42759ef0b394Smrgstatic int lt_debug = 1;
4276698f425bSmrg#else
42779ef0b394Smrgstatic int lt_debug = 0;
4278698f425bSmrg#endif
4279266e564dSmrg
42809ef0b394Smrgconst char *program_name = "libtool-wrapper"; /* in case xstrdup fails */
4281266e564dSmrg
4282698f425bSmrgvoid *xmalloc (size_t num);
4283698f425bSmrgchar *xstrdup (const char *string);
4284698f425bSmrgconst char *base_name (const char *name);
4285698f425bSmrgchar *find_executable (const char *wrapper);
4286698f425bSmrgchar *chase_symlinks (const char *pathspec);
4287698f425bSmrgint make_executable (const char *path);
4288698f425bSmrgint check_executable (const char *path);
4289698f425bSmrgchar *strendzap (char *str, const char *pat);
42909ef0b394Smrgvoid lt_debugprintf (const char *file, int line, const char *fmt, ...);
42919ef0b394Smrgvoid lt_fatal (const char *file, int line, const char *message, ...);
42929ef0b394Smrgstatic const char *nonnull (const char *s);
42939ef0b394Smrgstatic const char *nonempty (const char *s);
4294698f425bSmrgvoid lt_setenv (const char *name, const char *value);
4295698f425bSmrgchar *lt_extend_str (const char *orig_value, const char *add, int to_end);
4296698f425bSmrgvoid lt_update_exe_path (const char *name, const char *value);
4297698f425bSmrgvoid lt_update_lib_path (const char *name, const char *value);
42989ef0b394Smrgchar **prepare_spawn (char **argv);
42999ef0b394Smrgvoid lt_dump_script (FILE *f);
4300698f425bSmrgEOF
4301698f425bSmrg
4302698f425bSmrg	    cat <<EOF
43039ef0b394Smrgvolatile const char * MAGIC_EXE = "$magic_exe";
4304698f425bSmrgconst char * LIB_PATH_VARNAME = "$shlibpath_var";
4305698f425bSmrgEOF
4306266e564dSmrg
4307698f425bSmrg	    if test "$shlibpath_overrides_runpath" = yes && test -n "$shlibpath_var" && test -n "$temp_rpath"; then
43089ef0b394Smrg              func_to_host_path "$temp_rpath"
4309698f425bSmrg	      cat <<EOF
43109ef0b394Smrgconst char * LIB_PATH_VALUE   = "$func_to_host_path_result";
4311698f425bSmrgEOF
4312698f425bSmrg	    else
4313698f425bSmrg	      cat <<"EOF"
4314698f425bSmrgconst char * LIB_PATH_VALUE   = "";
4315698f425bSmrgEOF
4316266e564dSmrg	    fi
4317266e564dSmrg
4318698f425bSmrg	    if test -n "$dllsearchpath"; then
43199ef0b394Smrg              func_to_host_path "$dllsearchpath:"
4320698f425bSmrg	      cat <<EOF
4321698f425bSmrgconst char * EXE_PATH_VARNAME = "PATH";
43229ef0b394Smrgconst char * EXE_PATH_VALUE   = "$func_to_host_path_result";
4323266e564dSmrgEOF
4324266e564dSmrg	    else
4325698f425bSmrg	      cat <<"EOF"
4326698f425bSmrgconst char * EXE_PATH_VARNAME = "";
4327698f425bSmrgconst char * EXE_PATH_VALUE   = "";
4328698f425bSmrgEOF
4329266e564dSmrg	    fi
4330698f425bSmrg
4331698f425bSmrg	    if test "$fast_install" = yes; then
4332698f425bSmrg	      cat <<EOF
4333698f425bSmrgconst char * TARGET_PROGRAM_NAME = "lt-$outputname"; /* hopefully, no .exe */
4334698f425bSmrgEOF
4335266e564dSmrg	    else
4336698f425bSmrg	      cat <<EOF
4337698f425bSmrgconst char * TARGET_PROGRAM_NAME = "$outputname"; /* hopefully, no .exe */
4338698f425bSmrgEOF
4339266e564dSmrg	    fi
4340266e564dSmrg
4341266e564dSmrg
4342698f425bSmrg	    cat <<"EOF"
4343266e564dSmrg
4344698f425bSmrg#define LTWRAPPER_OPTION_PREFIX         "--lt-"
4345266e564dSmrg
4346698f425bSmrgstatic const char *ltwrapper_option_prefix = LTWRAPPER_OPTION_PREFIX;
4347698f425bSmrgstatic const char *dumpscript_opt       = LTWRAPPER_OPTION_PREFIX "dump-script";
43489ef0b394Smrgstatic const char *debug_opt            = LTWRAPPER_OPTION_PREFIX "debug";
4349266e564dSmrg
4350698f425bSmrgint
4351698f425bSmrgmain (int argc, char *argv[])
4352698f425bSmrg{
4353698f425bSmrg  char **newargz;
4354698f425bSmrg  int  newargc;
4355698f425bSmrg  char *tmp_pathspec;
4356698f425bSmrg  char *actual_cwrapper_path;
4357698f425bSmrg  char *actual_cwrapper_name;
4358698f425bSmrg  char *target_name;
4359698f425bSmrg  char *lt_argv_zero;
4360698f425bSmrg  intptr_t rval = 127;
4361266e564dSmrg
4362698f425bSmrg  int i;
4363266e564dSmrg
4364698f425bSmrg  program_name = (char *) xstrdup (base_name (argv[0]));
43659ef0b394Smrg  newargz = XMALLOC (char *, argc + 1);
4366266e564dSmrg
43679ef0b394Smrg  /* very simple arg parsing; don't want to rely on getopt
43689ef0b394Smrg   * also, copy all non cwrapper options to newargz, except
43699ef0b394Smrg   * argz[0], which is handled differently
43709ef0b394Smrg   */
43719ef0b394Smrg  newargc=0;
4372698f425bSmrg  for (i = 1; i < argc; i++)
4373698f425bSmrg    {
4374698f425bSmrg      if (strcmp (argv[i], dumpscript_opt) == 0)
4375698f425bSmrg	{
4376698f425bSmrgEOF
4377698f425bSmrg	    case "$host" in
4378698f425bSmrg	      *mingw* | *cygwin* )
4379698f425bSmrg		# make stdout use "unix" line endings
4380698f425bSmrg		echo "          setmode(1,_O_BINARY);"
4381698f425bSmrg		;;
4382698f425bSmrg	      esac
4383266e564dSmrg
4384698f425bSmrg	    cat <<"EOF"
43859ef0b394Smrg	  lt_dump_script (stdout);
4386698f425bSmrg	  return 0;
4387698f425bSmrg	}
43889ef0b394Smrg      if (strcmp (argv[i], debug_opt) == 0)
43899ef0b394Smrg	{
43909ef0b394Smrg          lt_debug = 1;
43919ef0b394Smrg          continue;
43929ef0b394Smrg	}
43939ef0b394Smrg      if (strcmp (argv[i], ltwrapper_option_prefix) == 0)
43949ef0b394Smrg        {
43959ef0b394Smrg          /* however, if there is an option in the LTWRAPPER_OPTION_PREFIX
43969ef0b394Smrg             namespace, but it is not one of the ones we know about and
43979ef0b394Smrg             have already dealt with, above (inluding dump-script), then
43989ef0b394Smrg             report an error. Otherwise, targets might begin to believe
43999ef0b394Smrg             they are allowed to use options in the LTWRAPPER_OPTION_PREFIX
44009ef0b394Smrg             namespace. The first time any user complains about this, we'll
44019ef0b394Smrg             need to make LTWRAPPER_OPTION_PREFIX a configure-time option
44029ef0b394Smrg             or a configure.ac-settable value.
44039ef0b394Smrg           */
44049ef0b394Smrg          lt_fatal (__FILE__, __LINE__,
44059ef0b394Smrg		    "unrecognized %s option: '%s'",
44069ef0b394Smrg                    ltwrapper_option_prefix, argv[i]);
44079ef0b394Smrg        }
44089ef0b394Smrg      /* otherwise ... */
44099ef0b394Smrg      newargz[++newargc] = xstrdup (argv[i]);
4410698f425bSmrg    }
44119ef0b394Smrg  newargz[++newargc] = NULL;
44129ef0b394Smrg
44139ef0b394SmrgEOF
44149ef0b394Smrg	    cat <<EOF
44159ef0b394Smrg  /* The GNU banner must be the first non-error debug message */
44169ef0b394Smrg  lt_debugprintf (__FILE__, __LINE__, "libtool wrapper (GNU $PACKAGE$TIMESTAMP) $VERSION\n");
44179ef0b394SmrgEOF
44189ef0b394Smrg	    cat <<"EOF"
44199ef0b394Smrg  lt_debugprintf (__FILE__, __LINE__, "(main) argv[0]: %s\n", argv[0]);
44209ef0b394Smrg  lt_debugprintf (__FILE__, __LINE__, "(main) program_name: %s\n", program_name);
4421266e564dSmrg
4422698f425bSmrg  tmp_pathspec = find_executable (argv[0]);
4423698f425bSmrg  if (tmp_pathspec == NULL)
44249ef0b394Smrg    lt_fatal (__FILE__, __LINE__, "couldn't find %s", argv[0]);
44259ef0b394Smrg  lt_debugprintf (__FILE__, __LINE__,
44269ef0b394Smrg                  "(main) found exe (before symlink chase) at: %s\n",
44279ef0b394Smrg		  tmp_pathspec);
4428698f425bSmrg
4429698f425bSmrg  actual_cwrapper_path = chase_symlinks (tmp_pathspec);
44309ef0b394Smrg  lt_debugprintf (__FILE__, __LINE__,
44319ef0b394Smrg                  "(main) found exe (after symlink chase) at: %s\n",
44329ef0b394Smrg		  actual_cwrapper_path);
4433698f425bSmrg  XFREE (tmp_pathspec);
4434698f425bSmrg
44359ef0b394Smrg  actual_cwrapper_name = xstrdup (base_name (actual_cwrapper_path));
4436698f425bSmrg  strendzap (actual_cwrapper_path, actual_cwrapper_name);
4437698f425bSmrg
4438698f425bSmrg  /* wrapper name transforms */
4439698f425bSmrg  strendzap (actual_cwrapper_name, ".exe");
4440698f425bSmrg  tmp_pathspec = lt_extend_str (actual_cwrapper_name, ".exe", 1);
4441698f425bSmrg  XFREE (actual_cwrapper_name);
4442698f425bSmrg  actual_cwrapper_name = tmp_pathspec;
4443698f425bSmrg  tmp_pathspec = 0;
4444698f425bSmrg
4445698f425bSmrg  /* target_name transforms -- use actual target program name; might have lt- prefix */
4446698f425bSmrg  target_name = xstrdup (base_name (TARGET_PROGRAM_NAME));
4447698f425bSmrg  strendzap (target_name, ".exe");
4448698f425bSmrg  tmp_pathspec = lt_extend_str (target_name, ".exe", 1);
4449698f425bSmrg  XFREE (target_name);
4450698f425bSmrg  target_name = tmp_pathspec;
4451698f425bSmrg  tmp_pathspec = 0;
4452698f425bSmrg
44539ef0b394Smrg  lt_debugprintf (__FILE__, __LINE__,
44549ef0b394Smrg		  "(main) libtool target name: %s\n",
44559ef0b394Smrg		  target_name);
4456698f425bSmrgEOF
4457266e564dSmrg
4458698f425bSmrg	    cat <<EOF
4459698f425bSmrg  newargz[0] =
4460698f425bSmrg    XMALLOC (char, (strlen (actual_cwrapper_path) +
4461698f425bSmrg		    strlen ("$objdir") + 1 + strlen (actual_cwrapper_name) + 1));
4462698f425bSmrg  strcpy (newargz[0], actual_cwrapper_path);
4463698f425bSmrg  strcat (newargz[0], "$objdir");
4464698f425bSmrg  strcat (newargz[0], "/");
4465698f425bSmrgEOF
4466266e564dSmrg
4467698f425bSmrg	    cat <<"EOF"
4468698f425bSmrg  /* stop here, and copy so we don't have to do this twice */
4469698f425bSmrg  tmp_pathspec = xstrdup (newargz[0]);
4470266e564dSmrg
4471698f425bSmrg  /* do NOT want the lt- prefix here, so use actual_cwrapper_name */
4472698f425bSmrg  strcat (newargz[0], actual_cwrapper_name);
4473266e564dSmrg
4474698f425bSmrg  /* DO want the lt- prefix here if it exists, so use target_name */
4475698f425bSmrg  lt_argv_zero = lt_extend_str (tmp_pathspec, target_name, 1);
4476698f425bSmrg  XFREE (tmp_pathspec);
4477698f425bSmrg  tmp_pathspec = NULL;
4478698f425bSmrgEOF
4479266e564dSmrg
4480698f425bSmrg	    case $host_os in
4481698f425bSmrg	      mingw*)
4482698f425bSmrg	    cat <<"EOF"
4483698f425bSmrg  {
4484698f425bSmrg    char* p;
4485698f425bSmrg    while ((p = strchr (newargz[0], '\\')) != NULL)
4486698f425bSmrg      {
4487698f425bSmrg	*p = '/';
4488698f425bSmrg      }
4489698f425bSmrg    while ((p = strchr (lt_argv_zero, '\\')) != NULL)
4490698f425bSmrg      {
4491698f425bSmrg	*p = '/';
4492698f425bSmrg      }
4493698f425bSmrg  }
4494698f425bSmrgEOF
4495698f425bSmrg	    ;;
4496698f425bSmrg	    esac
4497266e564dSmrg
4498698f425bSmrg	    cat <<"EOF"
4499698f425bSmrg  XFREE (target_name);
4500698f425bSmrg  XFREE (actual_cwrapper_path);
4501698f425bSmrg  XFREE (actual_cwrapper_name);
4502266e564dSmrg
4503698f425bSmrg  lt_setenv ("BIN_SH", "xpg4"); /* for Tru64 */
4504698f425bSmrg  lt_setenv ("DUALCASE", "1");  /* for MSK sh */
45059ef0b394Smrg  /* Update the DLL searchpath.  EXE_PATH_VALUE ($dllsearchpath) must
45069ef0b394Smrg     be prepended before (that is, appear after) LIB_PATH_VALUE ($temp_rpath)
45079ef0b394Smrg     because on Windows, both *_VARNAMEs are PATH but uninstalled
45089ef0b394Smrg     libraries must come first. */
4509698f425bSmrg  lt_update_exe_path (EXE_PATH_VARNAME, EXE_PATH_VALUE);
45109ef0b394Smrg  lt_update_lib_path (LIB_PATH_VARNAME, LIB_PATH_VALUE);
4511266e564dSmrg
45129ef0b394Smrg  lt_debugprintf (__FILE__, __LINE__, "(main) lt_argv_zero: %s\n",
45139ef0b394Smrg		  nonnull (lt_argv_zero));
4514698f425bSmrg  for (i = 0; i < newargc; i++)
4515698f425bSmrg    {
45169ef0b394Smrg      lt_debugprintf (__FILE__, __LINE__, "(main) newargz[%d]: %s\n",
45179ef0b394Smrg		      i, nonnull (newargz[i]));
4518698f425bSmrg    }
4519266e564dSmrg
4520698f425bSmrgEOF
4521266e564dSmrg
4522698f425bSmrg	    case $host_os in
4523698f425bSmrg	      mingw*)
4524698f425bSmrg		cat <<"EOF"
4525698f425bSmrg  /* execv doesn't actually work on mingw as expected on unix */
45269ef0b394Smrg  newargz = prepare_spawn (newargz);
4527698f425bSmrg  rval = _spawnv (_P_WAIT, lt_argv_zero, (const char * const *) newargz);
4528698f425bSmrg  if (rval == -1)
4529698f425bSmrg    {
4530698f425bSmrg      /* failed to start process */
45319ef0b394Smrg      lt_debugprintf (__FILE__, __LINE__,
45329ef0b394Smrg		      "(main) failed to launch target \"%s\": %s\n",
45339ef0b394Smrg		      lt_argv_zero, nonnull (strerror (errno)));
4534698f425bSmrg      return 127;
4535698f425bSmrg    }
4536698f425bSmrg  return rval;
4537698f425bSmrgEOF
4538698f425bSmrg		;;
4539698f425bSmrg	      *)
4540698f425bSmrg		cat <<"EOF"
4541698f425bSmrg  execv (lt_argv_zero, newargz);
4542698f425bSmrg  return rval; /* =127, but avoids unused variable warning */
4543698f425bSmrgEOF
4544698f425bSmrg		;;
4545698f425bSmrg	    esac
4546266e564dSmrg
4547698f425bSmrg	    cat <<"EOF"
4548698f425bSmrg}
4549266e564dSmrg
4550698f425bSmrgvoid *
4551698f425bSmrgxmalloc (size_t num)
4552698f425bSmrg{
4553698f425bSmrg  void *p = (void *) malloc (num);
4554698f425bSmrg  if (!p)
45559ef0b394Smrg    lt_fatal (__FILE__, __LINE__, "memory exhausted");
4556266e564dSmrg
4557698f425bSmrg  return p;
4558698f425bSmrg}
4559266e564dSmrg
4560698f425bSmrgchar *
4561698f425bSmrgxstrdup (const char *string)
4562698f425bSmrg{
4563698f425bSmrg  return string ? strcpy ((char *) xmalloc (strlen (string) + 1),
4564698f425bSmrg			  string) : NULL;
4565698f425bSmrg}
4566266e564dSmrg
4567698f425bSmrgconst char *
4568698f425bSmrgbase_name (const char *name)
4569698f425bSmrg{
4570698f425bSmrg  const char *base;
4571266e564dSmrg
4572698f425bSmrg#if defined (HAVE_DOS_BASED_FILE_SYSTEM)
4573698f425bSmrg  /* Skip over the disk name in MSDOS pathnames. */
4574698f425bSmrg  if (isalpha ((unsigned char) name[0]) && name[1] == ':')
4575698f425bSmrg    name += 2;
4576698f425bSmrg#endif
4577266e564dSmrg
4578698f425bSmrg  for (base = name; *name; name++)
4579698f425bSmrg    if (IS_DIR_SEPARATOR (*name))
4580698f425bSmrg      base = name + 1;
4581698f425bSmrg  return base;
4582698f425bSmrg}
4583266e564dSmrg
4584698f425bSmrgint
4585698f425bSmrgcheck_executable (const char *path)
4586698f425bSmrg{
4587698f425bSmrg  struct stat st;
4588266e564dSmrg
45899ef0b394Smrg  lt_debugprintf (__FILE__, __LINE__, "(check_executable): %s\n",
45909ef0b394Smrg                  nonempty (path));
4591698f425bSmrg  if ((!path) || (!*path))
4592698f425bSmrg    return 0;
4593266e564dSmrg
4594698f425bSmrg  if ((stat (path, &st) >= 0)
4595698f425bSmrg      && (st.st_mode & (S_IXUSR | S_IXGRP | S_IXOTH)))
4596698f425bSmrg    return 1;
4597698f425bSmrg  else
4598698f425bSmrg    return 0;
4599698f425bSmrg}
4600266e564dSmrg
4601698f425bSmrgint
4602698f425bSmrgmake_executable (const char *path)
4603698f425bSmrg{
4604698f425bSmrg  int rval = 0;
4605698f425bSmrg  struct stat st;
4606266e564dSmrg
46079ef0b394Smrg  lt_debugprintf (__FILE__, __LINE__, "(make_executable): %s\n",
46089ef0b394Smrg                  nonempty (path));
4609698f425bSmrg  if ((!path) || (!*path))
4610698f425bSmrg    return 0;
4611266e564dSmrg
4612698f425bSmrg  if (stat (path, &st) >= 0)
4613698f425bSmrg    {
4614698f425bSmrg      rval = chmod (path, st.st_mode | S_IXOTH | S_IXGRP | S_IXUSR);
4615698f425bSmrg    }
4616698f425bSmrg  return rval;
4617698f425bSmrg}
4618266e564dSmrg
4619698f425bSmrg/* Searches for the full path of the wrapper.  Returns
4620698f425bSmrg   newly allocated full path name if found, NULL otherwise
4621698f425bSmrg   Does not chase symlinks, even on platforms that support them.
4622698f425bSmrg*/
4623698f425bSmrgchar *
4624698f425bSmrgfind_executable (const char *wrapper)
4625698f425bSmrg{
4626698f425bSmrg  int has_slash = 0;
4627698f425bSmrg  const char *p;
4628698f425bSmrg  const char *p_next;
4629698f425bSmrg  /* static buffer for getcwd */
4630698f425bSmrg  char tmp[LT_PATHMAX + 1];
4631698f425bSmrg  int tmp_len;
4632698f425bSmrg  char *concat_name;
4633266e564dSmrg
46349ef0b394Smrg  lt_debugprintf (__FILE__, __LINE__, "(find_executable): %s\n",
46359ef0b394Smrg                  nonempty (wrapper));
4636266e564dSmrg
4637698f425bSmrg  if ((wrapper == NULL) || (*wrapper == '\0'))
4638698f425bSmrg    return NULL;
4639266e564dSmrg
4640698f425bSmrg  /* Absolute path? */
4641698f425bSmrg#if defined (HAVE_DOS_BASED_FILE_SYSTEM)
4642698f425bSmrg  if (isalpha ((unsigned char) wrapper[0]) && wrapper[1] == ':')
4643698f425bSmrg    {
4644698f425bSmrg      concat_name = xstrdup (wrapper);
4645698f425bSmrg      if (check_executable (concat_name))
4646698f425bSmrg	return concat_name;
4647698f425bSmrg      XFREE (concat_name);
4648698f425bSmrg    }
4649698f425bSmrg  else
4650698f425bSmrg    {
4651698f425bSmrg#endif
4652698f425bSmrg      if (IS_DIR_SEPARATOR (wrapper[0]))
4653698f425bSmrg	{
4654698f425bSmrg	  concat_name = xstrdup (wrapper);
4655698f425bSmrg	  if (check_executable (concat_name))
4656698f425bSmrg	    return concat_name;
4657698f425bSmrg	  XFREE (concat_name);
4658698f425bSmrg	}
4659698f425bSmrg#if defined (HAVE_DOS_BASED_FILE_SYSTEM)
4660698f425bSmrg    }
4661698f425bSmrg#endif
4662266e564dSmrg
4663698f425bSmrg  for (p = wrapper; *p; p++)
4664698f425bSmrg    if (*p == '/')
4665698f425bSmrg      {
4666698f425bSmrg	has_slash = 1;
4667698f425bSmrg	break;
4668698f425bSmrg      }
4669698f425bSmrg  if (!has_slash)
4670698f425bSmrg    {
4671698f425bSmrg      /* no slashes; search PATH */
4672698f425bSmrg      const char *path = getenv ("PATH");
4673698f425bSmrg      if (path != NULL)
4674698f425bSmrg	{
4675698f425bSmrg	  for (p = path; *p; p = p_next)
4676698f425bSmrg	    {
4677698f425bSmrg	      const char *q;
4678698f425bSmrg	      size_t p_len;
4679698f425bSmrg	      for (q = p; *q; q++)
4680698f425bSmrg		if (IS_PATH_SEPARATOR (*q))
4681698f425bSmrg		  break;
4682698f425bSmrg	      p_len = q - p;
4683698f425bSmrg	      p_next = (*q == '\0' ? q : q + 1);
4684698f425bSmrg	      if (p_len == 0)
4685698f425bSmrg		{
4686698f425bSmrg		  /* empty path: current directory */
4687698f425bSmrg		  if (getcwd (tmp, LT_PATHMAX) == NULL)
46889ef0b394Smrg		    lt_fatal (__FILE__, __LINE__, "getcwd failed: %s",
46899ef0b394Smrg                              nonnull (strerror (errno)));
4690698f425bSmrg		  tmp_len = strlen (tmp);
4691698f425bSmrg		  concat_name =
4692698f425bSmrg		    XMALLOC (char, tmp_len + 1 + strlen (wrapper) + 1);
4693698f425bSmrg		  memcpy (concat_name, tmp, tmp_len);
4694698f425bSmrg		  concat_name[tmp_len] = '/';
4695698f425bSmrg		  strcpy (concat_name + tmp_len + 1, wrapper);
4696698f425bSmrg		}
4697698f425bSmrg	      else
4698698f425bSmrg		{
4699698f425bSmrg		  concat_name =
4700698f425bSmrg		    XMALLOC (char, p_len + 1 + strlen (wrapper) + 1);
4701698f425bSmrg		  memcpy (concat_name, p, p_len);
4702698f425bSmrg		  concat_name[p_len] = '/';
4703698f425bSmrg		  strcpy (concat_name + p_len + 1, wrapper);
4704698f425bSmrg		}
4705698f425bSmrg	      if (check_executable (concat_name))
4706698f425bSmrg		return concat_name;
4707698f425bSmrg	      XFREE (concat_name);
4708698f425bSmrg	    }
4709698f425bSmrg	}
4710698f425bSmrg      /* not found in PATH; assume curdir */
4711698f425bSmrg    }
4712698f425bSmrg  /* Relative path | not found in path: prepend cwd */
4713698f425bSmrg  if (getcwd (tmp, LT_PATHMAX) == NULL)
47149ef0b394Smrg    lt_fatal (__FILE__, __LINE__, "getcwd failed: %s",
47159ef0b394Smrg              nonnull (strerror (errno)));
4716698f425bSmrg  tmp_len = strlen (tmp);
4717698f425bSmrg  concat_name = XMALLOC (char, tmp_len + 1 + strlen (wrapper) + 1);
4718698f425bSmrg  memcpy (concat_name, tmp, tmp_len);
4719698f425bSmrg  concat_name[tmp_len] = '/';
4720698f425bSmrg  strcpy (concat_name + tmp_len + 1, wrapper);
4721266e564dSmrg
4722698f425bSmrg  if (check_executable (concat_name))
4723698f425bSmrg    return concat_name;
4724698f425bSmrg  XFREE (concat_name);
4725698f425bSmrg  return NULL;
4726698f425bSmrg}
4727266e564dSmrg
4728698f425bSmrgchar *
4729698f425bSmrgchase_symlinks (const char *pathspec)
4730698f425bSmrg{
4731698f425bSmrg#ifndef S_ISLNK
4732698f425bSmrg  return xstrdup (pathspec);
4733698f425bSmrg#else
4734698f425bSmrg  char buf[LT_PATHMAX];
4735698f425bSmrg  struct stat s;
4736698f425bSmrg  char *tmp_pathspec = xstrdup (pathspec);
4737698f425bSmrg  char *p;
4738698f425bSmrg  int has_symlinks = 0;
4739698f425bSmrg  while (strlen (tmp_pathspec) && !has_symlinks)
4740698f425bSmrg    {
47419ef0b394Smrg      lt_debugprintf (__FILE__, __LINE__,
47429ef0b394Smrg		      "checking path component for symlinks: %s\n",
47439ef0b394Smrg		      tmp_pathspec);
4744698f425bSmrg      if (lstat (tmp_pathspec, &s) == 0)
4745698f425bSmrg	{
4746698f425bSmrg	  if (S_ISLNK (s.st_mode) != 0)
4747698f425bSmrg	    {
4748698f425bSmrg	      has_symlinks = 1;
4749698f425bSmrg	      break;
4750698f425bSmrg	    }
4751266e564dSmrg
4752698f425bSmrg	  /* search backwards for last DIR_SEPARATOR */
4753698f425bSmrg	  p = tmp_pathspec + strlen (tmp_pathspec) - 1;
4754698f425bSmrg	  while ((p > tmp_pathspec) && (!IS_DIR_SEPARATOR (*p)))
4755698f425bSmrg	    p--;
4756698f425bSmrg	  if ((p == tmp_pathspec) && (!IS_DIR_SEPARATOR (*p)))
4757698f425bSmrg	    {
4758698f425bSmrg	      /* no more DIR_SEPARATORS left */
4759698f425bSmrg	      break;
4760698f425bSmrg	    }
4761698f425bSmrg	  *p = '\0';
4762698f425bSmrg	}
4763698f425bSmrg      else
4764698f425bSmrg	{
47659ef0b394Smrg	  lt_fatal (__FILE__, __LINE__,
47669ef0b394Smrg		    "error accessing file \"%s\": %s",
47679ef0b394Smrg		    tmp_pathspec, nonnull (strerror (errno)));
4768698f425bSmrg	}
4769698f425bSmrg    }
4770698f425bSmrg  XFREE (tmp_pathspec);
4771266e564dSmrg
4772698f425bSmrg  if (!has_symlinks)
4773698f425bSmrg    {
4774698f425bSmrg      return xstrdup (pathspec);
4775698f425bSmrg    }
4776266e564dSmrg
4777698f425bSmrg  tmp_pathspec = realpath (pathspec, buf);
4778698f425bSmrg  if (tmp_pathspec == 0)
4779698f425bSmrg    {
47809ef0b394Smrg      lt_fatal (__FILE__, __LINE__,
47819ef0b394Smrg		"could not follow symlinks for %s", pathspec);
4782698f425bSmrg    }
4783698f425bSmrg  return xstrdup (tmp_pathspec);
4784698f425bSmrg#endif
4785698f425bSmrg}
4786266e564dSmrg
4787698f425bSmrgchar *
4788698f425bSmrgstrendzap (char *str, const char *pat)
4789698f425bSmrg{
4790698f425bSmrg  size_t len, patlen;
4791266e564dSmrg
4792698f425bSmrg  assert (str != NULL);
4793698f425bSmrg  assert (pat != NULL);
4794266e564dSmrg
4795698f425bSmrg  len = strlen (str);
4796698f425bSmrg  patlen = strlen (pat);
4797266e564dSmrg
4798698f425bSmrg  if (patlen <= len)
4799698f425bSmrg    {
4800698f425bSmrg      str += len - patlen;
4801698f425bSmrg      if (strcmp (str, pat) == 0)
4802698f425bSmrg	*str = '\0';
4803698f425bSmrg    }
4804698f425bSmrg  return str;
4805698f425bSmrg}
4806266e564dSmrg
48079ef0b394Smrgvoid
48089ef0b394Smrglt_debugprintf (const char *file, int line, const char *fmt, ...)
48099ef0b394Smrg{
48109ef0b394Smrg  va_list args;
48119ef0b394Smrg  if (lt_debug)
48129ef0b394Smrg    {
48139ef0b394Smrg      (void) fprintf (stderr, "%s:%s:%d: ", program_name, file, line);
48149ef0b394Smrg      va_start (args, fmt);
48159ef0b394Smrg      (void) vfprintf (stderr, fmt, args);
48169ef0b394Smrg      va_end (args);
48179ef0b394Smrg    }
48189ef0b394Smrg}
48199ef0b394Smrg
4820698f425bSmrgstatic void
48219ef0b394Smrglt_error_core (int exit_status, const char *file,
48229ef0b394Smrg	       int line, const char *mode,
4823698f425bSmrg	       const char *message, va_list ap)
4824698f425bSmrg{
48259ef0b394Smrg  fprintf (stderr, "%s:%s:%d: %s: ", program_name, file, line, mode);
4826698f425bSmrg  vfprintf (stderr, message, ap);
4827698f425bSmrg  fprintf (stderr, ".\n");
4828266e564dSmrg
4829698f425bSmrg  if (exit_status >= 0)
4830698f425bSmrg    exit (exit_status);
4831698f425bSmrg}
4832266e564dSmrg
4833698f425bSmrgvoid
48349ef0b394Smrglt_fatal (const char *file, int line, const char *message, ...)
4835698f425bSmrg{
4836698f425bSmrg  va_list ap;
4837698f425bSmrg  va_start (ap, message);
48389ef0b394Smrg  lt_error_core (EXIT_FAILURE, file, line, "FATAL", message, ap);
4839698f425bSmrg  va_end (ap);
4840698f425bSmrg}
4841266e564dSmrg
48429ef0b394Smrgstatic const char *
48439ef0b394Smrgnonnull (const char *s)
48449ef0b394Smrg{
48459ef0b394Smrg  return s ? s : "(null)";
48469ef0b394Smrg}
48479ef0b394Smrg
48489ef0b394Smrgstatic const char *
48499ef0b394Smrgnonempty (const char *s)
48509ef0b394Smrg{
48519ef0b394Smrg  return (s && !*s) ? "(empty)" : nonnull (s);
48529ef0b394Smrg}
48539ef0b394Smrg
4854698f425bSmrgvoid
4855698f425bSmrglt_setenv (const char *name, const char *value)
4856698f425bSmrg{
48579ef0b394Smrg  lt_debugprintf (__FILE__, __LINE__,
48589ef0b394Smrg		  "(lt_setenv) setting '%s' to '%s'\n",
48599ef0b394Smrg                  nonnull (name), nonnull (value));
4860698f425bSmrg  {
4861698f425bSmrg#ifdef HAVE_SETENV
4862698f425bSmrg    /* always make a copy, for consistency with !HAVE_SETENV */
4863698f425bSmrg    char *str = xstrdup (value);
4864698f425bSmrg    setenv (name, str, 1);
4865698f425bSmrg#else
4866698f425bSmrg    int len = strlen (name) + 1 + strlen (value) + 1;
4867698f425bSmrg    char *str = XMALLOC (char, len);
4868698f425bSmrg    sprintf (str, "%s=%s", name, value);
4869698f425bSmrg    if (putenv (str) != EXIT_SUCCESS)
4870698f425bSmrg      {
4871698f425bSmrg        XFREE (str);
4872698f425bSmrg      }
4873698f425bSmrg#endif
4874698f425bSmrg  }
4875698f425bSmrg}
4876266e564dSmrg
4877698f425bSmrgchar *
4878698f425bSmrglt_extend_str (const char *orig_value, const char *add, int to_end)
4879698f425bSmrg{
4880698f425bSmrg  char *new_value;
4881698f425bSmrg  if (orig_value && *orig_value)
4882698f425bSmrg    {
4883698f425bSmrg      int orig_value_len = strlen (orig_value);
4884698f425bSmrg      int add_len = strlen (add);
4885698f425bSmrg      new_value = XMALLOC (char, add_len + orig_value_len + 1);
4886698f425bSmrg      if (to_end)
4887698f425bSmrg        {
4888698f425bSmrg          strcpy (new_value, orig_value);
4889698f425bSmrg          strcpy (new_value + orig_value_len, add);
4890698f425bSmrg        }
4891698f425bSmrg      else
4892698f425bSmrg        {
4893698f425bSmrg          strcpy (new_value, add);
4894698f425bSmrg          strcpy (new_value + add_len, orig_value);
4895698f425bSmrg        }
4896698f425bSmrg    }
4897698f425bSmrg  else
4898698f425bSmrg    {
4899698f425bSmrg      new_value = xstrdup (add);
4900698f425bSmrg    }
4901698f425bSmrg  return new_value;
4902698f425bSmrg}
4903266e564dSmrg
4904698f425bSmrgvoid
4905698f425bSmrglt_update_exe_path (const char *name, const char *value)
4906698f425bSmrg{
49079ef0b394Smrg  lt_debugprintf (__FILE__, __LINE__,
49089ef0b394Smrg		  "(lt_update_exe_path) modifying '%s' by prepending '%s'\n",
49099ef0b394Smrg                  nonnull (name), nonnull (value));
4910266e564dSmrg
4911698f425bSmrg  if (name && *name && value && *value)
4912698f425bSmrg    {
4913698f425bSmrg      char *new_value = lt_extend_str (getenv (name), value, 0);
4914698f425bSmrg      /* some systems can't cope with a ':'-terminated path #' */
4915698f425bSmrg      int len = strlen (new_value);
4916698f425bSmrg      while (((len = strlen (new_value)) > 0) && IS_PATH_SEPARATOR (new_value[len-1]))
4917698f425bSmrg        {
4918698f425bSmrg          new_value[len-1] = '\0';
4919698f425bSmrg        }
4920698f425bSmrg      lt_setenv (name, new_value);
4921698f425bSmrg      XFREE (new_value);
4922698f425bSmrg    }
4923698f425bSmrg}
4924266e564dSmrg
4925698f425bSmrgvoid
4926698f425bSmrglt_update_lib_path (const char *name, const char *value)
4927698f425bSmrg{
49289ef0b394Smrg  lt_debugprintf (__FILE__, __LINE__,
49299ef0b394Smrg		  "(lt_update_lib_path) modifying '%s' by prepending '%s'\n",
49309ef0b394Smrg                  nonnull (name), nonnull (value));
4931266e564dSmrg
4932698f425bSmrg  if (name && *name && value && *value)
4933698f425bSmrg    {
4934698f425bSmrg      char *new_value = lt_extend_str (getenv (name), value, 0);
4935698f425bSmrg      lt_setenv (name, new_value);
4936698f425bSmrg      XFREE (new_value);
4937698f425bSmrg    }
4938698f425bSmrg}
4939266e564dSmrg
49409ef0b394SmrgEOF
49419ef0b394Smrg	    case $host_os in
49429ef0b394Smrg	      mingw*)
49439ef0b394Smrg		cat <<"EOF"
49449ef0b394Smrg
49459ef0b394Smrg/* Prepares an argument vector before calling spawn().
49469ef0b394Smrg   Note that spawn() does not by itself call the command interpreter
49479ef0b394Smrg     (getenv ("COMSPEC") != NULL ? getenv ("COMSPEC") :
49489ef0b394Smrg      ({ OSVERSIONINFO v; v.dwOSVersionInfoSize = sizeof(OSVERSIONINFO);
49499ef0b394Smrg         GetVersionEx(&v);
49509ef0b394Smrg         v.dwPlatformId == VER_PLATFORM_WIN32_NT;
49519ef0b394Smrg      }) ? "cmd.exe" : "command.com").
49529ef0b394Smrg   Instead it simply concatenates the arguments, separated by ' ', and calls
49539ef0b394Smrg   CreateProcess().  We must quote the arguments since Win32 CreateProcess()
49549ef0b394Smrg   interprets characters like ' ', '\t', '\\', '"' (but not '<' and '>') in a
49559ef0b394Smrg   special way:
49569ef0b394Smrg   - Space and tab are interpreted as delimiters. They are not treated as
49579ef0b394Smrg     delimiters if they are surrounded by double quotes: "...".
49589ef0b394Smrg   - Unescaped double quotes are removed from the input. Their only effect is
49599ef0b394Smrg     that within double quotes, space and tab are treated like normal
49609ef0b394Smrg     characters.
49619ef0b394Smrg   - Backslashes not followed by double quotes are not special.
49629ef0b394Smrg   - But 2*n+1 backslashes followed by a double quote become
49639ef0b394Smrg     n backslashes followed by a double quote (n >= 0):
49649ef0b394Smrg       \" -> "
49659ef0b394Smrg       \\\" -> \"
49669ef0b394Smrg       \\\\\" -> \\"
49679ef0b394Smrg */
49689ef0b394Smrg#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"
49699ef0b394Smrg#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"
49709ef0b394Smrgchar **
49719ef0b394Smrgprepare_spawn (char **argv)
49729ef0b394Smrg{
49739ef0b394Smrg  size_t argc;
49749ef0b394Smrg  char **new_argv;
49759ef0b394Smrg  size_t i;
49769ef0b394Smrg
49779ef0b394Smrg  /* Count number of arguments.  */
49789ef0b394Smrg  for (argc = 0; argv[argc] != NULL; argc++)
49799ef0b394Smrg    ;
49809ef0b394Smrg
49819ef0b394Smrg  /* Allocate new argument vector.  */
49829ef0b394Smrg  new_argv = XMALLOC (char *, argc + 1);
49839ef0b394Smrg
49849ef0b394Smrg  /* Put quoted arguments into the new argument vector.  */
49859ef0b394Smrg  for (i = 0; i < argc; i++)
49869ef0b394Smrg    {
49879ef0b394Smrg      const char *string = argv[i];
49889ef0b394Smrg
49899ef0b394Smrg      if (string[0] == '\0')
49909ef0b394Smrg	new_argv[i] = xstrdup ("\"\"");
49919ef0b394Smrg      else if (strpbrk (string, SHELL_SPECIAL_CHARS) != NULL)
49929ef0b394Smrg	{
49939ef0b394Smrg	  int quote_around = (strpbrk (string, SHELL_SPACE_CHARS) != NULL);
49949ef0b394Smrg	  size_t length;
49959ef0b394Smrg	  unsigned int backslashes;
49969ef0b394Smrg	  const char *s;
49979ef0b394Smrg	  char *quoted_string;
49989ef0b394Smrg	  char *p;
49999ef0b394Smrg
50009ef0b394Smrg	  length = 0;
50019ef0b394Smrg	  backslashes = 0;
50029ef0b394Smrg	  if (quote_around)
50039ef0b394Smrg	    length++;
50049ef0b394Smrg	  for (s = string; *s != '\0'; s++)
50059ef0b394Smrg	    {
50069ef0b394Smrg	      char c = *s;
50079ef0b394Smrg	      if (c == '"')
50089ef0b394Smrg		length += backslashes + 1;
50099ef0b394Smrg	      length++;
50109ef0b394Smrg	      if (c == '\\')
50119ef0b394Smrg		backslashes++;
50129ef0b394Smrg	      else
50139ef0b394Smrg		backslashes = 0;
50149ef0b394Smrg	    }
50159ef0b394Smrg	  if (quote_around)
50169ef0b394Smrg	    length += backslashes + 1;
50179ef0b394Smrg
50189ef0b394Smrg	  quoted_string = XMALLOC (char, length + 1);
50199ef0b394Smrg
50209ef0b394Smrg	  p = quoted_string;
50219ef0b394Smrg	  backslashes = 0;
50229ef0b394Smrg	  if (quote_around)
50239ef0b394Smrg	    *p++ = '"';
50249ef0b394Smrg	  for (s = string; *s != '\0'; s++)
50259ef0b394Smrg	    {
50269ef0b394Smrg	      char c = *s;
50279ef0b394Smrg	      if (c == '"')
50289ef0b394Smrg		{
50299ef0b394Smrg		  unsigned int j;
50309ef0b394Smrg		  for (j = backslashes + 1; j > 0; j--)
50319ef0b394Smrg		    *p++ = '\\';
50329ef0b394Smrg		}
50339ef0b394Smrg	      *p++ = c;
50349ef0b394Smrg	      if (c == '\\')
50359ef0b394Smrg		backslashes++;
50369ef0b394Smrg	      else
50379ef0b394Smrg		backslashes = 0;
50389ef0b394Smrg	    }
50399ef0b394Smrg	  if (quote_around)
50409ef0b394Smrg	    {
50419ef0b394Smrg	      unsigned int j;
50429ef0b394Smrg	      for (j = backslashes; j > 0; j--)
50439ef0b394Smrg		*p++ = '\\';
50449ef0b394Smrg	      *p++ = '"';
50459ef0b394Smrg	    }
50469ef0b394Smrg	  *p = '\0';
50479ef0b394Smrg
50489ef0b394Smrg	  new_argv[i] = quoted_string;
50499ef0b394Smrg	}
50509ef0b394Smrg      else
50519ef0b394Smrg	new_argv[i] = (char *) string;
50529ef0b394Smrg    }
50539ef0b394Smrg  new_argv[argc] = NULL;
50549ef0b394Smrg
50559ef0b394Smrg  return new_argv;
50569ef0b394Smrg}
50579ef0b394SmrgEOF
50589ef0b394Smrg		;;
50599ef0b394Smrg	    esac
50609ef0b394Smrg
50619ef0b394Smrg            cat <<"EOF"
50629ef0b394Smrgvoid lt_dump_script (FILE* f)
50639ef0b394Smrg{
50649ef0b394SmrgEOF
50659ef0b394Smrg	    func_emit_wrapper yes |
5066fb5e8d76Smrg	      $SED -n -e '
5067fb5e8d76Smrgs/^\(.\{79\}\)\(..*\)/\1\
5068fb5e8d76Smrg\2/
5069fb5e8d76Smrgh
5070fb5e8d76Smrgs/\([\\"]\)/\\\1/g
5071fb5e8d76Smrgs/$/\\n/
5072fb5e8d76Smrgs/\([^\n]*\).*/  fputs ("\1", f);/p
5073fb5e8d76Smrgg
5074fb5e8d76SmrgD'
50759ef0b394Smrg            cat <<"EOF"
50769ef0b394Smrg}
5077698f425bSmrgEOF
5078698f425bSmrg}
5079698f425bSmrg# end: func_emit_cwrapperexe_src
5080266e564dSmrg
50819ef0b394Smrg# func_win32_import_lib_p ARG
50829ef0b394Smrg# True if ARG is an import lib, as indicated by $file_magic_cmd
50839ef0b394Smrgfunc_win32_import_lib_p ()
50849ef0b394Smrg{
50859ef0b394Smrg    $opt_debug
50869ef0b394Smrg    case `eval $file_magic_cmd \"\$1\" 2>/dev/null | $SED -e 10q` in
50879ef0b394Smrg    *import*) : ;;
50889ef0b394Smrg    *) false ;;
50899ef0b394Smrg    esac
50909ef0b394Smrg}
50919ef0b394Smrg
5092698f425bSmrg# func_mode_link arg...
5093698f425bSmrgfunc_mode_link ()
5094698f425bSmrg{
5095698f425bSmrg    $opt_debug
5096698f425bSmrg    case $host in
5097698f425bSmrg    *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-cegcc*)
5098698f425bSmrg      # It is impossible to link a dll without this setting, and
5099698f425bSmrg      # we shouldn't force the makefile maintainer to figure out
5100698f425bSmrg      # which system we are compiling for in order to pass an extra
5101698f425bSmrg      # flag for every libtool invocation.
5102698f425bSmrg      # allow_undefined=no
5103266e564dSmrg
5104698f425bSmrg      # FIXME: Unfortunately, there are problems with the above when trying
5105698f425bSmrg      # to make a dll which has undefined symbols, in which case not
5106698f425bSmrg      # even a static library is built.  For now, we need to specify
5107698f425bSmrg      # -no-undefined on the libtool link line when we can be certain
5108698f425bSmrg      # that all symbols are satisfied, otherwise we get a static library.
5109698f425bSmrg      allow_undefined=yes
5110698f425bSmrg      ;;
5111698f425bSmrg    *)
5112698f425bSmrg      allow_undefined=yes
5113698f425bSmrg      ;;
5114698f425bSmrg    esac
5115698f425bSmrg    libtool_args=$nonopt
5116698f425bSmrg    base_compile="$nonopt $@"
5117698f425bSmrg    compile_command=$nonopt
5118698f425bSmrg    finalize_command=$nonopt
5119266e564dSmrg
5120698f425bSmrg    compile_rpath=
5121698f425bSmrg    finalize_rpath=
5122698f425bSmrg    compile_shlibpath=
5123698f425bSmrg    finalize_shlibpath=
5124698f425bSmrg    convenience=
5125698f425bSmrg    old_convenience=
5126698f425bSmrg    deplibs=
5127698f425bSmrg    old_deplibs=
5128698f425bSmrg    compiler_flags=
5129698f425bSmrg    linker_flags=
5130698f425bSmrg    dllsearchpath=
5131698f425bSmrg    lib_search_path=`pwd`
5132698f425bSmrg    inst_prefix_dir=
5133698f425bSmrg    new_inherited_linker_flags=
5134266e564dSmrg
5135698f425bSmrg    avoid_version=no
51369ef0b394Smrg    bindir=
5137698f425bSmrg    dlfiles=
5138698f425bSmrg    dlprefiles=
5139698f425bSmrg    dlself=no
5140698f425bSmrg    export_dynamic=no
5141698f425bSmrg    export_symbols=
5142698f425bSmrg    export_symbols_regex=
5143698f425bSmrg    generated=
5144698f425bSmrg    libobjs=
5145698f425bSmrg    ltlibs=
5146698f425bSmrg    module=no
5147698f425bSmrg    no_install=no
5148698f425bSmrg    objs=
5149698f425bSmrg    non_pic_objects=
5150698f425bSmrg    precious_files_regex=
5151698f425bSmrg    prefer_static_libs=no
5152698f425bSmrg    preload=no
5153698f425bSmrg    prev=
5154698f425bSmrg    prevarg=
5155698f425bSmrg    release=
5156698f425bSmrg    rpath=
5157698f425bSmrg    xrpath=
5158698f425bSmrg    perm_rpath=
5159698f425bSmrg    temp_rpath=
5160698f425bSmrg    thread_safe=no
5161698f425bSmrg    vinfo=
5162698f425bSmrg    vinfo_number=no
5163698f425bSmrg    weak_libs=
5164698f425bSmrg    single_module="${wl}-single_module"
5165698f425bSmrg    func_infer_tag $base_compile
5166266e564dSmrg
5167698f425bSmrg    # We need to know -static, to get the right output filenames.
5168698f425bSmrg    for arg
5169698f425bSmrg    do
5170698f425bSmrg      case $arg in
5171698f425bSmrg      -shared)
5172698f425bSmrg	test "$build_libtool_libs" != yes && \
5173698f425bSmrg	  func_fatal_configuration "can not build a shared library"
5174698f425bSmrg	build_old_libs=no
5175698f425bSmrg	break
5176698f425bSmrg	;;
5177698f425bSmrg      -all-static | -static | -static-libtool-libs)
5178698f425bSmrg	case $arg in
5179698f425bSmrg	-all-static)
5180698f425bSmrg	  if test "$build_libtool_libs" = yes && test -z "$link_static_flag"; then
5181698f425bSmrg	    func_warning "complete static linking is impossible in this configuration"
5182698f425bSmrg	  fi
5183698f425bSmrg	  if test -n "$link_static_flag"; then
5184698f425bSmrg	    dlopen_self=$dlopen_self_static
5185698f425bSmrg	  fi
5186698f425bSmrg	  prefer_static_libs=yes
5187698f425bSmrg	  ;;
5188698f425bSmrg	-static)
5189698f425bSmrg	  if test -z "$pic_flag" && test -n "$link_static_flag"; then
5190698f425bSmrg	    dlopen_self=$dlopen_self_static
5191698f425bSmrg	  fi
5192698f425bSmrg	  prefer_static_libs=built
5193698f425bSmrg	  ;;
5194698f425bSmrg	-static-libtool-libs)
5195698f425bSmrg	  if test -z "$pic_flag" && test -n "$link_static_flag"; then
5196698f425bSmrg	    dlopen_self=$dlopen_self_static
5197698f425bSmrg	  fi
5198698f425bSmrg	  prefer_static_libs=yes
5199698f425bSmrg	  ;;
5200698f425bSmrg	esac
5201698f425bSmrg	build_libtool_libs=no
5202698f425bSmrg	build_old_libs=yes
5203698f425bSmrg	break
5204698f425bSmrg	;;
5205698f425bSmrg      esac
5206698f425bSmrg    done
5207266e564dSmrg
5208698f425bSmrg    # See if our shared archives depend on static archives.
5209698f425bSmrg    test -n "$old_archive_from_new_cmds" && build_old_libs=yes
5210266e564dSmrg
5211698f425bSmrg    # Go through the arguments, transforming them on the way.
5212698f425bSmrg    while test "$#" -gt 0; do
5213698f425bSmrg      arg="$1"
5214698f425bSmrg      shift
5215698f425bSmrg      func_quote_for_eval "$arg"
5216698f425bSmrg      qarg=$func_quote_for_eval_unquoted_result
5217698f425bSmrg      func_append libtool_args " $func_quote_for_eval_result"
5218266e564dSmrg
5219698f425bSmrg      # If the previous option needs an argument, assign it.
5220698f425bSmrg      if test -n "$prev"; then
5221698f425bSmrg	case $prev in
5222698f425bSmrg	output)
5223698f425bSmrg	  func_append compile_command " @OUTPUT@"
5224698f425bSmrg	  func_append finalize_command " @OUTPUT@"
5225698f425bSmrg	  ;;
5226698f425bSmrg	esac
5227266e564dSmrg
5228698f425bSmrg	case $prev in
52299ef0b394Smrg	bindir)
52309ef0b394Smrg	  bindir="$arg"
52319ef0b394Smrg	  prev=
52329ef0b394Smrg	  continue
52339ef0b394Smrg	  ;;
5234698f425bSmrg	dlfiles|dlprefiles)
5235698f425bSmrg	  if test "$preload" = no; then
5236698f425bSmrg	    # Add the symbol object into the linking commands.
5237698f425bSmrg	    func_append compile_command " @SYMFILE@"
5238698f425bSmrg	    func_append finalize_command " @SYMFILE@"
5239698f425bSmrg	    preload=yes
5240266e564dSmrg	  fi
5241698f425bSmrg	  case $arg in
5242698f425bSmrg	  *.la | *.lo) ;;  # We handle these cases below.
5243698f425bSmrg	  force)
5244698f425bSmrg	    if test "$dlself" = no; then
5245698f425bSmrg	      dlself=needless
5246698f425bSmrg	      export_dynamic=yes
5247698f425bSmrg	    fi
5248698f425bSmrg	    prev=
5249698f425bSmrg	    continue
5250698f425bSmrg	    ;;
5251698f425bSmrg	  self)
5252698f425bSmrg	    if test "$prev" = dlprefiles; then
5253698f425bSmrg	      dlself=yes
5254698f425bSmrg	    elif test "$prev" = dlfiles && test "$dlopen_self" != yes; then
5255698f425bSmrg	      dlself=yes
5256698f425bSmrg	    else
5257698f425bSmrg	      dlself=needless
5258698f425bSmrg	      export_dynamic=yes
5259698f425bSmrg	    fi
5260698f425bSmrg	    prev=
5261698f425bSmrg	    continue
5262698f425bSmrg	    ;;
5263698f425bSmrg	  *)
5264698f425bSmrg	    if test "$prev" = dlfiles; then
52659ef0b394Smrg	      func_append dlfiles " $arg"
5266698f425bSmrg	    else
52679ef0b394Smrg	      func_append dlprefiles " $arg"
5268698f425bSmrg	    fi
5269698f425bSmrg	    prev=
5270698f425bSmrg	    continue
5271698f425bSmrg	    ;;
5272698f425bSmrg	  esac
5273698f425bSmrg	  ;;
5274698f425bSmrg	expsyms)
5275698f425bSmrg	  export_symbols="$arg"
5276698f425bSmrg	  test -f "$arg" \
5277698f425bSmrg	    || func_fatal_error "symbol file \`$arg' does not exist"
5278698f425bSmrg	  prev=
5279698f425bSmrg	  continue
5280698f425bSmrg	  ;;
5281698f425bSmrg	expsyms_regex)
5282698f425bSmrg	  export_symbols_regex="$arg"
5283698f425bSmrg	  prev=
5284698f425bSmrg	  continue
5285698f425bSmrg	  ;;
5286698f425bSmrg	framework)
5287266e564dSmrg	  case $host in
5288698f425bSmrg	    *-*-darwin*)
5289698f425bSmrg	      case "$deplibs " in
5290698f425bSmrg		*" $qarg.ltframework "*) ;;
52919ef0b394Smrg		*) func_append deplibs " $qarg.ltframework" # this is fixed later
5292698f425bSmrg		   ;;
5293698f425bSmrg	      esac
5294698f425bSmrg	      ;;
5295266e564dSmrg	  esac
5296698f425bSmrg	  prev=
5297698f425bSmrg	  continue
5298266e564dSmrg	  ;;
5299698f425bSmrg	inst_prefix)
5300698f425bSmrg	  inst_prefix_dir="$arg"
5301698f425bSmrg	  prev=
5302698f425bSmrg	  continue
5303266e564dSmrg	  ;;
5304698f425bSmrg	objectlist)
5305698f425bSmrg	  if test -f "$arg"; then
5306698f425bSmrg	    save_arg=$arg
5307698f425bSmrg	    moreargs=
5308698f425bSmrg	    for fil in `cat "$save_arg"`
5309698f425bSmrg	    do
53109ef0b394Smrg#	      func_append moreargs " $fil"
5311698f425bSmrg	      arg=$fil
5312698f425bSmrg	      # A libtool-controlled object.
5313266e564dSmrg
5314698f425bSmrg	      # Check to see that this really is a libtool object.
5315698f425bSmrg	      if func_lalib_unsafe_p "$arg"; then
5316698f425bSmrg		pic_object=
5317698f425bSmrg		non_pic_object=
5318266e564dSmrg
5319698f425bSmrg		# Read the .lo file
5320698f425bSmrg		func_source "$arg"
5321266e564dSmrg
5322698f425bSmrg		if test -z "$pic_object" ||
5323698f425bSmrg		   test -z "$non_pic_object" ||
5324698f425bSmrg		   test "$pic_object" = none &&
5325698f425bSmrg		   test "$non_pic_object" = none; then
5326698f425bSmrg		  func_fatal_error "cannot find name of object for \`$arg'"
5327698f425bSmrg		fi
5328266e564dSmrg
5329698f425bSmrg		# Extract subdirectory from the argument.
5330698f425bSmrg		func_dirname "$arg" "/" ""
5331698f425bSmrg		xdir="$func_dirname_result"
5332266e564dSmrg
5333698f425bSmrg		if test "$pic_object" != none; then
5334698f425bSmrg		  # Prepend the subdirectory the object is found in.
5335698f425bSmrg		  pic_object="$xdir$pic_object"
5336266e564dSmrg
5337698f425bSmrg		  if test "$prev" = dlfiles; then
5338698f425bSmrg		    if test "$build_libtool_libs" = yes && test "$dlopen_support" = yes; then
53399ef0b394Smrg		      func_append dlfiles " $pic_object"
5340698f425bSmrg		      prev=
5341698f425bSmrg		      continue
5342698f425bSmrg		    else
5343698f425bSmrg		      # If libtool objects are unsupported, then we need to preload.
5344698f425bSmrg		      prev=dlprefiles
5345698f425bSmrg		    fi
5346698f425bSmrg		  fi
5347266e564dSmrg
5348698f425bSmrg		  # CHECK ME:  I think I busted this.  -Ossama
5349698f425bSmrg		  if test "$prev" = dlprefiles; then
5350698f425bSmrg		    # Preload the old-style object.
53519ef0b394Smrg		    func_append dlprefiles " $pic_object"
5352698f425bSmrg		    prev=
5353698f425bSmrg		  fi
5354266e564dSmrg
5355698f425bSmrg		  # A PIC object.
5356698f425bSmrg		  func_append libobjs " $pic_object"
5357698f425bSmrg		  arg="$pic_object"
5358698f425bSmrg		fi
5359266e564dSmrg
5360698f425bSmrg		# Non-PIC object.
5361698f425bSmrg		if test "$non_pic_object" != none; then
5362698f425bSmrg		  # Prepend the subdirectory the object is found in.
5363698f425bSmrg		  non_pic_object="$xdir$non_pic_object"
5364698f425bSmrg
5365698f425bSmrg		  # A standard non-PIC object
5366698f425bSmrg		  func_append non_pic_objects " $non_pic_object"
5367698f425bSmrg		  if test -z "$pic_object" || test "$pic_object" = none ; then
5368698f425bSmrg		    arg="$non_pic_object"
5369698f425bSmrg		  fi
5370698f425bSmrg		else
5371698f425bSmrg		  # If the PIC object exists, use it instead.
5372698f425bSmrg		  # $xdir was prepended to $pic_object above.
5373698f425bSmrg		  non_pic_object="$pic_object"
5374698f425bSmrg		  func_append non_pic_objects " $non_pic_object"
5375698f425bSmrg		fi
5376698f425bSmrg	      else
5377698f425bSmrg		# Only an error if not doing a dry-run.
5378698f425bSmrg		if $opt_dry_run; then
5379698f425bSmrg		  # Extract subdirectory from the argument.
5380698f425bSmrg		  func_dirname "$arg" "/" ""
5381698f425bSmrg		  xdir="$func_dirname_result"
5382698f425bSmrg
5383698f425bSmrg		  func_lo2o "$arg"
5384698f425bSmrg		  pic_object=$xdir$objdir/$func_lo2o_result
5385698f425bSmrg		  non_pic_object=$xdir$func_lo2o_result
5386698f425bSmrg		  func_append libobjs " $pic_object"
5387698f425bSmrg		  func_append non_pic_objects " $non_pic_object"
5388698f425bSmrg	        else
5389698f425bSmrg		  func_fatal_error "\`$arg' is not a valid libtool object"
5390698f425bSmrg		fi
5391698f425bSmrg	      fi
5392698f425bSmrg	    done
5393266e564dSmrg	  else
5394698f425bSmrg	    func_fatal_error "link input file \`$arg' does not exist"
5395266e564dSmrg	  fi
5396698f425bSmrg	  arg=$save_arg
5397698f425bSmrg	  prev=
5398698f425bSmrg	  continue
5399698f425bSmrg	  ;;
5400698f425bSmrg	precious_regex)
5401698f425bSmrg	  precious_files_regex="$arg"
5402698f425bSmrg	  prev=
5403698f425bSmrg	  continue
5404698f425bSmrg	  ;;
5405698f425bSmrg	release)
5406698f425bSmrg	  release="-$arg"
5407698f425bSmrg	  prev=
5408698f425bSmrg	  continue
5409698f425bSmrg	  ;;
5410698f425bSmrg	rpath | xrpath)
5411698f425bSmrg	  # We need an absolute path.
5412698f425bSmrg	  case $arg in
5413698f425bSmrg	  [\\/]* | [A-Za-z]:[\\/]*) ;;
5414698f425bSmrg	  *)
5415698f425bSmrg	    func_fatal_error "only absolute run-paths are allowed"
5416698f425bSmrg	    ;;
5417698f425bSmrg	  esac
5418698f425bSmrg	  if test "$prev" = rpath; then
5419698f425bSmrg	    case "$rpath " in
5420698f425bSmrg	    *" $arg "*) ;;
54219ef0b394Smrg	    *) func_append rpath " $arg" ;;
5422698f425bSmrg	    esac
5423266e564dSmrg	  else
5424698f425bSmrg	    case "$xrpath " in
5425698f425bSmrg	    *" $arg "*) ;;
54269ef0b394Smrg	    *) func_append xrpath " $arg" ;;
5427698f425bSmrg	    esac
5428266e564dSmrg	  fi
5429698f425bSmrg	  prev=
5430698f425bSmrg	  continue
5431698f425bSmrg	  ;;
5432698f425bSmrg	shrext)
5433698f425bSmrg	  shrext_cmds="$arg"
5434698f425bSmrg	  prev=
5435698f425bSmrg	  continue
5436698f425bSmrg	  ;;
5437698f425bSmrg	weak)
54389ef0b394Smrg	  func_append weak_libs " $arg"
5439698f425bSmrg	  prev=
5440698f425bSmrg	  continue
5441698f425bSmrg	  ;;
5442698f425bSmrg	xcclinker)
54439ef0b394Smrg	  func_append linker_flags " $qarg"
54449ef0b394Smrg	  func_append compiler_flags " $qarg"
5445698f425bSmrg	  prev=
5446698f425bSmrg	  func_append compile_command " $qarg"
5447698f425bSmrg	  func_append finalize_command " $qarg"
5448698f425bSmrg	  continue
5449698f425bSmrg	  ;;
5450698f425bSmrg	xcompiler)
54519ef0b394Smrg	  func_append compiler_flags " $qarg"
5452698f425bSmrg	  prev=
5453698f425bSmrg	  func_append compile_command " $qarg"
5454698f425bSmrg	  func_append finalize_command " $qarg"
5455698f425bSmrg	  continue
5456698f425bSmrg	  ;;
5457698f425bSmrg	xlinker)
54589ef0b394Smrg	  func_append linker_flags " $qarg"
54599ef0b394Smrg	  func_append compiler_flags " $wl$qarg"
5460698f425bSmrg	  prev=
5461698f425bSmrg	  func_append compile_command " $wl$qarg"
5462698f425bSmrg	  func_append finalize_command " $wl$qarg"
5463698f425bSmrg	  continue
5464698f425bSmrg	  ;;
5465698f425bSmrg	*)
5466698f425bSmrg	  eval "$prev=\"\$arg\""
5467698f425bSmrg	  prev=
5468698f425bSmrg	  continue
5469698f425bSmrg	  ;;
5470266e564dSmrg	esac
5471698f425bSmrg      fi # test -n "$prev"
5472266e564dSmrg
5473698f425bSmrg      prevarg="$arg"
5474266e564dSmrg
5475698f425bSmrg      case $arg in
5476698f425bSmrg      -all-static)
5477698f425bSmrg	if test -n "$link_static_flag"; then
5478698f425bSmrg	  # See comment for -static flag below, for more details.
5479698f425bSmrg	  func_append compile_command " $link_static_flag"
5480698f425bSmrg	  func_append finalize_command " $link_static_flag"
5481698f425bSmrg	fi
5482698f425bSmrg	continue
5483698f425bSmrg	;;
5484266e564dSmrg
5485698f425bSmrg      -allow-undefined)
5486698f425bSmrg	# FIXME: remove this flag sometime in the future.
5487698f425bSmrg	func_fatal_error "\`-allow-undefined' must not be used because it is the default"
5488698f425bSmrg	;;
5489266e564dSmrg
5490698f425bSmrg      -avoid-version)
5491698f425bSmrg	avoid_version=yes
5492698f425bSmrg	continue
5493698f425bSmrg	;;
5494266e564dSmrg
54959ef0b394Smrg      -bindir)
54969ef0b394Smrg	prev=bindir
54979ef0b394Smrg	continue
54989ef0b394Smrg	;;
54999ef0b394Smrg
5500698f425bSmrg      -dlopen)
5501698f425bSmrg	prev=dlfiles
5502698f425bSmrg	continue
5503698f425bSmrg	;;
5504266e564dSmrg
5505698f425bSmrg      -dlpreopen)
5506698f425bSmrg	prev=dlprefiles
5507698f425bSmrg	continue
5508698f425bSmrg	;;
5509266e564dSmrg
5510698f425bSmrg      -export-dynamic)
5511698f425bSmrg	export_dynamic=yes
5512698f425bSmrg	continue
5513698f425bSmrg	;;
5514266e564dSmrg
5515698f425bSmrg      -export-symbols | -export-symbols-regex)
5516698f425bSmrg	if test -n "$export_symbols" || test -n "$export_symbols_regex"; then
5517698f425bSmrg	  func_fatal_error "more than one -exported-symbols argument is not allowed"
5518698f425bSmrg	fi
5519698f425bSmrg	if test "X$arg" = "X-export-symbols"; then
5520698f425bSmrg	  prev=expsyms
5521698f425bSmrg	else
5522698f425bSmrg	  prev=expsyms_regex
5523698f425bSmrg	fi
5524698f425bSmrg	continue
5525698f425bSmrg	;;
5526266e564dSmrg
5527698f425bSmrg      -framework)
5528698f425bSmrg	prev=framework
5529698f425bSmrg	continue
5530698f425bSmrg	;;
5531266e564dSmrg
5532698f425bSmrg      -inst-prefix-dir)
5533698f425bSmrg	prev=inst_prefix
5534698f425bSmrg	continue
5535698f425bSmrg	;;
5536266e564dSmrg
5537698f425bSmrg      # The native IRIX linker understands -LANG:*, -LIST:* and -LNO:*
5538698f425bSmrg      # so, if we see these flags be careful not to treat them like -L
5539698f425bSmrg      -L[A-Z][A-Z]*:*)
5540698f425bSmrg	case $with_gcc/$host in
5541698f425bSmrg	no/*-*-irix* | /*-*-irix*)
5542698f425bSmrg	  func_append compile_command " $arg"
5543698f425bSmrg	  func_append finalize_command " $arg"
5544698f425bSmrg	  ;;
5545698f425bSmrg	esac
5546698f425bSmrg	continue
5547698f425bSmrg	;;
5548266e564dSmrg
5549698f425bSmrg      -L*)
55509ef0b394Smrg	func_stripname "-L" '' "$arg"
55519ef0b394Smrg	if test -z "$func_stripname_result"; then
5552698f425bSmrg	  if test "$#" -gt 0; then
5553698f425bSmrg	    func_fatal_error "require no space between \`-L' and \`$1'"
5554698f425bSmrg	  else
5555698f425bSmrg	    func_fatal_error "need path for \`-L' option"
5556698f425bSmrg	  fi
5557698f425bSmrg	fi
55589ef0b394Smrg	func_resolve_sysroot "$func_stripname_result"
55599ef0b394Smrg	dir=$func_resolve_sysroot_result
5560698f425bSmrg	# We need an absolute path.
5561698f425bSmrg	case $dir in
5562698f425bSmrg	[\\/]* | [A-Za-z]:[\\/]*) ;;
5563698f425bSmrg	*)
5564698f425bSmrg	  absdir=`cd "$dir" && pwd`
5565698f425bSmrg	  test -z "$absdir" && \
5566698f425bSmrg	    func_fatal_error "cannot determine absolute directory name of \`$dir'"
5567698f425bSmrg	  dir="$absdir"
5568698f425bSmrg	  ;;
5569698f425bSmrg	esac
5570698f425bSmrg	case "$deplibs " in
55719ef0b394Smrg	*" -L$dir "* | *" $arg "*)
55729ef0b394Smrg	  # Will only happen for absolute or sysroot arguments
55739ef0b394Smrg	  ;;
5574698f425bSmrg	*)
55759ef0b394Smrg	  # Preserve sysroot, but never include relative directories
55769ef0b394Smrg	  case $dir in
55779ef0b394Smrg	    [\\/]* | [A-Za-z]:[\\/]* | =*) func_append deplibs " $arg" ;;
55789ef0b394Smrg	    *) func_append deplibs " -L$dir" ;;
55799ef0b394Smrg	  esac
55809ef0b394Smrg	  func_append lib_search_path " $dir"
5581698f425bSmrg	  ;;
5582698f425bSmrg	esac
5583698f425bSmrg	case $host in
5584698f425bSmrg	*-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-cegcc*)
55859ef0b394Smrg	  testbindir=`$ECHO "$dir" | $SED 's*/lib$*/bin*'`
5586698f425bSmrg	  case :$dllsearchpath: in
5587698f425bSmrg	  *":$dir:"*) ;;
5588698f425bSmrg	  ::) dllsearchpath=$dir;;
55899ef0b394Smrg	  *) func_append dllsearchpath ":$dir";;
5590698f425bSmrg	  esac
5591698f425bSmrg	  case :$dllsearchpath: in
5592698f425bSmrg	  *":$testbindir:"*) ;;
5593698f425bSmrg	  ::) dllsearchpath=$testbindir;;
55949ef0b394Smrg	  *) func_append dllsearchpath ":$testbindir";;
5595698f425bSmrg	  esac
5596698f425bSmrg	  ;;
5597698f425bSmrg	esac
5598698f425bSmrg	continue
5599698f425bSmrg	;;
5600266e564dSmrg
5601698f425bSmrg      -l*)
5602698f425bSmrg	if test "X$arg" = "X-lc" || test "X$arg" = "X-lm"; then
5603698f425bSmrg	  case $host in
56049ef0b394Smrg	  *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-beos* | *-cegcc* | *-*-haiku*)
5605698f425bSmrg	    # These systems don't actually have a C or math library (as such)
5606698f425bSmrg	    continue
5607698f425bSmrg	    ;;
5608698f425bSmrg	  *-*-os2*)
5609698f425bSmrg	    # These systems don't actually have a C library (as such)
5610698f425bSmrg	    test "X$arg" = "X-lc" && continue
5611698f425bSmrg	    ;;
5612698f425bSmrg	  *-*-openbsd* | *-*-freebsd* | *-*-dragonfly*)
5613698f425bSmrg	    # Do not include libc due to us having libc/libc_r.
5614698f425bSmrg	    test "X$arg" = "X-lc" && continue
5615698f425bSmrg	    ;;
5616698f425bSmrg	  *-*-rhapsody* | *-*-darwin1.[012])
5617698f425bSmrg	    # Rhapsody C and math libraries are in the System framework
56189ef0b394Smrg	    func_append deplibs " System.ltframework"
5619698f425bSmrg	    continue
5620698f425bSmrg	    ;;
5621698f425bSmrg	  *-*-sco3.2v5* | *-*-sco5v6*)
5622698f425bSmrg	    # Causes problems with __ctype
5623698f425bSmrg	    test "X$arg" = "X-lc" && continue
5624698f425bSmrg	    ;;
5625698f425bSmrg	  *-*-sysv4.2uw2* | *-*-sysv5* | *-*-unixware* | *-*-OpenUNIX*)
5626698f425bSmrg	    # Compiler inserts libc in the correct place for threads to work
5627698f425bSmrg	    test "X$arg" = "X-lc" && continue
5628698f425bSmrg	    ;;
5629698f425bSmrg	  esac
5630698f425bSmrg	elif test "X$arg" = "X-lc_r"; then
5631698f425bSmrg	 case $host in
5632698f425bSmrg	 *-*-openbsd* | *-*-freebsd* | *-*-dragonfly*)
5633698f425bSmrg	   # Do not include libc_r directly, use -pthread flag.
5634698f425bSmrg	   continue
5635698f425bSmrg	   ;;
5636698f425bSmrg	 esac
5637698f425bSmrg	fi
56389ef0b394Smrg	func_append deplibs " $arg"
5639698f425bSmrg	continue
5640698f425bSmrg	;;
5641266e564dSmrg
5642698f425bSmrg      -module)
5643698f425bSmrg	module=yes
5644698f425bSmrg	continue
5645698f425bSmrg	;;
5646266e564dSmrg
5647698f425bSmrg      # Tru64 UNIX uses -model [arg] to determine the layout of C++
5648698f425bSmrg      # classes, name mangling, and exception handling.
5649698f425bSmrg      # Darwin uses the -arch flag to determine output architecture.
56509ef0b394Smrg      -model|-arch|-isysroot|--sysroot)
56519ef0b394Smrg	func_append compiler_flags " $arg"
5652698f425bSmrg	func_append compile_command " $arg"
5653698f425bSmrg	func_append finalize_command " $arg"
5654698f425bSmrg	prev=xcompiler
5655698f425bSmrg	continue
5656698f425bSmrg	;;
5657266e564dSmrg
5658fb5e8d76Smrg      -mt|-mthreads|-kthread|-Kthread|-pthread|-pthreads|--thread-safe \
5659fb5e8d76Smrg      |-threads|-fopenmp|-openmp|-mp|-xopenmp|-omp|-qsmp=*)
56609ef0b394Smrg	func_append compiler_flags " $arg"
5661698f425bSmrg	func_append compile_command " $arg"
5662698f425bSmrg	func_append finalize_command " $arg"
5663698f425bSmrg	case "$new_inherited_linker_flags " in
5664698f425bSmrg	    *" $arg "*) ;;
56659ef0b394Smrg	    * ) func_append new_inherited_linker_flags " $arg" ;;
5666698f425bSmrg	esac
5667698f425bSmrg	continue
5668698f425bSmrg	;;
5669266e564dSmrg
5670698f425bSmrg      -multi_module)
5671698f425bSmrg	single_module="${wl}-multi_module"
5672698f425bSmrg	continue
5673698f425bSmrg	;;
5674266e564dSmrg
5675698f425bSmrg      -no-fast-install)
5676698f425bSmrg	fast_install=no
5677698f425bSmrg	continue
5678698f425bSmrg	;;
5679266e564dSmrg
5680698f425bSmrg      -no-install)
5681698f425bSmrg	case $host in
5682698f425bSmrg	*-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-*-darwin* | *-cegcc*)
5683698f425bSmrg	  # The PATH hackery in wrapper scripts is required on Windows
5684698f425bSmrg	  # and Darwin in order for the loader to find any dlls it needs.
5685698f425bSmrg	  func_warning "\`-no-install' is ignored for $host"
5686698f425bSmrg	  func_warning "assuming \`-no-fast-install' instead"
5687698f425bSmrg	  fast_install=no
5688698f425bSmrg	  ;;
5689698f425bSmrg	*) no_install=yes ;;
5690698f425bSmrg	esac
5691698f425bSmrg	continue
5692698f425bSmrg	;;
5693266e564dSmrg
5694698f425bSmrg      -no-undefined)
5695698f425bSmrg	allow_undefined=no
5696698f425bSmrg	continue
5697698f425bSmrg	;;
5698266e564dSmrg
5699698f425bSmrg      -objectlist)
5700698f425bSmrg	prev=objectlist
5701698f425bSmrg	continue
5702698f425bSmrg	;;
5703266e564dSmrg
5704698f425bSmrg      -o) prev=output ;;
5705266e564dSmrg
5706698f425bSmrg      -precious-files-regex)
5707698f425bSmrg	prev=precious_regex
5708698f425bSmrg	continue
5709698f425bSmrg	;;
5710266e564dSmrg
5711698f425bSmrg      -release)
5712698f425bSmrg	prev=release
5713698f425bSmrg	continue
5714698f425bSmrg	;;
5715266e564dSmrg
5716698f425bSmrg      -rpath)
5717698f425bSmrg	prev=rpath
5718698f425bSmrg	continue
5719698f425bSmrg	;;
5720266e564dSmrg
5721698f425bSmrg      -R)
5722698f425bSmrg	prev=xrpath
5723698f425bSmrg	continue
5724698f425bSmrg	;;
5725266e564dSmrg
5726698f425bSmrg      -R*)
5727698f425bSmrg	func_stripname '-R' '' "$arg"
5728698f425bSmrg	dir=$func_stripname_result
5729698f425bSmrg	# We need an absolute path.
5730698f425bSmrg	case $dir in
5731698f425bSmrg	[\\/]* | [A-Za-z]:[\\/]*) ;;
57329ef0b394Smrg	=*)
57339ef0b394Smrg	  func_stripname '=' '' "$dir"
57349ef0b394Smrg	  dir=$lt_sysroot$func_stripname_result
57359ef0b394Smrg	  ;;
5736698f425bSmrg	*)
5737698f425bSmrg	  func_fatal_error "only absolute run-paths are allowed"
5738698f425bSmrg	  ;;
5739698f425bSmrg	esac
5740698f425bSmrg	case "$xrpath " in
5741698f425bSmrg	*" $dir "*) ;;
57429ef0b394Smrg	*) func_append xrpath " $dir" ;;
5743698f425bSmrg	esac
5744698f425bSmrg	continue
5745698f425bSmrg	;;
5746266e564dSmrg
5747698f425bSmrg      -shared)
5748698f425bSmrg	# The effects of -shared are defined in a previous loop.
5749698f425bSmrg	continue
5750698f425bSmrg	;;
5751266e564dSmrg
5752698f425bSmrg      -shrext)
5753698f425bSmrg	prev=shrext
5754698f425bSmrg	continue
5755698f425bSmrg	;;
5756266e564dSmrg
5757698f425bSmrg      -static | -static-libtool-libs)
5758698f425bSmrg	# The effects of -static are defined in a previous loop.
5759698f425bSmrg	# We used to do the same as -all-static on platforms that
5760698f425bSmrg	# didn't have a PIC flag, but the assumption that the effects
5761698f425bSmrg	# would be equivalent was wrong.  It would break on at least
5762698f425bSmrg	# Digital Unix and AIX.
5763698f425bSmrg	continue
5764698f425bSmrg	;;
5765266e564dSmrg
5766698f425bSmrg      -thread-safe)
5767698f425bSmrg	thread_safe=yes
5768698f425bSmrg	continue
5769698f425bSmrg	;;
5770266e564dSmrg
5771698f425bSmrg      -version-info)
5772698f425bSmrg	prev=vinfo
5773698f425bSmrg	continue
5774698f425bSmrg	;;
5775266e564dSmrg
5776698f425bSmrg      -version-number)
5777698f425bSmrg	prev=vinfo
5778698f425bSmrg	vinfo_number=yes
5779698f425bSmrg	continue
5780698f425bSmrg	;;
5781266e564dSmrg
5782698f425bSmrg      -weak)
5783698f425bSmrg        prev=weak
5784698f425bSmrg	continue
5785698f425bSmrg	;;
5786266e564dSmrg
5787698f425bSmrg      -Wc,*)
5788698f425bSmrg	func_stripname '-Wc,' '' "$arg"
5789698f425bSmrg	args=$func_stripname_result
5790698f425bSmrg	arg=
5791698f425bSmrg	save_ifs="$IFS"; IFS=','
5792698f425bSmrg	for flag in $args; do
5793698f425bSmrg	  IFS="$save_ifs"
5794698f425bSmrg          func_quote_for_eval "$flag"
57959ef0b394Smrg	  func_append arg " $func_quote_for_eval_result"
57969ef0b394Smrg	  func_append compiler_flags " $func_quote_for_eval_result"
5797698f425bSmrg	done
5798698f425bSmrg	IFS="$save_ifs"
5799698f425bSmrg	func_stripname ' ' '' "$arg"
5800698f425bSmrg	arg=$func_stripname_result
5801698f425bSmrg	;;
5802266e564dSmrg
5803698f425bSmrg      -Wl,*)
5804698f425bSmrg	func_stripname '-Wl,' '' "$arg"
5805698f425bSmrg	args=$func_stripname_result
5806698f425bSmrg	arg=
5807698f425bSmrg	save_ifs="$IFS"; IFS=','
5808698f425bSmrg	for flag in $args; do
5809698f425bSmrg	  IFS="$save_ifs"
5810698f425bSmrg          func_quote_for_eval "$flag"
58119ef0b394Smrg	  func_append arg " $wl$func_quote_for_eval_result"
58129ef0b394Smrg	  func_append compiler_flags " $wl$func_quote_for_eval_result"
58139ef0b394Smrg	  func_append linker_flags " $func_quote_for_eval_result"
5814698f425bSmrg	done
5815698f425bSmrg	IFS="$save_ifs"
5816698f425bSmrg	func_stripname ' ' '' "$arg"
5817698f425bSmrg	arg=$func_stripname_result
5818698f425bSmrg	;;
5819266e564dSmrg
5820698f425bSmrg      -Xcompiler)
5821698f425bSmrg	prev=xcompiler
5822698f425bSmrg	continue
5823698f425bSmrg	;;
5824266e564dSmrg
5825698f425bSmrg      -Xlinker)
5826698f425bSmrg	prev=xlinker
5827698f425bSmrg	continue
5828698f425bSmrg	;;
5829266e564dSmrg
5830698f425bSmrg      -XCClinker)
5831698f425bSmrg	prev=xcclinker
5832698f425bSmrg	continue
5833698f425bSmrg	;;
5834266e564dSmrg
5835698f425bSmrg      # -msg_* for osf cc
5836698f425bSmrg      -msg_*)
5837698f425bSmrg	func_quote_for_eval "$arg"
5838698f425bSmrg	arg="$func_quote_for_eval_result"
5839698f425bSmrg	;;
5840266e564dSmrg
58419ef0b394Smrg      # Flags to be passed through unchanged, with rationale:
58429ef0b394Smrg      # -64, -mips[0-9]      enable 64-bit mode for the SGI compiler
58439ef0b394Smrg      # -r[0-9][0-9]*        specify processor for the SGI compiler
58449ef0b394Smrg      # -xarch=*, -xtarget=* enable 64-bit mode for the Sun compiler
58459ef0b394Smrg      # +DA*, +DD*           enable 64-bit mode for the HP compiler
58469ef0b394Smrg      # -q*                  compiler args for the IBM compiler
58479ef0b394Smrg      # -m*, -t[45]*, -txscale* architecture-specific flags for GCC
58489ef0b394Smrg      # -F/path              path to uninstalled frameworks, gcc on darwin
58499ef0b394Smrg      # -p, -pg, --coverage, -fprofile-*  profiling flags for GCC
58509ef0b394Smrg      # @file                GCC response files
58519ef0b394Smrg      # -tp=*                Portland pgcc target processor selection
58529ef0b394Smrg      # --sysroot=*          for sysroot support
58539ef0b394Smrg      # -O*, -flto*, -fwhopr*, -fuse-linker-plugin GCC link-time optimization
5854698f425bSmrg      -64|-mips[0-9]|-r[0-9][0-9]*|-xarch=*|-xtarget=*|+DA*|+DD*|-q*|-m*| \
58559ef0b394Smrg      -t[45]*|-txscale*|-p|-pg|--coverage|-fprofile-*|-F*|@*|-tp=*|--sysroot=*| \
58569ef0b394Smrg      -O*|-flto*|-fwhopr*|-fuse-linker-plugin)
5857698f425bSmrg        func_quote_for_eval "$arg"
5858698f425bSmrg	arg="$func_quote_for_eval_result"
5859698f425bSmrg        func_append compile_command " $arg"
5860698f425bSmrg        func_append finalize_command " $arg"
58619ef0b394Smrg        func_append compiler_flags " $arg"
5862698f425bSmrg        continue
5863698f425bSmrg        ;;
5864266e564dSmrg
5865698f425bSmrg      # Some other compiler flag.
5866698f425bSmrg      -* | +*)
5867698f425bSmrg        func_quote_for_eval "$arg"
5868698f425bSmrg	arg="$func_quote_for_eval_result"
5869698f425bSmrg	;;
5870266e564dSmrg
5871698f425bSmrg      *.$objext)
5872698f425bSmrg	# A standard object.
58739ef0b394Smrg	func_append objs " $arg"
5874698f425bSmrg	;;
5875266e564dSmrg
5876698f425bSmrg      *.lo)
5877698f425bSmrg	# A libtool-controlled object.
5878266e564dSmrg
5879698f425bSmrg	# Check to see that this really is a libtool object.
5880698f425bSmrg	if func_lalib_unsafe_p "$arg"; then
5881698f425bSmrg	  pic_object=
5882698f425bSmrg	  non_pic_object=
5883266e564dSmrg
5884698f425bSmrg	  # Read the .lo file
5885698f425bSmrg	  func_source "$arg"
5886266e564dSmrg
5887698f425bSmrg	  if test -z "$pic_object" ||
5888698f425bSmrg	     test -z "$non_pic_object" ||
5889698f425bSmrg	     test "$pic_object" = none &&
5890698f425bSmrg	     test "$non_pic_object" = none; then
5891698f425bSmrg	    func_fatal_error "cannot find name of object for \`$arg'"
5892698f425bSmrg	  fi
5893c5629e66Smrg
5894698f425bSmrg	  # Extract subdirectory from the argument.
5895698f425bSmrg	  func_dirname "$arg" "/" ""
5896698f425bSmrg	  xdir="$func_dirname_result"
5897266e564dSmrg
5898698f425bSmrg	  if test "$pic_object" != none; then
5899698f425bSmrg	    # Prepend the subdirectory the object is found in.
5900698f425bSmrg	    pic_object="$xdir$pic_object"
5901266e564dSmrg
5902698f425bSmrg	    if test "$prev" = dlfiles; then
5903698f425bSmrg	      if test "$build_libtool_libs" = yes && test "$dlopen_support" = yes; then
59049ef0b394Smrg		func_append dlfiles " $pic_object"
5905698f425bSmrg		prev=
5906698f425bSmrg		continue
5907698f425bSmrg	      else
5908698f425bSmrg		# If libtool objects are unsupported, then we need to preload.
5909698f425bSmrg		prev=dlprefiles
5910698f425bSmrg	      fi
5911698f425bSmrg	    fi
5912266e564dSmrg
5913698f425bSmrg	    # CHECK ME:  I think I busted this.  -Ossama
5914698f425bSmrg	    if test "$prev" = dlprefiles; then
5915698f425bSmrg	      # Preload the old-style object.
59169ef0b394Smrg	      func_append dlprefiles " $pic_object"
5917698f425bSmrg	      prev=
5918698f425bSmrg	    fi
5919266e564dSmrg
5920698f425bSmrg	    # A PIC object.
5921698f425bSmrg	    func_append libobjs " $pic_object"
5922698f425bSmrg	    arg="$pic_object"
5923698f425bSmrg	  fi
5924266e564dSmrg
5925698f425bSmrg	  # Non-PIC object.
5926698f425bSmrg	  if test "$non_pic_object" != none; then
5927698f425bSmrg	    # Prepend the subdirectory the object is found in.
5928698f425bSmrg	    non_pic_object="$xdir$non_pic_object"
5929266e564dSmrg
5930698f425bSmrg	    # A standard non-PIC object
5931698f425bSmrg	    func_append non_pic_objects " $non_pic_object"
5932698f425bSmrg	    if test -z "$pic_object" || test "$pic_object" = none ; then
5933698f425bSmrg	      arg="$non_pic_object"
5934698f425bSmrg	    fi
5935698f425bSmrg	  else
5936698f425bSmrg	    # If the PIC object exists, use it instead.
5937698f425bSmrg	    # $xdir was prepended to $pic_object above.
5938698f425bSmrg	    non_pic_object="$pic_object"
5939698f425bSmrg	    func_append non_pic_objects " $non_pic_object"
5940698f425bSmrg	  fi
5941698f425bSmrg	else
5942698f425bSmrg	  # Only an error if not doing a dry-run.
5943698f425bSmrg	  if $opt_dry_run; then
5944698f425bSmrg	    # Extract subdirectory from the argument.
5945698f425bSmrg	    func_dirname "$arg" "/" ""
5946698f425bSmrg	    xdir="$func_dirname_result"
5947698f425bSmrg
5948698f425bSmrg	    func_lo2o "$arg"
5949698f425bSmrg	    pic_object=$xdir$objdir/$func_lo2o_result
5950698f425bSmrg	    non_pic_object=$xdir$func_lo2o_result
5951698f425bSmrg	    func_append libobjs " $pic_object"
5952698f425bSmrg	    func_append non_pic_objects " $non_pic_object"
5953698f425bSmrg	  else
5954698f425bSmrg	    func_fatal_error "\`$arg' is not a valid libtool object"
5955698f425bSmrg	  fi
5956698f425bSmrg	fi
5957698f425bSmrg	;;
5958698f425bSmrg
5959698f425bSmrg      *.$libext)
5960698f425bSmrg	# An archive.
59619ef0b394Smrg	func_append deplibs " $arg"
59629ef0b394Smrg	func_append old_deplibs " $arg"
5963698f425bSmrg	continue
5964698f425bSmrg	;;
5965698f425bSmrg
5966698f425bSmrg      *.la)
5967698f425bSmrg	# A libtool-controlled library.
5968698f425bSmrg
59699ef0b394Smrg	func_resolve_sysroot "$arg"
5970698f425bSmrg	if test "$prev" = dlfiles; then
5971698f425bSmrg	  # This library was specified with -dlopen.
59729ef0b394Smrg	  func_append dlfiles " $func_resolve_sysroot_result"
5973698f425bSmrg	  prev=
5974698f425bSmrg	elif test "$prev" = dlprefiles; then
5975698f425bSmrg	  # The library was specified with -dlpreopen.
59769ef0b394Smrg	  func_append dlprefiles " $func_resolve_sysroot_result"
5977698f425bSmrg	  prev=
5978698f425bSmrg	else
59799ef0b394Smrg	  func_append deplibs " $func_resolve_sysroot_result"
5980698f425bSmrg	fi
5981698f425bSmrg	continue
5982698f425bSmrg	;;
5983698f425bSmrg
5984698f425bSmrg      # Some other compiler argument.
5985698f425bSmrg      *)
5986698f425bSmrg	# Unknown arguments in both finalize_command and compile_command need
5987698f425bSmrg	# to be aesthetically quoted because they are evaled later.
5988698f425bSmrg	func_quote_for_eval "$arg"
5989698f425bSmrg	arg="$func_quote_for_eval_result"
5990698f425bSmrg	;;
5991698f425bSmrg      esac # arg
5992698f425bSmrg
5993698f425bSmrg      # Now actually substitute the argument into the commands.
5994698f425bSmrg      if test -n "$arg"; then
5995698f425bSmrg	func_append compile_command " $arg"
5996698f425bSmrg	func_append finalize_command " $arg"
5997698f425bSmrg      fi
5998698f425bSmrg    done # argument parsing loop
5999698f425bSmrg
6000698f425bSmrg    test -n "$prev" && \
6001698f425bSmrg      func_fatal_help "the \`$prevarg' option requires an argument"
6002698f425bSmrg
6003698f425bSmrg    if test "$export_dynamic" = yes && test -n "$export_dynamic_flag_spec"; then
6004698f425bSmrg      eval arg=\"$export_dynamic_flag_spec\"
6005698f425bSmrg      func_append compile_command " $arg"
6006698f425bSmrg      func_append finalize_command " $arg"
6007698f425bSmrg    fi
6008698f425bSmrg
6009698f425bSmrg    oldlibs=
6010698f425bSmrg    # calculate the name of the file, without its directory
6011698f425bSmrg    func_basename "$output"
6012698f425bSmrg    outputname="$func_basename_result"
6013698f425bSmrg    libobjs_save="$libobjs"
6014698f425bSmrg
6015698f425bSmrg    if test -n "$shlibpath_var"; then
6016698f425bSmrg      # get the directories listed in $shlibpath_var
60179ef0b394Smrg      eval shlib_search_path=\`\$ECHO \"\${$shlibpath_var}\" \| \$SED \'s/:/ /g\'\`
6018698f425bSmrg    else
6019698f425bSmrg      shlib_search_path=
6020698f425bSmrg    fi
6021698f425bSmrg    eval sys_lib_search_path=\"$sys_lib_search_path_spec\"
6022698f425bSmrg    eval sys_lib_dlsearch_path=\"$sys_lib_dlsearch_path_spec\"
6023698f425bSmrg
6024698f425bSmrg    func_dirname "$output" "/" ""
6025698f425bSmrg    output_objdir="$func_dirname_result$objdir"
60269ef0b394Smrg    func_to_tool_file "$output_objdir/"
60279ef0b394Smrg    tool_output_objdir=$func_to_tool_file_result
6028698f425bSmrg    # Create the object directory.
6029698f425bSmrg    func_mkdir_p "$output_objdir"
6030698f425bSmrg
6031698f425bSmrg    # Determine the type of output
6032698f425bSmrg    case $output in
6033698f425bSmrg    "")
6034698f425bSmrg      func_fatal_help "you must specify an output file"
6035698f425bSmrg      ;;
6036698f425bSmrg    *.$libext) linkmode=oldlib ;;
6037698f425bSmrg    *.lo | *.$objext) linkmode=obj ;;
6038698f425bSmrg    *.la) linkmode=lib ;;
6039698f425bSmrg    *) linkmode=prog ;; # Anything else should be a program.
6040698f425bSmrg    esac
6041698f425bSmrg
6042698f425bSmrg    specialdeplibs=
6043698f425bSmrg
6044698f425bSmrg    libs=
6045698f425bSmrg    # Find all interdependent deplibs by searching for libraries
6046698f425bSmrg    # that are linked more than once (e.g. -la -lb -la)
6047698f425bSmrg    for deplib in $deplibs; do
60489ef0b394Smrg      if $opt_preserve_dup_deps ; then
6049698f425bSmrg	case "$libs " in
60509ef0b394Smrg	*" $deplib "*) func_append specialdeplibs " $deplib" ;;
6051698f425bSmrg	esac
6052698f425bSmrg      fi
60539ef0b394Smrg      func_append libs " $deplib"
6054698f425bSmrg    done
6055698f425bSmrg
6056698f425bSmrg    if test "$linkmode" = lib; then
6057698f425bSmrg      libs="$predeps $libs $compiler_lib_search_path $postdeps"
6058698f425bSmrg
6059698f425bSmrg      # Compute libraries that are listed more than once in $predeps
6060698f425bSmrg      # $postdeps and mark them as special (i.e., whose duplicates are
6061698f425bSmrg      # not to be eliminated).
6062698f425bSmrg      pre_post_deps=
6063698f425bSmrg      if $opt_duplicate_compiler_generated_deps; then
6064698f425bSmrg	for pre_post_dep in $predeps $postdeps; do
6065698f425bSmrg	  case "$pre_post_deps " in
60669ef0b394Smrg	  *" $pre_post_dep "*) func_append specialdeplibs " $pre_post_deps" ;;
6067698f425bSmrg	  esac
60689ef0b394Smrg	  func_append pre_post_deps " $pre_post_dep"
6069698f425bSmrg	done
6070698f425bSmrg      fi
6071698f425bSmrg      pre_post_deps=
6072698f425bSmrg    fi
6073698f425bSmrg
6074698f425bSmrg    deplibs=
6075698f425bSmrg    newdependency_libs=
6076698f425bSmrg    newlib_search_path=
6077698f425bSmrg    need_relink=no # whether we're linking any uninstalled libtool libraries
6078698f425bSmrg    notinst_deplibs= # not-installed libtool libraries
6079698f425bSmrg    notinst_path= # paths that contain not-installed libtool libraries
6080698f425bSmrg
6081698f425bSmrg    case $linkmode in
6082698f425bSmrg    lib)
6083698f425bSmrg	passes="conv dlpreopen link"
6084698f425bSmrg	for file in $dlfiles $dlprefiles; do
6085698f425bSmrg	  case $file in
6086698f425bSmrg	  *.la) ;;
6087698f425bSmrg	  *)
6088698f425bSmrg	    func_fatal_help "libraries can \`-dlopen' only libtool libraries: $file"
6089698f425bSmrg	    ;;
6090698f425bSmrg	  esac
6091698f425bSmrg	done
6092698f425bSmrg	;;
6093698f425bSmrg    prog)
6094698f425bSmrg	compile_deplibs=
6095698f425bSmrg	finalize_deplibs=
6096698f425bSmrg	alldeplibs=no
6097698f425bSmrg	newdlfiles=
6098698f425bSmrg	newdlprefiles=
6099698f425bSmrg	passes="conv scan dlopen dlpreopen link"
6100698f425bSmrg	;;
6101698f425bSmrg    *)  passes="conv"
6102698f425bSmrg	;;
6103698f425bSmrg    esac
6104698f425bSmrg
6105698f425bSmrg    for pass in $passes; do
6106698f425bSmrg      # The preopen pass in lib mode reverses $deplibs; put it back here
6107698f425bSmrg      # so that -L comes before libs that need it for instance...
6108698f425bSmrg      if test "$linkmode,$pass" = "lib,link"; then
6109698f425bSmrg	## FIXME: Find the place where the list is rebuilt in the wrong
6110698f425bSmrg	##        order, and fix it there properly
6111698f425bSmrg        tmp_deplibs=
6112698f425bSmrg	for deplib in $deplibs; do
6113698f425bSmrg	  tmp_deplibs="$deplib $tmp_deplibs"
6114698f425bSmrg	done
6115698f425bSmrg	deplibs="$tmp_deplibs"
6116698f425bSmrg      fi
6117698f425bSmrg
6118698f425bSmrg      if test "$linkmode,$pass" = "lib,link" ||
6119698f425bSmrg	 test "$linkmode,$pass" = "prog,scan"; then
6120698f425bSmrg	libs="$deplibs"
6121698f425bSmrg	deplibs=
6122698f425bSmrg      fi
6123698f425bSmrg      if test "$linkmode" = prog; then
6124698f425bSmrg	case $pass in
6125698f425bSmrg	dlopen) libs="$dlfiles" ;;
6126698f425bSmrg	dlpreopen) libs="$dlprefiles" ;;
6127698f425bSmrg	link) libs="$deplibs %DEPLIBS% $dependency_libs" ;;
6128698f425bSmrg	esac
6129698f425bSmrg      fi
6130698f425bSmrg      if test "$linkmode,$pass" = "lib,dlpreopen"; then
6131698f425bSmrg	# Collect and forward deplibs of preopened libtool libs
6132698f425bSmrg	for lib in $dlprefiles; do
6133698f425bSmrg	  # Ignore non-libtool-libs
6134698f425bSmrg	  dependency_libs=
61359ef0b394Smrg	  func_resolve_sysroot "$lib"
6136698f425bSmrg	  case $lib in
61379ef0b394Smrg	  *.la)	func_source "$func_resolve_sysroot_result" ;;
6138698f425bSmrg	  esac
6139698f425bSmrg
6140698f425bSmrg	  # Collect preopened libtool deplibs, except any this library
6141698f425bSmrg	  # has declared as weak libs
6142698f425bSmrg	  for deplib in $dependency_libs; do
61439ef0b394Smrg	    func_basename "$deplib"
61449ef0b394Smrg            deplib_base=$func_basename_result
6145698f425bSmrg	    case " $weak_libs " in
6146698f425bSmrg	    *" $deplib_base "*) ;;
61479ef0b394Smrg	    *) func_append deplibs " $deplib" ;;
6148698f425bSmrg	    esac
6149698f425bSmrg	  done
6150698f425bSmrg	done
6151698f425bSmrg	libs="$dlprefiles"
6152698f425bSmrg      fi
6153698f425bSmrg      if test "$pass" = dlopen; then
6154698f425bSmrg	# Collect dlpreopened libraries
6155698f425bSmrg	save_deplibs="$deplibs"
6156698f425bSmrg	deplibs=
6157698f425bSmrg      fi
6158698f425bSmrg
6159698f425bSmrg      for deplib in $libs; do
6160698f425bSmrg	lib=
6161698f425bSmrg	found=no
6162698f425bSmrg	case $deplib in
6163fb5e8d76Smrg	-mt|-mthreads|-kthread|-Kthread|-pthread|-pthreads|--thread-safe \
6164fb5e8d76Smrg        |-threads|-fopenmp|-openmp|-mp|-xopenmp|-omp|-qsmp=*)
6165698f425bSmrg	  if test "$linkmode,$pass" = "prog,link"; then
6166698f425bSmrg	    compile_deplibs="$deplib $compile_deplibs"
6167698f425bSmrg	    finalize_deplibs="$deplib $finalize_deplibs"
6168698f425bSmrg	  else
61699ef0b394Smrg	    func_append compiler_flags " $deplib"
6170698f425bSmrg	    if test "$linkmode" = lib ; then
6171698f425bSmrg		case "$new_inherited_linker_flags " in
6172698f425bSmrg		    *" $deplib "*) ;;
61739ef0b394Smrg		    * ) func_append new_inherited_linker_flags " $deplib" ;;
6174698f425bSmrg		esac
6175698f425bSmrg	    fi
6176698f425bSmrg	  fi
6177698f425bSmrg	  continue
6178698f425bSmrg	  ;;
6179698f425bSmrg	-l*)
6180698f425bSmrg	  if test "$linkmode" != lib && test "$linkmode" != prog; then
6181698f425bSmrg	    func_warning "\`-l' is ignored for archives/objects"
6182698f425bSmrg	    continue
6183698f425bSmrg	  fi
6184698f425bSmrg	  func_stripname '-l' '' "$deplib"
6185698f425bSmrg	  name=$func_stripname_result
6186698f425bSmrg	  if test "$linkmode" = lib; then
6187698f425bSmrg	    searchdirs="$newlib_search_path $lib_search_path $compiler_lib_search_dirs $sys_lib_search_path $shlib_search_path"
6188698f425bSmrg	  else
6189698f425bSmrg	    searchdirs="$newlib_search_path $lib_search_path $sys_lib_search_path $shlib_search_path"
6190698f425bSmrg	  fi
6191698f425bSmrg	  for searchdir in $searchdirs; do
6192698f425bSmrg	    for search_ext in .la $std_shrext .so .a; do
6193698f425bSmrg	      # Search the libtool library
6194698f425bSmrg	      lib="$searchdir/lib${name}${search_ext}"
6195698f425bSmrg	      if test -f "$lib"; then
6196698f425bSmrg		if test "$search_ext" = ".la"; then
6197698f425bSmrg		  found=yes
6198698f425bSmrg		else
6199698f425bSmrg		  found=no
6200698f425bSmrg		fi
6201698f425bSmrg		break 2
6202698f425bSmrg	      fi
6203698f425bSmrg	    done
6204698f425bSmrg	  done
6205698f425bSmrg	  if test "$found" != yes; then
6206698f425bSmrg	    # deplib doesn't seem to be a libtool library
6207698f425bSmrg	    if test "$linkmode,$pass" = "prog,link"; then
6208698f425bSmrg	      compile_deplibs="$deplib $compile_deplibs"
6209698f425bSmrg	      finalize_deplibs="$deplib $finalize_deplibs"
6210698f425bSmrg	    else
6211698f425bSmrg	      deplibs="$deplib $deplibs"
6212698f425bSmrg	      test "$linkmode" = lib && newdependency_libs="$deplib $newdependency_libs"
6213698f425bSmrg	    fi
6214698f425bSmrg	    continue
6215698f425bSmrg	  else # deplib is a libtool library
6216698f425bSmrg	    # If $allow_libtool_libs_with_static_runtimes && $deplib is a stdlib,
6217698f425bSmrg	    # We need to do some special things here, and not later.
6218698f425bSmrg	    if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then
6219698f425bSmrg	      case " $predeps $postdeps " in
6220698f425bSmrg	      *" $deplib "*)
6221698f425bSmrg		if func_lalib_p "$lib"; then
6222698f425bSmrg		  library_names=
6223698f425bSmrg		  old_library=
6224698f425bSmrg		  func_source "$lib"
6225698f425bSmrg		  for l in $old_library $library_names; do
6226698f425bSmrg		    ll="$l"
6227698f425bSmrg		  done
6228698f425bSmrg		  if test "X$ll" = "X$old_library" ; then # only static version available
6229698f425bSmrg		    found=no
6230698f425bSmrg		    func_dirname "$lib" "" "."
6231698f425bSmrg		    ladir="$func_dirname_result"
6232698f425bSmrg		    lib=$ladir/$old_library
6233698f425bSmrg		    if test "$linkmode,$pass" = "prog,link"; then
6234698f425bSmrg		      compile_deplibs="$deplib $compile_deplibs"
6235698f425bSmrg		      finalize_deplibs="$deplib $finalize_deplibs"
6236698f425bSmrg		    else
6237698f425bSmrg		      deplibs="$deplib $deplibs"
6238698f425bSmrg		      test "$linkmode" = lib && newdependency_libs="$deplib $newdependency_libs"
6239698f425bSmrg		    fi
6240698f425bSmrg		    continue
6241698f425bSmrg		  fi
6242698f425bSmrg		fi
6243698f425bSmrg		;;
6244698f425bSmrg	      *) ;;
6245698f425bSmrg	      esac
6246698f425bSmrg	    fi
6247698f425bSmrg	  fi
6248698f425bSmrg	  ;; # -l
6249698f425bSmrg	*.ltframework)
6250698f425bSmrg	  if test "$linkmode,$pass" = "prog,link"; then
6251698f425bSmrg	    compile_deplibs="$deplib $compile_deplibs"
6252698f425bSmrg	    finalize_deplibs="$deplib $finalize_deplibs"
6253698f425bSmrg	  else
6254698f425bSmrg	    deplibs="$deplib $deplibs"
6255698f425bSmrg	    if test "$linkmode" = lib ; then
6256698f425bSmrg		case "$new_inherited_linker_flags " in
6257698f425bSmrg		    *" $deplib "*) ;;
62589ef0b394Smrg		    * ) func_append new_inherited_linker_flags " $deplib" ;;
6259698f425bSmrg		esac
6260698f425bSmrg	    fi
6261698f425bSmrg	  fi
6262698f425bSmrg	  continue
6263698f425bSmrg	  ;;
6264698f425bSmrg	-L*)
6265698f425bSmrg	  case $linkmode in
6266698f425bSmrg	  lib)
6267698f425bSmrg	    deplibs="$deplib $deplibs"
6268698f425bSmrg	    test "$pass" = conv && continue
6269698f425bSmrg	    newdependency_libs="$deplib $newdependency_libs"
6270698f425bSmrg	    func_stripname '-L' '' "$deplib"
62719ef0b394Smrg	    func_resolve_sysroot "$func_stripname_result"
62729ef0b394Smrg	    func_append newlib_search_path " $func_resolve_sysroot_result"
6273698f425bSmrg	    ;;
6274698f425bSmrg	  prog)
6275698f425bSmrg	    if test "$pass" = conv; then
6276698f425bSmrg	      deplibs="$deplib $deplibs"
6277698f425bSmrg	      continue
6278698f425bSmrg	    fi
6279698f425bSmrg	    if test "$pass" = scan; then
6280698f425bSmrg	      deplibs="$deplib $deplibs"
6281698f425bSmrg	    else
6282698f425bSmrg	      compile_deplibs="$deplib $compile_deplibs"
6283698f425bSmrg	      finalize_deplibs="$deplib $finalize_deplibs"
6284698f425bSmrg	    fi
6285698f425bSmrg	    func_stripname '-L' '' "$deplib"
62869ef0b394Smrg	    func_resolve_sysroot "$func_stripname_result"
62879ef0b394Smrg	    func_append newlib_search_path " $func_resolve_sysroot_result"
6288698f425bSmrg	    ;;
6289698f425bSmrg	  *)
6290698f425bSmrg	    func_warning "\`-L' is ignored for archives/objects"
6291698f425bSmrg	    ;;
6292698f425bSmrg	  esac # linkmode
6293698f425bSmrg	  continue
6294698f425bSmrg	  ;; # -L
6295698f425bSmrg	-R*)
6296698f425bSmrg	  if test "$pass" = link; then
6297698f425bSmrg	    func_stripname '-R' '' "$deplib"
62989ef0b394Smrg	    func_resolve_sysroot "$func_stripname_result"
62999ef0b394Smrg	    dir=$func_resolve_sysroot_result
6300698f425bSmrg	    # Make sure the xrpath contains only unique directories.
6301698f425bSmrg	    case "$xrpath " in
6302698f425bSmrg	    *" $dir "*) ;;
63039ef0b394Smrg	    *) func_append xrpath " $dir" ;;
6304698f425bSmrg	    esac
6305698f425bSmrg	  fi
6306698f425bSmrg	  deplibs="$deplib $deplibs"
6307698f425bSmrg	  continue
6308698f425bSmrg	  ;;
63099ef0b394Smrg	*.la)
63109ef0b394Smrg	  func_resolve_sysroot "$deplib"
63119ef0b394Smrg	  lib=$func_resolve_sysroot_result
63129ef0b394Smrg	  ;;
6313698f425bSmrg	*.$libext)
6314698f425bSmrg	  if test "$pass" = conv; then
6315698f425bSmrg	    deplibs="$deplib $deplibs"
6316698f425bSmrg	    continue
6317698f425bSmrg	  fi
6318698f425bSmrg	  case $linkmode in
6319698f425bSmrg	  lib)
6320698f425bSmrg	    # Linking convenience modules into shared libraries is allowed,
6321698f425bSmrg	    # but linking other static libraries is non-portable.
6322698f425bSmrg	    case " $dlpreconveniencelibs " in
6323698f425bSmrg	    *" $deplib "*) ;;
6324698f425bSmrg	    *)
6325698f425bSmrg	      valid_a_lib=no
6326698f425bSmrg	      case $deplibs_check_method in
6327698f425bSmrg		match_pattern*)
6328698f425bSmrg		  set dummy $deplibs_check_method; shift
6329698f425bSmrg		  match_pattern_regex=`expr "$deplibs_check_method" : "$1 \(.*\)"`
63309ef0b394Smrg		  if eval "\$ECHO \"$deplib\"" 2>/dev/null | $SED 10q \
6331698f425bSmrg		    | $EGREP "$match_pattern_regex" > /dev/null; then
6332698f425bSmrg		    valid_a_lib=yes
6333698f425bSmrg		  fi
6334698f425bSmrg		;;
6335698f425bSmrg		pass_all)
6336698f425bSmrg		  valid_a_lib=yes
6337698f425bSmrg		;;
6338698f425bSmrg	      esac
6339698f425bSmrg	      if test "$valid_a_lib" != yes; then
63409ef0b394Smrg		echo
6341698f425bSmrg		$ECHO "*** Warning: Trying to link with static lib archive $deplib."
63429ef0b394Smrg		echo "*** I have the capability to make that library automatically link in when"
63439ef0b394Smrg		echo "*** you link to this library.  But I can only do this if you have a"
63449ef0b394Smrg		echo "*** shared version of the library, which you do not appear to have"
63459ef0b394Smrg		echo "*** because the file extensions .$libext of this argument makes me believe"
63469ef0b394Smrg		echo "*** that it is just a static archive that I should not use here."
6347698f425bSmrg	      else
63489ef0b394Smrg		echo
6349698f425bSmrg		$ECHO "*** Warning: Linking the shared library $output against the"
6350698f425bSmrg		$ECHO "*** static library $deplib is not portable!"
6351698f425bSmrg		deplibs="$deplib $deplibs"
6352698f425bSmrg	      fi
6353698f425bSmrg	      ;;
6354698f425bSmrg	    esac
6355698f425bSmrg	    continue
6356698f425bSmrg	    ;;
6357698f425bSmrg	  prog)
6358698f425bSmrg	    if test "$pass" != link; then
6359698f425bSmrg	      deplibs="$deplib $deplibs"
6360698f425bSmrg	    else
6361698f425bSmrg	      compile_deplibs="$deplib $compile_deplibs"
6362698f425bSmrg	      finalize_deplibs="$deplib $finalize_deplibs"
6363698f425bSmrg	    fi
6364698f425bSmrg	    continue
6365698f425bSmrg	    ;;
6366698f425bSmrg	  esac # linkmode
6367698f425bSmrg	  ;; # *.$libext
6368698f425bSmrg	*.lo | *.$objext)
6369698f425bSmrg	  if test "$pass" = conv; then
6370698f425bSmrg	    deplibs="$deplib $deplibs"
6371698f425bSmrg	  elif test "$linkmode" = prog; then
6372698f425bSmrg	    if test "$pass" = dlpreopen || test "$dlopen_support" != yes || test "$build_libtool_libs" = no; then
6373698f425bSmrg	      # If there is no dlopen support or we're linking statically,
6374698f425bSmrg	      # we need to preload.
63759ef0b394Smrg	      func_append newdlprefiles " $deplib"
6376698f425bSmrg	      compile_deplibs="$deplib $compile_deplibs"
6377698f425bSmrg	      finalize_deplibs="$deplib $finalize_deplibs"
6378698f425bSmrg	    else
63799ef0b394Smrg	      func_append newdlfiles " $deplib"
6380698f425bSmrg	    fi
6381698f425bSmrg	  fi
6382698f425bSmrg	  continue
6383698f425bSmrg	  ;;
6384698f425bSmrg	%DEPLIBS%)
6385698f425bSmrg	  alldeplibs=yes
6386698f425bSmrg	  continue
6387698f425bSmrg	  ;;
6388698f425bSmrg	esac # case $deplib
6389698f425bSmrg
6390698f425bSmrg	if test "$found" = yes || test -f "$lib"; then :
6391698f425bSmrg	else
6392698f425bSmrg	  func_fatal_error "cannot find the library \`$lib' or unhandled argument \`$deplib'"
6393698f425bSmrg	fi
6394698f425bSmrg
6395698f425bSmrg	# Check to see that this really is a libtool archive.
6396698f425bSmrg	func_lalib_unsafe_p "$lib" \
6397698f425bSmrg	  || func_fatal_error "\`$lib' is not a valid libtool archive"
6398698f425bSmrg
6399698f425bSmrg	func_dirname "$lib" "" "."
6400698f425bSmrg	ladir="$func_dirname_result"
6401698f425bSmrg
6402698f425bSmrg	dlname=
6403698f425bSmrg	dlopen=
6404698f425bSmrg	dlpreopen=
6405698f425bSmrg	libdir=
6406698f425bSmrg	library_names=
6407698f425bSmrg	old_library=
6408698f425bSmrg	inherited_linker_flags=
6409698f425bSmrg	# If the library was installed with an old release of libtool,
6410698f425bSmrg	# it will not redefine variables installed, or shouldnotlink
6411698f425bSmrg	installed=yes
6412698f425bSmrg	shouldnotlink=no
6413698f425bSmrg	avoidtemprpath=
6414698f425bSmrg
6415698f425bSmrg
6416698f425bSmrg	# Read the .la file
6417698f425bSmrg	func_source "$lib"
6418698f425bSmrg
6419698f425bSmrg	# Convert "-framework foo" to "foo.ltframework"
6420698f425bSmrg	if test -n "$inherited_linker_flags"; then
64219ef0b394Smrg	  tmp_inherited_linker_flags=`$ECHO "$inherited_linker_flags" | $SED 's/-framework \([^ $]*\)/\1.ltframework/g'`
6422698f425bSmrg	  for tmp_inherited_linker_flag in $tmp_inherited_linker_flags; do
6423698f425bSmrg	    case " $new_inherited_linker_flags " in
6424698f425bSmrg	      *" $tmp_inherited_linker_flag "*) ;;
64259ef0b394Smrg	      *) func_append new_inherited_linker_flags " $tmp_inherited_linker_flag";;
6426698f425bSmrg	    esac
6427698f425bSmrg	  done
6428698f425bSmrg	fi
64299ef0b394Smrg	dependency_libs=`$ECHO " $dependency_libs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'`
6430698f425bSmrg	if test "$linkmode,$pass" = "lib,link" ||
6431698f425bSmrg	   test "$linkmode,$pass" = "prog,scan" ||
6432698f425bSmrg	   { test "$linkmode" != prog && test "$linkmode" != lib; }; then
64339ef0b394Smrg	  test -n "$dlopen" && func_append dlfiles " $dlopen"
64349ef0b394Smrg	  test -n "$dlpreopen" && func_append dlprefiles " $dlpreopen"
6435698f425bSmrg	fi
6436698f425bSmrg
6437698f425bSmrg	if test "$pass" = conv; then
6438698f425bSmrg	  # Only check for convenience libraries
6439698f425bSmrg	  deplibs="$lib $deplibs"
6440698f425bSmrg	  if test -z "$libdir"; then
6441698f425bSmrg	    if test -z "$old_library"; then
6442698f425bSmrg	      func_fatal_error "cannot find name of link library for \`$lib'"
6443698f425bSmrg	    fi
6444698f425bSmrg	    # It is a libtool convenience library, so add in its objects.
64459ef0b394Smrg	    func_append convenience " $ladir/$objdir/$old_library"
64469ef0b394Smrg	    func_append old_convenience " $ladir/$objdir/$old_library"
6447698f425bSmrg	  elif test "$linkmode" != prog && test "$linkmode" != lib; then
6448698f425bSmrg	    func_fatal_error "\`$lib' is not a convenience library"
6449698f425bSmrg	  fi
6450698f425bSmrg	  tmp_libs=
6451698f425bSmrg	  for deplib in $dependency_libs; do
6452698f425bSmrg	    deplibs="$deplib $deplibs"
64539ef0b394Smrg	    if $opt_preserve_dup_deps ; then
6454698f425bSmrg	      case "$tmp_libs " in
64559ef0b394Smrg	      *" $deplib "*) func_append specialdeplibs " $deplib" ;;
6456698f425bSmrg	      esac
6457698f425bSmrg	    fi
64589ef0b394Smrg	    func_append tmp_libs " $deplib"
6459698f425bSmrg	  done
6460698f425bSmrg	  continue
6461698f425bSmrg	fi # $pass = conv
6462698f425bSmrg
6463698f425bSmrg
6464698f425bSmrg	# Get the name of the library we link against.
6465698f425bSmrg	linklib=
64669ef0b394Smrg	if test -n "$old_library" &&
64679ef0b394Smrg	   { test "$prefer_static_libs" = yes ||
64689ef0b394Smrg	     test "$prefer_static_libs,$installed" = "built,no"; }; then
64699ef0b394Smrg	  linklib=$old_library
64709ef0b394Smrg	else
64719ef0b394Smrg	  for l in $old_library $library_names; do
64729ef0b394Smrg	    linklib="$l"
64739ef0b394Smrg	  done
64749ef0b394Smrg	fi
6475698f425bSmrg	if test -z "$linklib"; then
6476698f425bSmrg	  func_fatal_error "cannot find name of link library for \`$lib'"
6477698f425bSmrg	fi
6478698f425bSmrg
6479698f425bSmrg	# This library was specified with -dlopen.
6480698f425bSmrg	if test "$pass" = dlopen; then
6481698f425bSmrg	  if test -z "$libdir"; then
6482698f425bSmrg	    func_fatal_error "cannot -dlopen a convenience library: \`$lib'"
6483698f425bSmrg	  fi
6484698f425bSmrg	  if test -z "$dlname" ||
6485698f425bSmrg	     test "$dlopen_support" != yes ||
6486698f425bSmrg	     test "$build_libtool_libs" = no; then
6487698f425bSmrg	    # If there is no dlname, no dlopen support or we're linking
6488698f425bSmrg	    # statically, we need to preload.  We also need to preload any
6489698f425bSmrg	    # dependent libraries so libltdl's deplib preloader doesn't
6490698f425bSmrg	    # bomb out in the load deplibs phase.
64919ef0b394Smrg	    func_append dlprefiles " $lib $dependency_libs"
6492698f425bSmrg	  else
64939ef0b394Smrg	    func_append newdlfiles " $lib"
6494698f425bSmrg	  fi
6495698f425bSmrg	  continue
6496698f425bSmrg	fi # $pass = dlopen
6497698f425bSmrg
6498698f425bSmrg	# We need an absolute path.
6499698f425bSmrg	case $ladir in
6500698f425bSmrg	[\\/]* | [A-Za-z]:[\\/]*) abs_ladir="$ladir" ;;
6501698f425bSmrg	*)
6502698f425bSmrg	  abs_ladir=`cd "$ladir" && pwd`
6503698f425bSmrg	  if test -z "$abs_ladir"; then
6504698f425bSmrg	    func_warning "cannot determine absolute directory name of \`$ladir'"
6505698f425bSmrg	    func_warning "passing it literally to the linker, although it might fail"
6506698f425bSmrg	    abs_ladir="$ladir"
6507698f425bSmrg	  fi
6508698f425bSmrg	  ;;
6509698f425bSmrg	esac
6510698f425bSmrg	func_basename "$lib"
6511698f425bSmrg	laname="$func_basename_result"
6512698f425bSmrg
6513698f425bSmrg	# Find the relevant object directory and library name.
6514698f425bSmrg	if test "X$installed" = Xyes; then
65159ef0b394Smrg	  if test ! -f "$lt_sysroot$libdir/$linklib" && test -f "$abs_ladir/$linklib"; then
6516698f425bSmrg	    func_warning "library \`$lib' was moved."
6517698f425bSmrg	    dir="$ladir"
6518698f425bSmrg	    absdir="$abs_ladir"
6519698f425bSmrg	    libdir="$abs_ladir"
6520698f425bSmrg	  else
65219ef0b394Smrg	    dir="$lt_sysroot$libdir"
65229ef0b394Smrg	    absdir="$lt_sysroot$libdir"
6523698f425bSmrg	  fi
6524698f425bSmrg	  test "X$hardcode_automatic" = Xyes && avoidtemprpath=yes
6525698f425bSmrg	else
6526698f425bSmrg	  if test ! -f "$ladir/$objdir/$linklib" && test -f "$abs_ladir/$linklib"; then
6527698f425bSmrg	    dir="$ladir"
6528698f425bSmrg	    absdir="$abs_ladir"
6529698f425bSmrg	    # Remove this search path later
65309ef0b394Smrg	    func_append notinst_path " $abs_ladir"
6531698f425bSmrg	  else
6532698f425bSmrg	    dir="$ladir/$objdir"
6533698f425bSmrg	    absdir="$abs_ladir/$objdir"
6534698f425bSmrg	    # Remove this search path later
65359ef0b394Smrg	    func_append notinst_path " $abs_ladir"
6536698f425bSmrg	  fi
6537698f425bSmrg	fi # $installed = yes
6538698f425bSmrg	func_stripname 'lib' '.la' "$laname"
6539698f425bSmrg	name=$func_stripname_result
6540698f425bSmrg
6541698f425bSmrg	# This library was specified with -dlpreopen.
6542698f425bSmrg	if test "$pass" = dlpreopen; then
6543698f425bSmrg	  if test -z "$libdir" && test "$linkmode" = prog; then
6544698f425bSmrg	    func_fatal_error "only libraries may -dlpreopen a convenience library: \`$lib'"
6545698f425bSmrg	  fi
65469ef0b394Smrg	  case "$host" in
65479ef0b394Smrg	    # special handling for platforms with PE-DLLs.
65489ef0b394Smrg	    *cygwin* | *mingw* | *cegcc* )
65499ef0b394Smrg	      # Linker will automatically link against shared library if both
65509ef0b394Smrg	      # static and shared are present.  Therefore, ensure we extract
65519ef0b394Smrg	      # symbols from the import library if a shared library is present
65529ef0b394Smrg	      # (otherwise, the dlopen module name will be incorrect).  We do
65539ef0b394Smrg	      # this by putting the import library name into $newdlprefiles.
65549ef0b394Smrg	      # We recover the dlopen module name by 'saving' the la file
65559ef0b394Smrg	      # name in a special purpose variable, and (later) extracting the
65569ef0b394Smrg	      # dlname from the la file.
65579ef0b394Smrg	      if test -n "$dlname"; then
65589ef0b394Smrg	        func_tr_sh "$dir/$linklib"
65599ef0b394Smrg	        eval "libfile_$func_tr_sh_result=\$abs_ladir/\$laname"
65609ef0b394Smrg	        func_append newdlprefiles " $dir/$linklib"
65619ef0b394Smrg	      else
65629ef0b394Smrg	        func_append newdlprefiles " $dir/$old_library"
65639ef0b394Smrg	        # Keep a list of preopened convenience libraries to check
65649ef0b394Smrg	        # that they are being used correctly in the link pass.
65659ef0b394Smrg	        test -z "$libdir" && \
65669ef0b394Smrg	          func_append dlpreconveniencelibs " $dir/$old_library"
65679ef0b394Smrg	      fi
65689ef0b394Smrg	    ;;
65699ef0b394Smrg	    * )
65709ef0b394Smrg	      # Prefer using a static library (so that no silly _DYNAMIC symbols
65719ef0b394Smrg	      # are required to link).
65729ef0b394Smrg	      if test -n "$old_library"; then
65739ef0b394Smrg	        func_append newdlprefiles " $dir/$old_library"
65749ef0b394Smrg	        # Keep a list of preopened convenience libraries to check
65759ef0b394Smrg	        # that they are being used correctly in the link pass.
65769ef0b394Smrg	        test -z "$libdir" && \
65779ef0b394Smrg	          func_append dlpreconveniencelibs " $dir/$old_library"
65789ef0b394Smrg	      # Otherwise, use the dlname, so that lt_dlopen finds it.
65799ef0b394Smrg	      elif test -n "$dlname"; then
65809ef0b394Smrg	        func_append newdlprefiles " $dir/$dlname"
65819ef0b394Smrg	      else
65829ef0b394Smrg	        func_append newdlprefiles " $dir/$linklib"
65839ef0b394Smrg	      fi
65849ef0b394Smrg	    ;;
65859ef0b394Smrg	  esac
6586698f425bSmrg	fi # $pass = dlpreopen
6587698f425bSmrg
6588698f425bSmrg	if test -z "$libdir"; then
6589698f425bSmrg	  # Link the convenience library
6590698f425bSmrg	  if test "$linkmode" = lib; then
6591698f425bSmrg	    deplibs="$dir/$old_library $deplibs"
6592698f425bSmrg	  elif test "$linkmode,$pass" = "prog,link"; then
6593698f425bSmrg	    compile_deplibs="$dir/$old_library $compile_deplibs"
6594698f425bSmrg	    finalize_deplibs="$dir/$old_library $finalize_deplibs"
6595698f425bSmrg	  else
6596698f425bSmrg	    deplibs="$lib $deplibs" # used for prog,scan pass
6597698f425bSmrg	  fi
6598698f425bSmrg	  continue
6599698f425bSmrg	fi
6600698f425bSmrg
6601698f425bSmrg
6602698f425bSmrg	if test "$linkmode" = prog && test "$pass" != link; then
66039ef0b394Smrg	  func_append newlib_search_path " $ladir"
6604698f425bSmrg	  deplibs="$lib $deplibs"
6605698f425bSmrg
6606698f425bSmrg	  linkalldeplibs=no
6607698f425bSmrg	  if test "$link_all_deplibs" != no || test -z "$library_names" ||
6608698f425bSmrg	     test "$build_libtool_libs" = no; then
6609698f425bSmrg	    linkalldeplibs=yes
6610698f425bSmrg	  fi
6611698f425bSmrg
6612698f425bSmrg	  tmp_libs=
6613698f425bSmrg	  for deplib in $dependency_libs; do
6614698f425bSmrg	    case $deplib in
6615698f425bSmrg	    -L*) func_stripname '-L' '' "$deplib"
66169ef0b394Smrg	         func_resolve_sysroot "$func_stripname_result"
66179ef0b394Smrg	         func_append newlib_search_path " $func_resolve_sysroot_result"
6618698f425bSmrg		 ;;
6619698f425bSmrg	    esac
6620698f425bSmrg	    # Need to link against all dependency_libs?
6621698f425bSmrg	    if test "$linkalldeplibs" = yes; then
6622698f425bSmrg	      deplibs="$deplib $deplibs"
6623698f425bSmrg	    else
6624698f425bSmrg	      # Need to hardcode shared library paths
6625698f425bSmrg	      # or/and link against static libraries
6626698f425bSmrg	      newdependency_libs="$deplib $newdependency_libs"
6627698f425bSmrg	    fi
66289ef0b394Smrg	    if $opt_preserve_dup_deps ; then
6629698f425bSmrg	      case "$tmp_libs " in
66309ef0b394Smrg	      *" $deplib "*) func_append specialdeplibs " $deplib" ;;
6631698f425bSmrg	      esac
6632698f425bSmrg	    fi
66339ef0b394Smrg	    func_append tmp_libs " $deplib"
6634698f425bSmrg	  done # for deplib
6635698f425bSmrg	  continue
6636698f425bSmrg	fi # $linkmode = prog...
6637698f425bSmrg
6638698f425bSmrg	if test "$linkmode,$pass" = "prog,link"; then
6639698f425bSmrg	  if test -n "$library_names" &&
6640698f425bSmrg	     { { test "$prefer_static_libs" = no ||
6641698f425bSmrg	         test "$prefer_static_libs,$installed" = "built,yes"; } ||
6642698f425bSmrg	       test -z "$old_library"; }; then
6643698f425bSmrg	    # We need to hardcode the library path
6644698f425bSmrg	    if test -n "$shlibpath_var" && test -z "$avoidtemprpath" ; then
6645698f425bSmrg	      # Make sure the rpath contains only unique directories.
6646698f425bSmrg	      case "$temp_rpath:" in
6647698f425bSmrg	      *"$absdir:"*) ;;
66489ef0b394Smrg	      *) func_append temp_rpath "$absdir:" ;;
6649698f425bSmrg	      esac
6650698f425bSmrg	    fi
6651698f425bSmrg
6652698f425bSmrg	    # Hardcode the library path.
6653698f425bSmrg	    # Skip directories that are in the system default run-time
6654698f425bSmrg	    # search path.
6655698f425bSmrg	    case " $sys_lib_dlsearch_path " in
6656698f425bSmrg	    *" $absdir "*) ;;
6657698f425bSmrg	    *)
6658698f425bSmrg	      case "$compile_rpath " in
6659698f425bSmrg	      *" $absdir "*) ;;
66609ef0b394Smrg	      *) func_append compile_rpath " $absdir" ;;
6661698f425bSmrg	      esac
6662698f425bSmrg	      ;;
6663698f425bSmrg	    esac
6664698f425bSmrg	    case " $sys_lib_dlsearch_path " in
6665698f425bSmrg	    *" $libdir "*) ;;
6666698f425bSmrg	    *)
6667698f425bSmrg	      case "$finalize_rpath " in
6668698f425bSmrg	      *" $libdir "*) ;;
66699ef0b394Smrg	      *) func_append finalize_rpath " $libdir" ;;
6670698f425bSmrg	      esac
6671698f425bSmrg	      ;;
6672698f425bSmrg	    esac
6673698f425bSmrg	  fi # $linkmode,$pass = prog,link...
6674698f425bSmrg
6675698f425bSmrg	  if test "$alldeplibs" = yes &&
6676698f425bSmrg	     { test "$deplibs_check_method" = pass_all ||
6677698f425bSmrg	       { test "$build_libtool_libs" = yes &&
6678698f425bSmrg		 test -n "$library_names"; }; }; then
6679698f425bSmrg	    # We only need to search for static libraries
6680698f425bSmrg	    continue
6681698f425bSmrg	  fi
6682698f425bSmrg	fi
6683698f425bSmrg
6684698f425bSmrg	link_static=no # Whether the deplib will be linked statically
6685698f425bSmrg	use_static_libs=$prefer_static_libs
6686698f425bSmrg	if test "$use_static_libs" = built && test "$installed" = yes; then
6687698f425bSmrg	  use_static_libs=no
6688698f425bSmrg	fi
6689698f425bSmrg	if test -n "$library_names" &&
6690698f425bSmrg	   { test "$use_static_libs" = no || test -z "$old_library"; }; then
6691698f425bSmrg	  case $host in
6692698f425bSmrg	  *cygwin* | *mingw* | *cegcc*)
6693698f425bSmrg	      # No point in relinking DLLs because paths are not encoded
66949ef0b394Smrg	      func_append notinst_deplibs " $lib"
6695698f425bSmrg	      need_relink=no
6696698f425bSmrg	    ;;
6697698f425bSmrg	  *)
6698698f425bSmrg	    if test "$installed" = no; then
66999ef0b394Smrg	      func_append notinst_deplibs " $lib"
6700698f425bSmrg	      need_relink=yes
6701698f425bSmrg	    fi
6702698f425bSmrg	    ;;
6703698f425bSmrg	  esac
6704698f425bSmrg	  # This is a shared library
6705698f425bSmrg
6706698f425bSmrg	  # Warn about portability, can't link against -module's on some
6707698f425bSmrg	  # systems (darwin).  Don't bleat about dlopened modules though!
6708698f425bSmrg	  dlopenmodule=""
6709698f425bSmrg	  for dlpremoduletest in $dlprefiles; do
6710698f425bSmrg	    if test "X$dlpremoduletest" = "X$lib"; then
6711698f425bSmrg	      dlopenmodule="$dlpremoduletest"
6712698f425bSmrg	      break
6713698f425bSmrg	    fi
6714698f425bSmrg	  done
6715698f425bSmrg	  if test -z "$dlopenmodule" && test "$shouldnotlink" = yes && test "$pass" = link; then
67169ef0b394Smrg	    echo
6717698f425bSmrg	    if test "$linkmode" = prog; then
6718698f425bSmrg	      $ECHO "*** Warning: Linking the executable $output against the loadable module"
6719698f425bSmrg	    else
6720698f425bSmrg	      $ECHO "*** Warning: Linking the shared library $output against the loadable module"
6721698f425bSmrg	    fi
6722698f425bSmrg	    $ECHO "*** $linklib is not portable!"
6723698f425bSmrg	  fi
6724698f425bSmrg	  if test "$linkmode" = lib &&
6725698f425bSmrg	     test "$hardcode_into_libs" = yes; then
6726698f425bSmrg	    # Hardcode the library path.
6727698f425bSmrg	    # Skip directories that are in the system default run-time
6728698f425bSmrg	    # search path.
6729698f425bSmrg	    case " $sys_lib_dlsearch_path " in
6730698f425bSmrg	    *" $absdir "*) ;;
6731698f425bSmrg	    *)
6732698f425bSmrg	      case "$compile_rpath " in
6733698f425bSmrg	      *" $absdir "*) ;;
67349ef0b394Smrg	      *) func_append compile_rpath " $absdir" ;;
6735698f425bSmrg	      esac
6736698f425bSmrg	      ;;
6737698f425bSmrg	    esac
6738698f425bSmrg	    case " $sys_lib_dlsearch_path " in
6739698f425bSmrg	    *" $libdir "*) ;;
6740698f425bSmrg	    *)
6741698f425bSmrg	      case "$finalize_rpath " in
6742698f425bSmrg	      *" $libdir "*) ;;
67439ef0b394Smrg	      *) func_append finalize_rpath " $libdir" ;;
6744698f425bSmrg	      esac
6745698f425bSmrg	      ;;
6746698f425bSmrg	    esac
6747698f425bSmrg	  fi
6748698f425bSmrg
6749698f425bSmrg	  if test -n "$old_archive_from_expsyms_cmds"; then
6750698f425bSmrg	    # figure out the soname
6751698f425bSmrg	    set dummy $library_names
6752698f425bSmrg	    shift
6753698f425bSmrg	    realname="$1"
6754698f425bSmrg	    shift
6755698f425bSmrg	    libname=`eval "\\$ECHO \"$libname_spec\""`
6756698f425bSmrg	    # use dlname if we got it. it's perfectly good, no?
6757698f425bSmrg	    if test -n "$dlname"; then
6758698f425bSmrg	      soname="$dlname"
6759698f425bSmrg	    elif test -n "$soname_spec"; then
6760698f425bSmrg	      # bleh windows
6761698f425bSmrg	      case $host in
6762698f425bSmrg	      *cygwin* | mingw* | *cegcc*)
6763698f425bSmrg	        func_arith $current - $age
6764698f425bSmrg		major=$func_arith_result
6765698f425bSmrg		versuffix="-$major"
6766698f425bSmrg		;;
6767698f425bSmrg	      esac
6768698f425bSmrg	      eval soname=\"$soname_spec\"
6769698f425bSmrg	    else
6770698f425bSmrg	      soname="$realname"
6771698f425bSmrg	    fi
6772698f425bSmrg
6773698f425bSmrg	    # Make a new name for the extract_expsyms_cmds to use
6774698f425bSmrg	    soroot="$soname"
6775698f425bSmrg	    func_basename "$soroot"
6776698f425bSmrg	    soname="$func_basename_result"
6777698f425bSmrg	    func_stripname 'lib' '.dll' "$soname"
6778698f425bSmrg	    newlib=libimp-$func_stripname_result.a
6779698f425bSmrg
6780698f425bSmrg	    # If the library has no export list, then create one now
6781698f425bSmrg	    if test -f "$output_objdir/$soname-def"; then :
6782698f425bSmrg	    else
6783698f425bSmrg	      func_verbose "extracting exported symbol list from \`$soname'"
6784698f425bSmrg	      func_execute_cmds "$extract_expsyms_cmds" 'exit $?'
6785698f425bSmrg	    fi
6786698f425bSmrg
6787698f425bSmrg	    # Create $newlib
6788698f425bSmrg	    if test -f "$output_objdir/$newlib"; then :; else
6789698f425bSmrg	      func_verbose "generating import library for \`$soname'"
6790698f425bSmrg	      func_execute_cmds "$old_archive_from_expsyms_cmds" 'exit $?'
6791698f425bSmrg	    fi
6792698f425bSmrg	    # make sure the library variables are pointing to the new library
6793698f425bSmrg	    dir=$output_objdir
6794698f425bSmrg	    linklib=$newlib
6795698f425bSmrg	  fi # test -n "$old_archive_from_expsyms_cmds"
6796698f425bSmrg
67979ef0b394Smrg	  if test "$linkmode" = prog || test "$opt_mode" != relink; then
6798698f425bSmrg	    add_shlibpath=
6799698f425bSmrg	    add_dir=
6800698f425bSmrg	    add=
6801698f425bSmrg	    lib_linked=yes
6802698f425bSmrg	    case $hardcode_action in
6803698f425bSmrg	    immediate | unsupported)
6804698f425bSmrg	      if test "$hardcode_direct" = no; then
6805698f425bSmrg		add="$dir/$linklib"
6806698f425bSmrg		case $host in
6807698f425bSmrg		  *-*-sco3.2v5.0.[024]*) add_dir="-L$dir" ;;
6808698f425bSmrg		  *-*-sysv4*uw2*) add_dir="-L$dir" ;;
6809698f425bSmrg		  *-*-sysv5OpenUNIX* | *-*-sysv5UnixWare7.[01].[10]* | \
6810698f425bSmrg		    *-*-unixware7*) add_dir="-L$dir" ;;
6811698f425bSmrg		  *-*-darwin* )
6812698f425bSmrg		    # if the lib is a (non-dlopened) module then we can not
6813698f425bSmrg		    # link against it, someone is ignoring the earlier warnings
6814698f425bSmrg		    if /usr/bin/file -L $add 2> /dev/null |
6815698f425bSmrg			 $GREP ": [^:]* bundle" >/dev/null ; then
6816698f425bSmrg		      if test "X$dlopenmodule" != "X$lib"; then
6817698f425bSmrg			$ECHO "*** Warning: lib $linklib is a module, not a shared library"
6818698f425bSmrg			if test -z "$old_library" ; then
68199ef0b394Smrg			  echo
68209ef0b394Smrg			  echo "*** And there doesn't seem to be a static archive available"
68219ef0b394Smrg			  echo "*** The link will probably fail, sorry"
6822698f425bSmrg			else
6823698f425bSmrg			  add="$dir/$old_library"
6824698f425bSmrg			fi
6825698f425bSmrg		      elif test -n "$old_library"; then
6826698f425bSmrg			add="$dir/$old_library"
6827698f425bSmrg		      fi
6828698f425bSmrg		    fi
6829698f425bSmrg		esac
6830698f425bSmrg	      elif test "$hardcode_minus_L" = no; then
6831698f425bSmrg		case $host in
6832698f425bSmrg		*-*-sunos*) add_shlibpath="$dir" ;;
6833698f425bSmrg		esac
6834698f425bSmrg		add_dir="-L$dir"
6835698f425bSmrg		add="-l$name"
6836698f425bSmrg	      elif test "$hardcode_shlibpath_var" = no; then
6837698f425bSmrg		add_shlibpath="$dir"
6838698f425bSmrg		add="-l$name"
6839698f425bSmrg	      else
6840698f425bSmrg		lib_linked=no
6841698f425bSmrg	      fi
6842698f425bSmrg	      ;;
6843698f425bSmrg	    relink)
6844698f425bSmrg	      if test "$hardcode_direct" = yes &&
6845698f425bSmrg	         test "$hardcode_direct_absolute" = no; then
6846698f425bSmrg		add="$dir/$linklib"
6847698f425bSmrg	      elif test "$hardcode_minus_L" = yes; then
6848fb5e8d76Smrg		add_dir="-L$absdir"
6849698f425bSmrg		# Try looking first in the location we're being installed to.
6850698f425bSmrg		if test -n "$inst_prefix_dir"; then
6851698f425bSmrg		  case $libdir in
6852698f425bSmrg		    [\\/]*)
68539ef0b394Smrg		      func_append add_dir " -L$inst_prefix_dir$libdir"
6854698f425bSmrg		      ;;
6855698f425bSmrg		  esac
6856698f425bSmrg		fi
6857698f425bSmrg		add="-l$name"
6858698f425bSmrg	      elif test "$hardcode_shlibpath_var" = yes; then
6859698f425bSmrg		add_shlibpath="$dir"
6860698f425bSmrg		add="-l$name"
6861698f425bSmrg	      else
6862698f425bSmrg		lib_linked=no
6863698f425bSmrg	      fi
6864698f425bSmrg	      ;;
6865698f425bSmrg	    *) lib_linked=no ;;
6866698f425bSmrg	    esac
6867698f425bSmrg
6868698f425bSmrg	    if test "$lib_linked" != yes; then
6869698f425bSmrg	      func_fatal_configuration "unsupported hardcode properties"
6870698f425bSmrg	    fi
6871698f425bSmrg
6872698f425bSmrg	    if test -n "$add_shlibpath"; then
6873698f425bSmrg	      case :$compile_shlibpath: in
6874698f425bSmrg	      *":$add_shlibpath:"*) ;;
68759ef0b394Smrg	      *) func_append compile_shlibpath "$add_shlibpath:" ;;
6876698f425bSmrg	      esac
6877698f425bSmrg	    fi
6878698f425bSmrg	    if test "$linkmode" = prog; then
6879698f425bSmrg	      test -n "$add_dir" && compile_deplibs="$add_dir $compile_deplibs"
6880698f425bSmrg	      test -n "$add" && compile_deplibs="$add $compile_deplibs"
6881698f425bSmrg	    else
6882698f425bSmrg	      test -n "$add_dir" && deplibs="$add_dir $deplibs"
6883698f425bSmrg	      test -n "$add" && deplibs="$add $deplibs"
6884698f425bSmrg	      if test "$hardcode_direct" != yes &&
6885698f425bSmrg		 test "$hardcode_minus_L" != yes &&
6886698f425bSmrg		 test "$hardcode_shlibpath_var" = yes; then
6887698f425bSmrg		case :$finalize_shlibpath: in
6888698f425bSmrg		*":$libdir:"*) ;;
68899ef0b394Smrg		*) func_append finalize_shlibpath "$libdir:" ;;
6890698f425bSmrg		esac
6891698f425bSmrg	      fi
6892698f425bSmrg	    fi
6893698f425bSmrg	  fi
6894698f425bSmrg
68959ef0b394Smrg	  if test "$linkmode" = prog || test "$opt_mode" = relink; then
6896698f425bSmrg	    add_shlibpath=
6897698f425bSmrg	    add_dir=
6898698f425bSmrg	    add=
6899698f425bSmrg	    # Finalize command for both is simple: just hardcode it.
6900698f425bSmrg	    if test "$hardcode_direct" = yes &&
6901698f425bSmrg	       test "$hardcode_direct_absolute" = no; then
6902698f425bSmrg	      add="$libdir/$linklib"
6903698f425bSmrg	    elif test "$hardcode_minus_L" = yes; then
6904698f425bSmrg	      add_dir="-L$libdir"
6905698f425bSmrg	      add="-l$name"
6906698f425bSmrg	    elif test "$hardcode_shlibpath_var" = yes; then
6907698f425bSmrg	      case :$finalize_shlibpath: in
6908698f425bSmrg	      *":$libdir:"*) ;;
69099ef0b394Smrg	      *) func_append finalize_shlibpath "$libdir:" ;;
6910698f425bSmrg	      esac
6911698f425bSmrg	      add="-l$name"
6912698f425bSmrg	    elif test "$hardcode_automatic" = yes; then
6913698f425bSmrg	      if test -n "$inst_prefix_dir" &&
6914698f425bSmrg		 test -f "$inst_prefix_dir$libdir/$linklib" ; then
6915698f425bSmrg		add="$inst_prefix_dir$libdir/$linklib"
6916698f425bSmrg	      else
6917698f425bSmrg		add="$libdir/$linklib"
6918698f425bSmrg	      fi
6919698f425bSmrg	    else
6920698f425bSmrg	      # We cannot seem to hardcode it, guess we'll fake it.
6921698f425bSmrg	      add_dir="-L$libdir"
6922698f425bSmrg	      # Try looking first in the location we're being installed to.
6923698f425bSmrg	      if test -n "$inst_prefix_dir"; then
6924698f425bSmrg		case $libdir in
6925698f425bSmrg		  [\\/]*)
69269ef0b394Smrg		    func_append add_dir " -L$inst_prefix_dir$libdir"
6927698f425bSmrg		    ;;
6928698f425bSmrg		esac
6929698f425bSmrg	      fi
6930698f425bSmrg	      add="-l$name"
6931698f425bSmrg	    fi
6932698f425bSmrg
6933698f425bSmrg	    if test "$linkmode" = prog; then
6934698f425bSmrg	      test -n "$add_dir" && finalize_deplibs="$add_dir $finalize_deplibs"
6935698f425bSmrg	      test -n "$add" && finalize_deplibs="$add $finalize_deplibs"
6936698f425bSmrg	    else
6937698f425bSmrg	      test -n "$add_dir" && deplibs="$add_dir $deplibs"
6938698f425bSmrg	      test -n "$add" && deplibs="$add $deplibs"
6939698f425bSmrg	    fi
6940698f425bSmrg	  fi
6941698f425bSmrg	elif test "$linkmode" = prog; then
6942698f425bSmrg	  # Here we assume that one of hardcode_direct or hardcode_minus_L
6943698f425bSmrg	  # is not unsupported.  This is valid on all known static and
6944698f425bSmrg	  # shared platforms.
6945698f425bSmrg	  if test "$hardcode_direct" != unsupported; then
6946698f425bSmrg	    test -n "$old_library" && linklib="$old_library"
6947698f425bSmrg	    compile_deplibs="$dir/$linklib $compile_deplibs"
6948698f425bSmrg	    finalize_deplibs="$dir/$linklib $finalize_deplibs"
6949698f425bSmrg	  else
6950698f425bSmrg	    compile_deplibs="-l$name -L$dir $compile_deplibs"
6951698f425bSmrg	    finalize_deplibs="-l$name -L$dir $finalize_deplibs"
6952698f425bSmrg	  fi
6953698f425bSmrg	elif test "$build_libtool_libs" = yes; then
6954698f425bSmrg	  # Not a shared library
6955698f425bSmrg	  if test "$deplibs_check_method" != pass_all; then
6956698f425bSmrg	    # We're trying link a shared library against a static one
6957698f425bSmrg	    # but the system doesn't support it.
6958698f425bSmrg
6959698f425bSmrg	    # Just print a warning and add the library to dependency_libs so
6960698f425bSmrg	    # that the program can be linked against the static library.
69619ef0b394Smrg	    echo
6962698f425bSmrg	    $ECHO "*** Warning: This system can not link to static lib archive $lib."
69639ef0b394Smrg	    echo "*** I have the capability to make that library automatically link in when"
69649ef0b394Smrg	    echo "*** you link to this library.  But I can only do this if you have a"
69659ef0b394Smrg	    echo "*** shared version of the library, which you do not appear to have."
6966698f425bSmrg	    if test "$module" = yes; then
69679ef0b394Smrg	      echo "*** But as you try to build a module library, libtool will still create "
69689ef0b394Smrg	      echo "*** a static module, that should work as long as the dlopening application"
69699ef0b394Smrg	      echo "*** is linked with the -dlopen flag to resolve symbols at runtime."
6970698f425bSmrg	      if test -z "$global_symbol_pipe"; then
69719ef0b394Smrg		echo
69729ef0b394Smrg		echo "*** However, this would only work if libtool was able to extract symbol"
69739ef0b394Smrg		echo "*** lists from a program, using \`nm' or equivalent, but libtool could"
69749ef0b394Smrg		echo "*** not find such a program.  So, this module is probably useless."
69759ef0b394Smrg		echo "*** \`nm' from GNU binutils and a full rebuild may help."
6976698f425bSmrg	      fi
6977698f425bSmrg	      if test "$build_old_libs" = no; then
6978698f425bSmrg		build_libtool_libs=module
6979698f425bSmrg		build_old_libs=yes
6980698f425bSmrg	      else
6981698f425bSmrg		build_libtool_libs=no
6982698f425bSmrg	      fi
6983698f425bSmrg	    fi
6984698f425bSmrg	  else
6985698f425bSmrg	    deplibs="$dir/$old_library $deplibs"
6986698f425bSmrg	    link_static=yes
6987698f425bSmrg	  fi
6988698f425bSmrg	fi # link shared/static library?
6989698f425bSmrg
6990698f425bSmrg	if test "$linkmode" = lib; then
6991698f425bSmrg	  if test -n "$dependency_libs" &&
6992698f425bSmrg	     { test "$hardcode_into_libs" != yes ||
6993698f425bSmrg	       test "$build_old_libs" = yes ||
6994698f425bSmrg	       test "$link_static" = yes; }; then
6995698f425bSmrg	    # Extract -R from dependency_libs
6996698f425bSmrg	    temp_deplibs=
6997698f425bSmrg	    for libdir in $dependency_libs; do
6998698f425bSmrg	      case $libdir in
6999698f425bSmrg	      -R*) func_stripname '-R' '' "$libdir"
7000698f425bSmrg	           temp_xrpath=$func_stripname_result
7001698f425bSmrg		   case " $xrpath " in
7002698f425bSmrg		   *" $temp_xrpath "*) ;;
70039ef0b394Smrg		   *) func_append xrpath " $temp_xrpath";;
7004698f425bSmrg		   esac;;
70059ef0b394Smrg	      *) func_append temp_deplibs " $libdir";;
7006698f425bSmrg	      esac
7007698f425bSmrg	    done
7008698f425bSmrg	    dependency_libs="$temp_deplibs"
7009698f425bSmrg	  fi
7010698f425bSmrg
70119ef0b394Smrg	  func_append newlib_search_path " $absdir"
7012698f425bSmrg	  # Link against this library
7013698f425bSmrg	  test "$link_static" = no && newdependency_libs="$abs_ladir/$laname $newdependency_libs"
7014698f425bSmrg	  # ... and its dependency_libs
7015698f425bSmrg	  tmp_libs=
7016698f425bSmrg	  for deplib in $dependency_libs; do
7017698f425bSmrg	    newdependency_libs="$deplib $newdependency_libs"
70189ef0b394Smrg	    case $deplib in
70199ef0b394Smrg              -L*) func_stripname '-L' '' "$deplib"
70209ef0b394Smrg                   func_resolve_sysroot "$func_stripname_result";;
70219ef0b394Smrg              *) func_resolve_sysroot "$deplib" ;;
70229ef0b394Smrg            esac
70239ef0b394Smrg	    if $opt_preserve_dup_deps ; then
7024698f425bSmrg	      case "$tmp_libs " in
70259ef0b394Smrg	      *" $func_resolve_sysroot_result "*)
70269ef0b394Smrg                func_append specialdeplibs " $func_resolve_sysroot_result" ;;
7027698f425bSmrg	      esac
7028698f425bSmrg	    fi
70299ef0b394Smrg	    func_append tmp_libs " $func_resolve_sysroot_result"
7030698f425bSmrg	  done
7031698f425bSmrg
7032698f425bSmrg	  if test "$link_all_deplibs" != no; then
7033698f425bSmrg	    # Add the search paths of all dependency libraries
7034698f425bSmrg	    for deplib in $dependency_libs; do
70359ef0b394Smrg	      path=
7036698f425bSmrg	      case $deplib in
7037698f425bSmrg	      -L*) path="$deplib" ;;
7038698f425bSmrg	      *.la)
70399ef0b394Smrg	        func_resolve_sysroot "$deplib"
70409ef0b394Smrg	        deplib=$func_resolve_sysroot_result
7041698f425bSmrg	        func_dirname "$deplib" "" "."
70429ef0b394Smrg		dir=$func_dirname_result
7043698f425bSmrg		# We need an absolute path.
7044698f425bSmrg		case $dir in
7045698f425bSmrg		[\\/]* | [A-Za-z]:[\\/]*) absdir="$dir" ;;
7046698f425bSmrg		*)
7047698f425bSmrg		  absdir=`cd "$dir" && pwd`
7048698f425bSmrg		  if test -z "$absdir"; then
7049698f425bSmrg		    func_warning "cannot determine absolute directory name of \`$dir'"
7050698f425bSmrg		    absdir="$dir"
7051698f425bSmrg		  fi
7052698f425bSmrg		  ;;
7053698f425bSmrg		esac
7054698f425bSmrg		if $GREP "^installed=no" $deplib > /dev/null; then
7055698f425bSmrg		case $host in
7056698f425bSmrg		*-*-darwin*)
7057698f425bSmrg		  depdepl=
7058698f425bSmrg		  eval deplibrary_names=`${SED} -n -e 's/^library_names=\(.*\)$/\1/p' $deplib`
7059698f425bSmrg		  if test -n "$deplibrary_names" ; then
7060698f425bSmrg		    for tmp in $deplibrary_names ; do
7061698f425bSmrg		      depdepl=$tmp
7062698f425bSmrg		    done
7063698f425bSmrg		    if test -f "$absdir/$objdir/$depdepl" ; then
7064698f425bSmrg		      depdepl="$absdir/$objdir/$depdepl"
7065698f425bSmrg		      darwin_install_name=`${OTOOL} -L $depdepl | awk '{if (NR == 2) {print $1;exit}}'`
7066698f425bSmrg                      if test -z "$darwin_install_name"; then
7067698f425bSmrg                          darwin_install_name=`${OTOOL64} -L $depdepl  | awk '{if (NR == 2) {print $1;exit}}'`
7068698f425bSmrg                      fi
70699ef0b394Smrg		      func_append compiler_flags " ${wl}-dylib_file ${wl}${darwin_install_name}:${depdepl}"
70709ef0b394Smrg		      func_append linker_flags " -dylib_file ${darwin_install_name}:${depdepl}"
7071698f425bSmrg		      path=
7072698f425bSmrg		    fi
7073698f425bSmrg		  fi
7074698f425bSmrg		  ;;
7075698f425bSmrg		*)
7076698f425bSmrg		  path="-L$absdir/$objdir"
7077698f425bSmrg		  ;;
7078698f425bSmrg		esac
7079698f425bSmrg		else
7080698f425bSmrg		  eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $deplib`
7081698f425bSmrg		  test -z "$libdir" && \
7082698f425bSmrg		    func_fatal_error "\`$deplib' is not a valid libtool archive"
7083698f425bSmrg		  test "$absdir" != "$libdir" && \
7084698f425bSmrg		    func_warning "\`$deplib' seems to be moved"
7085698f425bSmrg
7086698f425bSmrg		  path="-L$absdir"
7087698f425bSmrg		fi
7088698f425bSmrg		;;
7089698f425bSmrg	      esac
7090698f425bSmrg	      case " $deplibs " in
7091698f425bSmrg	      *" $path "*) ;;
7092698f425bSmrg	      *) deplibs="$path $deplibs" ;;
7093698f425bSmrg	      esac
7094698f425bSmrg	    done
7095698f425bSmrg	  fi # link_all_deplibs != no
7096698f425bSmrg	fi # linkmode = lib
7097698f425bSmrg      done # for deplib in $libs
7098698f425bSmrg      if test "$pass" = link; then
7099698f425bSmrg	if test "$linkmode" = "prog"; then
7100698f425bSmrg	  compile_deplibs="$new_inherited_linker_flags $compile_deplibs"
7101698f425bSmrg	  finalize_deplibs="$new_inherited_linker_flags $finalize_deplibs"
7102698f425bSmrg	else
71039ef0b394Smrg	  compiler_flags="$compiler_flags "`$ECHO " $new_inherited_linker_flags" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'`
7104698f425bSmrg	fi
7105698f425bSmrg      fi
7106698f425bSmrg      dependency_libs="$newdependency_libs"
7107698f425bSmrg      if test "$pass" = dlpreopen; then
7108698f425bSmrg	# Link the dlpreopened libraries before other libraries
7109698f425bSmrg	for deplib in $save_deplibs; do
7110698f425bSmrg	  deplibs="$deplib $deplibs"
7111698f425bSmrg	done
7112698f425bSmrg      fi
7113698f425bSmrg      if test "$pass" != dlopen; then
7114698f425bSmrg	if test "$pass" != conv; then
7115698f425bSmrg	  # Make sure lib_search_path contains only unique directories.
7116698f425bSmrg	  lib_search_path=
7117698f425bSmrg	  for dir in $newlib_search_path; do
7118698f425bSmrg	    case "$lib_search_path " in
7119698f425bSmrg	    *" $dir "*) ;;
71209ef0b394Smrg	    *) func_append lib_search_path " $dir" ;;
7121698f425bSmrg	    esac
7122698f425bSmrg	  done
7123698f425bSmrg	  newlib_search_path=
7124698f425bSmrg	fi
7125698f425bSmrg
7126698f425bSmrg	if test "$linkmode,$pass" != "prog,link"; then
7127698f425bSmrg	  vars="deplibs"
7128698f425bSmrg	else
7129698f425bSmrg	  vars="compile_deplibs finalize_deplibs"
7130698f425bSmrg	fi
7131698f425bSmrg	for var in $vars dependency_libs; do
7132698f425bSmrg	  # Add libraries to $var in reverse order
7133698f425bSmrg	  eval tmp_libs=\"\$$var\"
7134698f425bSmrg	  new_libs=
7135698f425bSmrg	  for deplib in $tmp_libs; do
7136698f425bSmrg	    # FIXME: Pedantically, this is the right thing to do, so
7137698f425bSmrg	    #        that some nasty dependency loop isn't accidentally
7138698f425bSmrg	    #        broken:
7139698f425bSmrg	    #new_libs="$deplib $new_libs"
7140698f425bSmrg	    # Pragmatically, this seems to cause very few problems in
7141698f425bSmrg	    # practice:
7142698f425bSmrg	    case $deplib in
7143698f425bSmrg	    -L*) new_libs="$deplib $new_libs" ;;
7144698f425bSmrg	    -R*) ;;
7145698f425bSmrg	    *)
7146698f425bSmrg	      # And here is the reason: when a library appears more
7147698f425bSmrg	      # than once as an explicit dependence of a library, or
7148698f425bSmrg	      # is implicitly linked in more than once by the
7149698f425bSmrg	      # compiler, it is considered special, and multiple
7150698f425bSmrg	      # occurrences thereof are not removed.  Compare this
7151698f425bSmrg	      # with having the same library being listed as a
7152698f425bSmrg	      # dependency of multiple other libraries: in this case,
7153698f425bSmrg	      # we know (pedantically, we assume) the library does not
7154698f425bSmrg	      # need to be listed more than once, so we keep only the
7155698f425bSmrg	      # last copy.  This is not always right, but it is rare
7156698f425bSmrg	      # enough that we require users that really mean to play
7157698f425bSmrg	      # such unportable linking tricks to link the library
7158698f425bSmrg	      # using -Wl,-lname, so that libtool does not consider it
7159698f425bSmrg	      # for duplicate removal.
7160698f425bSmrg	      case " $specialdeplibs " in
7161698f425bSmrg	      *" $deplib "*) new_libs="$deplib $new_libs" ;;
7162698f425bSmrg	      *)
7163698f425bSmrg		case " $new_libs " in
7164698f425bSmrg		*" $deplib "*) ;;
7165698f425bSmrg		*) new_libs="$deplib $new_libs" ;;
7166698f425bSmrg		esac
7167698f425bSmrg		;;
7168698f425bSmrg	      esac
7169698f425bSmrg	      ;;
7170698f425bSmrg	    esac
7171698f425bSmrg	  done
7172698f425bSmrg	  tmp_libs=
7173698f425bSmrg	  for deplib in $new_libs; do
7174698f425bSmrg	    case $deplib in
7175698f425bSmrg	    -L*)
7176698f425bSmrg	      case " $tmp_libs " in
7177698f425bSmrg	      *" $deplib "*) ;;
71789ef0b394Smrg	      *) func_append tmp_libs " $deplib" ;;
7179698f425bSmrg	      esac
7180698f425bSmrg	      ;;
71819ef0b394Smrg	    *) func_append tmp_libs " $deplib" ;;
7182698f425bSmrg	    esac
7183698f425bSmrg	  done
7184698f425bSmrg	  eval $var=\"$tmp_libs\"
7185698f425bSmrg	done # for var
7186698f425bSmrg      fi
7187698f425bSmrg      # Last step: remove runtime libs from dependency_libs
7188698f425bSmrg      # (they stay in deplibs)
7189698f425bSmrg      tmp_libs=
7190698f425bSmrg      for i in $dependency_libs ; do
7191698f425bSmrg	case " $predeps $postdeps $compiler_lib_search_path " in
7192698f425bSmrg	*" $i "*)
7193698f425bSmrg	  i=""
7194698f425bSmrg	  ;;
7195698f425bSmrg	esac
7196698f425bSmrg	if test -n "$i" ; then
71979ef0b394Smrg	  func_append tmp_libs " $i"
7198698f425bSmrg	fi
7199698f425bSmrg      done
7200698f425bSmrg      dependency_libs=$tmp_libs
7201698f425bSmrg    done # for pass
7202698f425bSmrg    if test "$linkmode" = prog; then
7203698f425bSmrg      dlfiles="$newdlfiles"
7204698f425bSmrg    fi
7205698f425bSmrg    if test "$linkmode" = prog || test "$linkmode" = lib; then
7206698f425bSmrg      dlprefiles="$newdlprefiles"
7207698f425bSmrg    fi
7208698f425bSmrg
7209698f425bSmrg    case $linkmode in
7210698f425bSmrg    oldlib)
7211698f425bSmrg      if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then
7212698f425bSmrg	func_warning "\`-dlopen' is ignored for archives"
7213698f425bSmrg      fi
7214698f425bSmrg
7215698f425bSmrg      case " $deplibs" in
7216698f425bSmrg      *\ -l* | *\ -L*)
7217698f425bSmrg	func_warning "\`-l' and \`-L' are ignored for archives" ;;
7218698f425bSmrg      esac
7219698f425bSmrg
7220698f425bSmrg      test -n "$rpath" && \
7221698f425bSmrg	func_warning "\`-rpath' is ignored for archives"
7222698f425bSmrg
7223698f425bSmrg      test -n "$xrpath" && \
7224698f425bSmrg	func_warning "\`-R' is ignored for archives"
7225698f425bSmrg
7226698f425bSmrg      test -n "$vinfo" && \
7227698f425bSmrg	func_warning "\`-version-info/-version-number' is ignored for archives"
7228698f425bSmrg
7229698f425bSmrg      test -n "$release" && \
7230698f425bSmrg	func_warning "\`-release' is ignored for archives"
7231698f425bSmrg
7232698f425bSmrg      test -n "$export_symbols$export_symbols_regex" && \
7233698f425bSmrg	func_warning "\`-export-symbols' is ignored for archives"
7234698f425bSmrg
7235698f425bSmrg      # Now set the variables for building old libraries.
7236698f425bSmrg      build_libtool_libs=no
7237698f425bSmrg      oldlibs="$output"
72389ef0b394Smrg      func_append objs "$old_deplibs"
7239698f425bSmrg      ;;
7240698f425bSmrg
7241698f425bSmrg    lib)
7242698f425bSmrg      # Make sure we only generate libraries of the form `libNAME.la'.
7243698f425bSmrg      case $outputname in
7244698f425bSmrg      lib*)
7245698f425bSmrg	func_stripname 'lib' '.la' "$outputname"
7246698f425bSmrg	name=$func_stripname_result
7247698f425bSmrg	eval shared_ext=\"$shrext_cmds\"
7248698f425bSmrg	eval libname=\"$libname_spec\"
7249698f425bSmrg	;;
7250698f425bSmrg      *)
7251698f425bSmrg	test "$module" = no && \
7252698f425bSmrg	  func_fatal_help "libtool library \`$output' must begin with \`lib'"
7253698f425bSmrg
7254698f425bSmrg	if test "$need_lib_prefix" != no; then
7255698f425bSmrg	  # Add the "lib" prefix for modules if required
7256698f425bSmrg	  func_stripname '' '.la' "$outputname"
7257698f425bSmrg	  name=$func_stripname_result
7258698f425bSmrg	  eval shared_ext=\"$shrext_cmds\"
7259698f425bSmrg	  eval libname=\"$libname_spec\"
7260698f425bSmrg	else
7261698f425bSmrg	  func_stripname '' '.la' "$outputname"
7262698f425bSmrg	  libname=$func_stripname_result
7263698f425bSmrg	fi
7264698f425bSmrg	;;
7265698f425bSmrg      esac
7266698f425bSmrg
7267698f425bSmrg      if test -n "$objs"; then
7268698f425bSmrg	if test "$deplibs_check_method" != pass_all; then
7269698f425bSmrg	  func_fatal_error "cannot build libtool library \`$output' from non-libtool objects on this host:$objs"
7270698f425bSmrg	else
72719ef0b394Smrg	  echo
7272698f425bSmrg	  $ECHO "*** Warning: Linking the shared library $output against the non-libtool"
7273698f425bSmrg	  $ECHO "*** objects $objs is not portable!"
72749ef0b394Smrg	  func_append libobjs " $objs"
7275698f425bSmrg	fi
7276698f425bSmrg      fi
7277698f425bSmrg
7278698f425bSmrg      test "$dlself" != no && \
7279698f425bSmrg	func_warning "\`-dlopen self' is ignored for libtool libraries"
7280698f425bSmrg
7281698f425bSmrg      set dummy $rpath
7282698f425bSmrg      shift
7283698f425bSmrg      test "$#" -gt 1 && \
7284698f425bSmrg	func_warning "ignoring multiple \`-rpath's for a libtool library"
7285698f425bSmrg
7286698f425bSmrg      install_libdir="$1"
7287698f425bSmrg
7288698f425bSmrg      oldlibs=
7289698f425bSmrg      if test -z "$rpath"; then
7290698f425bSmrg	if test "$build_libtool_libs" = yes; then
7291698f425bSmrg	  # Building a libtool convenience library.
7292698f425bSmrg	  # Some compilers have problems with a `.al' extension so
7293698f425bSmrg	  # convenience libraries should have the same extension an
7294698f425bSmrg	  # archive normally would.
7295698f425bSmrg	  oldlibs="$output_objdir/$libname.$libext $oldlibs"
7296698f425bSmrg	  build_libtool_libs=convenience
7297698f425bSmrg	  build_old_libs=yes
7298698f425bSmrg	fi
7299698f425bSmrg
7300698f425bSmrg	test -n "$vinfo" && \
7301698f425bSmrg	  func_warning "\`-version-info/-version-number' is ignored for convenience libraries"
7302698f425bSmrg
7303698f425bSmrg	test -n "$release" && \
7304698f425bSmrg	  func_warning "\`-release' is ignored for convenience libraries"
7305698f425bSmrg      else
7306698f425bSmrg
7307698f425bSmrg	# Parse the version information argument.
7308698f425bSmrg	save_ifs="$IFS"; IFS=':'
7309698f425bSmrg	set dummy $vinfo 0 0 0
7310698f425bSmrg	shift
7311698f425bSmrg	IFS="$save_ifs"
7312698f425bSmrg
7313698f425bSmrg	test -n "$7" && \
7314698f425bSmrg	  func_fatal_help "too many parameters to \`-version-info'"
7315698f425bSmrg
7316698f425bSmrg	# convert absolute version numbers to libtool ages
7317698f425bSmrg	# this retains compatibility with .la files and attempts
7318698f425bSmrg	# to make the code below a bit more comprehensible
7319698f425bSmrg
7320698f425bSmrg	case $vinfo_number in
7321698f425bSmrg	yes)
7322698f425bSmrg	  number_major="$1"
7323698f425bSmrg	  number_minor="$2"
7324698f425bSmrg	  number_revision="$3"
7325698f425bSmrg	  #
7326698f425bSmrg	  # There are really only two kinds -- those that
7327698f425bSmrg	  # use the current revision as the major version
7328698f425bSmrg	  # and those that subtract age and use age as
7329698f425bSmrg	  # a minor version.  But, then there is irix
7330698f425bSmrg	  # which has an extra 1 added just for fun
7331698f425bSmrg	  #
7332698f425bSmrg	  case $version_type in
7333fb5e8d76Smrg	  # correct linux to gnu/linux during the next big refactor
7334698f425bSmrg	  darwin|linux|osf|windows|none)
7335698f425bSmrg	    func_arith $number_major + $number_minor
7336698f425bSmrg	    current=$func_arith_result
7337698f425bSmrg	    age="$number_minor"
7338698f425bSmrg	    revision="$number_revision"
7339698f425bSmrg	    ;;
73409ef0b394Smrg	  freebsd-aout|freebsd-elf|qnx|sunos)
7341698f425bSmrg	    current="$number_major"
7342698f425bSmrg	    revision="$number_minor"
7343698f425bSmrg	    age="0"
7344698f425bSmrg	    ;;
7345698f425bSmrg	  irix|nonstopux)
7346698f425bSmrg	    func_arith $number_major + $number_minor
7347698f425bSmrg	    current=$func_arith_result
7348698f425bSmrg	    age="$number_minor"
7349698f425bSmrg	    revision="$number_minor"
7350698f425bSmrg	    lt_irix_increment=no
7351698f425bSmrg	    ;;
7352698f425bSmrg	  esac
7353698f425bSmrg	  ;;
7354698f425bSmrg	no)
7355698f425bSmrg	  current="$1"
7356698f425bSmrg	  revision="$2"
7357698f425bSmrg	  age="$3"
7358698f425bSmrg	  ;;
7359698f425bSmrg	esac
7360698f425bSmrg
7361698f425bSmrg	# Check that each of the things are valid numbers.
7362698f425bSmrg	case $current in
7363698f425bSmrg	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]) ;;
7364698f425bSmrg	*)
7365698f425bSmrg	  func_error "CURRENT \`$current' must be a nonnegative integer"
7366698f425bSmrg	  func_fatal_error "\`$vinfo' is not valid version information"
7367698f425bSmrg	  ;;
7368698f425bSmrg	esac
7369698f425bSmrg
7370698f425bSmrg	case $revision in
7371698f425bSmrg	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]) ;;
7372698f425bSmrg	*)
7373698f425bSmrg	  func_error "REVISION \`$revision' must be a nonnegative integer"
7374698f425bSmrg	  func_fatal_error "\`$vinfo' is not valid version information"
7375698f425bSmrg	  ;;
7376698f425bSmrg	esac
7377698f425bSmrg
7378698f425bSmrg	case $age in
7379698f425bSmrg	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]) ;;
7380698f425bSmrg	*)
7381698f425bSmrg	  func_error "AGE \`$age' must be a nonnegative integer"
7382698f425bSmrg	  func_fatal_error "\`$vinfo' is not valid version information"
7383698f425bSmrg	  ;;
7384698f425bSmrg	esac
7385698f425bSmrg
7386698f425bSmrg	if test "$age" -gt "$current"; then
7387698f425bSmrg	  func_error "AGE \`$age' is greater than the current interface number \`$current'"
7388698f425bSmrg	  func_fatal_error "\`$vinfo' is not valid version information"
7389698f425bSmrg	fi
7390698f425bSmrg
7391698f425bSmrg	# Calculate the version variables.
7392698f425bSmrg	major=
7393698f425bSmrg	versuffix=
7394698f425bSmrg	verstring=
7395698f425bSmrg	case $version_type in
7396698f425bSmrg	none) ;;
7397698f425bSmrg
7398698f425bSmrg	darwin)
7399698f425bSmrg	  # Like Linux, but with the current version available in
7400698f425bSmrg	  # verstring for coding it into the library header
7401698f425bSmrg	  func_arith $current - $age
7402698f425bSmrg	  major=.$func_arith_result
7403698f425bSmrg	  versuffix="$major.$age.$revision"
7404698f425bSmrg	  # Darwin ld doesn't like 0 for these options...
7405698f425bSmrg	  func_arith $current + 1
7406698f425bSmrg	  minor_current=$func_arith_result
7407698f425bSmrg	  xlcverstring="${wl}-compatibility_version ${wl}$minor_current ${wl}-current_version ${wl}$minor_current.$revision"
7408698f425bSmrg	  verstring="-compatibility_version $minor_current -current_version $minor_current.$revision"
7409698f425bSmrg	  ;;
7410698f425bSmrg
7411698f425bSmrg	freebsd-aout)
7412698f425bSmrg	  major=".$current"
7413698f425bSmrg	  versuffix=".$current.$revision";
7414698f425bSmrg	  ;;
7415698f425bSmrg
7416698f425bSmrg	freebsd-elf)
7417698f425bSmrg	  major=".$current"
7418698f425bSmrg	  versuffix=".$current"
7419698f425bSmrg	  ;;
7420698f425bSmrg
7421698f425bSmrg	irix | nonstopux)
7422698f425bSmrg	  if test "X$lt_irix_increment" = "Xno"; then
7423698f425bSmrg	    func_arith $current - $age
7424698f425bSmrg	  else
7425698f425bSmrg	    func_arith $current - $age + 1
7426698f425bSmrg	  fi
7427698f425bSmrg	  major=$func_arith_result
7428698f425bSmrg
7429698f425bSmrg	  case $version_type in
7430698f425bSmrg	    nonstopux) verstring_prefix=nonstopux ;;
7431698f425bSmrg	    *)         verstring_prefix=sgi ;;
7432698f425bSmrg	  esac
7433698f425bSmrg	  verstring="$verstring_prefix$major.$revision"
7434698f425bSmrg
7435698f425bSmrg	  # Add in all the interfaces that we are compatible with.
7436698f425bSmrg	  loop=$revision
7437698f425bSmrg	  while test "$loop" -ne 0; do
7438698f425bSmrg	    func_arith $revision - $loop
7439698f425bSmrg	    iface=$func_arith_result
7440698f425bSmrg	    func_arith $loop - 1
7441698f425bSmrg	    loop=$func_arith_result
7442698f425bSmrg	    verstring="$verstring_prefix$major.$iface:$verstring"
7443698f425bSmrg	  done
7444698f425bSmrg
7445698f425bSmrg	  # Before this point, $major must not contain `.'.
7446698f425bSmrg	  major=.$major
7447698f425bSmrg	  versuffix="$major.$revision"
7448698f425bSmrg	  ;;
7449698f425bSmrg
7450fb5e8d76Smrg	linux) # correct to gnu/linux during the next big refactor
7451698f425bSmrg	  func_arith $current - $age
7452698f425bSmrg	  major=.$func_arith_result
7453698f425bSmrg	  versuffix="$major.$age.$revision"
7454698f425bSmrg	  ;;
7455698f425bSmrg
7456698f425bSmrg	osf)
7457698f425bSmrg	  func_arith $current - $age
7458698f425bSmrg	  major=.$func_arith_result
7459698f425bSmrg	  versuffix=".$current.$age.$revision"
7460698f425bSmrg	  verstring="$current.$age.$revision"
7461698f425bSmrg
7462698f425bSmrg	  # Add in all the interfaces that we are compatible with.
7463698f425bSmrg	  loop=$age
7464698f425bSmrg	  while test "$loop" -ne 0; do
7465698f425bSmrg	    func_arith $current - $loop
7466698f425bSmrg	    iface=$func_arith_result
7467698f425bSmrg	    func_arith $loop - 1
7468698f425bSmrg	    loop=$func_arith_result
7469698f425bSmrg	    verstring="$verstring:${iface}.0"
7470698f425bSmrg	  done
7471698f425bSmrg
7472698f425bSmrg	  # Make executables depend on our current version.
74739ef0b394Smrg	  func_append verstring ":${current}.0"
7474698f425bSmrg	  ;;
7475698f425bSmrg
7476698f425bSmrg	qnx)
7477698f425bSmrg	  major=".$current"
7478698f425bSmrg	  versuffix=".$current"
7479698f425bSmrg	  ;;
7480698f425bSmrg
7481698f425bSmrg	sunos)
7482698f425bSmrg	  major=".$current"
7483698f425bSmrg	  versuffix=".$current.$revision"
7484698f425bSmrg	  ;;
7485698f425bSmrg
7486698f425bSmrg	windows)
7487698f425bSmrg	  # Use '-' rather than '.', since we only want one
7488698f425bSmrg	  # extension on DOS 8.3 filesystems.
7489698f425bSmrg	  func_arith $current - $age
7490698f425bSmrg	  major=$func_arith_result
7491698f425bSmrg	  versuffix="-$major"
7492698f425bSmrg	  ;;
7493698f425bSmrg
7494698f425bSmrg	*)
7495698f425bSmrg	  func_fatal_configuration "unknown library version type \`$version_type'"
7496698f425bSmrg	  ;;
7497698f425bSmrg	esac
7498698f425bSmrg
7499698f425bSmrg	# Clear the version info if we defaulted, and they specified a release.
7500698f425bSmrg	if test -z "$vinfo" && test -n "$release"; then
7501698f425bSmrg	  major=
7502698f425bSmrg	  case $version_type in
7503698f425bSmrg	  darwin)
7504698f425bSmrg	    # we can't check for "0.0" in archive_cmds due to quoting
7505698f425bSmrg	    # problems, so we reset it completely
7506698f425bSmrg	    verstring=
7507698f425bSmrg	    ;;
7508698f425bSmrg	  *)
7509698f425bSmrg	    verstring="0.0"
7510698f425bSmrg	    ;;
7511698f425bSmrg	  esac
7512698f425bSmrg	  if test "$need_version" = no; then
7513698f425bSmrg	    versuffix=
7514698f425bSmrg	  else
7515698f425bSmrg	    versuffix=".0.0"
7516698f425bSmrg	  fi
7517698f425bSmrg	fi
7518698f425bSmrg
7519698f425bSmrg	# Remove version info from name if versioning should be avoided
7520698f425bSmrg	if test "$avoid_version" = yes && test "$need_version" = no; then
7521698f425bSmrg	  major=
7522698f425bSmrg	  versuffix=
7523698f425bSmrg	  verstring=""
7524698f425bSmrg	fi
7525698f425bSmrg
7526698f425bSmrg	# Check to see if the archive will have undefined symbols.
7527698f425bSmrg	if test "$allow_undefined" = yes; then
7528698f425bSmrg	  if test "$allow_undefined_flag" = unsupported; then
7529698f425bSmrg	    func_warning "undefined symbols not allowed in $host shared libraries"
7530698f425bSmrg	    build_libtool_libs=no
7531698f425bSmrg	    build_old_libs=yes
7532698f425bSmrg	  fi
7533698f425bSmrg	else
7534698f425bSmrg	  # Don't allow undefined symbols.
7535698f425bSmrg	  allow_undefined_flag="$no_undefined_flag"
7536698f425bSmrg	fi
7537698f425bSmrg
7538698f425bSmrg      fi
7539698f425bSmrg
7540698f425bSmrg      func_generate_dlsyms "$libname" "$libname" "yes"
75419ef0b394Smrg      func_append libobjs " $symfileobj"
7542698f425bSmrg      test "X$libobjs" = "X " && libobjs=
7543698f425bSmrg
75449ef0b394Smrg      if test "$opt_mode" != relink; then
7545698f425bSmrg	# Remove our outputs, but don't remove object files since they
7546698f425bSmrg	# may have been created when compiling PIC objects.
7547698f425bSmrg	removelist=
7548698f425bSmrg	tempremovelist=`$ECHO "$output_objdir/*"`
7549698f425bSmrg	for p in $tempremovelist; do
7550698f425bSmrg	  case $p in
7551698f425bSmrg	    *.$objext | *.gcno)
7552698f425bSmrg	       ;;
7553698f425bSmrg	    $output_objdir/$outputname | $output_objdir/$libname.* | $output_objdir/${libname}${release}.*)
7554698f425bSmrg	       if test "X$precious_files_regex" != "X"; then
7555698f425bSmrg		 if $ECHO "$p" | $EGREP -e "$precious_files_regex" >/dev/null 2>&1
7556698f425bSmrg		 then
7557698f425bSmrg		   continue
7558698f425bSmrg		 fi
7559698f425bSmrg	       fi
75609ef0b394Smrg	       func_append removelist " $p"
7561698f425bSmrg	       ;;
7562698f425bSmrg	    *) ;;
7563698f425bSmrg	  esac
7564698f425bSmrg	done
7565698f425bSmrg	test -n "$removelist" && \
7566698f425bSmrg	  func_show_eval "${RM}r \$removelist"
7567698f425bSmrg      fi
7568698f425bSmrg
7569698f425bSmrg      # Now set the variables for building old libraries.
7570698f425bSmrg      if test "$build_old_libs" = yes && test "$build_libtool_libs" != convenience ; then
75719ef0b394Smrg	func_append oldlibs " $output_objdir/$libname.$libext"
7572698f425bSmrg
7573698f425bSmrg	# Transform .lo files to .o files.
75749ef0b394Smrg	oldobjs="$objs "`$ECHO "$libobjs" | $SP2NL | $SED "/\.${libext}$/d; $lo2o" | $NL2SP`
7575698f425bSmrg      fi
7576698f425bSmrg
7577698f425bSmrg      # Eliminate all temporary directories.
7578698f425bSmrg      #for path in $notinst_path; do
75799ef0b394Smrg      #	lib_search_path=`$ECHO "$lib_search_path " | $SED "s% $path % %g"`
75809ef0b394Smrg      #	deplibs=`$ECHO "$deplibs " | $SED "s% -L$path % %g"`
75819ef0b394Smrg      #	dependency_libs=`$ECHO "$dependency_libs " | $SED "s% -L$path % %g"`
7582698f425bSmrg      #done
7583698f425bSmrg
7584698f425bSmrg      if test -n "$xrpath"; then
7585698f425bSmrg	# If the user specified any rpath flags, then add them.
7586698f425bSmrg	temp_xrpath=
7587698f425bSmrg	for libdir in $xrpath; do
75889ef0b394Smrg	  func_replace_sysroot "$libdir"
75899ef0b394Smrg	  func_append temp_xrpath " -R$func_replace_sysroot_result"
7590698f425bSmrg	  case "$finalize_rpath " in
7591698f425bSmrg	  *" $libdir "*) ;;
75929ef0b394Smrg	  *) func_append finalize_rpath " $libdir" ;;
7593698f425bSmrg	  esac
7594698f425bSmrg	done
7595698f425bSmrg	if test "$hardcode_into_libs" != yes || test "$build_old_libs" = yes; then
7596698f425bSmrg	  dependency_libs="$temp_xrpath $dependency_libs"
7597698f425bSmrg	fi
7598698f425bSmrg      fi
7599698f425bSmrg
7600698f425bSmrg      # Make sure dlfiles contains only unique files that won't be dlpreopened
7601698f425bSmrg      old_dlfiles="$dlfiles"
7602698f425bSmrg      dlfiles=
7603698f425bSmrg      for lib in $old_dlfiles; do
7604698f425bSmrg	case " $dlprefiles $dlfiles " in
7605698f425bSmrg	*" $lib "*) ;;
76069ef0b394Smrg	*) func_append dlfiles " $lib" ;;
7607698f425bSmrg	esac
7608698f425bSmrg      done
7609698f425bSmrg
7610698f425bSmrg      # Make sure dlprefiles contains only unique files
7611698f425bSmrg      old_dlprefiles="$dlprefiles"
7612698f425bSmrg      dlprefiles=
7613698f425bSmrg      for lib in $old_dlprefiles; do
7614698f425bSmrg	case "$dlprefiles " in
7615698f425bSmrg	*" $lib "*) ;;
76169ef0b394Smrg	*) func_append dlprefiles " $lib" ;;
7617698f425bSmrg	esac
7618698f425bSmrg      done
7619698f425bSmrg
7620698f425bSmrg      if test "$build_libtool_libs" = yes; then
7621698f425bSmrg	if test -n "$rpath"; then
7622698f425bSmrg	  case $host in
76239ef0b394Smrg	  *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-*-beos* | *-cegcc* | *-*-haiku*)
7624698f425bSmrg	    # these systems don't actually have a c library (as such)!
7625698f425bSmrg	    ;;
7626698f425bSmrg	  *-*-rhapsody* | *-*-darwin1.[012])
7627698f425bSmrg	    # Rhapsody C library is in the System framework
76289ef0b394Smrg	    func_append deplibs " System.ltframework"
7629698f425bSmrg	    ;;
7630698f425bSmrg	  *-*-netbsd*)
7631698f425bSmrg	    # Don't link with libc until the a.out ld.so is fixed.
7632698f425bSmrg	    ;;
7633698f425bSmrg	  *-*-openbsd* | *-*-freebsd* | *-*-dragonfly*)
7634698f425bSmrg	    # Do not include libc due to us having libc/libc_r.
7635698f425bSmrg	    ;;
7636698f425bSmrg	  *-*-sco3.2v5* | *-*-sco5v6*)
7637698f425bSmrg	    # Causes problems with __ctype
7638698f425bSmrg	    ;;
7639698f425bSmrg	  *-*-sysv4.2uw2* | *-*-sysv5* | *-*-unixware* | *-*-OpenUNIX*)
7640698f425bSmrg	    # Compiler inserts libc in the correct place for threads to work
7641698f425bSmrg	    ;;
7642698f425bSmrg	  *)
7643698f425bSmrg	    # Add libc to deplibs on all other systems if necessary.
7644698f425bSmrg	    if test "$build_libtool_need_lc" = "yes"; then
76459ef0b394Smrg	      func_append deplibs " -lc"
7646698f425bSmrg	    fi
7647698f425bSmrg	    ;;
7648698f425bSmrg	  esac
7649698f425bSmrg	fi
7650698f425bSmrg
7651698f425bSmrg	# Transform deplibs into only deplibs that can be linked in shared.
7652698f425bSmrg	name_save=$name
7653698f425bSmrg	libname_save=$libname
7654698f425bSmrg	release_save=$release
7655698f425bSmrg	versuffix_save=$versuffix
7656698f425bSmrg	major_save=$major
7657698f425bSmrg	# I'm not sure if I'm treating the release correctly.  I think
7658698f425bSmrg	# release should show up in the -l (ie -lgmp5) so we don't want to
7659698f425bSmrg	# add it in twice.  Is that correct?
7660698f425bSmrg	release=""
7661698f425bSmrg	versuffix=""
7662698f425bSmrg	major=""
7663698f425bSmrg	newdeplibs=
7664698f425bSmrg	droppeddeps=no
7665698f425bSmrg	case $deplibs_check_method in
7666698f425bSmrg	pass_all)
7667698f425bSmrg	  # Don't check for shared/static.  Everything works.
7668698f425bSmrg	  # This might be a little naive.  We might want to check
7669698f425bSmrg	  # whether the library exists or not.  But this is on
7670698f425bSmrg	  # osf3 & osf4 and I'm not really sure... Just
7671698f425bSmrg	  # implementing what was already the behavior.
7672698f425bSmrg	  newdeplibs=$deplibs
7673698f425bSmrg	  ;;
7674698f425bSmrg	test_compile)
7675698f425bSmrg	  # This code stresses the "libraries are programs" paradigm to its
7676698f425bSmrg	  # limits. Maybe even breaks it.  We compile a program, linking it
7677698f425bSmrg	  # against the deplibs as a proxy for the library.  Then we can check
7678698f425bSmrg	  # whether they linked in statically or dynamically with ldd.
7679698f425bSmrg	  $opt_dry_run || $RM conftest.c
7680698f425bSmrg	  cat > conftest.c <<EOF
7681698f425bSmrg	  int main() { return 0; }
7682698f425bSmrgEOF
7683698f425bSmrg	  $opt_dry_run || $RM conftest
7684698f425bSmrg	  if $LTCC $LTCFLAGS -o conftest conftest.c $deplibs; then
7685698f425bSmrg	    ldd_output=`ldd conftest`
7686698f425bSmrg	    for i in $deplibs; do
7687698f425bSmrg	      case $i in
7688698f425bSmrg	      -l*)
7689698f425bSmrg		func_stripname -l '' "$i"
7690698f425bSmrg		name=$func_stripname_result
7691698f425bSmrg		if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then
7692698f425bSmrg		  case " $predeps $postdeps " in
7693698f425bSmrg		  *" $i "*)
76949ef0b394Smrg		    func_append newdeplibs " $i"
7695698f425bSmrg		    i=""
7696698f425bSmrg		    ;;
7697698f425bSmrg		  esac
7698698f425bSmrg		fi
7699698f425bSmrg		if test -n "$i" ; then
7700698f425bSmrg		  libname=`eval "\\$ECHO \"$libname_spec\""`
7701698f425bSmrg		  deplib_matches=`eval "\\$ECHO \"$library_names_spec\""`
7702698f425bSmrg		  set dummy $deplib_matches; shift
7703698f425bSmrg		  deplib_match=$1
7704698f425bSmrg		  if test `expr "$ldd_output" : ".*$deplib_match"` -ne 0 ; then
77059ef0b394Smrg		    func_append newdeplibs " $i"
7706698f425bSmrg		  else
7707698f425bSmrg		    droppeddeps=yes
77089ef0b394Smrg		    echo
7709698f425bSmrg		    $ECHO "*** Warning: dynamic linker does not accept needed library $i."
77109ef0b394Smrg		    echo "*** I have the capability to make that library automatically link in when"
77119ef0b394Smrg		    echo "*** you link to this library.  But I can only do this if you have a"
77129ef0b394Smrg		    echo "*** shared version of the library, which I believe you do not have"
77139ef0b394Smrg		    echo "*** because a test_compile did reveal that the linker did not use it for"
77149ef0b394Smrg		    echo "*** its dynamic dependency list that programs get resolved with at runtime."
7715698f425bSmrg		  fi
7716698f425bSmrg		fi
7717698f425bSmrg		;;
7718698f425bSmrg	      *)
77199ef0b394Smrg		func_append newdeplibs " $i"
7720698f425bSmrg		;;
7721698f425bSmrg	      esac
7722698f425bSmrg	    done
7723698f425bSmrg	  else
7724698f425bSmrg	    # Error occurred in the first compile.  Let's try to salvage
7725698f425bSmrg	    # the situation: Compile a separate program for each library.
7726698f425bSmrg	    for i in $deplibs; do
7727698f425bSmrg	      case $i in
7728698f425bSmrg	      -l*)
7729698f425bSmrg		func_stripname -l '' "$i"
7730698f425bSmrg		name=$func_stripname_result
7731698f425bSmrg		$opt_dry_run || $RM conftest
7732698f425bSmrg		if $LTCC $LTCFLAGS -o conftest conftest.c $i; then
7733698f425bSmrg		  ldd_output=`ldd conftest`
7734698f425bSmrg		  if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then
7735698f425bSmrg		    case " $predeps $postdeps " in
7736698f425bSmrg		    *" $i "*)
77379ef0b394Smrg		      func_append newdeplibs " $i"
7738698f425bSmrg		      i=""
7739698f425bSmrg		      ;;
7740698f425bSmrg		    esac
7741698f425bSmrg		  fi
7742698f425bSmrg		  if test -n "$i" ; then
7743698f425bSmrg		    libname=`eval "\\$ECHO \"$libname_spec\""`
7744698f425bSmrg		    deplib_matches=`eval "\\$ECHO \"$library_names_spec\""`
7745698f425bSmrg		    set dummy $deplib_matches; shift
7746698f425bSmrg		    deplib_match=$1
7747698f425bSmrg		    if test `expr "$ldd_output" : ".*$deplib_match"` -ne 0 ; then
77489ef0b394Smrg		      func_append newdeplibs " $i"
7749698f425bSmrg		    else
7750698f425bSmrg		      droppeddeps=yes
77519ef0b394Smrg		      echo
7752698f425bSmrg		      $ECHO "*** Warning: dynamic linker does not accept needed library $i."
77539ef0b394Smrg		      echo "*** I have the capability to make that library automatically link in when"
77549ef0b394Smrg		      echo "*** you link to this library.  But I can only do this if you have a"
77559ef0b394Smrg		      echo "*** shared version of the library, which you do not appear to have"
77569ef0b394Smrg		      echo "*** because a test_compile did reveal that the linker did not use this one"
77579ef0b394Smrg		      echo "*** as a dynamic dependency that programs can get resolved with at runtime."
7758698f425bSmrg		    fi
7759698f425bSmrg		  fi
7760698f425bSmrg		else
7761698f425bSmrg		  droppeddeps=yes
77629ef0b394Smrg		  echo
7763698f425bSmrg		  $ECHO "*** Warning!  Library $i is needed by this library but I was not able to"
77649ef0b394Smrg		  echo "*** make it link in!  You will probably need to install it or some"
77659ef0b394Smrg		  echo "*** library that it depends on before this library will be fully"
77669ef0b394Smrg		  echo "*** functional.  Installing it before continuing would be even better."
7767698f425bSmrg		fi
7768698f425bSmrg		;;
7769698f425bSmrg	      *)
77709ef0b394Smrg		func_append newdeplibs " $i"
7771698f425bSmrg		;;
7772698f425bSmrg	      esac
7773698f425bSmrg	    done
7774698f425bSmrg	  fi
7775698f425bSmrg	  ;;
7776698f425bSmrg	file_magic*)
7777698f425bSmrg	  set dummy $deplibs_check_method; shift
7778698f425bSmrg	  file_magic_regex=`expr "$deplibs_check_method" : "$1 \(.*\)"`
7779698f425bSmrg	  for a_deplib in $deplibs; do
7780698f425bSmrg	    case $a_deplib in
7781698f425bSmrg	    -l*)
7782698f425bSmrg	      func_stripname -l '' "$a_deplib"
7783698f425bSmrg	      name=$func_stripname_result
7784698f425bSmrg	      if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then
7785698f425bSmrg		case " $predeps $postdeps " in
7786698f425bSmrg		*" $a_deplib "*)
77879ef0b394Smrg		  func_append newdeplibs " $a_deplib"
7788698f425bSmrg		  a_deplib=""
7789698f425bSmrg		  ;;
7790698f425bSmrg		esac
7791698f425bSmrg	      fi
7792698f425bSmrg	      if test -n "$a_deplib" ; then
7793698f425bSmrg		libname=`eval "\\$ECHO \"$libname_spec\""`
77949ef0b394Smrg		if test -n "$file_magic_glob"; then
77959ef0b394Smrg		  libnameglob=`func_echo_all "$libname" | $SED -e $file_magic_glob`
77969ef0b394Smrg		else
77979ef0b394Smrg		  libnameglob=$libname
77989ef0b394Smrg		fi
77999ef0b394Smrg		test "$want_nocaseglob" = yes && nocaseglob=`shopt -p nocaseglob`
7800698f425bSmrg		for i in $lib_search_path $sys_lib_search_path $shlib_search_path; do
78019ef0b394Smrg		  if test "$want_nocaseglob" = yes; then
78029ef0b394Smrg		    shopt -s nocaseglob
78039ef0b394Smrg		    potential_libs=`ls $i/$libnameglob[.-]* 2>/dev/null`
78049ef0b394Smrg		    $nocaseglob
78059ef0b394Smrg		  else
78069ef0b394Smrg		    potential_libs=`ls $i/$libnameglob[.-]* 2>/dev/null`
78079ef0b394Smrg		  fi
7808698f425bSmrg		  for potent_lib in $potential_libs; do
7809698f425bSmrg		      # Follow soft links.
7810698f425bSmrg		      if ls -lLd "$potent_lib" 2>/dev/null |
7811698f425bSmrg			 $GREP " -> " >/dev/null; then
7812698f425bSmrg			continue
7813698f425bSmrg		      fi
7814698f425bSmrg		      # The statement above tries to avoid entering an
7815698f425bSmrg		      # endless loop below, in case of cyclic links.
7816698f425bSmrg		      # We might still enter an endless loop, since a link
7817698f425bSmrg		      # loop can be closed while we follow links,
7818698f425bSmrg		      # but so what?
7819698f425bSmrg		      potlib="$potent_lib"
7820698f425bSmrg		      while test -h "$potlib" 2>/dev/null; do
7821698f425bSmrg			potliblink=`ls -ld $potlib | ${SED} 's/.* -> //'`
7822698f425bSmrg			case $potliblink in
7823698f425bSmrg			[\\/]* | [A-Za-z]:[\\/]*) potlib="$potliblink";;
78249ef0b394Smrg			*) potlib=`$ECHO "$potlib" | $SED 's,[^/]*$,,'`"$potliblink";;
7825698f425bSmrg			esac
7826698f425bSmrg		      done
7827698f425bSmrg		      if eval $file_magic_cmd \"\$potlib\" 2>/dev/null |
7828698f425bSmrg			 $SED -e 10q |
7829698f425bSmrg			 $EGREP "$file_magic_regex" > /dev/null; then
78309ef0b394Smrg			func_append newdeplibs " $a_deplib"
7831698f425bSmrg			a_deplib=""
7832698f425bSmrg			break 2
7833698f425bSmrg		      fi
7834698f425bSmrg		  done
7835698f425bSmrg		done
7836698f425bSmrg	      fi
7837698f425bSmrg	      if test -n "$a_deplib" ; then
7838698f425bSmrg		droppeddeps=yes
78399ef0b394Smrg		echo
7840698f425bSmrg		$ECHO "*** Warning: linker path does not have real file for library $a_deplib."
78419ef0b394Smrg		echo "*** I have the capability to make that library automatically link in when"
78429ef0b394Smrg		echo "*** you link to this library.  But I can only do this if you have a"
78439ef0b394Smrg		echo "*** shared version of the library, which you do not appear to have"
78449ef0b394Smrg		echo "*** because I did check the linker path looking for a file starting"
7845698f425bSmrg		if test -z "$potlib" ; then
7846698f425bSmrg		  $ECHO "*** with $libname but no candidates were found. (...for file magic test)"
7847698f425bSmrg		else
7848698f425bSmrg		  $ECHO "*** with $libname and none of the candidates passed a file format test"
7849698f425bSmrg		  $ECHO "*** using a file magic. Last file checked: $potlib"
7850698f425bSmrg		fi
7851698f425bSmrg	      fi
7852698f425bSmrg	      ;;
7853698f425bSmrg	    *)
7854698f425bSmrg	      # Add a -L argument.
78559ef0b394Smrg	      func_append newdeplibs " $a_deplib"
7856698f425bSmrg	      ;;
7857698f425bSmrg	    esac
7858698f425bSmrg	  done # Gone through all deplibs.
7859698f425bSmrg	  ;;
7860698f425bSmrg	match_pattern*)
7861698f425bSmrg	  set dummy $deplibs_check_method; shift
7862698f425bSmrg	  match_pattern_regex=`expr "$deplibs_check_method" : "$1 \(.*\)"`
7863698f425bSmrg	  for a_deplib in $deplibs; do
7864698f425bSmrg	    case $a_deplib in
7865698f425bSmrg	    -l*)
7866698f425bSmrg	      func_stripname -l '' "$a_deplib"
7867698f425bSmrg	      name=$func_stripname_result
7868698f425bSmrg	      if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then
7869698f425bSmrg		case " $predeps $postdeps " in
7870698f425bSmrg		*" $a_deplib "*)
78719ef0b394Smrg		  func_append newdeplibs " $a_deplib"
7872698f425bSmrg		  a_deplib=""
7873698f425bSmrg		  ;;
7874698f425bSmrg		esac
7875698f425bSmrg	      fi
7876698f425bSmrg	      if test -n "$a_deplib" ; then
7877698f425bSmrg		libname=`eval "\\$ECHO \"$libname_spec\""`
7878698f425bSmrg		for i in $lib_search_path $sys_lib_search_path $shlib_search_path; do
7879698f425bSmrg		  potential_libs=`ls $i/$libname[.-]* 2>/dev/null`
7880698f425bSmrg		  for potent_lib in $potential_libs; do
7881698f425bSmrg		    potlib="$potent_lib" # see symlink-check above in file_magic test
78829ef0b394Smrg		    if eval "\$ECHO \"$potent_lib\"" 2>/dev/null | $SED 10q | \
7883698f425bSmrg		       $EGREP "$match_pattern_regex" > /dev/null; then
78849ef0b394Smrg		      func_append newdeplibs " $a_deplib"
7885698f425bSmrg		      a_deplib=""
7886698f425bSmrg		      break 2
7887698f425bSmrg		    fi
7888698f425bSmrg		  done
7889698f425bSmrg		done
7890698f425bSmrg	      fi
7891698f425bSmrg	      if test -n "$a_deplib" ; then
7892698f425bSmrg		droppeddeps=yes
78939ef0b394Smrg		echo
7894698f425bSmrg		$ECHO "*** Warning: linker path does not have real file for library $a_deplib."
78959ef0b394Smrg		echo "*** I have the capability to make that library automatically link in when"
78969ef0b394Smrg		echo "*** you link to this library.  But I can only do this if you have a"
78979ef0b394Smrg		echo "*** shared version of the library, which you do not appear to have"
78989ef0b394Smrg		echo "*** because I did check the linker path looking for a file starting"
7899698f425bSmrg		if test -z "$potlib" ; then
7900698f425bSmrg		  $ECHO "*** with $libname but no candidates were found. (...for regex pattern test)"
7901698f425bSmrg		else
7902698f425bSmrg		  $ECHO "*** with $libname and none of the candidates passed a file format test"
7903698f425bSmrg		  $ECHO "*** using a regex pattern. Last file checked: $potlib"
7904698f425bSmrg		fi
7905698f425bSmrg	      fi
7906698f425bSmrg	      ;;
7907698f425bSmrg	    *)
7908698f425bSmrg	      # Add a -L argument.
79099ef0b394Smrg	      func_append newdeplibs " $a_deplib"
7910698f425bSmrg	      ;;
7911698f425bSmrg	    esac
7912698f425bSmrg	  done # Gone through all deplibs.
7913698f425bSmrg	  ;;
7914698f425bSmrg	none | unknown | *)
7915698f425bSmrg	  newdeplibs=""
79169ef0b394Smrg	  tmp_deplibs=`$ECHO " $deplibs" | $SED 's/ -lc$//; s/ -[LR][^ ]*//g'`
7917698f425bSmrg	  if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then
7918698f425bSmrg	    for i in $predeps $postdeps ; do
7919698f425bSmrg	      # can't use Xsed below, because $i might contain '/'
79209ef0b394Smrg	      tmp_deplibs=`$ECHO " $tmp_deplibs" | $SED "s,$i,,"`
7921698f425bSmrg	    done
7922698f425bSmrg	  fi
79239ef0b394Smrg	  case $tmp_deplibs in
79249ef0b394Smrg	  *[!\	\ ]*)
79259ef0b394Smrg	    echo
7926698f425bSmrg	    if test "X$deplibs_check_method" = "Xnone"; then
79279ef0b394Smrg	      echo "*** Warning: inter-library dependencies are not supported in this platform."
7928698f425bSmrg	    else
79299ef0b394Smrg	      echo "*** Warning: inter-library dependencies are not known to be supported."
7930698f425bSmrg	    fi
79319ef0b394Smrg	    echo "*** All declared inter-library dependencies are being dropped."
7932698f425bSmrg	    droppeddeps=yes
79339ef0b394Smrg	    ;;
79349ef0b394Smrg	  esac
7935698f425bSmrg	  ;;
7936698f425bSmrg	esac
7937698f425bSmrg	versuffix=$versuffix_save
7938698f425bSmrg	major=$major_save
7939698f425bSmrg	release=$release_save
7940698f425bSmrg	libname=$libname_save
7941698f425bSmrg	name=$name_save
7942698f425bSmrg
7943698f425bSmrg	case $host in
7944698f425bSmrg	*-*-rhapsody* | *-*-darwin1.[012])
7945698f425bSmrg	  # On Rhapsody replace the C library with the System framework
79469ef0b394Smrg	  newdeplibs=`$ECHO " $newdeplibs" | $SED 's/ -lc / System.ltframework /'`
7947698f425bSmrg	  ;;
7948698f425bSmrg	esac
7949698f425bSmrg
7950698f425bSmrg	if test "$droppeddeps" = yes; then
7951698f425bSmrg	  if test "$module" = yes; then
79529ef0b394Smrg	    echo
79539ef0b394Smrg	    echo "*** Warning: libtool could not satisfy all declared inter-library"
7954698f425bSmrg	    $ECHO "*** dependencies of module $libname.  Therefore, libtool will create"
79559ef0b394Smrg	    echo "*** a static module, that should work as long as the dlopening"
79569ef0b394Smrg	    echo "*** application is linked with the -dlopen flag."
7957698f425bSmrg	    if test -z "$global_symbol_pipe"; then
79589ef0b394Smrg	      echo
79599ef0b394Smrg	      echo "*** However, this would only work if libtool was able to extract symbol"
79609ef0b394Smrg	      echo "*** lists from a program, using \`nm' or equivalent, but libtool could"
79619ef0b394Smrg	      echo "*** not find such a program.  So, this module is probably useless."
79629ef0b394Smrg	      echo "*** \`nm' from GNU binutils and a full rebuild may help."
7963698f425bSmrg	    fi
7964698f425bSmrg	    if test "$build_old_libs" = no; then
7965698f425bSmrg	      oldlibs="$output_objdir/$libname.$libext"
7966698f425bSmrg	      build_libtool_libs=module
7967698f425bSmrg	      build_old_libs=yes
7968698f425bSmrg	    else
7969698f425bSmrg	      build_libtool_libs=no
7970698f425bSmrg	    fi
7971698f425bSmrg	  else
79729ef0b394Smrg	    echo "*** The inter-library dependencies that have been dropped here will be"
79739ef0b394Smrg	    echo "*** automatically added whenever a program is linked with this library"
79749ef0b394Smrg	    echo "*** or is declared to -dlopen it."
7975698f425bSmrg
7976698f425bSmrg	    if test "$allow_undefined" = no; then
79779ef0b394Smrg	      echo
79789ef0b394Smrg	      echo "*** Since this library must not contain undefined symbols,"
79799ef0b394Smrg	      echo "*** because either the platform does not support them or"
79809ef0b394Smrg	      echo "*** it was explicitly requested with -no-undefined,"
79819ef0b394Smrg	      echo "*** libtool will only create a static version of it."
7982698f425bSmrg	      if test "$build_old_libs" = no; then
7983698f425bSmrg		oldlibs="$output_objdir/$libname.$libext"
7984698f425bSmrg		build_libtool_libs=module
7985698f425bSmrg		build_old_libs=yes
7986698f425bSmrg	      else
7987698f425bSmrg		build_libtool_libs=no
7988698f425bSmrg	      fi
7989698f425bSmrg	    fi
7990698f425bSmrg	  fi
7991698f425bSmrg	fi
7992698f425bSmrg	# Done checking deplibs!
7993698f425bSmrg	deplibs=$newdeplibs
7994698f425bSmrg      fi
7995698f425bSmrg      # Time to change all our "foo.ltframework" stuff back to "-framework foo"
7996698f425bSmrg      case $host in
7997698f425bSmrg	*-*-darwin*)
79989ef0b394Smrg	  newdeplibs=`$ECHO " $newdeplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'`
79999ef0b394Smrg	  new_inherited_linker_flags=`$ECHO " $new_inherited_linker_flags" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'`
80009ef0b394Smrg	  deplibs=`$ECHO " $deplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'`
8001698f425bSmrg	  ;;
8002698f425bSmrg      esac
8003698f425bSmrg
8004698f425bSmrg      # move library search paths that coincide with paths to not yet
8005698f425bSmrg      # installed libraries to the beginning of the library search list
8006698f425bSmrg      new_libs=
8007698f425bSmrg      for path in $notinst_path; do
8008698f425bSmrg	case " $new_libs " in
8009698f425bSmrg	*" -L$path/$objdir "*) ;;
8010698f425bSmrg	*)
8011698f425bSmrg	  case " $deplibs " in
8012698f425bSmrg	  *" -L$path/$objdir "*)
80139ef0b394Smrg	    func_append new_libs " -L$path/$objdir" ;;
8014698f425bSmrg	  esac
8015698f425bSmrg	  ;;
8016698f425bSmrg	esac
8017698f425bSmrg      done
8018698f425bSmrg      for deplib in $deplibs; do
8019698f425bSmrg	case $deplib in
8020698f425bSmrg	-L*)
8021698f425bSmrg	  case " $new_libs " in
8022698f425bSmrg	  *" $deplib "*) ;;
80239ef0b394Smrg	  *) func_append new_libs " $deplib" ;;
8024698f425bSmrg	  esac
8025698f425bSmrg	  ;;
80269ef0b394Smrg	*) func_append new_libs " $deplib" ;;
8027698f425bSmrg	esac
8028698f425bSmrg      done
8029698f425bSmrg      deplibs="$new_libs"
8030698f425bSmrg
8031698f425bSmrg      # All the library-specific variables (install_libdir is set above).
8032698f425bSmrg      library_names=
8033698f425bSmrg      old_library=
8034698f425bSmrg      dlname=
8035698f425bSmrg
8036698f425bSmrg      # Test again, we may have decided not to build it any more
8037698f425bSmrg      if test "$build_libtool_libs" = yes; then
8038fb5e8d76Smrg	# Remove ${wl} instances when linking with ld.
8039fb5e8d76Smrg	# FIXME: should test the right _cmds variable.
8040fb5e8d76Smrg	case $archive_cmds in
8041fb5e8d76Smrg	  *\$LD\ *) wl= ;;
8042fb5e8d76Smrg        esac
8043698f425bSmrg	if test "$hardcode_into_libs" = yes; then
8044698f425bSmrg	  # Hardcode the library paths
8045698f425bSmrg	  hardcode_libdirs=
8046698f425bSmrg	  dep_rpath=
8047698f425bSmrg	  rpath="$finalize_rpath"
80489ef0b394Smrg	  test "$opt_mode" != relink && rpath="$compile_rpath$rpath"
8049698f425bSmrg	  for libdir in $rpath; do
8050698f425bSmrg	    if test -n "$hardcode_libdir_flag_spec"; then
8051698f425bSmrg	      if test -n "$hardcode_libdir_separator"; then
80529ef0b394Smrg		func_replace_sysroot "$libdir"
80539ef0b394Smrg		libdir=$func_replace_sysroot_result
8054698f425bSmrg		if test -z "$hardcode_libdirs"; then
8055698f425bSmrg		  hardcode_libdirs="$libdir"
8056698f425bSmrg		else
8057698f425bSmrg		  # Just accumulate the unique libdirs.
8058698f425bSmrg		  case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in
8059698f425bSmrg		  *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*)
8060698f425bSmrg		    ;;
8061698f425bSmrg		  *)
80629ef0b394Smrg		    func_append hardcode_libdirs "$hardcode_libdir_separator$libdir"
8063698f425bSmrg		    ;;
8064698f425bSmrg		  esac
8065698f425bSmrg		fi
8066698f425bSmrg	      else
8067698f425bSmrg		eval flag=\"$hardcode_libdir_flag_spec\"
80689ef0b394Smrg		func_append dep_rpath " $flag"
8069698f425bSmrg	      fi
8070698f425bSmrg	    elif test -n "$runpath_var"; then
8071698f425bSmrg	      case "$perm_rpath " in
8072698f425bSmrg	      *" $libdir "*) ;;
8073fb5e8d76Smrg	      *) func_append perm_rpath " $libdir" ;;
8074698f425bSmrg	      esac
8075698f425bSmrg	    fi
8076698f425bSmrg	  done
8077698f425bSmrg	  # Substitute the hardcoded libdirs into the rpath.
8078698f425bSmrg	  if test -n "$hardcode_libdir_separator" &&
8079698f425bSmrg	     test -n "$hardcode_libdirs"; then
8080698f425bSmrg	    libdir="$hardcode_libdirs"
8081fb5e8d76Smrg	    eval "dep_rpath=\"$hardcode_libdir_flag_spec\""
8082698f425bSmrg	  fi
8083698f425bSmrg	  if test -n "$runpath_var" && test -n "$perm_rpath"; then
8084698f425bSmrg	    # We should set the runpath_var.
8085698f425bSmrg	    rpath=
8086698f425bSmrg	    for dir in $perm_rpath; do
80879ef0b394Smrg	      func_append rpath "$dir:"
8088698f425bSmrg	    done
8089698f425bSmrg	    eval "$runpath_var='$rpath\$$runpath_var'; export $runpath_var"
8090698f425bSmrg	  fi
8091698f425bSmrg	  test -n "$dep_rpath" && deplibs="$dep_rpath $deplibs"
8092698f425bSmrg	fi
8093266e564dSmrg
8094698f425bSmrg	shlibpath="$finalize_shlibpath"
80959ef0b394Smrg	test "$opt_mode" != relink && shlibpath="$compile_shlibpath$shlibpath"
8096698f425bSmrg	if test -n "$shlibpath"; then
8097698f425bSmrg	  eval "$shlibpath_var='$shlibpath\$$shlibpath_var'; export $shlibpath_var"
8098698f425bSmrg	fi
8099266e564dSmrg
8100698f425bSmrg	# Get the real and link names of the library.
8101698f425bSmrg	eval shared_ext=\"$shrext_cmds\"
8102698f425bSmrg	eval library_names=\"$library_names_spec\"
8103698f425bSmrg	set dummy $library_names
8104698f425bSmrg	shift
8105698f425bSmrg	realname="$1"
8106698f425bSmrg	shift
8107266e564dSmrg
8108698f425bSmrg	if test -n "$soname_spec"; then
8109698f425bSmrg	  eval soname=\"$soname_spec\"
8110698f425bSmrg	else
8111698f425bSmrg	  soname="$realname"
8112698f425bSmrg	fi
8113698f425bSmrg	if test -z "$dlname"; then
8114698f425bSmrg	  dlname=$soname
8115698f425bSmrg	fi
8116266e564dSmrg
8117698f425bSmrg	lib="$output_objdir/$realname"
8118698f425bSmrg	linknames=
8119698f425bSmrg	for link
8120698f425bSmrg	do
81219ef0b394Smrg	  func_append linknames " $link"
8122698f425bSmrg	done
8123266e564dSmrg
8124698f425bSmrg	# Use standard objects if they are pic
81259ef0b394Smrg	test -z "$pic_flag" && libobjs=`$ECHO "$libobjs" | $SP2NL | $SED "$lo2o" | $NL2SP`
8126698f425bSmrg	test "X$libobjs" = "X " && libobjs=
8127266e564dSmrg
8128698f425bSmrg	delfiles=
8129698f425bSmrg	if test -n "$export_symbols" && test -n "$include_expsyms"; then
8130698f425bSmrg	  $opt_dry_run || cp "$export_symbols" "$output_objdir/$libname.uexp"
8131698f425bSmrg	  export_symbols="$output_objdir/$libname.uexp"
81329ef0b394Smrg	  func_append delfiles " $export_symbols"
8133698f425bSmrg	fi
8134266e564dSmrg
8135698f425bSmrg	orig_export_symbols=
8136698f425bSmrg	case $host_os in
8137698f425bSmrg	cygwin* | mingw* | cegcc*)
8138698f425bSmrg	  if test -n "$export_symbols" && test -z "$export_symbols_regex"; then
8139698f425bSmrg	    # exporting using user supplied symfile
8140698f425bSmrg	    if test "x`$SED 1q $export_symbols`" != xEXPORTS; then
8141698f425bSmrg	      # and it's NOT already a .def file. Must figure out
8142698f425bSmrg	      # which of the given symbols are data symbols and tag
8143698f425bSmrg	      # them as such. So, trigger use of export_symbols_cmds.
8144698f425bSmrg	      # export_symbols gets reassigned inside the "prepare
8145698f425bSmrg	      # the list of exported symbols" if statement, so the
8146698f425bSmrg	      # include_expsyms logic still works.
8147698f425bSmrg	      orig_export_symbols="$export_symbols"
8148698f425bSmrg	      export_symbols=
8149698f425bSmrg	      always_export_symbols=yes
8150698f425bSmrg	    fi
8151698f425bSmrg	  fi
8152698f425bSmrg	  ;;
8153698f425bSmrg	esac
8154266e564dSmrg
8155698f425bSmrg	# Prepare the list of exported symbols
8156698f425bSmrg	if test -z "$export_symbols"; then
8157698f425bSmrg	  if test "$always_export_symbols" = yes || test -n "$export_symbols_regex"; then
8158698f425bSmrg	    func_verbose "generating symbol list for \`$libname.la'"
8159698f425bSmrg	    export_symbols="$output_objdir/$libname.exp"
8160698f425bSmrg	    $opt_dry_run || $RM $export_symbols
8161698f425bSmrg	    cmds=$export_symbols_cmds
8162698f425bSmrg	    save_ifs="$IFS"; IFS='~'
81639ef0b394Smrg	    for cmd1 in $cmds; do
8164698f425bSmrg	      IFS="$save_ifs"
81659ef0b394Smrg	      # Take the normal branch if the nm_file_list_spec branch
81669ef0b394Smrg	      # doesn't work or if tool conversion is not needed.
81679ef0b394Smrg	      case $nm_file_list_spec~$to_tool_file_cmd in
81689ef0b394Smrg		*~func_convert_file_noop | *~func_convert_file_msys_to_w32 | ~*)
81699ef0b394Smrg		  try_normal_branch=yes
81709ef0b394Smrg		  eval cmd=\"$cmd1\"
81719ef0b394Smrg		  func_len " $cmd"
81729ef0b394Smrg		  len=$func_len_result
81739ef0b394Smrg		  ;;
81749ef0b394Smrg		*)
81759ef0b394Smrg		  try_normal_branch=no
81769ef0b394Smrg		  ;;
81779ef0b394Smrg	      esac
81789ef0b394Smrg	      if test "$try_normal_branch" = yes \
81799ef0b394Smrg		 && { test "$len" -lt "$max_cmd_len" \
81809ef0b394Smrg		      || test "$max_cmd_len" -le -1; }
81819ef0b394Smrg	      then
81829ef0b394Smrg		func_show_eval "$cmd" 'exit $?'
81839ef0b394Smrg		skipped_export=false
81849ef0b394Smrg	      elif test -n "$nm_file_list_spec"; then
81859ef0b394Smrg		func_basename "$output"
81869ef0b394Smrg		output_la=$func_basename_result
81879ef0b394Smrg		save_libobjs=$libobjs
81889ef0b394Smrg		save_output=$output
81899ef0b394Smrg		output=${output_objdir}/${output_la}.nm
81909ef0b394Smrg		func_to_tool_file "$output"
81919ef0b394Smrg		libobjs=$nm_file_list_spec$func_to_tool_file_result
81929ef0b394Smrg		func_append delfiles " $output"
81939ef0b394Smrg		func_verbose "creating $NM input file list: $output"
81949ef0b394Smrg		for obj in $save_libobjs; do
81959ef0b394Smrg		  func_to_tool_file "$obj"
81969ef0b394Smrg		  $ECHO "$func_to_tool_file_result"
81979ef0b394Smrg		done > "$output"
81989ef0b394Smrg		eval cmd=\"$cmd1\"
8199698f425bSmrg		func_show_eval "$cmd" 'exit $?'
82009ef0b394Smrg		output=$save_output
82019ef0b394Smrg		libobjs=$save_libobjs
8202698f425bSmrg		skipped_export=false
8203698f425bSmrg	      else
8204698f425bSmrg		# The command line is too long to execute in one step.
8205698f425bSmrg		func_verbose "using reloadable object file for export list..."
8206698f425bSmrg		skipped_export=:
8207698f425bSmrg		# Break out early, otherwise skipped_export may be
8208698f425bSmrg		# set to false by a later but shorter cmd.
8209698f425bSmrg		break
8210698f425bSmrg	      fi
8211698f425bSmrg	    done
8212698f425bSmrg	    IFS="$save_ifs"
8213698f425bSmrg	    if test -n "$export_symbols_regex" && test "X$skipped_export" != "X:"; then
8214698f425bSmrg	      func_show_eval '$EGREP -e "$export_symbols_regex" "$export_symbols" > "${export_symbols}T"'
8215698f425bSmrg	      func_show_eval '$MV "${export_symbols}T" "$export_symbols"'
8216698f425bSmrg	    fi
8217698f425bSmrg	  fi
8218266e564dSmrg	fi
8219266e564dSmrg
8220698f425bSmrg	if test -n "$export_symbols" && test -n "$include_expsyms"; then
8221698f425bSmrg	  tmp_export_symbols="$export_symbols"
8222698f425bSmrg	  test -n "$orig_export_symbols" && tmp_export_symbols="$orig_export_symbols"
82239ef0b394Smrg	  $opt_dry_run || eval '$ECHO "$include_expsyms" | $SP2NL >> "$tmp_export_symbols"'
8224698f425bSmrg	fi
8225266e564dSmrg
8226698f425bSmrg	if test "X$skipped_export" != "X:" && test -n "$orig_export_symbols"; then
8227698f425bSmrg	  # The given exports_symbols file has to be filtered, so filter it.
8228698f425bSmrg	  func_verbose "filter symbol list for \`$libname.la' to tag DATA exports"
8229698f425bSmrg	  # FIXME: $output_objdir/$libname.filter potentially contains lots of
8230698f425bSmrg	  # 's' commands which not all seds can handle. GNU sed should be fine
8231698f425bSmrg	  # though. Also, the filter scales superlinearly with the number of
8232698f425bSmrg	  # global variables. join(1) would be nice here, but unfortunately
8233698f425bSmrg	  # isn't a blessed tool.
8234698f425bSmrg	  $opt_dry_run || $SED -e '/[ ,]DATA/!d;s,\(.*\)\([ \,].*\),s|^\1$|\1\2|,' < $export_symbols > $output_objdir/$libname.filter
82359ef0b394Smrg	  func_append delfiles " $export_symbols $output_objdir/$libname.filter"
8236698f425bSmrg	  export_symbols=$output_objdir/$libname.def
8237698f425bSmrg	  $opt_dry_run || $SED -f $output_objdir/$libname.filter < $orig_export_symbols > $export_symbols
8238698f425bSmrg	fi
8239266e564dSmrg
8240698f425bSmrg	tmp_deplibs=
8241698f425bSmrg	for test_deplib in $deplibs; do
8242698f425bSmrg	  case " $convenience " in
8243698f425bSmrg	  *" $test_deplib "*) ;;
8244698f425bSmrg	  *)
82459ef0b394Smrg	    func_append tmp_deplibs " $test_deplib"
8246698f425bSmrg	    ;;
8247698f425bSmrg	  esac
8248698f425bSmrg	done
8249698f425bSmrg	deplibs="$tmp_deplibs"
8250266e564dSmrg
8251698f425bSmrg	if test -n "$convenience"; then
8252698f425bSmrg	  if test -n "$whole_archive_flag_spec" &&
8253698f425bSmrg	    test "$compiler_needs_object" = yes &&
8254698f425bSmrg	    test -z "$libobjs"; then
8255698f425bSmrg	    # extract the archives, so we have objects to list.
8256698f425bSmrg	    # TODO: could optimize this to just extract one archive.
8257698f425bSmrg	    whole_archive_flag_spec=
8258698f425bSmrg	  fi
8259698f425bSmrg	  if test -n "$whole_archive_flag_spec"; then
8260698f425bSmrg	    save_libobjs=$libobjs
8261698f425bSmrg	    eval libobjs=\"\$libobjs $whole_archive_flag_spec\"
8262698f425bSmrg	    test "X$libobjs" = "X " && libobjs=
8263698f425bSmrg	  else
8264698f425bSmrg	    gentop="$output_objdir/${outputname}x"
82659ef0b394Smrg	    func_append generated " $gentop"
8266266e564dSmrg
8267698f425bSmrg	    func_extract_archives $gentop $convenience
82689ef0b394Smrg	    func_append libobjs " $func_extract_archives_result"
8269698f425bSmrg	    test "X$libobjs" = "X " && libobjs=
8270698f425bSmrg	  fi
8271266e564dSmrg	fi
8272266e564dSmrg
8273698f425bSmrg	if test "$thread_safe" = yes && test -n "$thread_safe_flag_spec"; then
8274698f425bSmrg	  eval flag=\"$thread_safe_flag_spec\"
82759ef0b394Smrg	  func_append linker_flags " $flag"
8276266e564dSmrg	fi
8277266e564dSmrg
8278698f425bSmrg	# Make a backup of the uninstalled library when relinking
82799ef0b394Smrg	if test "$opt_mode" = relink; then
8280698f425bSmrg	  $opt_dry_run || eval '(cd $output_objdir && $RM ${realname}U && $MV $realname ${realname}U)' || exit $?
8281698f425bSmrg	fi
8282266e564dSmrg
8283698f425bSmrg	# Do each of the archive commands.
8284698f425bSmrg	if test "$module" = yes && test -n "$module_cmds" ; then
8285698f425bSmrg	  if test -n "$export_symbols" && test -n "$module_expsym_cmds"; then
8286698f425bSmrg	    eval test_cmds=\"$module_expsym_cmds\"
8287698f425bSmrg	    cmds=$module_expsym_cmds
8288698f425bSmrg	  else
8289698f425bSmrg	    eval test_cmds=\"$module_cmds\"
8290698f425bSmrg	    cmds=$module_cmds
8291698f425bSmrg	  fi
8292266e564dSmrg	else
8293698f425bSmrg	  if test -n "$export_symbols" && test -n "$archive_expsym_cmds"; then
8294698f425bSmrg	    eval test_cmds=\"$archive_expsym_cmds\"
8295698f425bSmrg	    cmds=$archive_expsym_cmds
8296698f425bSmrg	  else
8297698f425bSmrg	    eval test_cmds=\"$archive_cmds\"
8298698f425bSmrg	    cmds=$archive_cmds
8299698f425bSmrg	  fi
8300266e564dSmrg	fi
8301266e564dSmrg
8302698f425bSmrg	if test "X$skipped_export" != "X:" &&
8303698f425bSmrg	   func_len " $test_cmds" &&
8304698f425bSmrg	   len=$func_len_result &&
8305698f425bSmrg	   test "$len" -lt "$max_cmd_len" || test "$max_cmd_len" -le -1; then
8306698f425bSmrg	  :
8307698f425bSmrg	else
8308698f425bSmrg	  # The command line is too long to link in one step, link piecewise
8309698f425bSmrg	  # or, if using GNU ld and skipped_export is not :, use a linker
8310698f425bSmrg	  # script.
8311266e564dSmrg
8312698f425bSmrg	  # Save the value of $output and $libobjs because we want to
8313698f425bSmrg	  # use them later.  If we have whole_archive_flag_spec, we
8314698f425bSmrg	  # want to use save_libobjs as it was before
8315698f425bSmrg	  # whole_archive_flag_spec was expanded, because we can't
8316698f425bSmrg	  # assume the linker understands whole_archive_flag_spec.
8317698f425bSmrg	  # This may have to be revisited, in case too many
8318698f425bSmrg	  # convenience libraries get linked in and end up exceeding
8319698f425bSmrg	  # the spec.
8320698f425bSmrg	  if test -z "$convenience" || test -z "$whole_archive_flag_spec"; then
8321698f425bSmrg	    save_libobjs=$libobjs
8322698f425bSmrg	  fi
8323698f425bSmrg	  save_output=$output
83249ef0b394Smrg	  func_basename "$output"
83259ef0b394Smrg	  output_la=$func_basename_result
8326266e564dSmrg
8327698f425bSmrg	  # Clear the reloadable object creation command queue and
8328698f425bSmrg	  # initialize k to one.
8329698f425bSmrg	  test_cmds=
8330698f425bSmrg	  concat_cmds=
8331698f425bSmrg	  objlist=
8332698f425bSmrg	  last_robj=
8333698f425bSmrg	  k=1
8334698f425bSmrg
8335698f425bSmrg	  if test -n "$save_libobjs" && test "X$skipped_export" != "X:" && test "$with_gnu_ld" = yes; then
8336698f425bSmrg	    output=${output_objdir}/${output_la}.lnkscript
8337698f425bSmrg	    func_verbose "creating GNU ld script: $output"
83389ef0b394Smrg	    echo 'INPUT (' > $output
8339698f425bSmrg	    for obj in $save_libobjs
8340266e564dSmrg	    do
83419ef0b394Smrg	      func_to_tool_file "$obj"
83429ef0b394Smrg	      $ECHO "$func_to_tool_file_result" >> $output
8343698f425bSmrg	    done
83449ef0b394Smrg	    echo ')' >> $output
83459ef0b394Smrg	    func_append delfiles " $output"
83469ef0b394Smrg	    func_to_tool_file "$output"
83479ef0b394Smrg	    output=$func_to_tool_file_result
8348698f425bSmrg	  elif test -n "$save_libobjs" && test "X$skipped_export" != "X:" && test "X$file_list_spec" != X; then
8349698f425bSmrg	    output=${output_objdir}/${output_la}.lnk
8350698f425bSmrg	    func_verbose "creating linker input file list: $output"
8351698f425bSmrg	    : > $output
8352698f425bSmrg	    set x $save_libobjs
8353698f425bSmrg	    shift
8354698f425bSmrg	    firstobj=
8355698f425bSmrg	    if test "$compiler_needs_object" = yes; then
8356698f425bSmrg	      firstobj="$1 "
8357698f425bSmrg	      shift
8358698f425bSmrg	    fi
8359698f425bSmrg	    for obj
8360698f425bSmrg	    do
83619ef0b394Smrg	      func_to_tool_file "$obj"
83629ef0b394Smrg	      $ECHO "$func_to_tool_file_result" >> $output
8363698f425bSmrg	    done
83649ef0b394Smrg	    func_append delfiles " $output"
83659ef0b394Smrg	    func_to_tool_file "$output"
83669ef0b394Smrg	    output=$firstobj\"$file_list_spec$func_to_tool_file_result\"
8367698f425bSmrg	  else
8368698f425bSmrg	    if test -n "$save_libobjs"; then
8369698f425bSmrg	      func_verbose "creating reloadable object files..."
8370698f425bSmrg	      output=$output_objdir/$output_la-${k}.$objext
8371698f425bSmrg	      eval test_cmds=\"$reload_cmds\"
8372698f425bSmrg	      func_len " $test_cmds"
8373698f425bSmrg	      len0=$func_len_result
8374698f425bSmrg	      len=$len0
8375698f425bSmrg
8376698f425bSmrg	      # Loop over the list of objects to be linked.
8377698f425bSmrg	      for obj in $save_libobjs
8378698f425bSmrg	      do
8379698f425bSmrg		func_len " $obj"
8380698f425bSmrg		func_arith $len + $func_len_result
8381698f425bSmrg		len=$func_arith_result
8382698f425bSmrg		if test "X$objlist" = X ||
8383698f425bSmrg		   test "$len" -lt "$max_cmd_len"; then
8384698f425bSmrg		  func_append objlist " $obj"
8385698f425bSmrg		else
8386698f425bSmrg		  # The command $test_cmds is almost too long, add a
8387698f425bSmrg		  # command to the queue.
8388698f425bSmrg		  if test "$k" -eq 1 ; then
8389698f425bSmrg		    # The first file doesn't have a previous command to add.
83909ef0b394Smrg		    reload_objs=$objlist
83919ef0b394Smrg		    eval concat_cmds=\"$reload_cmds\"
8392698f425bSmrg		  else
8393698f425bSmrg		    # All subsequent reloadable object files will link in
8394698f425bSmrg		    # the last one created.
83959ef0b394Smrg		    reload_objs="$objlist $last_robj"
83969ef0b394Smrg		    eval concat_cmds=\"\$concat_cmds~$reload_cmds~\$RM $last_robj\"
8397698f425bSmrg		  fi
8398698f425bSmrg		  last_robj=$output_objdir/$output_la-${k}.$objext
8399698f425bSmrg		  func_arith $k + 1
8400698f425bSmrg		  k=$func_arith_result
8401698f425bSmrg		  output=$output_objdir/$output_la-${k}.$objext
84029ef0b394Smrg		  objlist=" $obj"
8403698f425bSmrg		  func_len " $last_robj"
8404698f425bSmrg		  func_arith $len0 + $func_len_result
8405698f425bSmrg		  len=$func_arith_result
8406698f425bSmrg		fi
8407698f425bSmrg	      done
8408698f425bSmrg	      # Handle the remaining objects by creating one last
8409698f425bSmrg	      # reloadable object file.  All subsequent reloadable object
8410698f425bSmrg	      # files will link in the last one created.
8411698f425bSmrg	      test -z "$concat_cmds" || concat_cmds=$concat_cmds~
84129ef0b394Smrg	      reload_objs="$objlist $last_robj"
84139ef0b394Smrg	      eval concat_cmds=\"\${concat_cmds}$reload_cmds\"
8414698f425bSmrg	      if test -n "$last_robj"; then
8415698f425bSmrg	        eval concat_cmds=\"\${concat_cmds}~\$RM $last_robj\"
8416698f425bSmrg	      fi
84179ef0b394Smrg	      func_append delfiles " $output"
8418266e564dSmrg
8419698f425bSmrg	    else
8420698f425bSmrg	      output=
8421698f425bSmrg	    fi
8422266e564dSmrg
8423698f425bSmrg	    if ${skipped_export-false}; then
8424698f425bSmrg	      func_verbose "generating symbol list for \`$libname.la'"
8425698f425bSmrg	      export_symbols="$output_objdir/$libname.exp"
8426698f425bSmrg	      $opt_dry_run || $RM $export_symbols
8427698f425bSmrg	      libobjs=$output
8428698f425bSmrg	      # Append the command to create the export file.
8429698f425bSmrg	      test -z "$concat_cmds" || concat_cmds=$concat_cmds~
8430698f425bSmrg	      eval concat_cmds=\"\$concat_cmds$export_symbols_cmds\"
8431698f425bSmrg	      if test -n "$last_robj"; then
8432698f425bSmrg		eval concat_cmds=\"\$concat_cmds~\$RM $last_robj\"
8433698f425bSmrg	      fi
8434266e564dSmrg	    fi
8435266e564dSmrg
8436698f425bSmrg	    test -n "$save_libobjs" &&
8437698f425bSmrg	      func_verbose "creating a temporary reloadable object file: $output"
8438266e564dSmrg
8439698f425bSmrg	    # Loop through the commands generated above and execute them.
8440698f425bSmrg	    save_ifs="$IFS"; IFS='~'
8441698f425bSmrg	    for cmd in $concat_cmds; do
8442698f425bSmrg	      IFS="$save_ifs"
8443698f425bSmrg	      $opt_silent || {
8444698f425bSmrg		  func_quote_for_expand "$cmd"
8445698f425bSmrg		  eval "func_echo $func_quote_for_expand_result"
8446698f425bSmrg	      }
8447698f425bSmrg	      $opt_dry_run || eval "$cmd" || {
8448698f425bSmrg		lt_exit=$?
8449698f425bSmrg
8450698f425bSmrg		# Restore the uninstalled library and exit
84519ef0b394Smrg		if test "$opt_mode" = relink; then
8452698f425bSmrg		  ( cd "$output_objdir" && \
8453698f425bSmrg		    $RM "${realname}T" && \
8454698f425bSmrg		    $MV "${realname}U" "$realname" )
8455698f425bSmrg		fi
8456266e564dSmrg
8457698f425bSmrg		exit $lt_exit
8458698f425bSmrg	      }
8459698f425bSmrg	    done
8460698f425bSmrg	    IFS="$save_ifs"
8461266e564dSmrg
8462698f425bSmrg	    if test -n "$export_symbols_regex" && ${skipped_export-false}; then
8463698f425bSmrg	      func_show_eval '$EGREP -e "$export_symbols_regex" "$export_symbols" > "${export_symbols}T"'
8464698f425bSmrg	      func_show_eval '$MV "${export_symbols}T" "$export_symbols"'
8465266e564dSmrg	    fi
8466266e564dSmrg	  fi
8467266e564dSmrg
8468698f425bSmrg          if ${skipped_export-false}; then
8469698f425bSmrg	    if test -n "$export_symbols" && test -n "$include_expsyms"; then
8470698f425bSmrg	      tmp_export_symbols="$export_symbols"
8471698f425bSmrg	      test -n "$orig_export_symbols" && tmp_export_symbols="$orig_export_symbols"
84729ef0b394Smrg	      $opt_dry_run || eval '$ECHO "$include_expsyms" | $SP2NL >> "$tmp_export_symbols"'
8473698f425bSmrg	    fi
8474266e564dSmrg
8475698f425bSmrg	    if test -n "$orig_export_symbols"; then
8476698f425bSmrg	      # The given exports_symbols file has to be filtered, so filter it.
8477698f425bSmrg	      func_verbose "filter symbol list for \`$libname.la' to tag DATA exports"
8478698f425bSmrg	      # FIXME: $output_objdir/$libname.filter potentially contains lots of
8479698f425bSmrg	      # 's' commands which not all seds can handle. GNU sed should be fine
8480698f425bSmrg	      # though. Also, the filter scales superlinearly with the number of
8481698f425bSmrg	      # global variables. join(1) would be nice here, but unfortunately
8482698f425bSmrg	      # isn't a blessed tool.
8483698f425bSmrg	      $opt_dry_run || $SED -e '/[ ,]DATA/!d;s,\(.*\)\([ \,].*\),s|^\1$|\1\2|,' < $export_symbols > $output_objdir/$libname.filter
84849ef0b394Smrg	      func_append delfiles " $export_symbols $output_objdir/$libname.filter"
8485698f425bSmrg	      export_symbols=$output_objdir/$libname.def
8486698f425bSmrg	      $opt_dry_run || $SED -f $output_objdir/$libname.filter < $orig_export_symbols > $export_symbols
8487698f425bSmrg	    fi
8488698f425bSmrg	  fi
8489266e564dSmrg
8490698f425bSmrg	  libobjs=$output
8491698f425bSmrg	  # Restore the value of output.
8492698f425bSmrg	  output=$save_output
8493266e564dSmrg
8494698f425bSmrg	  if test -n "$convenience" && test -n "$whole_archive_flag_spec"; then
8495698f425bSmrg	    eval libobjs=\"\$libobjs $whole_archive_flag_spec\"
8496698f425bSmrg	    test "X$libobjs" = "X " && libobjs=
8497698f425bSmrg	  fi
8498698f425bSmrg	  # Expand the library linking commands again to reset the
8499698f425bSmrg	  # value of $libobjs for piecewise linking.
8500266e564dSmrg
8501698f425bSmrg	  # Do each of the archive commands.
8502698f425bSmrg	  if test "$module" = yes && test -n "$module_cmds" ; then
8503698f425bSmrg	    if test -n "$export_symbols" && test -n "$module_expsym_cmds"; then
8504698f425bSmrg	      cmds=$module_expsym_cmds
8505698f425bSmrg	    else
8506698f425bSmrg	      cmds=$module_cmds
8507266e564dSmrg	    fi
8508266e564dSmrg	  else
8509698f425bSmrg	    if test -n "$export_symbols" && test -n "$archive_expsym_cmds"; then
8510698f425bSmrg	      cmds=$archive_expsym_cmds
8511698f425bSmrg	    else
8512698f425bSmrg	      cmds=$archive_cmds
8513698f425bSmrg	    fi
8514266e564dSmrg	  fi
8515698f425bSmrg	fi
8516266e564dSmrg
8517698f425bSmrg	if test -n "$delfiles"; then
8518698f425bSmrg	  # Append the command to remove temporary files to $cmds.
8519698f425bSmrg	  eval cmds=\"\$cmds~\$RM $delfiles\"
8520698f425bSmrg	fi
8521266e564dSmrg
8522698f425bSmrg	# Add any objects from preloaded convenience libraries
8523698f425bSmrg	if test -n "$dlprefiles"; then
8524698f425bSmrg	  gentop="$output_objdir/${outputname}x"
85259ef0b394Smrg	  func_append generated " $gentop"
8526266e564dSmrg
8527698f425bSmrg	  func_extract_archives $gentop $dlprefiles
85289ef0b394Smrg	  func_append libobjs " $func_extract_archives_result"
8529698f425bSmrg	  test "X$libobjs" = "X " && libobjs=
8530698f425bSmrg	fi
8531266e564dSmrg
8532698f425bSmrg	save_ifs="$IFS"; IFS='~'
8533698f425bSmrg	for cmd in $cmds; do
8534698f425bSmrg	  IFS="$save_ifs"
8535698f425bSmrg	  eval cmd=\"$cmd\"
8536698f425bSmrg	  $opt_silent || {
8537698f425bSmrg	    func_quote_for_expand "$cmd"
8538698f425bSmrg	    eval "func_echo $func_quote_for_expand_result"
8539698f425bSmrg	  }
8540698f425bSmrg	  $opt_dry_run || eval "$cmd" || {
8541698f425bSmrg	    lt_exit=$?
8542266e564dSmrg
8543698f425bSmrg	    # Restore the uninstalled library and exit
85449ef0b394Smrg	    if test "$opt_mode" = relink; then
8545698f425bSmrg	      ( cd "$output_objdir" && \
8546698f425bSmrg	        $RM "${realname}T" && \
8547698f425bSmrg		$MV "${realname}U" "$realname" )
8548698f425bSmrg	    fi
8549266e564dSmrg
8550698f425bSmrg	    exit $lt_exit
8551698f425bSmrg	  }
8552698f425bSmrg	done
8553698f425bSmrg	IFS="$save_ifs"
8554266e564dSmrg
8555698f425bSmrg	# Restore the uninstalled library and exit
85569ef0b394Smrg	if test "$opt_mode" = relink; then
8557698f425bSmrg	  $opt_dry_run || eval '(cd $output_objdir && $RM ${realname}T && $MV $realname ${realname}T && $MV ${realname}U $realname)' || exit $?
8558266e564dSmrg
8559698f425bSmrg	  if test -n "$convenience"; then
8560698f425bSmrg	    if test -z "$whole_archive_flag_spec"; then
8561698f425bSmrg	      func_show_eval '${RM}r "$gentop"'
8562698f425bSmrg	    fi
8563698f425bSmrg	  fi
8564266e564dSmrg
8565698f425bSmrg	  exit $EXIT_SUCCESS
8566698f425bSmrg	fi
8567698f425bSmrg
8568698f425bSmrg	# Create links to the real library.
8569698f425bSmrg	for linkname in $linknames; do
8570698f425bSmrg	  if test "$realname" != "$linkname"; then
8571698f425bSmrg	    func_show_eval '(cd "$output_objdir" && $RM "$linkname" && $LN_S "$realname" "$linkname")' 'exit $?'
8572266e564dSmrg	  fi
8573266e564dSmrg	done
8574266e564dSmrg
8575698f425bSmrg	# If -module or -export-dynamic was specified, set the dlname.
8576698f425bSmrg	if test "$module" = yes || test "$export_dynamic" = yes; then
8577698f425bSmrg	  # On all known operating systems, these are identical.
8578698f425bSmrg	  dlname="$soname"
8579698f425bSmrg	fi
8580698f425bSmrg      fi
8581266e564dSmrg      ;;
8582266e564dSmrg
8583698f425bSmrg    obj)
8584698f425bSmrg      if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then
8585698f425bSmrg	func_warning "\`-dlopen' is ignored for objects"
8586698f425bSmrg      fi
8587266e564dSmrg
8588698f425bSmrg      case " $deplibs" in
8589698f425bSmrg      *\ -l* | *\ -L*)
8590698f425bSmrg	func_warning "\`-l' and \`-L' are ignored for objects" ;;
8591266e564dSmrg      esac
8592266e564dSmrg
8593698f425bSmrg      test -n "$rpath" && \
8594698f425bSmrg	func_warning "\`-rpath' is ignored for objects"
8595698f425bSmrg
8596698f425bSmrg      test -n "$xrpath" && \
8597698f425bSmrg	func_warning "\`-R' is ignored for objects"
8598266e564dSmrg
8599698f425bSmrg      test -n "$vinfo" && \
8600698f425bSmrg	func_warning "\`-version-info' is ignored for objects"
8601266e564dSmrg
8602698f425bSmrg      test -n "$release" && \
8603698f425bSmrg	func_warning "\`-release' is ignored for objects"
8604698f425bSmrg
8605698f425bSmrg      case $output in
8606698f425bSmrg      *.lo)
8607698f425bSmrg	test -n "$objs$old_deplibs" && \
8608698f425bSmrg	  func_fatal_error "cannot build library object \`$output' from non-libtool objects"
8609698f425bSmrg
8610698f425bSmrg	libobj=$output
8611698f425bSmrg	func_lo2o "$libobj"
8612698f425bSmrg	obj=$func_lo2o_result
8613266e564dSmrg	;;
8614266e564dSmrg      *)
8615698f425bSmrg	libobj=
8616698f425bSmrg	obj="$output"
8617266e564dSmrg	;;
8618266e564dSmrg      esac
8619266e564dSmrg
8620698f425bSmrg      # Delete the old objects.
8621698f425bSmrg      $opt_dry_run || $RM $obj $libobj
8622266e564dSmrg
8623698f425bSmrg      # Objects from convenience libraries.  This assumes
8624698f425bSmrg      # single-version convenience libraries.  Whenever we create
8625698f425bSmrg      # different ones for PIC/non-PIC, this we'll have to duplicate
8626698f425bSmrg      # the extraction.
8627698f425bSmrg      reload_conv_objs=
8628698f425bSmrg      gentop=
8629698f425bSmrg      # reload_cmds runs $LD directly, so let us get rid of
8630698f425bSmrg      # -Wl from whole_archive_flag_spec and hope we can get by with
8631698f425bSmrg      # turning comma into space..
8632698f425bSmrg      wl=
8633266e564dSmrg
8634698f425bSmrg      if test -n "$convenience"; then
8635698f425bSmrg	if test -n "$whole_archive_flag_spec"; then
8636698f425bSmrg	  eval tmp_whole_archive_flags=\"$whole_archive_flag_spec\"
86379ef0b394Smrg	  reload_conv_objs=$reload_objs\ `$ECHO "$tmp_whole_archive_flags" | $SED 's|,| |g'`
8638698f425bSmrg	else
8639698f425bSmrg	  gentop="$output_objdir/${obj}x"
86409ef0b394Smrg	  func_append generated " $gentop"
8641266e564dSmrg
8642698f425bSmrg	  func_extract_archives $gentop $convenience
8643698f425bSmrg	  reload_conv_objs="$reload_objs $func_extract_archives_result"
8644698f425bSmrg	fi
8645266e564dSmrg      fi
8646266e564dSmrg
86479ef0b394Smrg      # If we're not building shared, we need to use non_pic_objs
86489ef0b394Smrg      test "$build_libtool_libs" != yes && libobjs="$non_pic_objects"
86499ef0b394Smrg
8650698f425bSmrg      # Create the old-style object.
86519ef0b394Smrg      reload_objs="$objs$old_deplibs "`$ECHO "$libobjs" | $SP2NL | $SED "/\.${libext}$/d; /\.lib$/d; $lo2o" | $NL2SP`" $reload_conv_objs" ### testsuite: skip nested quoting test
8652266e564dSmrg
8653698f425bSmrg      output="$obj"
8654698f425bSmrg      func_execute_cmds "$reload_cmds" 'exit $?'
8655266e564dSmrg
8656698f425bSmrg      # Exit if we aren't doing a library object file.
8657698f425bSmrg      if test -z "$libobj"; then
8658698f425bSmrg	if test -n "$gentop"; then
8659698f425bSmrg	  func_show_eval '${RM}r "$gentop"'
8660698f425bSmrg	fi
8661698f425bSmrg
8662698f425bSmrg	exit $EXIT_SUCCESS
8663266e564dSmrg      fi
8664698f425bSmrg
8665698f425bSmrg      if test "$build_libtool_libs" != yes; then
8666698f425bSmrg	if test -n "$gentop"; then
8667698f425bSmrg	  func_show_eval '${RM}r "$gentop"'
8668698f425bSmrg	fi
8669698f425bSmrg
8670698f425bSmrg	# Create an invalid libtool object if no PIC, so that we don't
8671698f425bSmrg	# accidentally link it into a program.
8672698f425bSmrg	# $show "echo timestamp > $libobj"
8673698f425bSmrg	# $opt_dry_run || eval "echo timestamp > $libobj" || exit $?
8674698f425bSmrg	exit $EXIT_SUCCESS
8675698f425bSmrg      fi
8676698f425bSmrg
8677698f425bSmrg      if test -n "$pic_flag" || test "$pic_mode" != default; then
8678698f425bSmrg	# Only do commands if we really have different PIC objects.
8679698f425bSmrg	reload_objs="$libobjs $reload_conv_objs"
8680698f425bSmrg	output="$libobj"
8681698f425bSmrg	func_execute_cmds "$reload_cmds" 'exit $?'
8682698f425bSmrg      fi
8683698f425bSmrg
8684698f425bSmrg      if test -n "$gentop"; then
8685698f425bSmrg	func_show_eval '${RM}r "$gentop"'
8686698f425bSmrg      fi
8687698f425bSmrg
8688698f425bSmrg      exit $EXIT_SUCCESS
8689266e564dSmrg      ;;
8690266e564dSmrg
8691698f425bSmrg    prog)
8692698f425bSmrg      case $host in
8693698f425bSmrg	*cygwin*) func_stripname '' '.exe' "$output"
8694698f425bSmrg	          output=$func_stripname_result.exe;;
8695698f425bSmrg      esac
8696698f425bSmrg      test -n "$vinfo" && \
8697698f425bSmrg	func_warning "\`-version-info' is ignored for programs"
8698266e564dSmrg
8699698f425bSmrg      test -n "$release" && \
8700698f425bSmrg	func_warning "\`-release' is ignored for programs"
8701266e564dSmrg
8702698f425bSmrg      test "$preload" = yes \
8703698f425bSmrg        && test "$dlopen_support" = unknown \
8704698f425bSmrg	&& test "$dlopen_self" = unknown \
8705698f425bSmrg	&& test "$dlopen_self_static" = unknown && \
8706698f425bSmrg	  func_warning "\`LT_INIT([dlopen])' not used. Assuming no dlopen support."
8707698f425bSmrg
8708698f425bSmrg      case $host in
8709698f425bSmrg      *-*-rhapsody* | *-*-darwin1.[012])
8710698f425bSmrg	# On Rhapsody replace the C library is the System framework
87119ef0b394Smrg	compile_deplibs=`$ECHO " $compile_deplibs" | $SED 's/ -lc / System.ltframework /'`
87129ef0b394Smrg	finalize_deplibs=`$ECHO " $finalize_deplibs" | $SED 's/ -lc / System.ltframework /'`
8713266e564dSmrg	;;
8714698f425bSmrg      esac
8715266e564dSmrg
8716698f425bSmrg      case $host in
8717698f425bSmrg      *-*-darwin*)
8718698f425bSmrg	# Don't allow lazy linking, it breaks C++ global constructors
8719698f425bSmrg	# But is supposedly fixed on 10.4 or later (yay!).
8720698f425bSmrg	if test "$tagname" = CXX ; then
8721698f425bSmrg	  case ${MACOSX_DEPLOYMENT_TARGET-10.0} in
8722698f425bSmrg	    10.[0123])
87239ef0b394Smrg	      func_append compile_command " ${wl}-bind_at_load"
87249ef0b394Smrg	      func_append finalize_command " ${wl}-bind_at_load"
8725698f425bSmrg	    ;;
8726698f425bSmrg	  esac
8727266e564dSmrg	fi
8728698f425bSmrg	# Time to change all our "foo.ltframework" stuff back to "-framework foo"
87299ef0b394Smrg	compile_deplibs=`$ECHO " $compile_deplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'`
87309ef0b394Smrg	finalize_deplibs=`$ECHO " $finalize_deplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'`
8731698f425bSmrg	;;
8732698f425bSmrg      esac
8733266e564dSmrg
8734266e564dSmrg
8735698f425bSmrg      # move library search paths that coincide with paths to not yet
8736698f425bSmrg      # installed libraries to the beginning of the library search list
8737698f425bSmrg      new_libs=
8738698f425bSmrg      for path in $notinst_path; do
8739698f425bSmrg	case " $new_libs " in
8740698f425bSmrg	*" -L$path/$objdir "*) ;;
8741698f425bSmrg	*)
8742698f425bSmrg	  case " $compile_deplibs " in
8743698f425bSmrg	  *" -L$path/$objdir "*)
87449ef0b394Smrg	    func_append new_libs " -L$path/$objdir" ;;
8745266e564dSmrg	  esac
8746698f425bSmrg	  ;;
8747698f425bSmrg	esac
8748698f425bSmrg      done
8749698f425bSmrg      for deplib in $compile_deplibs; do
8750698f425bSmrg	case $deplib in
8751698f425bSmrg	-L*)
8752698f425bSmrg	  case " $new_libs " in
8753698f425bSmrg	  *" $deplib "*) ;;
87549ef0b394Smrg	  *) func_append new_libs " $deplib" ;;
8755266e564dSmrg	  esac
8756698f425bSmrg	  ;;
87579ef0b394Smrg	*) func_append new_libs " $deplib" ;;
8758698f425bSmrg	esac
8759698f425bSmrg      done
8760698f425bSmrg      compile_deplibs="$new_libs"
8761266e564dSmrg
8762266e564dSmrg
87639ef0b394Smrg      func_append compile_command " $compile_deplibs"
87649ef0b394Smrg      func_append finalize_command " $finalize_deplibs"
8765266e564dSmrg
8766698f425bSmrg      if test -n "$rpath$xrpath"; then
8767698f425bSmrg	# If the user specified any rpath flags, then add them.
8768698f425bSmrg	for libdir in $rpath $xrpath; do
8769698f425bSmrg	  # This is the magic to use -rpath.
8770698f425bSmrg	  case "$finalize_rpath " in
8771698f425bSmrg	  *" $libdir "*) ;;
87729ef0b394Smrg	  *) func_append finalize_rpath " $libdir" ;;
8773698f425bSmrg	  esac
8774698f425bSmrg	done
8775698f425bSmrg      fi
8776266e564dSmrg
8777698f425bSmrg      # Now hardcode the library paths
8778698f425bSmrg      rpath=
8779698f425bSmrg      hardcode_libdirs=
8780698f425bSmrg      for libdir in $compile_rpath $finalize_rpath; do
8781698f425bSmrg	if test -n "$hardcode_libdir_flag_spec"; then
8782698f425bSmrg	  if test -n "$hardcode_libdir_separator"; then
8783698f425bSmrg	    if test -z "$hardcode_libdirs"; then
8784698f425bSmrg	      hardcode_libdirs="$libdir"
8785698f425bSmrg	    else
8786698f425bSmrg	      # Just accumulate the unique libdirs.
8787698f425bSmrg	      case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in
8788698f425bSmrg	      *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*)
8789698f425bSmrg		;;
8790698f425bSmrg	      *)
87919ef0b394Smrg		func_append hardcode_libdirs "$hardcode_libdir_separator$libdir"
8792698f425bSmrg		;;
8793698f425bSmrg	      esac
8794698f425bSmrg	    fi
8795266e564dSmrg	  else
8796698f425bSmrg	    eval flag=\"$hardcode_libdir_flag_spec\"
87979ef0b394Smrg	    func_append rpath " $flag"
8798266e564dSmrg	  fi
8799698f425bSmrg	elif test -n "$runpath_var"; then
8800698f425bSmrg	  case "$perm_rpath " in
8801698f425bSmrg	  *" $libdir "*) ;;
88029ef0b394Smrg	  *) func_append perm_rpath " $libdir" ;;
8803698f425bSmrg	  esac
8804698f425bSmrg	fi
8805698f425bSmrg	case $host in
8806698f425bSmrg	*-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-cegcc*)
8807698f425bSmrg	  testbindir=`${ECHO} "$libdir" | ${SED} -e 's*/lib$*/bin*'`
8808698f425bSmrg	  case :$dllsearchpath: in
8809698f425bSmrg	  *":$libdir:"*) ;;
8810698f425bSmrg	  ::) dllsearchpath=$libdir;;
88119ef0b394Smrg	  *) func_append dllsearchpath ":$libdir";;
8812698f425bSmrg	  esac
8813698f425bSmrg	  case :$dllsearchpath: in
8814698f425bSmrg	  *":$testbindir:"*) ;;
8815698f425bSmrg	  ::) dllsearchpath=$testbindir;;
88169ef0b394Smrg	  *) func_append dllsearchpath ":$testbindir";;
8817698f425bSmrg	  esac
8818698f425bSmrg	  ;;
8819698f425bSmrg	esac
8820698f425bSmrg      done
8821698f425bSmrg      # Substitute the hardcoded libdirs into the rpath.
8822698f425bSmrg      if test -n "$hardcode_libdir_separator" &&
8823698f425bSmrg	 test -n "$hardcode_libdirs"; then
8824698f425bSmrg	libdir="$hardcode_libdirs"
8825698f425bSmrg	eval rpath=\" $hardcode_libdir_flag_spec\"
8826698f425bSmrg      fi
8827698f425bSmrg      compile_rpath="$rpath"
8828266e564dSmrg
8829698f425bSmrg      rpath=
8830698f425bSmrg      hardcode_libdirs=
8831698f425bSmrg      for libdir in $finalize_rpath; do
8832698f425bSmrg	if test -n "$hardcode_libdir_flag_spec"; then
8833698f425bSmrg	  if test -n "$hardcode_libdir_separator"; then
8834698f425bSmrg	    if test -z "$hardcode_libdirs"; then
8835698f425bSmrg	      hardcode_libdirs="$libdir"
8836698f425bSmrg	    else
8837698f425bSmrg	      # Just accumulate the unique libdirs.
8838698f425bSmrg	      case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in
8839698f425bSmrg	      *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*)
8840698f425bSmrg		;;
8841698f425bSmrg	      *)
88429ef0b394Smrg		func_append hardcode_libdirs "$hardcode_libdir_separator$libdir"
8843698f425bSmrg		;;
8844698f425bSmrg	      esac
8845698f425bSmrg	    fi
8846266e564dSmrg	  else
8847698f425bSmrg	    eval flag=\"$hardcode_libdir_flag_spec\"
88489ef0b394Smrg	    func_append rpath " $flag"
8849266e564dSmrg	  fi
8850698f425bSmrg	elif test -n "$runpath_var"; then
8851698f425bSmrg	  case "$finalize_perm_rpath " in
8852698f425bSmrg	  *" $libdir "*) ;;
88539ef0b394Smrg	  *) func_append finalize_perm_rpath " $libdir" ;;
8854698f425bSmrg	  esac
8855266e564dSmrg	fi
8856698f425bSmrg      done
8857698f425bSmrg      # Substitute the hardcoded libdirs into the rpath.
8858698f425bSmrg      if test -n "$hardcode_libdir_separator" &&
8859698f425bSmrg	 test -n "$hardcode_libdirs"; then
8860698f425bSmrg	libdir="$hardcode_libdirs"
8861698f425bSmrg	eval rpath=\" $hardcode_libdir_flag_spec\"
8862698f425bSmrg      fi
8863698f425bSmrg      finalize_rpath="$rpath"
8864266e564dSmrg
8865698f425bSmrg      if test -n "$libobjs" && test "$build_old_libs" = yes; then
8866698f425bSmrg	# Transform all the library objects into standard objects.
88679ef0b394Smrg	compile_command=`$ECHO "$compile_command" | $SP2NL | $SED "$lo2o" | $NL2SP`
88689ef0b394Smrg	finalize_command=`$ECHO "$finalize_command" | $SP2NL | $SED "$lo2o" | $NL2SP`
8869698f425bSmrg      fi
8870266e564dSmrg
8871698f425bSmrg      func_generate_dlsyms "$outputname" "@PROGRAM@" "no"
8872266e564dSmrg
8873698f425bSmrg      # template prelinking step
8874698f425bSmrg      if test -n "$prelink_cmds"; then
8875698f425bSmrg	func_execute_cmds "$prelink_cmds" 'exit $?'
8876698f425bSmrg      fi
8877266e564dSmrg
8878698f425bSmrg      wrappers_required=yes
8879698f425bSmrg      case $host in
88809ef0b394Smrg      *cegcc* | *mingw32ce*)
88819ef0b394Smrg        # Disable wrappers for cegcc and mingw32ce hosts, we are cross compiling anyway.
88829ef0b394Smrg        wrappers_required=no
88839ef0b394Smrg        ;;
8884698f425bSmrg      *cygwin* | *mingw* )
8885698f425bSmrg        if test "$build_libtool_libs" != yes; then
8886698f425bSmrg          wrappers_required=no
8887698f425bSmrg        fi
8888698f425bSmrg        ;;
8889698f425bSmrg      *)
8890698f425bSmrg        if test "$need_relink" = no || test "$build_libtool_libs" != yes; then
8891698f425bSmrg          wrappers_required=no
8892698f425bSmrg        fi
8893698f425bSmrg        ;;
8894698f425bSmrg      esac
8895698f425bSmrg      if test "$wrappers_required" = no; then
8896698f425bSmrg	# Replace the output file specification.
88979ef0b394Smrg	compile_command=`$ECHO "$compile_command" | $SED 's%@OUTPUT@%'"$output"'%g'`
8898698f425bSmrg	link_command="$compile_command$compile_rpath"
8899266e564dSmrg
8900698f425bSmrg	# We have no uninstalled library dependencies, so finalize right now.
8901698f425bSmrg	exit_status=0
8902698f425bSmrg	func_show_eval "$link_command" 'exit_status=$?'
8903266e564dSmrg
89049ef0b394Smrg	if test -n "$postlink_cmds"; then
89059ef0b394Smrg	  func_to_tool_file "$output"
89069ef0b394Smrg	  postlink_cmds=`func_echo_all "$postlink_cmds" | $SED -e 's%@OUTPUT@%'"$output"'%g' -e 's%@TOOL_OUTPUT@%'"$func_to_tool_file_result"'%g'`
89079ef0b394Smrg	  func_execute_cmds "$postlink_cmds" 'exit $?'
89089ef0b394Smrg	fi
89099ef0b394Smrg
8910698f425bSmrg	# Delete the generated files.
8911698f425bSmrg	if test -f "$output_objdir/${outputname}S.${objext}"; then
8912698f425bSmrg	  func_show_eval '$RM "$output_objdir/${outputname}S.${objext}"'
8913266e564dSmrg	fi
8914266e564dSmrg
8915698f425bSmrg	exit $exit_status
8916698f425bSmrg      fi
8917266e564dSmrg
8918698f425bSmrg      if test -n "$compile_shlibpath$finalize_shlibpath"; then
8919698f425bSmrg	compile_command="$shlibpath_var=\"$compile_shlibpath$finalize_shlibpath\$$shlibpath_var\" $compile_command"
8920698f425bSmrg      fi
8921698f425bSmrg      if test -n "$finalize_shlibpath"; then
8922698f425bSmrg	finalize_command="$shlibpath_var=\"$finalize_shlibpath\$$shlibpath_var\" $finalize_command"
8923698f425bSmrg      fi
8924266e564dSmrg
8925698f425bSmrg      compile_var=
8926698f425bSmrg      finalize_var=
8927698f425bSmrg      if test -n "$runpath_var"; then
8928698f425bSmrg	if test -n "$perm_rpath"; then
8929698f425bSmrg	  # We should set the runpath_var.
8930698f425bSmrg	  rpath=
8931698f425bSmrg	  for dir in $perm_rpath; do
89329ef0b394Smrg	    func_append rpath "$dir:"
8933698f425bSmrg	  done
8934698f425bSmrg	  compile_var="$runpath_var=\"$rpath\$$runpath_var\" "
8935266e564dSmrg	fi
8936698f425bSmrg	if test -n "$finalize_perm_rpath"; then
8937698f425bSmrg	  # We should set the runpath_var.
8938698f425bSmrg	  rpath=
8939698f425bSmrg	  for dir in $finalize_perm_rpath; do
89409ef0b394Smrg	    func_append rpath "$dir:"
8941698f425bSmrg	  done
8942698f425bSmrg	  finalize_var="$runpath_var=\"$rpath\$$runpath_var\" "
8943266e564dSmrg	fi
8944698f425bSmrg      fi
8945266e564dSmrg
8946698f425bSmrg      if test "$no_install" = yes; then
8947698f425bSmrg	# We don't need to create a wrapper script.
8948698f425bSmrg	link_command="$compile_var$compile_command$compile_rpath"
8949698f425bSmrg	# Replace the output file specification.
89509ef0b394Smrg	link_command=`$ECHO "$link_command" | $SED 's%@OUTPUT@%'"$output"'%g'`
8951698f425bSmrg	# Delete the old output file.
8952698f425bSmrg	$opt_dry_run || $RM $output
8953698f425bSmrg	# Link the executable and exit
8954698f425bSmrg	func_show_eval "$link_command" 'exit $?'
89559ef0b394Smrg
89569ef0b394Smrg	if test -n "$postlink_cmds"; then
89579ef0b394Smrg	  func_to_tool_file "$output"
89589ef0b394Smrg	  postlink_cmds=`func_echo_all "$postlink_cmds" | $SED -e 's%@OUTPUT@%'"$output"'%g' -e 's%@TOOL_OUTPUT@%'"$func_to_tool_file_result"'%g'`
89599ef0b394Smrg	  func_execute_cmds "$postlink_cmds" 'exit $?'
89609ef0b394Smrg	fi
89619ef0b394Smrg
8962266e564dSmrg	exit $EXIT_SUCCESS
8963698f425bSmrg      fi
8964266e564dSmrg
8965698f425bSmrg      if test "$hardcode_action" = relink; then
8966698f425bSmrg	# Fast installation is not supported
8967698f425bSmrg	link_command="$compile_var$compile_command$compile_rpath"
8968698f425bSmrg	relink_command="$finalize_var$finalize_command$finalize_rpath"
8969698f425bSmrg
8970698f425bSmrg	func_warning "this platform does not like uninstalled shared libraries"
8971698f425bSmrg	func_warning "\`$output' will be relinked during installation"
8972698f425bSmrg      else
8973698f425bSmrg	if test "$fast_install" != no; then
8974698f425bSmrg	  link_command="$finalize_var$compile_command$finalize_rpath"
8975698f425bSmrg	  if test "$fast_install" = yes; then
89769ef0b394Smrg	    relink_command=`$ECHO "$compile_var$compile_command$compile_rpath" | $SED 's%@OUTPUT@%\$progdir/\$file%g'`
8977698f425bSmrg	  else
8978698f425bSmrg	    # fast_install is set to needless
8979698f425bSmrg	    relink_command=
8980698f425bSmrg	  fi
8981266e564dSmrg	else
8982698f425bSmrg	  link_command="$compile_var$compile_command$compile_rpath"
8983698f425bSmrg	  relink_command="$finalize_var$finalize_command$finalize_rpath"
8984266e564dSmrg	fi
8985698f425bSmrg      fi
8986266e564dSmrg
8987698f425bSmrg      # Replace the output file specification.
89889ef0b394Smrg      link_command=`$ECHO "$link_command" | $SED 's%@OUTPUT@%'"$output_objdir/$outputname"'%g'`
8989266e564dSmrg
8990698f425bSmrg      # Delete the old output files.
8991698f425bSmrg      $opt_dry_run || $RM $output $output_objdir/$outputname $output_objdir/lt-$outputname
8992266e564dSmrg
8993698f425bSmrg      func_show_eval "$link_command" 'exit $?'
8994266e564dSmrg
89959ef0b394Smrg      if test -n "$postlink_cmds"; then
89969ef0b394Smrg	func_to_tool_file "$output_objdir/$outputname"
89979ef0b394Smrg	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'`
89989ef0b394Smrg	func_execute_cmds "$postlink_cmds" 'exit $?'
89999ef0b394Smrg      fi
90009ef0b394Smrg
9001698f425bSmrg      # Now create the wrapper script.
9002698f425bSmrg      func_verbose "creating $output"
9003266e564dSmrg
9004698f425bSmrg      # Quote the relink command for shipping.
9005698f425bSmrg      if test -n "$relink_command"; then
9006698f425bSmrg	# Preserve any variables that may affect compiler behavior
9007698f425bSmrg	for var in $variables_saved_for_relink; do
9008698f425bSmrg	  if eval test -z \"\${$var+set}\"; then
9009698f425bSmrg	    relink_command="{ test -z \"\${$var+set}\" || $lt_unset $var || { $var=; export $var; }; }; $relink_command"
9010698f425bSmrg	  elif eval var_value=\$$var; test -z "$var_value"; then
9011698f425bSmrg	    relink_command="$var=; export $var; $relink_command"
9012266e564dSmrg	  else
9013698f425bSmrg	    func_quote_for_eval "$var_value"
9014698f425bSmrg	    relink_command="$var=$func_quote_for_eval_result; export $var; $relink_command"
9015266e564dSmrg	  fi
9016698f425bSmrg	done
9017698f425bSmrg	relink_command="(cd `pwd`; $relink_command)"
90189ef0b394Smrg	relink_command=`$ECHO "$relink_command" | $SED "$sed_quote_subst"`
9019698f425bSmrg      fi
9020698f425bSmrg
9021698f425bSmrg      # Only actually do things if not in dry run mode.
9022698f425bSmrg      $opt_dry_run || {
9023698f425bSmrg	# win32 will think the script is a binary if it has
9024698f425bSmrg	# a .exe suffix, so we strip it off here.
9025698f425bSmrg	case $output in
9026698f425bSmrg	  *.exe) func_stripname '' '.exe' "$output"
9027698f425bSmrg	         output=$func_stripname_result ;;
9028698f425bSmrg	esac
9029698f425bSmrg	# test for cygwin because mv fails w/o .exe extensions
9030698f425bSmrg	case $host in
9031698f425bSmrg	  *cygwin*)
9032698f425bSmrg	    exeext=.exe
9033698f425bSmrg	    func_stripname '' '.exe' "$outputname"
9034698f425bSmrg	    outputname=$func_stripname_result ;;
9035698f425bSmrg	  *) exeext= ;;
9036266e564dSmrg	esac
9037698f425bSmrg	case $host in
9038698f425bSmrg	  *cygwin* | *mingw* )
9039698f425bSmrg	    func_dirname_and_basename "$output" "" "."
9040698f425bSmrg	    output_name=$func_basename_result
9041698f425bSmrg	    output_path=$func_dirname_result
9042698f425bSmrg	    cwrappersource="$output_path/$objdir/lt-$output_name.c"
9043698f425bSmrg	    cwrapper="$output_path/$output_name.exe"
9044698f425bSmrg	    $RM $cwrappersource $cwrapper
9045698f425bSmrg	    trap "$RM $cwrappersource $cwrapper; exit $EXIT_FAILURE" 1 2 15
9046698f425bSmrg
9047698f425bSmrg	    func_emit_cwrapperexe_src > $cwrappersource
9048698f425bSmrg
9049698f425bSmrg	    # The wrapper executable is built using the $host compiler,
9050698f425bSmrg	    # because it contains $host paths and files. If cross-
9051698f425bSmrg	    # compiling, it, like the target executable, must be
9052698f425bSmrg	    # executed on the $host or under an emulation environment.
9053698f425bSmrg	    $opt_dry_run || {
9054698f425bSmrg	      $LTCC $LTCFLAGS -o $cwrapper $cwrappersource
9055698f425bSmrg	      $STRIP $cwrapper
9056698f425bSmrg	    }
9057266e564dSmrg
9058698f425bSmrg	    # Now, create the wrapper script for func_source use:
9059698f425bSmrg	    func_ltwrapper_scriptname $cwrapper
9060698f425bSmrg	    $RM $func_ltwrapper_scriptname_result
9061698f425bSmrg	    trap "$RM $func_ltwrapper_scriptname_result; exit $EXIT_FAILURE" 1 2 15
9062698f425bSmrg	    $opt_dry_run || {
9063698f425bSmrg	      # note: this script will not be executed, so do not chmod.
9064698f425bSmrg	      if test "x$build" = "x$host" ; then
9065698f425bSmrg		$cwrapper --lt-dump-script > $func_ltwrapper_scriptname_result
9066698f425bSmrg	      else
9067698f425bSmrg		func_emit_wrapper no > $func_ltwrapper_scriptname_result
9068698f425bSmrg	      fi
9069698f425bSmrg	    }
9070698f425bSmrg	  ;;
9071698f425bSmrg	  * )
9072698f425bSmrg	    $RM $output
9073698f425bSmrg	    trap "$RM $output; exit $EXIT_FAILURE" 1 2 15
9074266e564dSmrg
9075698f425bSmrg	    func_emit_wrapper no > $output
9076698f425bSmrg	    chmod +x $output
9077698f425bSmrg	  ;;
9078698f425bSmrg	esac
9079698f425bSmrg      }
9080698f425bSmrg      exit $EXIT_SUCCESS
9081698f425bSmrg      ;;
9082698f425bSmrg    esac
9083266e564dSmrg
9084698f425bSmrg    # See if we need to build an old-fashioned archive.
9085698f425bSmrg    for oldlib in $oldlibs; do
9086266e564dSmrg
9087698f425bSmrg      if test "$build_libtool_libs" = convenience; then
9088698f425bSmrg	oldobjs="$libobjs_save $symfileobj"
9089698f425bSmrg	addlibs="$convenience"
9090698f425bSmrg	build_libtool_libs=no
9091698f425bSmrg      else
9092698f425bSmrg	if test "$build_libtool_libs" = module; then
9093698f425bSmrg	  oldobjs="$libobjs_save"
9094698f425bSmrg	  build_libtool_libs=no
9095698f425bSmrg	else
9096698f425bSmrg	  oldobjs="$old_deplibs $non_pic_objects"
9097698f425bSmrg	  if test "$preload" = yes && test -f "$symfileobj"; then
90989ef0b394Smrg	    func_append oldobjs " $symfileobj"
9099698f425bSmrg	  fi
9100698f425bSmrg	fi
9101698f425bSmrg	addlibs="$old_convenience"
9102266e564dSmrg      fi
9103266e564dSmrg
9104698f425bSmrg      if test -n "$addlibs"; then
9105698f425bSmrg	gentop="$output_objdir/${outputname}x"
91069ef0b394Smrg	func_append generated " $gentop"
9107266e564dSmrg
9108698f425bSmrg	func_extract_archives $gentop $addlibs
91099ef0b394Smrg	func_append oldobjs " $func_extract_archives_result"
9110698f425bSmrg      fi
9111266e564dSmrg
9112698f425bSmrg      # Do each command in the archive commands.
9113698f425bSmrg      if test -n "$old_archive_from_new_cmds" && test "$build_libtool_libs" = yes; then
9114698f425bSmrg	cmds=$old_archive_from_new_cmds
9115698f425bSmrg      else
9116266e564dSmrg
9117698f425bSmrg	# Add any objects from preloaded convenience libraries
9118698f425bSmrg	if test -n "$dlprefiles"; then
9119698f425bSmrg	  gentop="$output_objdir/${outputname}x"
91209ef0b394Smrg	  func_append generated " $gentop"
9121266e564dSmrg
9122698f425bSmrg	  func_extract_archives $gentop $dlprefiles
91239ef0b394Smrg	  func_append oldobjs " $func_extract_archives_result"
9124698f425bSmrg	fi
9125266e564dSmrg
9126698f425bSmrg	# POSIX demands no paths to be encoded in archives.  We have
9127698f425bSmrg	# to avoid creating archives with duplicate basenames if we
9128698f425bSmrg	# might have to extract them afterwards, e.g., when creating a
9129698f425bSmrg	# static archive out of a convenience library, or when linking
9130698f425bSmrg	# the entirety of a libtool archive into another (currently
9131698f425bSmrg	# not supported by libtool).
9132698f425bSmrg	if (for obj in $oldobjs
9133698f425bSmrg	    do
9134698f425bSmrg	      func_basename "$obj"
9135698f425bSmrg	      $ECHO "$func_basename_result"
9136698f425bSmrg	    done | sort | sort -uc >/dev/null 2>&1); then
9137698f425bSmrg	  :
9138698f425bSmrg	else
91399ef0b394Smrg	  echo "copying selected object files to avoid basename conflicts..."
9140698f425bSmrg	  gentop="$output_objdir/${outputname}x"
91419ef0b394Smrg	  func_append generated " $gentop"
9142698f425bSmrg	  func_mkdir_p "$gentop"
9143698f425bSmrg	  save_oldobjs=$oldobjs
9144698f425bSmrg	  oldobjs=
9145698f425bSmrg	  counter=1
9146698f425bSmrg	  for obj in $save_oldobjs
9147698f425bSmrg	  do
9148698f425bSmrg	    func_basename "$obj"
9149698f425bSmrg	    objbase="$func_basename_result"
9150698f425bSmrg	    case " $oldobjs " in
9151698f425bSmrg	    " ") oldobjs=$obj ;;
9152698f425bSmrg	    *[\ /]"$objbase "*)
9153698f425bSmrg	      while :; do
9154698f425bSmrg		# Make sure we don't pick an alternate name that also
9155698f425bSmrg		# overlaps.
9156698f425bSmrg		newobj=lt$counter-$objbase
9157698f425bSmrg		func_arith $counter + 1
9158698f425bSmrg		counter=$func_arith_result
9159698f425bSmrg		case " $oldobjs " in
9160698f425bSmrg		*[\ /]"$newobj "*) ;;
9161698f425bSmrg		*) if test ! -f "$gentop/$newobj"; then break; fi ;;
9162698f425bSmrg		esac
9163698f425bSmrg	      done
9164698f425bSmrg	      func_show_eval "ln $obj $gentop/$newobj || cp $obj $gentop/$newobj"
91659ef0b394Smrg	      func_append oldobjs " $gentop/$newobj"
9166698f425bSmrg	      ;;
91679ef0b394Smrg	    *) func_append oldobjs " $obj" ;;
9168698f425bSmrg	    esac
9169266e564dSmrg	  done
9170266e564dSmrg	fi
9171fb5e8d76Smrg	func_to_tool_file "$oldlib" func_convert_file_msys_to_w32
9172fb5e8d76Smrg	tool_oldlib=$func_to_tool_file_result
9173698f425bSmrg	eval cmds=\"$old_archive_cmds\"
9174266e564dSmrg
9175698f425bSmrg	func_len " $cmds"
9176698f425bSmrg	len=$func_len_result
9177698f425bSmrg	if test "$len" -lt "$max_cmd_len" || test "$max_cmd_len" -le -1; then
9178698f425bSmrg	  cmds=$old_archive_cmds
91799ef0b394Smrg	elif test -n "$archiver_list_spec"; then
91809ef0b394Smrg	  func_verbose "using command file archive linking..."
91819ef0b394Smrg	  for obj in $oldobjs
91829ef0b394Smrg	  do
91839ef0b394Smrg	    func_to_tool_file "$obj"
91849ef0b394Smrg	    $ECHO "$func_to_tool_file_result"
91859ef0b394Smrg	  done > $output_objdir/$libname.libcmd
91869ef0b394Smrg	  func_to_tool_file "$output_objdir/$libname.libcmd"
91879ef0b394Smrg	  oldobjs=" $archiver_list_spec$func_to_tool_file_result"
91889ef0b394Smrg	  cmds=$old_archive_cmds
9189698f425bSmrg	else
9190698f425bSmrg	  # the command line is too long to link in one step, link in parts
9191698f425bSmrg	  func_verbose "using piecewise archive linking..."
9192698f425bSmrg	  save_RANLIB=$RANLIB
9193698f425bSmrg	  RANLIB=:
9194698f425bSmrg	  objlist=
9195698f425bSmrg	  concat_cmds=
9196698f425bSmrg	  save_oldobjs=$oldobjs
9197698f425bSmrg	  oldobjs=
9198698f425bSmrg	  # Is there a better way of finding the last object in the list?
9199698f425bSmrg	  for obj in $save_oldobjs
9200698f425bSmrg	  do
9201698f425bSmrg	    last_oldobj=$obj
9202698f425bSmrg	  done
9203698f425bSmrg	  eval test_cmds=\"$old_archive_cmds\"
9204698f425bSmrg	  func_len " $test_cmds"
9205698f425bSmrg	  len0=$func_len_result
9206698f425bSmrg	  len=$len0
9207698f425bSmrg	  for obj in $save_oldobjs
9208698f425bSmrg	  do
9209698f425bSmrg	    func_len " $obj"
9210698f425bSmrg	    func_arith $len + $func_len_result
9211698f425bSmrg	    len=$func_arith_result
9212698f425bSmrg	    func_append objlist " $obj"
9213698f425bSmrg	    if test "$len" -lt "$max_cmd_len"; then
9214698f425bSmrg	      :
9215698f425bSmrg	    else
9216698f425bSmrg	      # the above command should be used before it gets too long
9217698f425bSmrg	      oldobjs=$objlist
9218698f425bSmrg	      if test "$obj" = "$last_oldobj" ; then
9219698f425bSmrg		RANLIB=$save_RANLIB
9220698f425bSmrg	      fi
9221698f425bSmrg	      test -z "$concat_cmds" || concat_cmds=$concat_cmds~
9222698f425bSmrg	      eval concat_cmds=\"\${concat_cmds}$old_archive_cmds\"
9223698f425bSmrg	      objlist=
9224698f425bSmrg	      len=$len0
9225698f425bSmrg	    fi
9226698f425bSmrg	  done
9227698f425bSmrg	  RANLIB=$save_RANLIB
9228698f425bSmrg	  oldobjs=$objlist
9229698f425bSmrg	  if test "X$oldobjs" = "X" ; then
9230698f425bSmrg	    eval cmds=\"\$concat_cmds\"
9231698f425bSmrg	  else
9232698f425bSmrg	    eval cmds=\"\$concat_cmds~\$old_archive_cmds\"
9233698f425bSmrg	  fi
9234698f425bSmrg	fi
9235698f425bSmrg      fi
9236698f425bSmrg      func_execute_cmds "$cmds" 'exit $?'
9237266e564dSmrg    done
9238266e564dSmrg
9239698f425bSmrg    test -n "$generated" && \
9240698f425bSmrg      func_show_eval "${RM}r$generated"
9241266e564dSmrg
9242698f425bSmrg    # Now create the libtool archive.
9243698f425bSmrg    case $output in
9244698f425bSmrg    *.la)
9245698f425bSmrg      old_library=
9246698f425bSmrg      test "$build_old_libs" = yes && old_library="$libname.$libext"
9247698f425bSmrg      func_verbose "creating $output"
9248266e564dSmrg
9249698f425bSmrg      # Preserve any variables that may affect compiler behavior
9250698f425bSmrg      for var in $variables_saved_for_relink; do
9251698f425bSmrg	if eval test -z \"\${$var+set}\"; then
9252698f425bSmrg	  relink_command="{ test -z \"\${$var+set}\" || $lt_unset $var || { $var=; export $var; }; }; $relink_command"
9253698f425bSmrg	elif eval var_value=\$$var; test -z "$var_value"; then
9254698f425bSmrg	  relink_command="$var=; export $var; $relink_command"
9255266e564dSmrg	else
9256698f425bSmrg	  func_quote_for_eval "$var_value"
9257698f425bSmrg	  relink_command="$var=$func_quote_for_eval_result; export $var; $relink_command"
9258266e564dSmrg	fi
9259698f425bSmrg      done
9260698f425bSmrg      # Quote the link command for shipping.
9261698f425bSmrg      relink_command="(cd `pwd`; $SHELL $progpath $preserve_args --mode=relink $libtool_args @inst_prefix_dir@)"
92629ef0b394Smrg      relink_command=`$ECHO "$relink_command" | $SED "$sed_quote_subst"`
9263698f425bSmrg      if test "$hardcode_automatic" = yes ; then
9264698f425bSmrg	relink_command=
9265698f425bSmrg      fi
9266266e564dSmrg
9267698f425bSmrg      # Only create the output if not a dry run.
9268698f425bSmrg      $opt_dry_run || {
9269698f425bSmrg	for installed in no yes; do
9270698f425bSmrg	  if test "$installed" = yes; then
9271698f425bSmrg	    if test -z "$install_libdir"; then
9272698f425bSmrg	      break
9273698f425bSmrg	    fi
9274698f425bSmrg	    output="$output_objdir/$outputname"i
9275698f425bSmrg	    # Replace all uninstalled libtool libraries with the installed ones
9276698f425bSmrg	    newdependency_libs=
9277698f425bSmrg	    for deplib in $dependency_libs; do
9278698f425bSmrg	      case $deplib in
9279698f425bSmrg	      *.la)
9280698f425bSmrg		func_basename "$deplib"
9281698f425bSmrg		name="$func_basename_result"
9282fb5e8d76Smrg		func_resolve_sysroot "$deplib"
9283fb5e8d76Smrg		eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $func_resolve_sysroot_result`
9284698f425bSmrg		test -z "$libdir" && \
9285698f425bSmrg		  func_fatal_error "\`$deplib' is not a valid libtool archive"
92869ef0b394Smrg		func_append newdependency_libs " ${lt_sysroot:+=}$libdir/$name"
92879ef0b394Smrg		;;
92889ef0b394Smrg	      -L*)
92899ef0b394Smrg		func_stripname -L '' "$deplib"
92909ef0b394Smrg		func_replace_sysroot "$func_stripname_result"
92919ef0b394Smrg		func_append newdependency_libs " -L$func_replace_sysroot_result"
9292698f425bSmrg		;;
92939ef0b394Smrg	      -R*)
92949ef0b394Smrg		func_stripname -R '' "$deplib"
92959ef0b394Smrg		func_replace_sysroot "$func_stripname_result"
92969ef0b394Smrg		func_append newdependency_libs " -R$func_replace_sysroot_result"
92979ef0b394Smrg		;;
92989ef0b394Smrg	      *) func_append newdependency_libs " $deplib" ;;
9299698f425bSmrg	      esac
9300698f425bSmrg	    done
9301698f425bSmrg	    dependency_libs="$newdependency_libs"
9302698f425bSmrg	    newdlfiles=
9303698f425bSmrg
9304698f425bSmrg	    for lib in $dlfiles; do
9305698f425bSmrg	      case $lib in
9306698f425bSmrg	      *.la)
9307698f425bSmrg	        func_basename "$lib"
9308698f425bSmrg		name="$func_basename_result"
9309698f425bSmrg		eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $lib`
9310698f425bSmrg		test -z "$libdir" && \
9311698f425bSmrg		  func_fatal_error "\`$lib' is not a valid libtool archive"
93129ef0b394Smrg		func_append newdlfiles " ${lt_sysroot:+=}$libdir/$name"
9313698f425bSmrg		;;
93149ef0b394Smrg	      *) func_append newdlfiles " $lib" ;;
9315698f425bSmrg	      esac
9316698f425bSmrg	    done
9317698f425bSmrg	    dlfiles="$newdlfiles"
9318698f425bSmrg	    newdlprefiles=
9319698f425bSmrg	    for lib in $dlprefiles; do
9320698f425bSmrg	      case $lib in
9321698f425bSmrg	      *.la)
9322698f425bSmrg		# Only pass preopened files to the pseudo-archive (for
9323698f425bSmrg		# eventual linking with the app. that links it) if we
9324698f425bSmrg		# didn't already link the preopened objects directly into
9325698f425bSmrg		# the library:
9326698f425bSmrg		func_basename "$lib"
9327698f425bSmrg		name="$func_basename_result"
9328698f425bSmrg		eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $lib`
9329698f425bSmrg		test -z "$libdir" && \
9330698f425bSmrg		  func_fatal_error "\`$lib' is not a valid libtool archive"
93319ef0b394Smrg		func_append newdlprefiles " ${lt_sysroot:+=}$libdir/$name"
9332698f425bSmrg		;;
9333698f425bSmrg	      esac
9334698f425bSmrg	    done
9335698f425bSmrg	    dlprefiles="$newdlprefiles"
9336698f425bSmrg	  else
9337698f425bSmrg	    newdlfiles=
9338698f425bSmrg	    for lib in $dlfiles; do
9339698f425bSmrg	      case $lib in
9340698f425bSmrg		[\\/]* | [A-Za-z]:[\\/]*) abs="$lib" ;;
9341698f425bSmrg		*) abs=`pwd`"/$lib" ;;
9342698f425bSmrg	      esac
93439ef0b394Smrg	      func_append newdlfiles " $abs"
9344698f425bSmrg	    done
9345698f425bSmrg	    dlfiles="$newdlfiles"
9346698f425bSmrg	    newdlprefiles=
9347698f425bSmrg	    for lib in $dlprefiles; do
9348698f425bSmrg	      case $lib in
9349698f425bSmrg		[\\/]* | [A-Za-z]:[\\/]*) abs="$lib" ;;
9350698f425bSmrg		*) abs=`pwd`"/$lib" ;;
9351698f425bSmrg	      esac
93529ef0b394Smrg	      func_append newdlprefiles " $abs"
9353698f425bSmrg	    done
9354698f425bSmrg	    dlprefiles="$newdlprefiles"
9355698f425bSmrg	  fi
9356698f425bSmrg	  $RM $output
9357698f425bSmrg	  # place dlname in correct position for cygwin
93589ef0b394Smrg	  # In fact, it would be nice if we could use this code for all target
93599ef0b394Smrg	  # systems that can't hard-code library paths into their executables
93609ef0b394Smrg	  # and that have no shared library path variable independent of PATH,
93619ef0b394Smrg	  # but it turns out we can't easily determine that from inspecting
93629ef0b394Smrg	  # libtool variables, so we have to hard-code the OSs to which it
93639ef0b394Smrg	  # applies here; at the moment, that means platforms that use the PE
93649ef0b394Smrg	  # object format with DLL files.  See the long comment at the top of
93659ef0b394Smrg	  # tests/bindir.at for full details.
9366698f425bSmrg	  tdlname=$dlname
9367698f425bSmrg	  case $host,$output,$installed,$module,$dlname in
93689ef0b394Smrg	    *cygwin*,*lai,yes,no,*.dll | *mingw*,*lai,yes,no,*.dll | *cegcc*,*lai,yes,no,*.dll)
93699ef0b394Smrg	      # If a -bindir argument was supplied, place the dll there.
93709ef0b394Smrg	      if test "x$bindir" != x ;
93719ef0b394Smrg	      then
93729ef0b394Smrg		func_relative_path "$install_libdir" "$bindir"
93739ef0b394Smrg		tdlname=$func_relative_path_result$dlname
93749ef0b394Smrg	      else
93759ef0b394Smrg		# Otherwise fall back on heuristic.
93769ef0b394Smrg		tdlname=../bin/$dlname
93779ef0b394Smrg	      fi
93789ef0b394Smrg	      ;;
9379698f425bSmrg	  esac
9380698f425bSmrg	  $ECHO > $output "\
9381698f425bSmrg# $outputname - a libtool library file
9382698f425bSmrg# Generated by $PROGRAM (GNU $PACKAGE$TIMESTAMP) $VERSION
9383698f425bSmrg#
9384698f425bSmrg# Please DO NOT delete this file!
9385698f425bSmrg# It is necessary for linking the library.
9386266e564dSmrg
9387698f425bSmrg# The name that we can dlopen(3).
9388698f425bSmrgdlname='$tdlname'
9389266e564dSmrg
9390698f425bSmrg# Names of this library.
9391698f425bSmrglibrary_names='$library_names'
9392266e564dSmrg
9393698f425bSmrg# The name of the static archive.
9394698f425bSmrgold_library='$old_library'
9395266e564dSmrg
9396698f425bSmrg# Linker flags that can not go in dependency_libs.
9397698f425bSmrginherited_linker_flags='$new_inherited_linker_flags'
9398266e564dSmrg
9399698f425bSmrg# Libraries that this one depends upon.
9400698f425bSmrgdependency_libs='$dependency_libs'
9401266e564dSmrg
9402698f425bSmrg# Names of additional weak libraries provided by this library
9403698f425bSmrgweak_library_names='$weak_libs'
9404266e564dSmrg
9405698f425bSmrg# Version information for $libname.
9406698f425bSmrgcurrent=$current
9407698f425bSmrgage=$age
9408698f425bSmrgrevision=$revision
9409266e564dSmrg
9410698f425bSmrg# Is this an already installed library?
9411698f425bSmrginstalled=$installed
9412266e564dSmrg
9413698f425bSmrg# Should we warn about portability when linking against -modules?
9414698f425bSmrgshouldnotlink=$module
9415266e564dSmrg
9416698f425bSmrg# Files to dlopen/dlpreopen
9417698f425bSmrgdlopen='$dlfiles'
9418698f425bSmrgdlpreopen='$dlprefiles'
9419266e564dSmrg
9420698f425bSmrg# Directory that this library needs to be installed in:
9421698f425bSmrglibdir='$install_libdir'"
9422698f425bSmrg	  if test "$installed" = no && test "$need_relink" = yes; then
9423698f425bSmrg	    $ECHO >> $output "\
9424698f425bSmrgrelink_command=\"$relink_command\""
9425698f425bSmrg	  fi
9426698f425bSmrg	done
9427698f425bSmrg      }
9428266e564dSmrg
9429698f425bSmrg      # Do a symbolic link so that the libtool archive can be found in
9430698f425bSmrg      # LD_LIBRARY_PATH before the program is installed.
9431698f425bSmrg      func_show_eval '( cd "$output_objdir" && $RM "$outputname" && $LN_S "../$outputname" "$outputname" )' 'exit $?'
9432698f425bSmrg      ;;
9433698f425bSmrg    esac
9434698f425bSmrg    exit $EXIT_SUCCESS
9435698f425bSmrg}
9436266e564dSmrg
94379ef0b394Smrg{ test "$opt_mode" = link || test "$opt_mode" = relink; } &&
9438698f425bSmrg    func_mode_link ${1+"$@"}
9439266e564dSmrg
9440266e564dSmrg
9441698f425bSmrg# func_mode_uninstall arg...
9442698f425bSmrgfunc_mode_uninstall ()
9443698f425bSmrg{
9444698f425bSmrg    $opt_debug
9445698f425bSmrg    RM="$nonopt"
9446266e564dSmrg    files=
9447266e564dSmrg    rmforce=
9448266e564dSmrg    exit_status=0
9449266e564dSmrg
9450266e564dSmrg    # This variable tells wrapper scripts just to set variables rather
9451266e564dSmrg    # than running their programs.
9452266e564dSmrg    libtool_install_magic="$magic"
9453266e564dSmrg
9454266e564dSmrg    for arg
9455266e564dSmrg    do
9456266e564dSmrg      case $arg in
94579ef0b394Smrg      -f) func_append RM " $arg"; rmforce=yes ;;
94589ef0b394Smrg      -*) func_append RM " $arg" ;;
94599ef0b394Smrg      *) func_append files " $arg" ;;
9460266e564dSmrg      esac
9461266e564dSmrg    done
9462266e564dSmrg
9463698f425bSmrg    test -z "$RM" && \
9464698f425bSmrg      func_fatal_help "you must specify an RM program"
9465266e564dSmrg
9466266e564dSmrg    rmdirs=
9467266e564dSmrg
9468266e564dSmrg    for file in $files; do
9469698f425bSmrg      func_dirname "$file" "" "."
9470698f425bSmrg      dir="$func_dirname_result"
9471698f425bSmrg      if test "X$dir" = X.; then
94729ef0b394Smrg	odir="$objdir"
9473266e564dSmrg      else
94749ef0b394Smrg	odir="$dir/$objdir"
9475266e564dSmrg      fi
9476698f425bSmrg      func_basename "$file"
9477698f425bSmrg      name="$func_basename_result"
94789ef0b394Smrg      test "$opt_mode" = uninstall && odir="$dir"
9479266e564dSmrg
94809ef0b394Smrg      # Remember odir for removal later, being careful to avoid duplicates
94819ef0b394Smrg      if test "$opt_mode" = clean; then
9482266e564dSmrg	case " $rmdirs " in
94839ef0b394Smrg	  *" $odir "*) ;;
94849ef0b394Smrg	  *) func_append rmdirs " $odir" ;;
9485266e564dSmrg	esac
9486266e564dSmrg      fi
9487266e564dSmrg
9488266e564dSmrg      # Don't error if the file doesn't exist and rm -f was used.
9489698f425bSmrg      if { test -L "$file"; } >/dev/null 2>&1 ||
9490698f425bSmrg	 { test -h "$file"; } >/dev/null 2>&1 ||
9491698f425bSmrg	 test -f "$file"; then
9492266e564dSmrg	:
9493266e564dSmrg      elif test -d "$file"; then
9494266e564dSmrg	exit_status=1
9495266e564dSmrg	continue
9496266e564dSmrg      elif test "$rmforce" = yes; then
9497266e564dSmrg	continue
9498266e564dSmrg      fi
9499266e564dSmrg
9500266e564dSmrg      rmfiles="$file"
9501266e564dSmrg
9502266e564dSmrg      case $name in
9503266e564dSmrg      *.la)
9504266e564dSmrg	# Possibly a libtool archive, so verify it.
9505698f425bSmrg	if func_lalib_p "$file"; then
9506698f425bSmrg	  func_source $dir/$name
9507266e564dSmrg
9508266e564dSmrg	  # Delete the libtool libraries and symlinks.
9509266e564dSmrg	  for n in $library_names; do
95109ef0b394Smrg	    func_append rmfiles " $odir/$n"
9511266e564dSmrg	  done
95129ef0b394Smrg	  test -n "$old_library" && func_append rmfiles " $odir/$old_library"
9513266e564dSmrg
95149ef0b394Smrg	  case "$opt_mode" in
9515266e564dSmrg	  clean)
95169ef0b394Smrg	    case " $library_names " in
9517266e564dSmrg	    *" $dlname "*) ;;
95189ef0b394Smrg	    *) test -n "$dlname" && func_append rmfiles " $odir/$dlname" ;;
9519266e564dSmrg	    esac
95209ef0b394Smrg	    test -n "$libdir" && func_append rmfiles " $odir/$name $odir/${name}i"
9521266e564dSmrg	    ;;
9522266e564dSmrg	  uninstall)
9523266e564dSmrg	    if test -n "$library_names"; then
9524266e564dSmrg	      # Do each command in the postuninstall commands.
9525698f425bSmrg	      func_execute_cmds "$postuninstall_cmds" 'test "$rmforce" = yes || exit_status=1'
9526266e564dSmrg	    fi
9527266e564dSmrg
9528266e564dSmrg	    if test -n "$old_library"; then
9529266e564dSmrg	      # Do each command in the old_postuninstall commands.
9530698f425bSmrg	      func_execute_cmds "$old_postuninstall_cmds" 'test "$rmforce" = yes || exit_status=1'
9531266e564dSmrg	    fi
9532266e564dSmrg	    # FIXME: should reinstall the best remaining shared library.
9533266e564dSmrg	    ;;
9534266e564dSmrg	  esac
9535266e564dSmrg	fi
9536266e564dSmrg	;;
9537266e564dSmrg
9538266e564dSmrg      *.lo)
9539266e564dSmrg	# Possibly a libtool object, so verify it.
9540698f425bSmrg	if func_lalib_p "$file"; then
9541266e564dSmrg
9542266e564dSmrg	  # Read the .lo file
9543698f425bSmrg	  func_source $dir/$name
9544266e564dSmrg
9545266e564dSmrg	  # Add PIC object to the list of files to remove.
9546698f425bSmrg	  if test -n "$pic_object" &&
9547698f425bSmrg	     test "$pic_object" != none; then
95489ef0b394Smrg	    func_append rmfiles " $dir/$pic_object"
9549266e564dSmrg	  fi
9550266e564dSmrg
9551266e564dSmrg	  # Add non-PIC object to the list of files to remove.
9552698f425bSmrg	  if test -n "$non_pic_object" &&
9553698f425bSmrg	     test "$non_pic_object" != none; then
95549ef0b394Smrg	    func_append rmfiles " $dir/$non_pic_object"
9555266e564dSmrg	  fi
9556266e564dSmrg	fi
9557266e564dSmrg	;;
9558266e564dSmrg
9559266e564dSmrg      *)
95609ef0b394Smrg	if test "$opt_mode" = clean ; then
9561266e564dSmrg	  noexename=$name
9562266e564dSmrg	  case $file in
9563266e564dSmrg	  *.exe)
9564698f425bSmrg	    func_stripname '' '.exe' "$file"
9565698f425bSmrg	    file=$func_stripname_result
9566698f425bSmrg	    func_stripname '' '.exe' "$name"
9567698f425bSmrg	    noexename=$func_stripname_result
9568266e564dSmrg	    # $file with .exe has already been added to rmfiles,
9569266e564dSmrg	    # add $file without .exe
95709ef0b394Smrg	    func_append rmfiles " $file"
9571266e564dSmrg	    ;;
9572266e564dSmrg	  esac
9573266e564dSmrg	  # Do a test to see if this is a libtool program.
9574698f425bSmrg	  if func_ltwrapper_p "$file"; then
9575698f425bSmrg	    if func_ltwrapper_executable_p "$file"; then
9576698f425bSmrg	      func_ltwrapper_scriptname "$file"
9577698f425bSmrg	      relink_command=
9578698f425bSmrg	      func_source $func_ltwrapper_scriptname_result
95799ef0b394Smrg	      func_append rmfiles " $func_ltwrapper_scriptname_result"
9580698f425bSmrg	    else
9581698f425bSmrg	      relink_command=
9582698f425bSmrg	      func_source $dir/$noexename
9583698f425bSmrg	    fi
9584266e564dSmrg
9585266e564dSmrg	    # note $name still contains .exe if it was in $file originally
9586266e564dSmrg	    # as does the version of $file that was added into $rmfiles
95879ef0b394Smrg	    func_append rmfiles " $odir/$name $odir/${name}S.${objext}"
9588266e564dSmrg	    if test "$fast_install" = yes && test -n "$relink_command"; then
95899ef0b394Smrg	      func_append rmfiles " $odir/lt-$name"
9590266e564dSmrg	    fi
9591266e564dSmrg	    if test "X$noexename" != "X$name" ; then
95929ef0b394Smrg	      func_append rmfiles " $odir/lt-${noexename}.c"
9593266e564dSmrg	    fi
9594266e564dSmrg	  fi
9595266e564dSmrg	fi
9596266e564dSmrg	;;
9597266e564dSmrg      esac
9598698f425bSmrg      func_show_eval "$RM $rmfiles" 'exit_status=1'
9599266e564dSmrg    done
9600266e564dSmrg
9601266e564dSmrg    # Try to remove the ${objdir}s in the directories where we deleted files
9602266e564dSmrg    for dir in $rmdirs; do
9603266e564dSmrg      if test -d "$dir"; then
9604698f425bSmrg	func_show_eval "rmdir $dir >/dev/null 2>&1"
9605266e564dSmrg      fi
9606266e564dSmrg    done
9607266e564dSmrg
9608266e564dSmrg    exit $exit_status
9609698f425bSmrg}
9610266e564dSmrg
96119ef0b394Smrg{ test "$opt_mode" = uninstall || test "$opt_mode" = clean; } &&
9612698f425bSmrg    func_mode_uninstall ${1+"$@"}
9613266e564dSmrg
96149ef0b394Smrgtest -z "$opt_mode" && {
9615698f425bSmrg  help="$generic_help"
9616698f425bSmrg  func_fatal_help "you must specify a MODE"
9617698f425bSmrg}
9618698f425bSmrg
9619698f425bSmrgtest -z "$exec_cmd" && \
96209ef0b394Smrg  func_fatal_help "invalid operation mode \`$opt_mode'"
9621266e564dSmrg
9622266e564dSmrgif test -n "$exec_cmd"; then
9623698f425bSmrg  eval exec "$exec_cmd"
9624266e564dSmrg  exit $EXIT_FAILURE
9625266e564dSmrgfi
9626266e564dSmrg
9627698f425bSmrgexit $exit_status
9628266e564dSmrg
9629266e564dSmrg
9630266e564dSmrg# The TAGs below are defined such that we never get into a situation
9631266e564dSmrg# in which we disable both kinds of libraries.  Given conflicting
9632266e564dSmrg# choices, we go for a static library, that is the most portable,
9633266e564dSmrg# since we can't tell whether shared libraries were disabled because
9634266e564dSmrg# the user asked for that or because the platform doesn't support
9635266e564dSmrg# them.  This is particularly important on AIX, because we don't
9636266e564dSmrg# support having both static and shared libraries enabled at the same
9637266e564dSmrg# time on that platform, so we default to a shared-only configuration.
9638266e564dSmrg# If a disable-shared tag is given, we'll fallback to a static-only
9639266e564dSmrg# configuration.  But we'll never go from static-only to shared-only.
9640266e564dSmrg
9641266e564dSmrg# ### BEGIN LIBTOOL TAG CONFIG: disable-shared
9642698f425bSmrgbuild_libtool_libs=no
9643698f425bSmrgbuild_old_libs=yes
9644266e564dSmrg# ### END LIBTOOL TAG CONFIG: disable-shared
9645266e564dSmrg
9646266e564dSmrg# ### BEGIN LIBTOOL TAG CONFIG: disable-static
9647698f425bSmrgbuild_old_libs=`case $build_libtool_libs in yes) echo no;; *) echo yes;; esac`
9648266e564dSmrg# ### END LIBTOOL TAG CONFIG: disable-static
9649266e564dSmrg
9650266e564dSmrg# Local Variables:
9651266e564dSmrg# mode:shell-script
9652266e564dSmrg# sh-indentation:2
9653266e564dSmrg# End:
9654698f425bSmrg# vi:sw=2
9655698f425bSmrg
9656