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