ltmain.sh revision 3e51e026
1a7b590b3Smrg
23e51e026Smrg# libtool (GNU libtool) 2.4.2
3a7b590b3Smrg# Written by Gordon Matzigkeit <gord@gnu.ai.mit.edu>, 1996
4a7b590b3Smrg
53e51e026Smrg# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005, 2006,
63e51e026Smrg# 2007, 2008, 2009, 2010, 2011 Free Software Foundation, Inc.
7a7b590b3Smrg# This is free software; see the source for copying conditions.  There is NO
8a7b590b3Smrg# warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
9a7b590b3Smrg
10a7b590b3Smrg# GNU Libtool is free software; you can redistribute it and/or modify
11943345d3Smrg# it under the terms of the GNU General Public License as published by
12943345d3Smrg# the Free Software Foundation; either version 2 of the License, or
13943345d3Smrg# (at your option) any later version.
14943345d3Smrg#
15a7b590b3Smrg# As a special exception to the GNU General Public License,
16a7b590b3Smrg# if you distribute this file as part of a program or library that
17a7b590b3Smrg# is built using GNU Libtool, you may include this file under the
18a7b590b3Smrg# same distribution terms that you use for the rest of that program.
19a7b590b3Smrg#
20a7b590b3Smrg# GNU Libtool is distributed in the hope that it will be useful, but
21943345d3Smrg# WITHOUT ANY WARRANTY; without even the implied warranty of
22943345d3Smrg# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
23943345d3Smrg# General Public License for more details.
24943345d3Smrg#
25943345d3Smrg# You should have received a copy of the GNU General Public License
26a7b590b3Smrg# along with GNU Libtool; see the file COPYING.  If not, a copy
27a7b590b3Smrg# can be downloaded from http://www.gnu.org/licenses/gpl.html,
28a7b590b3Smrg# or obtained by writing to the Free Software Foundation, Inc.,
29a7b590b3Smrg# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
30943345d3Smrg
31a7b590b3Smrg# Usage: $progname [OPTION]... [MODE-ARG]...
32a7b590b3Smrg#
33a7b590b3Smrg# Provide generalized library-building support services.
34a7b590b3Smrg#
353e51e026Smrg#       --config             show all configuration variables
363e51e026Smrg#       --debug              enable verbose shell tracing
373e51e026Smrg#   -n, --dry-run            display commands without modifying any files
383e51e026Smrg#       --features           display basic configuration information and exit
393e51e026Smrg#       --mode=MODE          use operation mode MODE
403e51e026Smrg#       --preserve-dup-deps  don't remove duplicate dependency libraries
413e51e026Smrg#       --quiet, --silent    don't print informational messages
423e51e026Smrg#       --no-quiet, --no-silent
433e51e026Smrg#                            print informational messages (default)
443e51e026Smrg#       --no-warn            don't display warning messages
453e51e026Smrg#       --tag=TAG            use configuration variables from tag TAG
463e51e026Smrg#   -v, --verbose            print more informational messages than default
473e51e026Smrg#       --no-verbose         don't print the extra informational messages
483e51e026Smrg#       --version            print version information
493e51e026Smrg#   -h, --help, --help-all   print short, long, or detailed help message
50a7b590b3Smrg#
51a7b590b3Smrg# MODE must be one of the following:
52a7b590b3Smrg#
533e51e026Smrg#         clean              remove files from the build directory
543e51e026Smrg#         compile            compile a source file into a libtool object
553e51e026Smrg#         execute            automatically set library path, then run a program
563e51e026Smrg#         finish             complete the installation of libtool libraries
573e51e026Smrg#         install            install libraries or executables
583e51e026Smrg#         link               create a library or an executable
593e51e026Smrg#         uninstall          remove libraries from an installed directory
60a7b590b3Smrg#
613e51e026Smrg# MODE-ARGS vary depending on the MODE.  When passed as first option,
623e51e026Smrg# `--mode=MODE' may be abbreviated as `MODE' or a unique abbreviation of that.
63a7b590b3Smrg# Try `$progname --help --mode=MODE' for a more detailed description of MODE.
64a7b590b3Smrg#
65a7b590b3Smrg# When reporting a bug, please describe a test case to reproduce it and
66a7b590b3Smrg# include the following information:
67a7b590b3Smrg#
683e51e026Smrg#         host-triplet:	$host
693e51e026Smrg#         shell:		$SHELL
703e51e026Smrg#         compiler:		$LTCC
713e51e026Smrg#         compiler flags:		$LTCFLAGS
723e51e026Smrg#         linker:		$LD (gnu? $with_gnu_ld)
733e51e026Smrg#         $progname:	(GNU libtool) 2.4.2
743e51e026Smrg#         automake:	$automake_version
753e51e026Smrg#         autoconf:	$autoconf_version
76a7b590b3Smrg#
77a7b590b3Smrg# Report bugs to <bug-libtool@gnu.org>.
783e51e026Smrg# GNU libtool home page: <http://www.gnu.org/software/libtool/>.
793e51e026Smrg# General help using GNU software: <http://www.gnu.org/gethelp/>.
80943345d3Smrg
813e51e026SmrgPROGRAM=libtool
82943345d3SmrgPACKAGE=libtool
833e51e026SmrgVERSION=2.4.2
84a7b590b3SmrgTIMESTAMP=""
853e51e026Smrgpackage_revision=1.3337
86943345d3Smrg
87a7b590b3Smrg# Be Bourne compatible
88f67b85aaSmrgif test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then
89f67b85aaSmrg  emulate sh
90f67b85aaSmrg  NULLCMD=:
91f67b85aaSmrg  # Zsh 3.x and 4.x performs word splitting on ${1+"$@"}, which
92f67b85aaSmrg  # is contrary to our usage.  Disable this feature.
93f67b85aaSmrg  alias -g '${1+"$@"}'='"$@"'
94943345d3Smrg  setopt NO_GLOB_SUBST
95f67b85aaSmrgelse
96f67b85aaSmrg  case `(set -o) 2>/dev/null` in *posix*) set -o posix;; esac
97943345d3Smrgfi
985e695a52SmrgBIN_SH=xpg4; export BIN_SH # for Tru64
995e695a52SmrgDUALCASE=1; export DUALCASE # for MKS sh
100943345d3Smrg
1013e51e026Smrg# A function that is used when there is no print builtin or printf.
1023e51e026Smrgfunc_fallback_echo ()
1033e51e026Smrg{
1043e51e026Smrg  eval 'cat <<_LTECHO_EOF
1053e51e026Smrg$1
1063e51e026Smrg_LTECHO_EOF'
1073e51e026Smrg}
1083e51e026Smrg
109a7b590b3Smrg# NLS nuisances: We save the old values to restore during execute mode.
110a7b590b3Smrglt_user_locale=
111a7b590b3Smrglt_safe_locale=
1125e695a52Smrgfor lt_var in LANG LANGUAGE LC_ALL LC_CTYPE LC_COLLATE LC_MESSAGES
113f67b85aaSmrgdo
114f67b85aaSmrg  eval "if test \"\${$lt_var+set}\" = set; then
115a7b590b3Smrg          save_$lt_var=\$$lt_var
116a7b590b3Smrg          $lt_var=C
1175e695a52Smrg	  export $lt_var
118a7b590b3Smrg	  lt_user_locale=\"$lt_var=\\\$save_\$lt_var; \$lt_user_locale\"
119a7b590b3Smrg	  lt_safe_locale=\"$lt_var=C; \$lt_safe_locale\"
1205e695a52Smrg	fi"
121f67b85aaSmrgdone
1223e51e026SmrgLC_ALL=C
1233e51e026SmrgLANGUAGE=C
1243e51e026Smrgexport LANGUAGE LC_ALL
125943345d3Smrg
126a7b590b3Smrg$lt_unset CDPATH
127a7b590b3Smrg
128a7b590b3Smrg
1293e51e026Smrg# Work around backward compatibility issue on IRIX 6.5. On IRIX 6.4+, sh
1303e51e026Smrg# is ksh but when the shell is invoked as "sh" and the current value of
1313e51e026Smrg# the _XPG environment variable is not equal to 1 (one), the special
1323e51e026Smrg# positional parameter $0, within a function call, is the name of the
1333e51e026Smrg# function.
1343e51e026Smrgprogpath="$0"
135a7b590b3Smrg
136a7b590b3Smrg
137a7b590b3Smrg
138a7b590b3Smrg: ${CP="cp -f"}
1393e51e026Smrgtest "${ECHO+set}" = set || ECHO=${as_echo-'printf %s\n'}
140a7b590b3Smrg: ${MAKE="make"}
141a7b590b3Smrg: ${MKDIR="mkdir"}
142a7b590b3Smrg: ${MV="mv -f"}
143a7b590b3Smrg: ${RM="rm -f"}
144a7b590b3Smrg: ${SHELL="${CONFIG_SHELL-/bin/sh}"}
145a7b590b3Smrg: ${Xsed="$SED -e 1s/^X//"}
146a7b590b3Smrg
147a7b590b3Smrg# Global variables:
148a7b590b3SmrgEXIT_SUCCESS=0
149a7b590b3SmrgEXIT_FAILURE=1
150a7b590b3SmrgEXIT_MISMATCH=63  # $? = 63 is used to indicate version mismatch to missing.
151a7b590b3SmrgEXIT_SKIP=77	  # $? = 77 is used to indicate a skipped test to automake.
152a7b590b3Smrg
153a7b590b3Smrgexit_status=$EXIT_SUCCESS
1545e695a52Smrg
155943345d3Smrg# Make sure IFS has a sensible default
156943345d3Smrglt_nl='
157943345d3Smrg'
158943345d3SmrgIFS=" 	$lt_nl"
159943345d3Smrg
160a7b590b3Smrgdirname="s,/[^/]*$,,"
161a7b590b3Smrgbasename="s,^.*/,,"
162a7b590b3Smrg
1633e51e026Smrg# func_dirname file append nondir_replacement
1643e51e026Smrg# Compute the dirname of FILE.  If nonempty, add APPEND to the result,
1653e51e026Smrg# otherwise set result to NONDIR_REPLACEMENT.
1663e51e026Smrgfunc_dirname ()
1673e51e026Smrg{
1683e51e026Smrg    func_dirname_result=`$ECHO "${1}" | $SED "$dirname"`
1693e51e026Smrg    if test "X$func_dirname_result" = "X${1}"; then
1703e51e026Smrg      func_dirname_result="${3}"
1713e51e026Smrg    else
1723e51e026Smrg      func_dirname_result="$func_dirname_result${2}"
1733e51e026Smrg    fi
1743e51e026Smrg} # func_dirname may be replaced by extended shell implementation
1753e51e026Smrg
1763e51e026Smrg
1773e51e026Smrg# func_basename file
1783e51e026Smrgfunc_basename ()
1793e51e026Smrg{
1803e51e026Smrg    func_basename_result=`$ECHO "${1}" | $SED "$basename"`
1813e51e026Smrg} # func_basename may be replaced by extended shell implementation
1823e51e026Smrg
1833e51e026Smrg
184a7b590b3Smrg# func_dirname_and_basename file append nondir_replacement
185a7b590b3Smrg# perform func_basename and func_dirname in a single function
186a7b590b3Smrg# call:
187a7b590b3Smrg#   dirname:  Compute the dirname of FILE.  If nonempty,
188a7b590b3Smrg#             add APPEND to the result, otherwise set result
189a7b590b3Smrg#             to NONDIR_REPLACEMENT.
190a7b590b3Smrg#             value returned in "$func_dirname_result"
191a7b590b3Smrg#   basename: Compute filename of FILE.
192a7b590b3Smrg#             value retuned in "$func_basename_result"
193a7b590b3Smrg# Implementation must be kept synchronized with func_dirname
194a7b590b3Smrg# and func_basename. For efficiency, we do not delegate to
195a7b590b3Smrg# those functions but instead duplicate the functionality here.
196a7b590b3Smrgfunc_dirname_and_basename ()
197a7b590b3Smrg{
1983e51e026Smrg    # Extract subdirectory from the argument.
1993e51e026Smrg    func_dirname_result=`$ECHO "${1}" | $SED -e "$dirname"`
2003e51e026Smrg    if test "X$func_dirname_result" = "X${1}"; then
2013e51e026Smrg      func_dirname_result="${3}"
2023e51e026Smrg    else
2033e51e026Smrg      func_dirname_result="$func_dirname_result${2}"
2043e51e026Smrg    fi
2053e51e026Smrg    func_basename_result=`$ECHO "${1}" | $SED -e "$basename"`
2063e51e026Smrg} # func_dirname_and_basename may be replaced by extended shell implementation
2073e51e026Smrg
2083e51e026Smrg
2093e51e026Smrg# func_stripname prefix suffix name
2103e51e026Smrg# strip PREFIX and SUFFIX off of NAME.
2113e51e026Smrg# PREFIX and SUFFIX must not contain globbing or regex special
2123e51e026Smrg# characters, hashes, percent signs, but SUFFIX may contain a leading
2133e51e026Smrg# dot (in which case that matches only a dot).
2143e51e026Smrg# func_strip_suffix prefix name
2153e51e026Smrgfunc_stripname ()
2163e51e026Smrg{
2173e51e026Smrg    case ${2} in
2183e51e026Smrg      .*) func_stripname_result=`$ECHO "${3}" | $SED "s%^${1}%%; s%\\\\${2}\$%%"`;;
2193e51e026Smrg      *)  func_stripname_result=`$ECHO "${3}" | $SED "s%^${1}%%; s%${2}\$%%"`;;
2203e51e026Smrg    esac
2213e51e026Smrg} # func_stripname may be replaced by extended shell implementation
2223e51e026Smrg
2233e51e026Smrg
2243e51e026Smrg# These SED scripts presuppose an absolute path with a trailing slash.
2253e51e026Smrgpathcar='s,^/\([^/]*\).*$,\1,'
2263e51e026Smrgpathcdr='s,^/[^/]*,,'
2273e51e026Smrgremovedotparts=':dotsl
2283e51e026Smrg		s@/\./@/@g
2293e51e026Smrg		t dotsl
2303e51e026Smrg		s,/\.$,/,'
2313e51e026Smrgcollapseslashes='s@/\{1,\}@/@g'
2323e51e026Smrgfinalslash='s,/*$,/,'
2333e51e026Smrg
2343e51e026Smrg# func_normal_abspath PATH
2353e51e026Smrg# Remove doubled-up and trailing slashes, "." path components,
2363e51e026Smrg# and cancel out any ".." path components in PATH after making
2373e51e026Smrg# it an absolute path.
2383e51e026Smrg#             value returned in "$func_normal_abspath_result"
2393e51e026Smrgfunc_normal_abspath ()
2403e51e026Smrg{
2413e51e026Smrg  # Start from root dir and reassemble the path.
2423e51e026Smrg  func_normal_abspath_result=
2433e51e026Smrg  func_normal_abspath_tpath=$1
2443e51e026Smrg  func_normal_abspath_altnamespace=
2453e51e026Smrg  case $func_normal_abspath_tpath in
2463e51e026Smrg    "")
2473e51e026Smrg      # Empty path, that just means $cwd.
2483e51e026Smrg      func_stripname '' '/' "`pwd`"
2493e51e026Smrg      func_normal_abspath_result=$func_stripname_result
2503e51e026Smrg      return
2513e51e026Smrg    ;;
2523e51e026Smrg    # The next three entries are used to spot a run of precisely
2533e51e026Smrg    # two leading slashes without using negated character classes;
2543e51e026Smrg    # we take advantage of case's first-match behaviour.
2553e51e026Smrg    ///*)
2563e51e026Smrg      # Unusual form of absolute path, do nothing.
2573e51e026Smrg    ;;
2583e51e026Smrg    //*)
2593e51e026Smrg      # Not necessarily an ordinary path; POSIX reserves leading '//'
2603e51e026Smrg      # and for example Cygwin uses it to access remote file shares
2613e51e026Smrg      # over CIFS/SMB, so we conserve a leading double slash if found.
2623e51e026Smrg      func_normal_abspath_altnamespace=/
2633e51e026Smrg    ;;
2643e51e026Smrg    /*)
2653e51e026Smrg      # Absolute path, do nothing.
2663e51e026Smrg    ;;
2673e51e026Smrg    *)
2683e51e026Smrg      # Relative path, prepend $cwd.
2693e51e026Smrg      func_normal_abspath_tpath=`pwd`/$func_normal_abspath_tpath
2703e51e026Smrg    ;;
2713e51e026Smrg  esac
2723e51e026Smrg  # Cancel out all the simple stuff to save iterations.  We also want
2733e51e026Smrg  # the path to end with a slash for ease of parsing, so make sure
2743e51e026Smrg  # there is one (and only one) here.
2753e51e026Smrg  func_normal_abspath_tpath=`$ECHO "$func_normal_abspath_tpath" | $SED \
2763e51e026Smrg        -e "$removedotparts" -e "$collapseslashes" -e "$finalslash"`
2773e51e026Smrg  while :; do
2783e51e026Smrg    # Processed it all yet?
2793e51e026Smrg    if test "$func_normal_abspath_tpath" = / ; then
2803e51e026Smrg      # If we ascended to the root using ".." the result may be empty now.
2813e51e026Smrg      if test -z "$func_normal_abspath_result" ; then
2823e51e026Smrg        func_normal_abspath_result=/
2833e51e026Smrg      fi
2843e51e026Smrg      break
2853e51e026Smrg    fi
2863e51e026Smrg    func_normal_abspath_tcomponent=`$ECHO "$func_normal_abspath_tpath" | $SED \
2873e51e026Smrg        -e "$pathcar"`
2883e51e026Smrg    func_normal_abspath_tpath=`$ECHO "$func_normal_abspath_tpath" | $SED \
2893e51e026Smrg        -e "$pathcdr"`
2903e51e026Smrg    # Figure out what to do with it
2913e51e026Smrg    case $func_normal_abspath_tcomponent in
2923e51e026Smrg      "")
2933e51e026Smrg        # Trailing empty path component, ignore it.
2943e51e026Smrg      ;;
2953e51e026Smrg      ..)
2963e51e026Smrg        # Parent dir; strip last assembled component from result.
2973e51e026Smrg        func_dirname "$func_normal_abspath_result"
2983e51e026Smrg        func_normal_abspath_result=$func_dirname_result
2993e51e026Smrg      ;;
3003e51e026Smrg      *)
3013e51e026Smrg        # Actual path component, append it.
3023e51e026Smrg        func_normal_abspath_result=$func_normal_abspath_result/$func_normal_abspath_tcomponent
3033e51e026Smrg      ;;
3043e51e026Smrg    esac
3053e51e026Smrg  done
3063e51e026Smrg  # Restore leading double-slash if one was found on entry.
3073e51e026Smrg  func_normal_abspath_result=$func_normal_abspath_altnamespace$func_normal_abspath_result
308a7b590b3Smrg}
309943345d3Smrg
3103e51e026Smrg# func_relative_path SRCDIR DSTDIR
3113e51e026Smrg# generates a relative path from SRCDIR to DSTDIR, with a trailing
3123e51e026Smrg# slash if non-empty, suitable for immediately appending a filename
3133e51e026Smrg# without needing to append a separator.
3143e51e026Smrg#             value returned in "$func_relative_path_result"
3153e51e026Smrgfunc_relative_path ()
3163e51e026Smrg{
3173e51e026Smrg  func_relative_path_result=
3183e51e026Smrg  func_normal_abspath "$1"
3193e51e026Smrg  func_relative_path_tlibdir=$func_normal_abspath_result
3203e51e026Smrg  func_normal_abspath "$2"
3213e51e026Smrg  func_relative_path_tbindir=$func_normal_abspath_result
3223e51e026Smrg
3233e51e026Smrg  # Ascend the tree starting from libdir
3243e51e026Smrg  while :; do
3253e51e026Smrg    # check if we have found a prefix of bindir
3263e51e026Smrg    case $func_relative_path_tbindir in
3273e51e026Smrg      $func_relative_path_tlibdir)
3283e51e026Smrg        # found an exact match
3293e51e026Smrg        func_relative_path_tcancelled=
3303e51e026Smrg        break
3313e51e026Smrg        ;;
3323e51e026Smrg      $func_relative_path_tlibdir*)
3333e51e026Smrg        # found a matching prefix
3343e51e026Smrg        func_stripname "$func_relative_path_tlibdir" '' "$func_relative_path_tbindir"
3353e51e026Smrg        func_relative_path_tcancelled=$func_stripname_result
3363e51e026Smrg        if test -z "$func_relative_path_result"; then
3373e51e026Smrg          func_relative_path_result=.
3383e51e026Smrg        fi
3393e51e026Smrg        break
3403e51e026Smrg        ;;
3413e51e026Smrg      *)
3423e51e026Smrg        func_dirname $func_relative_path_tlibdir
3433e51e026Smrg        func_relative_path_tlibdir=${func_dirname_result}
3443e51e026Smrg        if test "x$func_relative_path_tlibdir" = x ; then
3453e51e026Smrg          # Have to descend all the way to the root!
3463e51e026Smrg          func_relative_path_result=../$func_relative_path_result
3473e51e026Smrg          func_relative_path_tcancelled=$func_relative_path_tbindir
3483e51e026Smrg          break
3493e51e026Smrg        fi
3503e51e026Smrg        func_relative_path_result=../$func_relative_path_result
3513e51e026Smrg        ;;
3523e51e026Smrg    esac
3533e51e026Smrg  done
354a7b590b3Smrg
3553e51e026Smrg  # Now calculate path; take care to avoid doubling-up slashes.
3563e51e026Smrg  func_stripname '' '/' "$func_relative_path_result"
3573e51e026Smrg  func_relative_path_result=$func_stripname_result
3583e51e026Smrg  func_stripname '/' '/' "$func_relative_path_tcancelled"
3593e51e026Smrg  if test "x$func_stripname_result" != x ; then
3603e51e026Smrg    func_relative_path_result=${func_relative_path_result}/${func_stripname_result}
3613e51e026Smrg  fi
3623e51e026Smrg
3633e51e026Smrg  # Normalisation. If bindir is libdir, return empty string,
3643e51e026Smrg  # else relative path ending with a slash; either way, target
3653e51e026Smrg  # file name can be directly appended.
3663e51e026Smrg  if test ! -z "$func_relative_path_result"; then
3673e51e026Smrg    func_stripname './' '' "$func_relative_path_result/"
3683e51e026Smrg    func_relative_path_result=$func_stripname_result
3693e51e026Smrg  fi
3703e51e026Smrg}
371a7b590b3Smrg
372a7b590b3Smrg# The name of this program:
373a7b590b3Smrgfunc_dirname_and_basename "$progpath"
374a7b590b3Smrgprogname=$func_basename_result
375a7b590b3Smrg
376a7b590b3Smrg# Make sure we have an absolute path for reexecution:
377a7b590b3Smrgcase $progpath in
378a7b590b3Smrg  [\\/]*|[A-Za-z]:\\*) ;;
379a7b590b3Smrg  *[\\/]*)
380a7b590b3Smrg     progdir=$func_dirname_result
381a7b590b3Smrg     progdir=`cd "$progdir" && pwd`
382a7b590b3Smrg     progpath="$progdir/$progname"
383a7b590b3Smrg     ;;
384a7b590b3Smrg  *)
385a7b590b3Smrg     save_IFS="$IFS"
3863e51e026Smrg     IFS=${PATH_SEPARATOR-:}
387a7b590b3Smrg     for progdir in $PATH; do
388a7b590b3Smrg       IFS="$save_IFS"
389a7b590b3Smrg       test -x "$progdir/$progname" && break
390a7b590b3Smrg     done
391a7b590b3Smrg     IFS="$save_IFS"
392a7b590b3Smrg     test -n "$progdir" || progdir=`pwd`
393a7b590b3Smrg     progpath="$progdir/$progname"
394a7b590b3Smrg     ;;
395a7b590b3Smrgesac
396a7b590b3Smrg
397a7b590b3Smrg# Sed substitution that helps us do robust quoting.  It backslashifies
398a7b590b3Smrg# metacharacters that are still active within double-quoted strings.
399a7b590b3SmrgXsed="${SED}"' -e 1s/^X//'
400a7b590b3Smrgsed_quote_subst='s/\([`"$\\]\)/\\\1/g'
401a7b590b3Smrg
402a7b590b3Smrg# Same as above, but do not quote variable references.
403a7b590b3Smrgdouble_quote_subst='s/\(["`\\]\)/\\\1/g'
404a7b590b3Smrg
4053e51e026Smrg# Sed substitution that turns a string into a regex matching for the
4063e51e026Smrg# string literally.
4073e51e026Smrgsed_make_literal_regex='s,[].[^$\\*\/],\\&,g'
4083e51e026Smrg
4093e51e026Smrg# Sed substitution that converts a w32 file name or path
4103e51e026Smrg# which contains forward slashes, into one that contains
4113e51e026Smrg# (escaped) backslashes.  A very naive implementation.
4123e51e026Smrglt_sed_naive_backslashify='s|\\\\*|\\|g;s|/|\\|g;s|\\|\\\\|g'
4133e51e026Smrg
414a7b590b3Smrg# Re-`\' parameter expansions in output of double_quote_subst that were
415a7b590b3Smrg# `\'-ed in input to the same.  If an odd number of `\' preceded a '$'
416a7b590b3Smrg# in input to double_quote_subst, that '$' was protected from expansion.
417a7b590b3Smrg# Since each input `\' is now two `\'s, look for any number of runs of
418a7b590b3Smrg# four `\'s followed by two `\'s and then a '$'.  `\' that '$'.
419a7b590b3Smrgbs='\\'
420a7b590b3Smrgbs2='\\\\'
421a7b590b3Smrgbs4='\\\\\\\\'
422a7b590b3Smrgdollar='\$'
423a7b590b3Smrgsed_double_backslash="\
424a7b590b3Smrg  s/$bs4/&\\
425a7b590b3Smrg/g
426a7b590b3Smrg  s/^$bs2$dollar/$bs&/
427a7b590b3Smrg  s/\\([^$bs]\\)$bs2$dollar/\\1$bs2$bs$dollar/g
428a7b590b3Smrg  s/\n//g"
429a7b590b3Smrg
430a7b590b3Smrg# Standard options:
431a7b590b3Smrgopt_dry_run=false
432a7b590b3Smrgopt_help=false
433a7b590b3Smrgopt_quiet=false
434a7b590b3Smrgopt_verbose=false
435a7b590b3Smrgopt_warning=:
436a7b590b3Smrg
437a7b590b3Smrg# func_echo arg...
438a7b590b3Smrg# Echo program name prefixed message, along with the current mode
439a7b590b3Smrg# name if it has been set yet.
440a7b590b3Smrgfunc_echo ()
441a7b590b3Smrg{
4423e51e026Smrg    $ECHO "$progname: ${opt_mode+$opt_mode: }$*"
443a7b590b3Smrg}
444a7b590b3Smrg
445a7b590b3Smrg# func_verbose arg...
446a7b590b3Smrg# Echo program name prefixed message in verbose mode only.
447a7b590b3Smrgfunc_verbose ()
448a7b590b3Smrg{
449a7b590b3Smrg    $opt_verbose && func_echo ${1+"$@"}
450a7b590b3Smrg
451a7b590b3Smrg    # A bug in bash halts the script if the last line of a function
452a7b590b3Smrg    # fails when set -e is in force, so we need another command to
453a7b590b3Smrg    # work around that:
454a7b590b3Smrg    :
455a7b590b3Smrg}
456a7b590b3Smrg
4573e51e026Smrg# func_echo_all arg...
4583e51e026Smrg# Invoke $ECHO with all args, space-separated.
4593e51e026Smrgfunc_echo_all ()
4603e51e026Smrg{
4613e51e026Smrg    $ECHO "$*"
4623e51e026Smrg}
4633e51e026Smrg
464a7b590b3Smrg# func_error arg...
465a7b590b3Smrg# Echo program name prefixed message to standard error.
466a7b590b3Smrgfunc_error ()
467a7b590b3Smrg{
4683e51e026Smrg    $ECHO "$progname: ${opt_mode+$opt_mode: }"${1+"$@"} 1>&2
469a7b590b3Smrg}
470a7b590b3Smrg
471a7b590b3Smrg# func_warning arg...
472a7b590b3Smrg# Echo program name prefixed warning message to standard error.
473a7b590b3Smrgfunc_warning ()
474a7b590b3Smrg{
4753e51e026Smrg    $opt_warning && $ECHO "$progname: ${opt_mode+$opt_mode: }warning: "${1+"$@"} 1>&2
476a7b590b3Smrg
477a7b590b3Smrg    # bash bug again:
478a7b590b3Smrg    :
479a7b590b3Smrg}
480a7b590b3Smrg
481a7b590b3Smrg# func_fatal_error arg...
482a7b590b3Smrg# Echo program name prefixed message to standard error, and exit.
483a7b590b3Smrgfunc_fatal_error ()
484a7b590b3Smrg{
485a7b590b3Smrg    func_error ${1+"$@"}
486a7b590b3Smrg    exit $EXIT_FAILURE
487a7b590b3Smrg}
488a7b590b3Smrg
489a7b590b3Smrg# func_fatal_help arg...
490a7b590b3Smrg# Echo program name prefixed message to standard error, followed by
491a7b590b3Smrg# a help hint, and exit.
492a7b590b3Smrgfunc_fatal_help ()
493a7b590b3Smrg{
494a7b590b3Smrg    func_error ${1+"$@"}
495a7b590b3Smrg    func_fatal_error "$help"
496a7b590b3Smrg}
497a7b590b3Smrghelp="Try \`$progname --help' for more information."  ## default
498a7b590b3Smrg
499a7b590b3Smrg
500a7b590b3Smrg# func_grep expression filename
501a7b590b3Smrg# Check whether EXPRESSION matches any line of FILENAME, without output.
502a7b590b3Smrgfunc_grep ()
503a7b590b3Smrg{
504a7b590b3Smrg    $GREP "$1" "$2" >/dev/null 2>&1
505a7b590b3Smrg}
506a7b590b3Smrg
507a7b590b3Smrg
508a7b590b3Smrg# func_mkdir_p directory-path
509a7b590b3Smrg# Make sure the entire path to DIRECTORY-PATH is available.
510a7b590b3Smrgfunc_mkdir_p ()
511a7b590b3Smrg{
512a7b590b3Smrg    my_directory_path="$1"
513a7b590b3Smrg    my_dir_list=
514a7b590b3Smrg
515a7b590b3Smrg    if test -n "$my_directory_path" && test "$opt_dry_run" != ":"; then
516a7b590b3Smrg
517a7b590b3Smrg      # Protect directory names starting with `-'
518a7b590b3Smrg      case $my_directory_path in
519a7b590b3Smrg        -*) my_directory_path="./$my_directory_path" ;;
520a7b590b3Smrg      esac
521a7b590b3Smrg
522a7b590b3Smrg      # While some portion of DIR does not yet exist...
523a7b590b3Smrg      while test ! -d "$my_directory_path"; do
524a7b590b3Smrg        # ...make a list in topmost first order.  Use a colon delimited
525a7b590b3Smrg	# list incase some portion of path contains whitespace.
526a7b590b3Smrg        my_dir_list="$my_directory_path:$my_dir_list"
527a7b590b3Smrg
528a7b590b3Smrg        # If the last portion added has no slash in it, the list is done
529a7b590b3Smrg        case $my_directory_path in */*) ;; *) break ;; esac
530a7b590b3Smrg
531a7b590b3Smrg        # ...otherwise throw away the child directory and loop
5323e51e026Smrg        my_directory_path=`$ECHO "$my_directory_path" | $SED -e "$dirname"`
533a7b590b3Smrg      done
5343e51e026Smrg      my_dir_list=`$ECHO "$my_dir_list" | $SED 's,:*$,,'`
535a7b590b3Smrg
536a7b590b3Smrg      save_mkdir_p_IFS="$IFS"; IFS=':'
537a7b590b3Smrg      for my_dir in $my_dir_list; do
538a7b590b3Smrg	IFS="$save_mkdir_p_IFS"
539a7b590b3Smrg        # mkdir can fail with a `File exist' error if two processes
540a7b590b3Smrg        # try to create one of the directories concurrently.  Don't
541a7b590b3Smrg        # stop in that case!
542a7b590b3Smrg        $MKDIR "$my_dir" 2>/dev/null || :
543a7b590b3Smrg      done
544a7b590b3Smrg      IFS="$save_mkdir_p_IFS"
545a7b590b3Smrg
546a7b590b3Smrg      # Bail out if we (or some other process) failed to create a directory.
547a7b590b3Smrg      test -d "$my_directory_path" || \
548a7b590b3Smrg        func_fatal_error "Failed to create \`$1'"
549a7b590b3Smrg    fi
550a7b590b3Smrg}
551943345d3Smrg
552943345d3Smrg
553943345d3Smrg# func_mktempdir [string]
554943345d3Smrg# Make a temporary directory that won't clash with other running
555943345d3Smrg# libtool processes, and avoids race conditions if possible.  If
556943345d3Smrg# given, STRING is the basename for that directory.
557943345d3Smrgfunc_mktempdir ()
558943345d3Smrg{
559943345d3Smrg    my_template="${TMPDIR-/tmp}/${1-$progname}"
560943345d3Smrg
561a7b590b3Smrg    if test "$opt_dry_run" = ":"; then
562943345d3Smrg      # Return a directory name, but don't create it in dry-run mode
563943345d3Smrg      my_tmpdir="${my_template}-$$"
564943345d3Smrg    else
565943345d3Smrg
566943345d3Smrg      # If mktemp works, use that first and foremost
567943345d3Smrg      my_tmpdir=`mktemp -d "${my_template}-XXXXXXXX" 2>/dev/null`
568943345d3Smrg
569943345d3Smrg      if test ! -d "$my_tmpdir"; then
570a7b590b3Smrg        # Failing that, at least try and use $RANDOM to avoid a race
571a7b590b3Smrg        my_tmpdir="${my_template}-${RANDOM-0}$$"
572943345d3Smrg
573a7b590b3Smrg        save_mktempdir_umask=`umask`
574a7b590b3Smrg        umask 0077
575a7b590b3Smrg        $MKDIR "$my_tmpdir"
576a7b590b3Smrg        umask $save_mktempdir_umask
577943345d3Smrg      fi
578943345d3Smrg
579943345d3Smrg      # If we're not in dry-run mode, bomb out on failure
580a7b590b3Smrg      test -d "$my_tmpdir" || \
581a7b590b3Smrg        func_fatal_error "cannot create temporary directory \`$my_tmpdir'"
582943345d3Smrg    fi
583943345d3Smrg
5843e51e026Smrg    $ECHO "$my_tmpdir"
585943345d3Smrg}
586943345d3Smrg
587943345d3Smrg
588a7b590b3Smrg# func_quote_for_eval arg
589a7b590b3Smrg# Aesthetically quote ARG to be evaled later.
590a7b590b3Smrg# This function returns two values: FUNC_QUOTE_FOR_EVAL_RESULT
591a7b590b3Smrg# is double-quoted, suitable for a subsequent eval, whereas
592a7b590b3Smrg# FUNC_QUOTE_FOR_EVAL_UNQUOTED_RESULT has merely all characters
593a7b590b3Smrg# which are still active within double quotes backslashified.
594a7b590b3Smrgfunc_quote_for_eval ()
595943345d3Smrg{
596a7b590b3Smrg    case $1 in
597a7b590b3Smrg      *[\\\`\"\$]*)
5983e51e026Smrg	func_quote_for_eval_unquoted_result=`$ECHO "$1" | $SED "$sed_quote_subst"` ;;
599a7b590b3Smrg      *)
600a7b590b3Smrg        func_quote_for_eval_unquoted_result="$1" ;;
601a7b590b3Smrg    esac
602a7b590b3Smrg
603a7b590b3Smrg    case $func_quote_for_eval_unquoted_result in
604a7b590b3Smrg      # Double-quote args containing shell metacharacters to delay
605a7b590b3Smrg      # word splitting, command substitution and and variable
606a7b590b3Smrg      # expansion for a subsequent eval.
607a7b590b3Smrg      # Many Bourne shells cannot handle close brackets correctly
608a7b590b3Smrg      # in scan sets, so we specify it separately.
609a7b590b3Smrg      *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \	]*|*]*|"")
610a7b590b3Smrg        func_quote_for_eval_result="\"$func_quote_for_eval_unquoted_result\""
611a7b590b3Smrg        ;;
612a7b590b3Smrg      *)
613a7b590b3Smrg        func_quote_for_eval_result="$func_quote_for_eval_unquoted_result"
614943345d3Smrg    esac
615943345d3Smrg}
616943345d3Smrg
617943345d3Smrg
618a7b590b3Smrg# func_quote_for_expand arg
619a7b590b3Smrg# Aesthetically quote ARG to be evaled later; same as above,
620a7b590b3Smrg# but do not quote variable references.
621a7b590b3Smrgfunc_quote_for_expand ()
622943345d3Smrg{
623a7b590b3Smrg    case $1 in
624a7b590b3Smrg      *[\\\`\"]*)
6253e51e026Smrg	my_arg=`$ECHO "$1" | $SED \
626a7b590b3Smrg	    -e "$double_quote_subst" -e "$sed_double_backslash"` ;;
627943345d3Smrg      *)
628a7b590b3Smrg        my_arg="$1" ;;
629a7b590b3Smrg    esac
630a7b590b3Smrg
631a7b590b3Smrg    case $my_arg in
632a7b590b3Smrg      # Double-quote args containing shell metacharacters to delay
633a7b590b3Smrg      # word splitting and command substitution for a subsequent eval.
634a7b590b3Smrg      # Many Bourne shells cannot handle close brackets correctly
635a7b590b3Smrg      # in scan sets, so we specify it separately.
636a7b590b3Smrg      *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \	]*|*]*|"")
637a7b590b3Smrg        my_arg="\"$my_arg\""
638a7b590b3Smrg        ;;
639a7b590b3Smrg    esac
640a7b590b3Smrg
641a7b590b3Smrg    func_quote_for_expand_result="$my_arg"
642943345d3Smrg}
643943345d3Smrg
644943345d3Smrg
645a7b590b3Smrg# func_show_eval cmd [fail_exp]
646a7b590b3Smrg# Unless opt_silent is true, then output CMD.  Then, if opt_dryrun is
647a7b590b3Smrg# not true, evaluate CMD.  If the evaluation of CMD fails, and FAIL_EXP
648a7b590b3Smrg# is given, then evaluate it.
649a7b590b3Smrgfunc_show_eval ()
650943345d3Smrg{
651a7b590b3Smrg    my_cmd="$1"
652a7b590b3Smrg    my_fail_exp="${2-:}"
653943345d3Smrg
654a7b590b3Smrg    ${opt_silent-false} || {
655a7b590b3Smrg      func_quote_for_expand "$my_cmd"
656a7b590b3Smrg      eval "func_echo $func_quote_for_expand_result"
657a7b590b3Smrg    }
658a7b590b3Smrg
659a7b590b3Smrg    if ${opt_dry_run-false}; then :; else
660a7b590b3Smrg      eval "$my_cmd"
661a7b590b3Smrg      my_status=$?
662a7b590b3Smrg      if test "$my_status" -eq 0; then :; else
663a7b590b3Smrg	eval "(exit $my_status); $my_fail_exp"
664a7b590b3Smrg      fi
665943345d3Smrg    fi
666943345d3Smrg}
667943345d3Smrg
668a7b590b3Smrg
669a7b590b3Smrg# func_show_eval_locale cmd [fail_exp]
670a7b590b3Smrg# Unless opt_silent is true, then output CMD.  Then, if opt_dryrun is
671a7b590b3Smrg# not true, evaluate CMD.  If the evaluation of CMD fails, and FAIL_EXP
672a7b590b3Smrg# is given, then evaluate it.  Use the saved locale for evaluation.
673a7b590b3Smrgfunc_show_eval_locale ()
674943345d3Smrg{
675a7b590b3Smrg    my_cmd="$1"
676a7b590b3Smrg    my_fail_exp="${2-:}"
677a7b590b3Smrg
678a7b590b3Smrg    ${opt_silent-false} || {
679a7b590b3Smrg      func_quote_for_expand "$my_cmd"
680a7b590b3Smrg      eval "func_echo $func_quote_for_expand_result"
681a7b590b3Smrg    }
682a7b590b3Smrg
683a7b590b3Smrg    if ${opt_dry_run-false}; then :; else
684a7b590b3Smrg      eval "$lt_user_locale
685a7b590b3Smrg	    $my_cmd"
686a7b590b3Smrg      my_status=$?
687a7b590b3Smrg      eval "$lt_safe_locale"
688a7b590b3Smrg      if test "$my_status" -eq 0; then :; else
689a7b590b3Smrg	eval "(exit $my_status); $my_fail_exp"
690a7b590b3Smrg      fi
691943345d3Smrg    fi
692a7b590b3Smrg}
693943345d3Smrg
6943e51e026Smrg# func_tr_sh
6953e51e026Smrg# Turn $1 into a string suitable for a shell variable name.
6963e51e026Smrg# Result is stored in $func_tr_sh_result.  All characters
6973e51e026Smrg# not in the set a-zA-Z0-9_ are replaced with '_'. Further,
6983e51e026Smrg# if $1 begins with a digit, a '_' is prepended as well.
6993e51e026Smrgfunc_tr_sh ()
7003e51e026Smrg{
7013e51e026Smrg  case $1 in
7023e51e026Smrg  [0-9]* | *[!a-zA-Z0-9_]*)
7033e51e026Smrg    func_tr_sh_result=`$ECHO "$1" | $SED 's/^\([0-9]\)/_\1/; s/[^a-zA-Z0-9_]/_/g'`
7043e51e026Smrg    ;;
7053e51e026Smrg  * )
7063e51e026Smrg    func_tr_sh_result=$1
7073e51e026Smrg    ;;
7083e51e026Smrg  esac
7093e51e026Smrg}
710a7b590b3Smrg
711a7b590b3Smrg
712a7b590b3Smrg# func_version
713a7b590b3Smrg# Echo version message to standard output and exit.
714a7b590b3Smrgfunc_version ()
715a7b590b3Smrg{
7163e51e026Smrg    $opt_debug
7173e51e026Smrg
7183e51e026Smrg    $SED -n '/(C)/!b go
7193e51e026Smrg	:more
7203e51e026Smrg	/\./!{
7213e51e026Smrg	  N
7223e51e026Smrg	  s/\n# / /
7233e51e026Smrg	  b more
7243e51e026Smrg	}
7253e51e026Smrg	:go
7263e51e026Smrg	/^# '$PROGRAM' (GNU /,/# warranty; / {
727a7b590b3Smrg        s/^# //
728a7b590b3Smrg	s/^# *$//
729a7b590b3Smrg        s/\((C)\)[ 0-9,-]*\( [1-9][0-9]*\)/\1\2/
730a7b590b3Smrg        p
731a7b590b3Smrg     }' < "$progpath"
732a7b590b3Smrg     exit $?
733a7b590b3Smrg}
734a7b590b3Smrg
735a7b590b3Smrg# func_usage
736a7b590b3Smrg# Echo short help message to standard output and exit.
737a7b590b3Smrgfunc_usage ()
738a7b590b3Smrg{
7393e51e026Smrg    $opt_debug
7403e51e026Smrg
7413e51e026Smrg    $SED -n '/^# Usage:/,/^#  *.*--help/ {
742a7b590b3Smrg        s/^# //
743a7b590b3Smrg	s/^# *$//
744a7b590b3Smrg	s/\$progname/'$progname'/
745a7b590b3Smrg	p
746a7b590b3Smrg    }' < "$progpath"
7473e51e026Smrg    echo
748a7b590b3Smrg    $ECHO "run \`$progname --help | more' for full usage"
749a7b590b3Smrg    exit $?
750a7b590b3Smrg}
751a7b590b3Smrg
7523e51e026Smrg# func_help [NOEXIT]
7533e51e026Smrg# Echo long help message to standard output and exit,
7543e51e026Smrg# unless 'noexit' is passed as argument.
755a7b590b3Smrgfunc_help ()
756a7b590b3Smrg{
7573e51e026Smrg    $opt_debug
7583e51e026Smrg
759a7b590b3Smrg    $SED -n '/^# Usage:/,/# Report bugs to/ {
7603e51e026Smrg	:print
761a7b590b3Smrg        s/^# //
762a7b590b3Smrg	s/^# *$//
763a7b590b3Smrg	s*\$progname*'$progname'*
764a7b590b3Smrg	s*\$host*'"$host"'*
765a7b590b3Smrg	s*\$SHELL*'"$SHELL"'*
766a7b590b3Smrg	s*\$LTCC*'"$LTCC"'*
767a7b590b3Smrg	s*\$LTCFLAGS*'"$LTCFLAGS"'*
768a7b590b3Smrg	s*\$LD*'"$LD"'*
769a7b590b3Smrg	s/\$with_gnu_ld/'"$with_gnu_ld"'/
7703e51e026Smrg	s/\$automake_version/'"`(${AUTOMAKE-automake} --version) 2>/dev/null |$SED 1q`"'/
7713e51e026Smrg	s/\$autoconf_version/'"`(${AUTOCONF-autoconf} --version) 2>/dev/null |$SED 1q`"'/
772a7b590b3Smrg	p
7733e51e026Smrg	d
7743e51e026Smrg     }
7753e51e026Smrg     /^# .* home page:/b print
7763e51e026Smrg     /^# General help using/b print
7773e51e026Smrg     ' < "$progpath"
7783e51e026Smrg    ret=$?
7793e51e026Smrg    if test -z "$1"; then
7803e51e026Smrg      exit $ret
7813e51e026Smrg    fi
782a7b590b3Smrg}
783a7b590b3Smrg
784a7b590b3Smrg# func_missing_arg argname
785a7b590b3Smrg# Echo program name prefixed message to standard error and set global
786a7b590b3Smrg# exit_cmd.
787a7b590b3Smrgfunc_missing_arg ()
788a7b590b3Smrg{
7893e51e026Smrg    $opt_debug
7903e51e026Smrg
7913e51e026Smrg    func_error "missing argument for $1."
792a7b590b3Smrg    exit_cmd=exit
793943345d3Smrg}
794943345d3Smrg
795943345d3Smrg
7963e51e026Smrg# func_split_short_opt shortopt
7973e51e026Smrg# Set func_split_short_opt_name and func_split_short_opt_arg shell
7983e51e026Smrg# variables after splitting SHORTOPT after the 2nd character.
7993e51e026Smrgfunc_split_short_opt ()
8003e51e026Smrg{
8013e51e026Smrg    my_sed_short_opt='1s/^\(..\).*$/\1/;q'
8023e51e026Smrg    my_sed_short_rest='1s/^..\(.*\)$/\1/;q'
803943345d3Smrg
8043e51e026Smrg    func_split_short_opt_name=`$ECHO "$1" | $SED "$my_sed_short_opt"`
8053e51e026Smrg    func_split_short_opt_arg=`$ECHO "$1" | $SED "$my_sed_short_rest"`
8063e51e026Smrg} # func_split_short_opt may be replaced by extended shell implementation
8073e51e026Smrg
8083e51e026Smrg
8093e51e026Smrg# func_split_long_opt longopt
8103e51e026Smrg# Set func_split_long_opt_name and func_split_long_opt_arg shell
8113e51e026Smrg# variables after splitting LONGOPT at the `=' sign.
8123e51e026Smrgfunc_split_long_opt ()
8133e51e026Smrg{
8143e51e026Smrg    my_sed_long_opt='1s/^\(--[^=]*\)=.*/\1/;q'
8153e51e026Smrg    my_sed_long_arg='1s/^--[^=]*=//'
8163e51e026Smrg
8173e51e026Smrg    func_split_long_opt_name=`$ECHO "$1" | $SED "$my_sed_long_opt"`
8183e51e026Smrg    func_split_long_opt_arg=`$ECHO "$1" | $SED "$my_sed_long_arg"`
8193e51e026Smrg} # func_split_long_opt may be replaced by extended shell implementation
8203e51e026Smrg
8213e51e026Smrgexit_cmd=:
822a7b590b3Smrg
823a7b590b3Smrg
824a7b590b3Smrg
825943345d3Smrg
826943345d3Smrg
827a7b590b3Smrgmagic="%%%MAGIC variable%%%"
828a7b590b3Smrgmagic_exe="%%%MAGIC EXE variable%%%"
829943345d3Smrg
830a7b590b3Smrg# Global variables.
831a7b590b3Smrgnonopt=
832a7b590b3Smrgpreserve_args=
833a7b590b3Smrglo2o="s/\\.lo\$/.${objext}/"
834a7b590b3Smrgo2lo="s/\\.${objext}\$/.lo/"
835a7b590b3Smrgextracted_archives=
836a7b590b3Smrgextracted_serial=0
837943345d3Smrg
838a7b590b3Smrg# If this variable is set in any of the actions, the command in it
839a7b590b3Smrg# will be execed at the end.  This prevents here-documents from being
840a7b590b3Smrg# left over by shells.
841a7b590b3Smrgexec_cmd=
842a7b590b3Smrg
8433e51e026Smrg# func_append var value
8443e51e026Smrg# Append VALUE to the end of shell variable VAR.
8453e51e026Smrgfunc_append ()
8463e51e026Smrg{
8473e51e026Smrg    eval "${1}=\$${1}\${2}"
8483e51e026Smrg} # func_append may be replaced by extended shell implementation
8493e51e026Smrg
8503e51e026Smrg# func_append_quoted var value
8513e51e026Smrg# Quote VALUE and append to the end of shell variable VAR, separated
8523e51e026Smrg# by a space.
8533e51e026Smrgfunc_append_quoted ()
8543e51e026Smrg{
8553e51e026Smrg    func_quote_for_eval "${2}"
8563e51e026Smrg    eval "${1}=\$${1}\\ \$func_quote_for_eval_result"
8573e51e026Smrg} # func_append_quoted may be replaced by extended shell implementation
8583e51e026Smrg
8593e51e026Smrg
8603e51e026Smrg# func_arith arithmetic-term...
8613e51e026Smrgfunc_arith ()
8623e51e026Smrg{
8633e51e026Smrg    func_arith_result=`expr "${@}"`
8643e51e026Smrg} # func_arith may be replaced by extended shell implementation
8653e51e026Smrg
8663e51e026Smrg
8673e51e026Smrg# func_len string
8683e51e026Smrg# STRING may not start with a hyphen.
8693e51e026Smrgfunc_len ()
8703e51e026Smrg{
8713e51e026Smrg    func_len_result=`expr "${1}" : ".*" 2>/dev/null || echo $max_cmd_len`
8723e51e026Smrg} # func_len may be replaced by extended shell implementation
8733e51e026Smrg
8743e51e026Smrg
8753e51e026Smrg# func_lo2o object
8763e51e026Smrgfunc_lo2o ()
8773e51e026Smrg{
8783e51e026Smrg    func_lo2o_result=`$ECHO "${1}" | $SED "$lo2o"`
8793e51e026Smrg} # func_lo2o may be replaced by extended shell implementation
8803e51e026Smrg
8813e51e026Smrg
8823e51e026Smrg# func_xform libobj-or-source
8833e51e026Smrgfunc_xform ()
8843e51e026Smrg{
8853e51e026Smrg    func_xform_result=`$ECHO "${1}" | $SED 's/\.[^.]*$/.lo/'`
8863e51e026Smrg} # func_xform may be replaced by extended shell implementation
8873e51e026Smrg
8883e51e026Smrg
889a7b590b3Smrg# func_fatal_configuration arg...
890a7b590b3Smrg# Echo program name prefixed message to standard error, followed by
891a7b590b3Smrg# a configuration failure hint, and exit.
892a7b590b3Smrgfunc_fatal_configuration ()
893a7b590b3Smrg{
894a7b590b3Smrg    func_error ${1+"$@"}
895a7b590b3Smrg    func_error "See the $PACKAGE documentation for more information."
896a7b590b3Smrg    func_fatal_error "Fatal configuration error."
897a7b590b3Smrg}
898943345d3Smrg
8995e695a52Smrg
900a7b590b3Smrg# func_config
901a7b590b3Smrg# Display the configuration for all the tags in this script.
902a7b590b3Smrgfunc_config ()
903a7b590b3Smrg{
904a7b590b3Smrg    re_begincf='^# ### BEGIN LIBTOOL'
905a7b590b3Smrg    re_endcf='^# ### END LIBTOOL'
906a7b590b3Smrg
907a7b590b3Smrg    # Default configuration.
908a7b590b3Smrg    $SED "1,/$re_begincf CONFIG/d;/$re_endcf CONFIG/,\$d" < "$progpath"
909943345d3Smrg
910943345d3Smrg    # Now print the configurations for the tags.
911943345d3Smrg    for tagname in $taglist; do
912a7b590b3Smrg      $SED -n "/$re_begincf TAG CONFIG: $tagname\$/,/$re_endcf TAG CONFIG: $tagname\$/p" < "$progpath"
913943345d3Smrg    done
914943345d3Smrg
915a7b590b3Smrg    exit $?
916a7b590b3Smrg}
917943345d3Smrg
918a7b590b3Smrg# func_features
919a7b590b3Smrg# Display the features supported by this script.
920a7b590b3Smrgfunc_features ()
921a7b590b3Smrg{
9223e51e026Smrg    echo "host: $host"
923943345d3Smrg    if test "$build_libtool_libs" = yes; then
9243e51e026Smrg      echo "enable shared libraries"
925943345d3Smrg    else
9263e51e026Smrg      echo "disable shared libraries"
927943345d3Smrg    fi
928943345d3Smrg    if test "$build_old_libs" = yes; then
9293e51e026Smrg      echo "enable static libraries"
930943345d3Smrg    else
9313e51e026Smrg      echo "disable static libraries"
932943345d3Smrg    fi
933a7b590b3Smrg
934943345d3Smrg    exit $?
935a7b590b3Smrg}
936943345d3Smrg
937a7b590b3Smrg# func_enable_tag tagname
938a7b590b3Smrg# Verify that TAGNAME is valid, and either flag an error and exit, or
939a7b590b3Smrg# enable the TAGNAME tag.  We also add TAGNAME to the global $taglist
940a7b590b3Smrg# variable here.
941a7b590b3Smrgfunc_enable_tag ()
942a7b590b3Smrg{
943a7b590b3Smrg  # Global variable:
944a7b590b3Smrg  tagname="$1"
945943345d3Smrg
946a7b590b3Smrg  re_begincf="^# ### BEGIN LIBTOOL TAG CONFIG: $tagname\$"
947a7b590b3Smrg  re_endcf="^# ### END LIBTOOL TAG CONFIG: $tagname\$"
948a7b590b3Smrg  sed_extractcf="/$re_begincf/,/$re_endcf/p"
949943345d3Smrg
950a7b590b3Smrg  # Validate tagname.
951a7b590b3Smrg  case $tagname in
952a7b590b3Smrg    *[!-_A-Za-z0-9,/]*)
953a7b590b3Smrg      func_fatal_error "invalid tag name: $tagname"
954a7b590b3Smrg      ;;
955a7b590b3Smrg  esac
956943345d3Smrg
957a7b590b3Smrg  # Don't test for the "default" C tag, as we know it's
958a7b590b3Smrg  # there but not specially marked.
959a7b590b3Smrg  case $tagname in
960a7b590b3Smrg    CC) ;;
961a7b590b3Smrg    *)
962a7b590b3Smrg      if $GREP "$re_begincf" "$progpath" >/dev/null 2>&1; then
963a7b590b3Smrg	taglist="$taglist $tagname"
964a7b590b3Smrg
965a7b590b3Smrg	# Evaluate the configuration.  Be careful to quote the path
966a7b590b3Smrg	# and the sed script, to avoid splitting on whitespace, but
967a7b590b3Smrg	# also don't use non-portable quotes within backquotes within
968a7b590b3Smrg	# quotes we have to do it in 2 steps:
969a7b590b3Smrg	extractedcf=`$SED -n -e "$sed_extractcf" < "$progpath"`
970a7b590b3Smrg	eval "$extractedcf"
971a7b590b3Smrg      else
972a7b590b3Smrg	func_error "ignoring unknown tag $tagname"
973a7b590b3Smrg      fi
974a7b590b3Smrg      ;;
975a7b590b3Smrg  esac
976a7b590b3Smrg}
977a7b590b3Smrg
9783e51e026Smrg# func_check_version_match
9793e51e026Smrg# Ensure that we are using m4 macros, and libtool script from the same
9803e51e026Smrg# release of libtool.
9813e51e026Smrgfunc_check_version_match ()
982a7b590b3Smrg{
9833e51e026Smrg  if test "$package_revision" != "$macro_revision"; then
9843e51e026Smrg    if test "$VERSION" != "$macro_version"; then
9853e51e026Smrg      if test -z "$macro_version"; then
9863e51e026Smrg        cat >&2 <<_LT_EOF
9873e51e026Smrg$progname: Version mismatch error.  This is $PACKAGE $VERSION, but the
9883e51e026Smrg$progname: definition of this LT_INIT comes from an older release.
9893e51e026Smrg$progname: You should recreate aclocal.m4 with macros from $PACKAGE $VERSION
9903e51e026Smrg$progname: and run autoconf again.
9913e51e026Smrg_LT_EOF
9923e51e026Smrg      else
9933e51e026Smrg        cat >&2 <<_LT_EOF
9943e51e026Smrg$progname: Version mismatch error.  This is $PACKAGE $VERSION, but the
9953e51e026Smrg$progname: definition of this LT_INIT comes from $PACKAGE $macro_version.
9963e51e026Smrg$progname: You should recreate aclocal.m4 with macros from $PACKAGE $VERSION
9973e51e026Smrg$progname: and run autoconf again.
9983e51e026Smrg_LT_EOF
9993e51e026Smrg      fi
10003e51e026Smrg    else
10013e51e026Smrg      cat >&2 <<_LT_EOF
10023e51e026Smrg$progname: Version mismatch error.  This is $PACKAGE $VERSION, revision $package_revision,
10033e51e026Smrg$progname: but the definition of this LT_INIT comes from revision $macro_revision.
10043e51e026Smrg$progname: You should recreate aclocal.m4 with macros from revision $package_revision
10053e51e026Smrg$progname: of $PACKAGE $VERSION and run autoconf again.
10063e51e026Smrg_LT_EOF
10073e51e026Smrg    fi
10083e51e026Smrg
10093e51e026Smrg    exit $EXIT_MISMATCH
10103e51e026Smrg  fi
10113e51e026Smrg}
10123e51e026Smrg
10133e51e026Smrg
10143e51e026Smrg# Shorthand for --mode=foo, only valid as the first argument
10153e51e026Smrgcase $1 in
10163e51e026Smrgclean|clea|cle|cl)
10173e51e026Smrg  shift; set dummy --mode clean ${1+"$@"}; shift
10183e51e026Smrg  ;;
10193e51e026Smrgcompile|compil|compi|comp|com|co|c)
10203e51e026Smrg  shift; set dummy --mode compile ${1+"$@"}; shift
10213e51e026Smrg  ;;
10223e51e026Smrgexecute|execut|execu|exec|exe|ex|e)
10233e51e026Smrg  shift; set dummy --mode execute ${1+"$@"}; shift
10243e51e026Smrg  ;;
10253e51e026Smrgfinish|finis|fini|fin|fi|f)
10263e51e026Smrg  shift; set dummy --mode finish ${1+"$@"}; shift
10273e51e026Smrg  ;;
10283e51e026Smrginstall|instal|insta|inst|ins|in|i)
10293e51e026Smrg  shift; set dummy --mode install ${1+"$@"}; shift
10303e51e026Smrg  ;;
10313e51e026Smrglink|lin|li|l)
10323e51e026Smrg  shift; set dummy --mode link ${1+"$@"}; shift
10333e51e026Smrg  ;;
10343e51e026Smrguninstall|uninstal|uninsta|uninst|unins|unin|uni|un|u)
10353e51e026Smrg  shift; set dummy --mode uninstall ${1+"$@"}; shift
10363e51e026Smrg  ;;
10373e51e026Smrgesac
10383e51e026Smrg
10393e51e026Smrg
10403e51e026Smrg
10413e51e026Smrg# Option defaults:
10423e51e026Smrgopt_debug=:
10433e51e026Smrgopt_dry_run=false
10443e51e026Smrgopt_config=false
10453e51e026Smrgopt_preserve_dup_deps=false
10463e51e026Smrgopt_features=false
10473e51e026Smrgopt_finish=false
10483e51e026Smrgopt_help=false
10493e51e026Smrgopt_help_all=false
10503e51e026Smrgopt_silent=:
10513e51e026Smrgopt_warning=:
10523e51e026Smrgopt_verbose=:
10533e51e026Smrgopt_silent=false
10543e51e026Smrgopt_verbose=false
1055943345d3Smrg
1056943345d3Smrg
10573e51e026Smrg# Parse options once, thoroughly.  This comes as soon as possible in the
10583e51e026Smrg# script to make things like `--version' happen as quickly as we can.
10593e51e026Smrg{
10603e51e026Smrg  # this just eases exit handling
10613e51e026Smrg  while test $# -gt 0; do
1062a7b590b3Smrg    opt="$1"
1063a7b590b3Smrg    shift
1064a7b590b3Smrg    case $opt in
10653e51e026Smrg      --debug|-x)	opt_debug='set -x'
1066a7b590b3Smrg			func_echo "enabling shell trace mode"
1067a7b590b3Smrg			$opt_debug
1068a7b590b3Smrg			;;
10693e51e026Smrg      --dry-run|--dryrun|-n)
10703e51e026Smrg			opt_dry_run=:
1071a7b590b3Smrg			;;
10723e51e026Smrg      --config)
10733e51e026Smrg			opt_config=:
10743e51e026Smrgfunc_config
10753e51e026Smrg			;;
10763e51e026Smrg      --dlopen|-dlopen)
10773e51e026Smrg			optarg="$1"
10783e51e026Smrg			opt_dlopen="${opt_dlopen+$opt_dlopen
10793e51e026Smrg}$optarg"
1080a7b590b3Smrg			shift
1081a7b590b3Smrg			;;
1082a7b590b3Smrg      --preserve-dup-deps)
10833e51e026Smrg			opt_preserve_dup_deps=:
1084a7b590b3Smrg			;;
10853e51e026Smrg      --features)
10863e51e026Smrg			opt_features=:
10873e51e026Smrgfunc_features
10883e51e026Smrg			;;
10893e51e026Smrg      --finish)
10903e51e026Smrg			opt_finish=:
10913e51e026Smrgset dummy --mode finish ${1+"$@"}; shift
10923e51e026Smrg			;;
10933e51e026Smrg      --help)
10943e51e026Smrg			opt_help=:
10953e51e026Smrg			;;
10963e51e026Smrg      --help-all)
10973e51e026Smrg			opt_help_all=:
10983e51e026Smrgopt_help=': help-all'
10993e51e026Smrg			;;
11003e51e026Smrg      --mode)
11013e51e026Smrg			test $# = 0 && func_missing_arg $opt && break
11023e51e026Smrg			optarg="$1"
11033e51e026Smrg			opt_mode="$optarg"
11043e51e026Smrgcase $optarg in
11053e51e026Smrg  # Valid mode arguments:
11063e51e026Smrg  clean|compile|execute|finish|install|link|relink|uninstall) ;;
11073e51e026Smrg
11083e51e026Smrg  # Catch anything else as an error
11093e51e026Smrg  *) func_error "invalid argument for $opt"
11103e51e026Smrg     exit_cmd=exit
11113e51e026Smrg     break
11123e51e026Smrg     ;;
11133e51e026Smrgesac
11143e51e026Smrg			shift
11153e51e026Smrg			;;
11163e51e026Smrg      --no-silent|--no-quiet)
1117a7b590b3Smrg			opt_silent=false
11183e51e026Smrgfunc_append preserve_args " $opt"
1119a7b590b3Smrg			;;
11203e51e026Smrg      --no-warning|--no-warn)
11213e51e026Smrg			opt_warning=false
11223e51e026Smrgfunc_append preserve_args " $opt"
11233e51e026Smrg			;;
11243e51e026Smrg      --no-verbose)
11253e51e026Smrg			opt_verbose=false
11263e51e026Smrgfunc_append preserve_args " $opt"
11273e51e026Smrg			;;
11283e51e026Smrg      --silent|--quiet)
11293e51e026Smrg			opt_silent=:
11303e51e026Smrgfunc_append preserve_args " $opt"
11313e51e026Smrg        opt_verbose=false
11323e51e026Smrg			;;
11333e51e026Smrg      --verbose|-v)
11343e51e026Smrg			opt_verbose=:
11353e51e026Smrgfunc_append preserve_args " $opt"
11363e51e026Smrgopt_silent=false
11373e51e026Smrg			;;
11383e51e026Smrg      --tag)
11393e51e026Smrg			test $# = 0 && func_missing_arg $opt && break
11403e51e026Smrg			optarg="$1"
11413e51e026Smrg			opt_tag="$optarg"
11423e51e026Smrgfunc_append preserve_args " $opt $optarg"
11433e51e026Smrgfunc_enable_tag "$optarg"
1144a7b590b3Smrg			shift
1145a7b590b3Smrg			;;
1146a7b590b3Smrg
11473e51e026Smrg      -\?|-h)		func_usage				;;
11483e51e026Smrg      --help)		func_help				;;
11493e51e026Smrg      --version)	func_version				;;
11503e51e026Smrg
1151a7b590b3Smrg      # Separate optargs to long options:
11523e51e026Smrg      --*=*)
11533e51e026Smrg			func_split_long_opt "$opt"
11543e51e026Smrg			set dummy "$func_split_long_opt_name" "$func_split_long_opt_arg" ${1+"$@"}
1155a7b590b3Smrg			shift
1156a7b590b3Smrg			;;
1157a7b590b3Smrg
11583e51e026Smrg      # Separate non-argument short options:
11593e51e026Smrg      -\?*|-h*|-n*|-v*)
11603e51e026Smrg			func_split_short_opt "$opt"
11613e51e026Smrg			set dummy "$func_split_short_opt_name" "-$func_split_short_opt_arg" ${1+"$@"}
11623e51e026Smrg			shift
1163a7b590b3Smrg			;;
11643e51e026Smrg
11653e51e026Smrg      --)		break					;;
11663e51e026Smrg      -*)		func_fatal_help "unrecognized option \`$opt'" ;;
11673e51e026Smrg      *)		set dummy "$opt" ${1+"$@"};	shift; break  ;;
1168a7b590b3Smrg    esac
1169a7b590b3Smrg  done
1170a7b590b3Smrg
11713e51e026Smrg  # Validate options:
11723e51e026Smrg
11733e51e026Smrg  # save first non-option argument
11743e51e026Smrg  if test "$#" -gt 0; then
11753e51e026Smrg    nonopt="$opt"
11763e51e026Smrg    shift
11773e51e026Smrg  fi
11783e51e026Smrg
11793e51e026Smrg  # preserve --debug
11803e51e026Smrg  test "$opt_debug" = : || func_append preserve_args " --debug"
1181a7b590b3Smrg
1182a7b590b3Smrg  case $host in
1183a7b590b3Smrg    *cygwin* | *mingw* | *pw32* | *cegcc*)
1184a7b590b3Smrg      # don't eliminate duplications in $postdeps and $predeps
1185a7b590b3Smrg      opt_duplicate_compiler_generated_deps=:
1186943345d3Smrg      ;;
1187943345d3Smrg    *)
11883e51e026Smrg      opt_duplicate_compiler_generated_deps=$opt_preserve_dup_deps
1189a7b590b3Smrg      ;;
1190a7b590b3Smrg  esac
1191943345d3Smrg
11923e51e026Smrg  $opt_help || {
11933e51e026Smrg    # Sanity checks first:
11943e51e026Smrg    func_check_version_match
1195a7b590b3Smrg
11963e51e026Smrg    if test "$build_libtool_libs" != yes && test "$build_old_libs" != yes; then
11973e51e026Smrg      func_fatal_configuration "not configured to build any kind of library"
1198a7b590b3Smrg    fi
1199a7b590b3Smrg
12003e51e026Smrg    # Darwin sucks
12013e51e026Smrg    eval std_shrext=\"$shrext_cmds\"
1202a7b590b3Smrg
12033e51e026Smrg    # Only execute mode is allowed to have -dlopen flags.
12043e51e026Smrg    if test -n "$opt_dlopen" && test "$opt_mode" != execute; then
12053e51e026Smrg      func_error "unrecognized option \`-dlopen'"
12063e51e026Smrg      $ECHO "$help" 1>&2
12073e51e026Smrg      exit $EXIT_FAILURE
12083e51e026Smrg    fi
1209943345d3Smrg
12103e51e026Smrg    # Change the help message to a mode-specific one.
12113e51e026Smrg    generic_help="$help"
12123e51e026Smrg    help="Try \`$progname --help --mode=$opt_mode' for more information."
12133e51e026Smrg  }
1214a7b590b3Smrg
1215a7b590b3Smrg
12163e51e026Smrg  # Bail if the options were screwed
12173e51e026Smrg  $exit_cmd $EXIT_FAILURE
12183e51e026Smrg}
1219a7b590b3Smrg
1220a7b590b3Smrg
1221943345d3Smrg
1222943345d3Smrg
12233e51e026Smrg## ----------- ##
12243e51e026Smrg##    Main.    ##
12253e51e026Smrg## ----------- ##
1226943345d3Smrg
1227a7b590b3Smrg# func_lalib_p file
1228a7b590b3Smrg# True iff FILE is a libtool `.la' library or `.lo' object file.
1229a7b590b3Smrg# This function is only a basic sanity check; it will hardly flush out
1230a7b590b3Smrg# determined imposters.
1231a7b590b3Smrgfunc_lalib_p ()
1232a7b590b3Smrg{
1233a7b590b3Smrg    test -f "$1" &&
1234a7b590b3Smrg      $SED -e 4q "$1" 2>/dev/null \
1235a7b590b3Smrg        | $GREP "^# Generated by .*$PACKAGE" > /dev/null 2>&1
1236a7b590b3Smrg}
1237943345d3Smrg
1238a7b590b3Smrg# func_lalib_unsafe_p file
1239a7b590b3Smrg# True iff FILE is a libtool `.la' library or `.lo' object file.
1240a7b590b3Smrg# This function implements the same check as func_lalib_p without
1241a7b590b3Smrg# resorting to external programs.  To this end, it redirects stdin and
1242a7b590b3Smrg# closes it afterwards, without saving the original file descriptor.
1243a7b590b3Smrg# As a safety measure, use it only where a negative result would be
1244a7b590b3Smrg# fatal anyway.  Works if `file' does not exist.
1245a7b590b3Smrgfunc_lalib_unsafe_p ()
1246a7b590b3Smrg{
1247a7b590b3Smrg    lalib_p=no
1248a7b590b3Smrg    if test -f "$1" && test -r "$1" && exec 5<&0 <"$1"; then
1249a7b590b3Smrg	for lalib_p_l in 1 2 3 4
1250a7b590b3Smrg	do
1251a7b590b3Smrg	    read lalib_p_line
1252a7b590b3Smrg	    case "$lalib_p_line" in
1253a7b590b3Smrg		\#\ Generated\ by\ *$PACKAGE* ) lalib_p=yes; break;;
1254a7b590b3Smrg	    esac
1255a7b590b3Smrg	done
1256a7b590b3Smrg	exec 0<&5 5<&-
1257a7b590b3Smrg    fi
1258a7b590b3Smrg    test "$lalib_p" = yes
1259a7b590b3Smrg}
1260943345d3Smrg
1261a7b590b3Smrg# func_ltwrapper_script_p file
1262a7b590b3Smrg# True iff FILE is a libtool wrapper script
1263a7b590b3Smrg# This function is only a basic sanity check; it will hardly flush out
1264a7b590b3Smrg# determined imposters.
1265a7b590b3Smrgfunc_ltwrapper_script_p ()
1266a7b590b3Smrg{
1267a7b590b3Smrg    func_lalib_p "$1"
1268a7b590b3Smrg}
1269943345d3Smrg
1270a7b590b3Smrg# func_ltwrapper_executable_p file
1271a7b590b3Smrg# True iff FILE is a libtool wrapper executable
1272a7b590b3Smrg# This function is only a basic sanity check; it will hardly flush out
1273a7b590b3Smrg# determined imposters.
1274a7b590b3Smrgfunc_ltwrapper_executable_p ()
1275a7b590b3Smrg{
1276a7b590b3Smrg    func_ltwrapper_exec_suffix=
1277a7b590b3Smrg    case $1 in
1278a7b590b3Smrg    *.exe) ;;
1279a7b590b3Smrg    *) func_ltwrapper_exec_suffix=.exe ;;
1280a7b590b3Smrg    esac
1281a7b590b3Smrg    $GREP "$magic_exe" "$1$func_ltwrapper_exec_suffix" >/dev/null 2>&1
1282a7b590b3Smrg}
1283943345d3Smrg
1284a7b590b3Smrg# func_ltwrapper_scriptname file
1285a7b590b3Smrg# Assumes file is an ltwrapper_executable
1286a7b590b3Smrg# uses $file to determine the appropriate filename for a
1287a7b590b3Smrg# temporary ltwrapper_script.
1288a7b590b3Smrgfunc_ltwrapper_scriptname ()
1289a7b590b3Smrg{
12903e51e026Smrg    func_dirname_and_basename "$1" "" "."
12913e51e026Smrg    func_stripname '' '.exe' "$func_basename_result"
12923e51e026Smrg    func_ltwrapper_scriptname_result="$func_dirname_result/$objdir/${func_stripname_result}_ltshwrapper"
1293a7b590b3Smrg}
1294a7b590b3Smrg
1295a7b590b3Smrg# func_ltwrapper_p file
1296a7b590b3Smrg# True iff FILE is a libtool wrapper script or wrapper executable
1297a7b590b3Smrg# This function is only a basic sanity check; it will hardly flush out
1298a7b590b3Smrg# determined imposters.
1299a7b590b3Smrgfunc_ltwrapper_p ()
1300a7b590b3Smrg{
1301a7b590b3Smrg    func_ltwrapper_script_p "$1" || func_ltwrapper_executable_p "$1"
1302a7b590b3Smrg}
1303a7b590b3Smrg
1304a7b590b3Smrg
1305a7b590b3Smrg# func_execute_cmds commands fail_cmd
1306a7b590b3Smrg# Execute tilde-delimited COMMANDS.
1307a7b590b3Smrg# If FAIL_CMD is given, eval that upon failure.
1308a7b590b3Smrg# FAIL_CMD may read-access the current command in variable CMD!
1309a7b590b3Smrgfunc_execute_cmds ()
1310a7b590b3Smrg{
1311a7b590b3Smrg    $opt_debug
1312a7b590b3Smrg    save_ifs=$IFS; IFS='~'
1313a7b590b3Smrg    for cmd in $1; do
1314a7b590b3Smrg      IFS=$save_ifs
1315a7b590b3Smrg      eval cmd=\"$cmd\"
1316a7b590b3Smrg      func_show_eval "$cmd" "${2-:}"
1317a7b590b3Smrg    done
1318a7b590b3Smrg    IFS=$save_ifs
1319a7b590b3Smrg}
1320a7b590b3Smrg
1321a7b590b3Smrg
1322a7b590b3Smrg# func_source file
1323a7b590b3Smrg# Source FILE, adding directory component if necessary.
1324a7b590b3Smrg# Note that it is not necessary on cygwin/mingw to append a dot to
1325a7b590b3Smrg# FILE even if both FILE and FILE.exe exist: automatic-append-.exe
1326a7b590b3Smrg# behavior happens only for exec(3), not for open(2)!  Also, sourcing
1327a7b590b3Smrg# `FILE.' does not work on cygwin managed mounts.
1328a7b590b3Smrgfunc_source ()
1329a7b590b3Smrg{
1330a7b590b3Smrg    $opt_debug
1331a7b590b3Smrg    case $1 in
1332a7b590b3Smrg    */* | *\\*)	. "$1" ;;
1333a7b590b3Smrg    *)		. "./$1" ;;
1334a7b590b3Smrg    esac
1335a7b590b3Smrg}
1336a7b590b3Smrg
1337a7b590b3Smrg
13383e51e026Smrg# func_resolve_sysroot PATH
13393e51e026Smrg# Replace a leading = in PATH with a sysroot.  Store the result into
13403e51e026Smrg# func_resolve_sysroot_result
13413e51e026Smrgfunc_resolve_sysroot ()
13423e51e026Smrg{
13433e51e026Smrg  func_resolve_sysroot_result=$1
13443e51e026Smrg  case $func_resolve_sysroot_result in
13453e51e026Smrg  =*)
13463e51e026Smrg    func_stripname '=' '' "$func_resolve_sysroot_result"
13473e51e026Smrg    func_resolve_sysroot_result=$lt_sysroot$func_stripname_result
13483e51e026Smrg    ;;
13493e51e026Smrg  esac
13503e51e026Smrg}
13513e51e026Smrg
13523e51e026Smrg# func_replace_sysroot PATH
13533e51e026Smrg# If PATH begins with the sysroot, replace it with = and
13543e51e026Smrg# store the result into func_replace_sysroot_result.
13553e51e026Smrgfunc_replace_sysroot ()
13563e51e026Smrg{
13573e51e026Smrg  case "$lt_sysroot:$1" in
13583e51e026Smrg  ?*:"$lt_sysroot"*)
13593e51e026Smrg    func_stripname "$lt_sysroot" '' "$1"
13603e51e026Smrg    func_replace_sysroot_result="=$func_stripname_result"
13613e51e026Smrg    ;;
13623e51e026Smrg  *)
13633e51e026Smrg    # Including no sysroot.
13643e51e026Smrg    func_replace_sysroot_result=$1
13653e51e026Smrg    ;;
13663e51e026Smrg  esac
13673e51e026Smrg}
13683e51e026Smrg
1369a7b590b3Smrg# func_infer_tag arg
1370a7b590b3Smrg# Infer tagged configuration to use if any are available and
1371a7b590b3Smrg# if one wasn't chosen via the "--tag" command line option.
1372a7b590b3Smrg# Only attempt this if the compiler in the base compile
1373a7b590b3Smrg# command doesn't match the default compiler.
1374a7b590b3Smrg# arg is usually of the form 'gcc ...'
1375a7b590b3Smrgfunc_infer_tag ()
1376a7b590b3Smrg{
1377a7b590b3Smrg    $opt_debug
1378a7b590b3Smrg    if test -n "$available_tags" && test -z "$tagname"; then
1379a7b590b3Smrg      CC_quoted=
1380a7b590b3Smrg      for arg in $CC; do
13813e51e026Smrg	func_append_quoted CC_quoted "$arg"
1382a7b590b3Smrg      done
13833e51e026Smrg      CC_expanded=`func_echo_all $CC`
13843e51e026Smrg      CC_quoted_expanded=`func_echo_all $CC_quoted`
1385a7b590b3Smrg      case $@ in
1386a7b590b3Smrg      # Blanks in the command may have been stripped by the calling shell,
1387a7b590b3Smrg      # but not from the CC environment variable when configure was run.
13883e51e026Smrg      " $CC "* | "$CC "* | " $CC_expanded "* | "$CC_expanded "* | \
13893e51e026Smrg      " $CC_quoted"* | "$CC_quoted "* | " $CC_quoted_expanded "* | "$CC_quoted_expanded "*) ;;
1390a7b590b3Smrg      # Blanks at the start of $base_compile will cause this to fail
1391a7b590b3Smrg      # if we don't check for them as well.
1392a7b590b3Smrg      *)
1393a7b590b3Smrg	for z in $available_tags; do
1394a7b590b3Smrg	  if $GREP "^# ### BEGIN LIBTOOL TAG CONFIG: $z$" < "$progpath" > /dev/null; then
1395a7b590b3Smrg	    # Evaluate the configuration.
1396a7b590b3Smrg	    eval "`${SED} -n -e '/^# ### BEGIN LIBTOOL TAG CONFIG: '$z'$/,/^# ### END LIBTOOL TAG CONFIG: '$z'$/p' < $progpath`"
1397a7b590b3Smrg	    CC_quoted=
1398a7b590b3Smrg	    for arg in $CC; do
1399a7b590b3Smrg	      # Double-quote args containing other shell metacharacters.
14003e51e026Smrg	      func_append_quoted CC_quoted "$arg"
1401a7b590b3Smrg	    done
14023e51e026Smrg	    CC_expanded=`func_echo_all $CC`
14033e51e026Smrg	    CC_quoted_expanded=`func_echo_all $CC_quoted`
1404a7b590b3Smrg	    case "$@ " in
14053e51e026Smrg	    " $CC "* | "$CC "* | " $CC_expanded "* | "$CC_expanded "* | \
14063e51e026Smrg	    " $CC_quoted"* | "$CC_quoted "* | " $CC_quoted_expanded "* | "$CC_quoted_expanded "*)
1407a7b590b3Smrg	      # The compiler in the base compile command matches
1408a7b590b3Smrg	      # the one in the tagged configuration.
1409a7b590b3Smrg	      # Assume this is the tagged configuration we want.
1410a7b590b3Smrg	      tagname=$z
1411a7b590b3Smrg	      break
1412a7b590b3Smrg	      ;;
1413a7b590b3Smrg	    esac
1414a7b590b3Smrg	  fi
1415a7b590b3Smrg	done
1416a7b590b3Smrg	# If $tagname still isn't set, then no tagged configuration
1417a7b590b3Smrg	# was found and let the user know that the "--tag" command
1418a7b590b3Smrg	# line option must be used.
1419a7b590b3Smrg	if test -z "$tagname"; then
1420a7b590b3Smrg	  func_echo "unable to infer tagged configuration"
1421a7b590b3Smrg	  func_fatal_error "specify a tag with \`--tag'"
1422a7b590b3Smrg#	else
1423a7b590b3Smrg#	  func_verbose "using $tagname tagged configuration"
1424a7b590b3Smrg	fi
1425a7b590b3Smrg	;;
1426a7b590b3Smrg      esac
1427a7b590b3Smrg    fi
1428a7b590b3Smrg}
1429a7b590b3Smrg
1430a7b590b3Smrg
1431a7b590b3Smrg
1432a7b590b3Smrg# func_write_libtool_object output_name pic_name nonpic_name
1433a7b590b3Smrg# Create a libtool object file (analogous to a ".la" file),
1434a7b590b3Smrg# but don't create it if we're doing a dry run.
1435a7b590b3Smrgfunc_write_libtool_object ()
1436a7b590b3Smrg{
1437a7b590b3Smrg    write_libobj=${1}
1438a7b590b3Smrg    if test "$build_libtool_libs" = yes; then
1439a7b590b3Smrg      write_lobj=\'${2}\'
1440a7b590b3Smrg    else
1441a7b590b3Smrg      write_lobj=none
1442a7b590b3Smrg    fi
1443a7b590b3Smrg
1444a7b590b3Smrg    if test "$build_old_libs" = yes; then
1445a7b590b3Smrg      write_oldobj=\'${3}\'
1446a7b590b3Smrg    else
1447a7b590b3Smrg      write_oldobj=none
1448a7b590b3Smrg    fi
1449a7b590b3Smrg
1450a7b590b3Smrg    $opt_dry_run || {
1451a7b590b3Smrg      cat >${write_libobj}T <<EOF
1452a7b590b3Smrg# $write_libobj - a libtool object file
1453a7b590b3Smrg# Generated by $PROGRAM (GNU $PACKAGE$TIMESTAMP) $VERSION
1454a7b590b3Smrg#
1455a7b590b3Smrg# Please DO NOT delete this file!
1456a7b590b3Smrg# It is necessary for linking the library.
1457a7b590b3Smrg
1458a7b590b3Smrg# Name of the PIC object.
1459a7b590b3Smrgpic_object=$write_lobj
1460a7b590b3Smrg
1461a7b590b3Smrg# Name of the non-PIC object
1462a7b590b3Smrgnon_pic_object=$write_oldobj
1463a7b590b3Smrg
1464a7b590b3SmrgEOF
1465a7b590b3Smrg      $MV "${write_libobj}T" "${write_libobj}"
1466a7b590b3Smrg    }
1467a7b590b3Smrg}
1468a7b590b3Smrg
14693e51e026Smrg
14703e51e026Smrg##################################################
14713e51e026Smrg# FILE NAME AND PATH CONVERSION HELPER FUNCTIONS #
14723e51e026Smrg##################################################
14733e51e026Smrg
14743e51e026Smrg# func_convert_core_file_wine_to_w32 ARG
14753e51e026Smrg# Helper function used by file name conversion functions when $build is *nix,
14763e51e026Smrg# and $host is mingw, cygwin, or some other w32 environment. Relies on a
14773e51e026Smrg# correctly configured wine environment available, with the winepath program
14783e51e026Smrg# in $build's $PATH.
14793e51e026Smrg#
14803e51e026Smrg# ARG is the $build file name to be converted to w32 format.
14813e51e026Smrg# Result is available in $func_convert_core_file_wine_to_w32_result, and will
14823e51e026Smrg# be empty on error (or when ARG is empty)
14833e51e026Smrgfunc_convert_core_file_wine_to_w32 ()
14843e51e026Smrg{
14853e51e026Smrg  $opt_debug
14863e51e026Smrg  func_convert_core_file_wine_to_w32_result="$1"
14873e51e026Smrg  if test -n "$1"; then
14883e51e026Smrg    # Unfortunately, winepath does not exit with a non-zero error code, so we
14893e51e026Smrg    # are forced to check the contents of stdout. On the other hand, if the
14903e51e026Smrg    # command is not found, the shell will set an exit code of 127 and print
14913e51e026Smrg    # *an error message* to stdout. So we must check for both error code of
14923e51e026Smrg    # zero AND non-empty stdout, which explains the odd construction:
14933e51e026Smrg    func_convert_core_file_wine_to_w32_tmp=`winepath -w "$1" 2>/dev/null`
14943e51e026Smrg    if test "$?" -eq 0 && test -n "${func_convert_core_file_wine_to_w32_tmp}"; then
14953e51e026Smrg      func_convert_core_file_wine_to_w32_result=`$ECHO "$func_convert_core_file_wine_to_w32_tmp" |
14963e51e026Smrg        $SED -e "$lt_sed_naive_backslashify"`
14973e51e026Smrg    else
14983e51e026Smrg      func_convert_core_file_wine_to_w32_result=
14993e51e026Smrg    fi
15003e51e026Smrg  fi
15013e51e026Smrg}
15023e51e026Smrg# end: func_convert_core_file_wine_to_w32
15033e51e026Smrg
15043e51e026Smrg
15053e51e026Smrg# func_convert_core_path_wine_to_w32 ARG
15063e51e026Smrg# Helper function used by path conversion functions when $build is *nix, and
15073e51e026Smrg# $host is mingw, cygwin, or some other w32 environment. Relies on a correctly
15083e51e026Smrg# configured wine environment available, with the winepath program in $build's
15093e51e026Smrg# $PATH. Assumes ARG has no leading or trailing path separator characters.
15103e51e026Smrg#
15113e51e026Smrg# ARG is path to be converted from $build format to win32.
15123e51e026Smrg# Result is available in $func_convert_core_path_wine_to_w32_result.
15133e51e026Smrg# Unconvertible file (directory) names in ARG are skipped; if no directory names
15143e51e026Smrg# are convertible, then the result may be empty.
15153e51e026Smrgfunc_convert_core_path_wine_to_w32 ()
15163e51e026Smrg{
15173e51e026Smrg  $opt_debug
15183e51e026Smrg  # unfortunately, winepath doesn't convert paths, only file names
15193e51e026Smrg  func_convert_core_path_wine_to_w32_result=""
15203e51e026Smrg  if test -n "$1"; then
15213e51e026Smrg    oldIFS=$IFS
15223e51e026Smrg    IFS=:
15233e51e026Smrg    for func_convert_core_path_wine_to_w32_f in $1; do
15243e51e026Smrg      IFS=$oldIFS
15253e51e026Smrg      func_convert_core_file_wine_to_w32 "$func_convert_core_path_wine_to_w32_f"
15263e51e026Smrg      if test -n "$func_convert_core_file_wine_to_w32_result" ; then
15273e51e026Smrg        if test -z "$func_convert_core_path_wine_to_w32_result"; then
15283e51e026Smrg          func_convert_core_path_wine_to_w32_result="$func_convert_core_file_wine_to_w32_result"
15293e51e026Smrg        else
15303e51e026Smrg          func_append func_convert_core_path_wine_to_w32_result ";$func_convert_core_file_wine_to_w32_result"
15313e51e026Smrg        fi
15323e51e026Smrg      fi
15333e51e026Smrg    done
15343e51e026Smrg    IFS=$oldIFS
15353e51e026Smrg  fi
15363e51e026Smrg}
15373e51e026Smrg# end: func_convert_core_path_wine_to_w32
15383e51e026Smrg
15393e51e026Smrg
15403e51e026Smrg# func_cygpath ARGS...
15413e51e026Smrg# Wrapper around calling the cygpath program via LT_CYGPATH. This is used when
15423e51e026Smrg# when (1) $build is *nix and Cygwin is hosted via a wine environment; or (2)
15433e51e026Smrg# $build is MSYS and $host is Cygwin, or (3) $build is Cygwin. In case (1) or
15443e51e026Smrg# (2), returns the Cygwin file name or path in func_cygpath_result (input
15453e51e026Smrg# file name or path is assumed to be in w32 format, as previously converted
15463e51e026Smrg# from $build's *nix or MSYS format). In case (3), returns the w32 file name
15473e51e026Smrg# or path in func_cygpath_result (input file name or path is assumed to be in
15483e51e026Smrg# Cygwin format). Returns an empty string on error.
15493e51e026Smrg#
15503e51e026Smrg# ARGS are passed to cygpath, with the last one being the file name or path to
15513e51e026Smrg# be converted.
15523e51e026Smrg#
15533e51e026Smrg# Specify the absolute *nix (or w32) name to cygpath in the LT_CYGPATH
15543e51e026Smrg# environment variable; do not put it in $PATH.
15553e51e026Smrgfunc_cygpath ()
15563e51e026Smrg{
15573e51e026Smrg  $opt_debug
15583e51e026Smrg  if test -n "$LT_CYGPATH" && test -f "$LT_CYGPATH"; then
15593e51e026Smrg    func_cygpath_result=`$LT_CYGPATH "$@" 2>/dev/null`
15603e51e026Smrg    if test "$?" -ne 0; then
15613e51e026Smrg      # on failure, ensure result is empty
15623e51e026Smrg      func_cygpath_result=
15633e51e026Smrg    fi
15643e51e026Smrg  else
15653e51e026Smrg    func_cygpath_result=
15663e51e026Smrg    func_error "LT_CYGPATH is empty or specifies non-existent file: \`$LT_CYGPATH'"
15673e51e026Smrg  fi
15683e51e026Smrg}
15693e51e026Smrg#end: func_cygpath
15703e51e026Smrg
15713e51e026Smrg
15723e51e026Smrg# func_convert_core_msys_to_w32 ARG
15733e51e026Smrg# Convert file name or path ARG from MSYS format to w32 format.  Return
15743e51e026Smrg# result in func_convert_core_msys_to_w32_result.
15753e51e026Smrgfunc_convert_core_msys_to_w32 ()
15763e51e026Smrg{
15773e51e026Smrg  $opt_debug
15783e51e026Smrg  # awkward: cmd appends spaces to result
15793e51e026Smrg  func_convert_core_msys_to_w32_result=`( cmd //c echo "$1" ) 2>/dev/null |
15803e51e026Smrg    $SED -e 's/[ ]*$//' -e "$lt_sed_naive_backslashify"`
15813e51e026Smrg}
15823e51e026Smrg#end: func_convert_core_msys_to_w32
15833e51e026Smrg
15843e51e026Smrg
15853e51e026Smrg# func_convert_file_check ARG1 ARG2
15863e51e026Smrg# Verify that ARG1 (a file name in $build format) was converted to $host
15873e51e026Smrg# format in ARG2. Otherwise, emit an error message, but continue (resetting
15883e51e026Smrg# func_to_host_file_result to ARG1).
15893e51e026Smrgfunc_convert_file_check ()
15903e51e026Smrg{
15913e51e026Smrg  $opt_debug
15923e51e026Smrg  if test -z "$2" && test -n "$1" ; then
15933e51e026Smrg    func_error "Could not determine host file name corresponding to"
15943e51e026Smrg    func_error "  \`$1'"
15953e51e026Smrg    func_error "Continuing, but uninstalled executables may not work."
15963e51e026Smrg    # Fallback:
15973e51e026Smrg    func_to_host_file_result="$1"
15983e51e026Smrg  fi
15993e51e026Smrg}
16003e51e026Smrg# end func_convert_file_check
16013e51e026Smrg
16023e51e026Smrg
16033e51e026Smrg# func_convert_path_check FROM_PATHSEP TO_PATHSEP FROM_PATH TO_PATH
16043e51e026Smrg# Verify that FROM_PATH (a path in $build format) was converted to $host
16053e51e026Smrg# format in TO_PATH. Otherwise, emit an error message, but continue, resetting
16063e51e026Smrg# func_to_host_file_result to a simplistic fallback value (see below).
16073e51e026Smrgfunc_convert_path_check ()
16083e51e026Smrg{
16093e51e026Smrg  $opt_debug
16103e51e026Smrg  if test -z "$4" && test -n "$3"; then
16113e51e026Smrg    func_error "Could not determine the host path corresponding to"
16123e51e026Smrg    func_error "  \`$3'"
16133e51e026Smrg    func_error "Continuing, but uninstalled executables may not work."
16143e51e026Smrg    # Fallback.  This is a deliberately simplistic "conversion" and
16153e51e026Smrg    # should not be "improved".  See libtool.info.
16163e51e026Smrg    if test "x$1" != "x$2"; then
16173e51e026Smrg      lt_replace_pathsep_chars="s|$1|$2|g"
16183e51e026Smrg      func_to_host_path_result=`echo "$3" |
16193e51e026Smrg        $SED -e "$lt_replace_pathsep_chars"`
16203e51e026Smrg    else
16213e51e026Smrg      func_to_host_path_result="$3"
16223e51e026Smrg    fi
16233e51e026Smrg  fi
16243e51e026Smrg}
16253e51e026Smrg# end func_convert_path_check
16263e51e026Smrg
16273e51e026Smrg
16283e51e026Smrg# func_convert_path_front_back_pathsep FRONTPAT BACKPAT REPL ORIG
16293e51e026Smrg# Modifies func_to_host_path_result by prepending REPL if ORIG matches FRONTPAT
16303e51e026Smrg# and appending REPL if ORIG matches BACKPAT.
16313e51e026Smrgfunc_convert_path_front_back_pathsep ()
16323e51e026Smrg{
16333e51e026Smrg  $opt_debug
16343e51e026Smrg  case $4 in
16353e51e026Smrg  $1 ) func_to_host_path_result="$3$func_to_host_path_result"
16363e51e026Smrg    ;;
16373e51e026Smrg  esac
16383e51e026Smrg  case $4 in
16393e51e026Smrg  $2 ) func_append func_to_host_path_result "$3"
16403e51e026Smrg    ;;
16413e51e026Smrg  esac
16423e51e026Smrg}
16433e51e026Smrg# end func_convert_path_front_back_pathsep
16443e51e026Smrg
16453e51e026Smrg
16463e51e026Smrg##################################################
16473e51e026Smrg# $build to $host FILE NAME CONVERSION FUNCTIONS #
16483e51e026Smrg##################################################
16493e51e026Smrg# invoked via `$to_host_file_cmd ARG'
16503e51e026Smrg#
16513e51e026Smrg# In each case, ARG is the path to be converted from $build to $host format.
16523e51e026Smrg# Result will be available in $func_to_host_file_result.
16533e51e026Smrg
16543e51e026Smrg
16553e51e026Smrg# func_to_host_file ARG
16563e51e026Smrg# Converts the file name ARG from $build format to $host format. Return result
16573e51e026Smrg# in func_to_host_file_result.
16583e51e026Smrgfunc_to_host_file ()
16593e51e026Smrg{
16603e51e026Smrg  $opt_debug
16613e51e026Smrg  $to_host_file_cmd "$1"
16623e51e026Smrg}
16633e51e026Smrg# end func_to_host_file
16643e51e026Smrg
16653e51e026Smrg
16663e51e026Smrg# func_to_tool_file ARG LAZY
16673e51e026Smrg# converts the file name ARG from $build format to toolchain format. Return
16683e51e026Smrg# result in func_to_tool_file_result.  If the conversion in use is listed
16693e51e026Smrg# in (the comma separated) LAZY, no conversion takes place.
16703e51e026Smrgfunc_to_tool_file ()
16713e51e026Smrg{
16723e51e026Smrg  $opt_debug
16733e51e026Smrg  case ,$2, in
16743e51e026Smrg    *,"$to_tool_file_cmd",*)
16753e51e026Smrg      func_to_tool_file_result=$1
16763e51e026Smrg      ;;
16773e51e026Smrg    *)
16783e51e026Smrg      $to_tool_file_cmd "$1"
16793e51e026Smrg      func_to_tool_file_result=$func_to_host_file_result
16803e51e026Smrg      ;;
16813e51e026Smrg  esac
16823e51e026Smrg}
16833e51e026Smrg# end func_to_tool_file
16843e51e026Smrg
16853e51e026Smrg
16863e51e026Smrg# func_convert_file_noop ARG
16873e51e026Smrg# Copy ARG to func_to_host_file_result.
16883e51e026Smrgfunc_convert_file_noop ()
16893e51e026Smrg{
16903e51e026Smrg  func_to_host_file_result="$1"
16913e51e026Smrg}
16923e51e026Smrg# end func_convert_file_noop
16933e51e026Smrg
16943e51e026Smrg
16953e51e026Smrg# func_convert_file_msys_to_w32 ARG
16963e51e026Smrg# Convert file name ARG from (mingw) MSYS to (mingw) w32 format; automatic
16973e51e026Smrg# conversion to w32 is not available inside the cwrapper.  Returns result in
16983e51e026Smrg# func_to_host_file_result.
16993e51e026Smrgfunc_convert_file_msys_to_w32 ()
17003e51e026Smrg{
17013e51e026Smrg  $opt_debug
17023e51e026Smrg  func_to_host_file_result="$1"
17033e51e026Smrg  if test -n "$1"; then
17043e51e026Smrg    func_convert_core_msys_to_w32 "$1"
17053e51e026Smrg    func_to_host_file_result="$func_convert_core_msys_to_w32_result"
17063e51e026Smrg  fi
17073e51e026Smrg  func_convert_file_check "$1" "$func_to_host_file_result"
17083e51e026Smrg}
17093e51e026Smrg# end func_convert_file_msys_to_w32
17103e51e026Smrg
17113e51e026Smrg
17123e51e026Smrg# func_convert_file_cygwin_to_w32 ARG
17133e51e026Smrg# Convert file name ARG from Cygwin to w32 format.  Returns result in
17143e51e026Smrg# func_to_host_file_result.
17153e51e026Smrgfunc_convert_file_cygwin_to_w32 ()
17163e51e026Smrg{
17173e51e026Smrg  $opt_debug
17183e51e026Smrg  func_to_host_file_result="$1"
17193e51e026Smrg  if test -n "$1"; then
17203e51e026Smrg    # because $build is cygwin, we call "the" cygpath in $PATH; no need to use
17213e51e026Smrg    # LT_CYGPATH in this case.
17223e51e026Smrg    func_to_host_file_result=`cygpath -m "$1"`
17233e51e026Smrg  fi
17243e51e026Smrg  func_convert_file_check "$1" "$func_to_host_file_result"
17253e51e026Smrg}
17263e51e026Smrg# end func_convert_file_cygwin_to_w32
17273e51e026Smrg
17283e51e026Smrg
17293e51e026Smrg# func_convert_file_nix_to_w32 ARG
17303e51e026Smrg# Convert file name ARG from *nix to w32 format.  Requires a wine environment
17313e51e026Smrg# and a working winepath. Returns result in func_to_host_file_result.
17323e51e026Smrgfunc_convert_file_nix_to_w32 ()
17333e51e026Smrg{
17343e51e026Smrg  $opt_debug
17353e51e026Smrg  func_to_host_file_result="$1"
17363e51e026Smrg  if test -n "$1"; then
17373e51e026Smrg    func_convert_core_file_wine_to_w32 "$1"
17383e51e026Smrg    func_to_host_file_result="$func_convert_core_file_wine_to_w32_result"
17393e51e026Smrg  fi
17403e51e026Smrg  func_convert_file_check "$1" "$func_to_host_file_result"
17413e51e026Smrg}
17423e51e026Smrg# end func_convert_file_nix_to_w32
17433e51e026Smrg
17443e51e026Smrg
17453e51e026Smrg# func_convert_file_msys_to_cygwin ARG
17463e51e026Smrg# Convert file name ARG from MSYS to Cygwin format.  Requires LT_CYGPATH set.
17473e51e026Smrg# Returns result in func_to_host_file_result.
17483e51e026Smrgfunc_convert_file_msys_to_cygwin ()
17493e51e026Smrg{
17503e51e026Smrg  $opt_debug
17513e51e026Smrg  func_to_host_file_result="$1"
17523e51e026Smrg  if test -n "$1"; then
17533e51e026Smrg    func_convert_core_msys_to_w32 "$1"
17543e51e026Smrg    func_cygpath -u "$func_convert_core_msys_to_w32_result"
17553e51e026Smrg    func_to_host_file_result="$func_cygpath_result"
17563e51e026Smrg  fi
17573e51e026Smrg  func_convert_file_check "$1" "$func_to_host_file_result"
17583e51e026Smrg}
17593e51e026Smrg# end func_convert_file_msys_to_cygwin
17603e51e026Smrg
17613e51e026Smrg
17623e51e026Smrg# func_convert_file_nix_to_cygwin ARG
17633e51e026Smrg# Convert file name ARG from *nix to Cygwin format.  Requires Cygwin installed
17643e51e026Smrg# in a wine environment, working winepath, and LT_CYGPATH set.  Returns result
17653e51e026Smrg# in func_to_host_file_result.
17663e51e026Smrgfunc_convert_file_nix_to_cygwin ()
17673e51e026Smrg{
17683e51e026Smrg  $opt_debug
17693e51e026Smrg  func_to_host_file_result="$1"
17703e51e026Smrg  if test -n "$1"; then
17713e51e026Smrg    # convert from *nix to w32, then use cygpath to convert from w32 to cygwin.
17723e51e026Smrg    func_convert_core_file_wine_to_w32 "$1"
17733e51e026Smrg    func_cygpath -u "$func_convert_core_file_wine_to_w32_result"
17743e51e026Smrg    func_to_host_file_result="$func_cygpath_result"
17753e51e026Smrg  fi
17763e51e026Smrg  func_convert_file_check "$1" "$func_to_host_file_result"
17773e51e026Smrg}
17783e51e026Smrg# end func_convert_file_nix_to_cygwin
17793e51e026Smrg
17803e51e026Smrg
17813e51e026Smrg#############################################
17823e51e026Smrg# $build to $host PATH CONVERSION FUNCTIONS #
17833e51e026Smrg#############################################
17843e51e026Smrg# invoked via `$to_host_path_cmd ARG'
17853e51e026Smrg#
17863e51e026Smrg# In each case, ARG is the path to be converted from $build to $host format.
17873e51e026Smrg# The result will be available in $func_to_host_path_result.
17883e51e026Smrg#
17893e51e026Smrg# Path separators are also converted from $build format to $host format.  If
17903e51e026Smrg# ARG begins or ends with a path separator character, it is preserved (but
17913e51e026Smrg# converted to $host format) on output.
17923e51e026Smrg#
17933e51e026Smrg# All path conversion functions are named using the following convention:
17943e51e026Smrg#   file name conversion function    : func_convert_file_X_to_Y ()
17953e51e026Smrg#   path conversion function         : func_convert_path_X_to_Y ()
17963e51e026Smrg# where, for any given $build/$host combination the 'X_to_Y' value is the
17973e51e026Smrg# same.  If conversion functions are added for new $build/$host combinations,
17983e51e026Smrg# the two new functions must follow this pattern, or func_init_to_host_path_cmd
17993e51e026Smrg# will break.
18003e51e026Smrg
18013e51e026Smrg
18023e51e026Smrg# func_init_to_host_path_cmd
18033e51e026Smrg# Ensures that function "pointer" variable $to_host_path_cmd is set to the
18043e51e026Smrg# appropriate value, based on the value of $to_host_file_cmd.
18053e51e026Smrgto_host_path_cmd=
18063e51e026Smrgfunc_init_to_host_path_cmd ()
18073e51e026Smrg{
18083e51e026Smrg  $opt_debug
18093e51e026Smrg  if test -z "$to_host_path_cmd"; then
18103e51e026Smrg    func_stripname 'func_convert_file_' '' "$to_host_file_cmd"
18113e51e026Smrg    to_host_path_cmd="func_convert_path_${func_stripname_result}"
18123e51e026Smrg  fi
18133e51e026Smrg}
18143e51e026Smrg
18153e51e026Smrg
18163e51e026Smrg# func_to_host_path ARG
18173e51e026Smrg# Converts the path ARG from $build format to $host format. Return result
18183e51e026Smrg# in func_to_host_path_result.
18193e51e026Smrgfunc_to_host_path ()
18203e51e026Smrg{
18213e51e026Smrg  $opt_debug
18223e51e026Smrg  func_init_to_host_path_cmd
18233e51e026Smrg  $to_host_path_cmd "$1"
18243e51e026Smrg}
18253e51e026Smrg# end func_to_host_path
18263e51e026Smrg
18273e51e026Smrg
18283e51e026Smrg# func_convert_path_noop ARG
18293e51e026Smrg# Copy ARG to func_to_host_path_result.
18303e51e026Smrgfunc_convert_path_noop ()
18313e51e026Smrg{
18323e51e026Smrg  func_to_host_path_result="$1"
18333e51e026Smrg}
18343e51e026Smrg# end func_convert_path_noop
18353e51e026Smrg
18363e51e026Smrg
18373e51e026Smrg# func_convert_path_msys_to_w32 ARG
18383e51e026Smrg# Convert path ARG from (mingw) MSYS to (mingw) w32 format; automatic
18393e51e026Smrg# conversion to w32 is not available inside the cwrapper.  Returns result in
18403e51e026Smrg# func_to_host_path_result.
18413e51e026Smrgfunc_convert_path_msys_to_w32 ()
18423e51e026Smrg{
18433e51e026Smrg  $opt_debug
18443e51e026Smrg  func_to_host_path_result="$1"
18453e51e026Smrg  if test -n "$1"; then
18463e51e026Smrg    # Remove leading and trailing path separator characters from ARG.  MSYS
18473e51e026Smrg    # behavior is inconsistent here; cygpath turns them into '.;' and ';.';
18483e51e026Smrg    # and winepath ignores them completely.
18493e51e026Smrg    func_stripname : : "$1"
18503e51e026Smrg    func_to_host_path_tmp1=$func_stripname_result
18513e51e026Smrg    func_convert_core_msys_to_w32 "$func_to_host_path_tmp1"
18523e51e026Smrg    func_to_host_path_result="$func_convert_core_msys_to_w32_result"
18533e51e026Smrg    func_convert_path_check : ";" \
18543e51e026Smrg      "$func_to_host_path_tmp1" "$func_to_host_path_result"
18553e51e026Smrg    func_convert_path_front_back_pathsep ":*" "*:" ";" "$1"
18563e51e026Smrg  fi
18573e51e026Smrg}
18583e51e026Smrg# end func_convert_path_msys_to_w32
18593e51e026Smrg
18603e51e026Smrg
18613e51e026Smrg# func_convert_path_cygwin_to_w32 ARG
18623e51e026Smrg# Convert path ARG from Cygwin to w32 format.  Returns result in
18633e51e026Smrg# func_to_host_file_result.
18643e51e026Smrgfunc_convert_path_cygwin_to_w32 ()
18653e51e026Smrg{
18663e51e026Smrg  $opt_debug
18673e51e026Smrg  func_to_host_path_result="$1"
18683e51e026Smrg  if test -n "$1"; then
18693e51e026Smrg    # See func_convert_path_msys_to_w32:
18703e51e026Smrg    func_stripname : : "$1"
18713e51e026Smrg    func_to_host_path_tmp1=$func_stripname_result
18723e51e026Smrg    func_to_host_path_result=`cygpath -m -p "$func_to_host_path_tmp1"`
18733e51e026Smrg    func_convert_path_check : ";" \
18743e51e026Smrg      "$func_to_host_path_tmp1" "$func_to_host_path_result"
18753e51e026Smrg    func_convert_path_front_back_pathsep ":*" "*:" ";" "$1"
18763e51e026Smrg  fi
18773e51e026Smrg}
18783e51e026Smrg# end func_convert_path_cygwin_to_w32
18793e51e026Smrg
18803e51e026Smrg
18813e51e026Smrg# func_convert_path_nix_to_w32 ARG
18823e51e026Smrg# Convert path ARG from *nix to w32 format.  Requires a wine environment and
18833e51e026Smrg# a working winepath.  Returns result in func_to_host_file_result.
18843e51e026Smrgfunc_convert_path_nix_to_w32 ()
18853e51e026Smrg{
18863e51e026Smrg  $opt_debug
18873e51e026Smrg  func_to_host_path_result="$1"
18883e51e026Smrg  if test -n "$1"; then
18893e51e026Smrg    # See func_convert_path_msys_to_w32:
18903e51e026Smrg    func_stripname : : "$1"
18913e51e026Smrg    func_to_host_path_tmp1=$func_stripname_result
18923e51e026Smrg    func_convert_core_path_wine_to_w32 "$func_to_host_path_tmp1"
18933e51e026Smrg    func_to_host_path_result="$func_convert_core_path_wine_to_w32_result"
18943e51e026Smrg    func_convert_path_check : ";" \
18953e51e026Smrg      "$func_to_host_path_tmp1" "$func_to_host_path_result"
18963e51e026Smrg    func_convert_path_front_back_pathsep ":*" "*:" ";" "$1"
18973e51e026Smrg  fi
18983e51e026Smrg}
18993e51e026Smrg# end func_convert_path_nix_to_w32
19003e51e026Smrg
19013e51e026Smrg
19023e51e026Smrg# func_convert_path_msys_to_cygwin ARG
19033e51e026Smrg# Convert path ARG from MSYS to Cygwin format.  Requires LT_CYGPATH set.
19043e51e026Smrg# Returns result in func_to_host_file_result.
19053e51e026Smrgfunc_convert_path_msys_to_cygwin ()
19063e51e026Smrg{
19073e51e026Smrg  $opt_debug
19083e51e026Smrg  func_to_host_path_result="$1"
19093e51e026Smrg  if test -n "$1"; then
19103e51e026Smrg    # See func_convert_path_msys_to_w32:
19113e51e026Smrg    func_stripname : : "$1"
19123e51e026Smrg    func_to_host_path_tmp1=$func_stripname_result
19133e51e026Smrg    func_convert_core_msys_to_w32 "$func_to_host_path_tmp1"
19143e51e026Smrg    func_cygpath -u -p "$func_convert_core_msys_to_w32_result"
19153e51e026Smrg    func_to_host_path_result="$func_cygpath_result"
19163e51e026Smrg    func_convert_path_check : : \
19173e51e026Smrg      "$func_to_host_path_tmp1" "$func_to_host_path_result"
19183e51e026Smrg    func_convert_path_front_back_pathsep ":*" "*:" : "$1"
19193e51e026Smrg  fi
19203e51e026Smrg}
19213e51e026Smrg# end func_convert_path_msys_to_cygwin
19223e51e026Smrg
19233e51e026Smrg
19243e51e026Smrg# func_convert_path_nix_to_cygwin ARG
19253e51e026Smrg# Convert path ARG from *nix to Cygwin format.  Requires Cygwin installed in a
19263e51e026Smrg# a wine environment, working winepath, and LT_CYGPATH set.  Returns result in
19273e51e026Smrg# func_to_host_file_result.
19283e51e026Smrgfunc_convert_path_nix_to_cygwin ()
19293e51e026Smrg{
19303e51e026Smrg  $opt_debug
19313e51e026Smrg  func_to_host_path_result="$1"
19323e51e026Smrg  if test -n "$1"; then
19333e51e026Smrg    # Remove leading and trailing path separator characters from
19343e51e026Smrg    # ARG. msys behavior is inconsistent here, cygpath turns them
19353e51e026Smrg    # into '.;' and ';.', and winepath ignores them completely.
19363e51e026Smrg    func_stripname : : "$1"
19373e51e026Smrg    func_to_host_path_tmp1=$func_stripname_result
19383e51e026Smrg    func_convert_core_path_wine_to_w32 "$func_to_host_path_tmp1"
19393e51e026Smrg    func_cygpath -u -p "$func_convert_core_path_wine_to_w32_result"
19403e51e026Smrg    func_to_host_path_result="$func_cygpath_result"
19413e51e026Smrg    func_convert_path_check : : \
19423e51e026Smrg      "$func_to_host_path_tmp1" "$func_to_host_path_result"
19433e51e026Smrg    func_convert_path_front_back_pathsep ":*" "*:" : "$1"
19443e51e026Smrg  fi
19453e51e026Smrg}
19463e51e026Smrg# end func_convert_path_nix_to_cygwin
19473e51e026Smrg
19483e51e026Smrg
1949a7b590b3Smrg# func_mode_compile arg...
1950a7b590b3Smrgfunc_mode_compile ()
1951a7b590b3Smrg{
1952a7b590b3Smrg    $opt_debug
1953a7b590b3Smrg    # Get the compilation command and the source file.
1954a7b590b3Smrg    base_compile=
1955a7b590b3Smrg    srcfile="$nonopt"  #  always keep a non-empty value in "srcfile"
1956a7b590b3Smrg    suppress_opt=yes
1957a7b590b3Smrg    suppress_output=
1958a7b590b3Smrg    arg_mode=normal
1959a7b590b3Smrg    libobj=
1960a7b590b3Smrg    later=
1961a7b590b3Smrg    pie_flag=
1962a7b590b3Smrg
1963a7b590b3Smrg    for arg
1964a7b590b3Smrg    do
1965a7b590b3Smrg      case $arg_mode in
1966a7b590b3Smrg      arg  )
1967a7b590b3Smrg	# do not "continue".  Instead, add this to base_compile
1968a7b590b3Smrg	lastarg="$arg"
1969a7b590b3Smrg	arg_mode=normal
1970a7b590b3Smrg	;;
1971a7b590b3Smrg
1972a7b590b3Smrg      target )
1973a7b590b3Smrg	libobj="$arg"
1974a7b590b3Smrg	arg_mode=normal
1975a7b590b3Smrg	continue
1976a7b590b3Smrg	;;
1977a7b590b3Smrg
1978a7b590b3Smrg      normal )
1979a7b590b3Smrg	# Accept any command-line options.
1980a7b590b3Smrg	case $arg in
1981a7b590b3Smrg	-o)
1982a7b590b3Smrg	  test -n "$libobj" && \
1983a7b590b3Smrg	    func_fatal_error "you cannot specify \`-o' more than once"
1984a7b590b3Smrg	  arg_mode=target
1985a7b590b3Smrg	  continue
1986a7b590b3Smrg	  ;;
1987a7b590b3Smrg
1988a7b590b3Smrg	-pie | -fpie | -fPIE)
19893e51e026Smrg          func_append pie_flag " $arg"
1990a7b590b3Smrg	  continue
1991a7b590b3Smrg	  ;;
1992a7b590b3Smrg
1993a7b590b3Smrg	-shared | -static | -prefer-pic | -prefer-non-pic)
19943e51e026Smrg	  func_append later " $arg"
1995a7b590b3Smrg	  continue
1996a7b590b3Smrg	  ;;
1997a7b590b3Smrg
1998a7b590b3Smrg	-no-suppress)
1999943345d3Smrg	  suppress_opt=no
2000943345d3Smrg	  continue
2001943345d3Smrg	  ;;
2002943345d3Smrg
2003943345d3Smrg	-Xcompiler)
2004943345d3Smrg	  arg_mode=arg  #  the next one goes into the "base_compile" arg list
2005943345d3Smrg	  continue      #  The current "srcfile" will either be retained or
2006943345d3Smrg	  ;;            #  replaced later.  I would guess that would be a bug.
2007943345d3Smrg
2008943345d3Smrg	-Wc,*)
2009a7b590b3Smrg	  func_stripname '-Wc,' '' "$arg"
2010a7b590b3Smrg	  args=$func_stripname_result
2011943345d3Smrg	  lastarg=
2012943345d3Smrg	  save_ifs="$IFS"; IFS=','
2013a7b590b3Smrg	  for arg in $args; do
2014943345d3Smrg	    IFS="$save_ifs"
20153e51e026Smrg	    func_append_quoted lastarg "$arg"
2016943345d3Smrg	  done
2017943345d3Smrg	  IFS="$save_ifs"
2018a7b590b3Smrg	  func_stripname ' ' '' "$lastarg"
2019a7b590b3Smrg	  lastarg=$func_stripname_result
2020943345d3Smrg
2021943345d3Smrg	  # Add the arguments to base_compile.
20223e51e026Smrg	  func_append base_compile " $lastarg"
2023943345d3Smrg	  continue
2024943345d3Smrg	  ;;
2025943345d3Smrg
2026a7b590b3Smrg	*)
2027943345d3Smrg	  # Accept the current argument as the source file.
2028943345d3Smrg	  # The previous "srcfile" becomes the current argument.
2029943345d3Smrg	  #
2030943345d3Smrg	  lastarg="$srcfile"
2031943345d3Smrg	  srcfile="$arg"
2032943345d3Smrg	  ;;
2033943345d3Smrg	esac  #  case $arg
2034943345d3Smrg	;;
2035943345d3Smrg      esac    #  case $arg_mode
2036943345d3Smrg
2037943345d3Smrg      # Aesthetically quote the previous argument.
20383e51e026Smrg      func_append_quoted base_compile "$lastarg"
2039943345d3Smrg    done # for arg
2040943345d3Smrg
2041943345d3Smrg    case $arg_mode in
2042943345d3Smrg    arg)
2043a7b590b3Smrg      func_fatal_error "you must specify an argument for -Xcompile"
2044943345d3Smrg      ;;
2045943345d3Smrg    target)
2046a7b590b3Smrg      func_fatal_error "you must specify a target with \`-o'"
2047943345d3Smrg      ;;
2048943345d3Smrg    *)
2049943345d3Smrg      # Get the name of the library object.
2050a7b590b3Smrg      test -z "$libobj" && {
2051a7b590b3Smrg	func_basename "$srcfile"
2052a7b590b3Smrg	libobj="$func_basename_result"
2053a7b590b3Smrg      }
2054943345d3Smrg      ;;
2055943345d3Smrg    esac
2056943345d3Smrg
2057943345d3Smrg    # Recognize several different file suffixes.
2058943345d3Smrg    # If the user specifies -o file.o, it is replaced with file.lo
2059943345d3Smrg    case $libobj in
2060a7b590b3Smrg    *.[cCFSifmso] | \
2061a7b590b3Smrg    *.ada | *.adb | *.ads | *.asm | \
2062a7b590b3Smrg    *.c++ | *.cc | *.ii | *.class | *.cpp | *.cxx | \
20633e51e026Smrg    *.[fF][09]? | *.for | *.java | *.go | *.obj | *.sx | *.cu | *.cup)
2064a7b590b3Smrg      func_xform "$libobj"
2065a7b590b3Smrg      libobj=$func_xform_result
2066a7b590b3Smrg      ;;
2067943345d3Smrg    esac
2068943345d3Smrg
2069943345d3Smrg    case $libobj in
2070a7b590b3Smrg    *.lo) func_lo2o "$libobj"; obj=$func_lo2o_result ;;
2071943345d3Smrg    *)
2072a7b590b3Smrg      func_fatal_error "cannot determine name of library object from \`$libobj'"
2073943345d3Smrg      ;;
2074943345d3Smrg    esac
2075943345d3Smrg
2076943345d3Smrg    func_infer_tag $base_compile
2077943345d3Smrg
2078943345d3Smrg    for arg in $later; do
2079943345d3Smrg      case $arg in
2080a7b590b3Smrg      -shared)
2081a7b590b3Smrg	test "$build_libtool_libs" != yes && \
2082a7b590b3Smrg	  func_fatal_configuration "can not build a shared library"
2083a7b590b3Smrg	build_old_libs=no
2084a7b590b3Smrg	continue
2085a7b590b3Smrg	;;
2086a7b590b3Smrg
2087943345d3Smrg      -static)
2088a7b590b3Smrg	build_libtool_libs=no
2089943345d3Smrg	build_old_libs=yes
2090943345d3Smrg	continue
2091943345d3Smrg	;;
2092943345d3Smrg
2093943345d3Smrg      -prefer-pic)
2094943345d3Smrg	pic_mode=yes
2095943345d3Smrg	continue
2096943345d3Smrg	;;
2097943345d3Smrg
2098943345d3Smrg      -prefer-non-pic)
2099943345d3Smrg	pic_mode=no
2100943345d3Smrg	continue
2101943345d3Smrg	;;
2102943345d3Smrg      esac
2103943345d3Smrg    done
2104943345d3Smrg
2105a7b590b3Smrg    func_quote_for_eval "$libobj"
2106a7b590b3Smrg    test "X$libobj" != "X$func_quote_for_eval_result" \
2107a7b590b3Smrg      && $ECHO "X$libobj" | $GREP '[]~#^*{};<>?"'"'"'	 &()|`$[]' \
2108a7b590b3Smrg      && func_warning "libobj name \`$libobj' may not contain shell special characters."
2109a7b590b3Smrg    func_dirname_and_basename "$obj" "/" ""
2110a7b590b3Smrg    objname="$func_basename_result"
2111a7b590b3Smrg    xdir="$func_dirname_result"
2112943345d3Smrg    lobj=${xdir}$objdir/$objname
2113943345d3Smrg
2114a7b590b3Smrg    test -z "$base_compile" && \
2115a7b590b3Smrg      func_fatal_help "you must specify a compilation command"
2116943345d3Smrg
2117943345d3Smrg    # Delete any leftover library objects.
2118943345d3Smrg    if test "$build_old_libs" = yes; then
2119943345d3Smrg      removelist="$obj $lobj $libobj ${libobj}T"
2120943345d3Smrg    else
2121943345d3Smrg      removelist="$lobj $libobj ${libobj}T"
2122943345d3Smrg    fi
2123943345d3Smrg
2124943345d3Smrg    # On Cygwin there's no "real" PIC flag so we must build both object types
2125943345d3Smrg    case $host_os in
2126a7b590b3Smrg    cygwin* | mingw* | pw32* | os2* | cegcc*)
2127943345d3Smrg      pic_mode=default
2128943345d3Smrg      ;;
2129943345d3Smrg    esac
2130943345d3Smrg    if test "$pic_mode" = no && test "$deplibs_check_method" != pass_all; then
2131943345d3Smrg      # non-PIC code in shared libraries is not supported
2132943345d3Smrg      pic_mode=default
2133943345d3Smrg    fi
2134943345d3Smrg
2135943345d3Smrg    # Calculate the filename of the output object if compiler does
2136943345d3Smrg    # not support -o with -c
2137943345d3Smrg    if test "$compiler_c_o" = no; then
21383e51e026Smrg      output_obj=`$ECHO "$srcfile" | $SED 's%^.*/%%; s%\.[^.]*$%%'`.${objext}
2139943345d3Smrg      lockfile="$output_obj.lock"
2140943345d3Smrg    else
2141943345d3Smrg      output_obj=
2142943345d3Smrg      need_locks=no
2143943345d3Smrg      lockfile=
2144943345d3Smrg    fi
2145943345d3Smrg
2146943345d3Smrg    # Lock this critical section if it is needed
2147943345d3Smrg    # We use this script file to make the link, it avoids creating a new file
2148943345d3Smrg    if test "$need_locks" = yes; then
2149a7b590b3Smrg      until $opt_dry_run || ln "$progpath" "$lockfile" 2>/dev/null; do
2150a7b590b3Smrg	func_echo "Waiting for $lockfile to be removed"
2151943345d3Smrg	sleep 2
2152943345d3Smrg      done
2153943345d3Smrg    elif test "$need_locks" = warn; then
2154943345d3Smrg      if test -f "$lockfile"; then
2155a7b590b3Smrg	$ECHO "\
2156943345d3Smrg*** ERROR, $lockfile exists and contains:
2157943345d3Smrg`cat $lockfile 2>/dev/null`
2158943345d3Smrg
2159943345d3SmrgThis indicates that another process is trying to use the same
2160943345d3Smrgtemporary object file, and libtool could not work around it because
2161943345d3Smrgyour compiler does not support \`-c' and \`-o' together.  If you
2162943345d3Smrgrepeat this compilation, it may succeed, by chance, but you had better
2163943345d3Smrgavoid parallel builds (make -j) in this platform, or get a better
2164943345d3Smrgcompiler."
2165943345d3Smrg
2166a7b590b3Smrg	$opt_dry_run || $RM $removelist
2167943345d3Smrg	exit $EXIT_FAILURE
2168943345d3Smrg      fi
21693e51e026Smrg      func_append removelist " $output_obj"
2170a7b590b3Smrg      $ECHO "$srcfile" > "$lockfile"
2171943345d3Smrg    fi
2172943345d3Smrg
2173a7b590b3Smrg    $opt_dry_run || $RM $removelist
21743e51e026Smrg    func_append removelist " $lockfile"
2175a7b590b3Smrg    trap '$opt_dry_run || $RM $removelist; exit $EXIT_FAILURE' 1 2 15
2176a7b590b3Smrg
21773e51e026Smrg    func_to_tool_file "$srcfile" func_convert_file_msys_to_w32
21783e51e026Smrg    srcfile=$func_to_tool_file_result
2179a7b590b3Smrg    func_quote_for_eval "$srcfile"
2180a7b590b3Smrg    qsrcfile=$func_quote_for_eval_result
2181943345d3Smrg
2182943345d3Smrg    # Only build a PIC object if we are building libtool libraries.
2183943345d3Smrg    if test "$build_libtool_libs" = yes; then
2184943345d3Smrg      # Without this assignment, base_compile gets emptied.
2185943345d3Smrg      fbsd_hideous_sh_bug=$base_compile
2186943345d3Smrg
2187943345d3Smrg      if test "$pic_mode" != no; then
2188943345d3Smrg	command="$base_compile $qsrcfile $pic_flag"
2189943345d3Smrg      else
2190943345d3Smrg	# Don't build PIC code
2191943345d3Smrg	command="$base_compile $qsrcfile"
2192943345d3Smrg      fi
2193943345d3Smrg
2194a7b590b3Smrg      func_mkdir_p "$xdir$objdir"
2195943345d3Smrg
2196943345d3Smrg      if test -z "$output_obj"; then
2197943345d3Smrg	# Place PIC objects in $objdir
21983e51e026Smrg	func_append command " -o $lobj"
2199943345d3Smrg      fi
2200943345d3Smrg
2201a7b590b3Smrg      func_show_eval_locale "$command"	\
2202a7b590b3Smrg          'test -n "$output_obj" && $RM $removelist; exit $EXIT_FAILURE'
2203943345d3Smrg
2204943345d3Smrg      if test "$need_locks" = warn &&
2205943345d3Smrg	 test "X`cat $lockfile 2>/dev/null`" != "X$srcfile"; then
2206a7b590b3Smrg	$ECHO "\
2207943345d3Smrg*** ERROR, $lockfile contains:
2208943345d3Smrg`cat $lockfile 2>/dev/null`
2209943345d3Smrg
2210943345d3Smrgbut it should contain:
2211943345d3Smrg$srcfile
2212943345d3Smrg
2213943345d3SmrgThis indicates that another process is trying to use the same
2214943345d3Smrgtemporary object file, and libtool could not work around it because
2215943345d3Smrgyour compiler does not support \`-c' and \`-o' together.  If you
2216943345d3Smrgrepeat this compilation, it may succeed, by chance, but you had better
2217943345d3Smrgavoid parallel builds (make -j) in this platform, or get a better
2218943345d3Smrgcompiler."
2219943345d3Smrg
2220a7b590b3Smrg	$opt_dry_run || $RM $removelist
2221943345d3Smrg	exit $EXIT_FAILURE
2222943345d3Smrg      fi
2223943345d3Smrg
2224943345d3Smrg      # Just move the object if needed, then go on to compile the next one
2225943345d3Smrg      if test -n "$output_obj" && test "X$output_obj" != "X$lobj"; then
2226a7b590b3Smrg	func_show_eval '$MV "$output_obj" "$lobj"' \
2227a7b590b3Smrg	  'error=$?; $opt_dry_run || $RM $removelist; exit $error'
2228943345d3Smrg      fi
2229943345d3Smrg
2230943345d3Smrg      # Allow error messages only from the first compilation.
2231943345d3Smrg      if test "$suppress_opt" = yes; then
2232a7b590b3Smrg	suppress_output=' >/dev/null 2>&1'
2233943345d3Smrg      fi
2234943345d3Smrg    fi
2235943345d3Smrg
2236943345d3Smrg    # Only build a position-dependent object if we build old libraries.
2237943345d3Smrg    if test "$build_old_libs" = yes; then
2238943345d3Smrg      if test "$pic_mode" != yes; then
2239943345d3Smrg	# Don't build PIC code
2240a7b590b3Smrg	command="$base_compile $qsrcfile$pie_flag"
2241943345d3Smrg      else
2242943345d3Smrg	command="$base_compile $qsrcfile $pic_flag"
2243943345d3Smrg      fi
2244943345d3Smrg      if test "$compiler_c_o" = yes; then
22453e51e026Smrg	func_append command " -o $obj"
2246943345d3Smrg      fi
2247943345d3Smrg
2248943345d3Smrg      # Suppress compiler output if we already did a PIC compilation.
22493e51e026Smrg      func_append command "$suppress_output"
2250a7b590b3Smrg      func_show_eval_locale "$command" \
2251a7b590b3Smrg        '$opt_dry_run || $RM $removelist; exit $EXIT_FAILURE'
2252943345d3Smrg
2253943345d3Smrg      if test "$need_locks" = warn &&
2254943345d3Smrg	 test "X`cat $lockfile 2>/dev/null`" != "X$srcfile"; then
2255a7b590b3Smrg	$ECHO "\
2256943345d3Smrg*** ERROR, $lockfile contains:
2257943345d3Smrg`cat $lockfile 2>/dev/null`
2258943345d3Smrg
2259943345d3Smrgbut it should contain:
2260943345d3Smrg$srcfile
2261943345d3Smrg
2262943345d3SmrgThis indicates that another process is trying to use the same
2263943345d3Smrgtemporary object file, and libtool could not work around it because
2264943345d3Smrgyour compiler does not support \`-c' and \`-o' together.  If you
2265943345d3Smrgrepeat this compilation, it may succeed, by chance, but you had better
2266943345d3Smrgavoid parallel builds (make -j) in this platform, or get a better
2267943345d3Smrgcompiler."
2268943345d3Smrg
2269a7b590b3Smrg	$opt_dry_run || $RM $removelist
2270943345d3Smrg	exit $EXIT_FAILURE
2271943345d3Smrg      fi
2272943345d3Smrg
2273943345d3Smrg      # Just move the object if needed
2274943345d3Smrg      if test -n "$output_obj" && test "X$output_obj" != "X$obj"; then
2275a7b590b3Smrg	func_show_eval '$MV "$output_obj" "$obj"' \
2276a7b590b3Smrg	  'error=$?; $opt_dry_run || $RM $removelist; exit $error'
2277943345d3Smrg      fi
2278943345d3Smrg    fi
2279943345d3Smrg
2280a7b590b3Smrg    $opt_dry_run || {
2281a7b590b3Smrg      func_write_libtool_object "$libobj" "$objdir/$objname" "$objname"
2282943345d3Smrg
2283a7b590b3Smrg      # Unlock the critical section if it was locked
2284a7b590b3Smrg      if test "$need_locks" != no; then
2285a7b590b3Smrg	removelist=$lockfile
2286a7b590b3Smrg        $RM "$lockfile"
2287a7b590b3Smrg      fi
2288a7b590b3Smrg    }
2289943345d3Smrg
2290943345d3Smrg    exit $EXIT_SUCCESS
2291a7b590b3Smrg}
2292943345d3Smrg
2293a7b590b3Smrg$opt_help || {
22943e51e026Smrg  test "$opt_mode" = compile && func_mode_compile ${1+"$@"}
2295a7b590b3Smrg}
2296943345d3Smrg
2297a7b590b3Smrgfunc_mode_help ()
2298a7b590b3Smrg{
2299a7b590b3Smrg    # We need to display help for each of the modes.
23003e51e026Smrg    case $opt_mode in
2301a7b590b3Smrg      "")
2302a7b590b3Smrg        # Generic help is extracted from the usage comments
2303a7b590b3Smrg        # at the start of this file.
2304a7b590b3Smrg        func_help
2305a7b590b3Smrg        ;;
2306943345d3Smrg
2307a7b590b3Smrg      clean)
2308a7b590b3Smrg        $ECHO \
2309a7b590b3Smrg"Usage: $progname [OPTION]... --mode=clean RM [RM-OPTION]... FILE...
2310943345d3Smrg
2311a7b590b3SmrgRemove files from the build directory.
2312943345d3Smrg
2313a7b590b3SmrgRM is the name of the program to use to delete files associated with each FILE
2314a7b590b3Smrg(typically \`/bin/rm').  RM-OPTIONS are options (such as \`-f') to be passed
2315a7b590b3Smrgto RM.
2316943345d3Smrg
2317a7b590b3SmrgIf FILE is a libtool library, object or program, all the files associated
2318a7b590b3Smrgwith it are deleted. Otherwise, only FILE itself is deleted using RM."
2319a7b590b3Smrg        ;;
2320943345d3Smrg
2321a7b590b3Smrg      compile)
2322a7b590b3Smrg      $ECHO \
2323a7b590b3Smrg"Usage: $progname [OPTION]... --mode=compile COMPILE-COMMAND... SOURCEFILE
2324943345d3Smrg
2325a7b590b3SmrgCompile a source file into a libtool library object.
2326943345d3Smrg
2327a7b590b3SmrgThis mode accepts the following additional options:
2328943345d3Smrg
2329a7b590b3Smrg  -o OUTPUT-FILE    set the output file name to OUTPUT-FILE
2330a7b590b3Smrg  -no-suppress      do not suppress compiler output for multiple passes
23313e51e026Smrg  -prefer-pic       try to build PIC objects only
23323e51e026Smrg  -prefer-non-pic   try to build non-PIC objects only
2333a7b590b3Smrg  -shared           do not build a \`.o' file suitable for static linking
2334a7b590b3Smrg  -static           only build a \`.o' file suitable for static linking
23353e51e026Smrg  -Wc,FLAG          pass FLAG directly to the compiler
2336943345d3Smrg
2337a7b590b3SmrgCOMPILE-COMMAND is a command to be used in creating a \`standard' object file
2338a7b590b3Smrgfrom the given SOURCEFILE.
2339943345d3Smrg
2340a7b590b3SmrgThe output file name is determined by removing the directory component from
2341a7b590b3SmrgSOURCEFILE, then substituting the C source code suffix \`.c' with the
2342a7b590b3Smrglibrary object suffix, \`.lo'."
2343a7b590b3Smrg        ;;
2344943345d3Smrg
2345a7b590b3Smrg      execute)
2346a7b590b3Smrg        $ECHO \
2347a7b590b3Smrg"Usage: $progname [OPTION]... --mode=execute COMMAND [ARGS]...
2348943345d3Smrg
2349a7b590b3SmrgAutomatically set library path, then run a program.
2350943345d3Smrg
2351a7b590b3SmrgThis mode accepts the following additional options:
2352943345d3Smrg
2353a7b590b3Smrg  -dlopen FILE      add the directory containing FILE to the library path
2354943345d3Smrg
2355a7b590b3SmrgThis mode sets the library path environment variable according to \`-dlopen'
2356a7b590b3Smrgflags.
2357943345d3Smrg
2358a7b590b3SmrgIf any of the ARGS are libtool executable wrappers, then they are translated
2359a7b590b3Smrginto their corresponding uninstalled binary, and any of their required library
2360a7b590b3Smrgdirectories are added to the library path.
2361943345d3Smrg
2362a7b590b3SmrgThen, COMMAND is executed, with ARGS as arguments."
2363a7b590b3Smrg        ;;
2364943345d3Smrg
2365a7b590b3Smrg      finish)
2366a7b590b3Smrg        $ECHO \
2367a7b590b3Smrg"Usage: $progname [OPTION]... --mode=finish [LIBDIR]...
2368943345d3Smrg
2369a7b590b3SmrgComplete the installation of libtool libraries.
2370943345d3Smrg
2371a7b590b3SmrgEach LIBDIR is a directory that contains libtool libraries.
2372943345d3Smrg
2373a7b590b3SmrgThe commands that this mode executes may require superuser privileges.  Use
2374a7b590b3Smrgthe \`--dry-run' option if you just want to see what would be executed."
2375a7b590b3Smrg        ;;
2376943345d3Smrg
2377a7b590b3Smrg      install)
2378a7b590b3Smrg        $ECHO \
2379a7b590b3Smrg"Usage: $progname [OPTION]... --mode=install INSTALL-COMMAND...
2380943345d3Smrg
2381a7b590b3SmrgInstall executables or libraries.
2382943345d3Smrg
2383a7b590b3SmrgINSTALL-COMMAND is the installation command.  The first component should be
2384a7b590b3Smrgeither the \`install' or \`cp' program.
2385943345d3Smrg
2386a7b590b3SmrgThe following components of INSTALL-COMMAND are treated specially:
2387943345d3Smrg
23883e51e026Smrg  -inst-prefix-dir PREFIX-DIR  Use PREFIX-DIR as a staging area for installation
2389943345d3Smrg
2390a7b590b3SmrgThe rest of the components are interpreted as arguments to that command (only
2391a7b590b3SmrgBSD-compatible install options are recognized)."
2392a7b590b3Smrg        ;;
2393943345d3Smrg
2394a7b590b3Smrg      link)
2395a7b590b3Smrg        $ECHO \
2396a7b590b3Smrg"Usage: $progname [OPTION]... --mode=link LINK-COMMAND...
2397943345d3Smrg
2398a7b590b3SmrgLink object files or libraries together to form another library, or to
2399a7b590b3Smrgcreate an executable program.
2400943345d3Smrg
2401a7b590b3SmrgLINK-COMMAND is a command using the C compiler that you would use to create
2402a7b590b3Smrga program from several object files.
2403943345d3Smrg
2404a7b590b3SmrgThe following components of LINK-COMMAND are treated specially:
2405943345d3Smrg
2406a7b590b3Smrg  -all-static       do not do any dynamic linking at all
2407a7b590b3Smrg  -avoid-version    do not add a version suffix if possible
24083e51e026Smrg  -bindir BINDIR    specify path to binaries directory (for systems where
24093e51e026Smrg                    libraries must be found in the PATH setting at runtime)
2410a7b590b3Smrg  -dlopen FILE      \`-dlpreopen' FILE if it cannot be dlopened at runtime
2411a7b590b3Smrg  -dlpreopen FILE   link in FILE and add its symbols to lt_preloaded_symbols
2412a7b590b3Smrg  -export-dynamic   allow symbols from OUTPUT-FILE to be resolved with dlsym(3)
2413a7b590b3Smrg  -export-symbols SYMFILE
2414a7b590b3Smrg                    try to export only the symbols listed in SYMFILE
2415a7b590b3Smrg  -export-symbols-regex REGEX
2416a7b590b3Smrg                    try to export only the symbols matching REGEX
2417a7b590b3Smrg  -LLIBDIR          search LIBDIR for required installed libraries
2418a7b590b3Smrg  -lNAME            OUTPUT-FILE requires the installed library libNAME
2419a7b590b3Smrg  -module           build a library that can dlopened
2420a7b590b3Smrg  -no-fast-install  disable the fast-install mode
2421a7b590b3Smrg  -no-install       link a not-installable executable
2422a7b590b3Smrg  -no-undefined     declare that a library does not refer to external symbols
2423a7b590b3Smrg  -o OUTPUT-FILE    create OUTPUT-FILE from the specified objects
2424a7b590b3Smrg  -objectlist FILE  Use a list of object files found in FILE to specify objects
2425a7b590b3Smrg  -precious-files-regex REGEX
2426a7b590b3Smrg                    don't remove output files matching REGEX
2427a7b590b3Smrg  -release RELEASE  specify package release information
2428a7b590b3Smrg  -rpath LIBDIR     the created library will eventually be installed in LIBDIR
2429a7b590b3Smrg  -R[ ]LIBDIR       add LIBDIR to the runtime path of programs and libraries
2430a7b590b3Smrg  -shared           only do dynamic linking of libtool libraries
2431a7b590b3Smrg  -shrext SUFFIX    override the standard shared library file extension
2432a7b590b3Smrg  -static           do not do any dynamic linking of uninstalled libtool libraries
2433a7b590b3Smrg  -static-libtool-libs
2434a7b590b3Smrg                    do not do any dynamic linking of libtool libraries
2435a7b590b3Smrg  -version-info CURRENT[:REVISION[:AGE]]
2436a7b590b3Smrg                    specify library version info [each variable defaults to 0]
2437a7b590b3Smrg  -weak LIBNAME     declare that the target provides the LIBNAME interface
24383e51e026Smrg  -Wc,FLAG
24393e51e026Smrg  -Xcompiler FLAG   pass linker-specific FLAG directly to the compiler
24403e51e026Smrg  -Wl,FLAG
24413e51e026Smrg  -Xlinker FLAG     pass linker-specific FLAG directly to the linker
24423e51e026Smrg  -XCClinker FLAG   pass link-specific FLAG to the compiler driver (CC)
2443943345d3Smrg
2444a7b590b3SmrgAll other options (arguments beginning with \`-') are ignored.
2445943345d3Smrg
2446a7b590b3SmrgEvery other argument is treated as a filename.  Files ending in \`.la' are
2447a7b590b3Smrgtreated as uninstalled libtool libraries, other files are standard or library
2448a7b590b3Smrgobject files.
24495e695a52Smrg
2450a7b590b3SmrgIf the OUTPUT-FILE ends in \`.la', then a libtool library is created,
2451a7b590b3Smrgonly library objects (\`.lo' files) may be specified, and \`-rpath' is
2452a7b590b3Smrgrequired, except when creating a convenience library.
2453943345d3Smrg
2454a7b590b3SmrgIf OUTPUT-FILE ends in \`.a' or \`.lib', then a standard library is created
2455a7b590b3Smrgusing \`ar' and \`ranlib', or on Windows using \`lib'.
2456943345d3Smrg
2457a7b590b3SmrgIf OUTPUT-FILE ends in \`.lo' or \`.${objext}', then a reloadable object file
2458a7b590b3Smrgis created, otherwise an executable program is created."
2459943345d3Smrg        ;;
2460943345d3Smrg
2461a7b590b3Smrg      uninstall)
2462a7b590b3Smrg        $ECHO \
2463a7b590b3Smrg"Usage: $progname [OPTION]... --mode=uninstall RM [RM-OPTION]... FILE...
2464943345d3Smrg
2465a7b590b3SmrgRemove libraries from an installation directory.
2466943345d3Smrg
2467a7b590b3SmrgRM is the name of the program to use to delete files associated with each FILE
2468a7b590b3Smrg(typically \`/bin/rm').  RM-OPTIONS are options (such as \`-f') to be passed
2469a7b590b3Smrgto RM.
2470943345d3Smrg
2471a7b590b3SmrgIf FILE is a libtool library, all the files associated with it are deleted.
2472a7b590b3SmrgOtherwise, only FILE itself is deleted using RM."
2473a7b590b3Smrg        ;;
2474943345d3Smrg
2475a7b590b3Smrg      *)
24763e51e026Smrg        func_fatal_help "invalid operation mode \`$opt_mode'"
2477a7b590b3Smrg        ;;
2478a7b590b3Smrg    esac
2479943345d3Smrg
24803e51e026Smrg    echo
2481a7b590b3Smrg    $ECHO "Try \`$progname --help' for more information about other modes."
2482a7b590b3Smrg}
2483943345d3Smrg
24843e51e026Smrg# Now that we've collected a possible --mode arg, show help if necessary
24853e51e026Smrgif $opt_help; then
24863e51e026Smrg  if test "$opt_help" = :; then
24873e51e026Smrg    func_mode_help
24883e51e026Smrg  else
24893e51e026Smrg    {
24903e51e026Smrg      func_help noexit
24913e51e026Smrg      for opt_mode in compile link execute install finish uninstall clean; do
24923e51e026Smrg	func_mode_help
24933e51e026Smrg      done
24943e51e026Smrg    } | sed -n '1p; 2,$s/^Usage:/  or: /p'
24953e51e026Smrg    {
24963e51e026Smrg      func_help noexit
24973e51e026Smrg      for opt_mode in compile link execute install finish uninstall clean; do
24983e51e026Smrg	echo
24993e51e026Smrg	func_mode_help
25003e51e026Smrg      done
25013e51e026Smrg    } |
25023e51e026Smrg    sed '1d
25033e51e026Smrg      /^When reporting/,/^Report/{
25043e51e026Smrg	H
25053e51e026Smrg	d
25063e51e026Smrg      }
25073e51e026Smrg      $x
25083e51e026Smrg      /information about other modes/d
25093e51e026Smrg      /more detailed .*MODE/d
25103e51e026Smrg      s/^Usage:.*--mode=\([^ ]*\) .*/Description of \1 mode:/'
25113e51e026Smrg  fi
25123e51e026Smrg  exit $?
25133e51e026Smrgfi
2514943345d3Smrg
2515943345d3Smrg
2516a7b590b3Smrg# func_mode_execute arg...
2517a7b590b3Smrgfunc_mode_execute ()
2518a7b590b3Smrg{
2519a7b590b3Smrg    $opt_debug
2520a7b590b3Smrg    # The first argument is the command name.
2521a7b590b3Smrg    cmd="$nonopt"
2522a7b590b3Smrg    test -z "$cmd" && \
2523a7b590b3Smrg      func_fatal_help "you must specify a COMMAND"
2524943345d3Smrg
2525a7b590b3Smrg    # Handle -dlopen flags immediately.
25263e51e026Smrg    for file in $opt_dlopen; do
2527a7b590b3Smrg      test -f "$file" \
2528a7b590b3Smrg	|| func_fatal_help "\`$file' is not a file"
2529943345d3Smrg
2530a7b590b3Smrg      dir=
2531a7b590b3Smrg      case $file in
2532a7b590b3Smrg      *.la)
25333e51e026Smrg	func_resolve_sysroot "$file"
25343e51e026Smrg	file=$func_resolve_sysroot_result
25353e51e026Smrg
2536a7b590b3Smrg	# Check to see that this really is a libtool archive.
2537a7b590b3Smrg	func_lalib_unsafe_p "$file" \
2538a7b590b3Smrg	  || func_fatal_help "\`$lib' is not a valid libtool archive"
2539943345d3Smrg
2540a7b590b3Smrg	# Read the libtool library.
2541a7b590b3Smrg	dlname=
2542a7b590b3Smrg	library_names=
2543a7b590b3Smrg	func_source "$file"
2544943345d3Smrg
2545a7b590b3Smrg	# Skip this library if it cannot be dlopened.
2546a7b590b3Smrg	if test -z "$dlname"; then
2547a7b590b3Smrg	  # Warn if it was a shared library.
2548a7b590b3Smrg	  test -n "$library_names" && \
2549a7b590b3Smrg	    func_warning "\`$file' was not linked with \`-export-dynamic'"
2550a7b590b3Smrg	  continue
2551a7b590b3Smrg	fi
2552943345d3Smrg
2553a7b590b3Smrg	func_dirname "$file" "" "."
2554a7b590b3Smrg	dir="$func_dirname_result"
2555943345d3Smrg
2556a7b590b3Smrg	if test -f "$dir/$objdir/$dlname"; then
25573e51e026Smrg	  func_append dir "/$objdir"
2558a7b590b3Smrg	else
2559a7b590b3Smrg	  if test ! -f "$dir/$dlname"; then
2560a7b590b3Smrg	    func_fatal_error "cannot find \`$dlname' in \`$dir' or \`$dir/$objdir'"
2561a7b590b3Smrg	  fi
2562a7b590b3Smrg	fi
2563943345d3Smrg	;;
2564943345d3Smrg
2565a7b590b3Smrg      *.lo)
2566a7b590b3Smrg	# Just add the directory containing the .lo file.
2567a7b590b3Smrg	func_dirname "$file" "" "."
2568a7b590b3Smrg	dir="$func_dirname_result"
2569943345d3Smrg	;;
2570943345d3Smrg
2571a7b590b3Smrg      *)
2572a7b590b3Smrg	func_warning "\`-dlopen' is ignored for non-libtool libraries and objects"
2573943345d3Smrg	continue
2574943345d3Smrg	;;
2575a7b590b3Smrg      esac
2576943345d3Smrg
2577a7b590b3Smrg      # Get the absolute pathname.
2578a7b590b3Smrg      absdir=`cd "$dir" && pwd`
2579a7b590b3Smrg      test -n "$absdir" && dir="$absdir"
2580943345d3Smrg
2581a7b590b3Smrg      # Now add the directory to shlibpath_var.
2582a7b590b3Smrg      if eval "test -z \"\$$shlibpath_var\""; then
2583a7b590b3Smrg	eval "$shlibpath_var=\"\$dir\""
2584a7b590b3Smrg      else
2585a7b590b3Smrg	eval "$shlibpath_var=\"\$dir:\$$shlibpath_var\""
2586a7b590b3Smrg      fi
2587a7b590b3Smrg    done
2588943345d3Smrg
2589a7b590b3Smrg    # This variable tells wrapper scripts just to set shlibpath_var
2590a7b590b3Smrg    # rather than running their programs.
2591a7b590b3Smrg    libtool_execute_magic="$magic"
2592943345d3Smrg
2593a7b590b3Smrg    # Check if any of the arguments is a wrapper script.
2594a7b590b3Smrg    args=
2595a7b590b3Smrg    for file
2596a7b590b3Smrg    do
2597a7b590b3Smrg      case $file in
25983e51e026Smrg      -* | *.la | *.lo ) ;;
2599a7b590b3Smrg      *)
2600a7b590b3Smrg	# Do a test to see if this is really a libtool program.
2601a7b590b3Smrg	if func_ltwrapper_script_p "$file"; then
2602a7b590b3Smrg	  func_source "$file"
2603a7b590b3Smrg	  # Transform arg to wrapped name.
2604a7b590b3Smrg	  file="$progdir/$program"
2605a7b590b3Smrg	elif func_ltwrapper_executable_p "$file"; then
2606a7b590b3Smrg	  func_ltwrapper_scriptname "$file"
2607a7b590b3Smrg	  func_source "$func_ltwrapper_scriptname_result"
2608a7b590b3Smrg	  # Transform arg to wrapped name.
2609a7b590b3Smrg	  file="$progdir/$program"
2610a7b590b3Smrg	fi
2611a7b590b3Smrg	;;
2612a7b590b3Smrg      esac
2613a7b590b3Smrg      # Quote arguments (to preserve shell metacharacters).
26143e51e026Smrg      func_append_quoted args "$file"
2615a7b590b3Smrg    done
2616943345d3Smrg
2617a7b590b3Smrg    if test "X$opt_dry_run" = Xfalse; then
2618a7b590b3Smrg      if test -n "$shlibpath_var"; then
2619a7b590b3Smrg	# Export the shlibpath_var.
2620a7b590b3Smrg	eval "export $shlibpath_var"
2621a7b590b3Smrg      fi
2622943345d3Smrg
2623a7b590b3Smrg      # Restore saved environment variables
2624a7b590b3Smrg      for lt_var in LANG LANGUAGE LC_ALL LC_CTYPE LC_COLLATE LC_MESSAGES
2625a7b590b3Smrg      do
2626a7b590b3Smrg	eval "if test \"\${save_$lt_var+set}\" = set; then
2627a7b590b3Smrg                $lt_var=\$save_$lt_var; export $lt_var
2628943345d3Smrg	      else
2629a7b590b3Smrg		$lt_unset $lt_var
2630a7b590b3Smrg	      fi"
2631a7b590b3Smrg      done
2632943345d3Smrg
2633a7b590b3Smrg      # Now prepare to actually exec the command.
2634a7b590b3Smrg      exec_cmd="\$cmd$args"
2635a7b590b3Smrg    else
2636a7b590b3Smrg      # Display what would be done.
2637a7b590b3Smrg      if test -n "$shlibpath_var"; then
2638a7b590b3Smrg	eval "\$ECHO \"\$shlibpath_var=\$$shlibpath_var\""
26393e51e026Smrg	echo "export $shlibpath_var"
2640a7b590b3Smrg      fi
2641a7b590b3Smrg      $ECHO "$cmd$args"
2642a7b590b3Smrg      exit $EXIT_SUCCESS
2643a7b590b3Smrg    fi
2644a7b590b3Smrg}
2645943345d3Smrg
26463e51e026Smrgtest "$opt_mode" = execute && func_mode_execute ${1+"$@"}
2647943345d3Smrg
2648943345d3Smrg
2649a7b590b3Smrg# func_mode_finish arg...
2650a7b590b3Smrgfunc_mode_finish ()
2651a7b590b3Smrg{
2652a7b590b3Smrg    $opt_debug
26533e51e026Smrg    libs=
26543e51e026Smrg    libdirs=
2655a7b590b3Smrg    admincmds=
2656943345d3Smrg
26573e51e026Smrg    for opt in "$nonopt" ${1+"$@"}
26583e51e026Smrg    do
26593e51e026Smrg      if test -d "$opt"; then
26603e51e026Smrg	func_append libdirs " $opt"
26613e51e026Smrg
26623e51e026Smrg      elif test -f "$opt"; then
26633e51e026Smrg	if func_lalib_unsafe_p "$opt"; then
26643e51e026Smrg	  func_append libs " $opt"
26653e51e026Smrg	else
26663e51e026Smrg	  func_warning "\`$opt' is not a valid libtool archive"
26673e51e026Smrg	fi
26683e51e026Smrg
26693e51e026Smrg      else
26703e51e026Smrg	func_fatal_error "invalid argument \`$opt'"
26713e51e026Smrg      fi
26723e51e026Smrg    done
26733e51e026Smrg
26743e51e026Smrg    if test -n "$libs"; then
26753e51e026Smrg      if test -n "$lt_sysroot"; then
26763e51e026Smrg        sysroot_regex=`$ECHO "$lt_sysroot" | $SED "$sed_make_literal_regex"`
26773e51e026Smrg        sysroot_cmd="s/\([ ']\)$sysroot_regex/\1/g;"
26783e51e026Smrg      else
26793e51e026Smrg        sysroot_cmd=
26803e51e026Smrg      fi
26813e51e026Smrg
26823e51e026Smrg      # Remove sysroot references
26833e51e026Smrg      if $opt_dry_run; then
26843e51e026Smrg        for lib in $libs; do
26853e51e026Smrg          echo "removing references to $lt_sysroot and \`=' prefixes from $lib"
26863e51e026Smrg        done
26873e51e026Smrg      else
26883e51e026Smrg        tmpdir=`func_mktempdir`
26893e51e026Smrg        for lib in $libs; do
26903e51e026Smrg	  sed -e "${sysroot_cmd} s/\([ ']-[LR]\)=/\1/g; s/\([ ']\)=/\1/g" $lib \
26913e51e026Smrg	    > $tmpdir/tmp-la
26923e51e026Smrg	  mv -f $tmpdir/tmp-la $lib
26933e51e026Smrg	done
26943e51e026Smrg        ${RM}r "$tmpdir"
26953e51e026Smrg      fi
26963e51e026Smrg    fi
2697943345d3Smrg
26983e51e026Smrg    if test -n "$finish_cmds$finish_eval" && test -n "$libdirs"; then
2699a7b590b3Smrg      for libdir in $libdirs; do
2700a7b590b3Smrg	if test -n "$finish_cmds"; then
2701a7b590b3Smrg	  # Do each command in the finish commands.
2702a7b590b3Smrg	  func_execute_cmds "$finish_cmds" 'admincmds="$admincmds
2703a7b590b3Smrg'"$cmd"'"'
2704943345d3Smrg	fi
2705a7b590b3Smrg	if test -n "$finish_eval"; then
2706a7b590b3Smrg	  # Do the single finish_eval.
2707a7b590b3Smrg	  eval cmds=\"$finish_eval\"
27083e51e026Smrg	  $opt_dry_run || eval "$cmds" || func_append admincmds "
2709a7b590b3Smrg       $cmds"
2710a7b590b3Smrg	fi
2711a7b590b3Smrg      done
2712a7b590b3Smrg    fi
2713943345d3Smrg
2714a7b590b3Smrg    # Exit here if they wanted silent mode.
2715a7b590b3Smrg    $opt_silent && exit $EXIT_SUCCESS
2716943345d3Smrg
27173e51e026Smrg    if test -n "$finish_cmds$finish_eval" && test -n "$libdirs"; then
27183e51e026Smrg      echo "----------------------------------------------------------------------"
27193e51e026Smrg      echo "Libraries have been installed in:"
27203e51e026Smrg      for libdir in $libdirs; do
27213e51e026Smrg	$ECHO "   $libdir"
27223e51e026Smrg      done
27233e51e026Smrg      echo
27243e51e026Smrg      echo "If you ever happen to want to link against installed libraries"
27253e51e026Smrg      echo "in a given directory, LIBDIR, you must either use libtool, and"
27263e51e026Smrg      echo "specify the full pathname of the library, or use the \`-LLIBDIR'"
27273e51e026Smrg      echo "flag during linking and do at least one of the following:"
27283e51e026Smrg      if test -n "$shlibpath_var"; then
27293e51e026Smrg	echo "   - add LIBDIR to the \`$shlibpath_var' environment variable"
27303e51e026Smrg	echo "     during execution"
27313e51e026Smrg      fi
27323e51e026Smrg      if test -n "$runpath_var"; then
27333e51e026Smrg	echo "   - add LIBDIR to the \`$runpath_var' environment variable"
27343e51e026Smrg	echo "     during linking"
27353e51e026Smrg      fi
27363e51e026Smrg      if test -n "$hardcode_libdir_flag_spec"; then
27373e51e026Smrg	libdir=LIBDIR
27383e51e026Smrg	eval flag=\"$hardcode_libdir_flag_spec\"
2739a7b590b3Smrg
27403e51e026Smrg	$ECHO "   - use the \`$flag' linker flag"
27413e51e026Smrg      fi
27423e51e026Smrg      if test -n "$admincmds"; then
27433e51e026Smrg	$ECHO "   - have your system administrator run these commands:$admincmds"
27443e51e026Smrg      fi
27453e51e026Smrg      if test -f /etc/ld.so.conf; then
27463e51e026Smrg	echo "   - have your system administrator add LIBDIR to \`/etc/ld.so.conf'"
27473e51e026Smrg      fi
27483e51e026Smrg      echo
2749a7b590b3Smrg
27503e51e026Smrg      echo "See any operating system documentation about shared libraries for"
27513e51e026Smrg      case $host in
27523e51e026Smrg	solaris2.[6789]|solaris2.1[0-9])
27533e51e026Smrg	  echo "more information, such as the ld(1), crle(1) and ld.so(8) manual"
27543e51e026Smrg	  echo "pages."
27553e51e026Smrg	  ;;
27563e51e026Smrg	*)
27573e51e026Smrg	  echo "more information, such as the ld(1) and ld.so(8) manual pages."
27583e51e026Smrg	  ;;
27593e51e026Smrg      esac
27603e51e026Smrg      echo "----------------------------------------------------------------------"
27613e51e026Smrg    fi
2762a7b590b3Smrg    exit $EXIT_SUCCESS
2763a7b590b3Smrg}
2764a7b590b3Smrg
27653e51e026Smrgtest "$opt_mode" = finish && func_mode_finish ${1+"$@"}
2766a7b590b3Smrg
2767a7b590b3Smrg
2768a7b590b3Smrg# func_mode_install arg...
2769a7b590b3Smrgfunc_mode_install ()
2770a7b590b3Smrg{
2771a7b590b3Smrg    $opt_debug
2772a7b590b3Smrg    # There may be an optional sh(1) argument at the beginning of
2773a7b590b3Smrg    # install_prog (especially on Windows NT).
2774a7b590b3Smrg    if test "$nonopt" = "$SHELL" || test "$nonopt" = /bin/sh ||
2775a7b590b3Smrg       # Allow the use of GNU shtool's install command.
27763e51e026Smrg       case $nonopt in *shtool*) :;; *) false;; esac; then
2777a7b590b3Smrg      # Aesthetically quote it.
2778a7b590b3Smrg      func_quote_for_eval "$nonopt"
2779a7b590b3Smrg      install_prog="$func_quote_for_eval_result "
2780a7b590b3Smrg      arg=$1
2781a7b590b3Smrg      shift
2782a7b590b3Smrg    else
2783a7b590b3Smrg      install_prog=
2784a7b590b3Smrg      arg=$nonopt
2785a7b590b3Smrg    fi
2786a7b590b3Smrg
2787a7b590b3Smrg    # The real first argument should be the name of the installation program.
2788a7b590b3Smrg    # Aesthetically quote it.
2789a7b590b3Smrg    func_quote_for_eval "$arg"
27903e51e026Smrg    func_append install_prog "$func_quote_for_eval_result"
27913e51e026Smrg    install_shared_prog=$install_prog
27923e51e026Smrg    case " $install_prog " in
27933e51e026Smrg      *[\\\ /]cp\ *) install_cp=: ;;
27943e51e026Smrg      *) install_cp=false ;;
27953e51e026Smrg    esac
2796a7b590b3Smrg
2797a7b590b3Smrg    # We need to accept at least all the BSD install flags.
2798a7b590b3Smrg    dest=
2799a7b590b3Smrg    files=
2800a7b590b3Smrg    opts=
2801a7b590b3Smrg    prev=
2802a7b590b3Smrg    install_type=
2803a7b590b3Smrg    isdir=no
2804a7b590b3Smrg    stripme=
28053e51e026Smrg    no_mode=:
2806a7b590b3Smrg    for arg
2807a7b590b3Smrg    do
28083e51e026Smrg      arg2=
2809a7b590b3Smrg      if test -n "$dest"; then
28103e51e026Smrg	func_append files " $dest"
2811a7b590b3Smrg	dest=$arg
2812a7b590b3Smrg	continue
2813a7b590b3Smrg      fi
2814a7b590b3Smrg
2815a7b590b3Smrg      case $arg in
2816a7b590b3Smrg      -d) isdir=yes ;;
2817a7b590b3Smrg      -f)
28183e51e026Smrg	if $install_cp; then :; else
28193e51e026Smrg	  prev=$arg
28203e51e026Smrg	fi
2821a7b590b3Smrg	;;
2822a7b590b3Smrg      -g | -m | -o)
2823a7b590b3Smrg	prev=$arg
2824a7b590b3Smrg	;;
2825a7b590b3Smrg      -s)
2826a7b590b3Smrg	stripme=" -s"
2827a7b590b3Smrg	continue
2828a7b590b3Smrg	;;
2829a7b590b3Smrg      -*)
2830a7b590b3Smrg	;;
2831a7b590b3Smrg      *)
2832a7b590b3Smrg	# If the previous option needed an argument, then skip it.
2833a7b590b3Smrg	if test -n "$prev"; then
28343e51e026Smrg	  if test "x$prev" = x-m && test -n "$install_override_mode"; then
28353e51e026Smrg	    arg2=$install_override_mode
28363e51e026Smrg	    no_mode=false
28373e51e026Smrg	  fi
2838943345d3Smrg	  prev=
2839943345d3Smrg	else
2840a7b590b3Smrg	  dest=$arg
2841a7b590b3Smrg	  continue
2842943345d3Smrg	fi
2843943345d3Smrg	;;
2844a7b590b3Smrg      esac
2845943345d3Smrg
2846a7b590b3Smrg      # Aesthetically quote the argument.
2847a7b590b3Smrg      func_quote_for_eval "$arg"
28483e51e026Smrg      func_append install_prog " $func_quote_for_eval_result"
28493e51e026Smrg      if test -n "$arg2"; then
28503e51e026Smrg	func_quote_for_eval "$arg2"
28513e51e026Smrg      fi
28523e51e026Smrg      func_append install_shared_prog " $func_quote_for_eval_result"
2853a7b590b3Smrg    done
2854943345d3Smrg
2855a7b590b3Smrg    test -z "$install_prog" && \
2856a7b590b3Smrg      func_fatal_help "you must specify an install program"
2857943345d3Smrg
2858a7b590b3Smrg    test -n "$prev" && \
2859a7b590b3Smrg      func_fatal_help "the \`$prev' option requires an argument"
2860943345d3Smrg
28613e51e026Smrg    if test -n "$install_override_mode" && $no_mode; then
28623e51e026Smrg      if $install_cp; then :; else
28633e51e026Smrg	func_quote_for_eval "$install_override_mode"
28643e51e026Smrg	func_append install_shared_prog " -m $func_quote_for_eval_result"
28653e51e026Smrg      fi
28663e51e026Smrg    fi
28673e51e026Smrg
2868a7b590b3Smrg    if test -z "$files"; then
2869a7b590b3Smrg      if test -z "$dest"; then
2870a7b590b3Smrg	func_fatal_help "no file or destination specified"
2871a7b590b3Smrg      else
2872a7b590b3Smrg	func_fatal_help "you must specify a destination"
2873a7b590b3Smrg      fi
2874943345d3Smrg    fi
2875943345d3Smrg
2876a7b590b3Smrg    # Strip any trailing slash from the destination.
2877a7b590b3Smrg    func_stripname '' '/' "$dest"
2878a7b590b3Smrg    dest=$func_stripname_result
2879943345d3Smrg
2880a7b590b3Smrg    # Check to see that the destination is a directory.
2881a7b590b3Smrg    test -d "$dest" && isdir=yes
2882a7b590b3Smrg    if test "$isdir" = yes; then
2883a7b590b3Smrg      destdir="$dest"
2884a7b590b3Smrg      destname=
2885943345d3Smrg    else
2886a7b590b3Smrg      func_dirname_and_basename "$dest" "" "."
2887a7b590b3Smrg      destdir="$func_dirname_result"
2888a7b590b3Smrg      destname="$func_basename_result"
2889943345d3Smrg
2890a7b590b3Smrg      # Not a directory, so check to see that there is only one file specified.
2891a7b590b3Smrg      set dummy $files; shift
2892a7b590b3Smrg      test "$#" -gt 1 && \
2893a7b590b3Smrg	func_fatal_help "\`$dest' is not a directory"
2894943345d3Smrg    fi
2895a7b590b3Smrg    case $destdir in
2896a7b590b3Smrg    [\\/]* | [A-Za-z]:[\\/]*) ;;
2897943345d3Smrg    *)
2898a7b590b3Smrg      for file in $files; do
2899a7b590b3Smrg	case $file in
2900a7b590b3Smrg	*.lo) ;;
2901a7b590b3Smrg	*)
2902a7b590b3Smrg	  func_fatal_help "\`$destdir' must be an absolute directory name"
2903a7b590b3Smrg	  ;;
2904a7b590b3Smrg	esac
2905a7b590b3Smrg      done
2906943345d3Smrg      ;;
2907943345d3Smrg    esac
2908943345d3Smrg
2909a7b590b3Smrg    # This variable tells wrapper scripts just to set variables rather
2910a7b590b3Smrg    # than running their programs.
2911a7b590b3Smrg    libtool_install_magic="$magic"
2912943345d3Smrg
2913a7b590b3Smrg    staticlibs=
2914a7b590b3Smrg    future_libdirs=
2915a7b590b3Smrg    current_libdirs=
2916a7b590b3Smrg    for file in $files; do
2917943345d3Smrg
2918a7b590b3Smrg      # Do each installation.
2919a7b590b3Smrg      case $file in
2920a7b590b3Smrg      *.$libext)
2921a7b590b3Smrg	# Do the static libraries later.
29223e51e026Smrg	func_append staticlibs " $file"
2923a7b590b3Smrg	;;
2924a7b590b3Smrg
2925a7b590b3Smrg      *.la)
29263e51e026Smrg	func_resolve_sysroot "$file"
29273e51e026Smrg	file=$func_resolve_sysroot_result
29283e51e026Smrg
2929a7b590b3Smrg	# Check to see that this really is a libtool archive.
2930a7b590b3Smrg	func_lalib_unsafe_p "$file" \
2931a7b590b3Smrg	  || func_fatal_help "\`$file' is not a valid libtool archive"
2932a7b590b3Smrg
2933a7b590b3Smrg	library_names=
2934a7b590b3Smrg	old_library=
2935a7b590b3Smrg	relink_command=
2936a7b590b3Smrg	func_source "$file"
2937a7b590b3Smrg
2938a7b590b3Smrg	# Add the libdir to current_libdirs if it is the destination.
2939a7b590b3Smrg	if test "X$destdir" = "X$libdir"; then
2940a7b590b3Smrg	  case "$current_libdirs " in
2941a7b590b3Smrg	  *" $libdir "*) ;;
29423e51e026Smrg	  *) func_append current_libdirs " $libdir" ;;
2943943345d3Smrg	  esac
2944a7b590b3Smrg	else
2945a7b590b3Smrg	  # Note the libdir as a future libdir.
2946a7b590b3Smrg	  case "$future_libdirs " in
2947a7b590b3Smrg	  *" $libdir "*) ;;
29483e51e026Smrg	  *) func_append future_libdirs " $libdir" ;;
2949a7b590b3Smrg	  esac
2950a7b590b3Smrg	fi
2951943345d3Smrg
2952a7b590b3Smrg	func_dirname "$file" "/" ""
2953a7b590b3Smrg	dir="$func_dirname_result"
29543e51e026Smrg	func_append dir "$objdir"
2955a7b590b3Smrg
2956a7b590b3Smrg	if test -n "$relink_command"; then
2957a7b590b3Smrg	  # Determine the prefix the user has applied to our future dir.
29583e51e026Smrg	  inst_prefix_dir=`$ECHO "$destdir" | $SED -e "s%$libdir\$%%"`
2959a7b590b3Smrg
2960a7b590b3Smrg	  # Don't allow the user to place us outside of our expected
2961a7b590b3Smrg	  # location b/c this prevents finding dependent libraries that
2962a7b590b3Smrg	  # are installed to the same prefix.
2963a7b590b3Smrg	  # At present, this check doesn't affect windows .dll's that
2964a7b590b3Smrg	  # are installed into $libdir/../bin (currently, that works fine)
2965a7b590b3Smrg	  # but it's something to keep an eye on.
2966a7b590b3Smrg	  test "$inst_prefix_dir" = "$destdir" && \
2967a7b590b3Smrg	    func_fatal_error "error: cannot install \`$file' to a directory not ending in $libdir"
2968a7b590b3Smrg
2969a7b590b3Smrg	  if test -n "$inst_prefix_dir"; then
2970a7b590b3Smrg	    # Stick the inst_prefix_dir data into the link command.
29713e51e026Smrg	    relink_command=`$ECHO "$relink_command" | $SED "s%@inst_prefix_dir@%-inst-prefix-dir $inst_prefix_dir%"`
2972a7b590b3Smrg	  else
29733e51e026Smrg	    relink_command=`$ECHO "$relink_command" | $SED "s%@inst_prefix_dir@%%"`
2974a7b590b3Smrg	  fi
2975a7b590b3Smrg
2976a7b590b3Smrg	  func_warning "relinking \`$file'"
2977a7b590b3Smrg	  func_show_eval "$relink_command" \
2978a7b590b3Smrg	    'func_fatal_error "error: relink \`$file'\'' with the above command before installing it"'
2979a7b590b3Smrg	fi
2980a7b590b3Smrg
2981a7b590b3Smrg	# See the names of the shared library.
2982a7b590b3Smrg	set dummy $library_names; shift
2983a7b590b3Smrg	if test -n "$1"; then
2984a7b590b3Smrg	  realname="$1"
2985a7b590b3Smrg	  shift
2986a7b590b3Smrg
2987a7b590b3Smrg	  srcname="$realname"
2988a7b590b3Smrg	  test -n "$relink_command" && srcname="$realname"T
2989a7b590b3Smrg
2990a7b590b3Smrg	  # Install the shared library and build the symlinks.
29913e51e026Smrg	  func_show_eval "$install_shared_prog $dir/$srcname $destdir/$realname" \
2992a7b590b3Smrg	      'exit $?'
2993a7b590b3Smrg	  tstripme="$stripme"
2994a7b590b3Smrg	  case $host_os in
2995a7b590b3Smrg	  cygwin* | mingw* | pw32* | cegcc*)
2996a7b590b3Smrg	    case $realname in
2997a7b590b3Smrg	    *.dll.a)
2998a7b590b3Smrg	      tstripme=""
2999a7b590b3Smrg	      ;;
3000a7b590b3Smrg	    esac
3001943345d3Smrg	    ;;
3002943345d3Smrg	  esac
3003a7b590b3Smrg	  if test -n "$tstripme" && test -n "$striplib"; then
3004a7b590b3Smrg	    func_show_eval "$striplib $destdir/$realname" 'exit $?'
3005943345d3Smrg	  fi
3006a7b590b3Smrg
3007a7b590b3Smrg	  if test "$#" -gt 0; then
3008a7b590b3Smrg	    # Delete the old symlinks, and create new ones.
3009a7b590b3Smrg	    # Try `ln -sf' first, because the `ln' binary might depend on
3010a7b590b3Smrg	    # the symlink we replace!  Solaris /bin/ln does not understand -f,
3011a7b590b3Smrg	    # so we also need to try rm && ln -s.
3012a7b590b3Smrg	    for linkname
3013a7b590b3Smrg	    do
3014a7b590b3Smrg	      test "$linkname" != "$realname" \
3015a7b590b3Smrg		&& func_show_eval "(cd $destdir && { $LN_S -f $realname $linkname || { $RM $linkname && $LN_S $realname $linkname; }; })"
3016943345d3Smrg	    done
3017943345d3Smrg	  fi
3018943345d3Smrg
3019a7b590b3Smrg	  # Do each command in the postinstall commands.
3020a7b590b3Smrg	  lib="$destdir/$realname"
3021a7b590b3Smrg	  func_execute_cmds "$postinstall_cmds" 'exit $?'
3022943345d3Smrg	fi
3023943345d3Smrg
3024a7b590b3Smrg	# Install the pseudo-library for information purposes.
3025a7b590b3Smrg	func_basename "$file"
3026a7b590b3Smrg	name="$func_basename_result"
3027a7b590b3Smrg	instname="$dir/$name"i
3028a7b590b3Smrg	func_show_eval "$install_prog $instname $destdir/$name" 'exit $?'
3029943345d3Smrg
3030a7b590b3Smrg	# Maybe install the static library, too.
30313e51e026Smrg	test -n "$old_library" && func_append staticlibs " $dir/$old_library"
3032a7b590b3Smrg	;;
3033943345d3Smrg
3034a7b590b3Smrg      *.lo)
3035a7b590b3Smrg	# Install (i.e. copy) a libtool object.
3036943345d3Smrg
3037a7b590b3Smrg	# Figure out destination file name, if it wasn't already specified.
3038a7b590b3Smrg	if test -n "$destname"; then
3039a7b590b3Smrg	  destfile="$destdir/$destname"
3040a7b590b3Smrg	else
3041a7b590b3Smrg	  func_basename "$file"
3042a7b590b3Smrg	  destfile="$func_basename_result"
3043a7b590b3Smrg	  destfile="$destdir/$destfile"
3044943345d3Smrg	fi
3045943345d3Smrg
3046a7b590b3Smrg	# Deduce the name of the destination old-style object file.
3047a7b590b3Smrg	case $destfile in
3048a7b590b3Smrg	*.lo)
3049a7b590b3Smrg	  func_lo2o "$destfile"
3050a7b590b3Smrg	  staticdest=$func_lo2o_result
3051a7b590b3Smrg	  ;;
3052a7b590b3Smrg	*.$objext)
3053a7b590b3Smrg	  staticdest="$destfile"
3054a7b590b3Smrg	  destfile=
3055a7b590b3Smrg	  ;;
3056a7b590b3Smrg	*)
3057a7b590b3Smrg	  func_fatal_help "cannot copy a libtool object to \`$destfile'"
3058a7b590b3Smrg	  ;;
3059a7b590b3Smrg	esac
3060943345d3Smrg
3061a7b590b3Smrg	# Install the libtool object if requested.
3062a7b590b3Smrg	test -n "$destfile" && \
3063a7b590b3Smrg	  func_show_eval "$install_prog $file $destfile" 'exit $?'
3064943345d3Smrg
3065a7b590b3Smrg	# Install the old object if enabled.
3066a7b590b3Smrg	if test "$build_old_libs" = yes; then
3067a7b590b3Smrg	  # Deduce the name of the old-style object file.
3068a7b590b3Smrg	  func_lo2o "$file"
3069a7b590b3Smrg	  staticobj=$func_lo2o_result
3070a7b590b3Smrg	  func_show_eval "$install_prog \$staticobj \$staticdest" 'exit $?'
3071943345d3Smrg	fi
3072a7b590b3Smrg	exit $EXIT_SUCCESS
3073a7b590b3Smrg	;;
3074943345d3Smrg
3075a7b590b3Smrg      *)
3076a7b590b3Smrg	# Figure out destination file name, if it wasn't already specified.
3077a7b590b3Smrg	if test -n "$destname"; then
3078a7b590b3Smrg	  destfile="$destdir/$destname"
3079a7b590b3Smrg	else
3080a7b590b3Smrg	  func_basename "$file"
3081a7b590b3Smrg	  destfile="$func_basename_result"
3082a7b590b3Smrg	  destfile="$destdir/$destfile"
3083a7b590b3Smrg	fi
3084943345d3Smrg
3085a7b590b3Smrg	# If the file is missing, and there is a .exe on the end, strip it
3086a7b590b3Smrg	# because it is most likely a libtool script we actually want to
3087a7b590b3Smrg	# install
3088a7b590b3Smrg	stripped_ext=""
3089a7b590b3Smrg	case $file in
3090a7b590b3Smrg	  *.exe)
3091a7b590b3Smrg	    if test ! -f "$file"; then
3092a7b590b3Smrg	      func_stripname '' '.exe' "$file"
3093a7b590b3Smrg	      file=$func_stripname_result
3094a7b590b3Smrg	      stripped_ext=".exe"
3095a7b590b3Smrg	    fi
3096a7b590b3Smrg	    ;;
3097a7b590b3Smrg	esac
3098a7b590b3Smrg
3099a7b590b3Smrg	# Do a test to see if this is really a libtool program.
3100a7b590b3Smrg	case $host in
3101a7b590b3Smrg	*cygwin* | *mingw*)
3102a7b590b3Smrg	    if func_ltwrapper_executable_p "$file"; then
3103a7b590b3Smrg	      func_ltwrapper_scriptname "$file"
3104a7b590b3Smrg	      wrapper=$func_ltwrapper_scriptname_result
3105a7b590b3Smrg	    else
3106a7b590b3Smrg	      func_stripname '' '.exe' "$file"
3107a7b590b3Smrg	      wrapper=$func_stripname_result
3108a7b590b3Smrg	    fi
3109a7b590b3Smrg	    ;;
3110943345d3Smrg	*)
3111a7b590b3Smrg	    wrapper=$file
3112a7b590b3Smrg	    ;;
3113a7b590b3Smrg	esac
3114a7b590b3Smrg	if func_ltwrapper_script_p "$wrapper"; then
3115a7b590b3Smrg	  notinst_deplibs=
3116a7b590b3Smrg	  relink_command=
3117a7b590b3Smrg
3118a7b590b3Smrg	  func_source "$wrapper"
3119a7b590b3Smrg
3120a7b590b3Smrg	  # Check the variables that should have been set.
3121a7b590b3Smrg	  test -z "$generated_by_libtool_version" && \
3122a7b590b3Smrg	    func_fatal_error "invalid libtool wrapper script \`$wrapper'"
3123a7b590b3Smrg
3124a7b590b3Smrg	  finalize=yes
3125a7b590b3Smrg	  for lib in $notinst_deplibs; do
3126a7b590b3Smrg	    # Check to see that each library is installed.
3127a7b590b3Smrg	    libdir=
3128a7b590b3Smrg	    if test -f "$lib"; then
3129a7b590b3Smrg	      func_source "$lib"
3130a7b590b3Smrg	    fi
31313e51e026Smrg	    libfile="$libdir/"`$ECHO "$lib" | $SED 's%^.*/%%g'` ### testsuite: skip nested quoting test
3132a7b590b3Smrg	    if test -n "$libdir" && test ! -f "$libfile"; then
3133a7b590b3Smrg	      func_warning "\`$lib' has not been installed in \`$libdir'"
3134a7b590b3Smrg	      finalize=no
3135a7b590b3Smrg	    fi
3136a7b590b3Smrg	  done
3137a7b590b3Smrg
3138a7b590b3Smrg	  relink_command=
3139a7b590b3Smrg	  func_source "$wrapper"
3140a7b590b3Smrg
3141a7b590b3Smrg	  outputname=
3142a7b590b3Smrg	  if test "$fast_install" = no && test -n "$relink_command"; then
3143a7b590b3Smrg	    $opt_dry_run || {
3144a7b590b3Smrg	      if test "$finalize" = yes; then
3145a7b590b3Smrg	        tmpdir=`func_mktempdir`
3146a7b590b3Smrg		func_basename "$file$stripped_ext"
3147a7b590b3Smrg		file="$func_basename_result"
3148a7b590b3Smrg	        outputname="$tmpdir/$file"
3149a7b590b3Smrg	        # Replace the output file specification.
31503e51e026Smrg	        relink_command=`$ECHO "$relink_command" | $SED 's%@OUTPUT@%'"$outputname"'%g'`
3151a7b590b3Smrg
3152a7b590b3Smrg	        $opt_silent || {
3153a7b590b3Smrg	          func_quote_for_expand "$relink_command"
3154a7b590b3Smrg		  eval "func_echo $func_quote_for_expand_result"
3155a7b590b3Smrg	        }
3156a7b590b3Smrg	        if eval "$relink_command"; then :
3157a7b590b3Smrg	          else
3158a7b590b3Smrg		  func_error "error: relink \`$file' with the above command before installing it"
3159a7b590b3Smrg		  $opt_dry_run || ${RM}r "$tmpdir"
3160a7b590b3Smrg		  continue
3161a7b590b3Smrg	        fi
3162a7b590b3Smrg	        file="$outputname"
3163a7b590b3Smrg	      else
3164a7b590b3Smrg	        func_warning "cannot relink \`$file'"
3165a7b590b3Smrg	      fi
3166a7b590b3Smrg	    }
3167a7b590b3Smrg	  else
3168a7b590b3Smrg	    # Install the binary that we compiled earlier.
31693e51e026Smrg	    file=`$ECHO "$file$stripped_ext" | $SED "s%\([^/]*\)$%$objdir/\1%"`
3170943345d3Smrg	  fi
3171a7b590b3Smrg	fi
3172a7b590b3Smrg
3173a7b590b3Smrg	# remove .exe since cygwin /usr/bin/install will append another
3174a7b590b3Smrg	# one anyway
3175a7b590b3Smrg	case $install_prog,$host in
3176a7b590b3Smrg	*/usr/bin/install*,*cygwin*)
3177a7b590b3Smrg	  case $file:$destfile in
3178a7b590b3Smrg	  *.exe:*.exe)
3179a7b590b3Smrg	    # this is ok
3180a7b590b3Smrg	    ;;
3181a7b590b3Smrg	  *.exe:*)
3182a7b590b3Smrg	    destfile=$destfile.exe
3183a7b590b3Smrg	    ;;
3184a7b590b3Smrg	  *:*.exe)
3185a7b590b3Smrg	    func_stripname '' '.exe' "$destfile"
3186a7b590b3Smrg	    destfile=$func_stripname_result
3187a7b590b3Smrg	    ;;
3188a7b590b3Smrg	  esac
3189943345d3Smrg	  ;;
3190943345d3Smrg	esac
3191a7b590b3Smrg	func_show_eval "$install_prog\$stripme \$file \$destfile" 'exit $?'
3192a7b590b3Smrg	$opt_dry_run || if test -n "$outputname"; then
3193a7b590b3Smrg	  ${RM}r "$tmpdir"
3194a7b590b3Smrg	fi
3195a7b590b3Smrg	;;
3196a7b590b3Smrg      esac
3197a7b590b3Smrg    done
3198943345d3Smrg
3199a7b590b3Smrg    for file in $staticlibs; do
3200a7b590b3Smrg      func_basename "$file"
3201a7b590b3Smrg      name="$func_basename_result"
3202a7b590b3Smrg
3203a7b590b3Smrg      # Set up the ranlib parameters.
3204a7b590b3Smrg      oldlib="$destdir/$name"
32053e51e026Smrg      func_to_tool_file "$oldlib" func_convert_file_msys_to_w32
32063e51e026Smrg      tool_oldlib=$func_to_tool_file_result
3207a7b590b3Smrg
3208a7b590b3Smrg      func_show_eval "$install_prog \$file \$oldlib" 'exit $?'
3209a7b590b3Smrg
3210a7b590b3Smrg      if test -n "$stripme" && test -n "$old_striplib"; then
32113e51e026Smrg	func_show_eval "$old_striplib $tool_oldlib" 'exit $?'
3212a7b590b3Smrg      fi
3213a7b590b3Smrg
3214a7b590b3Smrg      # Do each command in the postinstall commands.
3215a7b590b3Smrg      func_execute_cmds "$old_postinstall_cmds" 'exit $?'
3216a7b590b3Smrg    done
3217a7b590b3Smrg
3218a7b590b3Smrg    test -n "$future_libdirs" && \
3219a7b590b3Smrg      func_warning "remember to run \`$progname --finish$future_libdirs'"
3220a7b590b3Smrg
3221a7b590b3Smrg    if test -n "$current_libdirs"; then
3222a7b590b3Smrg      # Maybe just do a dry run.
3223a7b590b3Smrg      $opt_dry_run && current_libdirs=" -n$current_libdirs"
3224a7b590b3Smrg      exec_cmd='$SHELL $progpath $preserve_args --finish$current_libdirs'
3225a7b590b3Smrg    else
3226a7b590b3Smrg      exit $EXIT_SUCCESS
3227a7b590b3Smrg    fi
3228a7b590b3Smrg}
3229a7b590b3Smrg
32303e51e026Smrgtest "$opt_mode" = install && func_mode_install ${1+"$@"}
3231a7b590b3Smrg
3232a7b590b3Smrg
3233a7b590b3Smrg# func_generate_dlsyms outputname originator pic_p
3234a7b590b3Smrg# Extract symbols from dlprefiles and create ${outputname}S.o with
3235a7b590b3Smrg# a dlpreopen symbol table.
3236a7b590b3Smrgfunc_generate_dlsyms ()
3237a7b590b3Smrg{
3238a7b590b3Smrg    $opt_debug
3239a7b590b3Smrg    my_outputname="$1"
3240a7b590b3Smrg    my_originator="$2"
3241a7b590b3Smrg    my_pic_p="${3-no}"
3242a7b590b3Smrg    my_prefix=`$ECHO "$my_originator" | sed 's%[^a-zA-Z0-9]%_%g'`
3243a7b590b3Smrg    my_dlsyms=
3244a7b590b3Smrg
3245a7b590b3Smrg    if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then
3246a7b590b3Smrg      if test -n "$NM" && test -n "$global_symbol_pipe"; then
3247a7b590b3Smrg	my_dlsyms="${my_outputname}S.c"
3248a7b590b3Smrg      else
3249a7b590b3Smrg	func_error "not configured to extract global symbols from dlpreopened files"
3250a7b590b3Smrg      fi
3251a7b590b3Smrg    fi
3252a7b590b3Smrg
3253a7b590b3Smrg    if test -n "$my_dlsyms"; then
3254a7b590b3Smrg      case $my_dlsyms in
3255a7b590b3Smrg      "") ;;
3256a7b590b3Smrg      *.c)
3257a7b590b3Smrg	# Discover the nlist of each of the dlfiles.
3258a7b590b3Smrg	nlist="$output_objdir/${my_outputname}.nm"
3259a7b590b3Smrg
3260a7b590b3Smrg	func_show_eval "$RM $nlist ${nlist}S ${nlist}T"
3261a7b590b3Smrg
3262a7b590b3Smrg	# Parse the name list into a source file.
3263a7b590b3Smrg	func_verbose "creating $output_objdir/$my_dlsyms"
3264a7b590b3Smrg
3265a7b590b3Smrg	$opt_dry_run || $ECHO > "$output_objdir/$my_dlsyms" "\
3266a7b590b3Smrg/* $my_dlsyms - symbol resolution table for \`$my_outputname' dlsym emulation. */
3267a7b590b3Smrg/* Generated by $PROGRAM (GNU $PACKAGE$TIMESTAMP) $VERSION */
3268a7b590b3Smrg
3269a7b590b3Smrg#ifdef __cplusplus
3270a7b590b3Smrgextern \"C\" {
3271a7b590b3Smrg#endif
3272a7b590b3Smrg
32733e51e026Smrg#if defined(__GNUC__) && (((__GNUC__ == 4) && (__GNUC_MINOR__ >= 4)) || (__GNUC__ > 4))
32743e51e026Smrg#pragma GCC diagnostic ignored \"-Wstrict-prototypes\"
32753e51e026Smrg#endif
32763e51e026Smrg
32773e51e026Smrg/* Keep this code in sync between libtool.m4, ltmain, lt_system.h, and tests.  */
32783e51e026Smrg#if defined(_WIN32) || defined(__CYGWIN__) || defined(_WIN32_WCE)
32793e51e026Smrg/* DATA imports from DLLs on WIN32 con't be const, because runtime
32803e51e026Smrg   relocations are performed -- see ld's documentation on pseudo-relocs.  */
32813e51e026Smrg# define LT_DLSYM_CONST
32823e51e026Smrg#elif defined(__osf__)
32833e51e026Smrg/* This system does not cope well with relocations in const data.  */
32843e51e026Smrg# define LT_DLSYM_CONST
32853e51e026Smrg#else
32863e51e026Smrg# define LT_DLSYM_CONST const
32873e51e026Smrg#endif
32883e51e026Smrg
3289a7b590b3Smrg/* External symbol declarations for the compiler. */\
3290a7b590b3Smrg"
3291a7b590b3Smrg
3292a7b590b3Smrg	if test "$dlself" = yes; then
3293a7b590b3Smrg	  func_verbose "generating symbol list for \`$output'"
3294a7b590b3Smrg
3295a7b590b3Smrg	  $opt_dry_run || echo ': @PROGRAM@ ' > "$nlist"
3296a7b590b3Smrg
3297a7b590b3Smrg	  # Add our own program objects to the symbol list.
32983e51e026Smrg	  progfiles=`$ECHO "$objs$old_deplibs" | $SP2NL | $SED "$lo2o" | $NL2SP`
3299a7b590b3Smrg	  for progfile in $progfiles; do
33003e51e026Smrg	    func_to_tool_file "$progfile" func_convert_file_msys_to_w32
33013e51e026Smrg	    func_verbose "extracting global C symbols from \`$func_to_tool_file_result'"
33023e51e026Smrg	    $opt_dry_run || eval "$NM $func_to_tool_file_result | $global_symbol_pipe >> '$nlist'"
3303a7b590b3Smrg	  done
3304a7b590b3Smrg
3305a7b590b3Smrg	  if test -n "$exclude_expsyms"; then
3306a7b590b3Smrg	    $opt_dry_run || {
3307a7b590b3Smrg	      eval '$EGREP -v " ($exclude_expsyms)$" "$nlist" > "$nlist"T'
3308a7b590b3Smrg	      eval '$MV "$nlist"T "$nlist"'
3309a7b590b3Smrg	    }
3310943345d3Smrg	  fi
3311a7b590b3Smrg
3312a7b590b3Smrg	  if test -n "$export_symbols_regex"; then
3313a7b590b3Smrg	    $opt_dry_run || {
3314a7b590b3Smrg	      eval '$EGREP -e "$export_symbols_regex" "$nlist" > "$nlist"T'
3315a7b590b3Smrg	      eval '$MV "$nlist"T "$nlist"'
3316a7b590b3Smrg	    }
3317a7b590b3Smrg	  fi
3318a7b590b3Smrg
3319a7b590b3Smrg	  # Prepare the list of exported symbols
3320a7b590b3Smrg	  if test -z "$export_symbols"; then
3321a7b590b3Smrg	    export_symbols="$output_objdir/$outputname.exp"
3322a7b590b3Smrg	    $opt_dry_run || {
3323a7b590b3Smrg	      $RM $export_symbols
3324a7b590b3Smrg	      eval "${SED} -n -e '/^: @PROGRAM@ $/d' -e 's/^.* \(.*\)$/\1/p' "'< "$nlist" > "$export_symbols"'
3325a7b590b3Smrg	      case $host in
3326a7b590b3Smrg	      *cygwin* | *mingw* | *cegcc* )
3327a7b590b3Smrg                eval "echo EXPORTS "'> "$output_objdir/$outputname.def"'
3328a7b590b3Smrg                eval 'cat "$export_symbols" >> "$output_objdir/$outputname.def"'
3329a7b590b3Smrg	        ;;
3330a7b590b3Smrg	      esac
3331a7b590b3Smrg	    }
3332943345d3Smrg	  else
3333a7b590b3Smrg	    $opt_dry_run || {
3334a7b590b3Smrg	      eval "${SED} -e 's/\([].[*^$]\)/\\\\\1/g' -e 's/^/ /' -e 's/$/$/'"' < "$export_symbols" > "$output_objdir/$outputname.exp"'
3335a7b590b3Smrg	      eval '$GREP -f "$output_objdir/$outputname.exp" < "$nlist" > "$nlist"T'
3336a7b590b3Smrg	      eval '$MV "$nlist"T "$nlist"'
3337a7b590b3Smrg	      case $host in
33383e51e026Smrg	        *cygwin* | *mingw* | *cegcc* )
3339a7b590b3Smrg	          eval "echo EXPORTS "'> "$output_objdir/$outputname.def"'
3340a7b590b3Smrg	          eval 'cat "$nlist" >> "$output_objdir/$outputname.def"'
3341a7b590b3Smrg	          ;;
3342a7b590b3Smrg	      esac
3343a7b590b3Smrg	    }
3344943345d3Smrg	  fi
3345a7b590b3Smrg	fi
3346943345d3Smrg
3347a7b590b3Smrg	for dlprefile in $dlprefiles; do
3348a7b590b3Smrg	  func_verbose "extracting global C symbols from \`$dlprefile'"
3349a7b590b3Smrg	  func_basename "$dlprefile"
3350a7b590b3Smrg	  name="$func_basename_result"
33513e51e026Smrg          case $host in
33523e51e026Smrg	    *cygwin* | *mingw* | *cegcc* )
33533e51e026Smrg	      # if an import library, we need to obtain dlname
33543e51e026Smrg	      if func_win32_import_lib_p "$dlprefile"; then
33553e51e026Smrg	        func_tr_sh "$dlprefile"
33563e51e026Smrg	        eval "curr_lafile=\$libfile_$func_tr_sh_result"
33573e51e026Smrg	        dlprefile_dlbasename=""
33583e51e026Smrg	        if test -n "$curr_lafile" && func_lalib_p "$curr_lafile"; then
33593e51e026Smrg	          # Use subshell, to avoid clobbering current variable values
33603e51e026Smrg	          dlprefile_dlname=`source "$curr_lafile" && echo "$dlname"`
33613e51e026Smrg	          if test -n "$dlprefile_dlname" ; then
33623e51e026Smrg	            func_basename "$dlprefile_dlname"
33633e51e026Smrg	            dlprefile_dlbasename="$func_basename_result"
33643e51e026Smrg	          else
33653e51e026Smrg	            # no lafile. user explicitly requested -dlpreopen <import library>.
33663e51e026Smrg	            $sharedlib_from_linklib_cmd "$dlprefile"
33673e51e026Smrg	            dlprefile_dlbasename=$sharedlib_from_linklib_result
33683e51e026Smrg	          fi
33693e51e026Smrg	        fi
33703e51e026Smrg	        $opt_dry_run || {
33713e51e026Smrg	          if test -n "$dlprefile_dlbasename" ; then
33723e51e026Smrg	            eval '$ECHO ": $dlprefile_dlbasename" >> "$nlist"'
33733e51e026Smrg	          else
33743e51e026Smrg	            func_warning "Could not compute DLL name from $name"
33753e51e026Smrg	            eval '$ECHO ": $name " >> "$nlist"'
33763e51e026Smrg	          fi
33773e51e026Smrg	          func_to_tool_file "$dlprefile" func_convert_file_msys_to_w32
33783e51e026Smrg	          eval "$NM \"$func_to_tool_file_result\" 2>/dev/null | $global_symbol_pipe |
33793e51e026Smrg	            $SED -e '/I __imp/d' -e 's/I __nm_/D /;s/_nm__//' >> '$nlist'"
33803e51e026Smrg	        }
33813e51e026Smrg	      else # not an import lib
33823e51e026Smrg	        $opt_dry_run || {
33833e51e026Smrg	          eval '$ECHO ": $name " >> "$nlist"'
33843e51e026Smrg	          func_to_tool_file "$dlprefile" func_convert_file_msys_to_w32
33853e51e026Smrg	          eval "$NM \"$func_to_tool_file_result\" 2>/dev/null | $global_symbol_pipe >> '$nlist'"
33863e51e026Smrg	        }
33873e51e026Smrg	      fi
33883e51e026Smrg	    ;;
33893e51e026Smrg	    *)
33903e51e026Smrg	      $opt_dry_run || {
33913e51e026Smrg	        eval '$ECHO ": $name " >> "$nlist"'
33923e51e026Smrg	        func_to_tool_file "$dlprefile" func_convert_file_msys_to_w32
33933e51e026Smrg	        eval "$NM \"$func_to_tool_file_result\" 2>/dev/null | $global_symbol_pipe >> '$nlist'"
33943e51e026Smrg	      }
33953e51e026Smrg	    ;;
33963e51e026Smrg          esac
3397a7b590b3Smrg	done
3398a7b590b3Smrg
3399a7b590b3Smrg	$opt_dry_run || {
3400a7b590b3Smrg	  # Make sure we have at least an empty file.
3401a7b590b3Smrg	  test -f "$nlist" || : > "$nlist"
3402a7b590b3Smrg
3403a7b590b3Smrg	  if test -n "$exclude_expsyms"; then
3404a7b590b3Smrg	    $EGREP -v " ($exclude_expsyms)$" "$nlist" > "$nlist"T
3405a7b590b3Smrg	    $MV "$nlist"T "$nlist"
3406943345d3Smrg	  fi
3407a7b590b3Smrg
3408a7b590b3Smrg	  # Try sorting and uniquifying the output.
3409a7b590b3Smrg	  if $GREP -v "^: " < "$nlist" |
3410a7b590b3Smrg	      if sort -k 3 </dev/null >/dev/null 2>&1; then
3411a7b590b3Smrg		sort -k 3
3412a7b590b3Smrg	      else
3413a7b590b3Smrg		sort +2
3414a7b590b3Smrg	      fi |
3415a7b590b3Smrg	      uniq > "$nlist"S; then
3416a7b590b3Smrg	    :
3417943345d3Smrg	  else
3418a7b590b3Smrg	    $GREP -v "^: " < "$nlist" > "$nlist"S
3419943345d3Smrg	  fi
3420943345d3Smrg
3421a7b590b3Smrg	  if test -f "$nlist"S; then
3422a7b590b3Smrg	    eval "$global_symbol_to_cdecl"' < "$nlist"S >> "$output_objdir/$my_dlsyms"'
3423943345d3Smrg	  else
34243e51e026Smrg	    echo '/* NONE */' >> "$output_objdir/$my_dlsyms"
3425943345d3Smrg	  fi
3426943345d3Smrg
34273e51e026Smrg	  echo >> "$output_objdir/$my_dlsyms" "\
3428943345d3Smrg
3429a7b590b3Smrg/* The mapping between symbol names and symbols.  */
3430a7b590b3Smrgtypedef struct {
3431a7b590b3Smrg  const char *name;
3432a7b590b3Smrg  void *address;
3433a7b590b3Smrg} lt_dlsymlist;
34343e51e026Smrgextern LT_DLSYM_CONST lt_dlsymlist
3435a7b590b3Smrglt_${my_prefix}_LTX_preloaded_symbols[];
34363e51e026SmrgLT_DLSYM_CONST lt_dlsymlist
3437a7b590b3Smrglt_${my_prefix}_LTX_preloaded_symbols[] =
3438a7b590b3Smrg{\
3439a7b590b3Smrg  { \"$my_originator\", (void *) 0 },"
3440943345d3Smrg
3441a7b590b3Smrg	  case $need_lib_prefix in
3442a7b590b3Smrg	  no)
3443a7b590b3Smrg	    eval "$global_symbol_to_c_name_address" < "$nlist" >> "$output_objdir/$my_dlsyms"
3444a7b590b3Smrg	    ;;
3445a7b590b3Smrg	  *)
3446a7b590b3Smrg	    eval "$global_symbol_to_c_name_address_lib_prefix" < "$nlist" >> "$output_objdir/$my_dlsyms"
3447a7b590b3Smrg	    ;;
3448a7b590b3Smrg	  esac
34493e51e026Smrg	  echo >> "$output_objdir/$my_dlsyms" "\
3450a7b590b3Smrg  {0, (void *) 0}
3451a7b590b3Smrg};
3452943345d3Smrg
3453a7b590b3Smrg/* This works around a problem in FreeBSD linker */
3454a7b590b3Smrg#ifdef FREEBSD_WORKAROUND
3455a7b590b3Smrgstatic const void *lt_preloaded_setup() {
3456a7b590b3Smrg  return lt_${my_prefix}_LTX_preloaded_symbols;
3457a7b590b3Smrg}
3458a7b590b3Smrg#endif
3459a7b590b3Smrg
3460a7b590b3Smrg#ifdef __cplusplus
3461a7b590b3Smrg}
3462a7b590b3Smrg#endif\
3463a7b590b3Smrg"
3464a7b590b3Smrg	} # !$opt_dry_run
3465a7b590b3Smrg
3466a7b590b3Smrg	pic_flag_for_symtable=
3467a7b590b3Smrg	case "$compile_command " in
3468a7b590b3Smrg	*" -static "*) ;;
3469a7b590b3Smrg	*)
3470a7b590b3Smrg	  case $host in
3471a7b590b3Smrg	  # compiling the symbol table file with pic_flag works around
3472a7b590b3Smrg	  # a FreeBSD bug that causes programs to crash when -lm is
3473a7b590b3Smrg	  # linked before any other PIC object.  But we must not use
3474a7b590b3Smrg	  # pic_flag when linking with -static.  The problem exists in
3475a7b590b3Smrg	  # FreeBSD 2.2.6 and is fixed in FreeBSD 3.1.
34763e51e026Smrg	  *-*-freebsd2.*|*-*-freebsd3.0*|*-*-freebsdelf3.0*)
3477a7b590b3Smrg	    pic_flag_for_symtable=" $pic_flag -DFREEBSD_WORKAROUND" ;;
3478a7b590b3Smrg	  *-*-hpux*)
3479a7b590b3Smrg	    pic_flag_for_symtable=" $pic_flag"  ;;
3480a7b590b3Smrg	  *)
3481a7b590b3Smrg	    if test "X$my_pic_p" != Xno; then
3482a7b590b3Smrg	      pic_flag_for_symtable=" $pic_flag"
3483943345d3Smrg	    fi
3484a7b590b3Smrg	    ;;
3485a7b590b3Smrg	  esac
3486a7b590b3Smrg	  ;;
3487a7b590b3Smrg	esac
3488a7b590b3Smrg	symtab_cflags=
3489a7b590b3Smrg	for arg in $LTCFLAGS; do
3490a7b590b3Smrg	  case $arg in
3491a7b590b3Smrg	  -pie | -fpie | -fPIE) ;;
34923e51e026Smrg	  *) func_append symtab_cflags " $arg" ;;
3493a7b590b3Smrg	  esac
3494a7b590b3Smrg	done
3495943345d3Smrg
3496a7b590b3Smrg	# Now compile the dynamic symbol file.
3497a7b590b3Smrg	func_show_eval '(cd $output_objdir && $LTCC$symtab_cflags -c$no_builtin_flag$pic_flag_for_symtable "$my_dlsyms")' 'exit $?'
3498943345d3Smrg
3499a7b590b3Smrg	# Clean up the generated files.
3500a7b590b3Smrg	func_show_eval '$RM "$output_objdir/$my_dlsyms" "$nlist" "${nlist}S" "${nlist}T"'
3501943345d3Smrg
3502a7b590b3Smrg	# Transform the symbol file into the correct name.
3503a7b590b3Smrg	symfileobj="$output_objdir/${my_outputname}S.$objext"
3504a7b590b3Smrg	case $host in
3505a7b590b3Smrg	*cygwin* | *mingw* | *cegcc* )
3506a7b590b3Smrg	  if test -f "$output_objdir/$my_outputname.def"; then
35073e51e026Smrg	    compile_command=`$ECHO "$compile_command" | $SED "s%@SYMFILE@%$output_objdir/$my_outputname.def $symfileobj%"`
35083e51e026Smrg	    finalize_command=`$ECHO "$finalize_command" | $SED "s%@SYMFILE@%$output_objdir/$my_outputname.def $symfileobj%"`
3509a7b590b3Smrg	  else
35103e51e026Smrg	    compile_command=`$ECHO "$compile_command" | $SED "s%@SYMFILE@%$symfileobj%"`
35113e51e026Smrg	    finalize_command=`$ECHO "$finalize_command" | $SED "s%@SYMFILE@%$symfileobj%"`
3512943345d3Smrg	  fi
3513a7b590b3Smrg	  ;;
3514a7b590b3Smrg	*)
35153e51e026Smrg	  compile_command=`$ECHO "$compile_command" | $SED "s%@SYMFILE@%$symfileobj%"`
35163e51e026Smrg	  finalize_command=`$ECHO "$finalize_command" | $SED "s%@SYMFILE@%$symfileobj%"`
3517a7b590b3Smrg	  ;;
3518a7b590b3Smrg	esac
3519a7b590b3Smrg	;;
3520a7b590b3Smrg      *)
3521a7b590b3Smrg	func_fatal_error "unknown suffix for \`$my_dlsyms'"
3522a7b590b3Smrg	;;
3523a7b590b3Smrg      esac
3524a7b590b3Smrg    else
3525a7b590b3Smrg      # We keep going just in case the user didn't refer to
3526a7b590b3Smrg      # lt_preloaded_symbols.  The linker will fail if global_symbol_pipe
3527a7b590b3Smrg      # really was required.
3528943345d3Smrg
3529a7b590b3Smrg      # Nullify the symbol file.
35303e51e026Smrg      compile_command=`$ECHO "$compile_command" | $SED "s% @SYMFILE@%%"`
35313e51e026Smrg      finalize_command=`$ECHO "$finalize_command" | $SED "s% @SYMFILE@%%"`
3532a7b590b3Smrg    fi
3533a7b590b3Smrg}
3534943345d3Smrg
3535a7b590b3Smrg# func_win32_libid arg
3536a7b590b3Smrg# return the library type of file 'arg'
3537a7b590b3Smrg#
3538a7b590b3Smrg# Need a lot of goo to handle *both* DLLs and import libs
3539a7b590b3Smrg# Has to be a shell function in order to 'eat' the argument
3540a7b590b3Smrg# that is supplied when $file_magic_command is called.
35413e51e026Smrg# Despite the name, also deal with 64 bit binaries.
3542a7b590b3Smrgfunc_win32_libid ()
3543a7b590b3Smrg{
3544a7b590b3Smrg  $opt_debug
3545a7b590b3Smrg  win32_libid_type="unknown"
3546a7b590b3Smrg  win32_fileres=`file -L $1 2>/dev/null`
3547a7b590b3Smrg  case $win32_fileres in
3548a7b590b3Smrg  *ar\ archive\ import\ library*) # definitely import
3549a7b590b3Smrg    win32_libid_type="x86 archive import"
3550a7b590b3Smrg    ;;
3551a7b590b3Smrg  *ar\ archive*) # could be an import, or static
35523e51e026Smrg    # Keep the egrep pattern in sync with the one in _LT_CHECK_MAGIC_METHOD.
3553a7b590b3Smrg    if eval $OBJDUMP -f $1 | $SED -e '10q' 2>/dev/null |
35543e51e026Smrg       $EGREP 'file format (pei*-i386(.*architecture: i386)?|pe-arm-wince|pe-x86-64)' >/dev/null; then
35553e51e026Smrg      func_to_tool_file "$1" func_convert_file_msys_to_w32
35563e51e026Smrg      win32_nmres=`eval $NM -f posix -A \"$func_to_tool_file_result\" |
3557a7b590b3Smrg	$SED -n -e '
3558a7b590b3Smrg	    1,100{
3559a7b590b3Smrg		/ I /{
3560a7b590b3Smrg		    s,.*,import,
3561a7b590b3Smrg		    p
3562a7b590b3Smrg		    q
3563a7b590b3Smrg		}
3564a7b590b3Smrg	    }'`
3565a7b590b3Smrg      case $win32_nmres in
3566a7b590b3Smrg      import*)  win32_libid_type="x86 archive import";;
3567a7b590b3Smrg      *)        win32_libid_type="x86 archive static";;
3568a7b590b3Smrg      esac
3569a7b590b3Smrg    fi
3570a7b590b3Smrg    ;;
3571a7b590b3Smrg  *DLL*)
3572a7b590b3Smrg    win32_libid_type="x86 DLL"
3573a7b590b3Smrg    ;;
3574a7b590b3Smrg  *executable*) # but shell scripts are "executable" too...
3575a7b590b3Smrg    case $win32_fileres in
3576a7b590b3Smrg    *MS\ Windows\ PE\ Intel*)
3577a7b590b3Smrg      win32_libid_type="x86 DLL"
3578a7b590b3Smrg      ;;
3579a7b590b3Smrg    esac
3580a7b590b3Smrg    ;;
3581a7b590b3Smrg  esac
3582a7b590b3Smrg  $ECHO "$win32_libid_type"
3583a7b590b3Smrg}
3584943345d3Smrg
35853e51e026Smrg# func_cygming_dll_for_implib ARG
35863e51e026Smrg#
35873e51e026Smrg# Platform-specific function to extract the
35883e51e026Smrg# name of the DLL associated with the specified
35893e51e026Smrg# import library ARG.
35903e51e026Smrg# Invoked by eval'ing the libtool variable
35913e51e026Smrg#    $sharedlib_from_linklib_cmd
35923e51e026Smrg# Result is available in the variable
35933e51e026Smrg#    $sharedlib_from_linklib_result
35943e51e026Smrgfunc_cygming_dll_for_implib ()
35953e51e026Smrg{
35963e51e026Smrg  $opt_debug
35973e51e026Smrg  sharedlib_from_linklib_result=`$DLLTOOL --identify-strict --identify "$1"`
35983e51e026Smrg}
35993e51e026Smrg
36003e51e026Smrg# func_cygming_dll_for_implib_fallback_core SECTION_NAME LIBNAMEs
36013e51e026Smrg#
36023e51e026Smrg# The is the core of a fallback implementation of a
36033e51e026Smrg# platform-specific function to extract the name of the
36043e51e026Smrg# DLL associated with the specified import library LIBNAME.
36053e51e026Smrg#
36063e51e026Smrg# SECTION_NAME is either .idata$6 or .idata$7, depending
36073e51e026Smrg# on the platform and compiler that created the implib.
36083e51e026Smrg#
36093e51e026Smrg# Echos the name of the DLL associated with the
36103e51e026Smrg# specified import library.
36113e51e026Smrgfunc_cygming_dll_for_implib_fallback_core ()
36123e51e026Smrg{
36133e51e026Smrg  $opt_debug
36143e51e026Smrg  match_literal=`$ECHO "$1" | $SED "$sed_make_literal_regex"`
36153e51e026Smrg  $OBJDUMP -s --section "$1" "$2" 2>/dev/null |
36163e51e026Smrg    $SED '/^Contents of section '"$match_literal"':/{
36173e51e026Smrg      # Place marker at beginning of archive member dllname section
36183e51e026Smrg      s/.*/====MARK====/
36193e51e026Smrg      p
36203e51e026Smrg      d
36213e51e026Smrg    }
36223e51e026Smrg    # These lines can sometimes be longer than 43 characters, but
36233e51e026Smrg    # are always uninteresting
36243e51e026Smrg    /:[	 ]*file format pe[i]\{,1\}-/d
36253e51e026Smrg    /^In archive [^:]*:/d
36263e51e026Smrg    # Ensure marker is printed
36273e51e026Smrg    /^====MARK====/p
36283e51e026Smrg    # Remove all lines with less than 43 characters
36293e51e026Smrg    /^.\{43\}/!d
36303e51e026Smrg    # From remaining lines, remove first 43 characters
36313e51e026Smrg    s/^.\{43\}//' |
36323e51e026Smrg    $SED -n '
36333e51e026Smrg      # Join marker and all lines until next marker into a single line
36343e51e026Smrg      /^====MARK====/ b para
36353e51e026Smrg      H
36363e51e026Smrg      $ b para
36373e51e026Smrg      b
36383e51e026Smrg      :para
36393e51e026Smrg      x
36403e51e026Smrg      s/\n//g
36413e51e026Smrg      # Remove the marker
36423e51e026Smrg      s/^====MARK====//
36433e51e026Smrg      # Remove trailing dots and whitespace
36443e51e026Smrg      s/[\. \t]*$//
36453e51e026Smrg      # Print
36463e51e026Smrg      /./p' |
36473e51e026Smrg    # we now have a list, one entry per line, of the stringified
36483e51e026Smrg    # contents of the appropriate section of all members of the
36493e51e026Smrg    # archive which possess that section. Heuristic: eliminate
36503e51e026Smrg    # all those which have a first or second character that is
36513e51e026Smrg    # a '.' (that is, objdump's representation of an unprintable
36523e51e026Smrg    # character.) This should work for all archives with less than
36533e51e026Smrg    # 0x302f exports -- but will fail for DLLs whose name actually
36543e51e026Smrg    # begins with a literal '.' or a single character followed by
36553e51e026Smrg    # a '.'.
36563e51e026Smrg    #
36573e51e026Smrg    # Of those that remain, print the first one.
36583e51e026Smrg    $SED -e '/^\./d;/^.\./d;q'
36593e51e026Smrg}
36603e51e026Smrg
36613e51e026Smrg# func_cygming_gnu_implib_p ARG
36623e51e026Smrg# This predicate returns with zero status (TRUE) if
36633e51e026Smrg# ARG is a GNU/binutils-style import library. Returns
36643e51e026Smrg# with nonzero status (FALSE) otherwise.
36653e51e026Smrgfunc_cygming_gnu_implib_p ()
36663e51e026Smrg{
36673e51e026Smrg  $opt_debug
36683e51e026Smrg  func_to_tool_file "$1" func_convert_file_msys_to_w32
36693e51e026Smrg  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)$'`
36703e51e026Smrg  test -n "$func_cygming_gnu_implib_tmp"
36713e51e026Smrg}
36723e51e026Smrg
36733e51e026Smrg# func_cygming_ms_implib_p ARG
36743e51e026Smrg# This predicate returns with zero status (TRUE) if
36753e51e026Smrg# ARG is an MS-style import library. Returns
36763e51e026Smrg# with nonzero status (FALSE) otherwise.
36773e51e026Smrgfunc_cygming_ms_implib_p ()
36783e51e026Smrg{
36793e51e026Smrg  $opt_debug
36803e51e026Smrg  func_to_tool_file "$1" func_convert_file_msys_to_w32
36813e51e026Smrg  func_cygming_ms_implib_tmp=`$NM "$func_to_tool_file_result" | eval "$global_symbol_pipe" | $GREP '_NULL_IMPORT_DESCRIPTOR'`
36823e51e026Smrg  test -n "$func_cygming_ms_implib_tmp"
36833e51e026Smrg}
36843e51e026Smrg
36853e51e026Smrg# func_cygming_dll_for_implib_fallback ARG
36863e51e026Smrg# Platform-specific function to extract the
36873e51e026Smrg# name of the DLL associated with the specified
36883e51e026Smrg# import library ARG.
36893e51e026Smrg#
36903e51e026Smrg# This fallback implementation is for use when $DLLTOOL
36913e51e026Smrg# does not support the --identify-strict option.
36923e51e026Smrg# Invoked by eval'ing the libtool variable
36933e51e026Smrg#    $sharedlib_from_linklib_cmd
36943e51e026Smrg# Result is available in the variable
36953e51e026Smrg#    $sharedlib_from_linklib_result
36963e51e026Smrgfunc_cygming_dll_for_implib_fallback ()
36973e51e026Smrg{
36983e51e026Smrg  $opt_debug
36993e51e026Smrg  if func_cygming_gnu_implib_p "$1" ; then
37003e51e026Smrg    # binutils import library
37013e51e026Smrg    sharedlib_from_linklib_result=`func_cygming_dll_for_implib_fallback_core '.idata$7' "$1"`
37023e51e026Smrg  elif func_cygming_ms_implib_p "$1" ; then
37033e51e026Smrg    # ms-generated import library
37043e51e026Smrg    sharedlib_from_linklib_result=`func_cygming_dll_for_implib_fallback_core '.idata$6' "$1"`
37053e51e026Smrg  else
37063e51e026Smrg    # unknown
37073e51e026Smrg    sharedlib_from_linklib_result=""
37083e51e026Smrg  fi
37093e51e026Smrg}
3710943345d3Smrg
3711943345d3Smrg
3712a7b590b3Smrg# func_extract_an_archive dir oldlib
3713a7b590b3Smrgfunc_extract_an_archive ()
3714a7b590b3Smrg{
3715a7b590b3Smrg    $opt_debug
3716a7b590b3Smrg    f_ex_an_ar_dir="$1"; shift
3717a7b590b3Smrg    f_ex_an_ar_oldlib="$1"
37183e51e026Smrg    if test "$lock_old_archive_extraction" = yes; then
37193e51e026Smrg      lockfile=$f_ex_an_ar_oldlib.lock
37203e51e026Smrg      until $opt_dry_run || ln "$progpath" "$lockfile" 2>/dev/null; do
37213e51e026Smrg	func_echo "Waiting for $lockfile to be removed"
37223e51e026Smrg	sleep 2
37233e51e026Smrg      done
37243e51e026Smrg    fi
37253e51e026Smrg    func_show_eval "(cd \$f_ex_an_ar_dir && $AR x \"\$f_ex_an_ar_oldlib\")" \
37263e51e026Smrg		   'stat=$?; rm -f "$lockfile"; exit $stat'
37273e51e026Smrg    if test "$lock_old_archive_extraction" = yes; then
37283e51e026Smrg      $opt_dry_run || rm -f "$lockfile"
37293e51e026Smrg    fi
3730a7b590b3Smrg    if ($AR t "$f_ex_an_ar_oldlib" | sort | sort -uc >/dev/null 2>&1); then
3731a7b590b3Smrg     :
3732a7b590b3Smrg    else
3733a7b590b3Smrg      func_fatal_error "object name conflicts in archive: $f_ex_an_ar_dir/$f_ex_an_ar_oldlib"
3734a7b590b3Smrg    fi
3735a7b590b3Smrg}
3736943345d3Smrg
3737943345d3Smrg
3738a7b590b3Smrg# func_extract_archives gentop oldlib ...
3739a7b590b3Smrgfunc_extract_archives ()
3740a7b590b3Smrg{
3741a7b590b3Smrg    $opt_debug
3742a7b590b3Smrg    my_gentop="$1"; shift
3743a7b590b3Smrg    my_oldlibs=${1+"$@"}
3744a7b590b3Smrg    my_oldobjs=""
3745a7b590b3Smrg    my_xlib=""
3746a7b590b3Smrg    my_xabs=""
3747a7b590b3Smrg    my_xdir=""
3748943345d3Smrg
3749a7b590b3Smrg    for my_xlib in $my_oldlibs; do
3750a7b590b3Smrg      # Extract the objects.
3751a7b590b3Smrg      case $my_xlib in
3752a7b590b3Smrg	[\\/]* | [A-Za-z]:[\\/]*) my_xabs="$my_xlib" ;;
3753a7b590b3Smrg	*) my_xabs=`pwd`"/$my_xlib" ;;
3754a7b590b3Smrg      esac
3755a7b590b3Smrg      func_basename "$my_xlib"
3756a7b590b3Smrg      my_xlib="$func_basename_result"
3757a7b590b3Smrg      my_xlib_u=$my_xlib
3758a7b590b3Smrg      while :; do
3759a7b590b3Smrg        case " $extracted_archives " in
3760a7b590b3Smrg	*" $my_xlib_u "*)
3761a7b590b3Smrg	  func_arith $extracted_serial + 1
3762a7b590b3Smrg	  extracted_serial=$func_arith_result
3763a7b590b3Smrg	  my_xlib_u=lt$extracted_serial-$my_xlib ;;
3764a7b590b3Smrg	*) break ;;
3765a7b590b3Smrg	esac
3766a7b590b3Smrg      done
3767a7b590b3Smrg      extracted_archives="$extracted_archives $my_xlib_u"
3768a7b590b3Smrg      my_xdir="$my_gentop/$my_xlib_u"
3769943345d3Smrg
3770a7b590b3Smrg      func_mkdir_p "$my_xdir"
3771943345d3Smrg
3772a7b590b3Smrg      case $host in
3773a7b590b3Smrg      *-darwin*)
3774a7b590b3Smrg	func_verbose "Extracting $my_xabs"
3775a7b590b3Smrg	# Do not bother doing anything if just a dry run
3776a7b590b3Smrg	$opt_dry_run || {
3777a7b590b3Smrg	  darwin_orig_dir=`pwd`
3778a7b590b3Smrg	  cd $my_xdir || exit $?
3779a7b590b3Smrg	  darwin_archive=$my_xabs
3780a7b590b3Smrg	  darwin_curdir=`pwd`
3781a7b590b3Smrg	  darwin_base_archive=`basename "$darwin_archive"`
3782a7b590b3Smrg	  darwin_arches=`$LIPO -info "$darwin_archive" 2>/dev/null | $GREP Architectures 2>/dev/null || true`
3783a7b590b3Smrg	  if test -n "$darwin_arches"; then
3784a7b590b3Smrg	    darwin_arches=`$ECHO "$darwin_arches" | $SED -e 's/.*are://'`
3785a7b590b3Smrg	    darwin_arch=
3786a7b590b3Smrg	    func_verbose "$darwin_base_archive has multiple architectures $darwin_arches"
3787a7b590b3Smrg	    for darwin_arch in  $darwin_arches ; do
3788a7b590b3Smrg	      func_mkdir_p "unfat-$$/${darwin_base_archive}-${darwin_arch}"
3789a7b590b3Smrg	      $LIPO -thin $darwin_arch -output "unfat-$$/${darwin_base_archive}-${darwin_arch}/${darwin_base_archive}" "${darwin_archive}"
3790a7b590b3Smrg	      cd "unfat-$$/${darwin_base_archive}-${darwin_arch}"
3791a7b590b3Smrg	      func_extract_an_archive "`pwd`" "${darwin_base_archive}"
3792a7b590b3Smrg	      cd "$darwin_curdir"
3793a7b590b3Smrg	      $RM "unfat-$$/${darwin_base_archive}-${darwin_arch}/${darwin_base_archive}"
3794a7b590b3Smrg	    done # $darwin_arches
3795a7b590b3Smrg            ## Okay now we've a bunch of thin objects, gotta fatten them up :)
3796a7b590b3Smrg	    darwin_filelist=`find unfat-$$ -type f -name \*.o -print -o -name \*.lo -print | $SED -e "$basename" | sort -u`
3797a7b590b3Smrg	    darwin_file=
3798a7b590b3Smrg	    darwin_files=
3799a7b590b3Smrg	    for darwin_file in $darwin_filelist; do
38003e51e026Smrg	      darwin_files=`find unfat-$$ -name $darwin_file -print | sort | $NL2SP`
3801a7b590b3Smrg	      $LIPO -create -output "$darwin_file" $darwin_files
3802a7b590b3Smrg	    done # $darwin_filelist
3803a7b590b3Smrg	    $RM -rf unfat-$$
3804a7b590b3Smrg	    cd "$darwin_orig_dir"
3805943345d3Smrg	  else
3806a7b590b3Smrg	    cd $darwin_orig_dir
3807a7b590b3Smrg	    func_extract_an_archive "$my_xdir" "$my_xabs"
3808a7b590b3Smrg	  fi # $darwin_arches
3809a7b590b3Smrg	} # !$opt_dry_run
3810a7b590b3Smrg	;;
3811a7b590b3Smrg      *)
3812a7b590b3Smrg        func_extract_an_archive "$my_xdir" "$my_xabs"
3813a7b590b3Smrg	;;
3814a7b590b3Smrg      esac
38153e51e026Smrg      my_oldobjs="$my_oldobjs "`find $my_xdir -name \*.$objext -print -o -name \*.lo -print | sort | $NL2SP`
3816a7b590b3Smrg    done
3817943345d3Smrg
3818a7b590b3Smrg    func_extract_archives_result="$my_oldobjs"
3819a7b590b3Smrg}
3820943345d3Smrg
3821943345d3Smrg
38223e51e026Smrg# func_emit_wrapper [arg=no]
38233e51e026Smrg#
38243e51e026Smrg# Emit a libtool wrapper script on stdout.
38253e51e026Smrg# Don't directly open a file because we may want to
38263e51e026Smrg# incorporate the script contents within a cygwin/mingw
38273e51e026Smrg# wrapper executable.  Must ONLY be called from within
38283e51e026Smrg# func_mode_link because it depends on a number of variables
38293e51e026Smrg# set therein.
3830a7b590b3Smrg#
38313e51e026Smrg# ARG is the value that the WRAPPER_SCRIPT_BELONGS_IN_OBJDIR
38323e51e026Smrg# variable will take.  If 'yes', then the emitted script
38333e51e026Smrg# will assume that the directory in which it is stored is
38343e51e026Smrg# the $objdir directory.  This is a cygwin/mingw-specific
38353e51e026Smrg# behavior.
38363e51e026Smrgfunc_emit_wrapper ()
3837a7b590b3Smrg{
38383e51e026Smrg	func_emit_wrapper_arg1=${1-no}
3839943345d3Smrg
3840a7b590b3Smrg	$ECHO "\
3841a7b590b3Smrg#! $SHELL
3842943345d3Smrg
3843a7b590b3Smrg# $output - temporary wrapper script for $objdir/$outputname
3844a7b590b3Smrg# Generated by $PROGRAM (GNU $PACKAGE$TIMESTAMP) $VERSION
3845a7b590b3Smrg#
3846a7b590b3Smrg# The $output program cannot be directly executed until all the libtool
3847a7b590b3Smrg# libraries that it depends on are installed.
3848a7b590b3Smrg#
3849a7b590b3Smrg# This wrapper script should never be moved out of the build directory.
3850a7b590b3Smrg# If it is, it will not operate correctly.
3851943345d3Smrg
3852a7b590b3Smrg# Sed substitution that helps us do robust quoting.  It backslashifies
3853a7b590b3Smrg# metacharacters that are still active within double-quoted strings.
3854a7b590b3Smrgsed_quote_subst='$sed_quote_subst'
3855943345d3Smrg
3856a7b590b3Smrg# Be Bourne compatible
3857a7b590b3Smrgif test -n \"\${ZSH_VERSION+set}\" && (emulate sh) >/dev/null 2>&1; then
3858a7b590b3Smrg  emulate sh
3859a7b590b3Smrg  NULLCMD=:
3860a7b590b3Smrg  # Zsh 3.x and 4.x performs word splitting on \${1+\"\$@\"}, which
3861a7b590b3Smrg  # is contrary to our usage.  Disable this feature.
3862a7b590b3Smrg  alias -g '\${1+\"\$@\"}'='\"\$@\"'
3863a7b590b3Smrg  setopt NO_GLOB_SUBST
3864a7b590b3Smrgelse
3865a7b590b3Smrg  case \`(set -o) 2>/dev/null\` in *posix*) set -o posix;; esac
3866a7b590b3Smrgfi
3867a7b590b3SmrgBIN_SH=xpg4; export BIN_SH # for Tru64
3868a7b590b3SmrgDUALCASE=1; export DUALCASE # for MKS sh
3869943345d3Smrg
3870a7b590b3Smrg# The HP-UX ksh and POSIX shell print the target directory to stdout
3871a7b590b3Smrg# if CDPATH is set.
3872a7b590b3Smrg(unset CDPATH) >/dev/null 2>&1 && unset CDPATH
3873943345d3Smrg
3874a7b590b3Smrgrelink_command=\"$relink_command\"
3875943345d3Smrg
3876a7b590b3Smrg# This environment variable determines our operation mode.
3877a7b590b3Smrgif test \"\$libtool_install_magic\" = \"$magic\"; then
3878a7b590b3Smrg  # install mode needs the following variables:
3879a7b590b3Smrg  generated_by_libtool_version='$macro_version'
3880a7b590b3Smrg  notinst_deplibs='$notinst_deplibs'
3881a7b590b3Smrgelse
3882a7b590b3Smrg  # When we are sourced in execute mode, \$file and \$ECHO are already set.
3883a7b590b3Smrg  if test \"\$libtool_execute_magic\" != \"$magic\"; then
38843e51e026Smrg    file=\"\$0\""
38853e51e026Smrg
38863e51e026Smrg    qECHO=`$ECHO "$ECHO" | $SED "$sed_quote_subst"`
38873e51e026Smrg    $ECHO "\
38883e51e026Smrg
38893e51e026Smrg# A function that is used when there is no print builtin or printf.
38903e51e026Smrgfunc_fallback_echo ()
38913e51e026Smrg{
38923e51e026Smrg  eval 'cat <<_LTECHO_EOF
38933e51e026Smrg\$1
38943e51e026Smrg_LTECHO_EOF'
38953e51e026Smrg}
38963e51e026Smrg    ECHO=\"$qECHO\"
38973e51e026Smrg  fi
38983e51e026Smrg
38993e51e026Smrg# Very basic option parsing. These options are (a) specific to
39003e51e026Smrg# the libtool wrapper, (b) are identical between the wrapper
39013e51e026Smrg# /script/ and the wrapper /executable/ which is used only on
39023e51e026Smrg# windows platforms, and (c) all begin with the string "--lt-"
39033e51e026Smrg# (application programs are unlikely to have options which match
39043e51e026Smrg# this pattern).
39053e51e026Smrg#
39063e51e026Smrg# There are only two supported options: --lt-debug and
39073e51e026Smrg# --lt-dump-script. There is, deliberately, no --lt-help.
39083e51e026Smrg#
39093e51e026Smrg# The first argument to this parsing function should be the
39103e51e026Smrg# script's $0 value, followed by "$@".
39113e51e026Smrglt_option_debug=
39123e51e026Smrgfunc_parse_lt_options ()
39133e51e026Smrg{
39143e51e026Smrg  lt_script_arg0=\$0
39153e51e026Smrg  shift
39163e51e026Smrg  for lt_opt
39173e51e026Smrg  do
39183e51e026Smrg    case \"\$lt_opt\" in
39193e51e026Smrg    --lt-debug) lt_option_debug=1 ;;
39203e51e026Smrg    --lt-dump-script)
39213e51e026Smrg        lt_dump_D=\`\$ECHO \"X\$lt_script_arg0\" | $SED -e 's/^X//' -e 's%/[^/]*$%%'\`
39223e51e026Smrg        test \"X\$lt_dump_D\" = \"X\$lt_script_arg0\" && lt_dump_D=.
39233e51e026Smrg        lt_dump_F=\`\$ECHO \"X\$lt_script_arg0\" | $SED -e 's/^X//' -e 's%^.*/%%'\`
39243e51e026Smrg        cat \"\$lt_dump_D/\$lt_dump_F\"
39253e51e026Smrg        exit 0
39263e51e026Smrg      ;;
39273e51e026Smrg    --lt-*)
39283e51e026Smrg        \$ECHO \"Unrecognized --lt- option: '\$lt_opt'\" 1>&2
39293e51e026Smrg        exit 1
39303e51e026Smrg      ;;
39313e51e026Smrg    esac
39323e51e026Smrg  done
39333e51e026Smrg
39343e51e026Smrg  # Print the debug banner immediately:
39353e51e026Smrg  if test -n \"\$lt_option_debug\"; then
39363e51e026Smrg    echo \"${outputname}:${output}:\${LINENO}: libtool wrapper (GNU $PACKAGE$TIMESTAMP) $VERSION\" 1>&2
39373e51e026Smrg  fi
39383e51e026Smrg}
39393e51e026Smrg
39403e51e026Smrg# Used when --lt-debug. Prints its arguments to stdout
39413e51e026Smrg# (redirection is the responsibility of the caller)
39423e51e026Smrgfunc_lt_dump_args ()
39433e51e026Smrg{
39443e51e026Smrg  lt_dump_args_N=1;
39453e51e026Smrg  for lt_arg
39463e51e026Smrg  do
39473e51e026Smrg    \$ECHO \"${outputname}:${output}:\${LINENO}: newargv[\$lt_dump_args_N]: \$lt_arg\"
39483e51e026Smrg    lt_dump_args_N=\`expr \$lt_dump_args_N + 1\`
39493e51e026Smrg  done
39503e51e026Smrg}
39513e51e026Smrg
39523e51e026Smrg# Core function for launching the target application
39533e51e026Smrgfunc_exec_program_core ()
39543e51e026Smrg{
3955a7b590b3Smrg"
39563e51e026Smrg  case $host in
39573e51e026Smrg  # Backslashes separate directories on plain windows
39583e51e026Smrg  *-*-mingw | *-*-os2* | *-cegcc*)
39593e51e026Smrg    $ECHO "\
39603e51e026Smrg      if test -n \"\$lt_option_debug\"; then
39613e51e026Smrg        \$ECHO \"${outputname}:${output}:\${LINENO}: newargv[0]: \$progdir\\\\\$program\" 1>&2
39623e51e026Smrg        func_lt_dump_args \${1+\"\$@\"} 1>&2
39633e51e026Smrg      fi
39643e51e026Smrg      exec \"\$progdir\\\\\$program\" \${1+\"\$@\"}
39653e51e026Smrg"
39663e51e026Smrg    ;;
39673e51e026Smrg
39683e51e026Smrg  *)
39693e51e026Smrg    $ECHO "\
39703e51e026Smrg      if test -n \"\$lt_option_debug\"; then
39713e51e026Smrg        \$ECHO \"${outputname}:${output}:\${LINENO}: newargv[0]: \$progdir/\$program\" 1>&2
39723e51e026Smrg        func_lt_dump_args \${1+\"\$@\"} 1>&2
39733e51e026Smrg      fi
39743e51e026Smrg      exec \"\$progdir/\$program\" \${1+\"\$@\"}
39753e51e026Smrg"
39763e51e026Smrg    ;;
39773e51e026Smrg  esac
39783e51e026Smrg  $ECHO "\
39793e51e026Smrg      \$ECHO \"\$0: cannot exec \$program \$*\" 1>&2
39803e51e026Smrg      exit 1
39813e51e026Smrg}
39823e51e026Smrg
39833e51e026Smrg# A function to encapsulate launching the target application
39843e51e026Smrg# Strips options in the --lt-* namespace from \$@ and
39853e51e026Smrg# launches target application with the remaining arguments.
39863e51e026Smrgfunc_exec_program ()
39873e51e026Smrg{
39883e51e026Smrg  case \" \$* \" in
39893e51e026Smrg  *\\ --lt-*)
39903e51e026Smrg    for lt_wr_arg
39913e51e026Smrg    do
39923e51e026Smrg      case \$lt_wr_arg in
39933e51e026Smrg      --lt-*) ;;
39943e51e026Smrg      *) set x \"\$@\" \"\$lt_wr_arg\"; shift;;
39953e51e026Smrg      esac
39963e51e026Smrg      shift
39973e51e026Smrg    done ;;
39983e51e026Smrg  esac
39993e51e026Smrg  func_exec_program_core \${1+\"\$@\"}
40003e51e026Smrg}
40013e51e026Smrg
40023e51e026Smrg  # Parse options
40033e51e026Smrg  func_parse_lt_options \"\$0\" \${1+\"\$@\"}
4004943345d3Smrg
4005a7b590b3Smrg  # Find the directory that this script lives in.
40063e51e026Smrg  thisdir=\`\$ECHO \"\$file\" | $SED 's%/[^/]*$%%'\`
4007a7b590b3Smrg  test \"x\$thisdir\" = \"x\$file\" && thisdir=.
4008943345d3Smrg
4009a7b590b3Smrg  # Follow symbolic links until we get to the real thisdir.
40103e51e026Smrg  file=\`ls -ld \"\$file\" | $SED -n 's/.*-> //p'\`
4011a7b590b3Smrg  while test -n \"\$file\"; do
40123e51e026Smrg    destdir=\`\$ECHO \"\$file\" | $SED 's%/[^/]*\$%%'\`
4013943345d3Smrg
4014a7b590b3Smrg    # If there was a directory component, then change thisdir.
4015a7b590b3Smrg    if test \"x\$destdir\" != \"x\$file\"; then
4016a7b590b3Smrg      case \"\$destdir\" in
4017a7b590b3Smrg      [\\\\/]* | [A-Za-z]:[\\\\/]*) thisdir=\"\$destdir\" ;;
4018a7b590b3Smrg      *) thisdir=\"\$thisdir/\$destdir\" ;;
4019943345d3Smrg      esac
4020a7b590b3Smrg    fi
4021943345d3Smrg
40223e51e026Smrg    file=\`\$ECHO \"\$file\" | $SED 's%^.*/%%'\`
40233e51e026Smrg    file=\`ls -ld \"\$thisdir/\$file\" | $SED -n 's/.*-> //p'\`
4024a7b590b3Smrg  done
4025943345d3Smrg
4026a7b590b3Smrg  # Usually 'no', except on cygwin/mingw when embedded into
4027a7b590b3Smrg  # the cwrapper.
40283e51e026Smrg  WRAPPER_SCRIPT_BELONGS_IN_OBJDIR=$func_emit_wrapper_arg1
4029a7b590b3Smrg  if test \"\$WRAPPER_SCRIPT_BELONGS_IN_OBJDIR\" = \"yes\"; then
4030a7b590b3Smrg    # special case for '.'
4031a7b590b3Smrg    if test \"\$thisdir\" = \".\"; then
4032a7b590b3Smrg      thisdir=\`pwd\`
4033a7b590b3Smrg    fi
4034a7b590b3Smrg    # remove .libs from thisdir
4035a7b590b3Smrg    case \"\$thisdir\" in
40363e51e026Smrg    *[\\\\/]$objdir ) thisdir=\`\$ECHO \"\$thisdir\" | $SED 's%[\\\\/][^\\\\/]*$%%'\` ;;
4037a7b590b3Smrg    $objdir )   thisdir=. ;;
4038a7b590b3Smrg    esac
4039a7b590b3Smrg  fi
4040a7b590b3Smrg
4041a7b590b3Smrg  # Try to get the absolute directory name.
4042a7b590b3Smrg  absdir=\`cd \"\$thisdir\" && pwd\`
4043a7b590b3Smrg  test -n \"\$absdir\" && thisdir=\"\$absdir\"
4044a7b590b3Smrg"
4045a7b590b3Smrg
4046a7b590b3Smrg	if test "$fast_install" = yes; then
4047a7b590b3Smrg	  $ECHO "\
4048a7b590b3Smrg  program=lt-'$outputname'$exeext
4049a7b590b3Smrg  progdir=\"\$thisdir/$objdir\"
4050a7b590b3Smrg
4051a7b590b3Smrg  if test ! -f \"\$progdir/\$program\" ||
4052a7b590b3Smrg     { file=\`ls -1dt \"\$progdir/\$program\" \"\$progdir/../\$program\" 2>/dev/null | ${SED} 1q\`; \\
4053a7b590b3Smrg       test \"X\$file\" != \"X\$progdir/\$program\"; }; then
4054a7b590b3Smrg
4055a7b590b3Smrg    file=\"\$\$-\$program\"
4056a7b590b3Smrg
4057a7b590b3Smrg    if test ! -d \"\$progdir\"; then
4058a7b590b3Smrg      $MKDIR \"\$progdir\"
4059a7b590b3Smrg    else
4060a7b590b3Smrg      $RM \"\$progdir/\$file\"
4061a7b590b3Smrg    fi"
4062a7b590b3Smrg
4063a7b590b3Smrg	  $ECHO "\
4064a7b590b3Smrg
4065a7b590b3Smrg    # relink executable if necessary
4066a7b590b3Smrg    if test -n \"\$relink_command\"; then
4067a7b590b3Smrg      if relink_command_output=\`eval \$relink_command 2>&1\`; then :
4068a7b590b3Smrg      else
4069a7b590b3Smrg	$ECHO \"\$relink_command_output\" >&2
4070a7b590b3Smrg	$RM \"\$progdir/\$file\"
4071a7b590b3Smrg	exit 1
4072943345d3Smrg      fi
4073a7b590b3Smrg    fi
4074943345d3Smrg
4075a7b590b3Smrg    $MV \"\$progdir/\$file\" \"\$progdir/\$program\" 2>/dev/null ||
4076a7b590b3Smrg    { $RM \"\$progdir/\$program\";
4077a7b590b3Smrg      $MV \"\$progdir/\$file\" \"\$progdir/\$program\"; }
4078a7b590b3Smrg    $RM \"\$progdir/\$file\"
4079a7b590b3Smrg  fi"
4080a7b590b3Smrg	else
4081a7b590b3Smrg	  $ECHO "\
4082a7b590b3Smrg  program='$outputname'
4083a7b590b3Smrg  progdir=\"\$thisdir/$objdir\"
4084a7b590b3Smrg"
4085943345d3Smrg	fi
4086943345d3Smrg
4087a7b590b3Smrg	$ECHO "\
4088943345d3Smrg
4089a7b590b3Smrg  if test -f \"\$progdir/\$program\"; then"
4090943345d3Smrg
40913e51e026Smrg	# fixup the dll searchpath if we need to.
40923e51e026Smrg	#
40933e51e026Smrg	# Fix the DLL searchpath if we need to.  Do this before prepending
40943e51e026Smrg	# to shlibpath, because on Windows, both are PATH and uninstalled
40953e51e026Smrg	# libraries must come first.
40963e51e026Smrg	if test -n "$dllsearchpath"; then
40973e51e026Smrg	  $ECHO "\
40983e51e026Smrg    # Add the dll search path components to the executable PATH
40993e51e026Smrg    PATH=$dllsearchpath:\$PATH
41003e51e026Smrg"
41013e51e026Smrg	fi
41023e51e026Smrg
4103a7b590b3Smrg	# Export our shlibpath_var if we have one.
4104a7b590b3Smrg	if test "$shlibpath_overrides_runpath" = yes && test -n "$shlibpath_var" && test -n "$temp_rpath"; then
4105a7b590b3Smrg	  $ECHO "\
4106a7b590b3Smrg    # Add our own library path to $shlibpath_var
4107a7b590b3Smrg    $shlibpath_var=\"$temp_rpath\$$shlibpath_var\"
4108a7b590b3Smrg
4109a7b590b3Smrg    # Some systems cannot cope with colon-terminated $shlibpath_var
4110a7b590b3Smrg    # The second colon is a workaround for a bug in BeOS R4 sed
41113e51e026Smrg    $shlibpath_var=\`\$ECHO \"\$$shlibpath_var\" | $SED 's/::*\$//'\`
4112943345d3Smrg
4113a7b590b3Smrg    export $shlibpath_var
4114a7b590b3Smrg"
4115943345d3Smrg	fi
4116943345d3Smrg
4117a7b590b3Smrg	$ECHO "\
4118a7b590b3Smrg    if test \"\$libtool_execute_magic\" != \"$magic\"; then
4119a7b590b3Smrg      # Run the actual program with our arguments.
41203e51e026Smrg      func_exec_program \${1+\"\$@\"}
4121a7b590b3Smrg    fi
4122a7b590b3Smrg  else
4123a7b590b3Smrg    # The program doesn't exist.
4124a7b590b3Smrg    \$ECHO \"\$0: error: \\\`\$progdir/\$program' does not exist\" 1>&2
4125a7b590b3Smrg    \$ECHO \"This script is just a wrapper for \$program.\" 1>&2
41263e51e026Smrg    \$ECHO \"See the $PACKAGE documentation for more information.\" 1>&2
4127a7b590b3Smrg    exit 1
4128a7b590b3Smrg  fi
4129a7b590b3Smrgfi\
4130a7b590b3Smrg"
4131a7b590b3Smrg}
4132943345d3Smrg
4133943345d3Smrg
4134a7b590b3Smrg# func_emit_cwrapperexe_src
4135a7b590b3Smrg# emit the source code for a wrapper executable on stdout
4136a7b590b3Smrg# Must ONLY be called from within func_mode_link because
4137a7b590b3Smrg# it depends on a number of variable set therein.
4138a7b590b3Smrgfunc_emit_cwrapperexe_src ()
4139a7b590b3Smrg{
4140a7b590b3Smrg	cat <<EOF
4141943345d3Smrg
4142a7b590b3Smrg/* $cwrappersource - temporary wrapper executable for $objdir/$outputname
4143a7b590b3Smrg   Generated by $PROGRAM (GNU $PACKAGE$TIMESTAMP) $VERSION
4144943345d3Smrg
4145a7b590b3Smrg   The $output program cannot be directly executed until all the libtool
4146a7b590b3Smrg   libraries that it depends on are installed.
4147943345d3Smrg
4148a7b590b3Smrg   This wrapper executable should never be moved out of the build directory.
4149a7b590b3Smrg   If it is, it will not operate correctly.
4150a7b590b3Smrg*/
4151a7b590b3SmrgEOF
4152a7b590b3Smrg	    cat <<"EOF"
41533e51e026Smrg#ifdef _MSC_VER
41543e51e026Smrg# define _CRT_SECURE_NO_DEPRECATE 1
41553e51e026Smrg#endif
4156a7b590b3Smrg#include <stdio.h>
4157a7b590b3Smrg#include <stdlib.h>
4158a7b590b3Smrg#ifdef _MSC_VER
4159a7b590b3Smrg# include <direct.h>
4160a7b590b3Smrg# include <process.h>
4161a7b590b3Smrg# include <io.h>
4162a7b590b3Smrg#else
4163a7b590b3Smrg# include <unistd.h>
4164a7b590b3Smrg# include <stdint.h>
4165a7b590b3Smrg# ifdef __CYGWIN__
4166a7b590b3Smrg#  include <io.h>
4167a7b590b3Smrg# endif
4168a7b590b3Smrg#endif
4169a7b590b3Smrg#include <malloc.h>
4170a7b590b3Smrg#include <stdarg.h>
4171a7b590b3Smrg#include <assert.h>
4172a7b590b3Smrg#include <string.h>
4173a7b590b3Smrg#include <ctype.h>
4174a7b590b3Smrg#include <errno.h>
4175a7b590b3Smrg#include <fcntl.h>
4176a7b590b3Smrg#include <sys/stat.h>
4177943345d3Smrg
41783e51e026Smrg/* declarations of non-ANSI functions */
41793e51e026Smrg#if defined(__MINGW32__)
41803e51e026Smrg# ifdef __STRICT_ANSI__
41813e51e026Smrgint _putenv (const char *);
41823e51e026Smrg# endif
41833e51e026Smrg#elif defined(__CYGWIN__)
41843e51e026Smrg# ifdef __STRICT_ANSI__
41853e51e026Smrgchar *realpath (const char *, char *);
41863e51e026Smrgint putenv (char *);
41873e51e026Smrgint setenv (const char *, const char *, int);
41883e51e026Smrg# endif
41893e51e026Smrg/* #elif defined (other platforms) ... */
41903e51e026Smrg#endif
41913e51e026Smrg
41923e51e026Smrg/* portability defines, excluding path handling macros */
41933e51e026Smrg#if defined(_MSC_VER)
41943e51e026Smrg# define setmode _setmode
41953e51e026Smrg# define stat    _stat
41963e51e026Smrg# define chmod   _chmod
41973e51e026Smrg# define getcwd  _getcwd
41983e51e026Smrg# define putenv  _putenv
41993e51e026Smrg# define S_IXUSR _S_IEXEC
42003e51e026Smrg# ifndef _INTPTR_T_DEFINED
42013e51e026Smrg#  define _INTPTR_T_DEFINED
42023e51e026Smrg#  define intptr_t int
42033e51e026Smrg# endif
42043e51e026Smrg#elif defined(__MINGW32__)
42053e51e026Smrg# define setmode _setmode
42063e51e026Smrg# define stat    _stat
42073e51e026Smrg# define chmod   _chmod
42083e51e026Smrg# define getcwd  _getcwd
42093e51e026Smrg# define putenv  _putenv
42103e51e026Smrg#elif defined(__CYGWIN__)
42113e51e026Smrg# define HAVE_SETENV
42123e51e026Smrg# define FOPEN_WB "wb"
42133e51e026Smrg/* #elif defined (other platforms) ... */
42143e51e026Smrg#endif
42153e51e026Smrg
4216a7b590b3Smrg#if defined(PATH_MAX)
4217a7b590b3Smrg# define LT_PATHMAX PATH_MAX
4218a7b590b3Smrg#elif defined(MAXPATHLEN)
4219a7b590b3Smrg# define LT_PATHMAX MAXPATHLEN
4220a7b590b3Smrg#else
4221a7b590b3Smrg# define LT_PATHMAX 1024
4222a7b590b3Smrg#endif
4223943345d3Smrg
4224a7b590b3Smrg#ifndef S_IXOTH
4225a7b590b3Smrg# define S_IXOTH 0
4226a7b590b3Smrg#endif
4227a7b590b3Smrg#ifndef S_IXGRP
4228a7b590b3Smrg# define S_IXGRP 0
4229a7b590b3Smrg#endif
4230943345d3Smrg
42313e51e026Smrg/* path handling portability macros */
4232a7b590b3Smrg#ifndef DIR_SEPARATOR
4233a7b590b3Smrg# define DIR_SEPARATOR '/'
4234a7b590b3Smrg# define PATH_SEPARATOR ':'
4235a7b590b3Smrg#endif
4236943345d3Smrg
4237a7b590b3Smrg#if defined (_WIN32) || defined (__MSDOS__) || defined (__DJGPP__) || \
4238a7b590b3Smrg  defined (__OS2__)
4239a7b590b3Smrg# define HAVE_DOS_BASED_FILE_SYSTEM
4240a7b590b3Smrg# define FOPEN_WB "wb"
4241a7b590b3Smrg# ifndef DIR_SEPARATOR_2
4242a7b590b3Smrg#  define DIR_SEPARATOR_2 '\\'
4243a7b590b3Smrg# endif
4244a7b590b3Smrg# ifndef PATH_SEPARATOR_2
4245a7b590b3Smrg#  define PATH_SEPARATOR_2 ';'
4246a7b590b3Smrg# endif
4247a7b590b3Smrg#endif
4248943345d3Smrg
4249a7b590b3Smrg#ifndef DIR_SEPARATOR_2
4250a7b590b3Smrg# define IS_DIR_SEPARATOR(ch) ((ch) == DIR_SEPARATOR)
4251a7b590b3Smrg#else /* DIR_SEPARATOR_2 */
4252a7b590b3Smrg# define IS_DIR_SEPARATOR(ch) \
4253a7b590b3Smrg	(((ch) == DIR_SEPARATOR) || ((ch) == DIR_SEPARATOR_2))
4254a7b590b3Smrg#endif /* DIR_SEPARATOR_2 */
4255943345d3Smrg
4256a7b590b3Smrg#ifndef PATH_SEPARATOR_2
4257a7b590b3Smrg# define IS_PATH_SEPARATOR(ch) ((ch) == PATH_SEPARATOR)
4258a7b590b3Smrg#else /* PATH_SEPARATOR_2 */
4259a7b590b3Smrg# define IS_PATH_SEPARATOR(ch) ((ch) == PATH_SEPARATOR_2)
4260a7b590b3Smrg#endif /* PATH_SEPARATOR_2 */
4261943345d3Smrg
4262a7b590b3Smrg#ifndef FOPEN_WB
4263a7b590b3Smrg# define FOPEN_WB "w"
4264a7b590b3Smrg#endif
4265a7b590b3Smrg#ifndef _O_BINARY
4266a7b590b3Smrg# define _O_BINARY 0
4267a7b590b3Smrg#endif
4268943345d3Smrg
4269a7b590b3Smrg#define XMALLOC(type, num)      ((type *) xmalloc ((num) * sizeof(type)))
4270a7b590b3Smrg#define XFREE(stale) do { \
4271a7b590b3Smrg  if (stale) { free ((void *) stale); stale = 0; } \
4272a7b590b3Smrg} while (0)
4273943345d3Smrg
42743e51e026Smrg#if defined(LT_DEBUGWRAPPER)
42753e51e026Smrgstatic int lt_debug = 1;
4276a7b590b3Smrg#else
42773e51e026Smrgstatic int lt_debug = 0;
4278a7b590b3Smrg#endif
4279943345d3Smrg
42803e51e026Smrgconst char *program_name = "libtool-wrapper"; /* in case xstrdup fails */
4281943345d3Smrg
4282a7b590b3Smrgvoid *xmalloc (size_t num);
4283a7b590b3Smrgchar *xstrdup (const char *string);
4284a7b590b3Smrgconst char *base_name (const char *name);
4285a7b590b3Smrgchar *find_executable (const char *wrapper);
4286a7b590b3Smrgchar *chase_symlinks (const char *pathspec);
4287a7b590b3Smrgint make_executable (const char *path);
4288a7b590b3Smrgint check_executable (const char *path);
4289a7b590b3Smrgchar *strendzap (char *str, const char *pat);
42903e51e026Smrgvoid lt_debugprintf (const char *file, int line, const char *fmt, ...);
42913e51e026Smrgvoid lt_fatal (const char *file, int line, const char *message, ...);
42923e51e026Smrgstatic const char *nonnull (const char *s);
42933e51e026Smrgstatic const char *nonempty (const char *s);
4294a7b590b3Smrgvoid lt_setenv (const char *name, const char *value);
4295a7b590b3Smrgchar *lt_extend_str (const char *orig_value, const char *add, int to_end);
4296a7b590b3Smrgvoid lt_update_exe_path (const char *name, const char *value);
4297a7b590b3Smrgvoid lt_update_lib_path (const char *name, const char *value);
42983e51e026Smrgchar **prepare_spawn (char **argv);
42993e51e026Smrgvoid lt_dump_script (FILE *f);
4300a7b590b3SmrgEOF
4301a7b590b3Smrg
4302a7b590b3Smrg	    cat <<EOF
43033e51e026Smrgvolatile const char * MAGIC_EXE = "$magic_exe";
4304a7b590b3Smrgconst char * LIB_PATH_VARNAME = "$shlibpath_var";
4305a7b590b3SmrgEOF
4306943345d3Smrg
4307a7b590b3Smrg	    if test "$shlibpath_overrides_runpath" = yes && test -n "$shlibpath_var" && test -n "$temp_rpath"; then
43083e51e026Smrg              func_to_host_path "$temp_rpath"
4309a7b590b3Smrg	      cat <<EOF
43103e51e026Smrgconst char * LIB_PATH_VALUE   = "$func_to_host_path_result";
4311a7b590b3SmrgEOF
4312a7b590b3Smrg	    else
4313a7b590b3Smrg	      cat <<"EOF"
4314a7b590b3Smrgconst char * LIB_PATH_VALUE   = "";
4315a7b590b3SmrgEOF
4316943345d3Smrg	    fi
4317943345d3Smrg
4318a7b590b3Smrg	    if test -n "$dllsearchpath"; then
43193e51e026Smrg              func_to_host_path "$dllsearchpath:"
4320a7b590b3Smrg	      cat <<EOF
4321a7b590b3Smrgconst char * EXE_PATH_VARNAME = "PATH";
43223e51e026Smrgconst char * EXE_PATH_VALUE   = "$func_to_host_path_result";
4323943345d3SmrgEOF
4324943345d3Smrg	    else
4325a7b590b3Smrg	      cat <<"EOF"
4326a7b590b3Smrgconst char * EXE_PATH_VARNAME = "";
4327a7b590b3Smrgconst char * EXE_PATH_VALUE   = "";
4328a7b590b3SmrgEOF
4329943345d3Smrg	    fi
4330a7b590b3Smrg
4331a7b590b3Smrg	    if test "$fast_install" = yes; then
4332a7b590b3Smrg	      cat <<EOF
4333a7b590b3Smrgconst char * TARGET_PROGRAM_NAME = "lt-$outputname"; /* hopefully, no .exe */
4334a7b590b3SmrgEOF
4335943345d3Smrg	    else
4336a7b590b3Smrg	      cat <<EOF
4337a7b590b3Smrgconst char * TARGET_PROGRAM_NAME = "$outputname"; /* hopefully, no .exe */
4338a7b590b3SmrgEOF
4339943345d3Smrg	    fi
4340943345d3Smrg
4341943345d3Smrg
4342a7b590b3Smrg	    cat <<"EOF"
4343943345d3Smrg
4344a7b590b3Smrg#define LTWRAPPER_OPTION_PREFIX         "--lt-"
4345943345d3Smrg
4346a7b590b3Smrgstatic const char *ltwrapper_option_prefix = LTWRAPPER_OPTION_PREFIX;
4347a7b590b3Smrgstatic const char *dumpscript_opt       = LTWRAPPER_OPTION_PREFIX "dump-script";
43483e51e026Smrgstatic const char *debug_opt            = LTWRAPPER_OPTION_PREFIX "debug";
4349943345d3Smrg
4350a7b590b3Smrgint
4351a7b590b3Smrgmain (int argc, char *argv[])
4352a7b590b3Smrg{
4353a7b590b3Smrg  char **newargz;
4354a7b590b3Smrg  int  newargc;
4355a7b590b3Smrg  char *tmp_pathspec;
4356a7b590b3Smrg  char *actual_cwrapper_path;
4357a7b590b3Smrg  char *actual_cwrapper_name;
4358a7b590b3Smrg  char *target_name;
4359a7b590b3Smrg  char *lt_argv_zero;
4360a7b590b3Smrg  intptr_t rval = 127;
4361943345d3Smrg
4362a7b590b3Smrg  int i;
4363943345d3Smrg
4364a7b590b3Smrg  program_name = (char *) xstrdup (base_name (argv[0]));
43653e51e026Smrg  newargz = XMALLOC (char *, argc + 1);
4366943345d3Smrg
43673e51e026Smrg  /* very simple arg parsing; don't want to rely on getopt
43683e51e026Smrg   * also, copy all non cwrapper options to newargz, except
43693e51e026Smrg   * argz[0], which is handled differently
43703e51e026Smrg   */
43713e51e026Smrg  newargc=0;
4372a7b590b3Smrg  for (i = 1; i < argc; i++)
4373a7b590b3Smrg    {
4374a7b590b3Smrg      if (strcmp (argv[i], dumpscript_opt) == 0)
4375a7b590b3Smrg	{
4376a7b590b3SmrgEOF
4377a7b590b3Smrg	    case "$host" in
4378a7b590b3Smrg	      *mingw* | *cygwin* )
4379a7b590b3Smrg		# make stdout use "unix" line endings
4380a7b590b3Smrg		echo "          setmode(1,_O_BINARY);"
4381a7b590b3Smrg		;;
4382a7b590b3Smrg	      esac
4383943345d3Smrg
4384a7b590b3Smrg	    cat <<"EOF"
43853e51e026Smrg	  lt_dump_script (stdout);
4386a7b590b3Smrg	  return 0;
4387a7b590b3Smrg	}
43883e51e026Smrg      if (strcmp (argv[i], debug_opt) == 0)
43893e51e026Smrg	{
43903e51e026Smrg          lt_debug = 1;
43913e51e026Smrg          continue;
43923e51e026Smrg	}
43933e51e026Smrg      if (strcmp (argv[i], ltwrapper_option_prefix) == 0)
43943e51e026Smrg        {
43953e51e026Smrg          /* however, if there is an option in the LTWRAPPER_OPTION_PREFIX
43963e51e026Smrg             namespace, but it is not one of the ones we know about and
43973e51e026Smrg             have already dealt with, above (inluding dump-script), then
43983e51e026Smrg             report an error. Otherwise, targets might begin to believe
43993e51e026Smrg             they are allowed to use options in the LTWRAPPER_OPTION_PREFIX
44003e51e026Smrg             namespace. The first time any user complains about this, we'll
44013e51e026Smrg             need to make LTWRAPPER_OPTION_PREFIX a configure-time option
44023e51e026Smrg             or a configure.ac-settable value.
44033e51e026Smrg           */
44043e51e026Smrg          lt_fatal (__FILE__, __LINE__,
44053e51e026Smrg		    "unrecognized %s option: '%s'",
44063e51e026Smrg                    ltwrapper_option_prefix, argv[i]);
44073e51e026Smrg        }
44083e51e026Smrg      /* otherwise ... */
44093e51e026Smrg      newargz[++newargc] = xstrdup (argv[i]);
4410a7b590b3Smrg    }
44113e51e026Smrg  newargz[++newargc] = NULL;
44123e51e026Smrg
44133e51e026SmrgEOF
44143e51e026Smrg	    cat <<EOF
44153e51e026Smrg  /* The GNU banner must be the first non-error debug message */
44163e51e026Smrg  lt_debugprintf (__FILE__, __LINE__, "libtool wrapper (GNU $PACKAGE$TIMESTAMP) $VERSION\n");
44173e51e026SmrgEOF
44183e51e026Smrg	    cat <<"EOF"
44193e51e026Smrg  lt_debugprintf (__FILE__, __LINE__, "(main) argv[0]: %s\n", argv[0]);
44203e51e026Smrg  lt_debugprintf (__FILE__, __LINE__, "(main) program_name: %s\n", program_name);
4421943345d3Smrg
4422a7b590b3Smrg  tmp_pathspec = find_executable (argv[0]);
4423a7b590b3Smrg  if (tmp_pathspec == NULL)
44243e51e026Smrg    lt_fatal (__FILE__, __LINE__, "couldn't find %s", argv[0]);
44253e51e026Smrg  lt_debugprintf (__FILE__, __LINE__,
44263e51e026Smrg                  "(main) found exe (before symlink chase) at: %s\n",
44273e51e026Smrg		  tmp_pathspec);
4428a7b590b3Smrg
4429a7b590b3Smrg  actual_cwrapper_path = chase_symlinks (tmp_pathspec);
44303e51e026Smrg  lt_debugprintf (__FILE__, __LINE__,
44313e51e026Smrg                  "(main) found exe (after symlink chase) at: %s\n",
44323e51e026Smrg		  actual_cwrapper_path);
4433a7b590b3Smrg  XFREE (tmp_pathspec);
4434a7b590b3Smrg
44353e51e026Smrg  actual_cwrapper_name = xstrdup (base_name (actual_cwrapper_path));
4436a7b590b3Smrg  strendzap (actual_cwrapper_path, actual_cwrapper_name);
4437a7b590b3Smrg
4438a7b590b3Smrg  /* wrapper name transforms */
4439a7b590b3Smrg  strendzap (actual_cwrapper_name, ".exe");
4440a7b590b3Smrg  tmp_pathspec = lt_extend_str (actual_cwrapper_name, ".exe", 1);
4441a7b590b3Smrg  XFREE (actual_cwrapper_name);
4442a7b590b3Smrg  actual_cwrapper_name = tmp_pathspec;
4443a7b590b3Smrg  tmp_pathspec = 0;
4444a7b590b3Smrg
4445a7b590b3Smrg  /* target_name transforms -- use actual target program name; might have lt- prefix */
4446a7b590b3Smrg  target_name = xstrdup (base_name (TARGET_PROGRAM_NAME));
4447a7b590b3Smrg  strendzap (target_name, ".exe");
4448a7b590b3Smrg  tmp_pathspec = lt_extend_str (target_name, ".exe", 1);
4449a7b590b3Smrg  XFREE (target_name);
4450a7b590b3Smrg  target_name = tmp_pathspec;
4451a7b590b3Smrg  tmp_pathspec = 0;
4452a7b590b3Smrg
44533e51e026Smrg  lt_debugprintf (__FILE__, __LINE__,
44543e51e026Smrg		  "(main) libtool target name: %s\n",
44553e51e026Smrg		  target_name);
4456a7b590b3SmrgEOF
4457943345d3Smrg
4458a7b590b3Smrg	    cat <<EOF
4459a7b590b3Smrg  newargz[0] =
4460a7b590b3Smrg    XMALLOC (char, (strlen (actual_cwrapper_path) +
4461a7b590b3Smrg		    strlen ("$objdir") + 1 + strlen (actual_cwrapper_name) + 1));
4462a7b590b3Smrg  strcpy (newargz[0], actual_cwrapper_path);
4463a7b590b3Smrg  strcat (newargz[0], "$objdir");
4464a7b590b3Smrg  strcat (newargz[0], "/");
4465a7b590b3SmrgEOF
4466943345d3Smrg
4467a7b590b3Smrg	    cat <<"EOF"
4468a7b590b3Smrg  /* stop here, and copy so we don't have to do this twice */
4469a7b590b3Smrg  tmp_pathspec = xstrdup (newargz[0]);
4470943345d3Smrg
4471a7b590b3Smrg  /* do NOT want the lt- prefix here, so use actual_cwrapper_name */
4472a7b590b3Smrg  strcat (newargz[0], actual_cwrapper_name);
4473943345d3Smrg
4474a7b590b3Smrg  /* DO want the lt- prefix here if it exists, so use target_name */
4475a7b590b3Smrg  lt_argv_zero = lt_extend_str (tmp_pathspec, target_name, 1);
4476a7b590b3Smrg  XFREE (tmp_pathspec);
4477a7b590b3Smrg  tmp_pathspec = NULL;
4478a7b590b3SmrgEOF
4479943345d3Smrg
4480a7b590b3Smrg	    case $host_os in
4481a7b590b3Smrg	      mingw*)
4482a7b590b3Smrg	    cat <<"EOF"
4483a7b590b3Smrg  {
4484a7b590b3Smrg    char* p;
4485a7b590b3Smrg    while ((p = strchr (newargz[0], '\\')) != NULL)
4486a7b590b3Smrg      {
4487a7b590b3Smrg	*p = '/';
4488a7b590b3Smrg      }
4489a7b590b3Smrg    while ((p = strchr (lt_argv_zero, '\\')) != NULL)
4490a7b590b3Smrg      {
4491a7b590b3Smrg	*p = '/';
4492a7b590b3Smrg      }
4493a7b590b3Smrg  }
4494a7b590b3SmrgEOF
4495a7b590b3Smrg	    ;;
4496a7b590b3Smrg	    esac
4497943345d3Smrg
4498a7b590b3Smrg	    cat <<"EOF"
4499a7b590b3Smrg  XFREE (target_name);
4500a7b590b3Smrg  XFREE (actual_cwrapper_path);
4501a7b590b3Smrg  XFREE (actual_cwrapper_name);
4502943345d3Smrg
4503a7b590b3Smrg  lt_setenv ("BIN_SH", "xpg4"); /* for Tru64 */
4504a7b590b3Smrg  lt_setenv ("DUALCASE", "1");  /* for MSK sh */
45053e51e026Smrg  /* Update the DLL searchpath.  EXE_PATH_VALUE ($dllsearchpath) must
45063e51e026Smrg     be prepended before (that is, appear after) LIB_PATH_VALUE ($temp_rpath)
45073e51e026Smrg     because on Windows, both *_VARNAMEs are PATH but uninstalled
45083e51e026Smrg     libraries must come first. */
4509a7b590b3Smrg  lt_update_exe_path (EXE_PATH_VARNAME, EXE_PATH_VALUE);
45103e51e026Smrg  lt_update_lib_path (LIB_PATH_VARNAME, LIB_PATH_VALUE);
4511943345d3Smrg
45123e51e026Smrg  lt_debugprintf (__FILE__, __LINE__, "(main) lt_argv_zero: %s\n",
45133e51e026Smrg		  nonnull (lt_argv_zero));
4514a7b590b3Smrg  for (i = 0; i < newargc; i++)
4515a7b590b3Smrg    {
45163e51e026Smrg      lt_debugprintf (__FILE__, __LINE__, "(main) newargz[%d]: %s\n",
45173e51e026Smrg		      i, nonnull (newargz[i]));
4518a7b590b3Smrg    }
4519943345d3Smrg
4520a7b590b3SmrgEOF
4521943345d3Smrg
4522a7b590b3Smrg	    case $host_os in
4523a7b590b3Smrg	      mingw*)
4524a7b590b3Smrg		cat <<"EOF"
4525a7b590b3Smrg  /* execv doesn't actually work on mingw as expected on unix */
45263e51e026Smrg  newargz = prepare_spawn (newargz);
4527a7b590b3Smrg  rval = _spawnv (_P_WAIT, lt_argv_zero, (const char * const *) newargz);
4528a7b590b3Smrg  if (rval == -1)
4529a7b590b3Smrg    {
4530a7b590b3Smrg      /* failed to start process */
45313e51e026Smrg      lt_debugprintf (__FILE__, __LINE__,
45323e51e026Smrg		      "(main) failed to launch target \"%s\": %s\n",
45333e51e026Smrg		      lt_argv_zero, nonnull (strerror (errno)));
4534a7b590b3Smrg      return 127;
4535a7b590b3Smrg    }
4536a7b590b3Smrg  return rval;
4537a7b590b3SmrgEOF
4538a7b590b3Smrg		;;
4539a7b590b3Smrg	      *)
4540a7b590b3Smrg		cat <<"EOF"
4541a7b590b3Smrg  execv (lt_argv_zero, newargz);
4542a7b590b3Smrg  return rval; /* =127, but avoids unused variable warning */
4543a7b590b3SmrgEOF
4544a7b590b3Smrg		;;
4545a7b590b3Smrg	    esac
4546943345d3Smrg
4547a7b590b3Smrg	    cat <<"EOF"
4548a7b590b3Smrg}
4549943345d3Smrg
4550a7b590b3Smrgvoid *
4551a7b590b3Smrgxmalloc (size_t num)
4552a7b590b3Smrg{
4553a7b590b3Smrg  void *p = (void *) malloc (num);
4554a7b590b3Smrg  if (!p)
45553e51e026Smrg    lt_fatal (__FILE__, __LINE__, "memory exhausted");
4556943345d3Smrg
4557a7b590b3Smrg  return p;
4558a7b590b3Smrg}
4559943345d3Smrg
4560a7b590b3Smrgchar *
4561a7b590b3Smrgxstrdup (const char *string)
4562a7b590b3Smrg{
4563a7b590b3Smrg  return string ? strcpy ((char *) xmalloc (strlen (string) + 1),
4564a7b590b3Smrg			  string) : NULL;
4565a7b590b3Smrg}
4566943345d3Smrg
4567a7b590b3Smrgconst char *
4568a7b590b3Smrgbase_name (const char *name)
4569a7b590b3Smrg{
4570a7b590b3Smrg  const char *base;
4571943345d3Smrg
4572a7b590b3Smrg#if defined (HAVE_DOS_BASED_FILE_SYSTEM)
4573a7b590b3Smrg  /* Skip over the disk name in MSDOS pathnames. */
4574a7b590b3Smrg  if (isalpha ((unsigned char) name[0]) && name[1] == ':')
4575a7b590b3Smrg    name += 2;
4576a7b590b3Smrg#endif
4577943345d3Smrg
4578a7b590b3Smrg  for (base = name; *name; name++)
4579a7b590b3Smrg    if (IS_DIR_SEPARATOR (*name))
4580a7b590b3Smrg      base = name + 1;
4581a7b590b3Smrg  return base;
4582a7b590b3Smrg}
4583943345d3Smrg
4584a7b590b3Smrgint
4585a7b590b3Smrgcheck_executable (const char *path)
4586a7b590b3Smrg{
4587a7b590b3Smrg  struct stat st;
4588943345d3Smrg
45893e51e026Smrg  lt_debugprintf (__FILE__, __LINE__, "(check_executable): %s\n",
45903e51e026Smrg                  nonempty (path));
4591a7b590b3Smrg  if ((!path) || (!*path))
4592a7b590b3Smrg    return 0;
4593943345d3Smrg
4594a7b590b3Smrg  if ((stat (path, &st) >= 0)
4595a7b590b3Smrg      && (st.st_mode & (S_IXUSR | S_IXGRP | S_IXOTH)))
4596a7b590b3Smrg    return 1;
4597a7b590b3Smrg  else
4598a7b590b3Smrg    return 0;
4599a7b590b3Smrg}
4600943345d3Smrg
4601a7b590b3Smrgint
4602a7b590b3Smrgmake_executable (const char *path)
4603a7b590b3Smrg{
4604a7b590b3Smrg  int rval = 0;
4605a7b590b3Smrg  struct stat st;
4606943345d3Smrg
46073e51e026Smrg  lt_debugprintf (__FILE__, __LINE__, "(make_executable): %s\n",
46083e51e026Smrg                  nonempty (path));
4609a7b590b3Smrg  if ((!path) || (!*path))
4610a7b590b3Smrg    return 0;
4611943345d3Smrg
4612a7b590b3Smrg  if (stat (path, &st) >= 0)
4613a7b590b3Smrg    {
4614a7b590b3Smrg      rval = chmod (path, st.st_mode | S_IXOTH | S_IXGRP | S_IXUSR);
4615a7b590b3Smrg    }
4616a7b590b3Smrg  return rval;
4617a7b590b3Smrg}
4618943345d3Smrg
4619a7b590b3Smrg/* Searches for the full path of the wrapper.  Returns
4620a7b590b3Smrg   newly allocated full path name if found, NULL otherwise
4621a7b590b3Smrg   Does not chase symlinks, even on platforms that support them.
4622a7b590b3Smrg*/
4623a7b590b3Smrgchar *
4624a7b590b3Smrgfind_executable (const char *wrapper)
4625a7b590b3Smrg{
4626a7b590b3Smrg  int has_slash = 0;
4627a7b590b3Smrg  const char *p;
4628a7b590b3Smrg  const char *p_next;
4629a7b590b3Smrg  /* static buffer for getcwd */
4630a7b590b3Smrg  char tmp[LT_PATHMAX + 1];
4631a7b590b3Smrg  int tmp_len;
4632a7b590b3Smrg  char *concat_name;
4633943345d3Smrg
46343e51e026Smrg  lt_debugprintf (__FILE__, __LINE__, "(find_executable): %s\n",
46353e51e026Smrg                  nonempty (wrapper));
4636943345d3Smrg
4637a7b590b3Smrg  if ((wrapper == NULL) || (*wrapper == '\0'))
4638a7b590b3Smrg    return NULL;
4639943345d3Smrg
4640a7b590b3Smrg  /* Absolute path? */
4641a7b590b3Smrg#if defined (HAVE_DOS_BASED_FILE_SYSTEM)
4642a7b590b3Smrg  if (isalpha ((unsigned char) wrapper[0]) && wrapper[1] == ':')
4643a7b590b3Smrg    {
4644a7b590b3Smrg      concat_name = xstrdup (wrapper);
4645a7b590b3Smrg      if (check_executable (concat_name))
4646a7b590b3Smrg	return concat_name;
4647a7b590b3Smrg      XFREE (concat_name);
4648a7b590b3Smrg    }
4649a7b590b3Smrg  else
4650a7b590b3Smrg    {
4651a7b590b3Smrg#endif
4652a7b590b3Smrg      if (IS_DIR_SEPARATOR (wrapper[0]))
4653a7b590b3Smrg	{
4654a7b590b3Smrg	  concat_name = xstrdup (wrapper);
4655a7b590b3Smrg	  if (check_executable (concat_name))
4656a7b590b3Smrg	    return concat_name;
4657a7b590b3Smrg	  XFREE (concat_name);
4658a7b590b3Smrg	}
4659a7b590b3Smrg#if defined (HAVE_DOS_BASED_FILE_SYSTEM)
4660a7b590b3Smrg    }
4661a7b590b3Smrg#endif
4662943345d3Smrg
4663a7b590b3Smrg  for (p = wrapper; *p; p++)
4664a7b590b3Smrg    if (*p == '/')
4665a7b590b3Smrg      {
4666a7b590b3Smrg	has_slash = 1;
4667a7b590b3Smrg	break;
4668a7b590b3Smrg      }
4669a7b590b3Smrg  if (!has_slash)
4670a7b590b3Smrg    {
4671a7b590b3Smrg      /* no slashes; search PATH */
4672a7b590b3Smrg      const char *path = getenv ("PATH");
4673a7b590b3Smrg      if (path != NULL)
4674a7b590b3Smrg	{
4675a7b590b3Smrg	  for (p = path; *p; p = p_next)
4676a7b590b3Smrg	    {
4677a7b590b3Smrg	      const char *q;
4678a7b590b3Smrg	      size_t p_len;
4679a7b590b3Smrg	      for (q = p; *q; q++)
4680a7b590b3Smrg		if (IS_PATH_SEPARATOR (*q))
4681a7b590b3Smrg		  break;
4682a7b590b3Smrg	      p_len = q - p;
4683a7b590b3Smrg	      p_next = (*q == '\0' ? q : q + 1);
4684a7b590b3Smrg	      if (p_len == 0)
4685a7b590b3Smrg		{
4686a7b590b3Smrg		  /* empty path: current directory */
4687a7b590b3Smrg		  if (getcwd (tmp, LT_PATHMAX) == NULL)
46883e51e026Smrg		    lt_fatal (__FILE__, __LINE__, "getcwd failed: %s",
46893e51e026Smrg                              nonnull (strerror (errno)));
4690a7b590b3Smrg		  tmp_len = strlen (tmp);
4691a7b590b3Smrg		  concat_name =
4692a7b590b3Smrg		    XMALLOC (char, tmp_len + 1 + strlen (wrapper) + 1);
4693a7b590b3Smrg		  memcpy (concat_name, tmp, tmp_len);
4694a7b590b3Smrg		  concat_name[tmp_len] = '/';
4695a7b590b3Smrg		  strcpy (concat_name + tmp_len + 1, wrapper);
4696a7b590b3Smrg		}
4697a7b590b3Smrg	      else
4698a7b590b3Smrg		{
4699a7b590b3Smrg		  concat_name =
4700a7b590b3Smrg		    XMALLOC (char, p_len + 1 + strlen (wrapper) + 1);
4701a7b590b3Smrg		  memcpy (concat_name, p, p_len);
4702a7b590b3Smrg		  concat_name[p_len] = '/';
4703a7b590b3Smrg		  strcpy (concat_name + p_len + 1, wrapper);
4704a7b590b3Smrg		}
4705a7b590b3Smrg	      if (check_executable (concat_name))
4706a7b590b3Smrg		return concat_name;
4707a7b590b3Smrg	      XFREE (concat_name);
4708a7b590b3Smrg	    }
4709a7b590b3Smrg	}
4710a7b590b3Smrg      /* not found in PATH; assume curdir */
4711a7b590b3Smrg    }
4712a7b590b3Smrg  /* Relative path | not found in path: prepend cwd */
4713a7b590b3Smrg  if (getcwd (tmp, LT_PATHMAX) == NULL)
47143e51e026Smrg    lt_fatal (__FILE__, __LINE__, "getcwd failed: %s",
47153e51e026Smrg              nonnull (strerror (errno)));
4716a7b590b3Smrg  tmp_len = strlen (tmp);
4717a7b590b3Smrg  concat_name = XMALLOC (char, tmp_len + 1 + strlen (wrapper) + 1);
4718a7b590b3Smrg  memcpy (concat_name, tmp, tmp_len);
4719a7b590b3Smrg  concat_name[tmp_len] = '/';
4720a7b590b3Smrg  strcpy (concat_name + tmp_len + 1, wrapper);
4721943345d3Smrg
4722a7b590b3Smrg  if (check_executable (concat_name))
4723a7b590b3Smrg    return concat_name;
4724a7b590b3Smrg  XFREE (concat_name);
4725a7b590b3Smrg  return NULL;
4726a7b590b3Smrg}
4727943345d3Smrg
4728a7b590b3Smrgchar *
4729a7b590b3Smrgchase_symlinks (const char *pathspec)
4730a7b590b3Smrg{
4731a7b590b3Smrg#ifndef S_ISLNK
4732a7b590b3Smrg  return xstrdup (pathspec);
4733a7b590b3Smrg#else
4734a7b590b3Smrg  char buf[LT_PATHMAX];
4735a7b590b3Smrg  struct stat s;
4736a7b590b3Smrg  char *tmp_pathspec = xstrdup (pathspec);
4737a7b590b3Smrg  char *p;
4738a7b590b3Smrg  int has_symlinks = 0;
4739a7b590b3Smrg  while (strlen (tmp_pathspec) && !has_symlinks)
4740a7b590b3Smrg    {
47413e51e026Smrg      lt_debugprintf (__FILE__, __LINE__,
47423e51e026Smrg		      "checking path component for symlinks: %s\n",
47433e51e026Smrg		      tmp_pathspec);
4744a7b590b3Smrg      if (lstat (tmp_pathspec, &s) == 0)
4745a7b590b3Smrg	{
4746a7b590b3Smrg	  if (S_ISLNK (s.st_mode) != 0)
4747a7b590b3Smrg	    {
4748a7b590b3Smrg	      has_symlinks = 1;
4749a7b590b3Smrg	      break;
4750a7b590b3Smrg	    }
4751943345d3Smrg
4752a7b590b3Smrg	  /* search backwards for last DIR_SEPARATOR */
4753a7b590b3Smrg	  p = tmp_pathspec + strlen (tmp_pathspec) - 1;
4754a7b590b3Smrg	  while ((p > tmp_pathspec) && (!IS_DIR_SEPARATOR (*p)))
4755a7b590b3Smrg	    p--;
4756a7b590b3Smrg	  if ((p == tmp_pathspec) && (!IS_DIR_SEPARATOR (*p)))
4757a7b590b3Smrg	    {
4758a7b590b3Smrg	      /* no more DIR_SEPARATORS left */
4759a7b590b3Smrg	      break;
4760a7b590b3Smrg	    }
4761a7b590b3Smrg	  *p = '\0';
4762a7b590b3Smrg	}
4763a7b590b3Smrg      else
4764a7b590b3Smrg	{
47653e51e026Smrg	  lt_fatal (__FILE__, __LINE__,
47663e51e026Smrg		    "error accessing file \"%s\": %s",
47673e51e026Smrg		    tmp_pathspec, nonnull (strerror (errno)));
4768a7b590b3Smrg	}
4769a7b590b3Smrg    }
4770a7b590b3Smrg  XFREE (tmp_pathspec);
4771943345d3Smrg
4772a7b590b3Smrg  if (!has_symlinks)
4773a7b590b3Smrg    {
4774a7b590b3Smrg      return xstrdup (pathspec);
4775a7b590b3Smrg    }
4776943345d3Smrg
4777a7b590b3Smrg  tmp_pathspec = realpath (pathspec, buf);
4778a7b590b3Smrg  if (tmp_pathspec == 0)
4779a7b590b3Smrg    {
47803e51e026Smrg      lt_fatal (__FILE__, __LINE__,
47813e51e026Smrg		"could not follow symlinks for %s", pathspec);
4782a7b590b3Smrg    }
4783a7b590b3Smrg  return xstrdup (tmp_pathspec);
4784a7b590b3Smrg#endif
4785a7b590b3Smrg}
4786943345d3Smrg
4787a7b590b3Smrgchar *
4788a7b590b3Smrgstrendzap (char *str, const char *pat)
4789a7b590b3Smrg{
4790a7b590b3Smrg  size_t len, patlen;
4791943345d3Smrg
4792a7b590b3Smrg  assert (str != NULL);
4793a7b590b3Smrg  assert (pat != NULL);
4794943345d3Smrg
4795a7b590b3Smrg  len = strlen (str);
4796a7b590b3Smrg  patlen = strlen (pat);
4797943345d3Smrg
4798a7b590b3Smrg  if (patlen <= len)
4799a7b590b3Smrg    {
4800a7b590b3Smrg      str += len - patlen;
4801a7b590b3Smrg      if (strcmp (str, pat) == 0)
4802a7b590b3Smrg	*str = '\0';
4803a7b590b3Smrg    }
4804a7b590b3Smrg  return str;
4805a7b590b3Smrg}
4806943345d3Smrg
48073e51e026Smrgvoid
48083e51e026Smrglt_debugprintf (const char *file, int line, const char *fmt, ...)
48093e51e026Smrg{
48103e51e026Smrg  va_list args;
48113e51e026Smrg  if (lt_debug)
48123e51e026Smrg    {
48133e51e026Smrg      (void) fprintf (stderr, "%s:%s:%d: ", program_name, file, line);
48143e51e026Smrg      va_start (args, fmt);
48153e51e026Smrg      (void) vfprintf (stderr, fmt, args);
48163e51e026Smrg      va_end (args);
48173e51e026Smrg    }
48183e51e026Smrg}
48193e51e026Smrg
4820a7b590b3Smrgstatic void
48213e51e026Smrglt_error_core (int exit_status, const char *file,
48223e51e026Smrg	       int line, const char *mode,
4823a7b590b3Smrg	       const char *message, va_list ap)
4824a7b590b3Smrg{
48253e51e026Smrg  fprintf (stderr, "%s:%s:%d: %s: ", program_name, file, line, mode);
4826a7b590b3Smrg  vfprintf (stderr, message, ap);
4827a7b590b3Smrg  fprintf (stderr, ".\n");
4828943345d3Smrg
4829a7b590b3Smrg  if (exit_status >= 0)
4830a7b590b3Smrg    exit (exit_status);
4831a7b590b3Smrg}
4832943345d3Smrg
4833a7b590b3Smrgvoid
48343e51e026Smrglt_fatal (const char *file, int line, const char *message, ...)
4835a7b590b3Smrg{
4836a7b590b3Smrg  va_list ap;
4837a7b590b3Smrg  va_start (ap, message);
48383e51e026Smrg  lt_error_core (EXIT_FAILURE, file, line, "FATAL", message, ap);
4839a7b590b3Smrg  va_end (ap);
4840a7b590b3Smrg}
4841943345d3Smrg
48423e51e026Smrgstatic const char *
48433e51e026Smrgnonnull (const char *s)
48443e51e026Smrg{
48453e51e026Smrg  return s ? s : "(null)";
48463e51e026Smrg}
48473e51e026Smrg
48483e51e026Smrgstatic const char *
48493e51e026Smrgnonempty (const char *s)
48503e51e026Smrg{
48513e51e026Smrg  return (s && !*s) ? "(empty)" : nonnull (s);
48523e51e026Smrg}
48533e51e026Smrg
4854a7b590b3Smrgvoid
4855a7b590b3Smrglt_setenv (const char *name, const char *value)
4856a7b590b3Smrg{
48573e51e026Smrg  lt_debugprintf (__FILE__, __LINE__,
48583e51e026Smrg		  "(lt_setenv) setting '%s' to '%s'\n",
48593e51e026Smrg                  nonnull (name), nonnull (value));
4860a7b590b3Smrg  {
4861a7b590b3Smrg#ifdef HAVE_SETENV
4862a7b590b3Smrg    /* always make a copy, for consistency with !HAVE_SETENV */
4863a7b590b3Smrg    char *str = xstrdup (value);
4864a7b590b3Smrg    setenv (name, str, 1);
4865a7b590b3Smrg#else
4866a7b590b3Smrg    int len = strlen (name) + 1 + strlen (value) + 1;
4867a7b590b3Smrg    char *str = XMALLOC (char, len);
4868a7b590b3Smrg    sprintf (str, "%s=%s", name, value);
4869a7b590b3Smrg    if (putenv (str) != EXIT_SUCCESS)
4870a7b590b3Smrg      {
4871a7b590b3Smrg        XFREE (str);
4872a7b590b3Smrg      }
4873a7b590b3Smrg#endif
4874a7b590b3Smrg  }
4875a7b590b3Smrg}
4876943345d3Smrg
4877a7b590b3Smrgchar *
4878a7b590b3Smrglt_extend_str (const char *orig_value, const char *add, int to_end)
4879a7b590b3Smrg{
4880a7b590b3Smrg  char *new_value;
4881a7b590b3Smrg  if (orig_value && *orig_value)
4882a7b590b3Smrg    {
4883a7b590b3Smrg      int orig_value_len = strlen (orig_value);
4884a7b590b3Smrg      int add_len = strlen (add);
4885a7b590b3Smrg      new_value = XMALLOC (char, add_len + orig_value_len + 1);
4886a7b590b3Smrg      if (to_end)
4887a7b590b3Smrg        {
4888a7b590b3Smrg          strcpy (new_value, orig_value);
4889a7b590b3Smrg          strcpy (new_value + orig_value_len, add);
4890a7b590b3Smrg        }
4891a7b590b3Smrg      else
4892a7b590b3Smrg        {
4893a7b590b3Smrg          strcpy (new_value, add);
4894a7b590b3Smrg          strcpy (new_value + add_len, orig_value);
4895a7b590b3Smrg        }
4896a7b590b3Smrg    }
4897a7b590b3Smrg  else
4898a7b590b3Smrg    {
4899a7b590b3Smrg      new_value = xstrdup (add);
4900a7b590b3Smrg    }
4901a7b590b3Smrg  return new_value;
4902a7b590b3Smrg}
4903943345d3Smrg
4904a7b590b3Smrgvoid
4905a7b590b3Smrglt_update_exe_path (const char *name, const char *value)
4906a7b590b3Smrg{
49073e51e026Smrg  lt_debugprintf (__FILE__, __LINE__,
49083e51e026Smrg		  "(lt_update_exe_path) modifying '%s' by prepending '%s'\n",
49093e51e026Smrg                  nonnull (name), nonnull (value));
4910943345d3Smrg
4911a7b590b3Smrg  if (name && *name && value && *value)
4912a7b590b3Smrg    {
4913a7b590b3Smrg      char *new_value = lt_extend_str (getenv (name), value, 0);
4914a7b590b3Smrg      /* some systems can't cope with a ':'-terminated path #' */
4915a7b590b3Smrg      int len = strlen (new_value);
4916a7b590b3Smrg      while (((len = strlen (new_value)) > 0) && IS_PATH_SEPARATOR (new_value[len-1]))
4917a7b590b3Smrg        {
4918a7b590b3Smrg          new_value[len-1] = '\0';
4919a7b590b3Smrg        }
4920a7b590b3Smrg      lt_setenv (name, new_value);
4921a7b590b3Smrg      XFREE (new_value);
4922a7b590b3Smrg    }
4923a7b590b3Smrg}
4924943345d3Smrg
4925a7b590b3Smrgvoid
4926a7b590b3Smrglt_update_lib_path (const char *name, const char *value)
4927a7b590b3Smrg{
49283e51e026Smrg  lt_debugprintf (__FILE__, __LINE__,
49293e51e026Smrg		  "(lt_update_lib_path) modifying '%s' by prepending '%s'\n",
49303e51e026Smrg                  nonnull (name), nonnull (value));
4931943345d3Smrg
4932a7b590b3Smrg  if (name && *name && value && *value)
4933a7b590b3Smrg    {
4934a7b590b3Smrg      char *new_value = lt_extend_str (getenv (name), value, 0);
4935a7b590b3Smrg      lt_setenv (name, new_value);
4936a7b590b3Smrg      XFREE (new_value);
4937a7b590b3Smrg    }
4938a7b590b3Smrg}
4939943345d3Smrg
49403e51e026SmrgEOF
49413e51e026Smrg	    case $host_os in
49423e51e026Smrg	      mingw*)
49433e51e026Smrg		cat <<"EOF"
49443e51e026Smrg
49453e51e026Smrg/* Prepares an argument vector before calling spawn().
49463e51e026Smrg   Note that spawn() does not by itself call the command interpreter
49473e51e026Smrg     (getenv ("COMSPEC") != NULL ? getenv ("COMSPEC") :
49483e51e026Smrg      ({ OSVERSIONINFO v; v.dwOSVersionInfoSize = sizeof(OSVERSIONINFO);
49493e51e026Smrg         GetVersionEx(&v);
49503e51e026Smrg         v.dwPlatformId == VER_PLATFORM_WIN32_NT;
49513e51e026Smrg      }) ? "cmd.exe" : "command.com").
49523e51e026Smrg   Instead it simply concatenates the arguments, separated by ' ', and calls
49533e51e026Smrg   CreateProcess().  We must quote the arguments since Win32 CreateProcess()
49543e51e026Smrg   interprets characters like ' ', '\t', '\\', '"' (but not '<' and '>') in a
49553e51e026Smrg   special way:
49563e51e026Smrg   - Space and tab are interpreted as delimiters. They are not treated as
49573e51e026Smrg     delimiters if they are surrounded by double quotes: "...".
49583e51e026Smrg   - Unescaped double quotes are removed from the input. Their only effect is
49593e51e026Smrg     that within double quotes, space and tab are treated like normal
49603e51e026Smrg     characters.
49613e51e026Smrg   - Backslashes not followed by double quotes are not special.
49623e51e026Smrg   - But 2*n+1 backslashes followed by a double quote become
49633e51e026Smrg     n backslashes followed by a double quote (n >= 0):
49643e51e026Smrg       \" -> "
49653e51e026Smrg       \\\" -> \"
49663e51e026Smrg       \\\\\" -> \\"
49673e51e026Smrg */
49683e51e026Smrg#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"
49693e51e026Smrg#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"
49703e51e026Smrgchar **
49713e51e026Smrgprepare_spawn (char **argv)
49723e51e026Smrg{
49733e51e026Smrg  size_t argc;
49743e51e026Smrg  char **new_argv;
49753e51e026Smrg  size_t i;
49763e51e026Smrg
49773e51e026Smrg  /* Count number of arguments.  */
49783e51e026Smrg  for (argc = 0; argv[argc] != NULL; argc++)
49793e51e026Smrg    ;
49803e51e026Smrg
49813e51e026Smrg  /* Allocate new argument vector.  */
49823e51e026Smrg  new_argv = XMALLOC (char *, argc + 1);
49833e51e026Smrg
49843e51e026Smrg  /* Put quoted arguments into the new argument vector.  */
49853e51e026Smrg  for (i = 0; i < argc; i++)
49863e51e026Smrg    {
49873e51e026Smrg      const char *string = argv[i];
49883e51e026Smrg
49893e51e026Smrg      if (string[0] == '\0')
49903e51e026Smrg	new_argv[i] = xstrdup ("\"\"");
49913e51e026Smrg      else if (strpbrk (string, SHELL_SPECIAL_CHARS) != NULL)
49923e51e026Smrg	{
49933e51e026Smrg	  int quote_around = (strpbrk (string, SHELL_SPACE_CHARS) != NULL);
49943e51e026Smrg	  size_t length;
49953e51e026Smrg	  unsigned int backslashes;
49963e51e026Smrg	  const char *s;
49973e51e026Smrg	  char *quoted_string;
49983e51e026Smrg	  char *p;
49993e51e026Smrg
50003e51e026Smrg	  length = 0;
50013e51e026Smrg	  backslashes = 0;
50023e51e026Smrg	  if (quote_around)
50033e51e026Smrg	    length++;
50043e51e026Smrg	  for (s = string; *s != '\0'; s++)
50053e51e026Smrg	    {
50063e51e026Smrg	      char c = *s;
50073e51e026Smrg	      if (c == '"')
50083e51e026Smrg		length += backslashes + 1;
50093e51e026Smrg	      length++;
50103e51e026Smrg	      if (c == '\\')
50113e51e026Smrg		backslashes++;
50123e51e026Smrg	      else
50133e51e026Smrg		backslashes = 0;
50143e51e026Smrg	    }
50153e51e026Smrg	  if (quote_around)
50163e51e026Smrg	    length += backslashes + 1;
50173e51e026Smrg
50183e51e026Smrg	  quoted_string = XMALLOC (char, length + 1);
50193e51e026Smrg
50203e51e026Smrg	  p = quoted_string;
50213e51e026Smrg	  backslashes = 0;
50223e51e026Smrg	  if (quote_around)
50233e51e026Smrg	    *p++ = '"';
50243e51e026Smrg	  for (s = string; *s != '\0'; s++)
50253e51e026Smrg	    {
50263e51e026Smrg	      char c = *s;
50273e51e026Smrg	      if (c == '"')
50283e51e026Smrg		{
50293e51e026Smrg		  unsigned int j;
50303e51e026Smrg		  for (j = backslashes + 1; j > 0; j--)
50313e51e026Smrg		    *p++ = '\\';
50323e51e026Smrg		}
50333e51e026Smrg	      *p++ = c;
50343e51e026Smrg	      if (c == '\\')
50353e51e026Smrg		backslashes++;
50363e51e026Smrg	      else
50373e51e026Smrg		backslashes = 0;
50383e51e026Smrg	    }
50393e51e026Smrg	  if (quote_around)
50403e51e026Smrg	    {
50413e51e026Smrg	      unsigned int j;
50423e51e026Smrg	      for (j = backslashes; j > 0; j--)
50433e51e026Smrg		*p++ = '\\';
50443e51e026Smrg	      *p++ = '"';
50453e51e026Smrg	    }
50463e51e026Smrg	  *p = '\0';
50473e51e026Smrg
50483e51e026Smrg	  new_argv[i] = quoted_string;
50493e51e026Smrg	}
50503e51e026Smrg      else
50513e51e026Smrg	new_argv[i] = (char *) string;
50523e51e026Smrg    }
50533e51e026Smrg  new_argv[argc] = NULL;
50543e51e026Smrg
50553e51e026Smrg  return new_argv;
50563e51e026Smrg}
50573e51e026SmrgEOF
50583e51e026Smrg		;;
50593e51e026Smrg	    esac
5060943345d3Smrg
50613e51e026Smrg            cat <<"EOF"
50623e51e026Smrgvoid lt_dump_script (FILE* f)
50633e51e026Smrg{
50643e51e026SmrgEOF
50653e51e026Smrg	    func_emit_wrapper yes |
50663e51e026Smrg	      $SED -n -e '
50673e51e026Smrgs/^\(.\{79\}\)\(..*\)/\1\
50683e51e026Smrg\2/
50693e51e026Smrgh
50703e51e026Smrgs/\([\\"]\)/\\\1/g
50713e51e026Smrgs/$/\\n/
50723e51e026Smrgs/\([^\n]*\).*/  fputs ("\1", f);/p
50733e51e026Smrgg
50743e51e026SmrgD'
50753e51e026Smrg            cat <<"EOF"
50763e51e026Smrg}
5077a7b590b3SmrgEOF
5078a7b590b3Smrg}
5079a7b590b3Smrg# end: func_emit_cwrapperexe_src
5080943345d3Smrg
50813e51e026Smrg# func_win32_import_lib_p ARG
50823e51e026Smrg# True if ARG is an import lib, as indicated by $file_magic_cmd
50833e51e026Smrgfunc_win32_import_lib_p ()
50843e51e026Smrg{
50853e51e026Smrg    $opt_debug
50863e51e026Smrg    case `eval $file_magic_cmd \"\$1\" 2>/dev/null | $SED -e 10q` in
50873e51e026Smrg    *import*) : ;;
50883e51e026Smrg    *) false ;;
50893e51e026Smrg    esac
50903e51e026Smrg}
50913e51e026Smrg
5092a7b590b3Smrg# func_mode_link arg...
5093a7b590b3Smrgfunc_mode_link ()
5094a7b590b3Smrg{
5095a7b590b3Smrg    $opt_debug
5096a7b590b3Smrg    case $host in
5097a7b590b3Smrg    *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-cegcc*)
5098a7b590b3Smrg      # It is impossible to link a dll without this setting, and
5099a7b590b3Smrg      # we shouldn't force the makefile maintainer to figure out
5100a7b590b3Smrg      # which system we are compiling for in order to pass an extra
5101a7b590b3Smrg      # flag for every libtool invocation.
5102a7b590b3Smrg      # allow_undefined=no
5103943345d3Smrg
5104a7b590b3Smrg      # FIXME: Unfortunately, there are problems with the above when trying
5105a7b590b3Smrg      # to make a dll which has undefined symbols, in which case not
5106a7b590b3Smrg      # even a static library is built.  For now, we need to specify
5107a7b590b3Smrg      # -no-undefined on the libtool link line when we can be certain
5108a7b590b3Smrg      # that all symbols are satisfied, otherwise we get a static library.
5109a7b590b3Smrg      allow_undefined=yes
5110a7b590b3Smrg      ;;
5111a7b590b3Smrg    *)
5112a7b590b3Smrg      allow_undefined=yes
5113a7b590b3Smrg      ;;
5114a7b590b3Smrg    esac
5115a7b590b3Smrg    libtool_args=$nonopt
5116a7b590b3Smrg    base_compile="$nonopt $@"
5117a7b590b3Smrg    compile_command=$nonopt
5118a7b590b3Smrg    finalize_command=$nonopt
5119943345d3Smrg
5120a7b590b3Smrg    compile_rpath=
5121a7b590b3Smrg    finalize_rpath=
5122a7b590b3Smrg    compile_shlibpath=
5123a7b590b3Smrg    finalize_shlibpath=
5124a7b590b3Smrg    convenience=
5125a7b590b3Smrg    old_convenience=
5126a7b590b3Smrg    deplibs=
5127a7b590b3Smrg    old_deplibs=
5128a7b590b3Smrg    compiler_flags=
5129a7b590b3Smrg    linker_flags=
5130a7b590b3Smrg    dllsearchpath=
5131a7b590b3Smrg    lib_search_path=`pwd`
5132a7b590b3Smrg    inst_prefix_dir=
5133a7b590b3Smrg    new_inherited_linker_flags=
5134943345d3Smrg
5135a7b590b3Smrg    avoid_version=no
51363e51e026Smrg    bindir=
5137a7b590b3Smrg    dlfiles=
5138a7b590b3Smrg    dlprefiles=
5139a7b590b3Smrg    dlself=no
5140a7b590b3Smrg    export_dynamic=no
5141a7b590b3Smrg    export_symbols=
5142a7b590b3Smrg    export_symbols_regex=
5143a7b590b3Smrg    generated=
5144a7b590b3Smrg    libobjs=
5145a7b590b3Smrg    ltlibs=
5146a7b590b3Smrg    module=no
5147a7b590b3Smrg    no_install=no
5148a7b590b3Smrg    objs=
5149a7b590b3Smrg    non_pic_objects=
5150a7b590b3Smrg    precious_files_regex=
5151a7b590b3Smrg    prefer_static_libs=no
5152a7b590b3Smrg    preload=no
5153a7b590b3Smrg    prev=
5154a7b590b3Smrg    prevarg=
5155a7b590b3Smrg    release=
5156a7b590b3Smrg    rpath=
5157a7b590b3Smrg    xrpath=
5158a7b590b3Smrg    perm_rpath=
5159a7b590b3Smrg    temp_rpath=
5160a7b590b3Smrg    thread_safe=no
5161a7b590b3Smrg    vinfo=
5162a7b590b3Smrg    vinfo_number=no
5163a7b590b3Smrg    weak_libs=
5164a7b590b3Smrg    single_module="${wl}-single_module"
5165a7b590b3Smrg    func_infer_tag $base_compile
5166a7b590b3Smrg
5167a7b590b3Smrg    # We need to know -static, to get the right output filenames.
5168a7b590b3Smrg    for arg
5169a7b590b3Smrg    do
5170a7b590b3Smrg      case $arg in
5171a7b590b3Smrg      -shared)
5172a7b590b3Smrg	test "$build_libtool_libs" != yes && \
5173a7b590b3Smrg	  func_fatal_configuration "can not build a shared library"
5174a7b590b3Smrg	build_old_libs=no
5175a7b590b3Smrg	break
5176a7b590b3Smrg	;;
5177a7b590b3Smrg      -all-static | -static | -static-libtool-libs)
5178a7b590b3Smrg	case $arg in
5179a7b590b3Smrg	-all-static)
5180a7b590b3Smrg	  if test "$build_libtool_libs" = yes && test -z "$link_static_flag"; then
5181a7b590b3Smrg	    func_warning "complete static linking is impossible in this configuration"
5182a7b590b3Smrg	  fi
5183a7b590b3Smrg	  if test -n "$link_static_flag"; then
5184a7b590b3Smrg	    dlopen_self=$dlopen_self_static
5185a7b590b3Smrg	  fi
5186a7b590b3Smrg	  prefer_static_libs=yes
5187a7b590b3Smrg	  ;;
5188a7b590b3Smrg	-static)
5189a7b590b3Smrg	  if test -z "$pic_flag" && test -n "$link_static_flag"; then
5190a7b590b3Smrg	    dlopen_self=$dlopen_self_static
5191a7b590b3Smrg	  fi
5192a7b590b3Smrg	  prefer_static_libs=built
5193a7b590b3Smrg	  ;;
5194a7b590b3Smrg	-static-libtool-libs)
5195a7b590b3Smrg	  if test -z "$pic_flag" && test -n "$link_static_flag"; then
5196a7b590b3Smrg	    dlopen_self=$dlopen_self_static
5197943345d3Smrg	  fi
5198a7b590b3Smrg	  prefer_static_libs=yes
5199a7b590b3Smrg	  ;;
5200a7b590b3Smrg	esac
5201a7b590b3Smrg	build_libtool_libs=no
5202a7b590b3Smrg	build_old_libs=yes
5203a7b590b3Smrg	break
5204a7b590b3Smrg	;;
5205a7b590b3Smrg      esac
5206a7b590b3Smrg    done
5207943345d3Smrg
5208a7b590b3Smrg    # See if our shared archives depend on static archives.
5209a7b590b3Smrg    test -n "$old_archive_from_new_cmds" && build_old_libs=yes
5210943345d3Smrg
5211a7b590b3Smrg    # Go through the arguments, transforming them on the way.
5212a7b590b3Smrg    while test "$#" -gt 0; do
5213a7b590b3Smrg      arg="$1"
5214a7b590b3Smrg      shift
5215a7b590b3Smrg      func_quote_for_eval "$arg"
5216a7b590b3Smrg      qarg=$func_quote_for_eval_unquoted_result
5217a7b590b3Smrg      func_append libtool_args " $func_quote_for_eval_result"
5218943345d3Smrg
5219a7b590b3Smrg      # If the previous option needs an argument, assign it.
5220a7b590b3Smrg      if test -n "$prev"; then
5221a7b590b3Smrg	case $prev in
5222a7b590b3Smrg	output)
5223a7b590b3Smrg	  func_append compile_command " @OUTPUT@"
5224a7b590b3Smrg	  func_append finalize_command " @OUTPUT@"
5225a7b590b3Smrg	  ;;
5226a7b590b3Smrg	esac
5227943345d3Smrg
5228a7b590b3Smrg	case $prev in
52293e51e026Smrg	bindir)
52303e51e026Smrg	  bindir="$arg"
52313e51e026Smrg	  prev=
52323e51e026Smrg	  continue
52333e51e026Smrg	  ;;
5234a7b590b3Smrg	dlfiles|dlprefiles)
5235a7b590b3Smrg	  if test "$preload" = no; then
5236a7b590b3Smrg	    # Add the symbol object into the linking commands.
5237a7b590b3Smrg	    func_append compile_command " @SYMFILE@"
5238a7b590b3Smrg	    func_append finalize_command " @SYMFILE@"
5239a7b590b3Smrg	    preload=yes
5240a7b590b3Smrg	  fi
5241a7b590b3Smrg	  case $arg in
5242a7b590b3Smrg	  *.la | *.lo) ;;  # We handle these cases below.
5243a7b590b3Smrg	  force)
5244a7b590b3Smrg	    if test "$dlself" = no; then
5245a7b590b3Smrg	      dlself=needless
5246a7b590b3Smrg	      export_dynamic=yes
5247a7b590b3Smrg	    fi
5248a7b590b3Smrg	    prev=
5249a7b590b3Smrg	    continue
5250a7b590b3Smrg	    ;;
5251a7b590b3Smrg	  self)
5252a7b590b3Smrg	    if test "$prev" = dlprefiles; then
5253a7b590b3Smrg	      dlself=yes
5254a7b590b3Smrg	    elif test "$prev" = dlfiles && test "$dlopen_self" != yes; then
5255a7b590b3Smrg	      dlself=yes
5256943345d3Smrg	    else
5257a7b590b3Smrg	      dlself=needless
5258a7b590b3Smrg	      export_dynamic=yes
5259943345d3Smrg	    fi
5260a7b590b3Smrg	    prev=
5261a7b590b3Smrg	    continue
5262a7b590b3Smrg	    ;;
5263a7b590b3Smrg	  *)
5264a7b590b3Smrg	    if test "$prev" = dlfiles; then
52653e51e026Smrg	      func_append dlfiles " $arg"
5266943345d3Smrg	    else
52673e51e026Smrg	      func_append dlprefiles " $arg"
5268943345d3Smrg	    fi
5269a7b590b3Smrg	    prev=
5270a7b590b3Smrg	    continue
5271a7b590b3Smrg	    ;;
5272a7b590b3Smrg	  esac
5273a7b590b3Smrg	  ;;
5274a7b590b3Smrg	expsyms)
5275a7b590b3Smrg	  export_symbols="$arg"
5276a7b590b3Smrg	  test -f "$arg" \
5277a7b590b3Smrg	    || func_fatal_error "symbol file \`$arg' does not exist"
5278a7b590b3Smrg	  prev=
5279a7b590b3Smrg	  continue
5280a7b590b3Smrg	  ;;
5281a7b590b3Smrg	expsyms_regex)
5282a7b590b3Smrg	  export_symbols_regex="$arg"
5283a7b590b3Smrg	  prev=
5284a7b590b3Smrg	  continue
5285a7b590b3Smrg	  ;;
5286a7b590b3Smrg	framework)
5287943345d3Smrg	  case $host in
5288a7b590b3Smrg	    *-*-darwin*)
5289a7b590b3Smrg	      case "$deplibs " in
5290a7b590b3Smrg		*" $qarg.ltframework "*) ;;
52913e51e026Smrg		*) func_append deplibs " $qarg.ltframework" # this is fixed later
5292a7b590b3Smrg		   ;;
5293a7b590b3Smrg	      esac
5294a7b590b3Smrg	      ;;
5295943345d3Smrg	  esac
5296a7b590b3Smrg	  prev=
5297a7b590b3Smrg	  continue
5298943345d3Smrg	  ;;
5299a7b590b3Smrg	inst_prefix)
5300a7b590b3Smrg	  inst_prefix_dir="$arg"
5301a7b590b3Smrg	  prev=
5302a7b590b3Smrg	  continue
5303943345d3Smrg	  ;;
5304a7b590b3Smrg	objectlist)
5305a7b590b3Smrg	  if test -f "$arg"; then
5306a7b590b3Smrg	    save_arg=$arg
5307a7b590b3Smrg	    moreargs=
5308a7b590b3Smrg	    for fil in `cat "$save_arg"`
5309a7b590b3Smrg	    do
53103e51e026Smrg#	      func_append moreargs " $fil"
5311a7b590b3Smrg	      arg=$fil
5312a7b590b3Smrg	      # A libtool-controlled object.
5313943345d3Smrg
5314a7b590b3Smrg	      # Check to see that this really is a libtool object.
5315a7b590b3Smrg	      if func_lalib_unsafe_p "$arg"; then
5316a7b590b3Smrg		pic_object=
5317a7b590b3Smrg		non_pic_object=
5318943345d3Smrg
5319a7b590b3Smrg		# Read the .lo file
5320a7b590b3Smrg		func_source "$arg"
5321943345d3Smrg
5322a7b590b3Smrg		if test -z "$pic_object" ||
5323a7b590b3Smrg		   test -z "$non_pic_object" ||
5324a7b590b3Smrg		   test "$pic_object" = none &&
5325a7b590b3Smrg		   test "$non_pic_object" = none; then
5326a7b590b3Smrg		  func_fatal_error "cannot find name of object for \`$arg'"
5327a7b590b3Smrg		fi
5328943345d3Smrg
5329a7b590b3Smrg		# Extract subdirectory from the argument.
5330a7b590b3Smrg		func_dirname "$arg" "/" ""
5331a7b590b3Smrg		xdir="$func_dirname_result"
5332943345d3Smrg
5333a7b590b3Smrg		if test "$pic_object" != none; then
5334a7b590b3Smrg		  # Prepend the subdirectory the object is found in.
5335a7b590b3Smrg		  pic_object="$xdir$pic_object"
5336943345d3Smrg
5337a7b590b3Smrg		  if test "$prev" = dlfiles; then
5338a7b590b3Smrg		    if test "$build_libtool_libs" = yes && test "$dlopen_support" = yes; then
53393e51e026Smrg		      func_append dlfiles " $pic_object"
5340a7b590b3Smrg		      prev=
5341a7b590b3Smrg		      continue
5342a7b590b3Smrg		    else
5343a7b590b3Smrg		      # If libtool objects are unsupported, then we need to preload.
5344a7b590b3Smrg		      prev=dlprefiles
5345a7b590b3Smrg		    fi
5346a7b590b3Smrg		  fi
5347943345d3Smrg
5348a7b590b3Smrg		  # CHECK ME:  I think I busted this.  -Ossama
5349a7b590b3Smrg		  if test "$prev" = dlprefiles; then
5350a7b590b3Smrg		    # Preload the old-style object.
53513e51e026Smrg		    func_append dlprefiles " $pic_object"
5352a7b590b3Smrg		    prev=
5353a7b590b3Smrg		  fi
5354943345d3Smrg
5355a7b590b3Smrg		  # A PIC object.
5356a7b590b3Smrg		  func_append libobjs " $pic_object"
5357a7b590b3Smrg		  arg="$pic_object"
5358a7b590b3Smrg		fi
5359943345d3Smrg
5360a7b590b3Smrg		# Non-PIC object.
5361a7b590b3Smrg		if test "$non_pic_object" != none; then
5362a7b590b3Smrg		  # Prepend the subdirectory the object is found in.
5363a7b590b3Smrg		  non_pic_object="$xdir$non_pic_object"
5364943345d3Smrg
5365a7b590b3Smrg		  # A standard non-PIC object
5366a7b590b3Smrg		  func_append non_pic_objects " $non_pic_object"
5367a7b590b3Smrg		  if test -z "$pic_object" || test "$pic_object" = none ; then
5368a7b590b3Smrg		    arg="$non_pic_object"
5369a7b590b3Smrg		  fi
5370a7b590b3Smrg		else
5371a7b590b3Smrg		  # If the PIC object exists, use it instead.
5372a7b590b3Smrg		  # $xdir was prepended to $pic_object above.
5373a7b590b3Smrg		  non_pic_object="$pic_object"
5374a7b590b3Smrg		  func_append non_pic_objects " $non_pic_object"
5375a7b590b3Smrg		fi
5376a7b590b3Smrg	      else
5377a7b590b3Smrg		# Only an error if not doing a dry-run.
5378a7b590b3Smrg		if $opt_dry_run; then
5379a7b590b3Smrg		  # Extract subdirectory from the argument.
5380a7b590b3Smrg		  func_dirname "$arg" "/" ""
5381a7b590b3Smrg		  xdir="$func_dirname_result"
5382a7b590b3Smrg
5383a7b590b3Smrg		  func_lo2o "$arg"
5384a7b590b3Smrg		  pic_object=$xdir$objdir/$func_lo2o_result
5385a7b590b3Smrg		  non_pic_object=$xdir$func_lo2o_result
5386a7b590b3Smrg		  func_append libobjs " $pic_object"
5387a7b590b3Smrg		  func_append non_pic_objects " $non_pic_object"
5388a7b590b3Smrg	        else
5389a7b590b3Smrg		  func_fatal_error "\`$arg' is not a valid libtool object"
5390a7b590b3Smrg		fi
5391a7b590b3Smrg	      fi
5392a7b590b3Smrg	    done
5393943345d3Smrg	  else
5394a7b590b3Smrg	    func_fatal_error "link input file \`$arg' does not exist"
5395943345d3Smrg	  fi
5396a7b590b3Smrg	  arg=$save_arg
5397a7b590b3Smrg	  prev=
5398a7b590b3Smrg	  continue
5399a7b590b3Smrg	  ;;
5400a7b590b3Smrg	precious_regex)
5401a7b590b3Smrg	  precious_files_regex="$arg"
5402a7b590b3Smrg	  prev=
5403a7b590b3Smrg	  continue
5404a7b590b3Smrg	  ;;
5405a7b590b3Smrg	release)
5406a7b590b3Smrg	  release="-$arg"
5407a7b590b3Smrg	  prev=
5408a7b590b3Smrg	  continue
5409a7b590b3Smrg	  ;;
5410a7b590b3Smrg	rpath | xrpath)
5411a7b590b3Smrg	  # We need an absolute path.
5412a7b590b3Smrg	  case $arg in
5413a7b590b3Smrg	  [\\/]* | [A-Za-z]:[\\/]*) ;;
5414a7b590b3Smrg	  *)
5415a7b590b3Smrg	    func_fatal_error "only absolute run-paths are allowed"
5416a7b590b3Smrg	    ;;
5417a7b590b3Smrg	  esac
5418a7b590b3Smrg	  if test "$prev" = rpath; then
5419a7b590b3Smrg	    case "$rpath " in
5420a7b590b3Smrg	    *" $arg "*) ;;
54213e51e026Smrg	    *) func_append rpath " $arg" ;;
5422a7b590b3Smrg	    esac
5423943345d3Smrg	  else
5424a7b590b3Smrg	    case "$xrpath " in
5425a7b590b3Smrg	    *" $arg "*) ;;
54263e51e026Smrg	    *) func_append xrpath " $arg" ;;
5427a7b590b3Smrg	    esac
5428943345d3Smrg	  fi
5429a7b590b3Smrg	  prev=
5430a7b590b3Smrg	  continue
5431a7b590b3Smrg	  ;;
5432a7b590b3Smrg	shrext)
5433a7b590b3Smrg	  shrext_cmds="$arg"
5434a7b590b3Smrg	  prev=
5435a7b590b3Smrg	  continue
5436a7b590b3Smrg	  ;;
5437a7b590b3Smrg	weak)
54383e51e026Smrg	  func_append weak_libs " $arg"
5439a7b590b3Smrg	  prev=
5440a7b590b3Smrg	  continue
5441a7b590b3Smrg	  ;;
5442a7b590b3Smrg	xcclinker)
54433e51e026Smrg	  func_append linker_flags " $qarg"
54443e51e026Smrg	  func_append compiler_flags " $qarg"
5445a7b590b3Smrg	  prev=
5446a7b590b3Smrg	  func_append compile_command " $qarg"
5447a7b590b3Smrg	  func_append finalize_command " $qarg"
5448a7b590b3Smrg	  continue
5449a7b590b3Smrg	  ;;
5450a7b590b3Smrg	xcompiler)
54513e51e026Smrg	  func_append compiler_flags " $qarg"
5452a7b590b3Smrg	  prev=
5453a7b590b3Smrg	  func_append compile_command " $qarg"
5454a7b590b3Smrg	  func_append finalize_command " $qarg"
5455a7b590b3Smrg	  continue
5456a7b590b3Smrg	  ;;
5457a7b590b3Smrg	xlinker)
54583e51e026Smrg	  func_append linker_flags " $qarg"
54593e51e026Smrg	  func_append compiler_flags " $wl$qarg"
5460a7b590b3Smrg	  prev=
5461a7b590b3Smrg	  func_append compile_command " $wl$qarg"
5462a7b590b3Smrg	  func_append finalize_command " $wl$qarg"
5463a7b590b3Smrg	  continue
5464a7b590b3Smrg	  ;;
5465a7b590b3Smrg	*)
5466a7b590b3Smrg	  eval "$prev=\"\$arg\""
5467a7b590b3Smrg	  prev=
5468a7b590b3Smrg	  continue
5469a7b590b3Smrg	  ;;
5470943345d3Smrg	esac
5471a7b590b3Smrg      fi # test -n "$prev"
5472943345d3Smrg
5473a7b590b3Smrg      prevarg="$arg"
5474943345d3Smrg
5475a7b590b3Smrg      case $arg in
5476a7b590b3Smrg      -all-static)
5477a7b590b3Smrg	if test -n "$link_static_flag"; then
5478a7b590b3Smrg	  # See comment for -static flag below, for more details.
5479a7b590b3Smrg	  func_append compile_command " $link_static_flag"
5480a7b590b3Smrg	  func_append finalize_command " $link_static_flag"
5481a7b590b3Smrg	fi
5482a7b590b3Smrg	continue
5483a7b590b3Smrg	;;
5484943345d3Smrg
5485a7b590b3Smrg      -allow-undefined)
5486a7b590b3Smrg	# FIXME: remove this flag sometime in the future.
5487a7b590b3Smrg	func_fatal_error "\`-allow-undefined' must not be used because it is the default"
5488a7b590b3Smrg	;;
5489943345d3Smrg
5490a7b590b3Smrg      -avoid-version)
5491a7b590b3Smrg	avoid_version=yes
5492a7b590b3Smrg	continue
5493a7b590b3Smrg	;;
5494943345d3Smrg
54953e51e026Smrg      -bindir)
54963e51e026Smrg	prev=bindir
54973e51e026Smrg	continue
54983e51e026Smrg	;;
54993e51e026Smrg
5500a7b590b3Smrg      -dlopen)
5501a7b590b3Smrg	prev=dlfiles
5502a7b590b3Smrg	continue
5503a7b590b3Smrg	;;
5504943345d3Smrg
5505a7b590b3Smrg      -dlpreopen)
5506a7b590b3Smrg	prev=dlprefiles
5507a7b590b3Smrg	continue
5508a7b590b3Smrg	;;
5509943345d3Smrg
5510a7b590b3Smrg      -export-dynamic)
5511a7b590b3Smrg	export_dynamic=yes
5512a7b590b3Smrg	continue
5513a7b590b3Smrg	;;
5514943345d3Smrg
5515a7b590b3Smrg      -export-symbols | -export-symbols-regex)
5516a7b590b3Smrg	if test -n "$export_symbols" || test -n "$export_symbols_regex"; then
5517a7b590b3Smrg	  func_fatal_error "more than one -exported-symbols argument is not allowed"
5518a7b590b3Smrg	fi
5519a7b590b3Smrg	if test "X$arg" = "X-export-symbols"; then
5520a7b590b3Smrg	  prev=expsyms
5521a7b590b3Smrg	else
5522a7b590b3Smrg	  prev=expsyms_regex
5523a7b590b3Smrg	fi
5524a7b590b3Smrg	continue
5525a7b590b3Smrg	;;
5526943345d3Smrg
5527a7b590b3Smrg      -framework)
5528a7b590b3Smrg	prev=framework
5529a7b590b3Smrg	continue
5530a7b590b3Smrg	;;
5531943345d3Smrg
5532a7b590b3Smrg      -inst-prefix-dir)
5533a7b590b3Smrg	prev=inst_prefix
5534a7b590b3Smrg	continue
5535a7b590b3Smrg	;;
5536943345d3Smrg
5537a7b590b3Smrg      # The native IRIX linker understands -LANG:*, -LIST:* and -LNO:*
5538a7b590b3Smrg      # so, if we see these flags be careful not to treat them like -L
5539a7b590b3Smrg      -L[A-Z][A-Z]*:*)
5540a7b590b3Smrg	case $with_gcc/$host in
5541a7b590b3Smrg	no/*-*-irix* | /*-*-irix*)
5542a7b590b3Smrg	  func_append compile_command " $arg"
5543a7b590b3Smrg	  func_append finalize_command " $arg"
5544a7b590b3Smrg	  ;;
5545a7b590b3Smrg	esac
5546a7b590b3Smrg	continue
5547a7b590b3Smrg	;;
5548943345d3Smrg
5549a7b590b3Smrg      -L*)
55503e51e026Smrg	func_stripname "-L" '' "$arg"
55513e51e026Smrg	if test -z "$func_stripname_result"; then
5552a7b590b3Smrg	  if test "$#" -gt 0; then
5553a7b590b3Smrg	    func_fatal_error "require no space between \`-L' and \`$1'"
5554a7b590b3Smrg	  else
5555a7b590b3Smrg	    func_fatal_error "need path for \`-L' option"
5556a7b590b3Smrg	  fi
5557a7b590b3Smrg	fi
55583e51e026Smrg	func_resolve_sysroot "$func_stripname_result"
55593e51e026Smrg	dir=$func_resolve_sysroot_result
5560a7b590b3Smrg	# We need an absolute path.
5561a7b590b3Smrg	case $dir in
5562a7b590b3Smrg	[\\/]* | [A-Za-z]:[\\/]*) ;;
5563a7b590b3Smrg	*)
5564a7b590b3Smrg	  absdir=`cd "$dir" && pwd`
5565a7b590b3Smrg	  test -z "$absdir" && \
5566a7b590b3Smrg	    func_fatal_error "cannot determine absolute directory name of \`$dir'"
5567a7b590b3Smrg	  dir="$absdir"
5568a7b590b3Smrg	  ;;
5569a7b590b3Smrg	esac
5570a7b590b3Smrg	case "$deplibs " in
55713e51e026Smrg	*" -L$dir "* | *" $arg "*)
55723e51e026Smrg	  # Will only happen for absolute or sysroot arguments
55733e51e026Smrg	  ;;
5574a7b590b3Smrg	*)
55753e51e026Smrg	  # Preserve sysroot, but never include relative directories
55763e51e026Smrg	  case $dir in
55773e51e026Smrg	    [\\/]* | [A-Za-z]:[\\/]* | =*) func_append deplibs " $arg" ;;
55783e51e026Smrg	    *) func_append deplibs " -L$dir" ;;
55793e51e026Smrg	  esac
55803e51e026Smrg	  func_append lib_search_path " $dir"
5581a7b590b3Smrg	  ;;
5582a7b590b3Smrg	esac
5583a7b590b3Smrg	case $host in
5584a7b590b3Smrg	*-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-cegcc*)
55853e51e026Smrg	  testbindir=`$ECHO "$dir" | $SED 's*/lib$*/bin*'`
5586a7b590b3Smrg	  case :$dllsearchpath: in
5587a7b590b3Smrg	  *":$dir:"*) ;;
5588a7b590b3Smrg	  ::) dllsearchpath=$dir;;
55893e51e026Smrg	  *) func_append dllsearchpath ":$dir";;
5590a7b590b3Smrg	  esac
5591a7b590b3Smrg	  case :$dllsearchpath: in
5592a7b590b3Smrg	  *":$testbindir:"*) ;;
5593a7b590b3Smrg	  ::) dllsearchpath=$testbindir;;
55943e51e026Smrg	  *) func_append dllsearchpath ":$testbindir";;
5595a7b590b3Smrg	  esac
5596a7b590b3Smrg	  ;;
5597a7b590b3Smrg	esac
5598a7b590b3Smrg	continue
5599a7b590b3Smrg	;;
5600943345d3Smrg
5601a7b590b3Smrg      -l*)
5602a7b590b3Smrg	if test "X$arg" = "X-lc" || test "X$arg" = "X-lm"; then
5603a7b590b3Smrg	  case $host in
56043e51e026Smrg	  *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-beos* | *-cegcc* | *-*-haiku*)
5605a7b590b3Smrg	    # These systems don't actually have a C or math library (as such)
5606a7b590b3Smrg	    continue
5607a7b590b3Smrg	    ;;
5608a7b590b3Smrg	  *-*-os2*)
5609a7b590b3Smrg	    # These systems don't actually have a C library (as such)
5610a7b590b3Smrg	    test "X$arg" = "X-lc" && continue
5611a7b590b3Smrg	    ;;
5612a7b590b3Smrg	  *-*-openbsd* | *-*-freebsd* | *-*-dragonfly*)
5613a7b590b3Smrg	    # Do not include libc due to us having libc/libc_r.
5614a7b590b3Smrg	    test "X$arg" = "X-lc" && continue
5615a7b590b3Smrg	    ;;
5616a7b590b3Smrg	  *-*-rhapsody* | *-*-darwin1.[012])
5617a7b590b3Smrg	    # Rhapsody C and math libraries are in the System framework
56183e51e026Smrg	    func_append deplibs " System.ltframework"
5619a7b590b3Smrg	    continue
5620a7b590b3Smrg	    ;;
5621a7b590b3Smrg	  *-*-sco3.2v5* | *-*-sco5v6*)
5622a7b590b3Smrg	    # Causes problems with __ctype
5623a7b590b3Smrg	    test "X$arg" = "X-lc" && continue
5624a7b590b3Smrg	    ;;
5625a7b590b3Smrg	  *-*-sysv4.2uw2* | *-*-sysv5* | *-*-unixware* | *-*-OpenUNIX*)
5626a7b590b3Smrg	    # Compiler inserts libc in the correct place for threads to work
5627a7b590b3Smrg	    test "X$arg" = "X-lc" && continue
5628a7b590b3Smrg	    ;;
5629a7b590b3Smrg	  esac
5630a7b590b3Smrg	elif test "X$arg" = "X-lc_r"; then
5631a7b590b3Smrg	 case $host in
5632a7b590b3Smrg	 *-*-openbsd* | *-*-freebsd* | *-*-dragonfly*)
5633a7b590b3Smrg	   # Do not include libc_r directly, use -pthread flag.
5634a7b590b3Smrg	   continue
5635a7b590b3Smrg	   ;;
5636a7b590b3Smrg	 esac
5637a7b590b3Smrg	fi
56383e51e026Smrg	func_append deplibs " $arg"
5639a7b590b3Smrg	continue
5640a7b590b3Smrg	;;
5641943345d3Smrg
5642a7b590b3Smrg      -module)
5643a7b590b3Smrg	module=yes
5644a7b590b3Smrg	continue
5645a7b590b3Smrg	;;
5646943345d3Smrg
5647a7b590b3Smrg      # Tru64 UNIX uses -model [arg] to determine the layout of C++
5648a7b590b3Smrg      # classes, name mangling, and exception handling.
5649a7b590b3Smrg      # Darwin uses the -arch flag to determine output architecture.
56503e51e026Smrg      -model|-arch|-isysroot|--sysroot)
56513e51e026Smrg	func_append compiler_flags " $arg"
5652a7b590b3Smrg	func_append compile_command " $arg"
5653a7b590b3Smrg	func_append finalize_command " $arg"
5654a7b590b3Smrg	prev=xcompiler
5655a7b590b3Smrg	continue
5656a7b590b3Smrg	;;
5657943345d3Smrg
56583e51e026Smrg      -mt|-mthreads|-kthread|-Kthread|-pthread|-pthreads|--thread-safe \
56593e51e026Smrg      |-threads|-fopenmp|-openmp|-mp|-xopenmp|-omp|-qsmp=*)
56603e51e026Smrg	func_append compiler_flags " $arg"
5661a7b590b3Smrg	func_append compile_command " $arg"
5662a7b590b3Smrg	func_append finalize_command " $arg"
5663a7b590b3Smrg	case "$new_inherited_linker_flags " in
5664a7b590b3Smrg	    *" $arg "*) ;;
56653e51e026Smrg	    * ) func_append new_inherited_linker_flags " $arg" ;;
5666a7b590b3Smrg	esac
5667a7b590b3Smrg	continue
5668a7b590b3Smrg	;;
5669943345d3Smrg
5670a7b590b3Smrg      -multi_module)
5671a7b590b3Smrg	single_module="${wl}-multi_module"
5672a7b590b3Smrg	continue
5673a7b590b3Smrg	;;
5674943345d3Smrg
5675a7b590b3Smrg      -no-fast-install)
5676a7b590b3Smrg	fast_install=no
5677a7b590b3Smrg	continue
5678a7b590b3Smrg	;;
5679943345d3Smrg
5680a7b590b3Smrg      -no-install)
5681a7b590b3Smrg	case $host in
5682a7b590b3Smrg	*-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-*-darwin* | *-cegcc*)
5683a7b590b3Smrg	  # The PATH hackery in wrapper scripts is required on Windows
5684a7b590b3Smrg	  # and Darwin in order for the loader to find any dlls it needs.
5685a7b590b3Smrg	  func_warning "\`-no-install' is ignored for $host"
5686a7b590b3Smrg	  func_warning "assuming \`-no-fast-install' instead"
5687a7b590b3Smrg	  fast_install=no
5688a7b590b3Smrg	  ;;
5689a7b590b3Smrg	*) no_install=yes ;;
5690a7b590b3Smrg	esac
5691a7b590b3Smrg	continue
5692a7b590b3Smrg	;;
5693943345d3Smrg
5694a7b590b3Smrg      -no-undefined)
5695a7b590b3Smrg	allow_undefined=no
5696a7b590b3Smrg	continue
5697a7b590b3Smrg	;;
5698943345d3Smrg
5699a7b590b3Smrg      -objectlist)
5700a7b590b3Smrg	prev=objectlist
5701a7b590b3Smrg	continue
5702a7b590b3Smrg	;;
5703943345d3Smrg
5704a7b590b3Smrg      -o) prev=output ;;
5705943345d3Smrg
5706a7b590b3Smrg      -precious-files-regex)
5707a7b590b3Smrg	prev=precious_regex
5708a7b590b3Smrg	continue
5709a7b590b3Smrg	;;
5710943345d3Smrg
5711a7b590b3Smrg      -release)
5712a7b590b3Smrg	prev=release
5713a7b590b3Smrg	continue
5714a7b590b3Smrg	;;
5715943345d3Smrg
5716a7b590b3Smrg      -rpath)
5717a7b590b3Smrg	prev=rpath
5718a7b590b3Smrg	continue
5719a7b590b3Smrg	;;
5720943345d3Smrg
5721a7b590b3Smrg      -R)
5722a7b590b3Smrg	prev=xrpath
5723a7b590b3Smrg	continue
5724a7b590b3Smrg	;;
5725943345d3Smrg
5726a7b590b3Smrg      -R*)
5727a7b590b3Smrg	func_stripname '-R' '' "$arg"
5728a7b590b3Smrg	dir=$func_stripname_result
5729a7b590b3Smrg	# We need an absolute path.
5730a7b590b3Smrg	case $dir in
5731a7b590b3Smrg	[\\/]* | [A-Za-z]:[\\/]*) ;;
57323e51e026Smrg	=*)
57333e51e026Smrg	  func_stripname '=' '' "$dir"
57343e51e026Smrg	  dir=$lt_sysroot$func_stripname_result
57353e51e026Smrg	  ;;
5736a7b590b3Smrg	*)
5737a7b590b3Smrg	  func_fatal_error "only absolute run-paths are allowed"
5738a7b590b3Smrg	  ;;
5739a7b590b3Smrg	esac
5740a7b590b3Smrg	case "$xrpath " in
5741a7b590b3Smrg	*" $dir "*) ;;
57423e51e026Smrg	*) func_append xrpath " $dir" ;;
5743a7b590b3Smrg	esac
5744a7b590b3Smrg	continue
5745a7b590b3Smrg	;;
5746943345d3Smrg
5747a7b590b3Smrg      -shared)
5748a7b590b3Smrg	# The effects of -shared are defined in a previous loop.
5749a7b590b3Smrg	continue
5750a7b590b3Smrg	;;
5751943345d3Smrg
5752a7b590b3Smrg      -shrext)
5753a7b590b3Smrg	prev=shrext
5754a7b590b3Smrg	continue
5755a7b590b3Smrg	;;
5756943345d3Smrg
5757a7b590b3Smrg      -static | -static-libtool-libs)
5758a7b590b3Smrg	# The effects of -static are defined in a previous loop.
5759a7b590b3Smrg	# We used to do the same as -all-static on platforms that
5760a7b590b3Smrg	# didn't have a PIC flag, but the assumption that the effects
5761a7b590b3Smrg	# would be equivalent was wrong.  It would break on at least
5762a7b590b3Smrg	# Digital Unix and AIX.
5763a7b590b3Smrg	continue
5764a7b590b3Smrg	;;
5765943345d3Smrg
5766a7b590b3Smrg      -thread-safe)
5767a7b590b3Smrg	thread_safe=yes
5768a7b590b3Smrg	continue
5769a7b590b3Smrg	;;
5770943345d3Smrg
5771a7b590b3Smrg      -version-info)
5772a7b590b3Smrg	prev=vinfo
5773a7b590b3Smrg	continue
5774a7b590b3Smrg	;;
5775943345d3Smrg
5776a7b590b3Smrg      -version-number)
5777a7b590b3Smrg	prev=vinfo
5778a7b590b3Smrg	vinfo_number=yes
5779a7b590b3Smrg	continue
5780a7b590b3Smrg	;;
5781943345d3Smrg
5782a7b590b3Smrg      -weak)
5783a7b590b3Smrg        prev=weak
5784a7b590b3Smrg	continue
5785a7b590b3Smrg	;;
5786943345d3Smrg
5787a7b590b3Smrg      -Wc,*)
5788a7b590b3Smrg	func_stripname '-Wc,' '' "$arg"
5789a7b590b3Smrg	args=$func_stripname_result
5790a7b590b3Smrg	arg=
5791a7b590b3Smrg	save_ifs="$IFS"; IFS=','
5792a7b590b3Smrg	for flag in $args; do
5793a7b590b3Smrg	  IFS="$save_ifs"
5794a7b590b3Smrg          func_quote_for_eval "$flag"
57953e51e026Smrg	  func_append arg " $func_quote_for_eval_result"
57963e51e026Smrg	  func_append compiler_flags " $func_quote_for_eval_result"
5797a7b590b3Smrg	done
5798a7b590b3Smrg	IFS="$save_ifs"
5799a7b590b3Smrg	func_stripname ' ' '' "$arg"
5800a7b590b3Smrg	arg=$func_stripname_result
5801a7b590b3Smrg	;;
5802943345d3Smrg
5803a7b590b3Smrg      -Wl,*)
5804a7b590b3Smrg	func_stripname '-Wl,' '' "$arg"
5805a7b590b3Smrg	args=$func_stripname_result
5806a7b590b3Smrg	arg=
5807a7b590b3Smrg	save_ifs="$IFS"; IFS=','
5808a7b590b3Smrg	for flag in $args; do
5809a7b590b3Smrg	  IFS="$save_ifs"
5810a7b590b3Smrg          func_quote_for_eval "$flag"
58113e51e026Smrg	  func_append arg " $wl$func_quote_for_eval_result"
58123e51e026Smrg	  func_append compiler_flags " $wl$func_quote_for_eval_result"
58133e51e026Smrg	  func_append linker_flags " $func_quote_for_eval_result"
5814a7b590b3Smrg	done
5815a7b590b3Smrg	IFS="$save_ifs"
5816a7b590b3Smrg	func_stripname ' ' '' "$arg"
5817a7b590b3Smrg	arg=$func_stripname_result
5818a7b590b3Smrg	;;
5819943345d3Smrg
5820a7b590b3Smrg      -Xcompiler)
5821a7b590b3Smrg	prev=xcompiler
5822a7b590b3Smrg	continue
5823a7b590b3Smrg	;;
5824943345d3Smrg
5825a7b590b3Smrg      -Xlinker)
5826a7b590b3Smrg	prev=xlinker
5827a7b590b3Smrg	continue
5828a7b590b3Smrg	;;
5829943345d3Smrg
5830a7b590b3Smrg      -XCClinker)
5831a7b590b3Smrg	prev=xcclinker
5832a7b590b3Smrg	continue
5833a7b590b3Smrg	;;
5834943345d3Smrg
5835a7b590b3Smrg      # -msg_* for osf cc
5836a7b590b3Smrg      -msg_*)
5837a7b590b3Smrg	func_quote_for_eval "$arg"
5838a7b590b3Smrg	arg="$func_quote_for_eval_result"
5839a7b590b3Smrg	;;
5840943345d3Smrg
58413e51e026Smrg      # Flags to be passed through unchanged, with rationale:
58423e51e026Smrg      # -64, -mips[0-9]      enable 64-bit mode for the SGI compiler
58433e51e026Smrg      # -r[0-9][0-9]*        specify processor for the SGI compiler
58443e51e026Smrg      # -xarch=*, -xtarget=* enable 64-bit mode for the Sun compiler
58453e51e026Smrg      # +DA*, +DD*           enable 64-bit mode for the HP compiler
58463e51e026Smrg      # -q*                  compiler args for the IBM compiler
58473e51e026Smrg      # -m*, -t[45]*, -txscale* architecture-specific flags for GCC
58483e51e026Smrg      # -F/path              path to uninstalled frameworks, gcc on darwin
58493e51e026Smrg      # -p, -pg, --coverage, -fprofile-*  profiling flags for GCC
58503e51e026Smrg      # @file                GCC response files
58513e51e026Smrg      # -tp=*                Portland pgcc target processor selection
58523e51e026Smrg      # --sysroot=*          for sysroot support
58533e51e026Smrg      # -O*, -flto*, -fwhopr*, -fuse-linker-plugin GCC link-time optimization
5854a7b590b3Smrg      -64|-mips[0-9]|-r[0-9][0-9]*|-xarch=*|-xtarget=*|+DA*|+DD*|-q*|-m*| \
58553e51e026Smrg      -t[45]*|-txscale*|-p|-pg|--coverage|-fprofile-*|-F*|@*|-tp=*|--sysroot=*| \
58563e51e026Smrg      -O*|-flto*|-fwhopr*|-fuse-linker-plugin)
5857a7b590b3Smrg        func_quote_for_eval "$arg"
5858a7b590b3Smrg	arg="$func_quote_for_eval_result"
5859a7b590b3Smrg        func_append compile_command " $arg"
5860a7b590b3Smrg        func_append finalize_command " $arg"
58613e51e026Smrg        func_append compiler_flags " $arg"
5862a7b590b3Smrg        continue
5863a7b590b3Smrg        ;;
5864943345d3Smrg
5865a7b590b3Smrg      # Some other compiler flag.
5866a7b590b3Smrg      -* | +*)
5867a7b590b3Smrg        func_quote_for_eval "$arg"
5868a7b590b3Smrg	arg="$func_quote_for_eval_result"
5869a7b590b3Smrg	;;
5870943345d3Smrg
5871a7b590b3Smrg      *.$objext)
5872a7b590b3Smrg	# A standard object.
58733e51e026Smrg	func_append objs " $arg"
5874a7b590b3Smrg	;;
5875943345d3Smrg
5876a7b590b3Smrg      *.lo)
5877a7b590b3Smrg	# A libtool-controlled object.
5878943345d3Smrg
5879a7b590b3Smrg	# Check to see that this really is a libtool object.
5880a7b590b3Smrg	if func_lalib_unsafe_p "$arg"; then
5881a7b590b3Smrg	  pic_object=
5882a7b590b3Smrg	  non_pic_object=
5883943345d3Smrg
5884a7b590b3Smrg	  # Read the .lo file
5885a7b590b3Smrg	  func_source "$arg"
5886943345d3Smrg
5887a7b590b3Smrg	  if test -z "$pic_object" ||
5888a7b590b3Smrg	     test -z "$non_pic_object" ||
5889a7b590b3Smrg	     test "$pic_object" = none &&
5890a7b590b3Smrg	     test "$non_pic_object" = none; then
5891a7b590b3Smrg	    func_fatal_error "cannot find name of object for \`$arg'"
5892a7b590b3Smrg	  fi
5893943345d3Smrg
5894a7b590b3Smrg	  # Extract subdirectory from the argument.
5895a7b590b3Smrg	  func_dirname "$arg" "/" ""
5896a7b590b3Smrg	  xdir="$func_dirname_result"
5897f67b85aaSmrg
5898a7b590b3Smrg	  if test "$pic_object" != none; then
5899a7b590b3Smrg	    # Prepend the subdirectory the object is found in.
5900a7b590b3Smrg	    pic_object="$xdir$pic_object"
5901943345d3Smrg
5902a7b590b3Smrg	    if test "$prev" = dlfiles; then
5903a7b590b3Smrg	      if test "$build_libtool_libs" = yes && test "$dlopen_support" = yes; then
59043e51e026Smrg		func_append dlfiles " $pic_object"
5905a7b590b3Smrg		prev=
5906a7b590b3Smrg		continue
5907a7b590b3Smrg	      else
5908a7b590b3Smrg		# If libtool objects are unsupported, then we need to preload.
5909a7b590b3Smrg		prev=dlprefiles
5910a7b590b3Smrg	      fi
5911a7b590b3Smrg	    fi
5912943345d3Smrg
5913a7b590b3Smrg	    # CHECK ME:  I think I busted this.  -Ossama
5914a7b590b3Smrg	    if test "$prev" = dlprefiles; then
5915a7b590b3Smrg	      # Preload the old-style object.
59163e51e026Smrg	      func_append dlprefiles " $pic_object"
5917a7b590b3Smrg	      prev=
5918a7b590b3Smrg	    fi
5919943345d3Smrg
5920a7b590b3Smrg	    # A PIC object.
5921a7b590b3Smrg	    func_append libobjs " $pic_object"
5922a7b590b3Smrg	    arg="$pic_object"
5923a7b590b3Smrg	  fi
5924943345d3Smrg
5925a7b590b3Smrg	  # Non-PIC object.
5926a7b590b3Smrg	  if test "$non_pic_object" != none; then
5927a7b590b3Smrg	    # Prepend the subdirectory the object is found in.
5928a7b590b3Smrg	    non_pic_object="$xdir$non_pic_object"
5929943345d3Smrg
5930a7b590b3Smrg	    # A standard non-PIC object
5931a7b590b3Smrg	    func_append non_pic_objects " $non_pic_object"
5932a7b590b3Smrg	    if test -z "$pic_object" || test "$pic_object" = none ; then
5933a7b590b3Smrg	      arg="$non_pic_object"
5934a7b590b3Smrg	    fi
5935a7b590b3Smrg	  else
5936a7b590b3Smrg	    # If the PIC object exists, use it instead.
5937a7b590b3Smrg	    # $xdir was prepended to $pic_object above.
5938a7b590b3Smrg	    non_pic_object="$pic_object"
5939a7b590b3Smrg	    func_append non_pic_objects " $non_pic_object"
5940a7b590b3Smrg	  fi
5941a7b590b3Smrg	else
5942a7b590b3Smrg	  # Only an error if not doing a dry-run.
5943a7b590b3Smrg	  if $opt_dry_run; then
5944a7b590b3Smrg	    # Extract subdirectory from the argument.
5945a7b590b3Smrg	    func_dirname "$arg" "/" ""
5946a7b590b3Smrg	    xdir="$func_dirname_result"
5947a7b590b3Smrg
5948a7b590b3Smrg	    func_lo2o "$arg"
5949a7b590b3Smrg	    pic_object=$xdir$objdir/$func_lo2o_result
5950a7b590b3Smrg	    non_pic_object=$xdir$func_lo2o_result
5951a7b590b3Smrg	    func_append libobjs " $pic_object"
5952a7b590b3Smrg	    func_append non_pic_objects " $non_pic_object"
5953a7b590b3Smrg	  else
5954a7b590b3Smrg	    func_fatal_error "\`$arg' is not a valid libtool object"
5955a7b590b3Smrg	  fi
5956a7b590b3Smrg	fi
5957a7b590b3Smrg	;;
5958943345d3Smrg
5959a7b590b3Smrg      *.$libext)
5960a7b590b3Smrg	# An archive.
59613e51e026Smrg	func_append deplibs " $arg"
59623e51e026Smrg	func_append old_deplibs " $arg"
5963a7b590b3Smrg	continue
5964a7b590b3Smrg	;;
5965a7b590b3Smrg
5966a7b590b3Smrg      *.la)
5967a7b590b3Smrg	# A libtool-controlled library.
5968a7b590b3Smrg
59693e51e026Smrg	func_resolve_sysroot "$arg"
5970a7b590b3Smrg	if test "$prev" = dlfiles; then
5971a7b590b3Smrg	  # This library was specified with -dlopen.
59723e51e026Smrg	  func_append dlfiles " $func_resolve_sysroot_result"
5973a7b590b3Smrg	  prev=
5974a7b590b3Smrg	elif test "$prev" = dlprefiles; then
5975a7b590b3Smrg	  # The library was specified with -dlpreopen.
59763e51e026Smrg	  func_append dlprefiles " $func_resolve_sysroot_result"
5977a7b590b3Smrg	  prev=
5978a7b590b3Smrg	else
59793e51e026Smrg	  func_append deplibs " $func_resolve_sysroot_result"
5980a7b590b3Smrg	fi
5981a7b590b3Smrg	continue
5982a7b590b3Smrg	;;
5983a7b590b3Smrg
5984a7b590b3Smrg      # Some other compiler argument.
5985a7b590b3Smrg      *)
5986a7b590b3Smrg	# Unknown arguments in both finalize_command and compile_command need
5987a7b590b3Smrg	# to be aesthetically quoted because they are evaled later.
5988a7b590b3Smrg	func_quote_for_eval "$arg"
5989a7b590b3Smrg	arg="$func_quote_for_eval_result"
5990a7b590b3Smrg	;;
5991a7b590b3Smrg      esac # arg
5992a7b590b3Smrg
5993a7b590b3Smrg      # Now actually substitute the argument into the commands.
5994a7b590b3Smrg      if test -n "$arg"; then
5995a7b590b3Smrg	func_append compile_command " $arg"
5996a7b590b3Smrg	func_append finalize_command " $arg"
5997a7b590b3Smrg      fi
5998a7b590b3Smrg    done # argument parsing loop
5999a7b590b3Smrg
6000a7b590b3Smrg    test -n "$prev" && \
6001a7b590b3Smrg      func_fatal_help "the \`$prevarg' option requires an argument"
6002a7b590b3Smrg
6003a7b590b3Smrg    if test "$export_dynamic" = yes && test -n "$export_dynamic_flag_spec"; then
6004a7b590b3Smrg      eval arg=\"$export_dynamic_flag_spec\"
6005a7b590b3Smrg      func_append compile_command " $arg"
6006a7b590b3Smrg      func_append finalize_command " $arg"
6007a7b590b3Smrg    fi
6008a7b590b3Smrg
6009a7b590b3Smrg    oldlibs=
6010a7b590b3Smrg    # calculate the name of the file, without its directory
6011a7b590b3Smrg    func_basename "$output"
6012a7b590b3Smrg    outputname="$func_basename_result"
6013a7b590b3Smrg    libobjs_save="$libobjs"
6014a7b590b3Smrg
6015a7b590b3Smrg    if test -n "$shlibpath_var"; then
6016a7b590b3Smrg      # get the directories listed in $shlibpath_var
60173e51e026Smrg      eval shlib_search_path=\`\$ECHO \"\${$shlibpath_var}\" \| \$SED \'s/:/ /g\'\`
6018a7b590b3Smrg    else
6019a7b590b3Smrg      shlib_search_path=
6020a7b590b3Smrg    fi
6021a7b590b3Smrg    eval sys_lib_search_path=\"$sys_lib_search_path_spec\"
6022a7b590b3Smrg    eval sys_lib_dlsearch_path=\"$sys_lib_dlsearch_path_spec\"
6023a7b590b3Smrg
6024a7b590b3Smrg    func_dirname "$output" "/" ""
6025a7b590b3Smrg    output_objdir="$func_dirname_result$objdir"
60263e51e026Smrg    func_to_tool_file "$output_objdir/"
60273e51e026Smrg    tool_output_objdir=$func_to_tool_file_result
6028a7b590b3Smrg    # Create the object directory.
6029a7b590b3Smrg    func_mkdir_p "$output_objdir"
6030a7b590b3Smrg
6031a7b590b3Smrg    # Determine the type of output
6032a7b590b3Smrg    case $output in
6033a7b590b3Smrg    "")
6034a7b590b3Smrg      func_fatal_help "you must specify an output file"
6035a7b590b3Smrg      ;;
6036a7b590b3Smrg    *.$libext) linkmode=oldlib ;;
6037a7b590b3Smrg    *.lo | *.$objext) linkmode=obj ;;
6038a7b590b3Smrg    *.la) linkmode=lib ;;
6039a7b590b3Smrg    *) linkmode=prog ;; # Anything else should be a program.
6040a7b590b3Smrg    esac
6041a7b590b3Smrg
6042a7b590b3Smrg    specialdeplibs=
6043a7b590b3Smrg
6044a7b590b3Smrg    libs=
6045a7b590b3Smrg    # Find all interdependent deplibs by searching for libraries
6046a7b590b3Smrg    # that are linked more than once (e.g. -la -lb -la)
6047a7b590b3Smrg    for deplib in $deplibs; do
60483e51e026Smrg      if $opt_preserve_dup_deps ; then
6049a7b590b3Smrg	case "$libs " in
60503e51e026Smrg	*" $deplib "*) func_append specialdeplibs " $deplib" ;;
6051a7b590b3Smrg	esac
6052a7b590b3Smrg      fi
60533e51e026Smrg      func_append libs " $deplib"
6054a7b590b3Smrg    done
6055a7b590b3Smrg
6056a7b590b3Smrg    if test "$linkmode" = lib; then
6057a7b590b3Smrg      libs="$predeps $libs $compiler_lib_search_path $postdeps"
6058a7b590b3Smrg
6059a7b590b3Smrg      # Compute libraries that are listed more than once in $predeps
6060a7b590b3Smrg      # $postdeps and mark them as special (i.e., whose duplicates are
6061a7b590b3Smrg      # not to be eliminated).
6062a7b590b3Smrg      pre_post_deps=
6063a7b590b3Smrg      if $opt_duplicate_compiler_generated_deps; then
6064a7b590b3Smrg	for pre_post_dep in $predeps $postdeps; do
6065a7b590b3Smrg	  case "$pre_post_deps " in
60663e51e026Smrg	  *" $pre_post_dep "*) func_append specialdeplibs " $pre_post_deps" ;;
6067a7b590b3Smrg	  esac
60683e51e026Smrg	  func_append pre_post_deps " $pre_post_dep"
6069a7b590b3Smrg	done
6070a7b590b3Smrg      fi
6071a7b590b3Smrg      pre_post_deps=
6072a7b590b3Smrg    fi
6073a7b590b3Smrg
6074a7b590b3Smrg    deplibs=
6075a7b590b3Smrg    newdependency_libs=
6076a7b590b3Smrg    newlib_search_path=
6077a7b590b3Smrg    need_relink=no # whether we're linking any uninstalled libtool libraries
6078a7b590b3Smrg    notinst_deplibs= # not-installed libtool libraries
6079a7b590b3Smrg    notinst_path= # paths that contain not-installed libtool libraries
6080a7b590b3Smrg
6081a7b590b3Smrg    case $linkmode in
6082a7b590b3Smrg    lib)
6083a7b590b3Smrg	passes="conv dlpreopen link"
6084a7b590b3Smrg	for file in $dlfiles $dlprefiles; do
6085a7b590b3Smrg	  case $file in
6086a7b590b3Smrg	  *.la) ;;
6087a7b590b3Smrg	  *)
6088a7b590b3Smrg	    func_fatal_help "libraries can \`-dlopen' only libtool libraries: $file"
6089a7b590b3Smrg	    ;;
6090a7b590b3Smrg	  esac
6091a7b590b3Smrg	done
6092a7b590b3Smrg	;;
6093a7b590b3Smrg    prog)
6094a7b590b3Smrg	compile_deplibs=
6095a7b590b3Smrg	finalize_deplibs=
6096a7b590b3Smrg	alldeplibs=no
6097a7b590b3Smrg	newdlfiles=
6098a7b590b3Smrg	newdlprefiles=
6099a7b590b3Smrg	passes="conv scan dlopen dlpreopen link"
6100a7b590b3Smrg	;;
6101a7b590b3Smrg    *)  passes="conv"
6102a7b590b3Smrg	;;
6103a7b590b3Smrg    esac
6104a7b590b3Smrg
6105a7b590b3Smrg    for pass in $passes; do
6106a7b590b3Smrg      # The preopen pass in lib mode reverses $deplibs; put it back here
6107a7b590b3Smrg      # so that -L comes before libs that need it for instance...
6108a7b590b3Smrg      if test "$linkmode,$pass" = "lib,link"; then
6109a7b590b3Smrg	## FIXME: Find the place where the list is rebuilt in the wrong
6110a7b590b3Smrg	##        order, and fix it there properly
6111a7b590b3Smrg        tmp_deplibs=
6112a7b590b3Smrg	for deplib in $deplibs; do
6113a7b590b3Smrg	  tmp_deplibs="$deplib $tmp_deplibs"
6114a7b590b3Smrg	done
6115a7b590b3Smrg	deplibs="$tmp_deplibs"
6116a7b590b3Smrg      fi
6117a7b590b3Smrg
6118a7b590b3Smrg      if test "$linkmode,$pass" = "lib,link" ||
6119a7b590b3Smrg	 test "$linkmode,$pass" = "prog,scan"; then
6120a7b590b3Smrg	libs="$deplibs"
6121a7b590b3Smrg	deplibs=
6122a7b590b3Smrg      fi
6123a7b590b3Smrg      if test "$linkmode" = prog; then
6124a7b590b3Smrg	case $pass in
6125a7b590b3Smrg	dlopen) libs="$dlfiles" ;;
6126a7b590b3Smrg	dlpreopen) libs="$dlprefiles" ;;
6127a7b590b3Smrg	link) libs="$deplibs %DEPLIBS% $dependency_libs" ;;
6128a7b590b3Smrg	esac
6129a7b590b3Smrg      fi
6130a7b590b3Smrg      if test "$linkmode,$pass" = "lib,dlpreopen"; then
6131a7b590b3Smrg	# Collect and forward deplibs of preopened libtool libs
6132a7b590b3Smrg	for lib in $dlprefiles; do
6133a7b590b3Smrg	  # Ignore non-libtool-libs
6134a7b590b3Smrg	  dependency_libs=
61353e51e026Smrg	  func_resolve_sysroot "$lib"
6136a7b590b3Smrg	  case $lib in
61373e51e026Smrg	  *.la)	func_source "$func_resolve_sysroot_result" ;;
6138a7b590b3Smrg	  esac
6139a7b590b3Smrg
6140a7b590b3Smrg	  # Collect preopened libtool deplibs, except any this library
6141a7b590b3Smrg	  # has declared as weak libs
6142a7b590b3Smrg	  for deplib in $dependency_libs; do
61433e51e026Smrg	    func_basename "$deplib"
61443e51e026Smrg            deplib_base=$func_basename_result
6145a7b590b3Smrg	    case " $weak_libs " in
6146a7b590b3Smrg	    *" $deplib_base "*) ;;
61473e51e026Smrg	    *) func_append deplibs " $deplib" ;;
6148a7b590b3Smrg	    esac
6149a7b590b3Smrg	  done
6150a7b590b3Smrg	done
6151a7b590b3Smrg	libs="$dlprefiles"
6152a7b590b3Smrg      fi
6153a7b590b3Smrg      if test "$pass" = dlopen; then
6154a7b590b3Smrg	# Collect dlpreopened libraries
6155a7b590b3Smrg	save_deplibs="$deplibs"
6156a7b590b3Smrg	deplibs=
6157a7b590b3Smrg      fi
6158a7b590b3Smrg
6159a7b590b3Smrg      for deplib in $libs; do
6160a7b590b3Smrg	lib=
6161a7b590b3Smrg	found=no
6162a7b590b3Smrg	case $deplib in
61633e51e026Smrg	-mt|-mthreads|-kthread|-Kthread|-pthread|-pthreads|--thread-safe \
61643e51e026Smrg        |-threads|-fopenmp|-openmp|-mp|-xopenmp|-omp|-qsmp=*)
6165a7b590b3Smrg	  if test "$linkmode,$pass" = "prog,link"; then
6166a7b590b3Smrg	    compile_deplibs="$deplib $compile_deplibs"
6167a7b590b3Smrg	    finalize_deplibs="$deplib $finalize_deplibs"
6168a7b590b3Smrg	  else
61693e51e026Smrg	    func_append compiler_flags " $deplib"
6170a7b590b3Smrg	    if test "$linkmode" = lib ; then
6171a7b590b3Smrg		case "$new_inherited_linker_flags " in
6172a7b590b3Smrg		    *" $deplib "*) ;;
61733e51e026Smrg		    * ) func_append new_inherited_linker_flags " $deplib" ;;
6174a7b590b3Smrg		esac
6175a7b590b3Smrg	    fi
6176a7b590b3Smrg	  fi
6177a7b590b3Smrg	  continue
6178a7b590b3Smrg	  ;;
6179a7b590b3Smrg	-l*)
6180a7b590b3Smrg	  if test "$linkmode" != lib && test "$linkmode" != prog; then
6181a7b590b3Smrg	    func_warning "\`-l' is ignored for archives/objects"
6182a7b590b3Smrg	    continue
6183a7b590b3Smrg	  fi
6184a7b590b3Smrg	  func_stripname '-l' '' "$deplib"
6185a7b590b3Smrg	  name=$func_stripname_result
6186a7b590b3Smrg	  if test "$linkmode" = lib; then
6187a7b590b3Smrg	    searchdirs="$newlib_search_path $lib_search_path $compiler_lib_search_dirs $sys_lib_search_path $shlib_search_path"
6188a7b590b3Smrg	  else
6189a7b590b3Smrg	    searchdirs="$newlib_search_path $lib_search_path $sys_lib_search_path $shlib_search_path"
6190a7b590b3Smrg	  fi
6191a7b590b3Smrg	  for searchdir in $searchdirs; do
6192a7b590b3Smrg	    for search_ext in .la $std_shrext .so .a; do
6193a7b590b3Smrg	      # Search the libtool library
6194a7b590b3Smrg	      lib="$searchdir/lib${name}${search_ext}"
6195a7b590b3Smrg	      if test -f "$lib"; then
6196a7b590b3Smrg		if test "$search_ext" = ".la"; then
6197a7b590b3Smrg		  found=yes
6198a7b590b3Smrg		else
6199a7b590b3Smrg		  found=no
6200a7b590b3Smrg		fi
6201a7b590b3Smrg		break 2
6202a7b590b3Smrg	      fi
6203a7b590b3Smrg	    done
6204a7b590b3Smrg	  done
6205a7b590b3Smrg	  if test "$found" != yes; then
6206a7b590b3Smrg	    # deplib doesn't seem to be a libtool library
6207a7b590b3Smrg	    if test "$linkmode,$pass" = "prog,link"; then
6208a7b590b3Smrg	      compile_deplibs="$deplib $compile_deplibs"
6209a7b590b3Smrg	      finalize_deplibs="$deplib $finalize_deplibs"
6210a7b590b3Smrg	    else
6211a7b590b3Smrg	      deplibs="$deplib $deplibs"
6212a7b590b3Smrg	      test "$linkmode" = lib && newdependency_libs="$deplib $newdependency_libs"
6213a7b590b3Smrg	    fi
6214a7b590b3Smrg	    continue
6215a7b590b3Smrg	  else # deplib is a libtool library
6216a7b590b3Smrg	    # If $allow_libtool_libs_with_static_runtimes && $deplib is a stdlib,
6217a7b590b3Smrg	    # We need to do some special things here, and not later.
6218a7b590b3Smrg	    if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then
6219a7b590b3Smrg	      case " $predeps $postdeps " in
6220a7b590b3Smrg	      *" $deplib "*)
6221a7b590b3Smrg		if func_lalib_p "$lib"; then
6222a7b590b3Smrg		  library_names=
6223a7b590b3Smrg		  old_library=
6224a7b590b3Smrg		  func_source "$lib"
6225a7b590b3Smrg		  for l in $old_library $library_names; do
6226a7b590b3Smrg		    ll="$l"
6227a7b590b3Smrg		  done
6228a7b590b3Smrg		  if test "X$ll" = "X$old_library" ; then # only static version available
6229a7b590b3Smrg		    found=no
6230a7b590b3Smrg		    func_dirname "$lib" "" "."
6231a7b590b3Smrg		    ladir="$func_dirname_result"
6232a7b590b3Smrg		    lib=$ladir/$old_library
6233a7b590b3Smrg		    if test "$linkmode,$pass" = "prog,link"; then
6234a7b590b3Smrg		      compile_deplibs="$deplib $compile_deplibs"
6235a7b590b3Smrg		      finalize_deplibs="$deplib $finalize_deplibs"
6236a7b590b3Smrg		    else
6237a7b590b3Smrg		      deplibs="$deplib $deplibs"
6238a7b590b3Smrg		      test "$linkmode" = lib && newdependency_libs="$deplib $newdependency_libs"
6239a7b590b3Smrg		    fi
6240a7b590b3Smrg		    continue
6241a7b590b3Smrg		  fi
6242a7b590b3Smrg		fi
6243a7b590b3Smrg		;;
6244a7b590b3Smrg	      *) ;;
6245a7b590b3Smrg	      esac
6246a7b590b3Smrg	    fi
6247a7b590b3Smrg	  fi
6248a7b590b3Smrg	  ;; # -l
6249a7b590b3Smrg	*.ltframework)
6250a7b590b3Smrg	  if test "$linkmode,$pass" = "prog,link"; then
6251a7b590b3Smrg	    compile_deplibs="$deplib $compile_deplibs"
6252a7b590b3Smrg	    finalize_deplibs="$deplib $finalize_deplibs"
6253a7b590b3Smrg	  else
6254a7b590b3Smrg	    deplibs="$deplib $deplibs"
6255a7b590b3Smrg	    if test "$linkmode" = lib ; then
6256a7b590b3Smrg		case "$new_inherited_linker_flags " in
6257a7b590b3Smrg		    *" $deplib "*) ;;
62583e51e026Smrg		    * ) func_append new_inherited_linker_flags " $deplib" ;;
6259a7b590b3Smrg		esac
6260a7b590b3Smrg	    fi
6261a7b590b3Smrg	  fi
6262a7b590b3Smrg	  continue
6263a7b590b3Smrg	  ;;
6264a7b590b3Smrg	-L*)
6265a7b590b3Smrg	  case $linkmode in
6266a7b590b3Smrg	  lib)
6267a7b590b3Smrg	    deplibs="$deplib $deplibs"
6268a7b590b3Smrg	    test "$pass" = conv && continue
6269a7b590b3Smrg	    newdependency_libs="$deplib $newdependency_libs"
6270a7b590b3Smrg	    func_stripname '-L' '' "$deplib"
62713e51e026Smrg	    func_resolve_sysroot "$func_stripname_result"
62723e51e026Smrg	    func_append newlib_search_path " $func_resolve_sysroot_result"
6273a7b590b3Smrg	    ;;
6274a7b590b3Smrg	  prog)
6275a7b590b3Smrg	    if test "$pass" = conv; then
6276a7b590b3Smrg	      deplibs="$deplib $deplibs"
6277a7b590b3Smrg	      continue
6278a7b590b3Smrg	    fi
6279a7b590b3Smrg	    if test "$pass" = scan; then
6280a7b590b3Smrg	      deplibs="$deplib $deplibs"
6281a7b590b3Smrg	    else
6282a7b590b3Smrg	      compile_deplibs="$deplib $compile_deplibs"
6283a7b590b3Smrg	      finalize_deplibs="$deplib $finalize_deplibs"
6284a7b590b3Smrg	    fi
6285a7b590b3Smrg	    func_stripname '-L' '' "$deplib"
62863e51e026Smrg	    func_resolve_sysroot "$func_stripname_result"
62873e51e026Smrg	    func_append newlib_search_path " $func_resolve_sysroot_result"
6288a7b590b3Smrg	    ;;
6289a7b590b3Smrg	  *)
6290a7b590b3Smrg	    func_warning "\`-L' is ignored for archives/objects"
6291a7b590b3Smrg	    ;;
6292a7b590b3Smrg	  esac # linkmode
6293a7b590b3Smrg	  continue
6294a7b590b3Smrg	  ;; # -L
6295a7b590b3Smrg	-R*)
6296a7b590b3Smrg	  if test "$pass" = link; then
6297a7b590b3Smrg	    func_stripname '-R' '' "$deplib"
62983e51e026Smrg	    func_resolve_sysroot "$func_stripname_result"
62993e51e026Smrg	    dir=$func_resolve_sysroot_result
6300a7b590b3Smrg	    # Make sure the xrpath contains only unique directories.
6301a7b590b3Smrg	    case "$xrpath " in
6302a7b590b3Smrg	    *" $dir "*) ;;
63033e51e026Smrg	    *) func_append xrpath " $dir" ;;
6304a7b590b3Smrg	    esac
6305a7b590b3Smrg	  fi
6306a7b590b3Smrg	  deplibs="$deplib $deplibs"
6307a7b590b3Smrg	  continue
6308a7b590b3Smrg	  ;;
63093e51e026Smrg	*.la)
63103e51e026Smrg	  func_resolve_sysroot "$deplib"
63113e51e026Smrg	  lib=$func_resolve_sysroot_result
63123e51e026Smrg	  ;;
6313a7b590b3Smrg	*.$libext)
6314a7b590b3Smrg	  if test "$pass" = conv; then
6315a7b590b3Smrg	    deplibs="$deplib $deplibs"
6316a7b590b3Smrg	    continue
6317a7b590b3Smrg	  fi
6318a7b590b3Smrg	  case $linkmode in
6319a7b590b3Smrg	  lib)
6320a7b590b3Smrg	    # Linking convenience modules into shared libraries is allowed,
6321a7b590b3Smrg	    # but linking other static libraries is non-portable.
6322a7b590b3Smrg	    case " $dlpreconveniencelibs " in
6323a7b590b3Smrg	    *" $deplib "*) ;;
6324a7b590b3Smrg	    *)
6325a7b590b3Smrg	      valid_a_lib=no
6326a7b590b3Smrg	      case $deplibs_check_method in
6327a7b590b3Smrg		match_pattern*)
6328a7b590b3Smrg		  set dummy $deplibs_check_method; shift
6329a7b590b3Smrg		  match_pattern_regex=`expr "$deplibs_check_method" : "$1 \(.*\)"`
63303e51e026Smrg		  if eval "\$ECHO \"$deplib\"" 2>/dev/null | $SED 10q \
6331a7b590b3Smrg		    | $EGREP "$match_pattern_regex" > /dev/null; then
6332a7b590b3Smrg		    valid_a_lib=yes
6333a7b590b3Smrg		  fi
6334a7b590b3Smrg		;;
6335a7b590b3Smrg		pass_all)
6336a7b590b3Smrg		  valid_a_lib=yes
6337a7b590b3Smrg		;;
6338a7b590b3Smrg	      esac
6339a7b590b3Smrg	      if test "$valid_a_lib" != yes; then
63403e51e026Smrg		echo
6341a7b590b3Smrg		$ECHO "*** Warning: Trying to link with static lib archive $deplib."
63423e51e026Smrg		echo "*** I have the capability to make that library automatically link in when"
63433e51e026Smrg		echo "*** you link to this library.  But I can only do this if you have a"
63443e51e026Smrg		echo "*** shared version of the library, which you do not appear to have"
63453e51e026Smrg		echo "*** because the file extensions .$libext of this argument makes me believe"
63463e51e026Smrg		echo "*** that it is just a static archive that I should not use here."
6347a7b590b3Smrg	      else
63483e51e026Smrg		echo
6349a7b590b3Smrg		$ECHO "*** Warning: Linking the shared library $output against the"
6350a7b590b3Smrg		$ECHO "*** static library $deplib is not portable!"
6351a7b590b3Smrg		deplibs="$deplib $deplibs"
6352a7b590b3Smrg	      fi
6353a7b590b3Smrg	      ;;
6354a7b590b3Smrg	    esac
6355a7b590b3Smrg	    continue
6356a7b590b3Smrg	    ;;
6357a7b590b3Smrg	  prog)
6358a7b590b3Smrg	    if test "$pass" != link; then
6359a7b590b3Smrg	      deplibs="$deplib $deplibs"
6360a7b590b3Smrg	    else
6361a7b590b3Smrg	      compile_deplibs="$deplib $compile_deplibs"
6362a7b590b3Smrg	      finalize_deplibs="$deplib $finalize_deplibs"
6363a7b590b3Smrg	    fi
6364a7b590b3Smrg	    continue
6365a7b590b3Smrg	    ;;
6366a7b590b3Smrg	  esac # linkmode
6367a7b590b3Smrg	  ;; # *.$libext
6368a7b590b3Smrg	*.lo | *.$objext)
6369a7b590b3Smrg	  if test "$pass" = conv; then
6370a7b590b3Smrg	    deplibs="$deplib $deplibs"
6371a7b590b3Smrg	  elif test "$linkmode" = prog; then
6372a7b590b3Smrg	    if test "$pass" = dlpreopen || test "$dlopen_support" != yes || test "$build_libtool_libs" = no; then
6373a7b590b3Smrg	      # If there is no dlopen support or we're linking statically,
6374a7b590b3Smrg	      # we need to preload.
63753e51e026Smrg	      func_append newdlprefiles " $deplib"
6376a7b590b3Smrg	      compile_deplibs="$deplib $compile_deplibs"
6377a7b590b3Smrg	      finalize_deplibs="$deplib $finalize_deplibs"
6378a7b590b3Smrg	    else
63793e51e026Smrg	      func_append newdlfiles " $deplib"
6380a7b590b3Smrg	    fi
6381a7b590b3Smrg	  fi
6382a7b590b3Smrg	  continue
6383a7b590b3Smrg	  ;;
6384a7b590b3Smrg	%DEPLIBS%)
6385a7b590b3Smrg	  alldeplibs=yes
6386a7b590b3Smrg	  continue
6387a7b590b3Smrg	  ;;
6388a7b590b3Smrg	esac # case $deplib
6389a7b590b3Smrg
6390a7b590b3Smrg	if test "$found" = yes || test -f "$lib"; then :
6391a7b590b3Smrg	else
6392a7b590b3Smrg	  func_fatal_error "cannot find the library \`$lib' or unhandled argument \`$deplib'"
6393a7b590b3Smrg	fi
6394a7b590b3Smrg
6395a7b590b3Smrg	# Check to see that this really is a libtool archive.
6396a7b590b3Smrg	func_lalib_unsafe_p "$lib" \
6397a7b590b3Smrg	  || func_fatal_error "\`$lib' is not a valid libtool archive"
6398a7b590b3Smrg
6399a7b590b3Smrg	func_dirname "$lib" "" "."
6400a7b590b3Smrg	ladir="$func_dirname_result"
6401a7b590b3Smrg
6402a7b590b3Smrg	dlname=
6403a7b590b3Smrg	dlopen=
6404a7b590b3Smrg	dlpreopen=
6405a7b590b3Smrg	libdir=
6406a7b590b3Smrg	library_names=
6407a7b590b3Smrg	old_library=
6408a7b590b3Smrg	inherited_linker_flags=
6409a7b590b3Smrg	# If the library was installed with an old release of libtool,
6410a7b590b3Smrg	# it will not redefine variables installed, or shouldnotlink
6411a7b590b3Smrg	installed=yes
6412a7b590b3Smrg	shouldnotlink=no
6413a7b590b3Smrg	avoidtemprpath=
6414a7b590b3Smrg
6415a7b590b3Smrg
6416a7b590b3Smrg	# Read the .la file
6417a7b590b3Smrg	func_source "$lib"
6418a7b590b3Smrg
6419a7b590b3Smrg	# Convert "-framework foo" to "foo.ltframework"
6420a7b590b3Smrg	if test -n "$inherited_linker_flags"; then
64213e51e026Smrg	  tmp_inherited_linker_flags=`$ECHO "$inherited_linker_flags" | $SED 's/-framework \([^ $]*\)/\1.ltframework/g'`
6422a7b590b3Smrg	  for tmp_inherited_linker_flag in $tmp_inherited_linker_flags; do
6423a7b590b3Smrg	    case " $new_inherited_linker_flags " in
6424a7b590b3Smrg	      *" $tmp_inherited_linker_flag "*) ;;
64253e51e026Smrg	      *) func_append new_inherited_linker_flags " $tmp_inherited_linker_flag";;
6426a7b590b3Smrg	    esac
6427a7b590b3Smrg	  done
6428a7b590b3Smrg	fi
64293e51e026Smrg	dependency_libs=`$ECHO " $dependency_libs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'`
6430a7b590b3Smrg	if test "$linkmode,$pass" = "lib,link" ||
6431a7b590b3Smrg	   test "$linkmode,$pass" = "prog,scan" ||
6432a7b590b3Smrg	   { test "$linkmode" != prog && test "$linkmode" != lib; }; then
64333e51e026Smrg	  test -n "$dlopen" && func_append dlfiles " $dlopen"
64343e51e026Smrg	  test -n "$dlpreopen" && func_append dlprefiles " $dlpreopen"
6435a7b590b3Smrg	fi
6436a7b590b3Smrg
6437a7b590b3Smrg	if test "$pass" = conv; then
6438a7b590b3Smrg	  # Only check for convenience libraries
6439a7b590b3Smrg	  deplibs="$lib $deplibs"
6440a7b590b3Smrg	  if test -z "$libdir"; then
6441a7b590b3Smrg	    if test -z "$old_library"; then
6442a7b590b3Smrg	      func_fatal_error "cannot find name of link library for \`$lib'"
6443a7b590b3Smrg	    fi
6444a7b590b3Smrg	    # It is a libtool convenience library, so add in its objects.
64453e51e026Smrg	    func_append convenience " $ladir/$objdir/$old_library"
64463e51e026Smrg	    func_append old_convenience " $ladir/$objdir/$old_library"
6447a7b590b3Smrg	  elif test "$linkmode" != prog && test "$linkmode" != lib; then
6448a7b590b3Smrg	    func_fatal_error "\`$lib' is not a convenience library"
6449a7b590b3Smrg	  fi
6450a7b590b3Smrg	  tmp_libs=
6451a7b590b3Smrg	  for deplib in $dependency_libs; do
6452a7b590b3Smrg	    deplibs="$deplib $deplibs"
64533e51e026Smrg	    if $opt_preserve_dup_deps ; then
6454a7b590b3Smrg	      case "$tmp_libs " in
64553e51e026Smrg	      *" $deplib "*) func_append specialdeplibs " $deplib" ;;
6456a7b590b3Smrg	      esac
6457a7b590b3Smrg	    fi
64583e51e026Smrg	    func_append tmp_libs " $deplib"
6459a7b590b3Smrg	  done
6460a7b590b3Smrg	  continue
6461a7b590b3Smrg	fi # $pass = conv
6462a7b590b3Smrg
6463a7b590b3Smrg
6464a7b590b3Smrg	# Get the name of the library we link against.
6465a7b590b3Smrg	linklib=
64663e51e026Smrg	if test -n "$old_library" &&
64673e51e026Smrg	   { test "$prefer_static_libs" = yes ||
64683e51e026Smrg	     test "$prefer_static_libs,$installed" = "built,no"; }; then
64693e51e026Smrg	  linklib=$old_library
64703e51e026Smrg	else
64713e51e026Smrg	  for l in $old_library $library_names; do
64723e51e026Smrg	    linklib="$l"
64733e51e026Smrg	  done
64743e51e026Smrg	fi
6475a7b590b3Smrg	if test -z "$linklib"; then
6476a7b590b3Smrg	  func_fatal_error "cannot find name of link library for \`$lib'"
6477a7b590b3Smrg	fi
6478a7b590b3Smrg
6479a7b590b3Smrg	# This library was specified with -dlopen.
6480a7b590b3Smrg	if test "$pass" = dlopen; then
6481a7b590b3Smrg	  if test -z "$libdir"; then
6482a7b590b3Smrg	    func_fatal_error "cannot -dlopen a convenience library: \`$lib'"
6483a7b590b3Smrg	  fi
6484a7b590b3Smrg	  if test -z "$dlname" ||
6485a7b590b3Smrg	     test "$dlopen_support" != yes ||
6486a7b590b3Smrg	     test "$build_libtool_libs" = no; then
6487a7b590b3Smrg	    # If there is no dlname, no dlopen support or we're linking
6488a7b590b3Smrg	    # statically, we need to preload.  We also need to preload any
6489a7b590b3Smrg	    # dependent libraries so libltdl's deplib preloader doesn't
6490a7b590b3Smrg	    # bomb out in the load deplibs phase.
64913e51e026Smrg	    func_append dlprefiles " $lib $dependency_libs"
6492a7b590b3Smrg	  else
64933e51e026Smrg	    func_append newdlfiles " $lib"
6494a7b590b3Smrg	  fi
6495a7b590b3Smrg	  continue
6496a7b590b3Smrg	fi # $pass = dlopen
6497a7b590b3Smrg
6498a7b590b3Smrg	# We need an absolute path.
6499a7b590b3Smrg	case $ladir in
6500a7b590b3Smrg	[\\/]* | [A-Za-z]:[\\/]*) abs_ladir="$ladir" ;;
6501a7b590b3Smrg	*)
6502a7b590b3Smrg	  abs_ladir=`cd "$ladir" && pwd`
6503a7b590b3Smrg	  if test -z "$abs_ladir"; then
6504a7b590b3Smrg	    func_warning "cannot determine absolute directory name of \`$ladir'"
6505a7b590b3Smrg	    func_warning "passing it literally to the linker, although it might fail"
6506a7b590b3Smrg	    abs_ladir="$ladir"
6507a7b590b3Smrg	  fi
6508a7b590b3Smrg	  ;;
6509a7b590b3Smrg	esac
6510a7b590b3Smrg	func_basename "$lib"
6511a7b590b3Smrg	laname="$func_basename_result"
6512a7b590b3Smrg
6513a7b590b3Smrg	# Find the relevant object directory and library name.
6514a7b590b3Smrg	if test "X$installed" = Xyes; then
65153e51e026Smrg	  if test ! -f "$lt_sysroot$libdir/$linklib" && test -f "$abs_ladir/$linklib"; then
6516a7b590b3Smrg	    func_warning "library \`$lib' was moved."
6517a7b590b3Smrg	    dir="$ladir"
6518a7b590b3Smrg	    absdir="$abs_ladir"
6519a7b590b3Smrg	    libdir="$abs_ladir"
6520a7b590b3Smrg	  else
65213e51e026Smrg	    dir="$lt_sysroot$libdir"
65223e51e026Smrg	    absdir="$lt_sysroot$libdir"
6523a7b590b3Smrg	  fi
6524a7b590b3Smrg	  test "X$hardcode_automatic" = Xyes && avoidtemprpath=yes
6525a7b590b3Smrg	else
6526a7b590b3Smrg	  if test ! -f "$ladir/$objdir/$linklib" && test -f "$abs_ladir/$linklib"; then
6527a7b590b3Smrg	    dir="$ladir"
6528a7b590b3Smrg	    absdir="$abs_ladir"
6529a7b590b3Smrg	    # Remove this search path later
65303e51e026Smrg	    func_append notinst_path " $abs_ladir"
6531a7b590b3Smrg	  else
6532a7b590b3Smrg	    dir="$ladir/$objdir"
6533a7b590b3Smrg	    absdir="$abs_ladir/$objdir"
6534a7b590b3Smrg	    # Remove this search path later
65353e51e026Smrg	    func_append notinst_path " $abs_ladir"
6536a7b590b3Smrg	  fi
6537a7b590b3Smrg	fi # $installed = yes
6538a7b590b3Smrg	func_stripname 'lib' '.la' "$laname"
6539a7b590b3Smrg	name=$func_stripname_result
6540a7b590b3Smrg
6541a7b590b3Smrg	# This library was specified with -dlpreopen.
6542a7b590b3Smrg	if test "$pass" = dlpreopen; then
6543a7b590b3Smrg	  if test -z "$libdir" && test "$linkmode" = prog; then
6544a7b590b3Smrg	    func_fatal_error "only libraries may -dlpreopen a convenience library: \`$lib'"
6545a7b590b3Smrg	  fi
65463e51e026Smrg	  case "$host" in
65473e51e026Smrg	    # special handling for platforms with PE-DLLs.
65483e51e026Smrg	    *cygwin* | *mingw* | *cegcc* )
65493e51e026Smrg	      # Linker will automatically link against shared library if both
65503e51e026Smrg	      # static and shared are present.  Therefore, ensure we extract
65513e51e026Smrg	      # symbols from the import library if a shared library is present
65523e51e026Smrg	      # (otherwise, the dlopen module name will be incorrect).  We do
65533e51e026Smrg	      # this by putting the import library name into $newdlprefiles.
65543e51e026Smrg	      # We recover the dlopen module name by 'saving' the la file
65553e51e026Smrg	      # name in a special purpose variable, and (later) extracting the
65563e51e026Smrg	      # dlname from the la file.
65573e51e026Smrg	      if test -n "$dlname"; then
65583e51e026Smrg	        func_tr_sh "$dir/$linklib"
65593e51e026Smrg	        eval "libfile_$func_tr_sh_result=\$abs_ladir/\$laname"
65603e51e026Smrg	        func_append newdlprefiles " $dir/$linklib"
65613e51e026Smrg	      else
65623e51e026Smrg	        func_append newdlprefiles " $dir/$old_library"
65633e51e026Smrg	        # Keep a list of preopened convenience libraries to check
65643e51e026Smrg	        # that they are being used correctly in the link pass.
65653e51e026Smrg	        test -z "$libdir" && \
65663e51e026Smrg	          func_append dlpreconveniencelibs " $dir/$old_library"
65673e51e026Smrg	      fi
65683e51e026Smrg	    ;;
65693e51e026Smrg	    * )
65703e51e026Smrg	      # Prefer using a static library (so that no silly _DYNAMIC symbols
65713e51e026Smrg	      # are required to link).
65723e51e026Smrg	      if test -n "$old_library"; then
65733e51e026Smrg	        func_append newdlprefiles " $dir/$old_library"
65743e51e026Smrg	        # Keep a list of preopened convenience libraries to check
65753e51e026Smrg	        # that they are being used correctly in the link pass.
65763e51e026Smrg	        test -z "$libdir" && \
65773e51e026Smrg	          func_append dlpreconveniencelibs " $dir/$old_library"
65783e51e026Smrg	      # Otherwise, use the dlname, so that lt_dlopen finds it.
65793e51e026Smrg	      elif test -n "$dlname"; then
65803e51e026Smrg	        func_append newdlprefiles " $dir/$dlname"
65813e51e026Smrg	      else
65823e51e026Smrg	        func_append newdlprefiles " $dir/$linklib"
65833e51e026Smrg	      fi
65843e51e026Smrg	    ;;
65853e51e026Smrg	  esac
6586a7b590b3Smrg	fi # $pass = dlpreopen
6587a7b590b3Smrg
6588a7b590b3Smrg	if test -z "$libdir"; then
6589a7b590b3Smrg	  # Link the convenience library
6590a7b590b3Smrg	  if test "$linkmode" = lib; then
6591a7b590b3Smrg	    deplibs="$dir/$old_library $deplibs"
6592a7b590b3Smrg	  elif test "$linkmode,$pass" = "prog,link"; then
6593a7b590b3Smrg	    compile_deplibs="$dir/$old_library $compile_deplibs"
6594a7b590b3Smrg	    finalize_deplibs="$dir/$old_library $finalize_deplibs"
6595a7b590b3Smrg	  else
6596a7b590b3Smrg	    deplibs="$lib $deplibs" # used for prog,scan pass
6597a7b590b3Smrg	  fi
6598a7b590b3Smrg	  continue
6599a7b590b3Smrg	fi
6600a7b590b3Smrg
6601a7b590b3Smrg
6602a7b590b3Smrg	if test "$linkmode" = prog && test "$pass" != link; then
66033e51e026Smrg	  func_append newlib_search_path " $ladir"
6604a7b590b3Smrg	  deplibs="$lib $deplibs"
6605a7b590b3Smrg
6606a7b590b3Smrg	  linkalldeplibs=no
6607a7b590b3Smrg	  if test "$link_all_deplibs" != no || test -z "$library_names" ||
6608a7b590b3Smrg	     test "$build_libtool_libs" = no; then
6609a7b590b3Smrg	    linkalldeplibs=yes
6610a7b590b3Smrg	  fi
6611a7b590b3Smrg
6612a7b590b3Smrg	  tmp_libs=
6613a7b590b3Smrg	  for deplib in $dependency_libs; do
6614a7b590b3Smrg	    case $deplib in
6615a7b590b3Smrg	    -L*) func_stripname '-L' '' "$deplib"
66163e51e026Smrg	         func_resolve_sysroot "$func_stripname_result"
66173e51e026Smrg	         func_append newlib_search_path " $func_resolve_sysroot_result"
6618a7b590b3Smrg		 ;;
6619a7b590b3Smrg	    esac
6620a7b590b3Smrg	    # Need to link against all dependency_libs?
6621a7b590b3Smrg	    if test "$linkalldeplibs" = yes; then
6622a7b590b3Smrg	      deplibs="$deplib $deplibs"
6623a7b590b3Smrg	    else
6624a7b590b3Smrg	      # Need to hardcode shared library paths
6625a7b590b3Smrg	      # or/and link against static libraries
6626a7b590b3Smrg	      newdependency_libs="$deplib $newdependency_libs"
6627a7b590b3Smrg	    fi
66283e51e026Smrg	    if $opt_preserve_dup_deps ; then
6629a7b590b3Smrg	      case "$tmp_libs " in
66303e51e026Smrg	      *" $deplib "*) func_append specialdeplibs " $deplib" ;;
6631a7b590b3Smrg	      esac
6632a7b590b3Smrg	    fi
66333e51e026Smrg	    func_append tmp_libs " $deplib"
6634a7b590b3Smrg	  done # for deplib
6635a7b590b3Smrg	  continue
6636a7b590b3Smrg	fi # $linkmode = prog...
6637a7b590b3Smrg
6638a7b590b3Smrg	if test "$linkmode,$pass" = "prog,link"; then
6639a7b590b3Smrg	  if test -n "$library_names" &&
6640a7b590b3Smrg	     { { test "$prefer_static_libs" = no ||
6641a7b590b3Smrg	         test "$prefer_static_libs,$installed" = "built,yes"; } ||
6642a7b590b3Smrg	       test -z "$old_library"; }; then
6643a7b590b3Smrg	    # We need to hardcode the library path
6644a7b590b3Smrg	    if test -n "$shlibpath_var" && test -z "$avoidtemprpath" ; then
6645a7b590b3Smrg	      # Make sure the rpath contains only unique directories.
6646a7b590b3Smrg	      case "$temp_rpath:" in
6647a7b590b3Smrg	      *"$absdir:"*) ;;
66483e51e026Smrg	      *) func_append temp_rpath "$absdir:" ;;
6649a7b590b3Smrg	      esac
6650a7b590b3Smrg	    fi
6651a7b590b3Smrg
6652a7b590b3Smrg	    # Hardcode the library path.
6653a7b590b3Smrg	    # Skip directories that are in the system default run-time
6654a7b590b3Smrg	    # search path.
6655a7b590b3Smrg	    case " $sys_lib_dlsearch_path " in
6656a7b590b3Smrg	    *" $absdir "*) ;;
6657a7b590b3Smrg	    *)
6658a7b590b3Smrg	      case "$compile_rpath " in
6659a7b590b3Smrg	      *" $absdir "*) ;;
66603e51e026Smrg	      *) func_append compile_rpath " $absdir" ;;
6661a7b590b3Smrg	      esac
6662a7b590b3Smrg	      ;;
6663a7b590b3Smrg	    esac
6664a7b590b3Smrg	    case " $sys_lib_dlsearch_path " in
6665a7b590b3Smrg	    *" $libdir "*) ;;
6666a7b590b3Smrg	    *)
6667a7b590b3Smrg	      case "$finalize_rpath " in
6668a7b590b3Smrg	      *" $libdir "*) ;;
66693e51e026Smrg	      *) func_append finalize_rpath " $libdir" ;;
6670a7b590b3Smrg	      esac
6671a7b590b3Smrg	      ;;
6672a7b590b3Smrg	    esac
6673a7b590b3Smrg	  fi # $linkmode,$pass = prog,link...
6674a7b590b3Smrg
6675a7b590b3Smrg	  if test "$alldeplibs" = yes &&
6676a7b590b3Smrg	     { test "$deplibs_check_method" = pass_all ||
6677a7b590b3Smrg	       { test "$build_libtool_libs" = yes &&
6678a7b590b3Smrg		 test -n "$library_names"; }; }; then
6679a7b590b3Smrg	    # We only need to search for static libraries
6680a7b590b3Smrg	    continue
6681a7b590b3Smrg	  fi
6682a7b590b3Smrg	fi
6683a7b590b3Smrg
6684a7b590b3Smrg	link_static=no # Whether the deplib will be linked statically
6685a7b590b3Smrg	use_static_libs=$prefer_static_libs
6686a7b590b3Smrg	if test "$use_static_libs" = built && test "$installed" = yes; then
6687a7b590b3Smrg	  use_static_libs=no
6688a7b590b3Smrg	fi
6689a7b590b3Smrg	if test -n "$library_names" &&
6690a7b590b3Smrg	   { test "$use_static_libs" = no || test -z "$old_library"; }; then
6691a7b590b3Smrg	  case $host in
6692a7b590b3Smrg	  *cygwin* | *mingw* | *cegcc*)
6693a7b590b3Smrg	      # No point in relinking DLLs because paths are not encoded
66943e51e026Smrg	      func_append notinst_deplibs " $lib"
6695a7b590b3Smrg	      need_relink=no
6696a7b590b3Smrg	    ;;
6697a7b590b3Smrg	  *)
6698a7b590b3Smrg	    if test "$installed" = no; then
66993e51e026Smrg	      func_append notinst_deplibs " $lib"
6700a7b590b3Smrg	      need_relink=yes
6701a7b590b3Smrg	    fi
6702a7b590b3Smrg	    ;;
6703a7b590b3Smrg	  esac
6704a7b590b3Smrg	  # This is a shared library
6705a7b590b3Smrg
6706a7b590b3Smrg	  # Warn about portability, can't link against -module's on some
6707a7b590b3Smrg	  # systems (darwin).  Don't bleat about dlopened modules though!
6708a7b590b3Smrg	  dlopenmodule=""
6709a7b590b3Smrg	  for dlpremoduletest in $dlprefiles; do
6710a7b590b3Smrg	    if test "X$dlpremoduletest" = "X$lib"; then
6711a7b590b3Smrg	      dlopenmodule="$dlpremoduletest"
6712a7b590b3Smrg	      break
6713a7b590b3Smrg	    fi
6714a7b590b3Smrg	  done
6715a7b590b3Smrg	  if test -z "$dlopenmodule" && test "$shouldnotlink" = yes && test "$pass" = link; then
67163e51e026Smrg	    echo
6717a7b590b3Smrg	    if test "$linkmode" = prog; then
6718a7b590b3Smrg	      $ECHO "*** Warning: Linking the executable $output against the loadable module"
6719a7b590b3Smrg	    else
6720a7b590b3Smrg	      $ECHO "*** Warning: Linking the shared library $output against the loadable module"
6721a7b590b3Smrg	    fi
6722a7b590b3Smrg	    $ECHO "*** $linklib is not portable!"
6723a7b590b3Smrg	  fi
6724a7b590b3Smrg	  if test "$linkmode" = lib &&
6725a7b590b3Smrg	     test "$hardcode_into_libs" = yes; then
6726a7b590b3Smrg	    # Hardcode the library path.
6727a7b590b3Smrg	    # Skip directories that are in the system default run-time
6728a7b590b3Smrg	    # search path.
6729a7b590b3Smrg	    case " $sys_lib_dlsearch_path " in
6730a7b590b3Smrg	    *" $absdir "*) ;;
6731a7b590b3Smrg	    *)
6732a7b590b3Smrg	      case "$compile_rpath " in
6733a7b590b3Smrg	      *" $absdir "*) ;;
67343e51e026Smrg	      *) func_append compile_rpath " $absdir" ;;
6735a7b590b3Smrg	      esac
6736a7b590b3Smrg	      ;;
6737a7b590b3Smrg	    esac
6738a7b590b3Smrg	    case " $sys_lib_dlsearch_path " in
6739a7b590b3Smrg	    *" $libdir "*) ;;
6740a7b590b3Smrg	    *)
6741a7b590b3Smrg	      case "$finalize_rpath " in
6742a7b590b3Smrg	      *" $libdir "*) ;;
67433e51e026Smrg	      *) func_append finalize_rpath " $libdir" ;;
6744a7b590b3Smrg	      esac
6745a7b590b3Smrg	      ;;
6746a7b590b3Smrg	    esac
6747a7b590b3Smrg	  fi
6748a7b590b3Smrg
6749a7b590b3Smrg	  if test -n "$old_archive_from_expsyms_cmds"; then
6750a7b590b3Smrg	    # figure out the soname
6751a7b590b3Smrg	    set dummy $library_names
6752a7b590b3Smrg	    shift
6753a7b590b3Smrg	    realname="$1"
6754a7b590b3Smrg	    shift
6755a7b590b3Smrg	    libname=`eval "\\$ECHO \"$libname_spec\""`
6756a7b590b3Smrg	    # use dlname if we got it. it's perfectly good, no?
6757a7b590b3Smrg	    if test -n "$dlname"; then
6758a7b590b3Smrg	      soname="$dlname"
6759a7b590b3Smrg	    elif test -n "$soname_spec"; then
6760a7b590b3Smrg	      # bleh windows
6761a7b590b3Smrg	      case $host in
6762a7b590b3Smrg	      *cygwin* | mingw* | *cegcc*)
6763a7b590b3Smrg	        func_arith $current - $age
6764a7b590b3Smrg		major=$func_arith_result
6765a7b590b3Smrg		versuffix="-$major"
6766a7b590b3Smrg		;;
6767a7b590b3Smrg	      esac
6768a7b590b3Smrg	      eval soname=\"$soname_spec\"
6769a7b590b3Smrg	    else
6770a7b590b3Smrg	      soname="$realname"
6771a7b590b3Smrg	    fi
6772a7b590b3Smrg
6773a7b590b3Smrg	    # Make a new name for the extract_expsyms_cmds to use
6774a7b590b3Smrg	    soroot="$soname"
6775a7b590b3Smrg	    func_basename "$soroot"
6776a7b590b3Smrg	    soname="$func_basename_result"
6777a7b590b3Smrg	    func_stripname 'lib' '.dll' "$soname"
6778a7b590b3Smrg	    newlib=libimp-$func_stripname_result.a
6779a7b590b3Smrg
6780a7b590b3Smrg	    # If the library has no export list, then create one now
6781a7b590b3Smrg	    if test -f "$output_objdir/$soname-def"; then :
6782a7b590b3Smrg	    else
6783a7b590b3Smrg	      func_verbose "extracting exported symbol list from \`$soname'"
6784a7b590b3Smrg	      func_execute_cmds "$extract_expsyms_cmds" 'exit $?'
6785a7b590b3Smrg	    fi
6786a7b590b3Smrg
6787a7b590b3Smrg	    # Create $newlib
6788a7b590b3Smrg	    if test -f "$output_objdir/$newlib"; then :; else
6789a7b590b3Smrg	      func_verbose "generating import library for \`$soname'"
6790a7b590b3Smrg	      func_execute_cmds "$old_archive_from_expsyms_cmds" 'exit $?'
6791a7b590b3Smrg	    fi
6792a7b590b3Smrg	    # make sure the library variables are pointing to the new library
6793a7b590b3Smrg	    dir=$output_objdir
6794a7b590b3Smrg	    linklib=$newlib
6795a7b590b3Smrg	  fi # test -n "$old_archive_from_expsyms_cmds"
6796a7b590b3Smrg
67973e51e026Smrg	  if test "$linkmode" = prog || test "$opt_mode" != relink; then
6798a7b590b3Smrg	    add_shlibpath=
6799a7b590b3Smrg	    add_dir=
6800a7b590b3Smrg	    add=
6801a7b590b3Smrg	    lib_linked=yes
6802a7b590b3Smrg	    case $hardcode_action in
6803a7b590b3Smrg	    immediate | unsupported)
6804a7b590b3Smrg	      if test "$hardcode_direct" = no; then
6805a7b590b3Smrg		add="$dir/$linklib"
6806a7b590b3Smrg		case $host in
6807a7b590b3Smrg		  *-*-sco3.2v5.0.[024]*) add_dir="-L$dir" ;;
6808a7b590b3Smrg		  *-*-sysv4*uw2*) add_dir="-L$dir" ;;
6809a7b590b3Smrg		  *-*-sysv5OpenUNIX* | *-*-sysv5UnixWare7.[01].[10]* | \
6810a7b590b3Smrg		    *-*-unixware7*) add_dir="-L$dir" ;;
6811a7b590b3Smrg		  *-*-darwin* )
6812a7b590b3Smrg		    # if the lib is a (non-dlopened) module then we can not
6813a7b590b3Smrg		    # link against it, someone is ignoring the earlier warnings
6814a7b590b3Smrg		    if /usr/bin/file -L $add 2> /dev/null |
6815a7b590b3Smrg			 $GREP ": [^:]* bundle" >/dev/null ; then
6816a7b590b3Smrg		      if test "X$dlopenmodule" != "X$lib"; then
6817a7b590b3Smrg			$ECHO "*** Warning: lib $linklib is a module, not a shared library"
6818a7b590b3Smrg			if test -z "$old_library" ; then
68193e51e026Smrg			  echo
68203e51e026Smrg			  echo "*** And there doesn't seem to be a static archive available"
68213e51e026Smrg			  echo "*** The link will probably fail, sorry"
6822a7b590b3Smrg			else
6823a7b590b3Smrg			  add="$dir/$old_library"
6824a7b590b3Smrg			fi
6825a7b590b3Smrg		      elif test -n "$old_library"; then
6826a7b590b3Smrg			add="$dir/$old_library"
6827a7b590b3Smrg		      fi
6828a7b590b3Smrg		    fi
6829a7b590b3Smrg		esac
6830a7b590b3Smrg	      elif test "$hardcode_minus_L" = no; then
6831a7b590b3Smrg		case $host in
6832a7b590b3Smrg		*-*-sunos*) add_shlibpath="$dir" ;;
6833a7b590b3Smrg		esac
6834a7b590b3Smrg		add_dir="-L$dir"
6835a7b590b3Smrg		add="-l$name"
6836a7b590b3Smrg	      elif test "$hardcode_shlibpath_var" = no; then
6837a7b590b3Smrg		add_shlibpath="$dir"
6838a7b590b3Smrg		add="-l$name"
6839a7b590b3Smrg	      else
6840a7b590b3Smrg		lib_linked=no
6841a7b590b3Smrg	      fi
6842a7b590b3Smrg	      ;;
6843a7b590b3Smrg	    relink)
6844a7b590b3Smrg	      if test "$hardcode_direct" = yes &&
6845a7b590b3Smrg	         test "$hardcode_direct_absolute" = no; then
6846a7b590b3Smrg		add="$dir/$linklib"
6847a7b590b3Smrg	      elif test "$hardcode_minus_L" = yes; then
68483e51e026Smrg		add_dir="-L$absdir"
6849a7b590b3Smrg		# Try looking first in the location we're being installed to.
6850a7b590b3Smrg		if test -n "$inst_prefix_dir"; then
6851a7b590b3Smrg		  case $libdir in
6852a7b590b3Smrg		    [\\/]*)
68533e51e026Smrg		      func_append add_dir " -L$inst_prefix_dir$libdir"
6854a7b590b3Smrg		      ;;
6855a7b590b3Smrg		  esac
6856a7b590b3Smrg		fi
6857a7b590b3Smrg		add="-l$name"
6858a7b590b3Smrg	      elif test "$hardcode_shlibpath_var" = yes; then
6859a7b590b3Smrg		add_shlibpath="$dir"
6860a7b590b3Smrg		add="-l$name"
6861a7b590b3Smrg	      else
6862a7b590b3Smrg		lib_linked=no
6863a7b590b3Smrg	      fi
6864a7b590b3Smrg	      ;;
6865a7b590b3Smrg	    *) lib_linked=no ;;
6866a7b590b3Smrg	    esac
6867a7b590b3Smrg
6868a7b590b3Smrg	    if test "$lib_linked" != yes; then
6869a7b590b3Smrg	      func_fatal_configuration "unsupported hardcode properties"
6870a7b590b3Smrg	    fi
6871a7b590b3Smrg
6872a7b590b3Smrg	    if test -n "$add_shlibpath"; then
6873a7b590b3Smrg	      case :$compile_shlibpath: in
6874a7b590b3Smrg	      *":$add_shlibpath:"*) ;;
68753e51e026Smrg	      *) func_append compile_shlibpath "$add_shlibpath:" ;;
6876a7b590b3Smrg	      esac
6877a7b590b3Smrg	    fi
6878a7b590b3Smrg	    if test "$linkmode" = prog; then
6879a7b590b3Smrg	      test -n "$add_dir" && compile_deplibs="$add_dir $compile_deplibs"
6880a7b590b3Smrg	      test -n "$add" && compile_deplibs="$add $compile_deplibs"
6881a7b590b3Smrg	    else
6882a7b590b3Smrg	      test -n "$add_dir" && deplibs="$add_dir $deplibs"
6883a7b590b3Smrg	      test -n "$add" && deplibs="$add $deplibs"
6884a7b590b3Smrg	      if test "$hardcode_direct" != yes &&
6885a7b590b3Smrg		 test "$hardcode_minus_L" != yes &&
6886a7b590b3Smrg		 test "$hardcode_shlibpath_var" = yes; then
6887a7b590b3Smrg		case :$finalize_shlibpath: in
6888a7b590b3Smrg		*":$libdir:"*) ;;
68893e51e026Smrg		*) func_append finalize_shlibpath "$libdir:" ;;
6890a7b590b3Smrg		esac
6891a7b590b3Smrg	      fi
6892a7b590b3Smrg	    fi
6893a7b590b3Smrg	  fi
6894a7b590b3Smrg
68953e51e026Smrg	  if test "$linkmode" = prog || test "$opt_mode" = relink; then
6896a7b590b3Smrg	    add_shlibpath=
6897a7b590b3Smrg	    add_dir=
6898a7b590b3Smrg	    add=
6899a7b590b3Smrg	    # Finalize command for both is simple: just hardcode it.
6900a7b590b3Smrg	    if test "$hardcode_direct" = yes &&
6901a7b590b3Smrg	       test "$hardcode_direct_absolute" = no; then
6902a7b590b3Smrg	      add="$libdir/$linklib"
6903a7b590b3Smrg	    elif test "$hardcode_minus_L" = yes; then
6904a7b590b3Smrg	      add_dir="-L$libdir"
6905a7b590b3Smrg	      add="-l$name"
6906a7b590b3Smrg	    elif test "$hardcode_shlibpath_var" = yes; then
6907a7b590b3Smrg	      case :$finalize_shlibpath: in
6908a7b590b3Smrg	      *":$libdir:"*) ;;
69093e51e026Smrg	      *) func_append finalize_shlibpath "$libdir:" ;;
6910a7b590b3Smrg	      esac
6911a7b590b3Smrg	      add="-l$name"
6912a7b590b3Smrg	    elif test "$hardcode_automatic" = yes; then
6913a7b590b3Smrg	      if test -n "$inst_prefix_dir" &&
6914a7b590b3Smrg		 test -f "$inst_prefix_dir$libdir/$linklib" ; then
6915a7b590b3Smrg		add="$inst_prefix_dir$libdir/$linklib"
6916a7b590b3Smrg	      else
6917a7b590b3Smrg		add="$libdir/$linklib"
6918a7b590b3Smrg	      fi
6919a7b590b3Smrg	    else
6920a7b590b3Smrg	      # We cannot seem to hardcode it, guess we'll fake it.
6921a7b590b3Smrg	      add_dir="-L$libdir"
6922a7b590b3Smrg	      # Try looking first in the location we're being installed to.
6923a7b590b3Smrg	      if test -n "$inst_prefix_dir"; then
6924a7b590b3Smrg		case $libdir in
6925a7b590b3Smrg		  [\\/]*)
69263e51e026Smrg		    func_append add_dir " -L$inst_prefix_dir$libdir"
6927a7b590b3Smrg		    ;;
6928a7b590b3Smrg		esac
6929a7b590b3Smrg	      fi
6930a7b590b3Smrg	      add="-l$name"
6931a7b590b3Smrg	    fi
6932a7b590b3Smrg
6933a7b590b3Smrg	    if test "$linkmode" = prog; then
6934a7b590b3Smrg	      test -n "$add_dir" && finalize_deplibs="$add_dir $finalize_deplibs"
6935a7b590b3Smrg	      test -n "$add" && finalize_deplibs="$add $finalize_deplibs"
6936a7b590b3Smrg	    else
6937a7b590b3Smrg	      test -n "$add_dir" && deplibs="$add_dir $deplibs"
6938a7b590b3Smrg	      test -n "$add" && deplibs="$add $deplibs"
6939a7b590b3Smrg	    fi
6940a7b590b3Smrg	  fi
6941a7b590b3Smrg	elif test "$linkmode" = prog; then
6942a7b590b3Smrg	  # Here we assume that one of hardcode_direct or hardcode_minus_L
6943a7b590b3Smrg	  # is not unsupported.  This is valid on all known static and
6944a7b590b3Smrg	  # shared platforms.
6945a7b590b3Smrg	  if test "$hardcode_direct" != unsupported; then
6946a7b590b3Smrg	    test -n "$old_library" && linklib="$old_library"
6947a7b590b3Smrg	    compile_deplibs="$dir/$linklib $compile_deplibs"
6948a7b590b3Smrg	    finalize_deplibs="$dir/$linklib $finalize_deplibs"
6949a7b590b3Smrg	  else
6950a7b590b3Smrg	    compile_deplibs="-l$name -L$dir $compile_deplibs"
6951a7b590b3Smrg	    finalize_deplibs="-l$name -L$dir $finalize_deplibs"
6952a7b590b3Smrg	  fi
6953a7b590b3Smrg	elif test "$build_libtool_libs" = yes; then
6954a7b590b3Smrg	  # Not a shared library
6955a7b590b3Smrg	  if test "$deplibs_check_method" != pass_all; then
6956a7b590b3Smrg	    # We're trying link a shared library against a static one
6957a7b590b3Smrg	    # but the system doesn't support it.
6958a7b590b3Smrg
6959a7b590b3Smrg	    # Just print a warning and add the library to dependency_libs so
6960a7b590b3Smrg	    # that the program can be linked against the static library.
69613e51e026Smrg	    echo
6962a7b590b3Smrg	    $ECHO "*** Warning: This system can not link to static lib archive $lib."
69633e51e026Smrg	    echo "*** I have the capability to make that library automatically link in when"
69643e51e026Smrg	    echo "*** you link to this library.  But I can only do this if you have a"
69653e51e026Smrg	    echo "*** shared version of the library, which you do not appear to have."
6966a7b590b3Smrg	    if test "$module" = yes; then
69673e51e026Smrg	      echo "*** But as you try to build a module library, libtool will still create "
69683e51e026Smrg	      echo "*** a static module, that should work as long as the dlopening application"
69693e51e026Smrg	      echo "*** is linked with the -dlopen flag to resolve symbols at runtime."
6970a7b590b3Smrg	      if test -z "$global_symbol_pipe"; then
69713e51e026Smrg		echo
69723e51e026Smrg		echo "*** However, this would only work if libtool was able to extract symbol"
69733e51e026Smrg		echo "*** lists from a program, using \`nm' or equivalent, but libtool could"
69743e51e026Smrg		echo "*** not find such a program.  So, this module is probably useless."
69753e51e026Smrg		echo "*** \`nm' from GNU binutils and a full rebuild may help."
6976a7b590b3Smrg	      fi
6977a7b590b3Smrg	      if test "$build_old_libs" = no; then
6978a7b590b3Smrg		build_libtool_libs=module
6979a7b590b3Smrg		build_old_libs=yes
6980a7b590b3Smrg	      else
6981a7b590b3Smrg		build_libtool_libs=no
6982a7b590b3Smrg	      fi
6983a7b590b3Smrg	    fi
6984a7b590b3Smrg	  else
6985a7b590b3Smrg	    deplibs="$dir/$old_library $deplibs"
6986a7b590b3Smrg	    link_static=yes
6987a7b590b3Smrg	  fi
6988a7b590b3Smrg	fi # link shared/static library?
6989a7b590b3Smrg
6990a7b590b3Smrg	if test "$linkmode" = lib; then
6991a7b590b3Smrg	  if test -n "$dependency_libs" &&
6992a7b590b3Smrg	     { test "$hardcode_into_libs" != yes ||
6993a7b590b3Smrg	       test "$build_old_libs" = yes ||
6994a7b590b3Smrg	       test "$link_static" = yes; }; then
6995a7b590b3Smrg	    # Extract -R from dependency_libs
6996a7b590b3Smrg	    temp_deplibs=
6997a7b590b3Smrg	    for libdir in $dependency_libs; do
6998a7b590b3Smrg	      case $libdir in
6999a7b590b3Smrg	      -R*) func_stripname '-R' '' "$libdir"
7000a7b590b3Smrg	           temp_xrpath=$func_stripname_result
7001a7b590b3Smrg		   case " $xrpath " in
7002a7b590b3Smrg		   *" $temp_xrpath "*) ;;
70033e51e026Smrg		   *) func_append xrpath " $temp_xrpath";;
7004a7b590b3Smrg		   esac;;
70053e51e026Smrg	      *) func_append temp_deplibs " $libdir";;
7006a7b590b3Smrg	      esac
7007a7b590b3Smrg	    done
7008a7b590b3Smrg	    dependency_libs="$temp_deplibs"
7009a7b590b3Smrg	  fi
7010a7b590b3Smrg
70113e51e026Smrg	  func_append newlib_search_path " $absdir"
7012a7b590b3Smrg	  # Link against this library
7013a7b590b3Smrg	  test "$link_static" = no && newdependency_libs="$abs_ladir/$laname $newdependency_libs"
7014a7b590b3Smrg	  # ... and its dependency_libs
7015a7b590b3Smrg	  tmp_libs=
7016a7b590b3Smrg	  for deplib in $dependency_libs; do
7017a7b590b3Smrg	    newdependency_libs="$deplib $newdependency_libs"
70183e51e026Smrg	    case $deplib in
70193e51e026Smrg              -L*) func_stripname '-L' '' "$deplib"
70203e51e026Smrg                   func_resolve_sysroot "$func_stripname_result";;
70213e51e026Smrg              *) func_resolve_sysroot "$deplib" ;;
70223e51e026Smrg            esac
70233e51e026Smrg	    if $opt_preserve_dup_deps ; then
7024a7b590b3Smrg	      case "$tmp_libs " in
70253e51e026Smrg	      *" $func_resolve_sysroot_result "*)
70263e51e026Smrg                func_append specialdeplibs " $func_resolve_sysroot_result" ;;
7027a7b590b3Smrg	      esac
7028a7b590b3Smrg	    fi
70293e51e026Smrg	    func_append tmp_libs " $func_resolve_sysroot_result"
7030a7b590b3Smrg	  done
7031a7b590b3Smrg
7032a7b590b3Smrg	  if test "$link_all_deplibs" != no; then
7033a7b590b3Smrg	    # Add the search paths of all dependency libraries
7034a7b590b3Smrg	    for deplib in $dependency_libs; do
70353e51e026Smrg	      path=
7036a7b590b3Smrg	      case $deplib in
7037a7b590b3Smrg	      -L*) path="$deplib" ;;
7038a7b590b3Smrg	      *.la)
70393e51e026Smrg	        func_resolve_sysroot "$deplib"
70403e51e026Smrg	        deplib=$func_resolve_sysroot_result
7041a7b590b3Smrg	        func_dirname "$deplib" "" "."
70423e51e026Smrg		dir=$func_dirname_result
7043a7b590b3Smrg		# We need an absolute path.
7044a7b590b3Smrg		case $dir in
7045a7b590b3Smrg		[\\/]* | [A-Za-z]:[\\/]*) absdir="$dir" ;;
7046a7b590b3Smrg		*)
7047a7b590b3Smrg		  absdir=`cd "$dir" && pwd`
7048a7b590b3Smrg		  if test -z "$absdir"; then
7049a7b590b3Smrg		    func_warning "cannot determine absolute directory name of \`$dir'"
7050a7b590b3Smrg		    absdir="$dir"
7051a7b590b3Smrg		  fi
7052a7b590b3Smrg		  ;;
7053a7b590b3Smrg		esac
7054a7b590b3Smrg		if $GREP "^installed=no" $deplib > /dev/null; then
7055a7b590b3Smrg		case $host in
7056a7b590b3Smrg		*-*-darwin*)
7057a7b590b3Smrg		  depdepl=
7058a7b590b3Smrg		  eval deplibrary_names=`${SED} -n -e 's/^library_names=\(.*\)$/\1/p' $deplib`
7059a7b590b3Smrg		  if test -n "$deplibrary_names" ; then
7060a7b590b3Smrg		    for tmp in $deplibrary_names ; do
7061a7b590b3Smrg		      depdepl=$tmp
7062a7b590b3Smrg		    done
7063a7b590b3Smrg		    if test -f "$absdir/$objdir/$depdepl" ; then
7064a7b590b3Smrg		      depdepl="$absdir/$objdir/$depdepl"
7065a7b590b3Smrg		      darwin_install_name=`${OTOOL} -L $depdepl | awk '{if (NR == 2) {print $1;exit}}'`
7066a7b590b3Smrg                      if test -z "$darwin_install_name"; then
7067a7b590b3Smrg                          darwin_install_name=`${OTOOL64} -L $depdepl  | awk '{if (NR == 2) {print $1;exit}}'`
7068a7b590b3Smrg                      fi
70693e51e026Smrg		      func_append compiler_flags " ${wl}-dylib_file ${wl}${darwin_install_name}:${depdepl}"
70703e51e026Smrg		      func_append linker_flags " -dylib_file ${darwin_install_name}:${depdepl}"
7071a7b590b3Smrg		      path=
7072a7b590b3Smrg		    fi
7073a7b590b3Smrg		  fi
7074a7b590b3Smrg		  ;;
7075a7b590b3Smrg		*)
7076a7b590b3Smrg		  path="-L$absdir/$objdir"
7077a7b590b3Smrg		  ;;
7078a7b590b3Smrg		esac
7079a7b590b3Smrg		else
7080a7b590b3Smrg		  eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $deplib`
7081a7b590b3Smrg		  test -z "$libdir" && \
7082a7b590b3Smrg		    func_fatal_error "\`$deplib' is not a valid libtool archive"
7083a7b590b3Smrg		  test "$absdir" != "$libdir" && \
7084a7b590b3Smrg		    func_warning "\`$deplib' seems to be moved"
7085a7b590b3Smrg
7086a7b590b3Smrg		  path="-L$absdir"
7087a7b590b3Smrg		fi
7088a7b590b3Smrg		;;
7089a7b590b3Smrg	      esac
7090a7b590b3Smrg	      case " $deplibs " in
7091a7b590b3Smrg	      *" $path "*) ;;
7092a7b590b3Smrg	      *) deplibs="$path $deplibs" ;;
7093a7b590b3Smrg	      esac
7094a7b590b3Smrg	    done
7095a7b590b3Smrg	  fi # link_all_deplibs != no
7096a7b590b3Smrg	fi # linkmode = lib
7097a7b590b3Smrg      done # for deplib in $libs
7098a7b590b3Smrg      if test "$pass" = link; then
7099a7b590b3Smrg	if test "$linkmode" = "prog"; then
7100a7b590b3Smrg	  compile_deplibs="$new_inherited_linker_flags $compile_deplibs"
7101a7b590b3Smrg	  finalize_deplibs="$new_inherited_linker_flags $finalize_deplibs"
7102a7b590b3Smrg	else
71033e51e026Smrg	  compiler_flags="$compiler_flags "`$ECHO " $new_inherited_linker_flags" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'`
7104a7b590b3Smrg	fi
7105a7b590b3Smrg      fi
7106a7b590b3Smrg      dependency_libs="$newdependency_libs"
7107a7b590b3Smrg      if test "$pass" = dlpreopen; then
7108a7b590b3Smrg	# Link the dlpreopened libraries before other libraries
7109a7b590b3Smrg	for deplib in $save_deplibs; do
7110a7b590b3Smrg	  deplibs="$deplib $deplibs"
7111a7b590b3Smrg	done
7112a7b590b3Smrg      fi
7113a7b590b3Smrg      if test "$pass" != dlopen; then
7114a7b590b3Smrg	if test "$pass" != conv; then
7115a7b590b3Smrg	  # Make sure lib_search_path contains only unique directories.
7116a7b590b3Smrg	  lib_search_path=
7117a7b590b3Smrg	  for dir in $newlib_search_path; do
7118a7b590b3Smrg	    case "$lib_search_path " in
7119a7b590b3Smrg	    *" $dir "*) ;;
71203e51e026Smrg	    *) func_append lib_search_path " $dir" ;;
7121a7b590b3Smrg	    esac
7122a7b590b3Smrg	  done
7123a7b590b3Smrg	  newlib_search_path=
7124a7b590b3Smrg	fi
7125a7b590b3Smrg
7126a7b590b3Smrg	if test "$linkmode,$pass" != "prog,link"; then
7127a7b590b3Smrg	  vars="deplibs"
7128a7b590b3Smrg	else
7129a7b590b3Smrg	  vars="compile_deplibs finalize_deplibs"
7130a7b590b3Smrg	fi
7131a7b590b3Smrg	for var in $vars dependency_libs; do
7132a7b590b3Smrg	  # Add libraries to $var in reverse order
7133a7b590b3Smrg	  eval tmp_libs=\"\$$var\"
7134a7b590b3Smrg	  new_libs=
7135a7b590b3Smrg	  for deplib in $tmp_libs; do
7136a7b590b3Smrg	    # FIXME: Pedantically, this is the right thing to do, so
7137a7b590b3Smrg	    #        that some nasty dependency loop isn't accidentally
7138a7b590b3Smrg	    #        broken:
7139a7b590b3Smrg	    #new_libs="$deplib $new_libs"
7140a7b590b3Smrg	    # Pragmatically, this seems to cause very few problems in
7141a7b590b3Smrg	    # practice:
7142a7b590b3Smrg	    case $deplib in
7143a7b590b3Smrg	    -L*) new_libs="$deplib $new_libs" ;;
7144a7b590b3Smrg	    -R*) ;;
7145a7b590b3Smrg	    *)
7146a7b590b3Smrg	      # And here is the reason: when a library appears more
7147a7b590b3Smrg	      # than once as an explicit dependence of a library, or
7148a7b590b3Smrg	      # is implicitly linked in more than once by the
7149a7b590b3Smrg	      # compiler, it is considered special, and multiple
7150a7b590b3Smrg	      # occurrences thereof are not removed.  Compare this
7151a7b590b3Smrg	      # with having the same library being listed as a
7152a7b590b3Smrg	      # dependency of multiple other libraries: in this case,
7153a7b590b3Smrg	      # we know (pedantically, we assume) the library does not
7154a7b590b3Smrg	      # need to be listed more than once, so we keep only the
7155a7b590b3Smrg	      # last copy.  This is not always right, but it is rare
7156a7b590b3Smrg	      # enough that we require users that really mean to play
7157a7b590b3Smrg	      # such unportable linking tricks to link the library
7158a7b590b3Smrg	      # using -Wl,-lname, so that libtool does not consider it
7159a7b590b3Smrg	      # for duplicate removal.
7160a7b590b3Smrg	      case " $specialdeplibs " in
7161a7b590b3Smrg	      *" $deplib "*) new_libs="$deplib $new_libs" ;;
7162a7b590b3Smrg	      *)
7163a7b590b3Smrg		case " $new_libs " in
7164a7b590b3Smrg		*" $deplib "*) ;;
7165a7b590b3Smrg		*) new_libs="$deplib $new_libs" ;;
7166a7b590b3Smrg		esac
7167a7b590b3Smrg		;;
7168a7b590b3Smrg	      esac
7169a7b590b3Smrg	      ;;
7170a7b590b3Smrg	    esac
7171a7b590b3Smrg	  done
7172a7b590b3Smrg	  tmp_libs=
7173a7b590b3Smrg	  for deplib in $new_libs; do
7174a7b590b3Smrg	    case $deplib in
7175a7b590b3Smrg	    -L*)
7176a7b590b3Smrg	      case " $tmp_libs " in
7177a7b590b3Smrg	      *" $deplib "*) ;;
71783e51e026Smrg	      *) func_append tmp_libs " $deplib" ;;
7179a7b590b3Smrg	      esac
7180a7b590b3Smrg	      ;;
71813e51e026Smrg	    *) func_append tmp_libs " $deplib" ;;
7182a7b590b3Smrg	    esac
7183a7b590b3Smrg	  done
7184a7b590b3Smrg	  eval $var=\"$tmp_libs\"
7185a7b590b3Smrg	done # for var
7186a7b590b3Smrg      fi
7187a7b590b3Smrg      # Last step: remove runtime libs from dependency_libs
7188a7b590b3Smrg      # (they stay in deplibs)
7189a7b590b3Smrg      tmp_libs=
7190a7b590b3Smrg      for i in $dependency_libs ; do
7191a7b590b3Smrg	case " $predeps $postdeps $compiler_lib_search_path " in
7192a7b590b3Smrg	*" $i "*)
7193a7b590b3Smrg	  i=""
7194a7b590b3Smrg	  ;;
7195a7b590b3Smrg	esac
7196a7b590b3Smrg	if test -n "$i" ; then
71973e51e026Smrg	  func_append tmp_libs " $i"
7198a7b590b3Smrg	fi
7199a7b590b3Smrg      done
7200a7b590b3Smrg      dependency_libs=$tmp_libs
7201a7b590b3Smrg    done # for pass
7202a7b590b3Smrg    if test "$linkmode" = prog; then
7203a7b590b3Smrg      dlfiles="$newdlfiles"
7204a7b590b3Smrg    fi
7205a7b590b3Smrg    if test "$linkmode" = prog || test "$linkmode" = lib; then
7206a7b590b3Smrg      dlprefiles="$newdlprefiles"
7207a7b590b3Smrg    fi
7208a7b590b3Smrg
7209a7b590b3Smrg    case $linkmode in
7210a7b590b3Smrg    oldlib)
7211a7b590b3Smrg      if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then
7212a7b590b3Smrg	func_warning "\`-dlopen' is ignored for archives"
7213a7b590b3Smrg      fi
7214a7b590b3Smrg
7215a7b590b3Smrg      case " $deplibs" in
7216a7b590b3Smrg      *\ -l* | *\ -L*)
7217a7b590b3Smrg	func_warning "\`-l' and \`-L' are ignored for archives" ;;
7218a7b590b3Smrg      esac
7219a7b590b3Smrg
7220a7b590b3Smrg      test -n "$rpath" && \
7221a7b590b3Smrg	func_warning "\`-rpath' is ignored for archives"
7222a7b590b3Smrg
7223a7b590b3Smrg      test -n "$xrpath" && \
7224a7b590b3Smrg	func_warning "\`-R' is ignored for archives"
7225a7b590b3Smrg
7226a7b590b3Smrg      test -n "$vinfo" && \
7227a7b590b3Smrg	func_warning "\`-version-info/-version-number' is ignored for archives"
7228a7b590b3Smrg
7229a7b590b3Smrg      test -n "$release" && \
7230a7b590b3Smrg	func_warning "\`-release' is ignored for archives"
7231a7b590b3Smrg
7232a7b590b3Smrg      test -n "$export_symbols$export_symbols_regex" && \
7233a7b590b3Smrg	func_warning "\`-export-symbols' is ignored for archives"
7234a7b590b3Smrg
7235a7b590b3Smrg      # Now set the variables for building old libraries.
7236a7b590b3Smrg      build_libtool_libs=no
7237a7b590b3Smrg      oldlibs="$output"
72383e51e026Smrg      func_append objs "$old_deplibs"
7239a7b590b3Smrg      ;;
7240a7b590b3Smrg
7241a7b590b3Smrg    lib)
7242a7b590b3Smrg      # Make sure we only generate libraries of the form `libNAME.la'.
7243a7b590b3Smrg      case $outputname in
7244a7b590b3Smrg      lib*)
7245a7b590b3Smrg	func_stripname 'lib' '.la' "$outputname"
7246a7b590b3Smrg	name=$func_stripname_result
7247a7b590b3Smrg	eval shared_ext=\"$shrext_cmds\"
7248a7b590b3Smrg	eval libname=\"$libname_spec\"
7249a7b590b3Smrg	;;
7250a7b590b3Smrg      *)
7251a7b590b3Smrg	test "$module" = no && \
7252a7b590b3Smrg	  func_fatal_help "libtool library \`$output' must begin with \`lib'"
7253a7b590b3Smrg
7254a7b590b3Smrg	if test "$need_lib_prefix" != no; then
7255a7b590b3Smrg	  # Add the "lib" prefix for modules if required
7256a7b590b3Smrg	  func_stripname '' '.la' "$outputname"
7257a7b590b3Smrg	  name=$func_stripname_result
7258a7b590b3Smrg	  eval shared_ext=\"$shrext_cmds\"
7259a7b590b3Smrg	  eval libname=\"$libname_spec\"
7260a7b590b3Smrg	else
7261a7b590b3Smrg	  func_stripname '' '.la' "$outputname"
7262a7b590b3Smrg	  libname=$func_stripname_result
7263a7b590b3Smrg	fi
7264a7b590b3Smrg	;;
7265a7b590b3Smrg      esac
7266a7b590b3Smrg
7267a7b590b3Smrg      if test -n "$objs"; then
7268a7b590b3Smrg	if test "$deplibs_check_method" != pass_all; then
7269a7b590b3Smrg	  func_fatal_error "cannot build libtool library \`$output' from non-libtool objects on this host:$objs"
7270a7b590b3Smrg	else
72713e51e026Smrg	  echo
7272a7b590b3Smrg	  $ECHO "*** Warning: Linking the shared library $output against the non-libtool"
7273a7b590b3Smrg	  $ECHO "*** objects $objs is not portable!"
72743e51e026Smrg	  func_append libobjs " $objs"
7275a7b590b3Smrg	fi
7276a7b590b3Smrg      fi
7277a7b590b3Smrg
7278a7b590b3Smrg      test "$dlself" != no && \
7279a7b590b3Smrg	func_warning "\`-dlopen self' is ignored for libtool libraries"
7280a7b590b3Smrg
7281a7b590b3Smrg      set dummy $rpath
7282a7b590b3Smrg      shift
7283a7b590b3Smrg      test "$#" -gt 1 && \
7284a7b590b3Smrg	func_warning "ignoring multiple \`-rpath's for a libtool library"
7285a7b590b3Smrg
7286a7b590b3Smrg      install_libdir="$1"
7287a7b590b3Smrg
7288a7b590b3Smrg      oldlibs=
7289a7b590b3Smrg      if test -z "$rpath"; then
7290a7b590b3Smrg	if test "$build_libtool_libs" = yes; then
7291a7b590b3Smrg	  # Building a libtool convenience library.
7292a7b590b3Smrg	  # Some compilers have problems with a `.al' extension so
7293a7b590b3Smrg	  # convenience libraries should have the same extension an
7294a7b590b3Smrg	  # archive normally would.
7295a7b590b3Smrg	  oldlibs="$output_objdir/$libname.$libext $oldlibs"
7296a7b590b3Smrg	  build_libtool_libs=convenience
7297a7b590b3Smrg	  build_old_libs=yes
7298a7b590b3Smrg	fi
7299a7b590b3Smrg
7300a7b590b3Smrg	test -n "$vinfo" && \
7301a7b590b3Smrg	  func_warning "\`-version-info/-version-number' is ignored for convenience libraries"
7302a7b590b3Smrg
7303a7b590b3Smrg	test -n "$release" && \
7304a7b590b3Smrg	  func_warning "\`-release' is ignored for convenience libraries"
7305a7b590b3Smrg      else
7306a7b590b3Smrg
7307a7b590b3Smrg	# Parse the version information argument.
7308a7b590b3Smrg	save_ifs="$IFS"; IFS=':'
7309a7b590b3Smrg	set dummy $vinfo 0 0 0
7310a7b590b3Smrg	shift
7311a7b590b3Smrg	IFS="$save_ifs"
7312a7b590b3Smrg
7313a7b590b3Smrg	test -n "$7" && \
7314a7b590b3Smrg	  func_fatal_help "too many parameters to \`-version-info'"
7315a7b590b3Smrg
7316a7b590b3Smrg	# convert absolute version numbers to libtool ages
7317a7b590b3Smrg	# this retains compatibility with .la files and attempts
7318a7b590b3Smrg	# to make the code below a bit more comprehensible
7319a7b590b3Smrg
7320a7b590b3Smrg	case $vinfo_number in
7321a7b590b3Smrg	yes)
7322a7b590b3Smrg	  number_major="$1"
7323a7b590b3Smrg	  number_minor="$2"
7324a7b590b3Smrg	  number_revision="$3"
7325a7b590b3Smrg	  #
7326a7b590b3Smrg	  # There are really only two kinds -- those that
7327a7b590b3Smrg	  # use the current revision as the major version
7328a7b590b3Smrg	  # and those that subtract age and use age as
7329a7b590b3Smrg	  # a minor version.  But, then there is irix
7330a7b590b3Smrg	  # which has an extra 1 added just for fun
7331a7b590b3Smrg	  #
7332a7b590b3Smrg	  case $version_type in
73333e51e026Smrg	  # correct linux to gnu/linux during the next big refactor
7334a7b590b3Smrg	  darwin|linux|osf|windows|none)
7335a7b590b3Smrg	    func_arith $number_major + $number_minor
7336a7b590b3Smrg	    current=$func_arith_result
7337a7b590b3Smrg	    age="$number_minor"
7338a7b590b3Smrg	    revision="$number_revision"
7339a7b590b3Smrg	    ;;
73403e51e026Smrg	  freebsd-aout|freebsd-elf|qnx|sunos)
7341a7b590b3Smrg	    current="$number_major"
7342a7b590b3Smrg	    revision="$number_minor"
7343a7b590b3Smrg	    age="0"
7344a7b590b3Smrg	    ;;
7345a7b590b3Smrg	  irix|nonstopux)
7346a7b590b3Smrg	    func_arith $number_major + $number_minor
7347a7b590b3Smrg	    current=$func_arith_result
7348a7b590b3Smrg	    age="$number_minor"
7349a7b590b3Smrg	    revision="$number_minor"
7350a7b590b3Smrg	    lt_irix_increment=no
7351a7b590b3Smrg	    ;;
7352a7b590b3Smrg	  esac
7353a7b590b3Smrg	  ;;
7354a7b590b3Smrg	no)
7355a7b590b3Smrg	  current="$1"
7356a7b590b3Smrg	  revision="$2"
7357a7b590b3Smrg	  age="$3"
7358a7b590b3Smrg	  ;;
7359a7b590b3Smrg	esac
7360a7b590b3Smrg
7361a7b590b3Smrg	# Check that each of the things are valid numbers.
7362a7b590b3Smrg	case $current in
7363a7b590b3Smrg	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]) ;;
7364a7b590b3Smrg	*)
7365a7b590b3Smrg	  func_error "CURRENT \`$current' must be a nonnegative integer"
7366a7b590b3Smrg	  func_fatal_error "\`$vinfo' is not valid version information"
7367a7b590b3Smrg	  ;;
7368a7b590b3Smrg	esac
7369a7b590b3Smrg
7370a7b590b3Smrg	case $revision in
7371a7b590b3Smrg	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]) ;;
7372a7b590b3Smrg	*)
7373a7b590b3Smrg	  func_error "REVISION \`$revision' must be a nonnegative integer"
7374a7b590b3Smrg	  func_fatal_error "\`$vinfo' is not valid version information"
7375a7b590b3Smrg	  ;;
7376a7b590b3Smrg	esac
7377a7b590b3Smrg
7378a7b590b3Smrg	case $age in
7379a7b590b3Smrg	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]) ;;
7380a7b590b3Smrg	*)
7381a7b590b3Smrg	  func_error "AGE \`$age' must be a nonnegative integer"
7382a7b590b3Smrg	  func_fatal_error "\`$vinfo' is not valid version information"
7383a7b590b3Smrg	  ;;
7384a7b590b3Smrg	esac
7385a7b590b3Smrg
7386a7b590b3Smrg	if test "$age" -gt "$current"; then
7387a7b590b3Smrg	  func_error "AGE \`$age' is greater than the current interface number \`$current'"
7388a7b590b3Smrg	  func_fatal_error "\`$vinfo' is not valid version information"
7389a7b590b3Smrg	fi
7390a7b590b3Smrg
7391a7b590b3Smrg	# Calculate the version variables.
7392a7b590b3Smrg	major=
7393a7b590b3Smrg	versuffix=
7394a7b590b3Smrg	verstring=
7395a7b590b3Smrg	case $version_type in
7396a7b590b3Smrg	none) ;;
7397a7b590b3Smrg
7398a7b590b3Smrg	darwin)
7399a7b590b3Smrg	  # Like Linux, but with the current version available in
7400a7b590b3Smrg	  # verstring for coding it into the library header
7401a7b590b3Smrg	  func_arith $current - $age
7402a7b590b3Smrg	  major=.$func_arith_result
7403a7b590b3Smrg	  versuffix="$major.$age.$revision"
7404a7b590b3Smrg	  # Darwin ld doesn't like 0 for these options...
7405a7b590b3Smrg	  func_arith $current + 1
7406a7b590b3Smrg	  minor_current=$func_arith_result
7407a7b590b3Smrg	  xlcverstring="${wl}-compatibility_version ${wl}$minor_current ${wl}-current_version ${wl}$minor_current.$revision"
7408a7b590b3Smrg	  verstring="-compatibility_version $minor_current -current_version $minor_current.$revision"
7409a7b590b3Smrg	  ;;
7410a7b590b3Smrg
7411a7b590b3Smrg	freebsd-aout)
7412a7b590b3Smrg	  major=".$current"
7413a7b590b3Smrg	  versuffix=".$current.$revision";
7414a7b590b3Smrg	  ;;
7415a7b590b3Smrg
7416a7b590b3Smrg	freebsd-elf)
7417a7b590b3Smrg	  major=".$current"
7418a7b590b3Smrg	  versuffix=".$current"
7419a7b590b3Smrg	  ;;
7420a7b590b3Smrg
7421a7b590b3Smrg	irix | nonstopux)
7422a7b590b3Smrg	  if test "X$lt_irix_increment" = "Xno"; then
7423a7b590b3Smrg	    func_arith $current - $age
7424a7b590b3Smrg	  else
7425a7b590b3Smrg	    func_arith $current - $age + 1
7426a7b590b3Smrg	  fi
7427a7b590b3Smrg	  major=$func_arith_result
7428a7b590b3Smrg
7429a7b590b3Smrg	  case $version_type in
7430a7b590b3Smrg	    nonstopux) verstring_prefix=nonstopux ;;
7431a7b590b3Smrg	    *)         verstring_prefix=sgi ;;
7432a7b590b3Smrg	  esac
7433a7b590b3Smrg	  verstring="$verstring_prefix$major.$revision"
7434a7b590b3Smrg
7435a7b590b3Smrg	  # Add in all the interfaces that we are compatible with.
7436a7b590b3Smrg	  loop=$revision
7437a7b590b3Smrg	  while test "$loop" -ne 0; do
7438a7b590b3Smrg	    func_arith $revision - $loop
7439a7b590b3Smrg	    iface=$func_arith_result
7440a7b590b3Smrg	    func_arith $loop - 1
7441a7b590b3Smrg	    loop=$func_arith_result
7442a7b590b3Smrg	    verstring="$verstring_prefix$major.$iface:$verstring"
7443a7b590b3Smrg	  done
7444a7b590b3Smrg
7445a7b590b3Smrg	  # Before this point, $major must not contain `.'.
7446a7b590b3Smrg	  major=.$major
7447a7b590b3Smrg	  versuffix="$major.$revision"
7448a7b590b3Smrg	  ;;
7449a7b590b3Smrg
74503e51e026Smrg	linux) # correct to gnu/linux during the next big refactor
7451a7b590b3Smrg	  func_arith $current - $age
7452a7b590b3Smrg	  major=.$func_arith_result
7453a7b590b3Smrg	  versuffix="$major.$age.$revision"
7454a7b590b3Smrg	  ;;
7455a7b590b3Smrg
7456a7b590b3Smrg	osf)
7457a7b590b3Smrg	  func_arith $current - $age
7458a7b590b3Smrg	  major=.$func_arith_result
7459a7b590b3Smrg	  versuffix=".$current.$age.$revision"
7460a7b590b3Smrg	  verstring="$current.$age.$revision"
7461a7b590b3Smrg
7462a7b590b3Smrg	  # Add in all the interfaces that we are compatible with.
7463a7b590b3Smrg	  loop=$age
7464a7b590b3Smrg	  while test "$loop" -ne 0; do
7465a7b590b3Smrg	    func_arith $current - $loop
7466a7b590b3Smrg	    iface=$func_arith_result
7467a7b590b3Smrg	    func_arith $loop - 1
7468a7b590b3Smrg	    loop=$func_arith_result
7469a7b590b3Smrg	    verstring="$verstring:${iface}.0"
7470a7b590b3Smrg	  done
7471a7b590b3Smrg
7472a7b590b3Smrg	  # Make executables depend on our current version.
74733e51e026Smrg	  func_append verstring ":${current}.0"
7474a7b590b3Smrg	  ;;
7475a7b590b3Smrg
7476a7b590b3Smrg	qnx)
7477a7b590b3Smrg	  major=".$current"
7478a7b590b3Smrg	  versuffix=".$current"
7479a7b590b3Smrg	  ;;
7480a7b590b3Smrg
7481a7b590b3Smrg	sunos)
7482a7b590b3Smrg	  major=".$current"
7483a7b590b3Smrg	  versuffix=".$current.$revision"
7484a7b590b3Smrg	  ;;
7485a7b590b3Smrg
7486a7b590b3Smrg	windows)
7487a7b590b3Smrg	  # Use '-' rather than '.', since we only want one
7488a7b590b3Smrg	  # extension on DOS 8.3 filesystems.
7489a7b590b3Smrg	  func_arith $current - $age
7490a7b590b3Smrg	  major=$func_arith_result
7491a7b590b3Smrg	  versuffix="-$major"
7492a7b590b3Smrg	  ;;
7493a7b590b3Smrg
7494a7b590b3Smrg	*)
7495a7b590b3Smrg	  func_fatal_configuration "unknown library version type \`$version_type'"
7496a7b590b3Smrg	  ;;
7497a7b590b3Smrg	esac
7498a7b590b3Smrg
7499a7b590b3Smrg	# Clear the version info if we defaulted, and they specified a release.
7500a7b590b3Smrg	if test -z "$vinfo" && test -n "$release"; then
7501a7b590b3Smrg	  major=
7502a7b590b3Smrg	  case $version_type in
7503a7b590b3Smrg	  darwin)
7504a7b590b3Smrg	    # we can't check for "0.0" in archive_cmds due to quoting
7505a7b590b3Smrg	    # problems, so we reset it completely
7506a7b590b3Smrg	    verstring=
7507a7b590b3Smrg	    ;;
7508a7b590b3Smrg	  *)
7509a7b590b3Smrg	    verstring="0.0"
7510a7b590b3Smrg	    ;;
7511a7b590b3Smrg	  esac
7512a7b590b3Smrg	  if test "$need_version" = no; then
7513a7b590b3Smrg	    versuffix=
7514a7b590b3Smrg	  else
7515a7b590b3Smrg	    versuffix=".0.0"
7516a7b590b3Smrg	  fi
7517a7b590b3Smrg	fi
7518a7b590b3Smrg
7519a7b590b3Smrg	# Remove version info from name if versioning should be avoided
7520a7b590b3Smrg	if test "$avoid_version" = yes && test "$need_version" = no; then
7521a7b590b3Smrg	  major=
7522a7b590b3Smrg	  versuffix=
7523a7b590b3Smrg	  verstring=""
7524a7b590b3Smrg	fi
7525a7b590b3Smrg
7526a7b590b3Smrg	# Check to see if the archive will have undefined symbols.
7527a7b590b3Smrg	if test "$allow_undefined" = yes; then
7528a7b590b3Smrg	  if test "$allow_undefined_flag" = unsupported; then
7529a7b590b3Smrg	    func_warning "undefined symbols not allowed in $host shared libraries"
7530a7b590b3Smrg	    build_libtool_libs=no
7531a7b590b3Smrg	    build_old_libs=yes
7532a7b590b3Smrg	  fi
7533a7b590b3Smrg	else
7534a7b590b3Smrg	  # Don't allow undefined symbols.
7535a7b590b3Smrg	  allow_undefined_flag="$no_undefined_flag"
7536a7b590b3Smrg	fi
7537a7b590b3Smrg
7538a7b590b3Smrg      fi
7539a7b590b3Smrg
7540a7b590b3Smrg      func_generate_dlsyms "$libname" "$libname" "yes"
75413e51e026Smrg      func_append libobjs " $symfileobj"
7542a7b590b3Smrg      test "X$libobjs" = "X " && libobjs=
7543a7b590b3Smrg
75443e51e026Smrg      if test "$opt_mode" != relink; then
7545a7b590b3Smrg	# Remove our outputs, but don't remove object files since they
7546a7b590b3Smrg	# may have been created when compiling PIC objects.
7547a7b590b3Smrg	removelist=
7548a7b590b3Smrg	tempremovelist=`$ECHO "$output_objdir/*"`
7549a7b590b3Smrg	for p in $tempremovelist; do
7550a7b590b3Smrg	  case $p in
7551a7b590b3Smrg	    *.$objext | *.gcno)
7552a7b590b3Smrg	       ;;
7553a7b590b3Smrg	    $output_objdir/$outputname | $output_objdir/$libname.* | $output_objdir/${libname}${release}.*)
7554a7b590b3Smrg	       if test "X$precious_files_regex" != "X"; then
7555a7b590b3Smrg		 if $ECHO "$p" | $EGREP -e "$precious_files_regex" >/dev/null 2>&1
7556a7b590b3Smrg		 then
7557a7b590b3Smrg		   continue
7558a7b590b3Smrg		 fi
7559a7b590b3Smrg	       fi
75603e51e026Smrg	       func_append removelist " $p"
7561a7b590b3Smrg	       ;;
7562a7b590b3Smrg	    *) ;;
7563a7b590b3Smrg	  esac
7564a7b590b3Smrg	done
7565a7b590b3Smrg	test -n "$removelist" && \
7566a7b590b3Smrg	  func_show_eval "${RM}r \$removelist"
7567a7b590b3Smrg      fi
7568a7b590b3Smrg
7569a7b590b3Smrg      # Now set the variables for building old libraries.
7570a7b590b3Smrg      if test "$build_old_libs" = yes && test "$build_libtool_libs" != convenience ; then
75713e51e026Smrg	func_append oldlibs " $output_objdir/$libname.$libext"
7572a7b590b3Smrg
7573a7b590b3Smrg	# Transform .lo files to .o files.
75743e51e026Smrg	oldobjs="$objs "`$ECHO "$libobjs" | $SP2NL | $SED "/\.${libext}$/d; $lo2o" | $NL2SP`
7575a7b590b3Smrg      fi
7576a7b590b3Smrg
7577a7b590b3Smrg      # Eliminate all temporary directories.
7578a7b590b3Smrg      #for path in $notinst_path; do
75793e51e026Smrg      #	lib_search_path=`$ECHO "$lib_search_path " | $SED "s% $path % %g"`
75803e51e026Smrg      #	deplibs=`$ECHO "$deplibs " | $SED "s% -L$path % %g"`
75813e51e026Smrg      #	dependency_libs=`$ECHO "$dependency_libs " | $SED "s% -L$path % %g"`
7582a7b590b3Smrg      #done
7583a7b590b3Smrg
7584a7b590b3Smrg      if test -n "$xrpath"; then
7585a7b590b3Smrg	# If the user specified any rpath flags, then add them.
7586a7b590b3Smrg	temp_xrpath=
7587a7b590b3Smrg	for libdir in $xrpath; do
75883e51e026Smrg	  func_replace_sysroot "$libdir"
75893e51e026Smrg	  func_append temp_xrpath " -R$func_replace_sysroot_result"
7590a7b590b3Smrg	  case "$finalize_rpath " in
7591a7b590b3Smrg	  *" $libdir "*) ;;
75923e51e026Smrg	  *) func_append finalize_rpath " $libdir" ;;
7593a7b590b3Smrg	  esac
7594a7b590b3Smrg	done
7595a7b590b3Smrg	if test "$hardcode_into_libs" != yes || test "$build_old_libs" = yes; then
7596a7b590b3Smrg	  dependency_libs="$temp_xrpath $dependency_libs"
7597a7b590b3Smrg	fi
7598a7b590b3Smrg      fi
7599a7b590b3Smrg
7600a7b590b3Smrg      # Make sure dlfiles contains only unique files that won't be dlpreopened
7601a7b590b3Smrg      old_dlfiles="$dlfiles"
7602a7b590b3Smrg      dlfiles=
7603a7b590b3Smrg      for lib in $old_dlfiles; do
7604a7b590b3Smrg	case " $dlprefiles $dlfiles " in
7605a7b590b3Smrg	*" $lib "*) ;;
76063e51e026Smrg	*) func_append dlfiles " $lib" ;;
7607a7b590b3Smrg	esac
7608a7b590b3Smrg      done
7609a7b590b3Smrg
7610a7b590b3Smrg      # Make sure dlprefiles contains only unique files
7611a7b590b3Smrg      old_dlprefiles="$dlprefiles"
7612a7b590b3Smrg      dlprefiles=
7613a7b590b3Smrg      for lib in $old_dlprefiles; do
7614a7b590b3Smrg	case "$dlprefiles " in
7615a7b590b3Smrg	*" $lib "*) ;;
76163e51e026Smrg	*) func_append dlprefiles " $lib" ;;
7617a7b590b3Smrg	esac
7618a7b590b3Smrg      done
7619a7b590b3Smrg
7620a7b590b3Smrg      if test "$build_libtool_libs" = yes; then
7621a7b590b3Smrg	if test -n "$rpath"; then
7622a7b590b3Smrg	  case $host in
76233e51e026Smrg	  *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-*-beos* | *-cegcc* | *-*-haiku*)
7624a7b590b3Smrg	    # these systems don't actually have a c library (as such)!
7625a7b590b3Smrg	    ;;
7626a7b590b3Smrg	  *-*-rhapsody* | *-*-darwin1.[012])
7627a7b590b3Smrg	    # Rhapsody C library is in the System framework
76283e51e026Smrg	    func_append deplibs " System.ltframework"
7629a7b590b3Smrg	    ;;
7630a7b590b3Smrg	  *-*-netbsd*)
7631a7b590b3Smrg	    # Don't link with libc until the a.out ld.so is fixed.
7632a7b590b3Smrg	    ;;
7633a7b590b3Smrg	  *-*-openbsd* | *-*-freebsd* | *-*-dragonfly*)
7634a7b590b3Smrg	    # Do not include libc due to us having libc/libc_r.
7635a7b590b3Smrg	    ;;
7636a7b590b3Smrg	  *-*-sco3.2v5* | *-*-sco5v6*)
7637a7b590b3Smrg	    # Causes problems with __ctype
7638a7b590b3Smrg	    ;;
7639a7b590b3Smrg	  *-*-sysv4.2uw2* | *-*-sysv5* | *-*-unixware* | *-*-OpenUNIX*)
7640a7b590b3Smrg	    # Compiler inserts libc in the correct place for threads to work
7641a7b590b3Smrg	    ;;
7642a7b590b3Smrg	  *)
7643a7b590b3Smrg	    # Add libc to deplibs on all other systems if necessary.
7644a7b590b3Smrg	    if test "$build_libtool_need_lc" = "yes"; then
76453e51e026Smrg	      func_append deplibs " -lc"
7646a7b590b3Smrg	    fi
7647a7b590b3Smrg	    ;;
7648a7b590b3Smrg	  esac
7649a7b590b3Smrg	fi
7650a7b590b3Smrg
7651a7b590b3Smrg	# Transform deplibs into only deplibs that can be linked in shared.
7652a7b590b3Smrg	name_save=$name
7653a7b590b3Smrg	libname_save=$libname
7654a7b590b3Smrg	release_save=$release
7655a7b590b3Smrg	versuffix_save=$versuffix
7656a7b590b3Smrg	major_save=$major
7657a7b590b3Smrg	# I'm not sure if I'm treating the release correctly.  I think
7658a7b590b3Smrg	# release should show up in the -l (ie -lgmp5) so we don't want to
7659a7b590b3Smrg	# add it in twice.  Is that correct?
7660a7b590b3Smrg	release=""
7661a7b590b3Smrg	versuffix=""
7662a7b590b3Smrg	major=""
7663a7b590b3Smrg	newdeplibs=
7664a7b590b3Smrg	droppeddeps=no
7665a7b590b3Smrg	case $deplibs_check_method in
7666a7b590b3Smrg	pass_all)
7667a7b590b3Smrg	  # Don't check for shared/static.  Everything works.
7668a7b590b3Smrg	  # This might be a little naive.  We might want to check
7669a7b590b3Smrg	  # whether the library exists or not.  But this is on
7670a7b590b3Smrg	  # osf3 & osf4 and I'm not really sure... Just
7671a7b590b3Smrg	  # implementing what was already the behavior.
7672a7b590b3Smrg	  newdeplibs=$deplibs
7673a7b590b3Smrg	  ;;
7674a7b590b3Smrg	test_compile)
7675a7b590b3Smrg	  # This code stresses the "libraries are programs" paradigm to its
7676a7b590b3Smrg	  # limits. Maybe even breaks it.  We compile a program, linking it
7677a7b590b3Smrg	  # against the deplibs as a proxy for the library.  Then we can check
7678a7b590b3Smrg	  # whether they linked in statically or dynamically with ldd.
7679a7b590b3Smrg	  $opt_dry_run || $RM conftest.c
7680a7b590b3Smrg	  cat > conftest.c <<EOF
7681a7b590b3Smrg	  int main() { return 0; }
7682a7b590b3SmrgEOF
7683a7b590b3Smrg	  $opt_dry_run || $RM conftest
7684a7b590b3Smrg	  if $LTCC $LTCFLAGS -o conftest conftest.c $deplibs; then
7685a7b590b3Smrg	    ldd_output=`ldd conftest`
7686a7b590b3Smrg	    for i in $deplibs; do
7687a7b590b3Smrg	      case $i in
7688a7b590b3Smrg	      -l*)
7689a7b590b3Smrg		func_stripname -l '' "$i"
7690a7b590b3Smrg		name=$func_stripname_result
7691a7b590b3Smrg		if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then
7692a7b590b3Smrg		  case " $predeps $postdeps " in
7693a7b590b3Smrg		  *" $i "*)
76943e51e026Smrg		    func_append newdeplibs " $i"
7695a7b590b3Smrg		    i=""
7696a7b590b3Smrg		    ;;
7697a7b590b3Smrg		  esac
7698a7b590b3Smrg		fi
7699a7b590b3Smrg		if test -n "$i" ; then
7700a7b590b3Smrg		  libname=`eval "\\$ECHO \"$libname_spec\""`
7701a7b590b3Smrg		  deplib_matches=`eval "\\$ECHO \"$library_names_spec\""`
7702a7b590b3Smrg		  set dummy $deplib_matches; shift
7703a7b590b3Smrg		  deplib_match=$1
7704a7b590b3Smrg		  if test `expr "$ldd_output" : ".*$deplib_match"` -ne 0 ; then
77053e51e026Smrg		    func_append newdeplibs " $i"
7706a7b590b3Smrg		  else
7707a7b590b3Smrg		    droppeddeps=yes
77083e51e026Smrg		    echo
7709a7b590b3Smrg		    $ECHO "*** Warning: dynamic linker does not accept needed library $i."
77103e51e026Smrg		    echo "*** I have the capability to make that library automatically link in when"
77113e51e026Smrg		    echo "*** you link to this library.  But I can only do this if you have a"
77123e51e026Smrg		    echo "*** shared version of the library, which I believe you do not have"
77133e51e026Smrg		    echo "*** because a test_compile did reveal that the linker did not use it for"
77143e51e026Smrg		    echo "*** its dynamic dependency list that programs get resolved with at runtime."
7715a7b590b3Smrg		  fi
7716a7b590b3Smrg		fi
7717a7b590b3Smrg		;;
7718a7b590b3Smrg	      *)
77193e51e026Smrg		func_append newdeplibs " $i"
7720a7b590b3Smrg		;;
7721a7b590b3Smrg	      esac
7722a7b590b3Smrg	    done
7723a7b590b3Smrg	  else
7724a7b590b3Smrg	    # Error occurred in the first compile.  Let's try to salvage
7725a7b590b3Smrg	    # the situation: Compile a separate program for each library.
7726a7b590b3Smrg	    for i in $deplibs; do
7727a7b590b3Smrg	      case $i in
7728a7b590b3Smrg	      -l*)
7729a7b590b3Smrg		func_stripname -l '' "$i"
7730a7b590b3Smrg		name=$func_stripname_result
7731a7b590b3Smrg		$opt_dry_run || $RM conftest
7732a7b590b3Smrg		if $LTCC $LTCFLAGS -o conftest conftest.c $i; then
7733a7b590b3Smrg		  ldd_output=`ldd conftest`
7734a7b590b3Smrg		  if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then
7735a7b590b3Smrg		    case " $predeps $postdeps " in
7736a7b590b3Smrg		    *" $i "*)
77373e51e026Smrg		      func_append newdeplibs " $i"
7738a7b590b3Smrg		      i=""
7739a7b590b3Smrg		      ;;
7740a7b590b3Smrg		    esac
7741a7b590b3Smrg		  fi
7742a7b590b3Smrg		  if test -n "$i" ; then
7743a7b590b3Smrg		    libname=`eval "\\$ECHO \"$libname_spec\""`
7744a7b590b3Smrg		    deplib_matches=`eval "\\$ECHO \"$library_names_spec\""`
7745a7b590b3Smrg		    set dummy $deplib_matches; shift
7746a7b590b3Smrg		    deplib_match=$1
7747a7b590b3Smrg		    if test `expr "$ldd_output" : ".*$deplib_match"` -ne 0 ; then
77483e51e026Smrg		      func_append newdeplibs " $i"
7749a7b590b3Smrg		    else
7750a7b590b3Smrg		      droppeddeps=yes
77513e51e026Smrg		      echo
7752a7b590b3Smrg		      $ECHO "*** Warning: dynamic linker does not accept needed library $i."
77533e51e026Smrg		      echo "*** I have the capability to make that library automatically link in when"
77543e51e026Smrg		      echo "*** you link to this library.  But I can only do this if you have a"
77553e51e026Smrg		      echo "*** shared version of the library, which you do not appear to have"
77563e51e026Smrg		      echo "*** because a test_compile did reveal that the linker did not use this one"
77573e51e026Smrg		      echo "*** as a dynamic dependency that programs can get resolved with at runtime."
7758a7b590b3Smrg		    fi
7759a7b590b3Smrg		  fi
7760a7b590b3Smrg		else
7761a7b590b3Smrg		  droppeddeps=yes
77623e51e026Smrg		  echo
7763a7b590b3Smrg		  $ECHO "*** Warning!  Library $i is needed by this library but I was not able to"
77643e51e026Smrg		  echo "*** make it link in!  You will probably need to install it or some"
77653e51e026Smrg		  echo "*** library that it depends on before this library will be fully"
77663e51e026Smrg		  echo "*** functional.  Installing it before continuing would be even better."
7767a7b590b3Smrg		fi
7768a7b590b3Smrg		;;
7769a7b590b3Smrg	      *)
77703e51e026Smrg		func_append newdeplibs " $i"
7771a7b590b3Smrg		;;
7772a7b590b3Smrg	      esac
7773a7b590b3Smrg	    done
7774a7b590b3Smrg	  fi
7775a7b590b3Smrg	  ;;
7776a7b590b3Smrg	file_magic*)
7777a7b590b3Smrg	  set dummy $deplibs_check_method; shift
7778a7b590b3Smrg	  file_magic_regex=`expr "$deplibs_check_method" : "$1 \(.*\)"`
7779a7b590b3Smrg	  for a_deplib in $deplibs; do
7780a7b590b3Smrg	    case $a_deplib in
7781a7b590b3Smrg	    -l*)
7782a7b590b3Smrg	      func_stripname -l '' "$a_deplib"
7783a7b590b3Smrg	      name=$func_stripname_result
7784a7b590b3Smrg	      if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then
7785a7b590b3Smrg		case " $predeps $postdeps " in
7786a7b590b3Smrg		*" $a_deplib "*)
77873e51e026Smrg		  func_append newdeplibs " $a_deplib"
7788a7b590b3Smrg		  a_deplib=""
7789a7b590b3Smrg		  ;;
7790a7b590b3Smrg		esac
7791a7b590b3Smrg	      fi
7792a7b590b3Smrg	      if test -n "$a_deplib" ; then
7793a7b590b3Smrg		libname=`eval "\\$ECHO \"$libname_spec\""`
77943e51e026Smrg		if test -n "$file_magic_glob"; then
77953e51e026Smrg		  libnameglob=`func_echo_all "$libname" | $SED -e $file_magic_glob`
77963e51e026Smrg		else
77973e51e026Smrg		  libnameglob=$libname
77983e51e026Smrg		fi
77993e51e026Smrg		test "$want_nocaseglob" = yes && nocaseglob=`shopt -p nocaseglob`
7800a7b590b3Smrg		for i in $lib_search_path $sys_lib_search_path $shlib_search_path; do
78013e51e026Smrg		  if test "$want_nocaseglob" = yes; then
78023e51e026Smrg		    shopt -s nocaseglob
78033e51e026Smrg		    potential_libs=`ls $i/$libnameglob[.-]* 2>/dev/null`
78043e51e026Smrg		    $nocaseglob
78053e51e026Smrg		  else
78063e51e026Smrg		    potential_libs=`ls $i/$libnameglob[.-]* 2>/dev/null`
78073e51e026Smrg		  fi
7808a7b590b3Smrg		  for potent_lib in $potential_libs; do
7809a7b590b3Smrg		      # Follow soft links.
7810a7b590b3Smrg		      if ls -lLd "$potent_lib" 2>/dev/null |
7811a7b590b3Smrg			 $GREP " -> " >/dev/null; then
7812a7b590b3Smrg			continue
7813a7b590b3Smrg		      fi
7814a7b590b3Smrg		      # The statement above tries to avoid entering an
7815a7b590b3Smrg		      # endless loop below, in case of cyclic links.
7816a7b590b3Smrg		      # We might still enter an endless loop, since a link
7817a7b590b3Smrg		      # loop can be closed while we follow links,
7818a7b590b3Smrg		      # but so what?
7819a7b590b3Smrg		      potlib="$potent_lib"
7820a7b590b3Smrg		      while test -h "$potlib" 2>/dev/null; do
7821a7b590b3Smrg			potliblink=`ls -ld $potlib | ${SED} 's/.* -> //'`
7822a7b590b3Smrg			case $potliblink in
7823a7b590b3Smrg			[\\/]* | [A-Za-z]:[\\/]*) potlib="$potliblink";;
78243e51e026Smrg			*) potlib=`$ECHO "$potlib" | $SED 's,[^/]*$,,'`"$potliblink";;
7825a7b590b3Smrg			esac
7826a7b590b3Smrg		      done
7827a7b590b3Smrg		      if eval $file_magic_cmd \"\$potlib\" 2>/dev/null |
7828a7b590b3Smrg			 $SED -e 10q |
7829a7b590b3Smrg			 $EGREP "$file_magic_regex" > /dev/null; then
78303e51e026Smrg			func_append newdeplibs " $a_deplib"
7831a7b590b3Smrg			a_deplib=""
7832a7b590b3Smrg			break 2
7833a7b590b3Smrg		      fi
7834a7b590b3Smrg		  done
7835a7b590b3Smrg		done
7836a7b590b3Smrg	      fi
7837a7b590b3Smrg	      if test -n "$a_deplib" ; then
7838a7b590b3Smrg		droppeddeps=yes
78393e51e026Smrg		echo
7840a7b590b3Smrg		$ECHO "*** Warning: linker path does not have real file for library $a_deplib."
78413e51e026Smrg		echo "*** I have the capability to make that library automatically link in when"
78423e51e026Smrg		echo "*** you link to this library.  But I can only do this if you have a"
78433e51e026Smrg		echo "*** shared version of the library, which you do not appear to have"
78443e51e026Smrg		echo "*** because I did check the linker path looking for a file starting"
7845a7b590b3Smrg		if test -z "$potlib" ; then
7846a7b590b3Smrg		  $ECHO "*** with $libname but no candidates were found. (...for file magic test)"
7847a7b590b3Smrg		else
7848a7b590b3Smrg		  $ECHO "*** with $libname and none of the candidates passed a file format test"
7849a7b590b3Smrg		  $ECHO "*** using a file magic. Last file checked: $potlib"
7850a7b590b3Smrg		fi
7851a7b590b3Smrg	      fi
7852a7b590b3Smrg	      ;;
7853a7b590b3Smrg	    *)
7854a7b590b3Smrg	      # Add a -L argument.
78553e51e026Smrg	      func_append newdeplibs " $a_deplib"
7856a7b590b3Smrg	      ;;
7857a7b590b3Smrg	    esac
7858a7b590b3Smrg	  done # Gone through all deplibs.
7859a7b590b3Smrg	  ;;
7860a7b590b3Smrg	match_pattern*)
7861a7b590b3Smrg	  set dummy $deplibs_check_method; shift
7862a7b590b3Smrg	  match_pattern_regex=`expr "$deplibs_check_method" : "$1 \(.*\)"`
7863a7b590b3Smrg	  for a_deplib in $deplibs; do
7864a7b590b3Smrg	    case $a_deplib in
7865a7b590b3Smrg	    -l*)
7866a7b590b3Smrg	      func_stripname -l '' "$a_deplib"
7867a7b590b3Smrg	      name=$func_stripname_result
7868a7b590b3Smrg	      if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then
7869a7b590b3Smrg		case " $predeps $postdeps " in
7870a7b590b3Smrg		*" $a_deplib "*)
78713e51e026Smrg		  func_append newdeplibs " $a_deplib"
7872a7b590b3Smrg		  a_deplib=""
7873a7b590b3Smrg		  ;;
7874a7b590b3Smrg		esac
7875a7b590b3Smrg	      fi
7876a7b590b3Smrg	      if test -n "$a_deplib" ; then
7877a7b590b3Smrg		libname=`eval "\\$ECHO \"$libname_spec\""`
7878a7b590b3Smrg		for i in $lib_search_path $sys_lib_search_path $shlib_search_path; do
7879a7b590b3Smrg		  potential_libs=`ls $i/$libname[.-]* 2>/dev/null`
7880a7b590b3Smrg		  for potent_lib in $potential_libs; do
7881a7b590b3Smrg		    potlib="$potent_lib" # see symlink-check above in file_magic test
78823e51e026Smrg		    if eval "\$ECHO \"$potent_lib\"" 2>/dev/null | $SED 10q | \
7883a7b590b3Smrg		       $EGREP "$match_pattern_regex" > /dev/null; then
78843e51e026Smrg		      func_append newdeplibs " $a_deplib"
7885a7b590b3Smrg		      a_deplib=""
7886a7b590b3Smrg		      break 2
7887a7b590b3Smrg		    fi
7888a7b590b3Smrg		  done
7889a7b590b3Smrg		done
7890a7b590b3Smrg	      fi
7891a7b590b3Smrg	      if test -n "$a_deplib" ; then
7892a7b590b3Smrg		droppeddeps=yes
78933e51e026Smrg		echo
7894a7b590b3Smrg		$ECHO "*** Warning: linker path does not have real file for library $a_deplib."
78953e51e026Smrg		echo "*** I have the capability to make that library automatically link in when"
78963e51e026Smrg		echo "*** you link to this library.  But I can only do this if you have a"
78973e51e026Smrg		echo "*** shared version of the library, which you do not appear to have"
78983e51e026Smrg		echo "*** because I did check the linker path looking for a file starting"
7899a7b590b3Smrg		if test -z "$potlib" ; then
7900a7b590b3Smrg		  $ECHO "*** with $libname but no candidates were found. (...for regex pattern test)"
7901a7b590b3Smrg		else
7902a7b590b3Smrg		  $ECHO "*** with $libname and none of the candidates passed a file format test"
7903a7b590b3Smrg		  $ECHO "*** using a regex pattern. Last file checked: $potlib"
7904a7b590b3Smrg		fi
7905a7b590b3Smrg	      fi
7906a7b590b3Smrg	      ;;
7907a7b590b3Smrg	    *)
7908a7b590b3Smrg	      # Add a -L argument.
79093e51e026Smrg	      func_append newdeplibs " $a_deplib"
7910a7b590b3Smrg	      ;;
7911a7b590b3Smrg	    esac
7912a7b590b3Smrg	  done # Gone through all deplibs.
7913a7b590b3Smrg	  ;;
7914a7b590b3Smrg	none | unknown | *)
7915a7b590b3Smrg	  newdeplibs=""
79163e51e026Smrg	  tmp_deplibs=`$ECHO " $deplibs" | $SED 's/ -lc$//; s/ -[LR][^ ]*//g'`
7917a7b590b3Smrg	  if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then
7918a7b590b3Smrg	    for i in $predeps $postdeps ; do
7919a7b590b3Smrg	      # can't use Xsed below, because $i might contain '/'
79203e51e026Smrg	      tmp_deplibs=`$ECHO " $tmp_deplibs" | $SED "s,$i,,"`
7921a7b590b3Smrg	    done
7922a7b590b3Smrg	  fi
79233e51e026Smrg	  case $tmp_deplibs in
79243e51e026Smrg	  *[!\	\ ]*)
79253e51e026Smrg	    echo
7926a7b590b3Smrg	    if test "X$deplibs_check_method" = "Xnone"; then
79273e51e026Smrg	      echo "*** Warning: inter-library dependencies are not supported in this platform."
7928a7b590b3Smrg	    else
79293e51e026Smrg	      echo "*** Warning: inter-library dependencies are not known to be supported."
7930a7b590b3Smrg	    fi
79313e51e026Smrg	    echo "*** All declared inter-library dependencies are being dropped."
7932a7b590b3Smrg	    droppeddeps=yes
79333e51e026Smrg	    ;;
79343e51e026Smrg	  esac
7935a7b590b3Smrg	  ;;
7936a7b590b3Smrg	esac
7937a7b590b3Smrg	versuffix=$versuffix_save
7938a7b590b3Smrg	major=$major_save
7939a7b590b3Smrg	release=$release_save
7940a7b590b3Smrg	libname=$libname_save
7941a7b590b3Smrg	name=$name_save
7942a7b590b3Smrg
7943a7b590b3Smrg	case $host in
7944a7b590b3Smrg	*-*-rhapsody* | *-*-darwin1.[012])
7945a7b590b3Smrg	  # On Rhapsody replace the C library with the System framework
79463e51e026Smrg	  newdeplibs=`$ECHO " $newdeplibs" | $SED 's/ -lc / System.ltframework /'`
7947a7b590b3Smrg	  ;;
7948a7b590b3Smrg	esac
7949a7b590b3Smrg
7950a7b590b3Smrg	if test "$droppeddeps" = yes; then
7951a7b590b3Smrg	  if test "$module" = yes; then
79523e51e026Smrg	    echo
79533e51e026Smrg	    echo "*** Warning: libtool could not satisfy all declared inter-library"
7954a7b590b3Smrg	    $ECHO "*** dependencies of module $libname.  Therefore, libtool will create"
79553e51e026Smrg	    echo "*** a static module, that should work as long as the dlopening"
79563e51e026Smrg	    echo "*** application is linked with the -dlopen flag."
7957a7b590b3Smrg	    if test -z "$global_symbol_pipe"; then
79583e51e026Smrg	      echo
79593e51e026Smrg	      echo "*** However, this would only work if libtool was able to extract symbol"
79603e51e026Smrg	      echo "*** lists from a program, using \`nm' or equivalent, but libtool could"
79613e51e026Smrg	      echo "*** not find such a program.  So, this module is probably useless."
79623e51e026Smrg	      echo "*** \`nm' from GNU binutils and a full rebuild may help."
7963a7b590b3Smrg	    fi
7964a7b590b3Smrg	    if test "$build_old_libs" = no; then
7965a7b590b3Smrg	      oldlibs="$output_objdir/$libname.$libext"
7966a7b590b3Smrg	      build_libtool_libs=module
7967a7b590b3Smrg	      build_old_libs=yes
7968a7b590b3Smrg	    else
7969a7b590b3Smrg	      build_libtool_libs=no
7970a7b590b3Smrg	    fi
7971a7b590b3Smrg	  else
79723e51e026Smrg	    echo "*** The inter-library dependencies that have been dropped here will be"
79733e51e026Smrg	    echo "*** automatically added whenever a program is linked with this library"
79743e51e026Smrg	    echo "*** or is declared to -dlopen it."
7975a7b590b3Smrg
7976a7b590b3Smrg	    if test "$allow_undefined" = no; then
79773e51e026Smrg	      echo
79783e51e026Smrg	      echo "*** Since this library must not contain undefined symbols,"
79793e51e026Smrg	      echo "*** because either the platform does not support them or"
79803e51e026Smrg	      echo "*** it was explicitly requested with -no-undefined,"
79813e51e026Smrg	      echo "*** libtool will only create a static version of it."
7982a7b590b3Smrg	      if test "$build_old_libs" = no; then
7983a7b590b3Smrg		oldlibs="$output_objdir/$libname.$libext"
7984a7b590b3Smrg		build_libtool_libs=module
7985a7b590b3Smrg		build_old_libs=yes
7986a7b590b3Smrg	      else
7987a7b590b3Smrg		build_libtool_libs=no
7988a7b590b3Smrg	      fi
7989a7b590b3Smrg	    fi
7990a7b590b3Smrg	  fi
7991a7b590b3Smrg	fi
7992a7b590b3Smrg	# Done checking deplibs!
7993a7b590b3Smrg	deplibs=$newdeplibs
7994a7b590b3Smrg      fi
7995a7b590b3Smrg      # Time to change all our "foo.ltframework" stuff back to "-framework foo"
7996a7b590b3Smrg      case $host in
7997a7b590b3Smrg	*-*-darwin*)
79983e51e026Smrg	  newdeplibs=`$ECHO " $newdeplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'`
79993e51e026Smrg	  new_inherited_linker_flags=`$ECHO " $new_inherited_linker_flags" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'`
80003e51e026Smrg	  deplibs=`$ECHO " $deplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'`
8001a7b590b3Smrg	  ;;
8002a7b590b3Smrg      esac
8003a7b590b3Smrg
8004a7b590b3Smrg      # move library search paths that coincide with paths to not yet
8005a7b590b3Smrg      # installed libraries to the beginning of the library search list
8006a7b590b3Smrg      new_libs=
8007a7b590b3Smrg      for path in $notinst_path; do
8008a7b590b3Smrg	case " $new_libs " in
8009a7b590b3Smrg	*" -L$path/$objdir "*) ;;
8010a7b590b3Smrg	*)
8011a7b590b3Smrg	  case " $deplibs " in
8012a7b590b3Smrg	  *" -L$path/$objdir "*)
80133e51e026Smrg	    func_append new_libs " -L$path/$objdir" ;;
8014a7b590b3Smrg	  esac
8015a7b590b3Smrg	  ;;
8016a7b590b3Smrg	esac
8017a7b590b3Smrg      done
8018a7b590b3Smrg      for deplib in $deplibs; do
8019a7b590b3Smrg	case $deplib in
8020a7b590b3Smrg	-L*)
8021a7b590b3Smrg	  case " $new_libs " in
8022a7b590b3Smrg	  *" $deplib "*) ;;
80233e51e026Smrg	  *) func_append new_libs " $deplib" ;;
8024a7b590b3Smrg	  esac
8025a7b590b3Smrg	  ;;
80263e51e026Smrg	*) func_append new_libs " $deplib" ;;
8027a7b590b3Smrg	esac
8028a7b590b3Smrg      done
8029a7b590b3Smrg      deplibs="$new_libs"
8030a7b590b3Smrg
8031a7b590b3Smrg      # All the library-specific variables (install_libdir is set above).
8032a7b590b3Smrg      library_names=
8033a7b590b3Smrg      old_library=
8034a7b590b3Smrg      dlname=
8035a7b590b3Smrg
8036a7b590b3Smrg      # Test again, we may have decided not to build it any more
8037a7b590b3Smrg      if test "$build_libtool_libs" = yes; then
80383e51e026Smrg	# Remove ${wl} instances when linking with ld.
80393e51e026Smrg	# FIXME: should test the right _cmds variable.
80403e51e026Smrg	case $archive_cmds in
80413e51e026Smrg	  *\$LD\ *) wl= ;;
80423e51e026Smrg        esac
8043a7b590b3Smrg	if test "$hardcode_into_libs" = yes; then
8044a7b590b3Smrg	  # Hardcode the library paths
8045a7b590b3Smrg	  hardcode_libdirs=
8046a7b590b3Smrg	  dep_rpath=
8047a7b590b3Smrg	  rpath="$finalize_rpath"
80483e51e026Smrg	  test "$opt_mode" != relink && rpath="$compile_rpath$rpath"
8049a7b590b3Smrg	  for libdir in $rpath; do
8050a7b590b3Smrg	    if test -n "$hardcode_libdir_flag_spec"; then
8051a7b590b3Smrg	      if test -n "$hardcode_libdir_separator"; then
80523e51e026Smrg		func_replace_sysroot "$libdir"
80533e51e026Smrg		libdir=$func_replace_sysroot_result
8054a7b590b3Smrg		if test -z "$hardcode_libdirs"; then
8055a7b590b3Smrg		  hardcode_libdirs="$libdir"
8056a7b590b3Smrg		else
8057a7b590b3Smrg		  # Just accumulate the unique libdirs.
8058a7b590b3Smrg		  case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in
8059a7b590b3Smrg		  *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*)
8060a7b590b3Smrg		    ;;
8061a7b590b3Smrg		  *)
80623e51e026Smrg		    func_append hardcode_libdirs "$hardcode_libdir_separator$libdir"
8063a7b590b3Smrg		    ;;
8064a7b590b3Smrg		  esac
8065a7b590b3Smrg		fi
8066a7b590b3Smrg	      else
8067a7b590b3Smrg		eval flag=\"$hardcode_libdir_flag_spec\"
80683e51e026Smrg		func_append dep_rpath " $flag"
8069a7b590b3Smrg	      fi
8070a7b590b3Smrg	    elif test -n "$runpath_var"; then
8071a7b590b3Smrg	      case "$perm_rpath " in
8072a7b590b3Smrg	      *" $libdir "*) ;;
80733e51e026Smrg	      *) func_append perm_rpath " $libdir" ;;
8074a7b590b3Smrg	      esac
8075a7b590b3Smrg	    fi
8076a7b590b3Smrg	  done
8077a7b590b3Smrg	  # Substitute the hardcoded libdirs into the rpath.
8078a7b590b3Smrg	  if test -n "$hardcode_libdir_separator" &&
8079a7b590b3Smrg	     test -n "$hardcode_libdirs"; then
8080a7b590b3Smrg	    libdir="$hardcode_libdirs"
80813e51e026Smrg	    eval "dep_rpath=\"$hardcode_libdir_flag_spec\""
8082a7b590b3Smrg	  fi
8083a7b590b3Smrg	  if test -n "$runpath_var" && test -n "$perm_rpath"; then
8084a7b590b3Smrg	    # We should set the runpath_var.
8085a7b590b3Smrg	    rpath=
8086a7b590b3Smrg	    for dir in $perm_rpath; do
80873e51e026Smrg	      func_append rpath "$dir:"
8088a7b590b3Smrg	    done
8089a7b590b3Smrg	    eval "$runpath_var='$rpath\$$runpath_var'; export $runpath_var"
8090a7b590b3Smrg	  fi
8091a7b590b3Smrg	  test -n "$dep_rpath" && deplibs="$dep_rpath $deplibs"
8092a7b590b3Smrg	fi
8093943345d3Smrg
8094a7b590b3Smrg	shlibpath="$finalize_shlibpath"
80953e51e026Smrg	test "$opt_mode" != relink && shlibpath="$compile_shlibpath$shlibpath"
8096a7b590b3Smrg	if test -n "$shlibpath"; then
8097a7b590b3Smrg	  eval "$shlibpath_var='$shlibpath\$$shlibpath_var'; export $shlibpath_var"
8098a7b590b3Smrg	fi
8099943345d3Smrg
8100a7b590b3Smrg	# Get the real and link names of the library.
8101a7b590b3Smrg	eval shared_ext=\"$shrext_cmds\"
8102a7b590b3Smrg	eval library_names=\"$library_names_spec\"
8103a7b590b3Smrg	set dummy $library_names
8104a7b590b3Smrg	shift
8105a7b590b3Smrg	realname="$1"
8106a7b590b3Smrg	shift
8107943345d3Smrg
8108a7b590b3Smrg	if test -n "$soname_spec"; then
8109a7b590b3Smrg	  eval soname=\"$soname_spec\"
8110a7b590b3Smrg	else
8111a7b590b3Smrg	  soname="$realname"
8112a7b590b3Smrg	fi
8113a7b590b3Smrg	if test -z "$dlname"; then
8114a7b590b3Smrg	  dlname=$soname
8115a7b590b3Smrg	fi
8116943345d3Smrg
8117a7b590b3Smrg	lib="$output_objdir/$realname"
8118a7b590b3Smrg	linknames=
8119a7b590b3Smrg	for link
8120a7b590b3Smrg	do
81213e51e026Smrg	  func_append linknames " $link"
8122a7b590b3Smrg	done
8123943345d3Smrg
8124a7b590b3Smrg	# Use standard objects if they are pic
81253e51e026Smrg	test -z "$pic_flag" && libobjs=`$ECHO "$libobjs" | $SP2NL | $SED "$lo2o" | $NL2SP`
8126a7b590b3Smrg	test "X$libobjs" = "X " && libobjs=
8127943345d3Smrg
8128a7b590b3Smrg	delfiles=
8129a7b590b3Smrg	if test -n "$export_symbols" && test -n "$include_expsyms"; then
8130a7b590b3Smrg	  $opt_dry_run || cp "$export_symbols" "$output_objdir/$libname.uexp"
8131a7b590b3Smrg	  export_symbols="$output_objdir/$libname.uexp"
81323e51e026Smrg	  func_append delfiles " $export_symbols"
8133a7b590b3Smrg	fi
8134943345d3Smrg
8135a7b590b3Smrg	orig_export_symbols=
8136a7b590b3Smrg	case $host_os in
8137a7b590b3Smrg	cygwin* | mingw* | cegcc*)
8138a7b590b3Smrg	  if test -n "$export_symbols" && test -z "$export_symbols_regex"; then
8139a7b590b3Smrg	    # exporting using user supplied symfile
8140a7b590b3Smrg	    if test "x`$SED 1q $export_symbols`" != xEXPORTS; then
8141a7b590b3Smrg	      # and it's NOT already a .def file. Must figure out
8142a7b590b3Smrg	      # which of the given symbols are data symbols and tag
8143a7b590b3Smrg	      # them as such. So, trigger use of export_symbols_cmds.
8144a7b590b3Smrg	      # export_symbols gets reassigned inside the "prepare
8145a7b590b3Smrg	      # the list of exported symbols" if statement, so the
8146a7b590b3Smrg	      # include_expsyms logic still works.
8147a7b590b3Smrg	      orig_export_symbols="$export_symbols"
8148a7b590b3Smrg	      export_symbols=
8149a7b590b3Smrg	      always_export_symbols=yes
8150a7b590b3Smrg	    fi
8151a7b590b3Smrg	  fi
8152a7b590b3Smrg	  ;;
8153a7b590b3Smrg	esac
8154943345d3Smrg
8155a7b590b3Smrg	# Prepare the list of exported symbols
8156a7b590b3Smrg	if test -z "$export_symbols"; then
8157a7b590b3Smrg	  if test "$always_export_symbols" = yes || test -n "$export_symbols_regex"; then
8158a7b590b3Smrg	    func_verbose "generating symbol list for \`$libname.la'"
8159a7b590b3Smrg	    export_symbols="$output_objdir/$libname.exp"
8160a7b590b3Smrg	    $opt_dry_run || $RM $export_symbols
8161a7b590b3Smrg	    cmds=$export_symbols_cmds
8162a7b590b3Smrg	    save_ifs="$IFS"; IFS='~'
81633e51e026Smrg	    for cmd1 in $cmds; do
8164a7b590b3Smrg	      IFS="$save_ifs"
81653e51e026Smrg	      # Take the normal branch if the nm_file_list_spec branch
81663e51e026Smrg	      # doesn't work or if tool conversion is not needed.
81673e51e026Smrg	      case $nm_file_list_spec~$to_tool_file_cmd in
81683e51e026Smrg		*~func_convert_file_noop | *~func_convert_file_msys_to_w32 | ~*)
81693e51e026Smrg		  try_normal_branch=yes
81703e51e026Smrg		  eval cmd=\"$cmd1\"
81713e51e026Smrg		  func_len " $cmd"
81723e51e026Smrg		  len=$func_len_result
81733e51e026Smrg		  ;;
81743e51e026Smrg		*)
81753e51e026Smrg		  try_normal_branch=no
81763e51e026Smrg		  ;;
81773e51e026Smrg	      esac
81783e51e026Smrg	      if test "$try_normal_branch" = yes \
81793e51e026Smrg		 && { test "$len" -lt "$max_cmd_len" \
81803e51e026Smrg		      || test "$max_cmd_len" -le -1; }
81813e51e026Smrg	      then
81823e51e026Smrg		func_show_eval "$cmd" 'exit $?'
81833e51e026Smrg		skipped_export=false
81843e51e026Smrg	      elif test -n "$nm_file_list_spec"; then
81853e51e026Smrg		func_basename "$output"
81863e51e026Smrg		output_la=$func_basename_result
81873e51e026Smrg		save_libobjs=$libobjs
81883e51e026Smrg		save_output=$output
81893e51e026Smrg		output=${output_objdir}/${output_la}.nm
81903e51e026Smrg		func_to_tool_file "$output"
81913e51e026Smrg		libobjs=$nm_file_list_spec$func_to_tool_file_result
81923e51e026Smrg		func_append delfiles " $output"
81933e51e026Smrg		func_verbose "creating $NM input file list: $output"
81943e51e026Smrg		for obj in $save_libobjs; do
81953e51e026Smrg		  func_to_tool_file "$obj"
81963e51e026Smrg		  $ECHO "$func_to_tool_file_result"
81973e51e026Smrg		done > "$output"
81983e51e026Smrg		eval cmd=\"$cmd1\"
8199a7b590b3Smrg		func_show_eval "$cmd" 'exit $?'
82003e51e026Smrg		output=$save_output
82013e51e026Smrg		libobjs=$save_libobjs
8202a7b590b3Smrg		skipped_export=false
8203a7b590b3Smrg	      else
8204a7b590b3Smrg		# The command line is too long to execute in one step.
8205a7b590b3Smrg		func_verbose "using reloadable object file for export list..."
8206a7b590b3Smrg		skipped_export=:
8207a7b590b3Smrg		# Break out early, otherwise skipped_export may be
8208a7b590b3Smrg		# set to false by a later but shorter cmd.
8209a7b590b3Smrg		break
8210a7b590b3Smrg	      fi
8211a7b590b3Smrg	    done
8212a7b590b3Smrg	    IFS="$save_ifs"
8213a7b590b3Smrg	    if test -n "$export_symbols_regex" && test "X$skipped_export" != "X:"; then
8214a7b590b3Smrg	      func_show_eval '$EGREP -e "$export_symbols_regex" "$export_symbols" > "${export_symbols}T"'
8215a7b590b3Smrg	      func_show_eval '$MV "${export_symbols}T" "$export_symbols"'
8216a7b590b3Smrg	    fi
8217a7b590b3Smrg	  fi
8218943345d3Smrg	fi
8219943345d3Smrg
8220a7b590b3Smrg	if test -n "$export_symbols" && test -n "$include_expsyms"; then
8221a7b590b3Smrg	  tmp_export_symbols="$export_symbols"
8222a7b590b3Smrg	  test -n "$orig_export_symbols" && tmp_export_symbols="$orig_export_symbols"
82233e51e026Smrg	  $opt_dry_run || eval '$ECHO "$include_expsyms" | $SP2NL >> "$tmp_export_symbols"'
8224a7b590b3Smrg	fi
8225943345d3Smrg
8226a7b590b3Smrg	if test "X$skipped_export" != "X:" && test -n "$orig_export_symbols"; then
8227a7b590b3Smrg	  # The given exports_symbols file has to be filtered, so filter it.
8228a7b590b3Smrg	  func_verbose "filter symbol list for \`$libname.la' to tag DATA exports"
8229a7b590b3Smrg	  # FIXME: $output_objdir/$libname.filter potentially contains lots of
8230a7b590b3Smrg	  # 's' commands which not all seds can handle. GNU sed should be fine
8231a7b590b3Smrg	  # though. Also, the filter scales superlinearly with the number of
8232a7b590b3Smrg	  # global variables. join(1) would be nice here, but unfortunately
8233a7b590b3Smrg	  # isn't a blessed tool.
8234a7b590b3Smrg	  $opt_dry_run || $SED -e '/[ ,]DATA/!d;s,\(.*\)\([ \,].*\),s|^\1$|\1\2|,' < $export_symbols > $output_objdir/$libname.filter
82353e51e026Smrg	  func_append delfiles " $export_symbols $output_objdir/$libname.filter"
8236a7b590b3Smrg	  export_symbols=$output_objdir/$libname.def
8237a7b590b3Smrg	  $opt_dry_run || $SED -f $output_objdir/$libname.filter < $orig_export_symbols > $export_symbols
8238a7b590b3Smrg	fi
8239943345d3Smrg
8240a7b590b3Smrg	tmp_deplibs=
8241a7b590b3Smrg	for test_deplib in $deplibs; do
8242a7b590b3Smrg	  case " $convenience " in
8243a7b590b3Smrg	  *" $test_deplib "*) ;;
8244a7b590b3Smrg	  *)
82453e51e026Smrg	    func_append tmp_deplibs " $test_deplib"
8246a7b590b3Smrg	    ;;
8247a7b590b3Smrg	  esac
8248a7b590b3Smrg	done
8249a7b590b3Smrg	deplibs="$tmp_deplibs"
8250943345d3Smrg
8251a7b590b3Smrg	if test -n "$convenience"; then
8252a7b590b3Smrg	  if test -n "$whole_archive_flag_spec" &&
8253a7b590b3Smrg	    test "$compiler_needs_object" = yes &&
8254a7b590b3Smrg	    test -z "$libobjs"; then
8255a7b590b3Smrg	    # extract the archives, so we have objects to list.
8256a7b590b3Smrg	    # TODO: could optimize this to just extract one archive.
8257a7b590b3Smrg	    whole_archive_flag_spec=
8258a7b590b3Smrg	  fi
8259a7b590b3Smrg	  if test -n "$whole_archive_flag_spec"; then
8260a7b590b3Smrg	    save_libobjs=$libobjs
8261a7b590b3Smrg	    eval libobjs=\"\$libobjs $whole_archive_flag_spec\"
8262a7b590b3Smrg	    test "X$libobjs" = "X " && libobjs=
8263a7b590b3Smrg	  else
8264a7b590b3Smrg	    gentop="$output_objdir/${outputname}x"
82653e51e026Smrg	    func_append generated " $gentop"
8266943345d3Smrg
8267a7b590b3Smrg	    func_extract_archives $gentop $convenience
82683e51e026Smrg	    func_append libobjs " $func_extract_archives_result"
8269a7b590b3Smrg	    test "X$libobjs" = "X " && libobjs=
8270a7b590b3Smrg	  fi
8271943345d3Smrg	fi
8272943345d3Smrg
8273a7b590b3Smrg	if test "$thread_safe" = yes && test -n "$thread_safe_flag_spec"; then
8274a7b590b3Smrg	  eval flag=\"$thread_safe_flag_spec\"
82753e51e026Smrg	  func_append linker_flags " $flag"
8276943345d3Smrg	fi
8277943345d3Smrg
8278a7b590b3Smrg	# Make a backup of the uninstalled library when relinking
82793e51e026Smrg	if test "$opt_mode" = relink; then
8280a7b590b3Smrg	  $opt_dry_run || eval '(cd $output_objdir && $RM ${realname}U && $MV $realname ${realname}U)' || exit $?
8281a7b590b3Smrg	fi
8282943345d3Smrg
8283a7b590b3Smrg	# Do each of the archive commands.
8284a7b590b3Smrg	if test "$module" = yes && test -n "$module_cmds" ; then
8285a7b590b3Smrg	  if test -n "$export_symbols" && test -n "$module_expsym_cmds"; then
8286a7b590b3Smrg	    eval test_cmds=\"$module_expsym_cmds\"
8287a7b590b3Smrg	    cmds=$module_expsym_cmds
8288a7b590b3Smrg	  else
8289a7b590b3Smrg	    eval test_cmds=\"$module_cmds\"
8290a7b590b3Smrg	    cmds=$module_cmds
8291a7b590b3Smrg	  fi
8292943345d3Smrg	else
8293a7b590b3Smrg	  if test -n "$export_symbols" && test -n "$archive_expsym_cmds"; then
8294a7b590b3Smrg	    eval test_cmds=\"$archive_expsym_cmds\"
8295a7b590b3Smrg	    cmds=$archive_expsym_cmds
8296a7b590b3Smrg	  else
8297a7b590b3Smrg	    eval test_cmds=\"$archive_cmds\"
8298a7b590b3Smrg	    cmds=$archive_cmds
8299a7b590b3Smrg	  fi
8300943345d3Smrg	fi
8301943345d3Smrg
8302a7b590b3Smrg	if test "X$skipped_export" != "X:" &&
8303a7b590b3Smrg	   func_len " $test_cmds" &&
8304a7b590b3Smrg	   len=$func_len_result &&
8305a7b590b3Smrg	   test "$len" -lt "$max_cmd_len" || test "$max_cmd_len" -le -1; then
8306a7b590b3Smrg	  :
8307a7b590b3Smrg	else
8308a7b590b3Smrg	  # The command line is too long to link in one step, link piecewise
8309a7b590b3Smrg	  # or, if using GNU ld and skipped_export is not :, use a linker
8310a7b590b3Smrg	  # script.
8311943345d3Smrg
8312a7b590b3Smrg	  # Save the value of $output and $libobjs because we want to
8313a7b590b3Smrg	  # use them later.  If we have whole_archive_flag_spec, we
8314a7b590b3Smrg	  # want to use save_libobjs as it was before
8315a7b590b3Smrg	  # whole_archive_flag_spec was expanded, because we can't
8316a7b590b3Smrg	  # assume the linker understands whole_archive_flag_spec.
8317a7b590b3Smrg	  # This may have to be revisited, in case too many
8318a7b590b3Smrg	  # convenience libraries get linked in and end up exceeding
8319a7b590b3Smrg	  # the spec.
8320a7b590b3Smrg	  if test -z "$convenience" || test -z "$whole_archive_flag_spec"; then
8321a7b590b3Smrg	    save_libobjs=$libobjs
8322a7b590b3Smrg	  fi
8323a7b590b3Smrg	  save_output=$output
83243e51e026Smrg	  func_basename "$output"
83253e51e026Smrg	  output_la=$func_basename_result
8326943345d3Smrg
8327a7b590b3Smrg	  # Clear the reloadable object creation command queue and
8328a7b590b3Smrg	  # initialize k to one.
8329a7b590b3Smrg	  test_cmds=
8330a7b590b3Smrg	  concat_cmds=
8331a7b590b3Smrg	  objlist=
8332a7b590b3Smrg	  last_robj=
8333a7b590b3Smrg	  k=1
8334a7b590b3Smrg
8335a7b590b3Smrg	  if test -n "$save_libobjs" && test "X$skipped_export" != "X:" && test "$with_gnu_ld" = yes; then
8336a7b590b3Smrg	    output=${output_objdir}/${output_la}.lnkscript
8337a7b590b3Smrg	    func_verbose "creating GNU ld script: $output"
83383e51e026Smrg	    echo 'INPUT (' > $output
8339a7b590b3Smrg	    for obj in $save_libobjs
8340943345d3Smrg	    do
83413e51e026Smrg	      func_to_tool_file "$obj"
83423e51e026Smrg	      $ECHO "$func_to_tool_file_result" >> $output
8343a7b590b3Smrg	    done
83443e51e026Smrg	    echo ')' >> $output
83453e51e026Smrg	    func_append delfiles " $output"
83463e51e026Smrg	    func_to_tool_file "$output"
83473e51e026Smrg	    output=$func_to_tool_file_result
8348a7b590b3Smrg	  elif test -n "$save_libobjs" && test "X$skipped_export" != "X:" && test "X$file_list_spec" != X; then
8349a7b590b3Smrg	    output=${output_objdir}/${output_la}.lnk
8350a7b590b3Smrg	    func_verbose "creating linker input file list: $output"
8351a7b590b3Smrg	    : > $output
8352a7b590b3Smrg	    set x $save_libobjs
8353a7b590b3Smrg	    shift
8354a7b590b3Smrg	    firstobj=
8355a7b590b3Smrg	    if test "$compiler_needs_object" = yes; then
8356a7b590b3Smrg	      firstobj="$1 "
8357a7b590b3Smrg	      shift
8358a7b590b3Smrg	    fi
8359a7b590b3Smrg	    for obj
8360a7b590b3Smrg	    do
83613e51e026Smrg	      func_to_tool_file "$obj"
83623e51e026Smrg	      $ECHO "$func_to_tool_file_result" >> $output
8363a7b590b3Smrg	    done
83643e51e026Smrg	    func_append delfiles " $output"
83653e51e026Smrg	    func_to_tool_file "$output"
83663e51e026Smrg	    output=$firstobj\"$file_list_spec$func_to_tool_file_result\"
8367a7b590b3Smrg	  else
8368a7b590b3Smrg	    if test -n "$save_libobjs"; then
8369a7b590b3Smrg	      func_verbose "creating reloadable object files..."
8370a7b590b3Smrg	      output=$output_objdir/$output_la-${k}.$objext
8371a7b590b3Smrg	      eval test_cmds=\"$reload_cmds\"
8372a7b590b3Smrg	      func_len " $test_cmds"
8373a7b590b3Smrg	      len0=$func_len_result
8374a7b590b3Smrg	      len=$len0
8375a7b590b3Smrg
8376a7b590b3Smrg	      # Loop over the list of objects to be linked.
8377a7b590b3Smrg	      for obj in $save_libobjs
8378a7b590b3Smrg	      do
8379a7b590b3Smrg		func_len " $obj"
8380a7b590b3Smrg		func_arith $len + $func_len_result
8381a7b590b3Smrg		len=$func_arith_result
8382a7b590b3Smrg		if test "X$objlist" = X ||
8383a7b590b3Smrg		   test "$len" -lt "$max_cmd_len"; then
8384a7b590b3Smrg		  func_append objlist " $obj"
8385a7b590b3Smrg		else
8386a7b590b3Smrg		  # The command $test_cmds is almost too long, add a
8387a7b590b3Smrg		  # command to the queue.
8388a7b590b3Smrg		  if test "$k" -eq 1 ; then
8389a7b590b3Smrg		    # The first file doesn't have a previous command to add.
83903e51e026Smrg		    reload_objs=$objlist
83913e51e026Smrg		    eval concat_cmds=\"$reload_cmds\"
8392a7b590b3Smrg		  else
8393a7b590b3Smrg		    # All subsequent reloadable object files will link in
8394a7b590b3Smrg		    # the last one created.
83953e51e026Smrg		    reload_objs="$objlist $last_robj"
83963e51e026Smrg		    eval concat_cmds=\"\$concat_cmds~$reload_cmds~\$RM $last_robj\"
8397a7b590b3Smrg		  fi
8398a7b590b3Smrg		  last_robj=$output_objdir/$output_la-${k}.$objext
8399a7b590b3Smrg		  func_arith $k + 1
8400a7b590b3Smrg		  k=$func_arith_result
8401a7b590b3Smrg		  output=$output_objdir/$output_la-${k}.$objext
84023e51e026Smrg		  objlist=" $obj"
8403a7b590b3Smrg		  func_len " $last_robj"
8404a7b590b3Smrg		  func_arith $len0 + $func_len_result
8405a7b590b3Smrg		  len=$func_arith_result
8406a7b590b3Smrg		fi
8407a7b590b3Smrg	      done
8408a7b590b3Smrg	      # Handle the remaining objects by creating one last
8409a7b590b3Smrg	      # reloadable object file.  All subsequent reloadable object
8410a7b590b3Smrg	      # files will link in the last one created.
8411a7b590b3Smrg	      test -z "$concat_cmds" || concat_cmds=$concat_cmds~
84123e51e026Smrg	      reload_objs="$objlist $last_robj"
84133e51e026Smrg	      eval concat_cmds=\"\${concat_cmds}$reload_cmds\"
8414a7b590b3Smrg	      if test -n "$last_robj"; then
8415a7b590b3Smrg	        eval concat_cmds=\"\${concat_cmds}~\$RM $last_robj\"
8416a7b590b3Smrg	      fi
84173e51e026Smrg	      func_append delfiles " $output"
8418943345d3Smrg
8419a7b590b3Smrg	    else
8420a7b590b3Smrg	      output=
8421a7b590b3Smrg	    fi
8422943345d3Smrg
8423a7b590b3Smrg	    if ${skipped_export-false}; then
8424a7b590b3Smrg	      func_verbose "generating symbol list for \`$libname.la'"
8425a7b590b3Smrg	      export_symbols="$output_objdir/$libname.exp"
8426a7b590b3Smrg	      $opt_dry_run || $RM $export_symbols
8427a7b590b3Smrg	      libobjs=$output
8428a7b590b3Smrg	      # Append the command to create the export file.
8429a7b590b3Smrg	      test -z "$concat_cmds" || concat_cmds=$concat_cmds~
8430a7b590b3Smrg	      eval concat_cmds=\"\$concat_cmds$export_symbols_cmds\"
8431a7b590b3Smrg	      if test -n "$last_robj"; then
8432a7b590b3Smrg		eval concat_cmds=\"\$concat_cmds~\$RM $last_robj\"
8433a7b590b3Smrg	      fi
8434943345d3Smrg	    fi
8435943345d3Smrg
8436a7b590b3Smrg	    test -n "$save_libobjs" &&
8437a7b590b3Smrg	      func_verbose "creating a temporary reloadable object file: $output"
8438943345d3Smrg
8439a7b590b3Smrg	    # Loop through the commands generated above and execute them.
8440a7b590b3Smrg	    save_ifs="$IFS"; IFS='~'
8441a7b590b3Smrg	    for cmd in $concat_cmds; do
8442a7b590b3Smrg	      IFS="$save_ifs"
8443a7b590b3Smrg	      $opt_silent || {
8444a7b590b3Smrg		  func_quote_for_expand "$cmd"
8445a7b590b3Smrg		  eval "func_echo $func_quote_for_expand_result"
8446a7b590b3Smrg	      }
8447a7b590b3Smrg	      $opt_dry_run || eval "$cmd" || {
8448a7b590b3Smrg		lt_exit=$?
8449a7b590b3Smrg
8450a7b590b3Smrg		# Restore the uninstalled library and exit
84513e51e026Smrg		if test "$opt_mode" = relink; then
8452a7b590b3Smrg		  ( cd "$output_objdir" && \
8453a7b590b3Smrg		    $RM "${realname}T" && \
8454a7b590b3Smrg		    $MV "${realname}U" "$realname" )
8455a7b590b3Smrg		fi
8456943345d3Smrg
8457a7b590b3Smrg		exit $lt_exit
8458a7b590b3Smrg	      }
8459a7b590b3Smrg	    done
8460a7b590b3Smrg	    IFS="$save_ifs"
8461943345d3Smrg
8462a7b590b3Smrg	    if test -n "$export_symbols_regex" && ${skipped_export-false}; then
8463a7b590b3Smrg	      func_show_eval '$EGREP -e "$export_symbols_regex" "$export_symbols" > "${export_symbols}T"'
8464a7b590b3Smrg	      func_show_eval '$MV "${export_symbols}T" "$export_symbols"'
8465943345d3Smrg	    fi
8466943345d3Smrg	  fi
8467943345d3Smrg
8468a7b590b3Smrg          if ${skipped_export-false}; then
8469a7b590b3Smrg	    if test -n "$export_symbols" && test -n "$include_expsyms"; then
8470a7b590b3Smrg	      tmp_export_symbols="$export_symbols"
8471a7b590b3Smrg	      test -n "$orig_export_symbols" && tmp_export_symbols="$orig_export_symbols"
84723e51e026Smrg	      $opt_dry_run || eval '$ECHO "$include_expsyms" | $SP2NL >> "$tmp_export_symbols"'
8473a7b590b3Smrg	    fi
8474943345d3Smrg
8475a7b590b3Smrg	    if test -n "$orig_export_symbols"; then
8476a7b590b3Smrg	      # The given exports_symbols file has to be filtered, so filter it.
8477a7b590b3Smrg	      func_verbose "filter symbol list for \`$libname.la' to tag DATA exports"
8478a7b590b3Smrg	      # FIXME: $output_objdir/$libname.filter potentially contains lots of
8479a7b590b3Smrg	      # 's' commands which not all seds can handle. GNU sed should be fine
8480a7b590b3Smrg	      # though. Also, the filter scales superlinearly with the number of
8481a7b590b3Smrg	      # global variables. join(1) would be nice here, but unfortunately
8482a7b590b3Smrg	      # isn't a blessed tool.
8483a7b590b3Smrg	      $opt_dry_run || $SED -e '/[ ,]DATA/!d;s,\(.*\)\([ \,].*\),s|^\1$|\1\2|,' < $export_symbols > $output_objdir/$libname.filter
84843e51e026Smrg	      func_append delfiles " $export_symbols $output_objdir/$libname.filter"
8485a7b590b3Smrg	      export_symbols=$output_objdir/$libname.def
8486a7b590b3Smrg	      $opt_dry_run || $SED -f $output_objdir/$libname.filter < $orig_export_symbols > $export_symbols
8487a7b590b3Smrg	    fi
8488a7b590b3Smrg	  fi
8489943345d3Smrg
8490a7b590b3Smrg	  libobjs=$output
8491a7b590b3Smrg	  # Restore the value of output.
8492a7b590b3Smrg	  output=$save_output
8493943345d3Smrg
8494a7b590b3Smrg	  if test -n "$convenience" && test -n "$whole_archive_flag_spec"; then
8495a7b590b3Smrg	    eval libobjs=\"\$libobjs $whole_archive_flag_spec\"
8496a7b590b3Smrg	    test "X$libobjs" = "X " && libobjs=
8497a7b590b3Smrg	  fi
8498a7b590b3Smrg	  # Expand the library linking commands again to reset the
8499a7b590b3Smrg	  # value of $libobjs for piecewise linking.
8500943345d3Smrg
8501a7b590b3Smrg	  # Do each of the archive commands.
8502a7b590b3Smrg	  if test "$module" = yes && test -n "$module_cmds" ; then
8503a7b590b3Smrg	    if test -n "$export_symbols" && test -n "$module_expsym_cmds"; then
8504a7b590b3Smrg	      cmds=$module_expsym_cmds
8505a7b590b3Smrg	    else
8506a7b590b3Smrg	      cmds=$module_cmds
8507943345d3Smrg	    fi
8508943345d3Smrg	  else
8509a7b590b3Smrg	    if test -n "$export_symbols" && test -n "$archive_expsym_cmds"; then
8510a7b590b3Smrg	      cmds=$archive_expsym_cmds
8511a7b590b3Smrg	    else
8512a7b590b3Smrg	      cmds=$archive_cmds
8513a7b590b3Smrg	    fi
8514943345d3Smrg	  fi
8515a7b590b3Smrg	fi
8516943345d3Smrg
8517a7b590b3Smrg	if test -n "$delfiles"; then
8518a7b590b3Smrg	  # Append the command to remove temporary files to $cmds.
8519a7b590b3Smrg	  eval cmds=\"\$cmds~\$RM $delfiles\"
8520a7b590b3Smrg	fi
8521943345d3Smrg
8522a7b590b3Smrg	# Add any objects from preloaded convenience libraries
8523a7b590b3Smrg	if test -n "$dlprefiles"; then
8524a7b590b3Smrg	  gentop="$output_objdir/${outputname}x"
85253e51e026Smrg	  func_append generated " $gentop"
8526943345d3Smrg
8527a7b590b3Smrg	  func_extract_archives $gentop $dlprefiles
85283e51e026Smrg	  func_append libobjs " $func_extract_archives_result"
8529a7b590b3Smrg	  test "X$libobjs" = "X " && libobjs=
8530a7b590b3Smrg	fi
8531943345d3Smrg
8532a7b590b3Smrg	save_ifs="$IFS"; IFS='~'
8533a7b590b3Smrg	for cmd in $cmds; do
8534a7b590b3Smrg	  IFS="$save_ifs"
8535a7b590b3Smrg	  eval cmd=\"$cmd\"
8536a7b590b3Smrg	  $opt_silent || {
8537a7b590b3Smrg	    func_quote_for_expand "$cmd"
8538a7b590b3Smrg	    eval "func_echo $func_quote_for_expand_result"
8539a7b590b3Smrg	  }
8540a7b590b3Smrg	  $opt_dry_run || eval "$cmd" || {
8541a7b590b3Smrg	    lt_exit=$?
8542943345d3Smrg
8543a7b590b3Smrg	    # Restore the uninstalled library and exit
85443e51e026Smrg	    if test "$opt_mode" = relink; then
8545a7b590b3Smrg	      ( cd "$output_objdir" && \
8546a7b590b3Smrg	        $RM "${realname}T" && \
8547a7b590b3Smrg		$MV "${realname}U" "$realname" )
8548a7b590b3Smrg	    fi
8549943345d3Smrg
8550a7b590b3Smrg	    exit $lt_exit
8551a7b590b3Smrg	  }
8552a7b590b3Smrg	done
8553a7b590b3Smrg	IFS="$save_ifs"
8554943345d3Smrg
8555a7b590b3Smrg	# Restore the uninstalled library and exit
85563e51e026Smrg	if test "$opt_mode" = relink; then
8557a7b590b3Smrg	  $opt_dry_run || eval '(cd $output_objdir && $RM ${realname}T && $MV $realname ${realname}T && $MV ${realname}U $realname)' || exit $?
8558943345d3Smrg
8559a7b590b3Smrg	  if test -n "$convenience"; then
8560a7b590b3Smrg	    if test -z "$whole_archive_flag_spec"; then
8561a7b590b3Smrg	      func_show_eval '${RM}r "$gentop"'
8562a7b590b3Smrg	    fi
8563a7b590b3Smrg	  fi
8564943345d3Smrg
8565a7b590b3Smrg	  exit $EXIT_SUCCESS
8566a7b590b3Smrg	fi
8567a7b590b3Smrg
8568a7b590b3Smrg	# Create links to the real library.
8569a7b590b3Smrg	for linkname in $linknames; do
8570a7b590b3Smrg	  if test "$realname" != "$linkname"; then
8571a7b590b3Smrg	    func_show_eval '(cd "$output_objdir" && $RM "$linkname" && $LN_S "$realname" "$linkname")' 'exit $?'
8572943345d3Smrg	  fi
8573943345d3Smrg	done
8574943345d3Smrg
8575a7b590b3Smrg	# If -module or -export-dynamic was specified, set the dlname.
8576a7b590b3Smrg	if test "$module" = yes || test "$export_dynamic" = yes; then
8577a7b590b3Smrg	  # On all known operating systems, these are identical.
8578a7b590b3Smrg	  dlname="$soname"
8579a7b590b3Smrg	fi
8580a7b590b3Smrg      fi
8581943345d3Smrg      ;;
8582943345d3Smrg
8583a7b590b3Smrg    obj)
8584a7b590b3Smrg      if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then
8585a7b590b3Smrg	func_warning "\`-dlopen' is ignored for objects"
8586a7b590b3Smrg      fi
8587943345d3Smrg
8588a7b590b3Smrg      case " $deplibs" in
8589a7b590b3Smrg      *\ -l* | *\ -L*)
8590a7b590b3Smrg	func_warning "\`-l' and \`-L' are ignored for objects" ;;
8591943345d3Smrg      esac
8592943345d3Smrg
8593a7b590b3Smrg      test -n "$rpath" && \
8594a7b590b3Smrg	func_warning "\`-rpath' is ignored for objects"
8595a7b590b3Smrg
8596a7b590b3Smrg      test -n "$xrpath" && \
8597a7b590b3Smrg	func_warning "\`-R' is ignored for objects"
8598943345d3Smrg
8599a7b590b3Smrg      test -n "$vinfo" && \
8600a7b590b3Smrg	func_warning "\`-version-info' is ignored for objects"
8601943345d3Smrg
8602a7b590b3Smrg      test -n "$release" && \
8603a7b590b3Smrg	func_warning "\`-release' is ignored for objects"
8604a7b590b3Smrg
8605a7b590b3Smrg      case $output in
8606a7b590b3Smrg      *.lo)
8607a7b590b3Smrg	test -n "$objs$old_deplibs" && \
8608a7b590b3Smrg	  func_fatal_error "cannot build library object \`$output' from non-libtool objects"
8609a7b590b3Smrg
8610a7b590b3Smrg	libobj=$output
8611a7b590b3Smrg	func_lo2o "$libobj"
8612a7b590b3Smrg	obj=$func_lo2o_result
8613943345d3Smrg	;;
8614943345d3Smrg      *)
8615a7b590b3Smrg	libobj=
8616a7b590b3Smrg	obj="$output"
8617943345d3Smrg	;;
8618943345d3Smrg      esac
8619943345d3Smrg
8620a7b590b3Smrg      # Delete the old objects.
8621a7b590b3Smrg      $opt_dry_run || $RM $obj $libobj
8622943345d3Smrg
8623a7b590b3Smrg      # Objects from convenience libraries.  This assumes
8624a7b590b3Smrg      # single-version convenience libraries.  Whenever we create
8625a7b590b3Smrg      # different ones for PIC/non-PIC, this we'll have to duplicate
8626a7b590b3Smrg      # the extraction.
8627a7b590b3Smrg      reload_conv_objs=
8628a7b590b3Smrg      gentop=
8629a7b590b3Smrg      # reload_cmds runs $LD directly, so let us get rid of
8630a7b590b3Smrg      # -Wl from whole_archive_flag_spec and hope we can get by with
8631a7b590b3Smrg      # turning comma into space..
8632a7b590b3Smrg      wl=
8633943345d3Smrg
8634a7b590b3Smrg      if test -n "$convenience"; then
8635a7b590b3Smrg	if test -n "$whole_archive_flag_spec"; then
8636a7b590b3Smrg	  eval tmp_whole_archive_flags=\"$whole_archive_flag_spec\"
86373e51e026Smrg	  reload_conv_objs=$reload_objs\ `$ECHO "$tmp_whole_archive_flags" | $SED 's|,| |g'`
8638a7b590b3Smrg	else
8639a7b590b3Smrg	  gentop="$output_objdir/${obj}x"
86403e51e026Smrg	  func_append generated " $gentop"
8641943345d3Smrg
8642a7b590b3Smrg	  func_extract_archives $gentop $convenience
8643a7b590b3Smrg	  reload_conv_objs="$reload_objs $func_extract_archives_result"
8644a7b590b3Smrg	fi
8645943345d3Smrg      fi
8646943345d3Smrg
86473e51e026Smrg      # If we're not building shared, we need to use non_pic_objs
86483e51e026Smrg      test "$build_libtool_libs" != yes && libobjs="$non_pic_objects"
86493e51e026Smrg
8650a7b590b3Smrg      # Create the old-style object.
86513e51e026Smrg      reload_objs="$objs$old_deplibs "`$ECHO "$libobjs" | $SP2NL | $SED "/\.${libext}$/d; /\.lib$/d; $lo2o" | $NL2SP`" $reload_conv_objs" ### testsuite: skip nested quoting test
8652943345d3Smrg
8653a7b590b3Smrg      output="$obj"
8654a7b590b3Smrg      func_execute_cmds "$reload_cmds" 'exit $?'
8655943345d3Smrg
8656a7b590b3Smrg      # Exit if we aren't doing a library object file.
8657a7b590b3Smrg      if test -z "$libobj"; then
8658a7b590b3Smrg	if test -n "$gentop"; then
8659a7b590b3Smrg	  func_show_eval '${RM}r "$gentop"'
8660a7b590b3Smrg	fi
8661a7b590b3Smrg
8662a7b590b3Smrg	exit $EXIT_SUCCESS
8663943345d3Smrg      fi
8664a7b590b3Smrg
8665a7b590b3Smrg      if test "$build_libtool_libs" != yes; then
8666a7b590b3Smrg	if test -n "$gentop"; then
8667a7b590b3Smrg	  func_show_eval '${RM}r "$gentop"'
8668a7b590b3Smrg	fi
8669a7b590b3Smrg
8670a7b590b3Smrg	# Create an invalid libtool object if no PIC, so that we don't
8671a7b590b3Smrg	# accidentally link it into a program.
8672a7b590b3Smrg	# $show "echo timestamp > $libobj"
8673a7b590b3Smrg	# $opt_dry_run || eval "echo timestamp > $libobj" || exit $?
8674a7b590b3Smrg	exit $EXIT_SUCCESS
8675a7b590b3Smrg      fi
8676a7b590b3Smrg
8677a7b590b3Smrg      if test -n "$pic_flag" || test "$pic_mode" != default; then
8678a7b590b3Smrg	# Only do commands if we really have different PIC objects.
8679a7b590b3Smrg	reload_objs="$libobjs $reload_conv_objs"
8680a7b590b3Smrg	output="$libobj"
8681a7b590b3Smrg	func_execute_cmds "$reload_cmds" 'exit $?'
8682a7b590b3Smrg      fi
8683a7b590b3Smrg
8684a7b590b3Smrg      if test -n "$gentop"; then
8685a7b590b3Smrg	func_show_eval '${RM}r "$gentop"'
8686a7b590b3Smrg      fi
8687a7b590b3Smrg
8688a7b590b3Smrg      exit $EXIT_SUCCESS
8689943345d3Smrg      ;;
8690943345d3Smrg
8691a7b590b3Smrg    prog)
8692a7b590b3Smrg      case $host in
8693a7b590b3Smrg	*cygwin*) func_stripname '' '.exe' "$output"
8694a7b590b3Smrg	          output=$func_stripname_result.exe;;
8695a7b590b3Smrg      esac
8696a7b590b3Smrg      test -n "$vinfo" && \
8697a7b590b3Smrg	func_warning "\`-version-info' is ignored for programs"
8698943345d3Smrg
8699a7b590b3Smrg      test -n "$release" && \
8700a7b590b3Smrg	func_warning "\`-release' is ignored for programs"
8701943345d3Smrg
8702a7b590b3Smrg      test "$preload" = yes \
8703a7b590b3Smrg        && test "$dlopen_support" = unknown \
8704a7b590b3Smrg	&& test "$dlopen_self" = unknown \
8705a7b590b3Smrg	&& test "$dlopen_self_static" = unknown && \
8706a7b590b3Smrg	  func_warning "\`LT_INIT([dlopen])' not used. Assuming no dlopen support."
8707a7b590b3Smrg
8708a7b590b3Smrg      case $host in
8709a7b590b3Smrg      *-*-rhapsody* | *-*-darwin1.[012])
8710a7b590b3Smrg	# On Rhapsody replace the C library is the System framework
87113e51e026Smrg	compile_deplibs=`$ECHO " $compile_deplibs" | $SED 's/ -lc / System.ltframework /'`
87123e51e026Smrg	finalize_deplibs=`$ECHO " $finalize_deplibs" | $SED 's/ -lc / System.ltframework /'`
8713943345d3Smrg	;;
8714a7b590b3Smrg      esac
8715943345d3Smrg
8716a7b590b3Smrg      case $host in
8717a7b590b3Smrg      *-*-darwin*)
8718a7b590b3Smrg	# Don't allow lazy linking, it breaks C++ global constructors
8719a7b590b3Smrg	# But is supposedly fixed on 10.4 or later (yay!).
8720a7b590b3Smrg	if test "$tagname" = CXX ; then
8721a7b590b3Smrg	  case ${MACOSX_DEPLOYMENT_TARGET-10.0} in
8722a7b590b3Smrg	    10.[0123])
87233e51e026Smrg	      func_append compile_command " ${wl}-bind_at_load"
87243e51e026Smrg	      func_append finalize_command " ${wl}-bind_at_load"
8725a7b590b3Smrg	    ;;
8726a7b590b3Smrg	  esac
8727943345d3Smrg	fi
8728a7b590b3Smrg	# Time to change all our "foo.ltframework" stuff back to "-framework foo"
87293e51e026Smrg	compile_deplibs=`$ECHO " $compile_deplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'`
87303e51e026Smrg	finalize_deplibs=`$ECHO " $finalize_deplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'`
8731a7b590b3Smrg	;;
8732a7b590b3Smrg      esac
8733943345d3Smrg
8734943345d3Smrg
8735a7b590b3Smrg      # move library search paths that coincide with paths to not yet
8736a7b590b3Smrg      # installed libraries to the beginning of the library search list
8737a7b590b3Smrg      new_libs=
8738a7b590b3Smrg      for path in $notinst_path; do
8739a7b590b3Smrg	case " $new_libs " in
8740a7b590b3Smrg	*" -L$path/$objdir "*) ;;
8741a7b590b3Smrg	*)
8742a7b590b3Smrg	  case " $compile_deplibs " in
8743a7b590b3Smrg	  *" -L$path/$objdir "*)
87443e51e026Smrg	    func_append new_libs " -L$path/$objdir" ;;
8745943345d3Smrg	  esac
8746a7b590b3Smrg	  ;;
8747a7b590b3Smrg	esac
8748a7b590b3Smrg      done
8749a7b590b3Smrg      for deplib in $compile_deplibs; do
8750a7b590b3Smrg	case $deplib in
8751a7b590b3Smrg	-L*)
8752a7b590b3Smrg	  case " $new_libs " in
8753a7b590b3Smrg	  *" $deplib "*) ;;
87543e51e026Smrg	  *) func_append new_libs " $deplib" ;;
8755943345d3Smrg	  esac
8756a7b590b3Smrg	  ;;
87573e51e026Smrg	*) func_append new_libs " $deplib" ;;
8758a7b590b3Smrg	esac
8759a7b590b3Smrg      done
8760a7b590b3Smrg      compile_deplibs="$new_libs"
8761943345d3Smrg
8762943345d3Smrg
87633e51e026Smrg      func_append compile_command " $compile_deplibs"
87643e51e026Smrg      func_append finalize_command " $finalize_deplibs"
8765943345d3Smrg
8766a7b590b3Smrg      if test -n "$rpath$xrpath"; then
8767a7b590b3Smrg	# If the user specified any rpath flags, then add them.
8768a7b590b3Smrg	for libdir in $rpath $xrpath; do
8769a7b590b3Smrg	  # This is the magic to use -rpath.
8770a7b590b3Smrg	  case "$finalize_rpath " in
8771a7b590b3Smrg	  *" $libdir "*) ;;
87723e51e026Smrg	  *) func_append finalize_rpath " $libdir" ;;
8773a7b590b3Smrg	  esac
8774a7b590b3Smrg	done
8775a7b590b3Smrg      fi
8776943345d3Smrg
8777a7b590b3Smrg      # Now hardcode the library paths
8778a7b590b3Smrg      rpath=
8779a7b590b3Smrg      hardcode_libdirs=
8780a7b590b3Smrg      for libdir in $compile_rpath $finalize_rpath; do
8781a7b590b3Smrg	if test -n "$hardcode_libdir_flag_spec"; then
8782a7b590b3Smrg	  if test -n "$hardcode_libdir_separator"; then
8783a7b590b3Smrg	    if test -z "$hardcode_libdirs"; then
8784a7b590b3Smrg	      hardcode_libdirs="$libdir"
8785a7b590b3Smrg	    else
8786a7b590b3Smrg	      # Just accumulate the unique libdirs.
8787a7b590b3Smrg	      case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in
8788a7b590b3Smrg	      *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*)
8789a7b590b3Smrg		;;
8790a7b590b3Smrg	      *)
87913e51e026Smrg		func_append hardcode_libdirs "$hardcode_libdir_separator$libdir"
8792a7b590b3Smrg		;;
8793a7b590b3Smrg	      esac
8794a7b590b3Smrg	    fi
8795943345d3Smrg	  else
8796a7b590b3Smrg	    eval flag=\"$hardcode_libdir_flag_spec\"
87973e51e026Smrg	    func_append rpath " $flag"
8798943345d3Smrg	  fi
8799a7b590b3Smrg	elif test -n "$runpath_var"; then
8800a7b590b3Smrg	  case "$perm_rpath " in
8801a7b590b3Smrg	  *" $libdir "*) ;;
88023e51e026Smrg	  *) func_append perm_rpath " $libdir" ;;
8803a7b590b3Smrg	  esac
8804a7b590b3Smrg	fi
8805a7b590b3Smrg	case $host in
8806a7b590b3Smrg	*-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-cegcc*)
8807a7b590b3Smrg	  testbindir=`${ECHO} "$libdir" | ${SED} -e 's*/lib$*/bin*'`
8808a7b590b3Smrg	  case :$dllsearchpath: in
8809a7b590b3Smrg	  *":$libdir:"*) ;;
8810a7b590b3Smrg	  ::) dllsearchpath=$libdir;;
88113e51e026Smrg	  *) func_append dllsearchpath ":$libdir";;
8812a7b590b3Smrg	  esac
8813a7b590b3Smrg	  case :$dllsearchpath: in
8814a7b590b3Smrg	  *":$testbindir:"*) ;;
8815a7b590b3Smrg	  ::) dllsearchpath=$testbindir;;
88163e51e026Smrg	  *) func_append dllsearchpath ":$testbindir";;
8817a7b590b3Smrg	  esac
8818a7b590b3Smrg	  ;;
8819a7b590b3Smrg	esac
8820a7b590b3Smrg      done
8821a7b590b3Smrg      # Substitute the hardcoded libdirs into the rpath.
8822a7b590b3Smrg      if test -n "$hardcode_libdir_separator" &&
8823a7b590b3Smrg	 test -n "$hardcode_libdirs"; then
8824a7b590b3Smrg	libdir="$hardcode_libdirs"
8825a7b590b3Smrg	eval rpath=\" $hardcode_libdir_flag_spec\"
8826a7b590b3Smrg      fi
8827a7b590b3Smrg      compile_rpath="$rpath"
8828943345d3Smrg
8829a7b590b3Smrg      rpath=
8830a7b590b3Smrg      hardcode_libdirs=
8831a7b590b3Smrg      for libdir in $finalize_rpath; do
8832a7b590b3Smrg	if test -n "$hardcode_libdir_flag_spec"; then
8833a7b590b3Smrg	  if test -n "$hardcode_libdir_separator"; then
8834a7b590b3Smrg	    if test -z "$hardcode_libdirs"; then
8835a7b590b3Smrg	      hardcode_libdirs="$libdir"
8836a7b590b3Smrg	    else
8837a7b590b3Smrg	      # Just accumulate the unique libdirs.
8838a7b590b3Smrg	      case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in
8839a7b590b3Smrg	      *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*)
8840a7b590b3Smrg		;;
8841a7b590b3Smrg	      *)
88423e51e026Smrg		func_append hardcode_libdirs "$hardcode_libdir_separator$libdir"
8843a7b590b3Smrg		;;
8844a7b590b3Smrg	      esac
8845a7b590b3Smrg	    fi
8846943345d3Smrg	  else
8847a7b590b3Smrg	    eval flag=\"$hardcode_libdir_flag_spec\"
88483e51e026Smrg	    func_append rpath " $flag"
8849943345d3Smrg	  fi
8850a7b590b3Smrg	elif test -n "$runpath_var"; then
8851a7b590b3Smrg	  case "$finalize_perm_rpath " in
8852a7b590b3Smrg	  *" $libdir "*) ;;
88533e51e026Smrg	  *) func_append finalize_perm_rpath " $libdir" ;;
8854a7b590b3Smrg	  esac
8855943345d3Smrg	fi
8856a7b590b3Smrg      done
8857a7b590b3Smrg      # Substitute the hardcoded libdirs into the rpath.
8858a7b590b3Smrg      if test -n "$hardcode_libdir_separator" &&
8859a7b590b3Smrg	 test -n "$hardcode_libdirs"; then
8860a7b590b3Smrg	libdir="$hardcode_libdirs"
8861a7b590b3Smrg	eval rpath=\" $hardcode_libdir_flag_spec\"
8862a7b590b3Smrg      fi
8863a7b590b3Smrg      finalize_rpath="$rpath"
8864943345d3Smrg
8865a7b590b3Smrg      if test -n "$libobjs" && test "$build_old_libs" = yes; then
8866a7b590b3Smrg	# Transform all the library objects into standard objects.
88673e51e026Smrg	compile_command=`$ECHO "$compile_command" | $SP2NL | $SED "$lo2o" | $NL2SP`
88683e51e026Smrg	finalize_command=`$ECHO "$finalize_command" | $SP2NL | $SED "$lo2o" | $NL2SP`
8869a7b590b3Smrg      fi
8870943345d3Smrg
8871a7b590b3Smrg      func_generate_dlsyms "$outputname" "@PROGRAM@" "no"
8872943345d3Smrg
8873a7b590b3Smrg      # template prelinking step
8874a7b590b3Smrg      if test -n "$prelink_cmds"; then
8875a7b590b3Smrg	func_execute_cmds "$prelink_cmds" 'exit $?'
8876a7b590b3Smrg      fi
8877943345d3Smrg
8878a7b590b3Smrg      wrappers_required=yes
8879a7b590b3Smrg      case $host in
88803e51e026Smrg      *cegcc* | *mingw32ce*)
88813e51e026Smrg        # Disable wrappers for cegcc and mingw32ce hosts, we are cross compiling anyway.
88823e51e026Smrg        wrappers_required=no
88833e51e026Smrg        ;;
8884a7b590b3Smrg      *cygwin* | *mingw* )
8885a7b590b3Smrg        if test "$build_libtool_libs" != yes; then
8886a7b590b3Smrg          wrappers_required=no
8887a7b590b3Smrg        fi
8888a7b590b3Smrg        ;;
8889a7b590b3Smrg      *)
8890a7b590b3Smrg        if test "$need_relink" = no || test "$build_libtool_libs" != yes; then
8891a7b590b3Smrg          wrappers_required=no
8892a7b590b3Smrg        fi
8893a7b590b3Smrg        ;;
8894a7b590b3Smrg      esac
8895a7b590b3Smrg      if test "$wrappers_required" = no; then
8896a7b590b3Smrg	# Replace the output file specification.
88973e51e026Smrg	compile_command=`$ECHO "$compile_command" | $SED 's%@OUTPUT@%'"$output"'%g'`
8898a7b590b3Smrg	link_command="$compile_command$compile_rpath"
8899943345d3Smrg
8900a7b590b3Smrg	# We have no uninstalled library dependencies, so finalize right now.
8901a7b590b3Smrg	exit_status=0
8902a7b590b3Smrg	func_show_eval "$link_command" 'exit_status=$?'
8903943345d3Smrg
89043e51e026Smrg	if test -n "$postlink_cmds"; then
89053e51e026Smrg	  func_to_tool_file "$output"
89063e51e026Smrg	  postlink_cmds=`func_echo_all "$postlink_cmds" | $SED -e 's%@OUTPUT@%'"$output"'%g' -e 's%@TOOL_OUTPUT@%'"$func_to_tool_file_result"'%g'`
89073e51e026Smrg	  func_execute_cmds "$postlink_cmds" 'exit $?'
89083e51e026Smrg	fi
89093e51e026Smrg
8910a7b590b3Smrg	# Delete the generated files.
8911a7b590b3Smrg	if test -f "$output_objdir/${outputname}S.${objext}"; then
8912a7b590b3Smrg	  func_show_eval '$RM "$output_objdir/${outputname}S.${objext}"'
8913943345d3Smrg	fi
8914943345d3Smrg
8915a7b590b3Smrg	exit $exit_status
8916a7b590b3Smrg      fi
8917943345d3Smrg
8918a7b590b3Smrg      if test -n "$compile_shlibpath$finalize_shlibpath"; then
8919a7b590b3Smrg	compile_command="$shlibpath_var=\"$compile_shlibpath$finalize_shlibpath\$$shlibpath_var\" $compile_command"
8920a7b590b3Smrg      fi
8921a7b590b3Smrg      if test -n "$finalize_shlibpath"; then
8922a7b590b3Smrg	finalize_command="$shlibpath_var=\"$finalize_shlibpath\$$shlibpath_var\" $finalize_command"
8923a7b590b3Smrg      fi
8924943345d3Smrg
8925a7b590b3Smrg      compile_var=
8926a7b590b3Smrg      finalize_var=
8927a7b590b3Smrg      if test -n "$runpath_var"; then
8928a7b590b3Smrg	if test -n "$perm_rpath"; then
8929a7b590b3Smrg	  # We should set the runpath_var.
8930a7b590b3Smrg	  rpath=
8931a7b590b3Smrg	  for dir in $perm_rpath; do
89323e51e026Smrg	    func_append rpath "$dir:"
8933a7b590b3Smrg	  done
8934a7b590b3Smrg	  compile_var="$runpath_var=\"$rpath\$$runpath_var\" "
8935943345d3Smrg	fi
8936a7b590b3Smrg	if test -n "$finalize_perm_rpath"; then
8937a7b590b3Smrg	  # We should set the runpath_var.
8938a7b590b3Smrg	  rpath=
8939a7b590b3Smrg	  for dir in $finalize_perm_rpath; do
89403e51e026Smrg	    func_append rpath "$dir:"
8941a7b590b3Smrg	  done
8942a7b590b3Smrg	  finalize_var="$runpath_var=\"$rpath\$$runpath_var\" "
8943943345d3Smrg	fi
8944a7b590b3Smrg      fi
8945943345d3Smrg
8946a7b590b3Smrg      if test "$no_install" = yes; then
8947a7b590b3Smrg	# We don't need to create a wrapper script.
8948a7b590b3Smrg	link_command="$compile_var$compile_command$compile_rpath"
8949a7b590b3Smrg	# Replace the output file specification.
89503e51e026Smrg	link_command=`$ECHO "$link_command" | $SED 's%@OUTPUT@%'"$output"'%g'`
8951a7b590b3Smrg	# Delete the old output file.
8952a7b590b3Smrg	$opt_dry_run || $RM $output
8953a7b590b3Smrg	# Link the executable and exit
8954a7b590b3Smrg	func_show_eval "$link_command" 'exit $?'
89553e51e026Smrg
89563e51e026Smrg	if test -n "$postlink_cmds"; then
89573e51e026Smrg	  func_to_tool_file "$output"
89583e51e026Smrg	  postlink_cmds=`func_echo_all "$postlink_cmds" | $SED -e 's%@OUTPUT@%'"$output"'%g' -e 's%@TOOL_OUTPUT@%'"$func_to_tool_file_result"'%g'`
89593e51e026Smrg	  func_execute_cmds "$postlink_cmds" 'exit $?'
89603e51e026Smrg	fi
89613e51e026Smrg
8962943345d3Smrg	exit $EXIT_SUCCESS
8963a7b590b3Smrg      fi
8964943345d3Smrg
8965a7b590b3Smrg      if test "$hardcode_action" = relink; then
8966a7b590b3Smrg	# Fast installation is not supported
8967a7b590b3Smrg	link_command="$compile_var$compile_command$compile_rpath"
8968a7b590b3Smrg	relink_command="$finalize_var$finalize_command$finalize_rpath"
8969a7b590b3Smrg
8970a7b590b3Smrg	func_warning "this platform does not like uninstalled shared libraries"
8971a7b590b3Smrg	func_warning "\`$output' will be relinked during installation"
8972a7b590b3Smrg      else
8973a7b590b3Smrg	if test "$fast_install" != no; then
8974a7b590b3Smrg	  link_command="$finalize_var$compile_command$finalize_rpath"
8975a7b590b3Smrg	  if test "$fast_install" = yes; then
89763e51e026Smrg	    relink_command=`$ECHO "$compile_var$compile_command$compile_rpath" | $SED 's%@OUTPUT@%\$progdir/\$file%g'`
8977a7b590b3Smrg	  else
8978a7b590b3Smrg	    # fast_install is set to needless
8979a7b590b3Smrg	    relink_command=
8980a7b590b3Smrg	  fi
8981943345d3Smrg	else
8982a7b590b3Smrg	  link_command="$compile_var$compile_command$compile_rpath"
8983a7b590b3Smrg	  relink_command="$finalize_var$finalize_command$finalize_rpath"
8984943345d3Smrg	fi
8985a7b590b3Smrg      fi
8986943345d3Smrg
8987a7b590b3Smrg      # Replace the output file specification.
89883e51e026Smrg      link_command=`$ECHO "$link_command" | $SED 's%@OUTPUT@%'"$output_objdir/$outputname"'%g'`
8989943345d3Smrg
8990a7b590b3Smrg      # Delete the old output files.
8991a7b590b3Smrg      $opt_dry_run || $RM $output $output_objdir/$outputname $output_objdir/lt-$outputname
8992943345d3Smrg
8993a7b590b3Smrg      func_show_eval "$link_command" 'exit $?'
8994943345d3Smrg
89953e51e026Smrg      if test -n "$postlink_cmds"; then
89963e51e026Smrg	func_to_tool_file "$output_objdir/$outputname"
89973e51e026Smrg	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'`
89983e51e026Smrg	func_execute_cmds "$postlink_cmds" 'exit $?'
89993e51e026Smrg      fi
90003e51e026Smrg
9001a7b590b3Smrg      # Now create the wrapper script.
9002a7b590b3Smrg      func_verbose "creating $output"
9003943345d3Smrg
9004a7b590b3Smrg      # Quote the relink command for shipping.
9005a7b590b3Smrg      if test -n "$relink_command"; then
9006a7b590b3Smrg	# Preserve any variables that may affect compiler behavior
9007a7b590b3Smrg	for var in $variables_saved_for_relink; do
9008a7b590b3Smrg	  if eval test -z \"\${$var+set}\"; then
9009a7b590b3Smrg	    relink_command="{ test -z \"\${$var+set}\" || $lt_unset $var || { $var=; export $var; }; }; $relink_command"
9010a7b590b3Smrg	  elif eval var_value=\$$var; test -z "$var_value"; then
9011a7b590b3Smrg	    relink_command="$var=; export $var; $relink_command"
9012943345d3Smrg	  else
9013a7b590b3Smrg	    func_quote_for_eval "$var_value"
9014a7b590b3Smrg	    relink_command="$var=$func_quote_for_eval_result; export $var; $relink_command"
9015943345d3Smrg	  fi
9016a7b590b3Smrg	done
9017a7b590b3Smrg	relink_command="(cd `pwd`; $relink_command)"
90183e51e026Smrg	relink_command=`$ECHO "$relink_command" | $SED "$sed_quote_subst"`
9019a7b590b3Smrg      fi
9020a7b590b3Smrg
9021a7b590b3Smrg      # Only actually do things if not in dry run mode.
9022a7b590b3Smrg      $opt_dry_run || {
9023a7b590b3Smrg	# win32 will think the script is a binary if it has
9024a7b590b3Smrg	# a .exe suffix, so we strip it off here.
9025a7b590b3Smrg	case $output in
9026a7b590b3Smrg	  *.exe) func_stripname '' '.exe' "$output"
9027a7b590b3Smrg	         output=$func_stripname_result ;;
9028a7b590b3Smrg	esac
9029a7b590b3Smrg	# test for cygwin because mv fails w/o .exe extensions
9030a7b590b3Smrg	case $host in
9031a7b590b3Smrg	  *cygwin*)
9032a7b590b3Smrg	    exeext=.exe
9033a7b590b3Smrg	    func_stripname '' '.exe' "$outputname"
9034a7b590b3Smrg	    outputname=$func_stripname_result ;;
9035a7b590b3Smrg	  *) exeext= ;;
9036943345d3Smrg	esac
9037a7b590b3Smrg	case $host in
9038a7b590b3Smrg	  *cygwin* | *mingw* )
9039a7b590b3Smrg	    func_dirname_and_basename "$output" "" "."
9040a7b590b3Smrg	    output_name=$func_basename_result
9041a7b590b3Smrg	    output_path=$func_dirname_result
9042a7b590b3Smrg	    cwrappersource="$output_path/$objdir/lt-$output_name.c"
9043a7b590b3Smrg	    cwrapper="$output_path/$output_name.exe"
9044a7b590b3Smrg	    $RM $cwrappersource $cwrapper
9045a7b590b3Smrg	    trap "$RM $cwrappersource $cwrapper; exit $EXIT_FAILURE" 1 2 15
9046a7b590b3Smrg
9047a7b590b3Smrg	    func_emit_cwrapperexe_src > $cwrappersource
9048a7b590b3Smrg
9049a7b590b3Smrg	    # The wrapper executable is built using the $host compiler,
9050a7b590b3Smrg	    # because it contains $host paths and files. If cross-
9051a7b590b3Smrg	    # compiling, it, like the target executable, must be
9052a7b590b3Smrg	    # executed on the $host or under an emulation environment.
9053a7b590b3Smrg	    $opt_dry_run || {
9054a7b590b3Smrg	      $LTCC $LTCFLAGS -o $cwrapper $cwrappersource
9055a7b590b3Smrg	      $STRIP $cwrapper
9056a7b590b3Smrg	    }
9057943345d3Smrg
9058a7b590b3Smrg	    # Now, create the wrapper script for func_source use:
9059a7b590b3Smrg	    func_ltwrapper_scriptname $cwrapper
9060a7b590b3Smrg	    $RM $func_ltwrapper_scriptname_result
9061a7b590b3Smrg	    trap "$RM $func_ltwrapper_scriptname_result; exit $EXIT_FAILURE" 1 2 15
9062a7b590b3Smrg	    $opt_dry_run || {
9063a7b590b3Smrg	      # note: this script will not be executed, so do not chmod.
9064a7b590b3Smrg	      if test "x$build" = "x$host" ; then
9065a7b590b3Smrg		$cwrapper --lt-dump-script > $func_ltwrapper_scriptname_result
9066a7b590b3Smrg	      else
9067a7b590b3Smrg		func_emit_wrapper no > $func_ltwrapper_scriptname_result
9068a7b590b3Smrg	      fi
9069a7b590b3Smrg	    }
9070a7b590b3Smrg	  ;;
9071a7b590b3Smrg	  * )
9072a7b590b3Smrg	    $RM $output
9073a7b590b3Smrg	    trap "$RM $output; exit $EXIT_FAILURE" 1 2 15
9074943345d3Smrg
9075a7b590b3Smrg	    func_emit_wrapper no > $output
9076a7b590b3Smrg	    chmod +x $output
9077a7b590b3Smrg	  ;;
9078a7b590b3Smrg	esac
9079a7b590b3Smrg      }
9080a7b590b3Smrg      exit $EXIT_SUCCESS
9081a7b590b3Smrg      ;;
9082a7b590b3Smrg    esac
9083943345d3Smrg
9084a7b590b3Smrg    # See if we need to build an old-fashioned archive.
9085a7b590b3Smrg    for oldlib in $oldlibs; do
9086943345d3Smrg
9087a7b590b3Smrg      if test "$build_libtool_libs" = convenience; then
9088a7b590b3Smrg	oldobjs="$libobjs_save $symfileobj"
9089a7b590b3Smrg	addlibs="$convenience"
9090a7b590b3Smrg	build_libtool_libs=no
9091a7b590b3Smrg      else
9092a7b590b3Smrg	if test "$build_libtool_libs" = module; then
9093a7b590b3Smrg	  oldobjs="$libobjs_save"
9094a7b590b3Smrg	  build_libtool_libs=no
9095a7b590b3Smrg	else
9096a7b590b3Smrg	  oldobjs="$old_deplibs $non_pic_objects"
9097a7b590b3Smrg	  if test "$preload" = yes && test -f "$symfileobj"; then
90983e51e026Smrg	    func_append oldobjs " $symfileobj"
9099a7b590b3Smrg	  fi
9100a7b590b3Smrg	fi
9101a7b590b3Smrg	addlibs="$old_convenience"
9102943345d3Smrg      fi
9103943345d3Smrg
9104a7b590b3Smrg      if test -n "$addlibs"; then
9105a7b590b3Smrg	gentop="$output_objdir/${outputname}x"
91063e51e026Smrg	func_append generated " $gentop"
9107943345d3Smrg
9108a7b590b3Smrg	func_extract_archives $gentop $addlibs
91093e51e026Smrg	func_append oldobjs " $func_extract_archives_result"
9110a7b590b3Smrg      fi
9111943345d3Smrg
9112a7b590b3Smrg      # Do each command in the archive commands.
9113a7b590b3Smrg      if test -n "$old_archive_from_new_cmds" && test "$build_libtool_libs" = yes; then
9114a7b590b3Smrg	cmds=$old_archive_from_new_cmds
9115a7b590b3Smrg      else
9116943345d3Smrg
9117a7b590b3Smrg	# Add any objects from preloaded convenience libraries
9118a7b590b3Smrg	if test -n "$dlprefiles"; then
9119a7b590b3Smrg	  gentop="$output_objdir/${outputname}x"
91203e51e026Smrg	  func_append generated " $gentop"
9121943345d3Smrg
9122a7b590b3Smrg	  func_extract_archives $gentop $dlprefiles
91233e51e026Smrg	  func_append oldobjs " $func_extract_archives_result"
9124a7b590b3Smrg	fi
9125943345d3Smrg
9126a7b590b3Smrg	# POSIX demands no paths to be encoded in archives.  We have
9127a7b590b3Smrg	# to avoid creating archives with duplicate basenames if we
9128a7b590b3Smrg	# might have to extract them afterwards, e.g., when creating a
9129a7b590b3Smrg	# static archive out of a convenience library, or when linking
9130a7b590b3Smrg	# the entirety of a libtool archive into another (currently
9131a7b590b3Smrg	# not supported by libtool).
9132a7b590b3Smrg	if (for obj in $oldobjs
9133a7b590b3Smrg	    do
9134a7b590b3Smrg	      func_basename "$obj"
9135a7b590b3Smrg	      $ECHO "$func_basename_result"
9136a7b590b3Smrg	    done | sort | sort -uc >/dev/null 2>&1); then
9137a7b590b3Smrg	  :
9138a7b590b3Smrg	else
91393e51e026Smrg	  echo "copying selected object files to avoid basename conflicts..."
9140a7b590b3Smrg	  gentop="$output_objdir/${outputname}x"
91413e51e026Smrg	  func_append generated " $gentop"
9142a7b590b3Smrg	  func_mkdir_p "$gentop"
9143a7b590b3Smrg	  save_oldobjs=$oldobjs
9144a7b590b3Smrg	  oldobjs=
9145a7b590b3Smrg	  counter=1
9146a7b590b3Smrg	  for obj in $save_oldobjs
9147a7b590b3Smrg	  do
9148a7b590b3Smrg	    func_basename "$obj"
9149a7b590b3Smrg	    objbase="$func_basename_result"
9150a7b590b3Smrg	    case " $oldobjs " in
9151a7b590b3Smrg	    " ") oldobjs=$obj ;;
9152a7b590b3Smrg	    *[\ /]"$objbase "*)
9153a7b590b3Smrg	      while :; do
9154a7b590b3Smrg		# Make sure we don't pick an alternate name that also
9155a7b590b3Smrg		# overlaps.
9156a7b590b3Smrg		newobj=lt$counter-$objbase
9157a7b590b3Smrg		func_arith $counter + 1
9158a7b590b3Smrg		counter=$func_arith_result
9159a7b590b3Smrg		case " $oldobjs " in
9160a7b590b3Smrg		*[\ /]"$newobj "*) ;;
9161a7b590b3Smrg		*) if test ! -f "$gentop/$newobj"; then break; fi ;;
9162a7b590b3Smrg		esac
9163a7b590b3Smrg	      done
9164a7b590b3Smrg	      func_show_eval "ln $obj $gentop/$newobj || cp $obj $gentop/$newobj"
91653e51e026Smrg	      func_append oldobjs " $gentop/$newobj"
9166a7b590b3Smrg	      ;;
91673e51e026Smrg	    *) func_append oldobjs " $obj" ;;
9168a7b590b3Smrg	    esac
9169943345d3Smrg	  done
9170943345d3Smrg	fi
91713e51e026Smrg	func_to_tool_file "$oldlib" func_convert_file_msys_to_w32
91723e51e026Smrg	tool_oldlib=$func_to_tool_file_result
9173a7b590b3Smrg	eval cmds=\"$old_archive_cmds\"
9174943345d3Smrg
9175a7b590b3Smrg	func_len " $cmds"
9176a7b590b3Smrg	len=$func_len_result
9177a7b590b3Smrg	if test "$len" -lt "$max_cmd_len" || test "$max_cmd_len" -le -1; then
9178a7b590b3Smrg	  cmds=$old_archive_cmds
91793e51e026Smrg	elif test -n "$archiver_list_spec"; then
91803e51e026Smrg	  func_verbose "using command file archive linking..."
91813e51e026Smrg	  for obj in $oldobjs
91823e51e026Smrg	  do
91833e51e026Smrg	    func_to_tool_file "$obj"
91843e51e026Smrg	    $ECHO "$func_to_tool_file_result"
91853e51e026Smrg	  done > $output_objdir/$libname.libcmd
91863e51e026Smrg	  func_to_tool_file "$output_objdir/$libname.libcmd"
91873e51e026Smrg	  oldobjs=" $archiver_list_spec$func_to_tool_file_result"
91883e51e026Smrg	  cmds=$old_archive_cmds
9189a7b590b3Smrg	else
9190a7b590b3Smrg	  # the command line is too long to link in one step, link in parts
9191a7b590b3Smrg	  func_verbose "using piecewise archive linking..."
9192a7b590b3Smrg	  save_RANLIB=$RANLIB
9193a7b590b3Smrg	  RANLIB=:
9194a7b590b3Smrg	  objlist=
9195a7b590b3Smrg	  concat_cmds=
9196a7b590b3Smrg	  save_oldobjs=$oldobjs
9197a7b590b3Smrg	  oldobjs=
9198a7b590b3Smrg	  # Is there a better way of finding the last object in the list?
9199a7b590b3Smrg	  for obj in $save_oldobjs
9200a7b590b3Smrg	  do
9201a7b590b3Smrg	    last_oldobj=$obj
9202a7b590b3Smrg	  done
9203a7b590b3Smrg	  eval test_cmds=\"$old_archive_cmds\"
9204a7b590b3Smrg	  func_len " $test_cmds"
9205a7b590b3Smrg	  len0=$func_len_result
9206a7b590b3Smrg	  len=$len0
9207a7b590b3Smrg	  for obj in $save_oldobjs
9208a7b590b3Smrg	  do
9209a7b590b3Smrg	    func_len " $obj"
9210a7b590b3Smrg	    func_arith $len + $func_len_result
9211a7b590b3Smrg	    len=$func_arith_result
9212a7b590b3Smrg	    func_append objlist " $obj"
9213a7b590b3Smrg	    if test "$len" -lt "$max_cmd_len"; then
9214a7b590b3Smrg	      :
9215a7b590b3Smrg	    else
9216a7b590b3Smrg	      # the above command should be used before it gets too long
9217a7b590b3Smrg	      oldobjs=$objlist
9218a7b590b3Smrg	      if test "$obj" = "$last_oldobj" ; then
9219a7b590b3Smrg		RANLIB=$save_RANLIB
9220a7b590b3Smrg	      fi
9221a7b590b3Smrg	      test -z "$concat_cmds" || concat_cmds=$concat_cmds~
9222a7b590b3Smrg	      eval concat_cmds=\"\${concat_cmds}$old_archive_cmds\"
9223a7b590b3Smrg	      objlist=
9224a7b590b3Smrg	      len=$len0
9225a7b590b3Smrg	    fi
9226a7b590b3Smrg	  done
9227a7b590b3Smrg	  RANLIB=$save_RANLIB
9228a7b590b3Smrg	  oldobjs=$objlist
9229a7b590b3Smrg	  if test "X$oldobjs" = "X" ; then
9230a7b590b3Smrg	    eval cmds=\"\$concat_cmds\"
9231a7b590b3Smrg	  else
9232a7b590b3Smrg	    eval cmds=\"\$concat_cmds~\$old_archive_cmds\"
9233a7b590b3Smrg	  fi
9234a7b590b3Smrg	fi
9235a7b590b3Smrg      fi
9236a7b590b3Smrg      func_execute_cmds "$cmds" 'exit $?'
9237943345d3Smrg    done
9238943345d3Smrg
9239a7b590b3Smrg    test -n "$generated" && \
9240a7b590b3Smrg      func_show_eval "${RM}r$generated"
9241943345d3Smrg
9242a7b590b3Smrg    # Now create the libtool archive.
9243a7b590b3Smrg    case $output in
9244a7b590b3Smrg    *.la)
9245a7b590b3Smrg      old_library=
9246a7b590b3Smrg      test "$build_old_libs" = yes && old_library="$libname.$libext"
9247a7b590b3Smrg      func_verbose "creating $output"
9248943345d3Smrg
9249a7b590b3Smrg      # Preserve any variables that may affect compiler behavior
9250a7b590b3Smrg      for var in $variables_saved_for_relink; do
9251a7b590b3Smrg	if eval test -z \"\${$var+set}\"; then
9252a7b590b3Smrg	  relink_command="{ test -z \"\${$var+set}\" || $lt_unset $var || { $var=; export $var; }; }; $relink_command"
9253a7b590b3Smrg	elif eval var_value=\$$var; test -z "$var_value"; then
9254a7b590b3Smrg	  relink_command="$var=; export $var; $relink_command"
9255943345d3Smrg	else
9256a7b590b3Smrg	  func_quote_for_eval "$var_value"
9257a7b590b3Smrg	  relink_command="$var=$func_quote_for_eval_result; export $var; $relink_command"
9258943345d3Smrg	fi
9259a7b590b3Smrg      done
9260a7b590b3Smrg      # Quote the link command for shipping.
9261a7b590b3Smrg      relink_command="(cd `pwd`; $SHELL $progpath $preserve_args --mode=relink $libtool_args @inst_prefix_dir@)"
92623e51e026Smrg      relink_command=`$ECHO "$relink_command" | $SED "$sed_quote_subst"`
9263a7b590b3Smrg      if test "$hardcode_automatic" = yes ; then
9264a7b590b3Smrg	relink_command=
9265a7b590b3Smrg      fi
9266943345d3Smrg
9267a7b590b3Smrg      # Only create the output if not a dry run.
9268a7b590b3Smrg      $opt_dry_run || {
9269a7b590b3Smrg	for installed in no yes; do
9270a7b590b3Smrg	  if test "$installed" = yes; then
9271a7b590b3Smrg	    if test -z "$install_libdir"; then
9272a7b590b3Smrg	      break
9273a7b590b3Smrg	    fi
9274a7b590b3Smrg	    output="$output_objdir/$outputname"i
9275a7b590b3Smrg	    # Replace all uninstalled libtool libraries with the installed ones
9276a7b590b3Smrg	    newdependency_libs=
9277a7b590b3Smrg	    for deplib in $dependency_libs; do
9278a7b590b3Smrg	      case $deplib in
9279a7b590b3Smrg	      *.la)
9280a7b590b3Smrg		func_basename "$deplib"
9281a7b590b3Smrg		name="$func_basename_result"
92823e51e026Smrg		func_resolve_sysroot "$deplib"
92833e51e026Smrg		eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $func_resolve_sysroot_result`
9284a7b590b3Smrg		test -z "$libdir" && \
9285a7b590b3Smrg		  func_fatal_error "\`$deplib' is not a valid libtool archive"
92863e51e026Smrg		func_append newdependency_libs " ${lt_sysroot:+=}$libdir/$name"
92873e51e026Smrg		;;
92883e51e026Smrg	      -L*)
92893e51e026Smrg		func_stripname -L '' "$deplib"
92903e51e026Smrg		func_replace_sysroot "$func_stripname_result"
92913e51e026Smrg		func_append newdependency_libs " -L$func_replace_sysroot_result"
9292a7b590b3Smrg		;;
92933e51e026Smrg	      -R*)
92943e51e026Smrg		func_stripname -R '' "$deplib"
92953e51e026Smrg		func_replace_sysroot "$func_stripname_result"
92963e51e026Smrg		func_append newdependency_libs " -R$func_replace_sysroot_result"
92973e51e026Smrg		;;
92983e51e026Smrg	      *) func_append newdependency_libs " $deplib" ;;
9299a7b590b3Smrg	      esac
9300a7b590b3Smrg	    done
9301a7b590b3Smrg	    dependency_libs="$newdependency_libs"
9302a7b590b3Smrg	    newdlfiles=
9303a7b590b3Smrg
9304a7b590b3Smrg	    for lib in $dlfiles; do
9305a7b590b3Smrg	      case $lib in
9306a7b590b3Smrg	      *.la)
9307a7b590b3Smrg	        func_basename "$lib"
9308a7b590b3Smrg		name="$func_basename_result"
9309a7b590b3Smrg		eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $lib`
9310a7b590b3Smrg		test -z "$libdir" && \
9311a7b590b3Smrg		  func_fatal_error "\`$lib' is not a valid libtool archive"
93123e51e026Smrg		func_append newdlfiles " ${lt_sysroot:+=}$libdir/$name"
9313a7b590b3Smrg		;;
93143e51e026Smrg	      *) func_append newdlfiles " $lib" ;;
9315a7b590b3Smrg	      esac
9316a7b590b3Smrg	    done
9317a7b590b3Smrg	    dlfiles="$newdlfiles"
9318a7b590b3Smrg	    newdlprefiles=
9319a7b590b3Smrg	    for lib in $dlprefiles; do
9320a7b590b3Smrg	      case $lib in
9321a7b590b3Smrg	      *.la)
9322a7b590b3Smrg		# Only pass preopened files to the pseudo-archive (for
9323a7b590b3Smrg		# eventual linking with the app. that links it) if we
9324a7b590b3Smrg		# didn't already link the preopened objects directly into
9325a7b590b3Smrg		# the library:
9326a7b590b3Smrg		func_basename "$lib"
9327a7b590b3Smrg		name="$func_basename_result"
9328a7b590b3Smrg		eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $lib`
9329a7b590b3Smrg		test -z "$libdir" && \
9330a7b590b3Smrg		  func_fatal_error "\`$lib' is not a valid libtool archive"
93313e51e026Smrg		func_append newdlprefiles " ${lt_sysroot:+=}$libdir/$name"
9332a7b590b3Smrg		;;
9333a7b590b3Smrg	      esac
9334a7b590b3Smrg	    done
9335a7b590b3Smrg	    dlprefiles="$newdlprefiles"
9336a7b590b3Smrg	  else
9337a7b590b3Smrg	    newdlfiles=
9338a7b590b3Smrg	    for lib in $dlfiles; do
9339a7b590b3Smrg	      case $lib in
9340a7b590b3Smrg		[\\/]* | [A-Za-z]:[\\/]*) abs="$lib" ;;
9341a7b590b3Smrg		*) abs=`pwd`"/$lib" ;;
9342a7b590b3Smrg	      esac
93433e51e026Smrg	      func_append newdlfiles " $abs"
9344a7b590b3Smrg	    done
9345a7b590b3Smrg	    dlfiles="$newdlfiles"
9346a7b590b3Smrg	    newdlprefiles=
9347a7b590b3Smrg	    for lib in $dlprefiles; do
9348a7b590b3Smrg	      case $lib in
9349a7b590b3Smrg		[\\/]* | [A-Za-z]:[\\/]*) abs="$lib" ;;
9350a7b590b3Smrg		*) abs=`pwd`"/$lib" ;;
9351a7b590b3Smrg	      esac
93523e51e026Smrg	      func_append newdlprefiles " $abs"
9353a7b590b3Smrg	    done
9354a7b590b3Smrg	    dlprefiles="$newdlprefiles"
9355a7b590b3Smrg	  fi
9356a7b590b3Smrg	  $RM $output
9357a7b590b3Smrg	  # place dlname in correct position for cygwin
93583e51e026Smrg	  # In fact, it would be nice if we could use this code for all target
93593e51e026Smrg	  # systems that can't hard-code library paths into their executables
93603e51e026Smrg	  # and that have no shared library path variable independent of PATH,
93613e51e026Smrg	  # but it turns out we can't easily determine that from inspecting
93623e51e026Smrg	  # libtool variables, so we have to hard-code the OSs to which it
93633e51e026Smrg	  # applies here; at the moment, that means platforms that use the PE
93643e51e026Smrg	  # object format with DLL files.  See the long comment at the top of
93653e51e026Smrg	  # tests/bindir.at for full details.
9366a7b590b3Smrg	  tdlname=$dlname
9367a7b590b3Smrg	  case $host,$output,$installed,$module,$dlname in
93683e51e026Smrg	    *cygwin*,*lai,yes,no,*.dll | *mingw*,*lai,yes,no,*.dll | *cegcc*,*lai,yes,no,*.dll)
93693e51e026Smrg	      # If a -bindir argument was supplied, place the dll there.
93703e51e026Smrg	      if test "x$bindir" != x ;
93713e51e026Smrg	      then
93723e51e026Smrg		func_relative_path "$install_libdir" "$bindir"
93733e51e026Smrg		tdlname=$func_relative_path_result$dlname
93743e51e026Smrg	      else
93753e51e026Smrg		# Otherwise fall back on heuristic.
93763e51e026Smrg		tdlname=../bin/$dlname
93773e51e026Smrg	      fi
93783e51e026Smrg	      ;;
9379a7b590b3Smrg	  esac
9380a7b590b3Smrg	  $ECHO > $output "\
9381a7b590b3Smrg# $outputname - a libtool library file
9382a7b590b3Smrg# Generated by $PROGRAM (GNU $PACKAGE$TIMESTAMP) $VERSION
9383a7b590b3Smrg#
9384a7b590b3Smrg# Please DO NOT delete this file!
9385a7b590b3Smrg# It is necessary for linking the library.
9386943345d3Smrg
9387a7b590b3Smrg# The name that we can dlopen(3).
9388a7b590b3Smrgdlname='$tdlname'
9389943345d3Smrg
9390a7b590b3Smrg# Names of this library.
9391a7b590b3Smrglibrary_names='$library_names'
9392943345d3Smrg
9393a7b590b3Smrg# The name of the static archive.
9394a7b590b3Smrgold_library='$old_library'
9395943345d3Smrg
9396a7b590b3Smrg# Linker flags that can not go in dependency_libs.
9397a7b590b3Smrginherited_linker_flags='$new_inherited_linker_flags'
9398943345d3Smrg
9399a7b590b3Smrg# Libraries that this one depends upon.
9400a7b590b3Smrgdependency_libs='$dependency_libs'
9401943345d3Smrg
9402a7b590b3Smrg# Names of additional weak libraries provided by this library
9403a7b590b3Smrgweak_library_names='$weak_libs'
9404943345d3Smrg
9405a7b590b3Smrg# Version information for $libname.
9406a7b590b3Smrgcurrent=$current
9407a7b590b3Smrgage=$age
9408a7b590b3Smrgrevision=$revision
9409943345d3Smrg
9410a7b590b3Smrg# Is this an already installed library?
9411a7b590b3Smrginstalled=$installed
9412943345d3Smrg
9413a7b590b3Smrg# Should we warn about portability when linking against -modules?
9414a7b590b3Smrgshouldnotlink=$module
9415943345d3Smrg
9416a7b590b3Smrg# Files to dlopen/dlpreopen
9417a7b590b3Smrgdlopen='$dlfiles'
9418a7b590b3Smrgdlpreopen='$dlprefiles'
9419943345d3Smrg
9420a7b590b3Smrg# Directory that this library needs to be installed in:
9421a7b590b3Smrglibdir='$install_libdir'"
9422a7b590b3Smrg	  if test "$installed" = no && test "$need_relink" = yes; then
9423a7b590b3Smrg	    $ECHO >> $output "\
9424a7b590b3Smrgrelink_command=\"$relink_command\""
9425a7b590b3Smrg	  fi
9426a7b590b3Smrg	done
9427a7b590b3Smrg      }
9428943345d3Smrg
9429a7b590b3Smrg      # Do a symbolic link so that the libtool archive can be found in
9430a7b590b3Smrg      # LD_LIBRARY_PATH before the program is installed.
9431a7b590b3Smrg      func_show_eval '( cd "$output_objdir" && $RM "$outputname" && $LN_S "../$outputname" "$outputname" )' 'exit $?'
9432a7b590b3Smrg      ;;
9433a7b590b3Smrg    esac
9434a7b590b3Smrg    exit $EXIT_SUCCESS
9435a7b590b3Smrg}
9436943345d3Smrg
94373e51e026Smrg{ test "$opt_mode" = link || test "$opt_mode" = relink; } &&
9438a7b590b3Smrg    func_mode_link ${1+"$@"}
9439f67b85aaSmrg
9440943345d3Smrg
9441a7b590b3Smrg# func_mode_uninstall arg...
9442a7b590b3Smrgfunc_mode_uninstall ()
9443a7b590b3Smrg{
9444a7b590b3Smrg    $opt_debug
9445a7b590b3Smrg    RM="$nonopt"
9446943345d3Smrg    files=
9447943345d3Smrg    rmforce=
9448943345d3Smrg    exit_status=0
9449943345d3Smrg
9450943345d3Smrg    # This variable tells wrapper scripts just to set variables rather
9451943345d3Smrg    # than running their programs.
9452943345d3Smrg    libtool_install_magic="$magic"
9453943345d3Smrg
9454943345d3Smrg    for arg
9455943345d3Smrg    do
9456943345d3Smrg      case $arg in
94573e51e026Smrg      -f) func_append RM " $arg"; rmforce=yes ;;
94583e51e026Smrg      -*) func_append RM " $arg" ;;
94593e51e026Smrg      *) func_append files " $arg" ;;
9460943345d3Smrg      esac
9461943345d3Smrg    done
9462943345d3Smrg
9463a7b590b3Smrg    test -z "$RM" && \
9464a7b590b3Smrg      func_fatal_help "you must specify an RM program"
9465943345d3Smrg
9466943345d3Smrg    rmdirs=
9467943345d3Smrg
9468943345d3Smrg    for file in $files; do
9469a7b590b3Smrg      func_dirname "$file" "" "."
9470a7b590b3Smrg      dir="$func_dirname_result"
9471a7b590b3Smrg      if test "X$dir" = X.; then
94723e51e026Smrg	odir="$objdir"
9473943345d3Smrg      else
94743e51e026Smrg	odir="$dir/$objdir"
9475943345d3Smrg      fi
9476a7b590b3Smrg      func_basename "$file"
9477a7b590b3Smrg      name="$func_basename_result"
94783e51e026Smrg      test "$opt_mode" = uninstall && odir="$dir"
9479943345d3Smrg
94803e51e026Smrg      # Remember odir for removal later, being careful to avoid duplicates
94813e51e026Smrg      if test "$opt_mode" = clean; then
9482943345d3Smrg	case " $rmdirs " in
94833e51e026Smrg	  *" $odir "*) ;;
94843e51e026Smrg	  *) func_append rmdirs " $odir" ;;
9485943345d3Smrg	esac
9486943345d3Smrg      fi
9487943345d3Smrg
9488943345d3Smrg      # Don't error if the file doesn't exist and rm -f was used.
9489a7b590b3Smrg      if { test -L "$file"; } >/dev/null 2>&1 ||
9490a7b590b3Smrg	 { test -h "$file"; } >/dev/null 2>&1 ||
9491a7b590b3Smrg	 test -f "$file"; then
9492943345d3Smrg	:
9493943345d3Smrg      elif test -d "$file"; then
9494943345d3Smrg	exit_status=1
9495943345d3Smrg	continue
9496943345d3Smrg      elif test "$rmforce" = yes; then
9497943345d3Smrg	continue
9498943345d3Smrg      fi
9499943345d3Smrg
9500943345d3Smrg      rmfiles="$file"
9501943345d3Smrg
9502943345d3Smrg      case $name in
9503943345d3Smrg      *.la)
9504943345d3Smrg	# Possibly a libtool archive, so verify it.
9505a7b590b3Smrg	if func_lalib_p "$file"; then
9506a7b590b3Smrg	  func_source $dir/$name
9507943345d3Smrg
9508943345d3Smrg	  # Delete the libtool libraries and symlinks.
9509943345d3Smrg	  for n in $library_names; do
95103e51e026Smrg	    func_append rmfiles " $odir/$n"
9511943345d3Smrg	  done
95123e51e026Smrg	  test -n "$old_library" && func_append rmfiles " $odir/$old_library"
9513943345d3Smrg
95143e51e026Smrg	  case "$opt_mode" in
9515943345d3Smrg	  clean)
95163e51e026Smrg	    case " $library_names " in
9517943345d3Smrg	    *" $dlname "*) ;;
95183e51e026Smrg	    *) test -n "$dlname" && func_append rmfiles " $odir/$dlname" ;;
9519943345d3Smrg	    esac
95203e51e026Smrg	    test -n "$libdir" && func_append rmfiles " $odir/$name $odir/${name}i"
9521943345d3Smrg	    ;;
9522943345d3Smrg	  uninstall)
9523943345d3Smrg	    if test -n "$library_names"; then
9524943345d3Smrg	      # Do each command in the postuninstall commands.
9525a7b590b3Smrg	      func_execute_cmds "$postuninstall_cmds" 'test "$rmforce" = yes || exit_status=1'
9526943345d3Smrg	    fi
9527943345d3Smrg
9528943345d3Smrg	    if test -n "$old_library"; then
9529943345d3Smrg	      # Do each command in the old_postuninstall commands.
9530a7b590b3Smrg	      func_execute_cmds "$old_postuninstall_cmds" 'test "$rmforce" = yes || exit_status=1'
9531943345d3Smrg	    fi
9532943345d3Smrg	    # FIXME: should reinstall the best remaining shared library.
9533943345d3Smrg	    ;;
9534943345d3Smrg	  esac
9535943345d3Smrg	fi
9536943345d3Smrg	;;
9537943345d3Smrg
9538943345d3Smrg      *.lo)
9539943345d3Smrg	# Possibly a libtool object, so verify it.
9540a7b590b3Smrg	if func_lalib_p "$file"; then
9541943345d3Smrg
9542943345d3Smrg	  # Read the .lo file
9543a7b590b3Smrg	  func_source $dir/$name
9544943345d3Smrg
9545943345d3Smrg	  # Add PIC object to the list of files to remove.
9546a7b590b3Smrg	  if test -n "$pic_object" &&
9547a7b590b3Smrg	     test "$pic_object" != none; then
95483e51e026Smrg	    func_append rmfiles " $dir/$pic_object"
9549943345d3Smrg	  fi
9550943345d3Smrg
9551943345d3Smrg	  # Add non-PIC object to the list of files to remove.
9552a7b590b3Smrg	  if test -n "$non_pic_object" &&
9553a7b590b3Smrg	     test "$non_pic_object" != none; then
95543e51e026Smrg	    func_append rmfiles " $dir/$non_pic_object"
9555943345d3Smrg	  fi
9556943345d3Smrg	fi
9557943345d3Smrg	;;
9558943345d3Smrg
9559943345d3Smrg      *)
95603e51e026Smrg	if test "$opt_mode" = clean ; then
9561943345d3Smrg	  noexename=$name
9562943345d3Smrg	  case $file in
9563943345d3Smrg	  *.exe)
9564a7b590b3Smrg	    func_stripname '' '.exe' "$file"
9565a7b590b3Smrg	    file=$func_stripname_result
9566a7b590b3Smrg	    func_stripname '' '.exe' "$name"
9567a7b590b3Smrg	    noexename=$func_stripname_result
9568943345d3Smrg	    # $file with .exe has already been added to rmfiles,
9569943345d3Smrg	    # add $file without .exe
95703e51e026Smrg	    func_append rmfiles " $file"
9571943345d3Smrg	    ;;
9572943345d3Smrg	  esac
9573943345d3Smrg	  # Do a test to see if this is a libtool program.
9574a7b590b3Smrg	  if func_ltwrapper_p "$file"; then
9575a7b590b3Smrg	    if func_ltwrapper_executable_p "$file"; then
9576a7b590b3Smrg	      func_ltwrapper_scriptname "$file"
9577a7b590b3Smrg	      relink_command=
9578a7b590b3Smrg	      func_source $func_ltwrapper_scriptname_result
95793e51e026Smrg	      func_append rmfiles " $func_ltwrapper_scriptname_result"
9580a7b590b3Smrg	    else
9581a7b590b3Smrg	      relink_command=
9582a7b590b3Smrg	      func_source $dir/$noexename
9583a7b590b3Smrg	    fi
9584943345d3Smrg
9585943345d3Smrg	    # note $name still contains .exe if it was in $file originally
9586943345d3Smrg	    # as does the version of $file that was added into $rmfiles
95873e51e026Smrg	    func_append rmfiles " $odir/$name $odir/${name}S.${objext}"
9588943345d3Smrg	    if test "$fast_install" = yes && test -n "$relink_command"; then
95893e51e026Smrg	      func_append rmfiles " $odir/lt-$name"
9590943345d3Smrg	    fi
9591943345d3Smrg	    if test "X$noexename" != "X$name" ; then
95923e51e026Smrg	      func_append rmfiles " $odir/lt-${noexename}.c"
9593943345d3Smrg	    fi
9594943345d3Smrg	  fi
9595943345d3Smrg	fi
9596943345d3Smrg	;;
9597943345d3Smrg      esac
9598a7b590b3Smrg      func_show_eval "$RM $rmfiles" 'exit_status=1'
9599943345d3Smrg    done
9600943345d3Smrg
9601943345d3Smrg    # Try to remove the ${objdir}s in the directories where we deleted files
9602943345d3Smrg    for dir in $rmdirs; do
9603943345d3Smrg      if test -d "$dir"; then
9604a7b590b3Smrg	func_show_eval "rmdir $dir >/dev/null 2>&1"
9605943345d3Smrg      fi
9606943345d3Smrg    done
9607943345d3Smrg
9608943345d3Smrg    exit $exit_status
9609a7b590b3Smrg}
9610943345d3Smrg
96113e51e026Smrg{ test "$opt_mode" = uninstall || test "$opt_mode" = clean; } &&
9612a7b590b3Smrg    func_mode_uninstall ${1+"$@"}
9613943345d3Smrg
96143e51e026Smrgtest -z "$opt_mode" && {
9615a7b590b3Smrg  help="$generic_help"
9616a7b590b3Smrg  func_fatal_help "you must specify a MODE"
9617a7b590b3Smrg}
9618a7b590b3Smrg
9619a7b590b3Smrgtest -z "$exec_cmd" && \
96203e51e026Smrg  func_fatal_help "invalid operation mode \`$opt_mode'"
9621943345d3Smrg
9622943345d3Smrgif test -n "$exec_cmd"; then
9623a7b590b3Smrg  eval exec "$exec_cmd"
9624943345d3Smrg  exit $EXIT_FAILURE
9625943345d3Smrgfi
9626943345d3Smrg
9627a7b590b3Smrgexit $exit_status
9628943345d3Smrg
9629943345d3Smrg
9630943345d3Smrg# The TAGs below are defined such that we never get into a situation
9631943345d3Smrg# in which we disable both kinds of libraries.  Given conflicting
9632943345d3Smrg# choices, we go for a static library, that is the most portable,
9633943345d3Smrg# since we can't tell whether shared libraries were disabled because
9634943345d3Smrg# the user asked for that or because the platform doesn't support
9635943345d3Smrg# them.  This is particularly important on AIX, because we don't
9636943345d3Smrg# support having both static and shared libraries enabled at the same
9637943345d3Smrg# time on that platform, so we default to a shared-only configuration.
9638943345d3Smrg# If a disable-shared tag is given, we'll fallback to a static-only
9639943345d3Smrg# configuration.  But we'll never go from static-only to shared-only.
9640943345d3Smrg
9641943345d3Smrg# ### BEGIN LIBTOOL TAG CONFIG: disable-shared
9642a7b590b3Smrgbuild_libtool_libs=no
9643a7b590b3Smrgbuild_old_libs=yes
9644943345d3Smrg# ### END LIBTOOL TAG CONFIG: disable-shared
9645943345d3Smrg
9646943345d3Smrg# ### BEGIN LIBTOOL TAG CONFIG: disable-static
9647a7b590b3Smrgbuild_old_libs=`case $build_libtool_libs in yes) echo no;; *) echo yes;; esac`
9648943345d3Smrg# ### END LIBTOOL TAG CONFIG: disable-static
9649943345d3Smrg
9650943345d3Smrg# Local Variables:
9651943345d3Smrg# mode:shell-script
9652943345d3Smrg# sh-indentation:2
9653943345d3Smrg# End:
9654a7b590b3Smrg# vi:sw=2
9655a7b590b3Smrg
9656