ltmain.sh revision 95903e71
1c3c9db83Smrg
295903e71Smrg# 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,
695903e71Smrg# 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)
4495903e71Smrg#       --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)
7395903e71Smrg#         $progname:	(GNU libtool) 2.4.2 Debian-2.4.2-1.11
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
8395903e71SmrgVERSION="2.4.2 Debian-2.4.2-1.11"
84c3c9db83SmrgTIMESTAMP=""
8595903e71Smrgpackage_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"
38695903e71Smrg     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"'/
77095903e71Smrg	s/\$automake_version/'"`(${AUTOMAKE-automake} --version) 2>/dev/null |$SED 1q`"'/
77195903e71Smrg	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=:
105195903e71Smrgopt_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
111895903e71Smrgfunc_append preserve_args " $opt"
111995903e71Smrg			;;
112095903e71Smrg      --no-warning|--no-warn)
112195903e71Smrg			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 | \
206395903e71Smrg    *.[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"
320595903e71Smrg      func_to_tool_file "$oldlib" func_convert_file_msys_to_w32
320695903e71Smrg      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
321195903e71Smrg	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.
347695903e71Smrg	  *-*-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{
398895903e71Smrg  case \" \$* \" in
398995903e71Smrg  *\\ --lt-*)
399095903e71Smrg    for lt_wr_arg
399195903e71Smrg    do
399295903e71Smrg      case \$lt_wr_arg in
399395903e71Smrg      --lt-*) ;;
399495903e71Smrg      *) set x \"\$@\" \"\$lt_wr_arg\"; shift;;
399595903e71Smrg      esac
399695903e71Smrg      shift
399795903e71Smrg    done ;;
399895903e71Smrg  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 |
506695903e71Smrg	      $SED -n -e '
506795903e71Smrgs/^\(.\{79\}\)\(..*\)/\1\
506895903e71Smrg\2/
506995903e71Smrgh
507095903e71Smrgs/\([\\"]\)/\\\1/g
507195903e71Smrgs/$/\\n/
507295903e71Smrgs/\([^\n]*\).*/  fputs ("\1", f);/p
507395903e71Smrgg
507495903e71SmrgD'
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
565895903e71Smrg      -mt|-mthreads|-kthread|-Kthread|-pthread|-pthreads|--thread-safe \
565995903e71Smrg      |-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" ;;
612795903e71Smrg	link)
612895903e71Smrg	  libs="$deplibs %DEPLIBS%"
612995903e71Smrg	  test "X$link_all_deplibs" != Xno && libs="$libs $dependency_libs"
613095903e71Smrg	  ;;
6131c3c9db83Smrg	esac
6132c3c9db83Smrg      fi
6133c3c9db83Smrg      if test "$linkmode,$pass" = "lib,dlpreopen"; then
6134c3c9db83Smrg	# Collect and forward deplibs of preopened libtool libs
6135c3c9db83Smrg	for lib in $dlprefiles; do
6136c3c9db83Smrg	  # Ignore non-libtool-libs
6137c3c9db83Smrg	  dependency_libs=
61383f6d0e1dSmrg	  func_resolve_sysroot "$lib"
6139c3c9db83Smrg	  case $lib in
61403f6d0e1dSmrg	  *.la)	func_source "$func_resolve_sysroot_result" ;;
6141c3c9db83Smrg	  esac
6142c3c9db83Smrg
6143c3c9db83Smrg	  # Collect preopened libtool deplibs, except any this library
6144c3c9db83Smrg	  # has declared as weak libs
6145c3c9db83Smrg	  for deplib in $dependency_libs; do
61463f6d0e1dSmrg	    func_basename "$deplib"
61473f6d0e1dSmrg            deplib_base=$func_basename_result
6148c3c9db83Smrg	    case " $weak_libs " in
6149c3c9db83Smrg	    *" $deplib_base "*) ;;
61503f6d0e1dSmrg	    *) func_append deplibs " $deplib" ;;
6151c3c9db83Smrg	    esac
6152c3c9db83Smrg	  done
6153c3c9db83Smrg	done
6154c3c9db83Smrg	libs="$dlprefiles"
6155c3c9db83Smrg      fi
6156c3c9db83Smrg      if test "$pass" = dlopen; then
6157c3c9db83Smrg	# Collect dlpreopened libraries
6158c3c9db83Smrg	save_deplibs="$deplibs"
6159c3c9db83Smrg	deplibs=
6160c3c9db83Smrg      fi
6161c3c9db83Smrg
6162c3c9db83Smrg      for deplib in $libs; do
6163c3c9db83Smrg	lib=
6164c3c9db83Smrg	found=no
6165c3c9db83Smrg	case $deplib in
616695903e71Smrg	-mt|-mthreads|-kthread|-Kthread|-pthread|-pthreads|--thread-safe \
616795903e71Smrg        |-threads|-fopenmp|-openmp|-mp|-xopenmp|-omp|-qsmp=*)
6168c3c9db83Smrg	  if test "$linkmode,$pass" = "prog,link"; then
6169c3c9db83Smrg	    compile_deplibs="$deplib $compile_deplibs"
6170c3c9db83Smrg	    finalize_deplibs="$deplib $finalize_deplibs"
6171c3c9db83Smrg	  else
61723f6d0e1dSmrg	    func_append compiler_flags " $deplib"
6173c3c9db83Smrg	    if test "$linkmode" = lib ; then
6174c3c9db83Smrg		case "$new_inherited_linker_flags " in
6175c3c9db83Smrg		    *" $deplib "*) ;;
61763f6d0e1dSmrg		    * ) func_append new_inherited_linker_flags " $deplib" ;;
6177c3c9db83Smrg		esac
6178c3c9db83Smrg	    fi
6179c3c9db83Smrg	  fi
6180c3c9db83Smrg	  continue
6181c3c9db83Smrg	  ;;
6182c3c9db83Smrg	-l*)
6183c3c9db83Smrg	  if test "$linkmode" != lib && test "$linkmode" != prog; then
6184c3c9db83Smrg	    func_warning "\`-l' is ignored for archives/objects"
6185c3c9db83Smrg	    continue
6186c3c9db83Smrg	  fi
6187c3c9db83Smrg	  func_stripname '-l' '' "$deplib"
6188c3c9db83Smrg	  name=$func_stripname_result
6189c3c9db83Smrg	  if test "$linkmode" = lib; then
6190c3c9db83Smrg	    searchdirs="$newlib_search_path $lib_search_path $compiler_lib_search_dirs $sys_lib_search_path $shlib_search_path"
6191c3c9db83Smrg	  else
6192c3c9db83Smrg	    searchdirs="$newlib_search_path $lib_search_path $sys_lib_search_path $shlib_search_path"
6193c3c9db83Smrg	  fi
6194c3c9db83Smrg	  for searchdir in $searchdirs; do
6195c3c9db83Smrg	    for search_ext in .la $std_shrext .so .a; do
6196c3c9db83Smrg	      # Search the libtool library
6197c3c9db83Smrg	      lib="$searchdir/lib${name}${search_ext}"
6198c3c9db83Smrg	      if test -f "$lib"; then
6199c3c9db83Smrg		if test "$search_ext" = ".la"; then
6200c3c9db83Smrg		  found=yes
6201c3c9db83Smrg		else
6202c3c9db83Smrg		  found=no
6203c3c9db83Smrg		fi
6204c3c9db83Smrg		break 2
6205c3c9db83Smrg	      fi
6206c3c9db83Smrg	    done
6207c3c9db83Smrg	  done
6208c3c9db83Smrg	  if test "$found" != yes; then
6209c3c9db83Smrg	    # deplib doesn't seem to be a libtool library
6210c3c9db83Smrg	    if test "$linkmode,$pass" = "prog,link"; then
6211c3c9db83Smrg	      compile_deplibs="$deplib $compile_deplibs"
6212c3c9db83Smrg	      finalize_deplibs="$deplib $finalize_deplibs"
6213c3c9db83Smrg	    else
6214c3c9db83Smrg	      deplibs="$deplib $deplibs"
6215c3c9db83Smrg	      test "$linkmode" = lib && newdependency_libs="$deplib $newdependency_libs"
6216c3c9db83Smrg	    fi
6217c3c9db83Smrg	    continue
6218c3c9db83Smrg	  else # deplib is a libtool library
6219c3c9db83Smrg	    # If $allow_libtool_libs_with_static_runtimes && $deplib is a stdlib,
6220c3c9db83Smrg	    # We need to do some special things here, and not later.
6221c3c9db83Smrg	    if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then
6222c3c9db83Smrg	      case " $predeps $postdeps " in
6223c3c9db83Smrg	      *" $deplib "*)
6224c3c9db83Smrg		if func_lalib_p "$lib"; then
6225c3c9db83Smrg		  library_names=
6226c3c9db83Smrg		  old_library=
6227c3c9db83Smrg		  func_source "$lib"
6228c3c9db83Smrg		  for l in $old_library $library_names; do
6229c3c9db83Smrg		    ll="$l"
6230c3c9db83Smrg		  done
6231c3c9db83Smrg		  if test "X$ll" = "X$old_library" ; then # only static version available
6232c3c9db83Smrg		    found=no
6233c3c9db83Smrg		    func_dirname "$lib" "" "."
6234c3c9db83Smrg		    ladir="$func_dirname_result"
6235c3c9db83Smrg		    lib=$ladir/$old_library
6236c3c9db83Smrg		    if test "$linkmode,$pass" = "prog,link"; then
6237c3c9db83Smrg		      compile_deplibs="$deplib $compile_deplibs"
6238c3c9db83Smrg		      finalize_deplibs="$deplib $finalize_deplibs"
6239c3c9db83Smrg		    else
6240c3c9db83Smrg		      deplibs="$deplib $deplibs"
6241c3c9db83Smrg		      test "$linkmode" = lib && newdependency_libs="$deplib $newdependency_libs"
6242c3c9db83Smrg		    fi
6243c3c9db83Smrg		    continue
6244c3c9db83Smrg		  fi
6245c3c9db83Smrg		fi
6246c3c9db83Smrg		;;
6247c3c9db83Smrg	      *) ;;
6248c3c9db83Smrg	      esac
6249c3c9db83Smrg	    fi
6250c3c9db83Smrg	  fi
6251c3c9db83Smrg	  ;; # -l
6252c3c9db83Smrg	*.ltframework)
6253c3c9db83Smrg	  if test "$linkmode,$pass" = "prog,link"; then
6254c3c9db83Smrg	    compile_deplibs="$deplib $compile_deplibs"
6255c3c9db83Smrg	    finalize_deplibs="$deplib $finalize_deplibs"
6256c3c9db83Smrg	  else
6257c3c9db83Smrg	    deplibs="$deplib $deplibs"
6258c3c9db83Smrg	    if test "$linkmode" = lib ; then
6259c3c9db83Smrg		case "$new_inherited_linker_flags " in
6260c3c9db83Smrg		    *" $deplib "*) ;;
62613f6d0e1dSmrg		    * ) func_append new_inherited_linker_flags " $deplib" ;;
6262c3c9db83Smrg		esac
6263c3c9db83Smrg	    fi
6264c3c9db83Smrg	  fi
6265c3c9db83Smrg	  continue
6266c3c9db83Smrg	  ;;
6267c3c9db83Smrg	-L*)
6268c3c9db83Smrg	  case $linkmode in
6269c3c9db83Smrg	  lib)
6270c3c9db83Smrg	    deplibs="$deplib $deplibs"
6271c3c9db83Smrg	    test "$pass" = conv && continue
6272c3c9db83Smrg	    newdependency_libs="$deplib $newdependency_libs"
6273c3c9db83Smrg	    func_stripname '-L' '' "$deplib"
62743f6d0e1dSmrg	    func_resolve_sysroot "$func_stripname_result"
62753f6d0e1dSmrg	    func_append newlib_search_path " $func_resolve_sysroot_result"
6276c3c9db83Smrg	    ;;
6277c3c9db83Smrg	  prog)
6278c3c9db83Smrg	    if test "$pass" = conv; then
6279c3c9db83Smrg	      deplibs="$deplib $deplibs"
6280c3c9db83Smrg	      continue
6281c3c9db83Smrg	    fi
6282c3c9db83Smrg	    if test "$pass" = scan; then
6283c3c9db83Smrg	      deplibs="$deplib $deplibs"
6284c3c9db83Smrg	    else
6285c3c9db83Smrg	      compile_deplibs="$deplib $compile_deplibs"
6286c3c9db83Smrg	      finalize_deplibs="$deplib $finalize_deplibs"
6287c3c9db83Smrg	    fi
6288c3c9db83Smrg	    func_stripname '-L' '' "$deplib"
62893f6d0e1dSmrg	    func_resolve_sysroot "$func_stripname_result"
62903f6d0e1dSmrg	    func_append newlib_search_path " $func_resolve_sysroot_result"
6291c3c9db83Smrg	    ;;
6292c3c9db83Smrg	  *)
6293c3c9db83Smrg	    func_warning "\`-L' is ignored for archives/objects"
6294c3c9db83Smrg	    ;;
6295c3c9db83Smrg	  esac # linkmode
6296c3c9db83Smrg	  continue
6297c3c9db83Smrg	  ;; # -L
6298c3c9db83Smrg	-R*)
6299c3c9db83Smrg	  if test "$pass" = link; then
6300c3c9db83Smrg	    func_stripname '-R' '' "$deplib"
63013f6d0e1dSmrg	    func_resolve_sysroot "$func_stripname_result"
63023f6d0e1dSmrg	    dir=$func_resolve_sysroot_result
6303c3c9db83Smrg	    # Make sure the xrpath contains only unique directories.
6304c3c9db83Smrg	    case "$xrpath " in
6305c3c9db83Smrg	    *" $dir "*) ;;
63063f6d0e1dSmrg	    *) func_append xrpath " $dir" ;;
6307c3c9db83Smrg	    esac
6308c3c9db83Smrg	  fi
6309c3c9db83Smrg	  deplibs="$deplib $deplibs"
6310c3c9db83Smrg	  continue
6311c3c9db83Smrg	  ;;
63123f6d0e1dSmrg	*.la)
63133f6d0e1dSmrg	  func_resolve_sysroot "$deplib"
63143f6d0e1dSmrg	  lib=$func_resolve_sysroot_result
63153f6d0e1dSmrg	  ;;
6316c3c9db83Smrg	*.$libext)
6317c3c9db83Smrg	  if test "$pass" = conv; then
6318c3c9db83Smrg	    deplibs="$deplib $deplibs"
6319c3c9db83Smrg	    continue
6320c3c9db83Smrg	  fi
6321c3c9db83Smrg	  case $linkmode in
6322c3c9db83Smrg	  lib)
6323c3c9db83Smrg	    # Linking convenience modules into shared libraries is allowed,
6324c3c9db83Smrg	    # but linking other static libraries is non-portable.
6325c3c9db83Smrg	    case " $dlpreconveniencelibs " in
6326c3c9db83Smrg	    *" $deplib "*) ;;
6327c3c9db83Smrg	    *)
6328c3c9db83Smrg	      valid_a_lib=no
6329c3c9db83Smrg	      case $deplibs_check_method in
6330c3c9db83Smrg		match_pattern*)
6331c3c9db83Smrg		  set dummy $deplibs_check_method; shift
6332c3c9db83Smrg		  match_pattern_regex=`expr "$deplibs_check_method" : "$1 \(.*\)"`
63333f6d0e1dSmrg		  if eval "\$ECHO \"$deplib\"" 2>/dev/null | $SED 10q \
6334c3c9db83Smrg		    | $EGREP "$match_pattern_regex" > /dev/null; then
6335c3c9db83Smrg		    valid_a_lib=yes
6336c3c9db83Smrg		  fi
6337c3c9db83Smrg		;;
6338c3c9db83Smrg		pass_all)
6339c3c9db83Smrg		  valid_a_lib=yes
6340c3c9db83Smrg		;;
6341c3c9db83Smrg	      esac
6342c3c9db83Smrg	      if test "$valid_a_lib" != yes; then
63433f6d0e1dSmrg		echo
6344c3c9db83Smrg		$ECHO "*** Warning: Trying to link with static lib archive $deplib."
63453f6d0e1dSmrg		echo "*** I have the capability to make that library automatically link in when"
63463f6d0e1dSmrg		echo "*** you link to this library.  But I can only do this if you have a"
63473f6d0e1dSmrg		echo "*** shared version of the library, which you do not appear to have"
63483f6d0e1dSmrg		echo "*** because the file extensions .$libext of this argument makes me believe"
63493f6d0e1dSmrg		echo "*** that it is just a static archive that I should not use here."
6350c3c9db83Smrg	      else
63513f6d0e1dSmrg		echo
6352c3c9db83Smrg		$ECHO "*** Warning: Linking the shared library $output against the"
6353c3c9db83Smrg		$ECHO "*** static library $deplib is not portable!"
6354c3c9db83Smrg		deplibs="$deplib $deplibs"
6355c3c9db83Smrg	      fi
6356c3c9db83Smrg	      ;;
6357c3c9db83Smrg	    esac
6358c3c9db83Smrg	    continue
6359c3c9db83Smrg	    ;;
6360c3c9db83Smrg	  prog)
6361c3c9db83Smrg	    if test "$pass" != link; then
6362c3c9db83Smrg	      deplibs="$deplib $deplibs"
6363c3c9db83Smrg	    else
6364c3c9db83Smrg	      compile_deplibs="$deplib $compile_deplibs"
6365c3c9db83Smrg	      finalize_deplibs="$deplib $finalize_deplibs"
6366c3c9db83Smrg	    fi
6367c3c9db83Smrg	    continue
6368c3c9db83Smrg	    ;;
6369c3c9db83Smrg	  esac # linkmode
6370c3c9db83Smrg	  ;; # *.$libext
6371c3c9db83Smrg	*.lo | *.$objext)
6372c3c9db83Smrg	  if test "$pass" = conv; then
6373c3c9db83Smrg	    deplibs="$deplib $deplibs"
6374c3c9db83Smrg	  elif test "$linkmode" = prog; then
6375c3c9db83Smrg	    if test "$pass" = dlpreopen || test "$dlopen_support" != yes || test "$build_libtool_libs" = no; then
6376c3c9db83Smrg	      # If there is no dlopen support or we're linking statically,
6377c3c9db83Smrg	      # we need to preload.
63783f6d0e1dSmrg	      func_append newdlprefiles " $deplib"
6379c3c9db83Smrg	      compile_deplibs="$deplib $compile_deplibs"
6380c3c9db83Smrg	      finalize_deplibs="$deplib $finalize_deplibs"
6381c3c9db83Smrg	    else
63823f6d0e1dSmrg	      func_append newdlfiles " $deplib"
6383c3c9db83Smrg	    fi
6384c3c9db83Smrg	  fi
6385c3c9db83Smrg	  continue
6386c3c9db83Smrg	  ;;
6387c3c9db83Smrg	%DEPLIBS%)
6388c3c9db83Smrg	  alldeplibs=yes
6389c3c9db83Smrg	  continue
6390c3c9db83Smrg	  ;;
6391c3c9db83Smrg	esac # case $deplib
6392c3c9db83Smrg
6393c3c9db83Smrg	if test "$found" = yes || test -f "$lib"; then :
6394c3c9db83Smrg	else
6395c3c9db83Smrg	  func_fatal_error "cannot find the library \`$lib' or unhandled argument \`$deplib'"
6396c3c9db83Smrg	fi
6397c3c9db83Smrg
6398c3c9db83Smrg	# Check to see that this really is a libtool archive.
6399c3c9db83Smrg	func_lalib_unsafe_p "$lib" \
6400c3c9db83Smrg	  || func_fatal_error "\`$lib' is not a valid libtool archive"
6401c3c9db83Smrg
6402c3c9db83Smrg	func_dirname "$lib" "" "."
6403c3c9db83Smrg	ladir="$func_dirname_result"
6404c3c9db83Smrg
6405c3c9db83Smrg	dlname=
6406c3c9db83Smrg	dlopen=
6407c3c9db83Smrg	dlpreopen=
6408c3c9db83Smrg	libdir=
6409c3c9db83Smrg	library_names=
6410c3c9db83Smrg	old_library=
6411c3c9db83Smrg	inherited_linker_flags=
6412c3c9db83Smrg	# If the library was installed with an old release of libtool,
6413c3c9db83Smrg	# it will not redefine variables installed, or shouldnotlink
6414c3c9db83Smrg	installed=yes
6415c3c9db83Smrg	shouldnotlink=no
6416c3c9db83Smrg	avoidtemprpath=
6417c3c9db83Smrg
6418c3c9db83Smrg
6419c3c9db83Smrg	# Read the .la file
6420c3c9db83Smrg	func_source "$lib"
6421c3c9db83Smrg
6422c3c9db83Smrg	# Convert "-framework foo" to "foo.ltframework"
6423c3c9db83Smrg	if test -n "$inherited_linker_flags"; then
64243f6d0e1dSmrg	  tmp_inherited_linker_flags=`$ECHO "$inherited_linker_flags" | $SED 's/-framework \([^ $]*\)/\1.ltframework/g'`
6425c3c9db83Smrg	  for tmp_inherited_linker_flag in $tmp_inherited_linker_flags; do
6426c3c9db83Smrg	    case " $new_inherited_linker_flags " in
6427c3c9db83Smrg	      *" $tmp_inherited_linker_flag "*) ;;
64283f6d0e1dSmrg	      *) func_append new_inherited_linker_flags " $tmp_inherited_linker_flag";;
6429c3c9db83Smrg	    esac
6430c3c9db83Smrg	  done
6431c3c9db83Smrg	fi
64323f6d0e1dSmrg	dependency_libs=`$ECHO " $dependency_libs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'`
6433c3c9db83Smrg	if test "$linkmode,$pass" = "lib,link" ||
6434c3c9db83Smrg	   test "$linkmode,$pass" = "prog,scan" ||
6435c3c9db83Smrg	   { test "$linkmode" != prog && test "$linkmode" != lib; }; then
64363f6d0e1dSmrg	  test -n "$dlopen" && func_append dlfiles " $dlopen"
64373f6d0e1dSmrg	  test -n "$dlpreopen" && func_append dlprefiles " $dlpreopen"
6438c3c9db83Smrg	fi
6439c3c9db83Smrg
6440c3c9db83Smrg	if test "$pass" = conv; then
6441c3c9db83Smrg	  # Only check for convenience libraries
6442c3c9db83Smrg	  deplibs="$lib $deplibs"
6443c3c9db83Smrg	  if test -z "$libdir"; then
6444c3c9db83Smrg	    if test -z "$old_library"; then
6445c3c9db83Smrg	      func_fatal_error "cannot find name of link library for \`$lib'"
6446c3c9db83Smrg	    fi
6447c3c9db83Smrg	    # It is a libtool convenience library, so add in its objects.
64483f6d0e1dSmrg	    func_append convenience " $ladir/$objdir/$old_library"
64493f6d0e1dSmrg	    func_append old_convenience " $ladir/$objdir/$old_library"
645095903e71Smrg	    tmp_libs=
645195903e71Smrg	    for deplib in $dependency_libs; do
645295903e71Smrg	      deplibs="$deplib $deplibs"
645395903e71Smrg	      if $opt_preserve_dup_deps ; then
645495903e71Smrg		case "$tmp_libs " in
645595903e71Smrg		*" $deplib "*) func_append specialdeplibs " $deplib" ;;
645695903e71Smrg		esac
645795903e71Smrg	      fi
645895903e71Smrg	      func_append tmp_libs " $deplib"
645995903e71Smrg	    done
6460c3c9db83Smrg	  elif test "$linkmode" != prog && test "$linkmode" != lib; then
6461c3c9db83Smrg	    func_fatal_error "\`$lib' is not a convenience library"
6462c3c9db83Smrg	  fi
6463c3c9db83Smrg	  continue
6464c3c9db83Smrg	fi # $pass = conv
6465c3c9db83Smrg
6466c3c9db83Smrg
6467c3c9db83Smrg	# Get the name of the library we link against.
6468c3c9db83Smrg	linklib=
64693f6d0e1dSmrg	if test -n "$old_library" &&
64703f6d0e1dSmrg	   { test "$prefer_static_libs" = yes ||
64713f6d0e1dSmrg	     test "$prefer_static_libs,$installed" = "built,no"; }; then
64723f6d0e1dSmrg	  linklib=$old_library
64733f6d0e1dSmrg	else
64743f6d0e1dSmrg	  for l in $old_library $library_names; do
64753f6d0e1dSmrg	    linklib="$l"
64763f6d0e1dSmrg	  done
64773f6d0e1dSmrg	fi
6478c3c9db83Smrg	if test -z "$linklib"; then
6479c3c9db83Smrg	  func_fatal_error "cannot find name of link library for \`$lib'"
6480c3c9db83Smrg	fi
6481c3c9db83Smrg
6482c3c9db83Smrg	# This library was specified with -dlopen.
6483c3c9db83Smrg	if test "$pass" = dlopen; then
6484c3c9db83Smrg	  if test -z "$libdir"; then
6485c3c9db83Smrg	    func_fatal_error "cannot -dlopen a convenience library: \`$lib'"
6486c3c9db83Smrg	  fi
6487c3c9db83Smrg	  if test -z "$dlname" ||
6488c3c9db83Smrg	     test "$dlopen_support" != yes ||
6489c3c9db83Smrg	     test "$build_libtool_libs" = no; then
6490c3c9db83Smrg	    # If there is no dlname, no dlopen support or we're linking
6491c3c9db83Smrg	    # statically, we need to preload.  We also need to preload any
6492c3c9db83Smrg	    # dependent libraries so libltdl's deplib preloader doesn't
6493c3c9db83Smrg	    # bomb out in the load deplibs phase.
64943f6d0e1dSmrg	    func_append dlprefiles " $lib $dependency_libs"
6495c3c9db83Smrg	  else
64963f6d0e1dSmrg	    func_append newdlfiles " $lib"
6497c3c9db83Smrg	  fi
6498c3c9db83Smrg	  continue
6499c3c9db83Smrg	fi # $pass = dlopen
6500c3c9db83Smrg
6501c3c9db83Smrg	# We need an absolute path.
6502c3c9db83Smrg	case $ladir in
6503c3c9db83Smrg	[\\/]* | [A-Za-z]:[\\/]*) abs_ladir="$ladir" ;;
6504c3c9db83Smrg	*)
6505c3c9db83Smrg	  abs_ladir=`cd "$ladir" && pwd`
6506c3c9db83Smrg	  if test -z "$abs_ladir"; then
6507c3c9db83Smrg	    func_warning "cannot determine absolute directory name of \`$ladir'"
6508c3c9db83Smrg	    func_warning "passing it literally to the linker, although it might fail"
6509c3c9db83Smrg	    abs_ladir="$ladir"
6510c3c9db83Smrg	  fi
6511c3c9db83Smrg	  ;;
6512c3c9db83Smrg	esac
6513c3c9db83Smrg	func_basename "$lib"
6514c3c9db83Smrg	laname="$func_basename_result"
6515c3c9db83Smrg
6516c3c9db83Smrg	# Find the relevant object directory and library name.
6517c3c9db83Smrg	if test "X$installed" = Xyes; then
65183f6d0e1dSmrg	  if test ! -f "$lt_sysroot$libdir/$linklib" && test -f "$abs_ladir/$linklib"; then
6519c3c9db83Smrg	    func_warning "library \`$lib' was moved."
6520c3c9db83Smrg	    dir="$ladir"
6521c3c9db83Smrg	    absdir="$abs_ladir"
6522c3c9db83Smrg	    libdir="$abs_ladir"
6523c3c9db83Smrg	  else
65243f6d0e1dSmrg	    dir="$lt_sysroot$libdir"
65253f6d0e1dSmrg	    absdir="$lt_sysroot$libdir"
6526c3c9db83Smrg	  fi
6527c3c9db83Smrg	  test "X$hardcode_automatic" = Xyes && avoidtemprpath=yes
6528c3c9db83Smrg	else
6529c3c9db83Smrg	  if test ! -f "$ladir/$objdir/$linklib" && test -f "$abs_ladir/$linklib"; then
6530c3c9db83Smrg	    dir="$ladir"
6531c3c9db83Smrg	    absdir="$abs_ladir"
6532c3c9db83Smrg	    # Remove this search path later
65333f6d0e1dSmrg	    func_append notinst_path " $abs_ladir"
6534c3c9db83Smrg	  else
6535c3c9db83Smrg	    dir="$ladir/$objdir"
6536c3c9db83Smrg	    absdir="$abs_ladir/$objdir"
6537c3c9db83Smrg	    # Remove this search path later
65383f6d0e1dSmrg	    func_append notinst_path " $abs_ladir"
6539c3c9db83Smrg	  fi
6540c3c9db83Smrg	fi # $installed = yes
6541c3c9db83Smrg	func_stripname 'lib' '.la' "$laname"
6542c3c9db83Smrg	name=$func_stripname_result
6543c3c9db83Smrg
6544c3c9db83Smrg	# This library was specified with -dlpreopen.
6545c3c9db83Smrg	if test "$pass" = dlpreopen; then
6546c3c9db83Smrg	  if test -z "$libdir" && test "$linkmode" = prog; then
6547c3c9db83Smrg	    func_fatal_error "only libraries may -dlpreopen a convenience library: \`$lib'"
6548c3c9db83Smrg	  fi
65493f6d0e1dSmrg	  case "$host" in
65503f6d0e1dSmrg	    # special handling for platforms with PE-DLLs.
65513f6d0e1dSmrg	    *cygwin* | *mingw* | *cegcc* )
65523f6d0e1dSmrg	      # Linker will automatically link against shared library if both
65533f6d0e1dSmrg	      # static and shared are present.  Therefore, ensure we extract
65543f6d0e1dSmrg	      # symbols from the import library if a shared library is present
65553f6d0e1dSmrg	      # (otherwise, the dlopen module name will be incorrect).  We do
65563f6d0e1dSmrg	      # this by putting the import library name into $newdlprefiles.
65573f6d0e1dSmrg	      # We recover the dlopen module name by 'saving' the la file
65583f6d0e1dSmrg	      # name in a special purpose variable, and (later) extracting the
65593f6d0e1dSmrg	      # dlname from the la file.
65603f6d0e1dSmrg	      if test -n "$dlname"; then
65613f6d0e1dSmrg	        func_tr_sh "$dir/$linklib"
65623f6d0e1dSmrg	        eval "libfile_$func_tr_sh_result=\$abs_ladir/\$laname"
65633f6d0e1dSmrg	        func_append newdlprefiles " $dir/$linklib"
65643f6d0e1dSmrg	      else
65653f6d0e1dSmrg	        func_append newdlprefiles " $dir/$old_library"
65663f6d0e1dSmrg	        # Keep a list of preopened convenience libraries to check
65673f6d0e1dSmrg	        # that they are being used correctly in the link pass.
65683f6d0e1dSmrg	        test -z "$libdir" && \
65693f6d0e1dSmrg	          func_append dlpreconveniencelibs " $dir/$old_library"
65703f6d0e1dSmrg	      fi
65713f6d0e1dSmrg	    ;;
65723f6d0e1dSmrg	    * )
65733f6d0e1dSmrg	      # Prefer using a static library (so that no silly _DYNAMIC symbols
65743f6d0e1dSmrg	      # are required to link).
65753f6d0e1dSmrg	      if test -n "$old_library"; then
65763f6d0e1dSmrg	        func_append newdlprefiles " $dir/$old_library"
65773f6d0e1dSmrg	        # Keep a list of preopened convenience libraries to check
65783f6d0e1dSmrg	        # that they are being used correctly in the link pass.
65793f6d0e1dSmrg	        test -z "$libdir" && \
65803f6d0e1dSmrg	          func_append dlpreconveniencelibs " $dir/$old_library"
65813f6d0e1dSmrg	      # Otherwise, use the dlname, so that lt_dlopen finds it.
65823f6d0e1dSmrg	      elif test -n "$dlname"; then
65833f6d0e1dSmrg	        func_append newdlprefiles " $dir/$dlname"
65843f6d0e1dSmrg	      else
65853f6d0e1dSmrg	        func_append newdlprefiles " $dir/$linklib"
65863f6d0e1dSmrg	      fi
65873f6d0e1dSmrg	    ;;
65883f6d0e1dSmrg	  esac
6589c3c9db83Smrg	fi # $pass = dlpreopen
6590c3c9db83Smrg
6591c3c9db83Smrg	if test -z "$libdir"; then
6592c3c9db83Smrg	  # Link the convenience library
6593c3c9db83Smrg	  if test "$linkmode" = lib; then
6594c3c9db83Smrg	    deplibs="$dir/$old_library $deplibs"
6595c3c9db83Smrg	  elif test "$linkmode,$pass" = "prog,link"; then
6596c3c9db83Smrg	    compile_deplibs="$dir/$old_library $compile_deplibs"
6597c3c9db83Smrg	    finalize_deplibs="$dir/$old_library $finalize_deplibs"
6598c3c9db83Smrg	  else
6599c3c9db83Smrg	    deplibs="$lib $deplibs" # used for prog,scan pass
6600c3c9db83Smrg	  fi
6601c3c9db83Smrg	  continue
6602c3c9db83Smrg	fi
6603c3c9db83Smrg
6604c3c9db83Smrg
6605c3c9db83Smrg	if test "$linkmode" = prog && test "$pass" != link; then
66063f6d0e1dSmrg	  func_append newlib_search_path " $ladir"
6607c3c9db83Smrg	  deplibs="$lib $deplibs"
6608c3c9db83Smrg
6609c3c9db83Smrg	  linkalldeplibs=no
6610c3c9db83Smrg	  if test "$link_all_deplibs" != no || test -z "$library_names" ||
6611c3c9db83Smrg	     test "$build_libtool_libs" = no; then
6612c3c9db83Smrg	    linkalldeplibs=yes
6613c3c9db83Smrg	  fi
6614c3c9db83Smrg
6615c3c9db83Smrg	  tmp_libs=
6616c3c9db83Smrg	  for deplib in $dependency_libs; do
6617c3c9db83Smrg	    case $deplib in
6618c3c9db83Smrg	    -L*) func_stripname '-L' '' "$deplib"
66193f6d0e1dSmrg	         func_resolve_sysroot "$func_stripname_result"
66203f6d0e1dSmrg	         func_append newlib_search_path " $func_resolve_sysroot_result"
6621c3c9db83Smrg		 ;;
6622c3c9db83Smrg	    esac
6623c3c9db83Smrg	    # Need to link against all dependency_libs?
6624c3c9db83Smrg	    if test "$linkalldeplibs" = yes; then
6625c3c9db83Smrg	      deplibs="$deplib $deplibs"
6626c3c9db83Smrg	    else
6627c3c9db83Smrg	      # Need to hardcode shared library paths
6628c3c9db83Smrg	      # or/and link against static libraries
6629c3c9db83Smrg	      newdependency_libs="$deplib $newdependency_libs"
6630c3c9db83Smrg	    fi
66313f6d0e1dSmrg	    if $opt_preserve_dup_deps ; then
6632c3c9db83Smrg	      case "$tmp_libs " in
66333f6d0e1dSmrg	      *" $deplib "*) func_append specialdeplibs " $deplib" ;;
6634c3c9db83Smrg	      esac
6635c3c9db83Smrg	    fi
66363f6d0e1dSmrg	    func_append tmp_libs " $deplib"
6637c3c9db83Smrg	  done # for deplib
6638c3c9db83Smrg	  continue
6639c3c9db83Smrg	fi # $linkmode = prog...
6640c3c9db83Smrg
6641c3c9db83Smrg	if test "$linkmode,$pass" = "prog,link"; then
6642c3c9db83Smrg	  if test -n "$library_names" &&
6643c3c9db83Smrg	     { { test "$prefer_static_libs" = no ||
6644c3c9db83Smrg	         test "$prefer_static_libs,$installed" = "built,yes"; } ||
6645c3c9db83Smrg	       test -z "$old_library"; }; then
6646c3c9db83Smrg	    # We need to hardcode the library path
6647c3c9db83Smrg	    if test -n "$shlibpath_var" && test -z "$avoidtemprpath" ; then
6648c3c9db83Smrg	      # Make sure the rpath contains only unique directories.
6649c3c9db83Smrg	      case "$temp_rpath:" in
6650c3c9db83Smrg	      *"$absdir:"*) ;;
66513f6d0e1dSmrg	      *) func_append temp_rpath "$absdir:" ;;
6652c3c9db83Smrg	      esac
6653c3c9db83Smrg	    fi
6654c3c9db83Smrg
6655c3c9db83Smrg	    # Hardcode the library path.
6656c3c9db83Smrg	    # Skip directories that are in the system default run-time
6657c3c9db83Smrg	    # search path.
6658c3c9db83Smrg	    case " $sys_lib_dlsearch_path " in
6659c3c9db83Smrg	    *" $absdir "*) ;;
6660c3c9db83Smrg	    *)
6661c3c9db83Smrg	      case "$compile_rpath " in
6662c3c9db83Smrg	      *" $absdir "*) ;;
66633f6d0e1dSmrg	      *) func_append compile_rpath " $absdir" ;;
6664c3c9db83Smrg	      esac
6665c3c9db83Smrg	      ;;
6666c3c9db83Smrg	    esac
6667c3c9db83Smrg	    case " $sys_lib_dlsearch_path " in
6668c3c9db83Smrg	    *" $libdir "*) ;;
6669c3c9db83Smrg	    *)
6670c3c9db83Smrg	      case "$finalize_rpath " in
6671c3c9db83Smrg	      *" $libdir "*) ;;
66723f6d0e1dSmrg	      *) func_append finalize_rpath " $libdir" ;;
6673c3c9db83Smrg	      esac
6674c3c9db83Smrg	      ;;
6675c3c9db83Smrg	    esac
6676c3c9db83Smrg	  fi # $linkmode,$pass = prog,link...
6677c3c9db83Smrg
6678c3c9db83Smrg	  if test "$alldeplibs" = yes &&
6679c3c9db83Smrg	     { test "$deplibs_check_method" = pass_all ||
6680c3c9db83Smrg	       { test "$build_libtool_libs" = yes &&
6681c3c9db83Smrg		 test -n "$library_names"; }; }; then
6682c3c9db83Smrg	    # We only need to search for static libraries
6683c3c9db83Smrg	    continue
6684c3c9db83Smrg	  fi
6685c3c9db83Smrg	fi
6686c3c9db83Smrg
6687c3c9db83Smrg	link_static=no # Whether the deplib will be linked statically
6688c3c9db83Smrg	use_static_libs=$prefer_static_libs
6689c3c9db83Smrg	if test "$use_static_libs" = built && test "$installed" = yes; then
6690c3c9db83Smrg	  use_static_libs=no
6691c3c9db83Smrg	fi
6692c3c9db83Smrg	if test -n "$library_names" &&
6693c3c9db83Smrg	   { test "$use_static_libs" = no || test -z "$old_library"; }; then
6694c3c9db83Smrg	  case $host in
6695c3c9db83Smrg	  *cygwin* | *mingw* | *cegcc*)
6696c3c9db83Smrg	      # No point in relinking DLLs because paths are not encoded
66973f6d0e1dSmrg	      func_append notinst_deplibs " $lib"
6698c3c9db83Smrg	      need_relink=no
6699c3c9db83Smrg	    ;;
6700c3c9db83Smrg	  *)
6701c3c9db83Smrg	    if test "$installed" = no; then
67023f6d0e1dSmrg	      func_append notinst_deplibs " $lib"
6703c3c9db83Smrg	      need_relink=yes
6704c3c9db83Smrg	    fi
6705c3c9db83Smrg	    ;;
6706c3c9db83Smrg	  esac
6707c3c9db83Smrg	  # This is a shared library
6708c3c9db83Smrg
6709c3c9db83Smrg	  # Warn about portability, can't link against -module's on some
6710c3c9db83Smrg	  # systems (darwin).  Don't bleat about dlopened modules though!
6711c3c9db83Smrg	  dlopenmodule=""
6712c3c9db83Smrg	  for dlpremoduletest in $dlprefiles; do
6713c3c9db83Smrg	    if test "X$dlpremoduletest" = "X$lib"; then
6714c3c9db83Smrg	      dlopenmodule="$dlpremoduletest"
6715c3c9db83Smrg	      break
6716c3c9db83Smrg	    fi
6717c3c9db83Smrg	  done
6718c3c9db83Smrg	  if test -z "$dlopenmodule" && test "$shouldnotlink" = yes && test "$pass" = link; then
67193f6d0e1dSmrg	    echo
6720c3c9db83Smrg	    if test "$linkmode" = prog; then
6721c3c9db83Smrg	      $ECHO "*** Warning: Linking the executable $output against the loadable module"
6722c3c9db83Smrg	    else
6723c3c9db83Smrg	      $ECHO "*** Warning: Linking the shared library $output against the loadable module"
6724c3c9db83Smrg	    fi
6725c3c9db83Smrg	    $ECHO "*** $linklib is not portable!"
6726c3c9db83Smrg	  fi
6727c3c9db83Smrg	  if test "$linkmode" = lib &&
6728c3c9db83Smrg	     test "$hardcode_into_libs" = yes; then
6729c3c9db83Smrg	    # Hardcode the library path.
6730c3c9db83Smrg	    # Skip directories that are in the system default run-time
6731c3c9db83Smrg	    # search path.
6732c3c9db83Smrg	    case " $sys_lib_dlsearch_path " in
6733c3c9db83Smrg	    *" $absdir "*) ;;
6734c3c9db83Smrg	    *)
6735c3c9db83Smrg	      case "$compile_rpath " in
6736c3c9db83Smrg	      *" $absdir "*) ;;
67373f6d0e1dSmrg	      *) func_append compile_rpath " $absdir" ;;
6738c3c9db83Smrg	      esac
6739c3c9db83Smrg	      ;;
6740c3c9db83Smrg	    esac
6741c3c9db83Smrg	    case " $sys_lib_dlsearch_path " in
6742c3c9db83Smrg	    *" $libdir "*) ;;
6743c3c9db83Smrg	    *)
6744c3c9db83Smrg	      case "$finalize_rpath " in
6745c3c9db83Smrg	      *" $libdir "*) ;;
67463f6d0e1dSmrg	      *) func_append finalize_rpath " $libdir" ;;
6747c3c9db83Smrg	      esac
6748c3c9db83Smrg	      ;;
6749c3c9db83Smrg	    esac
6750c3c9db83Smrg	  fi
6751c3c9db83Smrg
6752c3c9db83Smrg	  if test -n "$old_archive_from_expsyms_cmds"; then
6753c3c9db83Smrg	    # figure out the soname
6754c3c9db83Smrg	    set dummy $library_names
6755c3c9db83Smrg	    shift
6756c3c9db83Smrg	    realname="$1"
6757c3c9db83Smrg	    shift
6758c3c9db83Smrg	    libname=`eval "\\$ECHO \"$libname_spec\""`
6759c3c9db83Smrg	    # use dlname if we got it. it's perfectly good, no?
6760c3c9db83Smrg	    if test -n "$dlname"; then
6761c3c9db83Smrg	      soname="$dlname"
6762c3c9db83Smrg	    elif test -n "$soname_spec"; then
6763c3c9db83Smrg	      # bleh windows
6764c3c9db83Smrg	      case $host in
6765c3c9db83Smrg	      *cygwin* | mingw* | *cegcc*)
6766c3c9db83Smrg	        func_arith $current - $age
6767c3c9db83Smrg		major=$func_arith_result
6768c3c9db83Smrg		versuffix="-$major"
6769c3c9db83Smrg		;;
6770c3c9db83Smrg	      esac
6771c3c9db83Smrg	      eval soname=\"$soname_spec\"
6772c3c9db83Smrg	    else
6773c3c9db83Smrg	      soname="$realname"
6774c3c9db83Smrg	    fi
6775c3c9db83Smrg
6776c3c9db83Smrg	    # Make a new name for the extract_expsyms_cmds to use
6777c3c9db83Smrg	    soroot="$soname"
6778c3c9db83Smrg	    func_basename "$soroot"
6779c3c9db83Smrg	    soname="$func_basename_result"
6780c3c9db83Smrg	    func_stripname 'lib' '.dll' "$soname"
6781c3c9db83Smrg	    newlib=libimp-$func_stripname_result.a
6782c3c9db83Smrg
6783c3c9db83Smrg	    # If the library has no export list, then create one now
6784c3c9db83Smrg	    if test -f "$output_objdir/$soname-def"; then :
6785c3c9db83Smrg	    else
6786c3c9db83Smrg	      func_verbose "extracting exported symbol list from \`$soname'"
6787c3c9db83Smrg	      func_execute_cmds "$extract_expsyms_cmds" 'exit $?'
6788c3c9db83Smrg	    fi
6789c3c9db83Smrg
6790c3c9db83Smrg	    # Create $newlib
6791c3c9db83Smrg	    if test -f "$output_objdir/$newlib"; then :; else
6792c3c9db83Smrg	      func_verbose "generating import library for \`$soname'"
6793c3c9db83Smrg	      func_execute_cmds "$old_archive_from_expsyms_cmds" 'exit $?'
6794c3c9db83Smrg	    fi
6795c3c9db83Smrg	    # make sure the library variables are pointing to the new library
6796c3c9db83Smrg	    dir=$output_objdir
6797c3c9db83Smrg	    linklib=$newlib
6798c3c9db83Smrg	  fi # test -n "$old_archive_from_expsyms_cmds"
6799c3c9db83Smrg
68003f6d0e1dSmrg	  if test "$linkmode" = prog || test "$opt_mode" != relink; then
6801c3c9db83Smrg	    add_shlibpath=
6802c3c9db83Smrg	    add_dir=
6803c3c9db83Smrg	    add=
6804c3c9db83Smrg	    lib_linked=yes
6805c3c9db83Smrg	    case $hardcode_action in
6806c3c9db83Smrg	    immediate | unsupported)
6807c3c9db83Smrg	      if test "$hardcode_direct" = no; then
6808c3c9db83Smrg		add="$dir/$linklib"
6809c3c9db83Smrg		case $host in
6810c3c9db83Smrg		  *-*-sco3.2v5.0.[024]*) add_dir="-L$dir" ;;
6811c3c9db83Smrg		  *-*-sysv4*uw2*) add_dir="-L$dir" ;;
6812c3c9db83Smrg		  *-*-sysv5OpenUNIX* | *-*-sysv5UnixWare7.[01].[10]* | \
6813c3c9db83Smrg		    *-*-unixware7*) add_dir="-L$dir" ;;
6814c3c9db83Smrg		  *-*-darwin* )
6815c3c9db83Smrg		    # if the lib is a (non-dlopened) module then we can not
6816c3c9db83Smrg		    # link against it, someone is ignoring the earlier warnings
6817c3c9db83Smrg		    if /usr/bin/file -L $add 2> /dev/null |
6818c3c9db83Smrg			 $GREP ": [^:]* bundle" >/dev/null ; then
6819c3c9db83Smrg		      if test "X$dlopenmodule" != "X$lib"; then
6820c3c9db83Smrg			$ECHO "*** Warning: lib $linklib is a module, not a shared library"
6821c3c9db83Smrg			if test -z "$old_library" ; then
68223f6d0e1dSmrg			  echo
68233f6d0e1dSmrg			  echo "*** And there doesn't seem to be a static archive available"
68243f6d0e1dSmrg			  echo "*** The link will probably fail, sorry"
6825c3c9db83Smrg			else
6826c3c9db83Smrg			  add="$dir/$old_library"
6827c3c9db83Smrg			fi
6828c3c9db83Smrg		      elif test -n "$old_library"; then
6829c3c9db83Smrg			add="$dir/$old_library"
6830c3c9db83Smrg		      fi
6831c3c9db83Smrg		    fi
6832c3c9db83Smrg		esac
6833c3c9db83Smrg	      elif test "$hardcode_minus_L" = no; then
6834c3c9db83Smrg		case $host in
6835c3c9db83Smrg		*-*-sunos*) add_shlibpath="$dir" ;;
6836c3c9db83Smrg		esac
6837c3c9db83Smrg		add_dir="-L$dir"
6838c3c9db83Smrg		add="-l$name"
6839c3c9db83Smrg	      elif test "$hardcode_shlibpath_var" = no; then
6840c3c9db83Smrg		add_shlibpath="$dir"
6841c3c9db83Smrg		add="-l$name"
6842c3c9db83Smrg	      else
6843c3c9db83Smrg		lib_linked=no
6844c3c9db83Smrg	      fi
6845c3c9db83Smrg	      ;;
6846c3c9db83Smrg	    relink)
6847c3c9db83Smrg	      if test "$hardcode_direct" = yes &&
6848c3c9db83Smrg	         test "$hardcode_direct_absolute" = no; then
6849c3c9db83Smrg		add="$dir/$linklib"
6850c3c9db83Smrg	      elif test "$hardcode_minus_L" = yes; then
685195903e71Smrg		add_dir="-L$absdir"
6852c3c9db83Smrg		# Try looking first in the location we're being installed to.
6853c3c9db83Smrg		if test -n "$inst_prefix_dir"; then
6854c3c9db83Smrg		  case $libdir in
6855c3c9db83Smrg		    [\\/]*)
68563f6d0e1dSmrg		      func_append add_dir " -L$inst_prefix_dir$libdir"
6857c3c9db83Smrg		      ;;
6858c3c9db83Smrg		  esac
6859c3c9db83Smrg		fi
6860c3c9db83Smrg		add="-l$name"
6861c3c9db83Smrg	      elif test "$hardcode_shlibpath_var" = yes; then
6862c3c9db83Smrg		add_shlibpath="$dir"
6863c3c9db83Smrg		add="-l$name"
6864c3c9db83Smrg	      else
6865c3c9db83Smrg		lib_linked=no
6866c3c9db83Smrg	      fi
6867c3c9db83Smrg	      ;;
6868c3c9db83Smrg	    *) lib_linked=no ;;
6869c3c9db83Smrg	    esac
6870c3c9db83Smrg
6871c3c9db83Smrg	    if test "$lib_linked" != yes; then
6872c3c9db83Smrg	      func_fatal_configuration "unsupported hardcode properties"
6873c3c9db83Smrg	    fi
6874c3c9db83Smrg
6875c3c9db83Smrg	    if test -n "$add_shlibpath"; then
6876c3c9db83Smrg	      case :$compile_shlibpath: in
6877c3c9db83Smrg	      *":$add_shlibpath:"*) ;;
68783f6d0e1dSmrg	      *) func_append compile_shlibpath "$add_shlibpath:" ;;
6879c3c9db83Smrg	      esac
6880c3c9db83Smrg	    fi
6881c3c9db83Smrg	    if test "$linkmode" = prog; then
6882c3c9db83Smrg	      test -n "$add_dir" && compile_deplibs="$add_dir $compile_deplibs"
6883c3c9db83Smrg	      test -n "$add" && compile_deplibs="$add $compile_deplibs"
6884c3c9db83Smrg	    else
6885c3c9db83Smrg	      test -n "$add_dir" && deplibs="$add_dir $deplibs"
6886c3c9db83Smrg	      test -n "$add" && deplibs="$add $deplibs"
6887c3c9db83Smrg	      if test "$hardcode_direct" != yes &&
6888c3c9db83Smrg		 test "$hardcode_minus_L" != yes &&
6889c3c9db83Smrg		 test "$hardcode_shlibpath_var" = yes; then
6890c3c9db83Smrg		case :$finalize_shlibpath: in
6891c3c9db83Smrg		*":$libdir:"*) ;;
68923f6d0e1dSmrg		*) func_append finalize_shlibpath "$libdir:" ;;
6893c3c9db83Smrg		esac
6894c3c9db83Smrg	      fi
6895c3c9db83Smrg	    fi
6896c3c9db83Smrg	  fi
6897c3c9db83Smrg
68983f6d0e1dSmrg	  if test "$linkmode" = prog || test "$opt_mode" = relink; then
6899c3c9db83Smrg	    add_shlibpath=
6900c3c9db83Smrg	    add_dir=
6901c3c9db83Smrg	    add=
6902c3c9db83Smrg	    # Finalize command for both is simple: just hardcode it.
6903c3c9db83Smrg	    if test "$hardcode_direct" = yes &&
6904c3c9db83Smrg	       test "$hardcode_direct_absolute" = no; then
6905c3c9db83Smrg	      add="$libdir/$linklib"
6906c3c9db83Smrg	    elif test "$hardcode_minus_L" = yes; then
6907c3c9db83Smrg	      add_dir="-L$libdir"
6908c3c9db83Smrg	      add="-l$name"
6909c3c9db83Smrg	    elif test "$hardcode_shlibpath_var" = yes; then
6910c3c9db83Smrg	      case :$finalize_shlibpath: in
6911c3c9db83Smrg	      *":$libdir:"*) ;;
69123f6d0e1dSmrg	      *) func_append finalize_shlibpath "$libdir:" ;;
6913c3c9db83Smrg	      esac
6914c3c9db83Smrg	      add="-l$name"
6915c3c9db83Smrg	    elif test "$hardcode_automatic" = yes; then
6916c3c9db83Smrg	      if test -n "$inst_prefix_dir" &&
6917c3c9db83Smrg		 test -f "$inst_prefix_dir$libdir/$linklib" ; then
6918c3c9db83Smrg		add="$inst_prefix_dir$libdir/$linklib"
6919c3c9db83Smrg	      else
6920c3c9db83Smrg		add="$libdir/$linklib"
6921c3c9db83Smrg	      fi
6922c3c9db83Smrg	    else
6923c3c9db83Smrg	      # We cannot seem to hardcode it, guess we'll fake it.
6924c3c9db83Smrg	      add_dir="-L$libdir"
6925c3c9db83Smrg	      # Try looking first in the location we're being installed to.
6926c3c9db83Smrg	      if test -n "$inst_prefix_dir"; then
6927c3c9db83Smrg		case $libdir in
6928c3c9db83Smrg		  [\\/]*)
69293f6d0e1dSmrg		    func_append add_dir " -L$inst_prefix_dir$libdir"
6930c3c9db83Smrg		    ;;
6931c3c9db83Smrg		esac
6932c3c9db83Smrg	      fi
6933c3c9db83Smrg	      add="-l$name"
6934c3c9db83Smrg	    fi
6935c3c9db83Smrg
6936c3c9db83Smrg	    if test "$linkmode" = prog; then
6937c3c9db83Smrg	      test -n "$add_dir" && finalize_deplibs="$add_dir $finalize_deplibs"
6938c3c9db83Smrg	      test -n "$add" && finalize_deplibs="$add $finalize_deplibs"
6939c3c9db83Smrg	    else
6940c3c9db83Smrg	      test -n "$add_dir" && deplibs="$add_dir $deplibs"
6941c3c9db83Smrg	      test -n "$add" && deplibs="$add $deplibs"
6942c3c9db83Smrg	    fi
6943c3c9db83Smrg	  fi
6944c3c9db83Smrg	elif test "$linkmode" = prog; then
6945c3c9db83Smrg	  # Here we assume that one of hardcode_direct or hardcode_minus_L
6946c3c9db83Smrg	  # is not unsupported.  This is valid on all known static and
6947c3c9db83Smrg	  # shared platforms.
6948c3c9db83Smrg	  if test "$hardcode_direct" != unsupported; then
6949c3c9db83Smrg	    test -n "$old_library" && linklib="$old_library"
6950c3c9db83Smrg	    compile_deplibs="$dir/$linklib $compile_deplibs"
6951c3c9db83Smrg	    finalize_deplibs="$dir/$linklib $finalize_deplibs"
6952c3c9db83Smrg	  else
6953c3c9db83Smrg	    compile_deplibs="-l$name -L$dir $compile_deplibs"
6954c3c9db83Smrg	    finalize_deplibs="-l$name -L$dir $finalize_deplibs"
6955c3c9db83Smrg	  fi
6956c3c9db83Smrg	elif test "$build_libtool_libs" = yes; then
6957c3c9db83Smrg	  # Not a shared library
6958c3c9db83Smrg	  if test "$deplibs_check_method" != pass_all; then
6959c3c9db83Smrg	    # We're trying link a shared library against a static one
6960c3c9db83Smrg	    # but the system doesn't support it.
6961c3c9db83Smrg
6962c3c9db83Smrg	    # Just print a warning and add the library to dependency_libs so
6963c3c9db83Smrg	    # that the program can be linked against the static library.
69643f6d0e1dSmrg	    echo
6965c3c9db83Smrg	    $ECHO "*** Warning: This system can not link to static lib archive $lib."
69663f6d0e1dSmrg	    echo "*** I have the capability to make that library automatically link in when"
69673f6d0e1dSmrg	    echo "*** you link to this library.  But I can only do this if you have a"
69683f6d0e1dSmrg	    echo "*** shared version of the library, which you do not appear to have."
6969c3c9db83Smrg	    if test "$module" = yes; then
69703f6d0e1dSmrg	      echo "*** But as you try to build a module library, libtool will still create "
69713f6d0e1dSmrg	      echo "*** a static module, that should work as long as the dlopening application"
69723f6d0e1dSmrg	      echo "*** is linked with the -dlopen flag to resolve symbols at runtime."
6973c3c9db83Smrg	      if test -z "$global_symbol_pipe"; then
69743f6d0e1dSmrg		echo
69753f6d0e1dSmrg		echo "*** However, this would only work if libtool was able to extract symbol"
69763f6d0e1dSmrg		echo "*** lists from a program, using \`nm' or equivalent, but libtool could"
69773f6d0e1dSmrg		echo "*** not find such a program.  So, this module is probably useless."
69783f6d0e1dSmrg		echo "*** \`nm' from GNU binutils and a full rebuild may help."
6979c3c9db83Smrg	      fi
6980c3c9db83Smrg	      if test "$build_old_libs" = no; then
6981c3c9db83Smrg		build_libtool_libs=module
6982c3c9db83Smrg		build_old_libs=yes
6983c3c9db83Smrg	      else
6984c3c9db83Smrg		build_libtool_libs=no
6985c3c9db83Smrg	      fi
6986c3c9db83Smrg	    fi
6987c3c9db83Smrg	  else
6988c3c9db83Smrg	    deplibs="$dir/$old_library $deplibs"
6989c3c9db83Smrg	    link_static=yes
6990c3c9db83Smrg	  fi
6991c3c9db83Smrg	fi # link shared/static library?
6992c3c9db83Smrg
6993c3c9db83Smrg	if test "$linkmode" = lib; then
6994c3c9db83Smrg	  if test -n "$dependency_libs" &&
6995c3c9db83Smrg	     { test "$hardcode_into_libs" != yes ||
6996c3c9db83Smrg	       test "$build_old_libs" = yes ||
6997c3c9db83Smrg	       test "$link_static" = yes; }; then
6998c3c9db83Smrg	    # Extract -R from dependency_libs
6999c3c9db83Smrg	    temp_deplibs=
7000c3c9db83Smrg	    for libdir in $dependency_libs; do
7001c3c9db83Smrg	      case $libdir in
7002c3c9db83Smrg	      -R*) func_stripname '-R' '' "$libdir"
7003c3c9db83Smrg	           temp_xrpath=$func_stripname_result
7004c3c9db83Smrg		   case " $xrpath " in
7005c3c9db83Smrg		   *" $temp_xrpath "*) ;;
70063f6d0e1dSmrg		   *) func_append xrpath " $temp_xrpath";;
7007c3c9db83Smrg		   esac;;
70083f6d0e1dSmrg	      *) func_append temp_deplibs " $libdir";;
7009c3c9db83Smrg	      esac
7010c3c9db83Smrg	    done
7011c3c9db83Smrg	    dependency_libs="$temp_deplibs"
7012c3c9db83Smrg	  fi
7013c3c9db83Smrg
70143f6d0e1dSmrg	  func_append newlib_search_path " $absdir"
7015c3c9db83Smrg	  # Link against this library
7016c3c9db83Smrg	  test "$link_static" = no && newdependency_libs="$abs_ladir/$laname $newdependency_libs"
7017c3c9db83Smrg	  # ... and its dependency_libs
7018c3c9db83Smrg	  tmp_libs=
7019c3c9db83Smrg	  for deplib in $dependency_libs; do
7020c3c9db83Smrg	    newdependency_libs="$deplib $newdependency_libs"
70213f6d0e1dSmrg	    case $deplib in
70223f6d0e1dSmrg              -L*) func_stripname '-L' '' "$deplib"
70233f6d0e1dSmrg                   func_resolve_sysroot "$func_stripname_result";;
70243f6d0e1dSmrg              *) func_resolve_sysroot "$deplib" ;;
70253f6d0e1dSmrg            esac
70263f6d0e1dSmrg	    if $opt_preserve_dup_deps ; then
7027c3c9db83Smrg	      case "$tmp_libs " in
70283f6d0e1dSmrg	      *" $func_resolve_sysroot_result "*)
70293f6d0e1dSmrg                func_append specialdeplibs " $func_resolve_sysroot_result" ;;
7030c3c9db83Smrg	      esac
7031c3c9db83Smrg	    fi
70323f6d0e1dSmrg	    func_append tmp_libs " $func_resolve_sysroot_result"
7033c3c9db83Smrg	  done
7034c3c9db83Smrg
7035c3c9db83Smrg	  if test "$link_all_deplibs" != no; then
7036c3c9db83Smrg	    # Add the search paths of all dependency libraries
7037c3c9db83Smrg	    for deplib in $dependency_libs; do
70383f6d0e1dSmrg	      path=
7039c3c9db83Smrg	      case $deplib in
7040c3c9db83Smrg	      -L*) path="$deplib" ;;
7041c3c9db83Smrg	      *.la)
70423f6d0e1dSmrg	        func_resolve_sysroot "$deplib"
70433f6d0e1dSmrg	        deplib=$func_resolve_sysroot_result
7044c3c9db83Smrg	        func_dirname "$deplib" "" "."
70453f6d0e1dSmrg		dir=$func_dirname_result
7046c3c9db83Smrg		# We need an absolute path.
7047c3c9db83Smrg		case $dir in
7048c3c9db83Smrg		[\\/]* | [A-Za-z]:[\\/]*) absdir="$dir" ;;
7049c3c9db83Smrg		*)
7050c3c9db83Smrg		  absdir=`cd "$dir" && pwd`
7051c3c9db83Smrg		  if test -z "$absdir"; then
7052c3c9db83Smrg		    func_warning "cannot determine absolute directory name of \`$dir'"
7053c3c9db83Smrg		    absdir="$dir"
7054c3c9db83Smrg		  fi
7055c3c9db83Smrg		  ;;
7056c3c9db83Smrg		esac
7057c3c9db83Smrg		if $GREP "^installed=no" $deplib > /dev/null; then
7058c3c9db83Smrg		case $host in
7059c3c9db83Smrg		*-*-darwin*)
7060c3c9db83Smrg		  depdepl=
7061c3c9db83Smrg		  eval deplibrary_names=`${SED} -n -e 's/^library_names=\(.*\)$/\1/p' $deplib`
7062c3c9db83Smrg		  if test -n "$deplibrary_names" ; then
7063c3c9db83Smrg		    for tmp in $deplibrary_names ; do
7064c3c9db83Smrg		      depdepl=$tmp
7065c3c9db83Smrg		    done
7066c3c9db83Smrg		    if test -f "$absdir/$objdir/$depdepl" ; then
7067c3c9db83Smrg		      depdepl="$absdir/$objdir/$depdepl"
7068c3c9db83Smrg		      darwin_install_name=`${OTOOL} -L $depdepl | awk '{if (NR == 2) {print $1;exit}}'`
7069c3c9db83Smrg                      if test -z "$darwin_install_name"; then
7070c3c9db83Smrg                          darwin_install_name=`${OTOOL64} -L $depdepl  | awk '{if (NR == 2) {print $1;exit}}'`
7071c3c9db83Smrg                      fi
70723f6d0e1dSmrg		      func_append compiler_flags " ${wl}-dylib_file ${wl}${darwin_install_name}:${depdepl}"
70733f6d0e1dSmrg		      func_append linker_flags " -dylib_file ${darwin_install_name}:${depdepl}"
7074c3c9db83Smrg		      path=
7075c3c9db83Smrg		    fi
7076c3c9db83Smrg		  fi
7077c3c9db83Smrg		  ;;
7078c3c9db83Smrg		*)
7079c3c9db83Smrg		  path="-L$absdir/$objdir"
7080c3c9db83Smrg		  ;;
7081c3c9db83Smrg		esac
7082c3c9db83Smrg		else
7083c3c9db83Smrg		  eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $deplib`
7084c3c9db83Smrg		  test -z "$libdir" && \
7085c3c9db83Smrg		    func_fatal_error "\`$deplib' is not a valid libtool archive"
7086c3c9db83Smrg		  test "$absdir" != "$libdir" && \
7087c3c9db83Smrg		    func_warning "\`$deplib' seems to be moved"
7088c3c9db83Smrg
7089c3c9db83Smrg		  path="-L$absdir"
7090c3c9db83Smrg		fi
7091c3c9db83Smrg		;;
7092c3c9db83Smrg	      esac
7093c3c9db83Smrg	      case " $deplibs " in
7094c3c9db83Smrg	      *" $path "*) ;;
7095c3c9db83Smrg	      *) deplibs="$path $deplibs" ;;
7096c3c9db83Smrg	      esac
7097c3c9db83Smrg	    done
7098c3c9db83Smrg	  fi # link_all_deplibs != no
7099c3c9db83Smrg	fi # linkmode = lib
7100c3c9db83Smrg      done # for deplib in $libs
7101c3c9db83Smrg      if test "$pass" = link; then
7102c3c9db83Smrg	if test "$linkmode" = "prog"; then
7103c3c9db83Smrg	  compile_deplibs="$new_inherited_linker_flags $compile_deplibs"
7104c3c9db83Smrg	  finalize_deplibs="$new_inherited_linker_flags $finalize_deplibs"
7105c3c9db83Smrg	else
71063f6d0e1dSmrg	  compiler_flags="$compiler_flags "`$ECHO " $new_inherited_linker_flags" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'`
7107c3c9db83Smrg	fi
7108c3c9db83Smrg      fi
7109c3c9db83Smrg      dependency_libs="$newdependency_libs"
7110c3c9db83Smrg      if test "$pass" = dlpreopen; then
7111c3c9db83Smrg	# Link the dlpreopened libraries before other libraries
7112c3c9db83Smrg	for deplib in $save_deplibs; do
7113c3c9db83Smrg	  deplibs="$deplib $deplibs"
7114c3c9db83Smrg	done
7115c3c9db83Smrg      fi
7116c3c9db83Smrg      if test "$pass" != dlopen; then
7117c3c9db83Smrg	if test "$pass" != conv; then
7118c3c9db83Smrg	  # Make sure lib_search_path contains only unique directories.
7119c3c9db83Smrg	  lib_search_path=
7120c3c9db83Smrg	  for dir in $newlib_search_path; do
7121c3c9db83Smrg	    case "$lib_search_path " in
7122c3c9db83Smrg	    *" $dir "*) ;;
71233f6d0e1dSmrg	    *) func_append lib_search_path " $dir" ;;
7124c3c9db83Smrg	    esac
7125c3c9db83Smrg	  done
7126c3c9db83Smrg	  newlib_search_path=
7127c3c9db83Smrg	fi
7128c3c9db83Smrg
7129c3c9db83Smrg	if test "$linkmode,$pass" != "prog,link"; then
7130c3c9db83Smrg	  vars="deplibs"
7131c3c9db83Smrg	else
7132c3c9db83Smrg	  vars="compile_deplibs finalize_deplibs"
7133c3c9db83Smrg	fi
7134c3c9db83Smrg	for var in $vars dependency_libs; do
7135c3c9db83Smrg	  # Add libraries to $var in reverse order
7136c3c9db83Smrg	  eval tmp_libs=\"\$$var\"
7137c3c9db83Smrg	  new_libs=
7138c3c9db83Smrg	  for deplib in $tmp_libs; do
7139c3c9db83Smrg	    # FIXME: Pedantically, this is the right thing to do, so
7140c3c9db83Smrg	    #        that some nasty dependency loop isn't accidentally
7141c3c9db83Smrg	    #        broken:
7142c3c9db83Smrg	    #new_libs="$deplib $new_libs"
7143c3c9db83Smrg	    # Pragmatically, this seems to cause very few problems in
7144c3c9db83Smrg	    # practice:
7145c3c9db83Smrg	    case $deplib in
7146c3c9db83Smrg	    -L*) new_libs="$deplib $new_libs" ;;
7147c3c9db83Smrg	    -R*) ;;
7148c3c9db83Smrg	    *)
7149c3c9db83Smrg	      # And here is the reason: when a library appears more
7150c3c9db83Smrg	      # than once as an explicit dependence of a library, or
7151c3c9db83Smrg	      # is implicitly linked in more than once by the
7152c3c9db83Smrg	      # compiler, it is considered special, and multiple
7153c3c9db83Smrg	      # occurrences thereof are not removed.  Compare this
7154c3c9db83Smrg	      # with having the same library being listed as a
7155c3c9db83Smrg	      # dependency of multiple other libraries: in this case,
7156c3c9db83Smrg	      # we know (pedantically, we assume) the library does not
7157c3c9db83Smrg	      # need to be listed more than once, so we keep only the
7158c3c9db83Smrg	      # last copy.  This is not always right, but it is rare
7159c3c9db83Smrg	      # enough that we require users that really mean to play
7160c3c9db83Smrg	      # such unportable linking tricks to link the library
7161c3c9db83Smrg	      # using -Wl,-lname, so that libtool does not consider it
7162c3c9db83Smrg	      # for duplicate removal.
7163c3c9db83Smrg	      case " $specialdeplibs " in
7164c3c9db83Smrg	      *" $deplib "*) new_libs="$deplib $new_libs" ;;
7165c3c9db83Smrg	      *)
7166c3c9db83Smrg		case " $new_libs " in
7167c3c9db83Smrg		*" $deplib "*) ;;
7168c3c9db83Smrg		*) new_libs="$deplib $new_libs" ;;
7169c3c9db83Smrg		esac
7170c3c9db83Smrg		;;
7171c3c9db83Smrg	      esac
7172c3c9db83Smrg	      ;;
7173c3c9db83Smrg	    esac
7174c3c9db83Smrg	  done
7175c3c9db83Smrg	  tmp_libs=
7176c3c9db83Smrg	  for deplib in $new_libs; do
7177c3c9db83Smrg	    case $deplib in
7178c3c9db83Smrg	    -L*)
7179c3c9db83Smrg	      case " $tmp_libs " in
7180c3c9db83Smrg	      *" $deplib "*) ;;
71813f6d0e1dSmrg	      *) func_append tmp_libs " $deplib" ;;
7182c3c9db83Smrg	      esac
7183c3c9db83Smrg	      ;;
71843f6d0e1dSmrg	    *) func_append tmp_libs " $deplib" ;;
7185c3c9db83Smrg	    esac
7186c3c9db83Smrg	  done
7187c3c9db83Smrg	  eval $var=\"$tmp_libs\"
7188c3c9db83Smrg	done # for var
7189c3c9db83Smrg      fi
7190c3c9db83Smrg      # Last step: remove runtime libs from dependency_libs
7191c3c9db83Smrg      # (they stay in deplibs)
7192c3c9db83Smrg      tmp_libs=
7193c3c9db83Smrg      for i in $dependency_libs ; do
7194c3c9db83Smrg	case " $predeps $postdeps $compiler_lib_search_path " in
7195c3c9db83Smrg	*" $i "*)
7196c3c9db83Smrg	  i=""
7197c3c9db83Smrg	  ;;
7198c3c9db83Smrg	esac
7199c3c9db83Smrg	if test -n "$i" ; then
72003f6d0e1dSmrg	  func_append tmp_libs " $i"
7201c3c9db83Smrg	fi
7202c3c9db83Smrg      done
7203c3c9db83Smrg      dependency_libs=$tmp_libs
7204c3c9db83Smrg    done # for pass
7205c3c9db83Smrg    if test "$linkmode" = prog; then
7206c3c9db83Smrg      dlfiles="$newdlfiles"
7207c3c9db83Smrg    fi
7208c3c9db83Smrg    if test "$linkmode" = prog || test "$linkmode" = lib; then
7209c3c9db83Smrg      dlprefiles="$newdlprefiles"
7210c3c9db83Smrg    fi
7211c3c9db83Smrg
7212c3c9db83Smrg    case $linkmode in
7213c3c9db83Smrg    oldlib)
7214c3c9db83Smrg      if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then
7215c3c9db83Smrg	func_warning "\`-dlopen' is ignored for archives"
7216c3c9db83Smrg      fi
7217c3c9db83Smrg
7218c3c9db83Smrg      case " $deplibs" in
7219c3c9db83Smrg      *\ -l* | *\ -L*)
7220c3c9db83Smrg	func_warning "\`-l' and \`-L' are ignored for archives" ;;
7221c3c9db83Smrg      esac
7222c3c9db83Smrg
7223c3c9db83Smrg      test -n "$rpath" && \
7224c3c9db83Smrg	func_warning "\`-rpath' is ignored for archives"
7225c3c9db83Smrg
7226c3c9db83Smrg      test -n "$xrpath" && \
7227c3c9db83Smrg	func_warning "\`-R' is ignored for archives"
7228c3c9db83Smrg
7229c3c9db83Smrg      test -n "$vinfo" && \
7230c3c9db83Smrg	func_warning "\`-version-info/-version-number' is ignored for archives"
7231c3c9db83Smrg
7232c3c9db83Smrg      test -n "$release" && \
7233c3c9db83Smrg	func_warning "\`-release' is ignored for archives"
7234c3c9db83Smrg
7235c3c9db83Smrg      test -n "$export_symbols$export_symbols_regex" && \
7236c3c9db83Smrg	func_warning "\`-export-symbols' is ignored for archives"
7237c3c9db83Smrg
7238c3c9db83Smrg      # Now set the variables for building old libraries.
7239c3c9db83Smrg      build_libtool_libs=no
7240c3c9db83Smrg      oldlibs="$output"
72413f6d0e1dSmrg      func_append objs "$old_deplibs"
7242c3c9db83Smrg      ;;
7243c3c9db83Smrg
7244c3c9db83Smrg    lib)
7245c3c9db83Smrg      # Make sure we only generate libraries of the form `libNAME.la'.
7246c3c9db83Smrg      case $outputname in
7247c3c9db83Smrg      lib*)
7248c3c9db83Smrg	func_stripname 'lib' '.la' "$outputname"
7249c3c9db83Smrg	name=$func_stripname_result
7250c3c9db83Smrg	eval shared_ext=\"$shrext_cmds\"
7251c3c9db83Smrg	eval libname=\"$libname_spec\"
7252c3c9db83Smrg	;;
7253c3c9db83Smrg      *)
7254c3c9db83Smrg	test "$module" = no && \
7255c3c9db83Smrg	  func_fatal_help "libtool library \`$output' must begin with \`lib'"
7256c3c9db83Smrg
7257c3c9db83Smrg	if test "$need_lib_prefix" != no; then
7258c3c9db83Smrg	  # Add the "lib" prefix for modules if required
7259c3c9db83Smrg	  func_stripname '' '.la' "$outputname"
7260c3c9db83Smrg	  name=$func_stripname_result
7261c3c9db83Smrg	  eval shared_ext=\"$shrext_cmds\"
7262c3c9db83Smrg	  eval libname=\"$libname_spec\"
7263c3c9db83Smrg	else
7264c3c9db83Smrg	  func_stripname '' '.la' "$outputname"
7265c3c9db83Smrg	  libname=$func_stripname_result
7266c3c9db83Smrg	fi
7267c3c9db83Smrg	;;
7268c3c9db83Smrg      esac
7269c3c9db83Smrg
7270c3c9db83Smrg      if test -n "$objs"; then
7271c3c9db83Smrg	if test "$deplibs_check_method" != pass_all; then
7272c3c9db83Smrg	  func_fatal_error "cannot build libtool library \`$output' from non-libtool objects on this host:$objs"
7273c3c9db83Smrg	else
72743f6d0e1dSmrg	  echo
7275c3c9db83Smrg	  $ECHO "*** Warning: Linking the shared library $output against the non-libtool"
7276c3c9db83Smrg	  $ECHO "*** objects $objs is not portable!"
72773f6d0e1dSmrg	  func_append libobjs " $objs"
7278c3c9db83Smrg	fi
7279c3c9db83Smrg      fi
7280c3c9db83Smrg
7281c3c9db83Smrg      test "$dlself" != no && \
7282c3c9db83Smrg	func_warning "\`-dlopen self' is ignored for libtool libraries"
7283c3c9db83Smrg
7284c3c9db83Smrg      set dummy $rpath
7285c3c9db83Smrg      shift
7286c3c9db83Smrg      test "$#" -gt 1 && \
7287c3c9db83Smrg	func_warning "ignoring multiple \`-rpath's for a libtool library"
7288c3c9db83Smrg
7289c3c9db83Smrg      install_libdir="$1"
7290c3c9db83Smrg
7291c3c9db83Smrg      oldlibs=
7292c3c9db83Smrg      if test -z "$rpath"; then
7293c3c9db83Smrg	if test "$build_libtool_libs" = yes; then
7294c3c9db83Smrg	  # Building a libtool convenience library.
7295c3c9db83Smrg	  # Some compilers have problems with a `.al' extension so
7296c3c9db83Smrg	  # convenience libraries should have the same extension an
7297c3c9db83Smrg	  # archive normally would.
7298c3c9db83Smrg	  oldlibs="$output_objdir/$libname.$libext $oldlibs"
7299c3c9db83Smrg	  build_libtool_libs=convenience
7300c3c9db83Smrg	  build_old_libs=yes
7301c3c9db83Smrg	fi
7302c3c9db83Smrg
7303c3c9db83Smrg	test -n "$vinfo" && \
7304c3c9db83Smrg	  func_warning "\`-version-info/-version-number' is ignored for convenience libraries"
7305c3c9db83Smrg
7306c3c9db83Smrg	test -n "$release" && \
7307c3c9db83Smrg	  func_warning "\`-release' is ignored for convenience libraries"
7308c3c9db83Smrg      else
7309c3c9db83Smrg
7310c3c9db83Smrg	# Parse the version information argument.
7311c3c9db83Smrg	save_ifs="$IFS"; IFS=':'
7312c3c9db83Smrg	set dummy $vinfo 0 0 0
7313c3c9db83Smrg	shift
7314c3c9db83Smrg	IFS="$save_ifs"
7315c3c9db83Smrg
7316c3c9db83Smrg	test -n "$7" && \
7317c3c9db83Smrg	  func_fatal_help "too many parameters to \`-version-info'"
7318c3c9db83Smrg
7319c3c9db83Smrg	# convert absolute version numbers to libtool ages
7320c3c9db83Smrg	# this retains compatibility with .la files and attempts
7321c3c9db83Smrg	# to make the code below a bit more comprehensible
7322c3c9db83Smrg
7323c3c9db83Smrg	case $vinfo_number in
7324c3c9db83Smrg	yes)
7325c3c9db83Smrg	  number_major="$1"
7326c3c9db83Smrg	  number_minor="$2"
7327c3c9db83Smrg	  number_revision="$3"
7328c3c9db83Smrg	  #
7329c3c9db83Smrg	  # There are really only two kinds -- those that
7330c3c9db83Smrg	  # use the current revision as the major version
7331c3c9db83Smrg	  # and those that subtract age and use age as
7332c3c9db83Smrg	  # a minor version.  But, then there is irix
7333c3c9db83Smrg	  # which has an extra 1 added just for fun
7334c3c9db83Smrg	  #
7335c3c9db83Smrg	  case $version_type in
733695903e71Smrg	  # correct linux to gnu/linux during the next big refactor
7337c3c9db83Smrg	  darwin|linux|osf|windows|none)
7338c3c9db83Smrg	    func_arith $number_major + $number_minor
7339c3c9db83Smrg	    current=$func_arith_result
7340c3c9db83Smrg	    age="$number_minor"
7341c3c9db83Smrg	    revision="$number_revision"
7342c3c9db83Smrg	    ;;
73433f6d0e1dSmrg	  freebsd-aout|freebsd-elf|qnx|sunos)
7344c3c9db83Smrg	    current="$number_major"
7345c3c9db83Smrg	    revision="$number_minor"
7346c3c9db83Smrg	    age="0"
7347c3c9db83Smrg	    ;;
7348c3c9db83Smrg	  irix|nonstopux)
7349c3c9db83Smrg	    func_arith $number_major + $number_minor
7350c3c9db83Smrg	    current=$func_arith_result
7351c3c9db83Smrg	    age="$number_minor"
7352c3c9db83Smrg	    revision="$number_minor"
7353c3c9db83Smrg	    lt_irix_increment=no
7354c3c9db83Smrg	    ;;
735595903e71Smrg	  *)
735695903e71Smrg	    func_fatal_configuration "$modename: unknown library version type \`$version_type'"
735795903e71Smrg	    ;;
7358c3c9db83Smrg	  esac
7359c3c9db83Smrg	  ;;
7360c3c9db83Smrg	no)
7361c3c9db83Smrg	  current="$1"
7362c3c9db83Smrg	  revision="$2"
7363c3c9db83Smrg	  age="$3"
7364c3c9db83Smrg	  ;;
7365c3c9db83Smrg	esac
7366c3c9db83Smrg
7367c3c9db83Smrg	# Check that each of the things are valid numbers.
7368c3c9db83Smrg	case $current in
7369c3c9db83Smrg	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]) ;;
7370c3c9db83Smrg	*)
7371c3c9db83Smrg	  func_error "CURRENT \`$current' must be a nonnegative integer"
7372c3c9db83Smrg	  func_fatal_error "\`$vinfo' is not valid version information"
7373c3c9db83Smrg	  ;;
7374c3c9db83Smrg	esac
7375c3c9db83Smrg
7376c3c9db83Smrg	case $revision in
7377c3c9db83Smrg	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]) ;;
7378c3c9db83Smrg	*)
7379c3c9db83Smrg	  func_error "REVISION \`$revision' must be a nonnegative integer"
7380c3c9db83Smrg	  func_fatal_error "\`$vinfo' is not valid version information"
7381c3c9db83Smrg	  ;;
7382c3c9db83Smrg	esac
7383c3c9db83Smrg
7384c3c9db83Smrg	case $age in
7385c3c9db83Smrg	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]) ;;
7386c3c9db83Smrg	*)
7387c3c9db83Smrg	  func_error "AGE \`$age' must be a nonnegative integer"
7388c3c9db83Smrg	  func_fatal_error "\`$vinfo' is not valid version information"
7389c3c9db83Smrg	  ;;
7390c3c9db83Smrg	esac
7391c3c9db83Smrg
7392c3c9db83Smrg	if test "$age" -gt "$current"; then
7393c3c9db83Smrg	  func_error "AGE \`$age' is greater than the current interface number \`$current'"
7394c3c9db83Smrg	  func_fatal_error "\`$vinfo' is not valid version information"
7395c3c9db83Smrg	fi
7396c3c9db83Smrg
7397c3c9db83Smrg	# Calculate the version variables.
7398c3c9db83Smrg	major=
7399c3c9db83Smrg	versuffix=
7400c3c9db83Smrg	verstring=
7401c3c9db83Smrg	case $version_type in
7402c3c9db83Smrg	none) ;;
7403c3c9db83Smrg
7404c3c9db83Smrg	darwin)
7405c3c9db83Smrg	  # Like Linux, but with the current version available in
7406c3c9db83Smrg	  # verstring for coding it into the library header
7407c3c9db83Smrg	  func_arith $current - $age
7408c3c9db83Smrg	  major=.$func_arith_result
7409c3c9db83Smrg	  versuffix="$major.$age.$revision"
7410c3c9db83Smrg	  # Darwin ld doesn't like 0 for these options...
7411c3c9db83Smrg	  func_arith $current + 1
7412c3c9db83Smrg	  minor_current=$func_arith_result
7413c3c9db83Smrg	  xlcverstring="${wl}-compatibility_version ${wl}$minor_current ${wl}-current_version ${wl}$minor_current.$revision"
7414c3c9db83Smrg	  verstring="-compatibility_version $minor_current -current_version $minor_current.$revision"
7415c3c9db83Smrg	  ;;
7416c3c9db83Smrg
7417c3c9db83Smrg	freebsd-aout)
7418c3c9db83Smrg	  major=".$current"
7419c3c9db83Smrg	  versuffix=".$current.$revision";
7420c3c9db83Smrg	  ;;
7421c3c9db83Smrg
7422c3c9db83Smrg	freebsd-elf)
7423c3c9db83Smrg	  major=".$current"
7424c3c9db83Smrg	  versuffix=".$current"
7425c3c9db83Smrg	  ;;
7426c3c9db83Smrg
7427c3c9db83Smrg	irix | nonstopux)
7428c3c9db83Smrg	  if test "X$lt_irix_increment" = "Xno"; then
7429c3c9db83Smrg	    func_arith $current - $age
7430c3c9db83Smrg	  else
7431c3c9db83Smrg	    func_arith $current - $age + 1
7432c3c9db83Smrg	  fi
7433c3c9db83Smrg	  major=$func_arith_result
7434c3c9db83Smrg
7435c3c9db83Smrg	  case $version_type in
7436c3c9db83Smrg	    nonstopux) verstring_prefix=nonstopux ;;
7437c3c9db83Smrg	    *)         verstring_prefix=sgi ;;
7438c3c9db83Smrg	  esac
7439c3c9db83Smrg	  verstring="$verstring_prefix$major.$revision"
7440c3c9db83Smrg
7441c3c9db83Smrg	  # Add in all the interfaces that we are compatible with.
7442c3c9db83Smrg	  loop=$revision
7443c3c9db83Smrg	  while test "$loop" -ne 0; do
7444c3c9db83Smrg	    func_arith $revision - $loop
7445c3c9db83Smrg	    iface=$func_arith_result
7446c3c9db83Smrg	    func_arith $loop - 1
7447c3c9db83Smrg	    loop=$func_arith_result
7448c3c9db83Smrg	    verstring="$verstring_prefix$major.$iface:$verstring"
7449c3c9db83Smrg	  done
7450c3c9db83Smrg
7451c3c9db83Smrg	  # Before this point, $major must not contain `.'.
7452c3c9db83Smrg	  major=.$major
7453c3c9db83Smrg	  versuffix="$major.$revision"
7454c3c9db83Smrg	  ;;
7455c3c9db83Smrg
745695903e71Smrg	linux) # correct to gnu/linux during the next big refactor
7457c3c9db83Smrg	  func_arith $current - $age
7458c3c9db83Smrg	  major=.$func_arith_result
7459c3c9db83Smrg	  versuffix="$major.$age.$revision"
7460c3c9db83Smrg	  ;;
7461c3c9db83Smrg
7462c3c9db83Smrg	osf)
7463c3c9db83Smrg	  func_arith $current - $age
7464c3c9db83Smrg	  major=.$func_arith_result
7465c3c9db83Smrg	  versuffix=".$current.$age.$revision"
7466c3c9db83Smrg	  verstring="$current.$age.$revision"
7467c3c9db83Smrg
7468c3c9db83Smrg	  # Add in all the interfaces that we are compatible with.
7469c3c9db83Smrg	  loop=$age
7470c3c9db83Smrg	  while test "$loop" -ne 0; do
7471c3c9db83Smrg	    func_arith $current - $loop
7472c3c9db83Smrg	    iface=$func_arith_result
7473c3c9db83Smrg	    func_arith $loop - 1
7474c3c9db83Smrg	    loop=$func_arith_result
7475c3c9db83Smrg	    verstring="$verstring:${iface}.0"
7476c3c9db83Smrg	  done
7477c3c9db83Smrg
7478c3c9db83Smrg	  # Make executables depend on our current version.
74793f6d0e1dSmrg	  func_append verstring ":${current}.0"
7480c3c9db83Smrg	  ;;
7481c3c9db83Smrg
7482c3c9db83Smrg	qnx)
7483c3c9db83Smrg	  major=".$current"
7484c3c9db83Smrg	  versuffix=".$current"
7485c3c9db83Smrg	  ;;
7486c3c9db83Smrg
7487c3c9db83Smrg	sunos)
7488c3c9db83Smrg	  major=".$current"
7489c3c9db83Smrg	  versuffix=".$current.$revision"
7490c3c9db83Smrg	  ;;
7491c3c9db83Smrg
7492c3c9db83Smrg	windows)
7493c3c9db83Smrg	  # Use '-' rather than '.', since we only want one
7494c3c9db83Smrg	  # extension on DOS 8.3 filesystems.
7495c3c9db83Smrg	  func_arith $current - $age
7496c3c9db83Smrg	  major=$func_arith_result
7497c3c9db83Smrg	  versuffix="-$major"
7498c3c9db83Smrg	  ;;
7499c3c9db83Smrg
7500c3c9db83Smrg	*)
7501c3c9db83Smrg	  func_fatal_configuration "unknown library version type \`$version_type'"
7502c3c9db83Smrg	  ;;
7503c3c9db83Smrg	esac
7504c3c9db83Smrg
7505c3c9db83Smrg	# Clear the version info if we defaulted, and they specified a release.
7506c3c9db83Smrg	if test -z "$vinfo" && test -n "$release"; then
7507c3c9db83Smrg	  major=
7508c3c9db83Smrg	  case $version_type in
7509c3c9db83Smrg	  darwin)
7510c3c9db83Smrg	    # we can't check for "0.0" in archive_cmds due to quoting
7511c3c9db83Smrg	    # problems, so we reset it completely
7512c3c9db83Smrg	    verstring=
7513c3c9db83Smrg	    ;;
7514c3c9db83Smrg	  *)
7515c3c9db83Smrg	    verstring="0.0"
7516c3c9db83Smrg	    ;;
7517c3c9db83Smrg	  esac
7518c3c9db83Smrg	  if test "$need_version" = no; then
7519c3c9db83Smrg	    versuffix=
7520c3c9db83Smrg	  else
7521c3c9db83Smrg	    versuffix=".0.0"
7522c3c9db83Smrg	  fi
7523c3c9db83Smrg	fi
7524c3c9db83Smrg
7525c3c9db83Smrg	# Remove version info from name if versioning should be avoided
7526c3c9db83Smrg	if test "$avoid_version" = yes && test "$need_version" = no; then
7527c3c9db83Smrg	  major=
7528c3c9db83Smrg	  versuffix=
7529c3c9db83Smrg	  verstring=""
7530c3c9db83Smrg	fi
7531c3c9db83Smrg
7532c3c9db83Smrg	# Check to see if the archive will have undefined symbols.
7533c3c9db83Smrg	if test "$allow_undefined" = yes; then
7534c3c9db83Smrg	  if test "$allow_undefined_flag" = unsupported; then
7535c3c9db83Smrg	    func_warning "undefined symbols not allowed in $host shared libraries"
7536c3c9db83Smrg	    build_libtool_libs=no
7537c3c9db83Smrg	    build_old_libs=yes
7538c3c9db83Smrg	  fi
7539c3c9db83Smrg	else
7540c3c9db83Smrg	  # Don't allow undefined symbols.
7541c3c9db83Smrg	  allow_undefined_flag="$no_undefined_flag"
7542c3c9db83Smrg	fi
7543c3c9db83Smrg
7544c3c9db83Smrg      fi
7545c3c9db83Smrg
7546c3c9db83Smrg      func_generate_dlsyms "$libname" "$libname" "yes"
75473f6d0e1dSmrg      func_append libobjs " $symfileobj"
7548c3c9db83Smrg      test "X$libobjs" = "X " && libobjs=
7549c3c9db83Smrg
75503f6d0e1dSmrg      if test "$opt_mode" != relink; then
7551c3c9db83Smrg	# Remove our outputs, but don't remove object files since they
7552c3c9db83Smrg	# may have been created when compiling PIC objects.
7553c3c9db83Smrg	removelist=
7554c3c9db83Smrg	tempremovelist=`$ECHO "$output_objdir/*"`
7555c3c9db83Smrg	for p in $tempremovelist; do
7556c3c9db83Smrg	  case $p in
7557c3c9db83Smrg	    *.$objext | *.gcno)
7558c3c9db83Smrg	       ;;
7559c3c9db83Smrg	    $output_objdir/$outputname | $output_objdir/$libname.* | $output_objdir/${libname}${release}.*)
7560c3c9db83Smrg	       if test "X$precious_files_regex" != "X"; then
7561c3c9db83Smrg		 if $ECHO "$p" | $EGREP -e "$precious_files_regex" >/dev/null 2>&1
7562c3c9db83Smrg		 then
7563c3c9db83Smrg		   continue
7564c3c9db83Smrg		 fi
7565c3c9db83Smrg	       fi
75663f6d0e1dSmrg	       func_append removelist " $p"
7567c3c9db83Smrg	       ;;
7568c3c9db83Smrg	    *) ;;
7569c3c9db83Smrg	  esac
7570c3c9db83Smrg	done
7571c3c9db83Smrg	test -n "$removelist" && \
7572c3c9db83Smrg	  func_show_eval "${RM}r \$removelist"
7573c3c9db83Smrg      fi
7574c3c9db83Smrg
7575c3c9db83Smrg      # Now set the variables for building old libraries.
7576c3c9db83Smrg      if test "$build_old_libs" = yes && test "$build_libtool_libs" != convenience ; then
75773f6d0e1dSmrg	func_append oldlibs " $output_objdir/$libname.$libext"
7578c3c9db83Smrg
7579c3c9db83Smrg	# Transform .lo files to .o files.
75803f6d0e1dSmrg	oldobjs="$objs "`$ECHO "$libobjs" | $SP2NL | $SED "/\.${libext}$/d; $lo2o" | $NL2SP`
7581c3c9db83Smrg      fi
7582c3c9db83Smrg
7583c3c9db83Smrg      # Eliminate all temporary directories.
7584c3c9db83Smrg      #for path in $notinst_path; do
75853f6d0e1dSmrg      #	lib_search_path=`$ECHO "$lib_search_path " | $SED "s% $path % %g"`
75863f6d0e1dSmrg      #	deplibs=`$ECHO "$deplibs " | $SED "s% -L$path % %g"`
75873f6d0e1dSmrg      #	dependency_libs=`$ECHO "$dependency_libs " | $SED "s% -L$path % %g"`
7588c3c9db83Smrg      #done
7589c3c9db83Smrg
7590c3c9db83Smrg      if test -n "$xrpath"; then
7591c3c9db83Smrg	# If the user specified any rpath flags, then add them.
7592c3c9db83Smrg	temp_xrpath=
7593c3c9db83Smrg	for libdir in $xrpath; do
75943f6d0e1dSmrg	  func_replace_sysroot "$libdir"
75953f6d0e1dSmrg	  func_append temp_xrpath " -R$func_replace_sysroot_result"
7596c3c9db83Smrg	  case "$finalize_rpath " in
7597c3c9db83Smrg	  *" $libdir "*) ;;
75983f6d0e1dSmrg	  *) func_append finalize_rpath " $libdir" ;;
7599c3c9db83Smrg	  esac
7600c3c9db83Smrg	done
7601c3c9db83Smrg	if test "$hardcode_into_libs" != yes || test "$build_old_libs" = yes; then
7602c3c9db83Smrg	  dependency_libs="$temp_xrpath $dependency_libs"
7603c3c9db83Smrg	fi
7604c3c9db83Smrg      fi
7605c3c9db83Smrg
7606c3c9db83Smrg      # Make sure dlfiles contains only unique files that won't be dlpreopened
7607c3c9db83Smrg      old_dlfiles="$dlfiles"
7608c3c9db83Smrg      dlfiles=
7609c3c9db83Smrg      for lib in $old_dlfiles; do
7610c3c9db83Smrg	case " $dlprefiles $dlfiles " in
7611c3c9db83Smrg	*" $lib "*) ;;
76123f6d0e1dSmrg	*) func_append dlfiles " $lib" ;;
7613c3c9db83Smrg	esac
7614c3c9db83Smrg      done
7615c3c9db83Smrg
7616c3c9db83Smrg      # Make sure dlprefiles contains only unique files
7617c3c9db83Smrg      old_dlprefiles="$dlprefiles"
7618c3c9db83Smrg      dlprefiles=
7619c3c9db83Smrg      for lib in $old_dlprefiles; do
7620c3c9db83Smrg	case "$dlprefiles " in
7621c3c9db83Smrg	*" $lib "*) ;;
76223f6d0e1dSmrg	*) func_append dlprefiles " $lib" ;;
7623c3c9db83Smrg	esac
7624c3c9db83Smrg      done
7625c3c9db83Smrg
7626c3c9db83Smrg      if test "$build_libtool_libs" = yes; then
7627c3c9db83Smrg	if test -n "$rpath"; then
7628c3c9db83Smrg	  case $host in
76293f6d0e1dSmrg	  *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-*-beos* | *-cegcc* | *-*-haiku*)
7630c3c9db83Smrg	    # these systems don't actually have a c library (as such)!
7631c3c9db83Smrg	    ;;
7632c3c9db83Smrg	  *-*-rhapsody* | *-*-darwin1.[012])
7633c3c9db83Smrg	    # Rhapsody C library is in the System framework
76343f6d0e1dSmrg	    func_append deplibs " System.ltframework"
7635c3c9db83Smrg	    ;;
7636c3c9db83Smrg	  *-*-netbsd*)
7637c3c9db83Smrg	    # Don't link with libc until the a.out ld.so is fixed.
7638c3c9db83Smrg	    ;;
7639c3c9db83Smrg	  *-*-openbsd* | *-*-freebsd* | *-*-dragonfly*)
7640c3c9db83Smrg	    # Do not include libc due to us having libc/libc_r.
7641c3c9db83Smrg	    ;;
7642c3c9db83Smrg	  *-*-sco3.2v5* | *-*-sco5v6*)
7643c3c9db83Smrg	    # Causes problems with __ctype
7644c3c9db83Smrg	    ;;
7645c3c9db83Smrg	  *-*-sysv4.2uw2* | *-*-sysv5* | *-*-unixware* | *-*-OpenUNIX*)
7646c3c9db83Smrg	    # Compiler inserts libc in the correct place for threads to work
7647c3c9db83Smrg	    ;;
7648c3c9db83Smrg	  *)
7649c3c9db83Smrg	    # Add libc to deplibs on all other systems if necessary.
7650c3c9db83Smrg	    if test "$build_libtool_need_lc" = "yes"; then
76513f6d0e1dSmrg	      func_append deplibs " -lc"
7652c3c9db83Smrg	    fi
7653c3c9db83Smrg	    ;;
7654c3c9db83Smrg	  esac
7655c3c9db83Smrg	fi
7656c3c9db83Smrg
7657c3c9db83Smrg	# Transform deplibs into only deplibs that can be linked in shared.
7658c3c9db83Smrg	name_save=$name
7659c3c9db83Smrg	libname_save=$libname
7660c3c9db83Smrg	release_save=$release
7661c3c9db83Smrg	versuffix_save=$versuffix
7662c3c9db83Smrg	major_save=$major
7663c3c9db83Smrg	# I'm not sure if I'm treating the release correctly.  I think
7664c3c9db83Smrg	# release should show up in the -l (ie -lgmp5) so we don't want to
7665c3c9db83Smrg	# add it in twice.  Is that correct?
7666c3c9db83Smrg	release=""
7667c3c9db83Smrg	versuffix=""
7668c3c9db83Smrg	major=""
7669c3c9db83Smrg	newdeplibs=
7670c3c9db83Smrg	droppeddeps=no
7671c3c9db83Smrg	case $deplibs_check_method in
7672c3c9db83Smrg	pass_all)
7673c3c9db83Smrg	  # Don't check for shared/static.  Everything works.
7674c3c9db83Smrg	  # This might be a little naive.  We might want to check
7675c3c9db83Smrg	  # whether the library exists or not.  But this is on
7676c3c9db83Smrg	  # osf3 & osf4 and I'm not really sure... Just
7677c3c9db83Smrg	  # implementing what was already the behavior.
7678c3c9db83Smrg	  newdeplibs=$deplibs
7679c3c9db83Smrg	  ;;
7680c3c9db83Smrg	test_compile)
7681c3c9db83Smrg	  # This code stresses the "libraries are programs" paradigm to its
7682c3c9db83Smrg	  # limits. Maybe even breaks it.  We compile a program, linking it
7683c3c9db83Smrg	  # against the deplibs as a proxy for the library.  Then we can check
7684c3c9db83Smrg	  # whether they linked in statically or dynamically with ldd.
7685c3c9db83Smrg	  $opt_dry_run || $RM conftest.c
7686c3c9db83Smrg	  cat > conftest.c <<EOF
7687c3c9db83Smrg	  int main() { return 0; }
7688c3c9db83SmrgEOF
7689c3c9db83Smrg	  $opt_dry_run || $RM conftest
7690c3c9db83Smrg	  if $LTCC $LTCFLAGS -o conftest conftest.c $deplibs; then
7691c3c9db83Smrg	    ldd_output=`ldd conftest`
7692c3c9db83Smrg	    for i in $deplibs; do
7693c3c9db83Smrg	      case $i in
7694c3c9db83Smrg	      -l*)
7695c3c9db83Smrg		func_stripname -l '' "$i"
7696c3c9db83Smrg		name=$func_stripname_result
7697c3c9db83Smrg		if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then
7698c3c9db83Smrg		  case " $predeps $postdeps " in
7699c3c9db83Smrg		  *" $i "*)
77003f6d0e1dSmrg		    func_append newdeplibs " $i"
7701c3c9db83Smrg		    i=""
7702c3c9db83Smrg		    ;;
7703c3c9db83Smrg		  esac
7704c3c9db83Smrg		fi
7705c3c9db83Smrg		if test -n "$i" ; then
7706c3c9db83Smrg		  libname=`eval "\\$ECHO \"$libname_spec\""`
7707c3c9db83Smrg		  deplib_matches=`eval "\\$ECHO \"$library_names_spec\""`
7708c3c9db83Smrg		  set dummy $deplib_matches; shift
7709c3c9db83Smrg		  deplib_match=$1
7710c3c9db83Smrg		  if test `expr "$ldd_output" : ".*$deplib_match"` -ne 0 ; then
77113f6d0e1dSmrg		    func_append newdeplibs " $i"
7712c3c9db83Smrg		  else
7713c3c9db83Smrg		    droppeddeps=yes
77143f6d0e1dSmrg		    echo
7715c3c9db83Smrg		    $ECHO "*** Warning: dynamic linker does not accept needed library $i."
77163f6d0e1dSmrg		    echo "*** I have the capability to make that library automatically link in when"
77173f6d0e1dSmrg		    echo "*** you link to this library.  But I can only do this if you have a"
77183f6d0e1dSmrg		    echo "*** shared version of the library, which I believe you do not have"
77193f6d0e1dSmrg		    echo "*** because a test_compile did reveal that the linker did not use it for"
77203f6d0e1dSmrg		    echo "*** its dynamic dependency list that programs get resolved with at runtime."
7721c3c9db83Smrg		  fi
7722c3c9db83Smrg		fi
7723c3c9db83Smrg		;;
7724c3c9db83Smrg	      *)
77253f6d0e1dSmrg		func_append newdeplibs " $i"
7726c3c9db83Smrg		;;
7727c3c9db83Smrg	      esac
7728c3c9db83Smrg	    done
7729c3c9db83Smrg	  else
7730c3c9db83Smrg	    # Error occurred in the first compile.  Let's try to salvage
7731c3c9db83Smrg	    # the situation: Compile a separate program for each library.
7732c3c9db83Smrg	    for i in $deplibs; do
7733c3c9db83Smrg	      case $i in
7734c3c9db83Smrg	      -l*)
7735c3c9db83Smrg		func_stripname -l '' "$i"
7736c3c9db83Smrg		name=$func_stripname_result
7737c3c9db83Smrg		$opt_dry_run || $RM conftest
7738c3c9db83Smrg		if $LTCC $LTCFLAGS -o conftest conftest.c $i; then
7739c3c9db83Smrg		  ldd_output=`ldd conftest`
7740c3c9db83Smrg		  if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then
7741c3c9db83Smrg		    case " $predeps $postdeps " in
7742c3c9db83Smrg		    *" $i "*)
77433f6d0e1dSmrg		      func_append newdeplibs " $i"
7744c3c9db83Smrg		      i=""
7745c3c9db83Smrg		      ;;
7746c3c9db83Smrg		    esac
7747c3c9db83Smrg		  fi
7748c3c9db83Smrg		  if test -n "$i" ; then
7749c3c9db83Smrg		    libname=`eval "\\$ECHO \"$libname_spec\""`
7750c3c9db83Smrg		    deplib_matches=`eval "\\$ECHO \"$library_names_spec\""`
7751c3c9db83Smrg		    set dummy $deplib_matches; shift
7752c3c9db83Smrg		    deplib_match=$1
7753c3c9db83Smrg		    if test `expr "$ldd_output" : ".*$deplib_match"` -ne 0 ; then
77543f6d0e1dSmrg		      func_append newdeplibs " $i"
7755c3c9db83Smrg		    else
7756c3c9db83Smrg		      droppeddeps=yes
77573f6d0e1dSmrg		      echo
7758c3c9db83Smrg		      $ECHO "*** Warning: dynamic linker does not accept needed library $i."
77593f6d0e1dSmrg		      echo "*** I have the capability to make that library automatically link in when"
77603f6d0e1dSmrg		      echo "*** you link to this library.  But I can only do this if you have a"
77613f6d0e1dSmrg		      echo "*** shared version of the library, which you do not appear to have"
77623f6d0e1dSmrg		      echo "*** because a test_compile did reveal that the linker did not use this one"
77633f6d0e1dSmrg		      echo "*** as a dynamic dependency that programs can get resolved with at runtime."
7764c3c9db83Smrg		    fi
7765c3c9db83Smrg		  fi
7766c3c9db83Smrg		else
7767c3c9db83Smrg		  droppeddeps=yes
77683f6d0e1dSmrg		  echo
7769c3c9db83Smrg		  $ECHO "*** Warning!  Library $i is needed by this library but I was not able to"
77703f6d0e1dSmrg		  echo "*** make it link in!  You will probably need to install it or some"
77713f6d0e1dSmrg		  echo "*** library that it depends on before this library will be fully"
77723f6d0e1dSmrg		  echo "*** functional.  Installing it before continuing would be even better."
7773c3c9db83Smrg		fi
7774c3c9db83Smrg		;;
7775c3c9db83Smrg	      *)
77763f6d0e1dSmrg		func_append newdeplibs " $i"
7777c3c9db83Smrg		;;
7778c3c9db83Smrg	      esac
7779c3c9db83Smrg	    done
7780c3c9db83Smrg	  fi
7781c3c9db83Smrg	  ;;
7782c3c9db83Smrg	file_magic*)
7783c3c9db83Smrg	  set dummy $deplibs_check_method; shift
7784c3c9db83Smrg	  file_magic_regex=`expr "$deplibs_check_method" : "$1 \(.*\)"`
7785c3c9db83Smrg	  for a_deplib in $deplibs; do
7786c3c9db83Smrg	    case $a_deplib in
7787c3c9db83Smrg	    -l*)
7788c3c9db83Smrg	      func_stripname -l '' "$a_deplib"
7789c3c9db83Smrg	      name=$func_stripname_result
7790c3c9db83Smrg	      if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then
7791c3c9db83Smrg		case " $predeps $postdeps " in
7792c3c9db83Smrg		*" $a_deplib "*)
77933f6d0e1dSmrg		  func_append newdeplibs " $a_deplib"
7794c3c9db83Smrg		  a_deplib=""
7795c3c9db83Smrg		  ;;
7796c3c9db83Smrg		esac
7797c3c9db83Smrg	      fi
7798c3c9db83Smrg	      if test -n "$a_deplib" ; then
7799c3c9db83Smrg		libname=`eval "\\$ECHO \"$libname_spec\""`
78003f6d0e1dSmrg		if test -n "$file_magic_glob"; then
78013f6d0e1dSmrg		  libnameglob=`func_echo_all "$libname" | $SED -e $file_magic_glob`
78023f6d0e1dSmrg		else
78033f6d0e1dSmrg		  libnameglob=$libname
78043f6d0e1dSmrg		fi
78053f6d0e1dSmrg		test "$want_nocaseglob" = yes && nocaseglob=`shopt -p nocaseglob`
7806c3c9db83Smrg		for i in $lib_search_path $sys_lib_search_path $shlib_search_path; do
78073f6d0e1dSmrg		  if test "$want_nocaseglob" = yes; then
78083f6d0e1dSmrg		    shopt -s nocaseglob
78093f6d0e1dSmrg		    potential_libs=`ls $i/$libnameglob[.-]* 2>/dev/null`
78103f6d0e1dSmrg		    $nocaseglob
78113f6d0e1dSmrg		  else
78123f6d0e1dSmrg		    potential_libs=`ls $i/$libnameglob[.-]* 2>/dev/null`
78133f6d0e1dSmrg		  fi
7814c3c9db83Smrg		  for potent_lib in $potential_libs; do
7815c3c9db83Smrg		      # Follow soft links.
7816c3c9db83Smrg		      if ls -lLd "$potent_lib" 2>/dev/null |
7817c3c9db83Smrg			 $GREP " -> " >/dev/null; then
7818c3c9db83Smrg			continue
7819c3c9db83Smrg		      fi
7820c3c9db83Smrg		      # The statement above tries to avoid entering an
7821c3c9db83Smrg		      # endless loop below, in case of cyclic links.
7822c3c9db83Smrg		      # We might still enter an endless loop, since a link
7823c3c9db83Smrg		      # loop can be closed while we follow links,
7824c3c9db83Smrg		      # but so what?
7825c3c9db83Smrg		      potlib="$potent_lib"
7826c3c9db83Smrg		      while test -h "$potlib" 2>/dev/null; do
7827c3c9db83Smrg			potliblink=`ls -ld $potlib | ${SED} 's/.* -> //'`
7828c3c9db83Smrg			case $potliblink in
7829c3c9db83Smrg			[\\/]* | [A-Za-z]:[\\/]*) potlib="$potliblink";;
78303f6d0e1dSmrg			*) potlib=`$ECHO "$potlib" | $SED 's,[^/]*$,,'`"$potliblink";;
7831c3c9db83Smrg			esac
7832c3c9db83Smrg		      done
7833c3c9db83Smrg		      if eval $file_magic_cmd \"\$potlib\" 2>/dev/null |
7834c3c9db83Smrg			 $SED -e 10q |
7835c3c9db83Smrg			 $EGREP "$file_magic_regex" > /dev/null; then
78363f6d0e1dSmrg			func_append newdeplibs " $a_deplib"
7837c3c9db83Smrg			a_deplib=""
7838c3c9db83Smrg			break 2
7839c3c9db83Smrg		      fi
7840c3c9db83Smrg		  done
7841c3c9db83Smrg		done
7842c3c9db83Smrg	      fi
7843c3c9db83Smrg	      if test -n "$a_deplib" ; then
7844c3c9db83Smrg		droppeddeps=yes
78453f6d0e1dSmrg		echo
7846c3c9db83Smrg		$ECHO "*** Warning: linker path does not have real file for library $a_deplib."
78473f6d0e1dSmrg		echo "*** I have the capability to make that library automatically link in when"
78483f6d0e1dSmrg		echo "*** you link to this library.  But I can only do this if you have a"
78493f6d0e1dSmrg		echo "*** shared version of the library, which you do not appear to have"
78503f6d0e1dSmrg		echo "*** because I did check the linker path looking for a file starting"
7851c3c9db83Smrg		if test -z "$potlib" ; then
7852c3c9db83Smrg		  $ECHO "*** with $libname but no candidates were found. (...for file magic test)"
7853c3c9db83Smrg		else
7854c3c9db83Smrg		  $ECHO "*** with $libname and none of the candidates passed a file format test"
7855c3c9db83Smrg		  $ECHO "*** using a file magic. Last file checked: $potlib"
7856c3c9db83Smrg		fi
7857c3c9db83Smrg	      fi
7858c3c9db83Smrg	      ;;
7859c3c9db83Smrg	    *)
7860c3c9db83Smrg	      # Add a -L argument.
78613f6d0e1dSmrg	      func_append newdeplibs " $a_deplib"
7862c3c9db83Smrg	      ;;
7863c3c9db83Smrg	    esac
7864c3c9db83Smrg	  done # Gone through all deplibs.
7865c3c9db83Smrg	  ;;
7866c3c9db83Smrg	match_pattern*)
7867c3c9db83Smrg	  set dummy $deplibs_check_method; shift
7868c3c9db83Smrg	  match_pattern_regex=`expr "$deplibs_check_method" : "$1 \(.*\)"`
7869c3c9db83Smrg	  for a_deplib in $deplibs; do
7870c3c9db83Smrg	    case $a_deplib in
7871c3c9db83Smrg	    -l*)
7872c3c9db83Smrg	      func_stripname -l '' "$a_deplib"
7873c3c9db83Smrg	      name=$func_stripname_result
7874c3c9db83Smrg	      if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then
7875c3c9db83Smrg		case " $predeps $postdeps " in
7876c3c9db83Smrg		*" $a_deplib "*)
78773f6d0e1dSmrg		  func_append newdeplibs " $a_deplib"
7878c3c9db83Smrg		  a_deplib=""
7879c3c9db83Smrg		  ;;
7880c3c9db83Smrg		esac
7881c3c9db83Smrg	      fi
7882c3c9db83Smrg	      if test -n "$a_deplib" ; then
7883c3c9db83Smrg		libname=`eval "\\$ECHO \"$libname_spec\""`
7884c3c9db83Smrg		for i in $lib_search_path $sys_lib_search_path $shlib_search_path; do
7885c3c9db83Smrg		  potential_libs=`ls $i/$libname[.-]* 2>/dev/null`
7886c3c9db83Smrg		  for potent_lib in $potential_libs; do
7887c3c9db83Smrg		    potlib="$potent_lib" # see symlink-check above in file_magic test
78883f6d0e1dSmrg		    if eval "\$ECHO \"$potent_lib\"" 2>/dev/null | $SED 10q | \
7889c3c9db83Smrg		       $EGREP "$match_pattern_regex" > /dev/null; then
78903f6d0e1dSmrg		      func_append newdeplibs " $a_deplib"
7891c3c9db83Smrg		      a_deplib=""
7892c3c9db83Smrg		      break 2
7893c3c9db83Smrg		    fi
7894c3c9db83Smrg		  done
7895c3c9db83Smrg		done
7896c3c9db83Smrg	      fi
7897c3c9db83Smrg	      if test -n "$a_deplib" ; then
7898c3c9db83Smrg		droppeddeps=yes
78993f6d0e1dSmrg		echo
7900c3c9db83Smrg		$ECHO "*** Warning: linker path does not have real file for library $a_deplib."
79013f6d0e1dSmrg		echo "*** I have the capability to make that library automatically link in when"
79023f6d0e1dSmrg		echo "*** you link to this library.  But I can only do this if you have a"
79033f6d0e1dSmrg		echo "*** shared version of the library, which you do not appear to have"
79043f6d0e1dSmrg		echo "*** because I did check the linker path looking for a file starting"
7905c3c9db83Smrg		if test -z "$potlib" ; then
7906c3c9db83Smrg		  $ECHO "*** with $libname but no candidates were found. (...for regex pattern test)"
7907c3c9db83Smrg		else
7908c3c9db83Smrg		  $ECHO "*** with $libname and none of the candidates passed a file format test"
7909c3c9db83Smrg		  $ECHO "*** using a regex pattern. Last file checked: $potlib"
7910c3c9db83Smrg		fi
7911c3c9db83Smrg	      fi
7912c3c9db83Smrg	      ;;
7913c3c9db83Smrg	    *)
7914c3c9db83Smrg	      # Add a -L argument.
79153f6d0e1dSmrg	      func_append newdeplibs " $a_deplib"
7916c3c9db83Smrg	      ;;
7917c3c9db83Smrg	    esac
7918c3c9db83Smrg	  done # Gone through all deplibs.
7919c3c9db83Smrg	  ;;
7920c3c9db83Smrg	none | unknown | *)
7921c3c9db83Smrg	  newdeplibs=""
79223f6d0e1dSmrg	  tmp_deplibs=`$ECHO " $deplibs" | $SED 's/ -lc$//; s/ -[LR][^ ]*//g'`
7923c3c9db83Smrg	  if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then
7924c3c9db83Smrg	    for i in $predeps $postdeps ; do
7925c3c9db83Smrg	      # can't use Xsed below, because $i might contain '/'
79263f6d0e1dSmrg	      tmp_deplibs=`$ECHO " $tmp_deplibs" | $SED "s,$i,,"`
7927c3c9db83Smrg	    done
7928c3c9db83Smrg	  fi
79293f6d0e1dSmrg	  case $tmp_deplibs in
79303f6d0e1dSmrg	  *[!\	\ ]*)
79313f6d0e1dSmrg	    echo
7932c3c9db83Smrg	    if test "X$deplibs_check_method" = "Xnone"; then
79333f6d0e1dSmrg	      echo "*** Warning: inter-library dependencies are not supported in this platform."
7934c3c9db83Smrg	    else
79353f6d0e1dSmrg	      echo "*** Warning: inter-library dependencies are not known to be supported."
7936c3c9db83Smrg	    fi
79373f6d0e1dSmrg	    echo "*** All declared inter-library dependencies are being dropped."
7938c3c9db83Smrg	    droppeddeps=yes
79393f6d0e1dSmrg	    ;;
79403f6d0e1dSmrg	  esac
7941c3c9db83Smrg	  ;;
7942c3c9db83Smrg	esac
7943c3c9db83Smrg	versuffix=$versuffix_save
7944c3c9db83Smrg	major=$major_save
7945c3c9db83Smrg	release=$release_save
7946c3c9db83Smrg	libname=$libname_save
7947c3c9db83Smrg	name=$name_save
7948c3c9db83Smrg
7949c3c9db83Smrg	case $host in
7950c3c9db83Smrg	*-*-rhapsody* | *-*-darwin1.[012])
7951c3c9db83Smrg	  # On Rhapsody replace the C library with the System framework
79523f6d0e1dSmrg	  newdeplibs=`$ECHO " $newdeplibs" | $SED 's/ -lc / System.ltframework /'`
7953c3c9db83Smrg	  ;;
7954c3c9db83Smrg	esac
7955c3c9db83Smrg
7956c3c9db83Smrg	if test "$droppeddeps" = yes; then
7957c3c9db83Smrg	  if test "$module" = yes; then
79583f6d0e1dSmrg	    echo
79593f6d0e1dSmrg	    echo "*** Warning: libtool could not satisfy all declared inter-library"
7960c3c9db83Smrg	    $ECHO "*** dependencies of module $libname.  Therefore, libtool will create"
79613f6d0e1dSmrg	    echo "*** a static module, that should work as long as the dlopening"
79623f6d0e1dSmrg	    echo "*** application is linked with the -dlopen flag."
7963c3c9db83Smrg	    if test -z "$global_symbol_pipe"; then
79643f6d0e1dSmrg	      echo
79653f6d0e1dSmrg	      echo "*** However, this would only work if libtool was able to extract symbol"
79663f6d0e1dSmrg	      echo "*** lists from a program, using \`nm' or equivalent, but libtool could"
79673f6d0e1dSmrg	      echo "*** not find such a program.  So, this module is probably useless."
79683f6d0e1dSmrg	      echo "*** \`nm' from GNU binutils and a full rebuild may help."
7969c3c9db83Smrg	    fi
7970c3c9db83Smrg	    if test "$build_old_libs" = no; then
7971c3c9db83Smrg	      oldlibs="$output_objdir/$libname.$libext"
7972c3c9db83Smrg	      build_libtool_libs=module
7973c3c9db83Smrg	      build_old_libs=yes
7974c3c9db83Smrg	    else
7975c3c9db83Smrg	      build_libtool_libs=no
7976c3c9db83Smrg	    fi
7977c3c9db83Smrg	  else
79783f6d0e1dSmrg	    echo "*** The inter-library dependencies that have been dropped here will be"
79793f6d0e1dSmrg	    echo "*** automatically added whenever a program is linked with this library"
79803f6d0e1dSmrg	    echo "*** or is declared to -dlopen it."
7981c3c9db83Smrg
7982c3c9db83Smrg	    if test "$allow_undefined" = no; then
79833f6d0e1dSmrg	      echo
79843f6d0e1dSmrg	      echo "*** Since this library must not contain undefined symbols,"
79853f6d0e1dSmrg	      echo "*** because either the platform does not support them or"
79863f6d0e1dSmrg	      echo "*** it was explicitly requested with -no-undefined,"
79873f6d0e1dSmrg	      echo "*** libtool will only create a static version of it."
7988c3c9db83Smrg	      if test "$build_old_libs" = no; then
7989c3c9db83Smrg		oldlibs="$output_objdir/$libname.$libext"
7990c3c9db83Smrg		build_libtool_libs=module
7991c3c9db83Smrg		build_old_libs=yes
7992c3c9db83Smrg	      else
7993c3c9db83Smrg		build_libtool_libs=no
7994c3c9db83Smrg	      fi
7995c3c9db83Smrg	    fi
7996c3c9db83Smrg	  fi
7997c3c9db83Smrg	fi
7998c3c9db83Smrg	# Done checking deplibs!
7999c3c9db83Smrg	deplibs=$newdeplibs
8000c3c9db83Smrg      fi
8001c3c9db83Smrg      # Time to change all our "foo.ltframework" stuff back to "-framework foo"
8002c3c9db83Smrg      case $host in
8003c3c9db83Smrg	*-*-darwin*)
80043f6d0e1dSmrg	  newdeplibs=`$ECHO " $newdeplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'`
80053f6d0e1dSmrg	  new_inherited_linker_flags=`$ECHO " $new_inherited_linker_flags" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'`
80063f6d0e1dSmrg	  deplibs=`$ECHO " $deplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'`
8007c3c9db83Smrg	  ;;
8008c3c9db83Smrg      esac
8009c3c9db83Smrg
8010c3c9db83Smrg      # move library search paths that coincide with paths to not yet
8011c3c9db83Smrg      # installed libraries to the beginning of the library search list
8012c3c9db83Smrg      new_libs=
8013c3c9db83Smrg      for path in $notinst_path; do
8014c3c9db83Smrg	case " $new_libs " in
8015c3c9db83Smrg	*" -L$path/$objdir "*) ;;
8016c3c9db83Smrg	*)
8017c3c9db83Smrg	  case " $deplibs " in
8018c3c9db83Smrg	  *" -L$path/$objdir "*)
80193f6d0e1dSmrg	    func_append new_libs " -L$path/$objdir" ;;
8020c3c9db83Smrg	  esac
8021c3c9db83Smrg	  ;;
8022c3c9db83Smrg	esac
8023c3c9db83Smrg      done
8024c3c9db83Smrg      for deplib in $deplibs; do
8025c3c9db83Smrg	case $deplib in
8026c3c9db83Smrg	-L*)
8027c3c9db83Smrg	  case " $new_libs " in
8028c3c9db83Smrg	  *" $deplib "*) ;;
80293f6d0e1dSmrg	  *) func_append new_libs " $deplib" ;;
8030c3c9db83Smrg	  esac
8031c3c9db83Smrg	  ;;
80323f6d0e1dSmrg	*) func_append new_libs " $deplib" ;;
8033c3c9db83Smrg	esac
8034c3c9db83Smrg      done
8035c3c9db83Smrg      deplibs="$new_libs"
8036c3c9db83Smrg
8037c3c9db83Smrg      # All the library-specific variables (install_libdir is set above).
8038c3c9db83Smrg      library_names=
8039c3c9db83Smrg      old_library=
8040c3c9db83Smrg      dlname=
8041c3c9db83Smrg
8042c3c9db83Smrg      # Test again, we may have decided not to build it any more
8043c3c9db83Smrg      if test "$build_libtool_libs" = yes; then
804495903e71Smrg	# Remove ${wl} instances when linking with ld.
804595903e71Smrg	# FIXME: should test the right _cmds variable.
804695903e71Smrg	case $archive_cmds in
804795903e71Smrg	  *\$LD\ *) wl= ;;
804895903e71Smrg        esac
8049c3c9db83Smrg	if test "$hardcode_into_libs" = yes; then
8050c3c9db83Smrg	  # Hardcode the library paths
8051c3c9db83Smrg	  hardcode_libdirs=
8052c3c9db83Smrg	  dep_rpath=
8053c3c9db83Smrg	  rpath="$finalize_rpath"
80543f6d0e1dSmrg	  test "$opt_mode" != relink && rpath="$compile_rpath$rpath"
8055c3c9db83Smrg	  for libdir in $rpath; do
8056c3c9db83Smrg	    if test -n "$hardcode_libdir_flag_spec"; then
8057c3c9db83Smrg	      if test -n "$hardcode_libdir_separator"; then
80583f6d0e1dSmrg		func_replace_sysroot "$libdir"
80593f6d0e1dSmrg		libdir=$func_replace_sysroot_result
8060c3c9db83Smrg		if test -z "$hardcode_libdirs"; then
8061c3c9db83Smrg		  hardcode_libdirs="$libdir"
8062c3c9db83Smrg		else
8063c3c9db83Smrg		  # Just accumulate the unique libdirs.
8064c3c9db83Smrg		  case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in
8065c3c9db83Smrg		  *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*)
8066c3c9db83Smrg		    ;;
8067c3c9db83Smrg		  *)
80683f6d0e1dSmrg		    func_append hardcode_libdirs "$hardcode_libdir_separator$libdir"
8069c3c9db83Smrg		    ;;
8070c3c9db83Smrg		  esac
8071c3c9db83Smrg		fi
8072c3c9db83Smrg	      else
8073c3c9db83Smrg		eval flag=\"$hardcode_libdir_flag_spec\"
80743f6d0e1dSmrg		func_append dep_rpath " $flag"
8075c3c9db83Smrg	      fi
8076c3c9db83Smrg	    elif test -n "$runpath_var"; then
8077c3c9db83Smrg	      case "$perm_rpath " in
8078c3c9db83Smrg	      *" $libdir "*) ;;
807995903e71Smrg	      *) func_append perm_rpath " $libdir" ;;
8080c3c9db83Smrg	      esac
8081c3c9db83Smrg	    fi
8082c3c9db83Smrg	  done
8083c3c9db83Smrg	  # Substitute the hardcoded libdirs into the rpath.
8084c3c9db83Smrg	  if test -n "$hardcode_libdir_separator" &&
8085c3c9db83Smrg	     test -n "$hardcode_libdirs"; then
8086c3c9db83Smrg	    libdir="$hardcode_libdirs"
808795903e71Smrg	    eval "dep_rpath=\"$hardcode_libdir_flag_spec\""
8088c3c9db83Smrg	  fi
8089c3c9db83Smrg	  if test -n "$runpath_var" && test -n "$perm_rpath"; then
8090c3c9db83Smrg	    # We should set the runpath_var.
8091c3c9db83Smrg	    rpath=
8092c3c9db83Smrg	    for dir in $perm_rpath; do
80933f6d0e1dSmrg	      func_append rpath "$dir:"
8094c3c9db83Smrg	    done
8095c3c9db83Smrg	    eval "$runpath_var='$rpath\$$runpath_var'; export $runpath_var"
8096c3c9db83Smrg	  fi
8097c3c9db83Smrg	  test -n "$dep_rpath" && deplibs="$dep_rpath $deplibs"
8098c3c9db83Smrg	fi
8099692f60a7Smrg
8100c3c9db83Smrg	shlibpath="$finalize_shlibpath"
81013f6d0e1dSmrg	test "$opt_mode" != relink && shlibpath="$compile_shlibpath$shlibpath"
8102c3c9db83Smrg	if test -n "$shlibpath"; then
8103c3c9db83Smrg	  eval "$shlibpath_var='$shlibpath\$$shlibpath_var'; export $shlibpath_var"
8104c3c9db83Smrg	fi
8105692f60a7Smrg
8106c3c9db83Smrg	# Get the real and link names of the library.
8107c3c9db83Smrg	eval shared_ext=\"$shrext_cmds\"
8108c3c9db83Smrg	eval library_names=\"$library_names_spec\"
8109c3c9db83Smrg	set dummy $library_names
8110c3c9db83Smrg	shift
8111c3c9db83Smrg	realname="$1"
8112c3c9db83Smrg	shift
8113692f60a7Smrg
8114c3c9db83Smrg	if test -n "$soname_spec"; then
8115c3c9db83Smrg	  eval soname=\"$soname_spec\"
8116c3c9db83Smrg	else
8117c3c9db83Smrg	  soname="$realname"
8118c3c9db83Smrg	fi
8119c3c9db83Smrg	if test -z "$dlname"; then
8120c3c9db83Smrg	  dlname=$soname
8121c3c9db83Smrg	fi
8122692f60a7Smrg
8123c3c9db83Smrg	lib="$output_objdir/$realname"
8124c3c9db83Smrg	linknames=
8125c3c9db83Smrg	for link
8126c3c9db83Smrg	do
81273f6d0e1dSmrg	  func_append linknames " $link"
8128c3c9db83Smrg	done
8129692f60a7Smrg
8130c3c9db83Smrg	# Use standard objects if they are pic
81313f6d0e1dSmrg	test -z "$pic_flag" && libobjs=`$ECHO "$libobjs" | $SP2NL | $SED "$lo2o" | $NL2SP`
8132c3c9db83Smrg	test "X$libobjs" = "X " && libobjs=
8133692f60a7Smrg
8134c3c9db83Smrg	delfiles=
8135c3c9db83Smrg	if test -n "$export_symbols" && test -n "$include_expsyms"; then
8136c3c9db83Smrg	  $opt_dry_run || cp "$export_symbols" "$output_objdir/$libname.uexp"
8137c3c9db83Smrg	  export_symbols="$output_objdir/$libname.uexp"
81383f6d0e1dSmrg	  func_append delfiles " $export_symbols"
8139c3c9db83Smrg	fi
8140692f60a7Smrg
8141c3c9db83Smrg	orig_export_symbols=
8142c3c9db83Smrg	case $host_os in
8143c3c9db83Smrg	cygwin* | mingw* | cegcc*)
8144c3c9db83Smrg	  if test -n "$export_symbols" && test -z "$export_symbols_regex"; then
8145c3c9db83Smrg	    # exporting using user supplied symfile
8146c3c9db83Smrg	    if test "x`$SED 1q $export_symbols`" != xEXPORTS; then
8147c3c9db83Smrg	      # and it's NOT already a .def file. Must figure out
8148c3c9db83Smrg	      # which of the given symbols are data symbols and tag
8149c3c9db83Smrg	      # them as such. So, trigger use of export_symbols_cmds.
8150c3c9db83Smrg	      # export_symbols gets reassigned inside the "prepare
8151c3c9db83Smrg	      # the list of exported symbols" if statement, so the
8152c3c9db83Smrg	      # include_expsyms logic still works.
8153c3c9db83Smrg	      orig_export_symbols="$export_symbols"
8154c3c9db83Smrg	      export_symbols=
8155c3c9db83Smrg	      always_export_symbols=yes
8156c3c9db83Smrg	    fi
8157c3c9db83Smrg	  fi
8158c3c9db83Smrg	  ;;
8159c3c9db83Smrg	esac
8160692f60a7Smrg
8161c3c9db83Smrg	# Prepare the list of exported symbols
8162c3c9db83Smrg	if test -z "$export_symbols"; then
8163c3c9db83Smrg	  if test "$always_export_symbols" = yes || test -n "$export_symbols_regex"; then
8164c3c9db83Smrg	    func_verbose "generating symbol list for \`$libname.la'"
8165c3c9db83Smrg	    export_symbols="$output_objdir/$libname.exp"
8166c3c9db83Smrg	    $opt_dry_run || $RM $export_symbols
8167c3c9db83Smrg	    cmds=$export_symbols_cmds
8168c3c9db83Smrg	    save_ifs="$IFS"; IFS='~'
81693f6d0e1dSmrg	    for cmd1 in $cmds; do
8170c3c9db83Smrg	      IFS="$save_ifs"
81713f6d0e1dSmrg	      # Take the normal branch if the nm_file_list_spec branch
81723f6d0e1dSmrg	      # doesn't work or if tool conversion is not needed.
81733f6d0e1dSmrg	      case $nm_file_list_spec~$to_tool_file_cmd in
81743f6d0e1dSmrg		*~func_convert_file_noop | *~func_convert_file_msys_to_w32 | ~*)
81753f6d0e1dSmrg		  try_normal_branch=yes
81763f6d0e1dSmrg		  eval cmd=\"$cmd1\"
81773f6d0e1dSmrg		  func_len " $cmd"
81783f6d0e1dSmrg		  len=$func_len_result
81793f6d0e1dSmrg		  ;;
81803f6d0e1dSmrg		*)
81813f6d0e1dSmrg		  try_normal_branch=no
81823f6d0e1dSmrg		  ;;
81833f6d0e1dSmrg	      esac
81843f6d0e1dSmrg	      if test "$try_normal_branch" = yes \
81853f6d0e1dSmrg		 && { test "$len" -lt "$max_cmd_len" \
81863f6d0e1dSmrg		      || test "$max_cmd_len" -le -1; }
81873f6d0e1dSmrg	      then
81883f6d0e1dSmrg		func_show_eval "$cmd" 'exit $?'
81893f6d0e1dSmrg		skipped_export=false
81903f6d0e1dSmrg	      elif test -n "$nm_file_list_spec"; then
81913f6d0e1dSmrg		func_basename "$output"
81923f6d0e1dSmrg		output_la=$func_basename_result
81933f6d0e1dSmrg		save_libobjs=$libobjs
81943f6d0e1dSmrg		save_output=$output
81953f6d0e1dSmrg		output=${output_objdir}/${output_la}.nm
81963f6d0e1dSmrg		func_to_tool_file "$output"
81973f6d0e1dSmrg		libobjs=$nm_file_list_spec$func_to_tool_file_result
81983f6d0e1dSmrg		func_append delfiles " $output"
81993f6d0e1dSmrg		func_verbose "creating $NM input file list: $output"
82003f6d0e1dSmrg		for obj in $save_libobjs; do
82013f6d0e1dSmrg		  func_to_tool_file "$obj"
82023f6d0e1dSmrg		  $ECHO "$func_to_tool_file_result"
82033f6d0e1dSmrg		done > "$output"
82043f6d0e1dSmrg		eval cmd=\"$cmd1\"
8205c3c9db83Smrg		func_show_eval "$cmd" 'exit $?'
82063f6d0e1dSmrg		output=$save_output
82073f6d0e1dSmrg		libobjs=$save_libobjs
8208c3c9db83Smrg		skipped_export=false
8209c3c9db83Smrg	      else
8210c3c9db83Smrg		# The command line is too long to execute in one step.
8211c3c9db83Smrg		func_verbose "using reloadable object file for export list..."
8212c3c9db83Smrg		skipped_export=:
8213c3c9db83Smrg		# Break out early, otherwise skipped_export may be
8214c3c9db83Smrg		# set to false by a later but shorter cmd.
8215c3c9db83Smrg		break
8216c3c9db83Smrg	      fi
8217c3c9db83Smrg	    done
8218c3c9db83Smrg	    IFS="$save_ifs"
8219c3c9db83Smrg	    if test -n "$export_symbols_regex" && test "X$skipped_export" != "X:"; then
8220c3c9db83Smrg	      func_show_eval '$EGREP -e "$export_symbols_regex" "$export_symbols" > "${export_symbols}T"'
8221c3c9db83Smrg	      func_show_eval '$MV "${export_symbols}T" "$export_symbols"'
8222c3c9db83Smrg	    fi
8223c3c9db83Smrg	  fi
8224692f60a7Smrg	fi
8225692f60a7Smrg
8226c3c9db83Smrg	if test -n "$export_symbols" && test -n "$include_expsyms"; then
8227c3c9db83Smrg	  tmp_export_symbols="$export_symbols"
8228c3c9db83Smrg	  test -n "$orig_export_symbols" && tmp_export_symbols="$orig_export_symbols"
82293f6d0e1dSmrg	  $opt_dry_run || eval '$ECHO "$include_expsyms" | $SP2NL >> "$tmp_export_symbols"'
8230c3c9db83Smrg	fi
8231692f60a7Smrg
8232c3c9db83Smrg	if test "X$skipped_export" != "X:" && test -n "$orig_export_symbols"; then
8233c3c9db83Smrg	  # The given exports_symbols file has to be filtered, so filter it.
8234c3c9db83Smrg	  func_verbose "filter symbol list for \`$libname.la' to tag DATA exports"
8235c3c9db83Smrg	  # FIXME: $output_objdir/$libname.filter potentially contains lots of
8236c3c9db83Smrg	  # 's' commands which not all seds can handle. GNU sed should be fine
8237c3c9db83Smrg	  # though. Also, the filter scales superlinearly with the number of
8238c3c9db83Smrg	  # global variables. join(1) would be nice here, but unfortunately
8239c3c9db83Smrg	  # isn't a blessed tool.
8240c3c9db83Smrg	  $opt_dry_run || $SED -e '/[ ,]DATA/!d;s,\(.*\)\([ \,].*\),s|^\1$|\1\2|,' < $export_symbols > $output_objdir/$libname.filter
82413f6d0e1dSmrg	  func_append delfiles " $export_symbols $output_objdir/$libname.filter"
8242c3c9db83Smrg	  export_symbols=$output_objdir/$libname.def
8243c3c9db83Smrg	  $opt_dry_run || $SED -f $output_objdir/$libname.filter < $orig_export_symbols > $export_symbols
8244c3c9db83Smrg	fi
8245692f60a7Smrg
8246c3c9db83Smrg	tmp_deplibs=
8247c3c9db83Smrg	for test_deplib in $deplibs; do
8248c3c9db83Smrg	  case " $convenience " in
8249c3c9db83Smrg	  *" $test_deplib "*) ;;
8250c3c9db83Smrg	  *)
82513f6d0e1dSmrg	    func_append tmp_deplibs " $test_deplib"
8252c3c9db83Smrg	    ;;
8253c3c9db83Smrg	  esac
8254c3c9db83Smrg	done
8255c3c9db83Smrg	deplibs="$tmp_deplibs"
8256692f60a7Smrg
8257c3c9db83Smrg	if test -n "$convenience"; then
8258c3c9db83Smrg	  if test -n "$whole_archive_flag_spec" &&
8259c3c9db83Smrg	    test "$compiler_needs_object" = yes &&
8260c3c9db83Smrg	    test -z "$libobjs"; then
8261c3c9db83Smrg	    # extract the archives, so we have objects to list.
8262c3c9db83Smrg	    # TODO: could optimize this to just extract one archive.
8263c3c9db83Smrg	    whole_archive_flag_spec=
8264c3c9db83Smrg	  fi
8265c3c9db83Smrg	  if test -n "$whole_archive_flag_spec"; then
8266c3c9db83Smrg	    save_libobjs=$libobjs
8267c3c9db83Smrg	    eval libobjs=\"\$libobjs $whole_archive_flag_spec\"
8268c3c9db83Smrg	    test "X$libobjs" = "X " && libobjs=
8269c3c9db83Smrg	  else
8270c3c9db83Smrg	    gentop="$output_objdir/${outputname}x"
82713f6d0e1dSmrg	    func_append generated " $gentop"
8272692f60a7Smrg
8273c3c9db83Smrg	    func_extract_archives $gentop $convenience
82743f6d0e1dSmrg	    func_append libobjs " $func_extract_archives_result"
8275c3c9db83Smrg	    test "X$libobjs" = "X " && libobjs=
8276c3c9db83Smrg	  fi
82772e71ea71Smrg	fi
8278692f60a7Smrg
8279c3c9db83Smrg	if test "$thread_safe" = yes && test -n "$thread_safe_flag_spec"; then
8280c3c9db83Smrg	  eval flag=\"$thread_safe_flag_spec\"
82813f6d0e1dSmrg	  func_append linker_flags " $flag"
82822e71ea71Smrg	fi
828385ee4c00Smrg
8284c3c9db83Smrg	# Make a backup of the uninstalled library when relinking
82853f6d0e1dSmrg	if test "$opt_mode" = relink; then
8286c3c9db83Smrg	  $opt_dry_run || eval '(cd $output_objdir && $RM ${realname}U && $MV $realname ${realname}U)' || exit $?
8287c3c9db83Smrg	fi
8288692f60a7Smrg
8289c3c9db83Smrg	# Do each of the archive commands.
8290c3c9db83Smrg	if test "$module" = yes && test -n "$module_cmds" ; then
8291c3c9db83Smrg	  if test -n "$export_symbols" && test -n "$module_expsym_cmds"; then
8292c3c9db83Smrg	    eval test_cmds=\"$module_expsym_cmds\"
8293c3c9db83Smrg	    cmds=$module_expsym_cmds
8294c3c9db83Smrg	  else
8295c3c9db83Smrg	    eval test_cmds=\"$module_cmds\"
8296c3c9db83Smrg	    cmds=$module_cmds
8297c3c9db83Smrg	  fi
82982e71ea71Smrg	else
8299c3c9db83Smrg	  if test -n "$export_symbols" && test -n "$archive_expsym_cmds"; then
8300c3c9db83Smrg	    eval test_cmds=\"$archive_expsym_cmds\"
8301c3c9db83Smrg	    cmds=$archive_expsym_cmds
8302c3c9db83Smrg	  else
8303c3c9db83Smrg	    eval test_cmds=\"$archive_cmds\"
8304c3c9db83Smrg	    cmds=$archive_cmds
8305c3c9db83Smrg	  fi
83062e71ea71Smrg	fi
8307692f60a7Smrg
8308c3c9db83Smrg	if test "X$skipped_export" != "X:" &&
8309c3c9db83Smrg	   func_len " $test_cmds" &&
8310c3c9db83Smrg	   len=$func_len_result &&
8311c3c9db83Smrg	   test "$len" -lt "$max_cmd_len" || test "$max_cmd_len" -le -1; then
8312c3c9db83Smrg	  :
8313c3c9db83Smrg	else
8314c3c9db83Smrg	  # The command line is too long to link in one step, link piecewise
8315c3c9db83Smrg	  # or, if using GNU ld and skipped_export is not :, use a linker
8316c3c9db83Smrg	  # script.
8317692f60a7Smrg
8318c3c9db83Smrg	  # Save the value of $output and $libobjs because we want to
8319c3c9db83Smrg	  # use them later.  If we have whole_archive_flag_spec, we
8320c3c9db83Smrg	  # want to use save_libobjs as it was before
8321c3c9db83Smrg	  # whole_archive_flag_spec was expanded, because we can't
8322c3c9db83Smrg	  # assume the linker understands whole_archive_flag_spec.
8323c3c9db83Smrg	  # This may have to be revisited, in case too many
8324c3c9db83Smrg	  # convenience libraries get linked in and end up exceeding
8325c3c9db83Smrg	  # the spec.
8326c3c9db83Smrg	  if test -z "$convenience" || test -z "$whole_archive_flag_spec"; then
8327c3c9db83Smrg	    save_libobjs=$libobjs
8328c3c9db83Smrg	  fi
8329c3c9db83Smrg	  save_output=$output
83303f6d0e1dSmrg	  func_basename "$output"
83313f6d0e1dSmrg	  output_la=$func_basename_result
8332692f60a7Smrg
8333c3c9db83Smrg	  # Clear the reloadable object creation command queue and
8334c3c9db83Smrg	  # initialize k to one.
8335c3c9db83Smrg	  test_cmds=
8336c3c9db83Smrg	  concat_cmds=
8337c3c9db83Smrg	  objlist=
8338c3c9db83Smrg	  last_robj=
8339c3c9db83Smrg	  k=1
8340c3c9db83Smrg
8341c3c9db83Smrg	  if test -n "$save_libobjs" && test "X$skipped_export" != "X:" && test "$with_gnu_ld" = yes; then
8342c3c9db83Smrg	    output=${output_objdir}/${output_la}.lnkscript
8343c3c9db83Smrg	    func_verbose "creating GNU ld script: $output"
83443f6d0e1dSmrg	    echo 'INPUT (' > $output
8345c3c9db83Smrg	    for obj in $save_libobjs
83462e71ea71Smrg	    do
83473f6d0e1dSmrg	      func_to_tool_file "$obj"
83483f6d0e1dSmrg	      $ECHO "$func_to_tool_file_result" >> $output
8349c3c9db83Smrg	    done
83503f6d0e1dSmrg	    echo ')' >> $output
83513f6d0e1dSmrg	    func_append delfiles " $output"
83523f6d0e1dSmrg	    func_to_tool_file "$output"
83533f6d0e1dSmrg	    output=$func_to_tool_file_result
8354c3c9db83Smrg	  elif test -n "$save_libobjs" && test "X$skipped_export" != "X:" && test "X$file_list_spec" != X; then
8355c3c9db83Smrg	    output=${output_objdir}/${output_la}.lnk
8356c3c9db83Smrg	    func_verbose "creating linker input file list: $output"
8357c3c9db83Smrg	    : > $output
8358c3c9db83Smrg	    set x $save_libobjs
8359c3c9db83Smrg	    shift
8360c3c9db83Smrg	    firstobj=
8361c3c9db83Smrg	    if test "$compiler_needs_object" = yes; then
8362c3c9db83Smrg	      firstobj="$1 "
8363c3c9db83Smrg	      shift
8364c3c9db83Smrg	    fi
8365c3c9db83Smrg	    for obj
8366c3c9db83Smrg	    do
83673f6d0e1dSmrg	      func_to_tool_file "$obj"
83683f6d0e1dSmrg	      $ECHO "$func_to_tool_file_result" >> $output
8369c3c9db83Smrg	    done
83703f6d0e1dSmrg	    func_append delfiles " $output"
83713f6d0e1dSmrg	    func_to_tool_file "$output"
83723f6d0e1dSmrg	    output=$firstobj\"$file_list_spec$func_to_tool_file_result\"
8373c3c9db83Smrg	  else
8374c3c9db83Smrg	    if test -n "$save_libobjs"; then
8375c3c9db83Smrg	      func_verbose "creating reloadable object files..."
8376c3c9db83Smrg	      output=$output_objdir/$output_la-${k}.$objext
8377c3c9db83Smrg	      eval test_cmds=\"$reload_cmds\"
8378c3c9db83Smrg	      func_len " $test_cmds"
8379c3c9db83Smrg	      len0=$func_len_result
8380c3c9db83Smrg	      len=$len0
8381c3c9db83Smrg
8382c3c9db83Smrg	      # Loop over the list of objects to be linked.
8383c3c9db83Smrg	      for obj in $save_libobjs
8384c3c9db83Smrg	      do
8385c3c9db83Smrg		func_len " $obj"
8386c3c9db83Smrg		func_arith $len + $func_len_result
8387c3c9db83Smrg		len=$func_arith_result
8388c3c9db83Smrg		if test "X$objlist" = X ||
8389c3c9db83Smrg		   test "$len" -lt "$max_cmd_len"; then
8390c3c9db83Smrg		  func_append objlist " $obj"
8391c3c9db83Smrg		else
8392c3c9db83Smrg		  # The command $test_cmds is almost too long, add a
8393c3c9db83Smrg		  # command to the queue.
8394c3c9db83Smrg		  if test "$k" -eq 1 ; then
8395c3c9db83Smrg		    # The first file doesn't have a previous command to add.
83963f6d0e1dSmrg		    reload_objs=$objlist
83973f6d0e1dSmrg		    eval concat_cmds=\"$reload_cmds\"
8398c3c9db83Smrg		  else
8399c3c9db83Smrg		    # All subsequent reloadable object files will link in
8400c3c9db83Smrg		    # the last one created.
84013f6d0e1dSmrg		    reload_objs="$objlist $last_robj"
84023f6d0e1dSmrg		    eval concat_cmds=\"\$concat_cmds~$reload_cmds~\$RM $last_robj\"
8403c3c9db83Smrg		  fi
8404c3c9db83Smrg		  last_robj=$output_objdir/$output_la-${k}.$objext
8405c3c9db83Smrg		  func_arith $k + 1
8406c3c9db83Smrg		  k=$func_arith_result
8407c3c9db83Smrg		  output=$output_objdir/$output_la-${k}.$objext
84083f6d0e1dSmrg		  objlist=" $obj"
8409c3c9db83Smrg		  func_len " $last_robj"
8410c3c9db83Smrg		  func_arith $len0 + $func_len_result
8411c3c9db83Smrg		  len=$func_arith_result
8412c3c9db83Smrg		fi
8413c3c9db83Smrg	      done
8414c3c9db83Smrg	      # Handle the remaining objects by creating one last
8415c3c9db83Smrg	      # reloadable object file.  All subsequent reloadable object
8416c3c9db83Smrg	      # files will link in the last one created.
8417c3c9db83Smrg	      test -z "$concat_cmds" || concat_cmds=$concat_cmds~
84183f6d0e1dSmrg	      reload_objs="$objlist $last_robj"
84193f6d0e1dSmrg	      eval concat_cmds=\"\${concat_cmds}$reload_cmds\"
8420c3c9db83Smrg	      if test -n "$last_robj"; then
8421c3c9db83Smrg	        eval concat_cmds=\"\${concat_cmds}~\$RM $last_robj\"
8422c3c9db83Smrg	      fi
84233f6d0e1dSmrg	      func_append delfiles " $output"
8424692f60a7Smrg
8425c3c9db83Smrg	    else
8426c3c9db83Smrg	      output=
8427c3c9db83Smrg	    fi
8428692f60a7Smrg
8429c3c9db83Smrg	    if ${skipped_export-false}; then
8430c3c9db83Smrg	      func_verbose "generating symbol list for \`$libname.la'"
8431c3c9db83Smrg	      export_symbols="$output_objdir/$libname.exp"
8432c3c9db83Smrg	      $opt_dry_run || $RM $export_symbols
8433c3c9db83Smrg	      libobjs=$output
8434c3c9db83Smrg	      # Append the command to create the export file.
8435c3c9db83Smrg	      test -z "$concat_cmds" || concat_cmds=$concat_cmds~
8436c3c9db83Smrg	      eval concat_cmds=\"\$concat_cmds$export_symbols_cmds\"
8437c3c9db83Smrg	      if test -n "$last_robj"; then
8438c3c9db83Smrg		eval concat_cmds=\"\$concat_cmds~\$RM $last_robj\"
8439c3c9db83Smrg	      fi
844085ee4c00Smrg	    fi
8441692f60a7Smrg
8442c3c9db83Smrg	    test -n "$save_libobjs" &&
8443c3c9db83Smrg	      func_verbose "creating a temporary reloadable object file: $output"
8444692f60a7Smrg
8445c3c9db83Smrg	    # Loop through the commands generated above and execute them.
8446c3c9db83Smrg	    save_ifs="$IFS"; IFS='~'
8447c3c9db83Smrg	    for cmd in $concat_cmds; do
8448c3c9db83Smrg	      IFS="$save_ifs"
8449c3c9db83Smrg	      $opt_silent || {
8450c3c9db83Smrg		  func_quote_for_expand "$cmd"
8451c3c9db83Smrg		  eval "func_echo $func_quote_for_expand_result"
8452c3c9db83Smrg	      }
8453c3c9db83Smrg	      $opt_dry_run || eval "$cmd" || {
8454c3c9db83Smrg		lt_exit=$?
8455c3c9db83Smrg
8456c3c9db83Smrg		# Restore the uninstalled library and exit
84573f6d0e1dSmrg		if test "$opt_mode" = relink; then
8458c3c9db83Smrg		  ( cd "$output_objdir" && \
8459c3c9db83Smrg		    $RM "${realname}T" && \
8460c3c9db83Smrg		    $MV "${realname}U" "$realname" )
8461c3c9db83Smrg		fi
8462692f60a7Smrg
8463c3c9db83Smrg		exit $lt_exit
8464c3c9db83Smrg	      }
8465c3c9db83Smrg	    done
8466c3c9db83Smrg	    IFS="$save_ifs"
84672e71ea71Smrg
8468c3c9db83Smrg	    if test -n "$export_symbols_regex" && ${skipped_export-false}; then
8469c3c9db83Smrg	      func_show_eval '$EGREP -e "$export_symbols_regex" "$export_symbols" > "${export_symbols}T"'
8470c3c9db83Smrg	      func_show_eval '$MV "${export_symbols}T" "$export_symbols"'
8471692f60a7Smrg	    fi
8472692f60a7Smrg	  fi
8473692f60a7Smrg
8474c3c9db83Smrg          if ${skipped_export-false}; then
8475c3c9db83Smrg	    if test -n "$export_symbols" && test -n "$include_expsyms"; then
8476c3c9db83Smrg	      tmp_export_symbols="$export_symbols"
8477c3c9db83Smrg	      test -n "$orig_export_symbols" && tmp_export_symbols="$orig_export_symbols"
84783f6d0e1dSmrg	      $opt_dry_run || eval '$ECHO "$include_expsyms" | $SP2NL >> "$tmp_export_symbols"'
8479c3c9db83Smrg	    fi
848085ee4c00Smrg
8481c3c9db83Smrg	    if test -n "$orig_export_symbols"; then
8482c3c9db83Smrg	      # The given exports_symbols file has to be filtered, so filter it.
8483c3c9db83Smrg	      func_verbose "filter symbol list for \`$libname.la' to tag DATA exports"
8484c3c9db83Smrg	      # FIXME: $output_objdir/$libname.filter potentially contains lots of
8485c3c9db83Smrg	      # 's' commands which not all seds can handle. GNU sed should be fine
8486c3c9db83Smrg	      # though. Also, the filter scales superlinearly with the number of
8487c3c9db83Smrg	      # global variables. join(1) would be nice here, but unfortunately
8488c3c9db83Smrg	      # isn't a blessed tool.
8489c3c9db83Smrg	      $opt_dry_run || $SED -e '/[ ,]DATA/!d;s,\(.*\)\([ \,].*\),s|^\1$|\1\2|,' < $export_symbols > $output_objdir/$libname.filter
84903f6d0e1dSmrg	      func_append delfiles " $export_symbols $output_objdir/$libname.filter"
8491c3c9db83Smrg	      export_symbols=$output_objdir/$libname.def
8492c3c9db83Smrg	      $opt_dry_run || $SED -f $output_objdir/$libname.filter < $orig_export_symbols > $export_symbols
8493c3c9db83Smrg	    fi
8494c3c9db83Smrg	  fi
8495692f60a7Smrg
8496c3c9db83Smrg	  libobjs=$output
8497c3c9db83Smrg	  # Restore the value of output.
8498c3c9db83Smrg	  output=$save_output
8499692f60a7Smrg
8500c3c9db83Smrg	  if test -n "$convenience" && test -n "$whole_archive_flag_spec"; then
8501c3c9db83Smrg	    eval libobjs=\"\$libobjs $whole_archive_flag_spec\"
8502c3c9db83Smrg	    test "X$libobjs" = "X " && libobjs=
8503c3c9db83Smrg	  fi
8504c3c9db83Smrg	  # Expand the library linking commands again to reset the
8505c3c9db83Smrg	  # value of $libobjs for piecewise linking.
8506692f60a7Smrg
8507c3c9db83Smrg	  # Do each of the archive commands.
8508c3c9db83Smrg	  if test "$module" = yes && test -n "$module_cmds" ; then
8509c3c9db83Smrg	    if test -n "$export_symbols" && test -n "$module_expsym_cmds"; then
8510c3c9db83Smrg	      cmds=$module_expsym_cmds
8511c3c9db83Smrg	    else
8512c3c9db83Smrg	      cmds=$module_cmds
85132e71ea71Smrg	    fi
85142e71ea71Smrg	  else
8515c3c9db83Smrg	    if test -n "$export_symbols" && test -n "$archive_expsym_cmds"; then
8516c3c9db83Smrg	      cmds=$archive_expsym_cmds
8517c3c9db83Smrg	    else
8518c3c9db83Smrg	      cmds=$archive_cmds
8519c3c9db83Smrg	    fi
85202e71ea71Smrg	  fi
8521c3c9db83Smrg	fi
8522692f60a7Smrg
8523c3c9db83Smrg	if test -n "$delfiles"; then
8524c3c9db83Smrg	  # Append the command to remove temporary files to $cmds.
8525c3c9db83Smrg	  eval cmds=\"\$cmds~\$RM $delfiles\"
8526c3c9db83Smrg	fi
8527692f60a7Smrg
8528c3c9db83Smrg	# Add any objects from preloaded convenience libraries
8529c3c9db83Smrg	if test -n "$dlprefiles"; then
8530c3c9db83Smrg	  gentop="$output_objdir/${outputname}x"
85313f6d0e1dSmrg	  func_append generated " $gentop"
8532692f60a7Smrg
8533c3c9db83Smrg	  func_extract_archives $gentop $dlprefiles
85343f6d0e1dSmrg	  func_append libobjs " $func_extract_archives_result"
8535c3c9db83Smrg	  test "X$libobjs" = "X " && libobjs=
8536c3c9db83Smrg	fi
8537692f60a7Smrg
8538c3c9db83Smrg	save_ifs="$IFS"; IFS='~'
8539c3c9db83Smrg	for cmd in $cmds; do
8540c3c9db83Smrg	  IFS="$save_ifs"
8541c3c9db83Smrg	  eval cmd=\"$cmd\"
8542c3c9db83Smrg	  $opt_silent || {
8543c3c9db83Smrg	    func_quote_for_expand "$cmd"
8544c3c9db83Smrg	    eval "func_echo $func_quote_for_expand_result"
8545c3c9db83Smrg	  }
8546c3c9db83Smrg	  $opt_dry_run || eval "$cmd" || {
8547c3c9db83Smrg	    lt_exit=$?
854885ee4c00Smrg
8549c3c9db83Smrg	    # Restore the uninstalled library and exit
85503f6d0e1dSmrg	    if test "$opt_mode" = relink; then
8551c3c9db83Smrg	      ( cd "$output_objdir" && \
8552c3c9db83Smrg	        $RM "${realname}T" && \
8553c3c9db83Smrg		$MV "${realname}U" "$realname" )
8554c3c9db83Smrg	    fi
855585ee4c00Smrg
8556c3c9db83Smrg	    exit $lt_exit
8557c3c9db83Smrg	  }
8558c3c9db83Smrg	done
8559c3c9db83Smrg	IFS="$save_ifs"
856085ee4c00Smrg
8561c3c9db83Smrg	# Restore the uninstalled library and exit
85623f6d0e1dSmrg	if test "$opt_mode" = relink; then
8563c3c9db83Smrg	  $opt_dry_run || eval '(cd $output_objdir && $RM ${realname}T && $MV $realname ${realname}T && $MV ${realname}U $realname)' || exit $?
856485ee4c00Smrg
8565c3c9db83Smrg	  if test -n "$convenience"; then
8566c3c9db83Smrg	    if test -z "$whole_archive_flag_spec"; then
8567c3c9db83Smrg	      func_show_eval '${RM}r "$gentop"'
8568c3c9db83Smrg	    fi
8569c3c9db83Smrg	  fi
857085ee4c00Smrg
8571c3c9db83Smrg	  exit $EXIT_SUCCESS
8572c3c9db83Smrg	fi
8573c3c9db83Smrg
8574c3c9db83Smrg	# Create links to the real library.
8575c3c9db83Smrg	for linkname in $linknames; do
8576c3c9db83Smrg	  if test "$realname" != "$linkname"; then
8577c3c9db83Smrg	    func_show_eval '(cd "$output_objdir" && $RM "$linkname" && $LN_S "$realname" "$linkname")' 'exit $?'
85782e71ea71Smrg	  fi
85792e71ea71Smrg	done
858085ee4c00Smrg
8581c3c9db83Smrg	# If -module or -export-dynamic was specified, set the dlname.
8582c3c9db83Smrg	if test "$module" = yes || test "$export_dynamic" = yes; then
8583c3c9db83Smrg	  # On all known operating systems, these are identical.
8584c3c9db83Smrg	  dlname="$soname"
8585c3c9db83Smrg	fi
8586c3c9db83Smrg      fi
8587692f60a7Smrg      ;;
8588692f60a7Smrg
8589c3c9db83Smrg    obj)
8590c3c9db83Smrg      if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then
8591c3c9db83Smrg	func_warning "\`-dlopen' is ignored for objects"
8592c3c9db83Smrg      fi
85932e71ea71Smrg
8594c3c9db83Smrg      case " $deplibs" in
8595c3c9db83Smrg      *\ -l* | *\ -L*)
8596c3c9db83Smrg	func_warning "\`-l' and \`-L' are ignored for objects" ;;
859785ee4c00Smrg      esac
8598692f60a7Smrg
8599c3c9db83Smrg      test -n "$rpath" && \
8600c3c9db83Smrg	func_warning "\`-rpath' is ignored for objects"
8601c3c9db83Smrg
8602c3c9db83Smrg      test -n "$xrpath" && \
8603c3c9db83Smrg	func_warning "\`-R' is ignored for objects"
8604692f60a7Smrg
8605c3c9db83Smrg      test -n "$vinfo" && \
8606c3c9db83Smrg	func_warning "\`-version-info' is ignored for objects"
860785ee4c00Smrg
8608c3c9db83Smrg      test -n "$release" && \
8609c3c9db83Smrg	func_warning "\`-release' is ignored for objects"
8610c3c9db83Smrg
8611c3c9db83Smrg      case $output in
8612c3c9db83Smrg      *.lo)
8613c3c9db83Smrg	test -n "$objs$old_deplibs" && \
8614c3c9db83Smrg	  func_fatal_error "cannot build library object \`$output' from non-libtool objects"
8615c3c9db83Smrg
8616c3c9db83Smrg	libobj=$output
8617c3c9db83Smrg	func_lo2o "$libobj"
8618c3c9db83Smrg	obj=$func_lo2o_result
86192e71ea71Smrg	;;
86202e71ea71Smrg      *)
8621c3c9db83Smrg	libobj=
8622c3c9db83Smrg	obj="$output"
8623692f60a7Smrg	;;
862485ee4c00Smrg      esac
8625692f60a7Smrg
8626c3c9db83Smrg      # Delete the old objects.
8627c3c9db83Smrg      $opt_dry_run || $RM $obj $libobj
8628692f60a7Smrg
8629c3c9db83Smrg      # Objects from convenience libraries.  This assumes
8630c3c9db83Smrg      # single-version convenience libraries.  Whenever we create
8631c3c9db83Smrg      # different ones for PIC/non-PIC, this we'll have to duplicate
8632c3c9db83Smrg      # the extraction.
8633c3c9db83Smrg      reload_conv_objs=
8634c3c9db83Smrg      gentop=
8635c3c9db83Smrg      # reload_cmds runs $LD directly, so let us get rid of
8636c3c9db83Smrg      # -Wl from whole_archive_flag_spec and hope we can get by with
8637c3c9db83Smrg      # turning comma into space..
8638c3c9db83Smrg      wl=
8639692f60a7Smrg
8640c3c9db83Smrg      if test -n "$convenience"; then
8641c3c9db83Smrg	if test -n "$whole_archive_flag_spec"; then
8642c3c9db83Smrg	  eval tmp_whole_archive_flags=\"$whole_archive_flag_spec\"
86433f6d0e1dSmrg	  reload_conv_objs=$reload_objs\ `$ECHO "$tmp_whole_archive_flags" | $SED 's|,| |g'`
8644c3c9db83Smrg	else
8645c3c9db83Smrg	  gentop="$output_objdir/${obj}x"
86463f6d0e1dSmrg	  func_append generated " $gentop"
86472e71ea71Smrg
8648c3c9db83Smrg	  func_extract_archives $gentop $convenience
8649c3c9db83Smrg	  reload_conv_objs="$reload_objs $func_extract_archives_result"
8650c3c9db83Smrg	fi
86512e71ea71Smrg      fi
86522e71ea71Smrg
86533f6d0e1dSmrg      # If we're not building shared, we need to use non_pic_objs
86543f6d0e1dSmrg      test "$build_libtool_libs" != yes && libobjs="$non_pic_objects"
86553f6d0e1dSmrg
8656c3c9db83Smrg      # Create the old-style object.
86573f6d0e1dSmrg      reload_objs="$objs$old_deplibs "`$ECHO "$libobjs" | $SP2NL | $SED "/\.${libext}$/d; /\.lib$/d; $lo2o" | $NL2SP`" $reload_conv_objs" ### testsuite: skip nested quoting test
86582e71ea71Smrg
8659c3c9db83Smrg      output="$obj"
8660c3c9db83Smrg      func_execute_cmds "$reload_cmds" 'exit $?'
86612e71ea71Smrg
8662c3c9db83Smrg      # Exit if we aren't doing a library object file.
8663c3c9db83Smrg      if test -z "$libobj"; then
8664c3c9db83Smrg	if test -n "$gentop"; then
8665c3c9db83Smrg	  func_show_eval '${RM}r "$gentop"'
8666c3c9db83Smrg	fi
8667c3c9db83Smrg
8668c3c9db83Smrg	exit $EXIT_SUCCESS
86692e71ea71Smrg      fi
8670c3c9db83Smrg
8671c3c9db83Smrg      if test "$build_libtool_libs" != yes; then
8672c3c9db83Smrg	if test -n "$gentop"; then
8673c3c9db83Smrg	  func_show_eval '${RM}r "$gentop"'
8674c3c9db83Smrg	fi
8675c3c9db83Smrg
8676c3c9db83Smrg	# Create an invalid libtool object if no PIC, so that we don't
8677c3c9db83Smrg	# accidentally link it into a program.
8678c3c9db83Smrg	# $show "echo timestamp > $libobj"
8679c3c9db83Smrg	# $opt_dry_run || eval "echo timestamp > $libobj" || exit $?
8680c3c9db83Smrg	exit $EXIT_SUCCESS
8681c3c9db83Smrg      fi
8682c3c9db83Smrg
8683c3c9db83Smrg      if test -n "$pic_flag" || test "$pic_mode" != default; then
8684c3c9db83Smrg	# Only do commands if we really have different PIC objects.
8685c3c9db83Smrg	reload_objs="$libobjs $reload_conv_objs"
8686c3c9db83Smrg	output="$libobj"
8687c3c9db83Smrg	func_execute_cmds "$reload_cmds" 'exit $?'
8688c3c9db83Smrg      fi
8689c3c9db83Smrg
8690c3c9db83Smrg      if test -n "$gentop"; then
8691c3c9db83Smrg	func_show_eval '${RM}r "$gentop"'
8692c3c9db83Smrg      fi
8693c3c9db83Smrg
8694c3c9db83Smrg      exit $EXIT_SUCCESS
86952e71ea71Smrg      ;;
8696692f60a7Smrg
8697c3c9db83Smrg    prog)
8698c3c9db83Smrg      case $host in
8699c3c9db83Smrg	*cygwin*) func_stripname '' '.exe' "$output"
8700c3c9db83Smrg	          output=$func_stripname_result.exe;;
8701c3c9db83Smrg      esac
8702c3c9db83Smrg      test -n "$vinfo" && \
8703c3c9db83Smrg	func_warning "\`-version-info' is ignored for programs"
8704692f60a7Smrg
8705c3c9db83Smrg      test -n "$release" && \
8706c3c9db83Smrg	func_warning "\`-release' is ignored for programs"
8707692f60a7Smrg
8708c3c9db83Smrg      test "$preload" = yes \
8709c3c9db83Smrg        && test "$dlopen_support" = unknown \
8710c3c9db83Smrg	&& test "$dlopen_self" = unknown \
8711c3c9db83Smrg	&& test "$dlopen_self_static" = unknown && \
8712c3c9db83Smrg	  func_warning "\`LT_INIT([dlopen])' not used. Assuming no dlopen support."
8713c3c9db83Smrg
8714c3c9db83Smrg      case $host in
8715c3c9db83Smrg      *-*-rhapsody* | *-*-darwin1.[012])
8716c3c9db83Smrg	# On Rhapsody replace the C library is the System framework
87173f6d0e1dSmrg	compile_deplibs=`$ECHO " $compile_deplibs" | $SED 's/ -lc / System.ltframework /'`
87183f6d0e1dSmrg	finalize_deplibs=`$ECHO " $finalize_deplibs" | $SED 's/ -lc / System.ltframework /'`
87192e71ea71Smrg	;;
8720c3c9db83Smrg      esac
87212e71ea71Smrg
8722c3c9db83Smrg      case $host in
8723c3c9db83Smrg      *-*-darwin*)
8724c3c9db83Smrg	# Don't allow lazy linking, it breaks C++ global constructors
8725c3c9db83Smrg	# But is supposedly fixed on 10.4 or later (yay!).
8726c3c9db83Smrg	if test "$tagname" = CXX ; then
8727c3c9db83Smrg	  case ${MACOSX_DEPLOYMENT_TARGET-10.0} in
8728c3c9db83Smrg	    10.[0123])
87293f6d0e1dSmrg	      func_append compile_command " ${wl}-bind_at_load"
87303f6d0e1dSmrg	      func_append finalize_command " ${wl}-bind_at_load"
8731c3c9db83Smrg	    ;;
8732c3c9db83Smrg	  esac
87332e71ea71Smrg	fi
8734c3c9db83Smrg	# Time to change all our "foo.ltframework" stuff back to "-framework foo"
87353f6d0e1dSmrg	compile_deplibs=`$ECHO " $compile_deplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'`
87363f6d0e1dSmrg	finalize_deplibs=`$ECHO " $finalize_deplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'`
8737c3c9db83Smrg	;;
8738c3c9db83Smrg      esac
87392e71ea71Smrg
87402e71ea71Smrg
8741c3c9db83Smrg      # move library search paths that coincide with paths to not yet
8742c3c9db83Smrg      # installed libraries to the beginning of the library search list
8743c3c9db83Smrg      new_libs=
8744c3c9db83Smrg      for path in $notinst_path; do
8745c3c9db83Smrg	case " $new_libs " in
8746c3c9db83Smrg	*" -L$path/$objdir "*) ;;
8747c3c9db83Smrg	*)
8748c3c9db83Smrg	  case " $compile_deplibs " in
8749c3c9db83Smrg	  *" -L$path/$objdir "*)
87503f6d0e1dSmrg	    func_append new_libs " -L$path/$objdir" ;;
875185ee4c00Smrg	  esac
8752c3c9db83Smrg	  ;;
8753c3c9db83Smrg	esac
8754c3c9db83Smrg      done
8755c3c9db83Smrg      for deplib in $compile_deplibs; do
8756c3c9db83Smrg	case $deplib in
8757c3c9db83Smrg	-L*)
8758c3c9db83Smrg	  case " $new_libs " in
8759c3c9db83Smrg	  *" $deplib "*) ;;
87603f6d0e1dSmrg	  *) func_append new_libs " $deplib" ;;
876185ee4c00Smrg	  esac
8762c3c9db83Smrg	  ;;
87633f6d0e1dSmrg	*) func_append new_libs " $deplib" ;;
8764c3c9db83Smrg	esac
8765c3c9db83Smrg      done
8766c3c9db83Smrg      compile_deplibs="$new_libs"
8767692f60a7Smrg
87682e71ea71Smrg
87693f6d0e1dSmrg      func_append compile_command " $compile_deplibs"
87703f6d0e1dSmrg      func_append finalize_command " $finalize_deplibs"
87712e71ea71Smrg
8772c3c9db83Smrg      if test -n "$rpath$xrpath"; then
8773c3c9db83Smrg	# If the user specified any rpath flags, then add them.
8774c3c9db83Smrg	for libdir in $rpath $xrpath; do
8775c3c9db83Smrg	  # This is the magic to use -rpath.
8776c3c9db83Smrg	  case "$finalize_rpath " in
8777c3c9db83Smrg	  *" $libdir "*) ;;
87783f6d0e1dSmrg	  *) func_append finalize_rpath " $libdir" ;;
8779c3c9db83Smrg	  esac
8780c3c9db83Smrg	done
8781c3c9db83Smrg      fi
87822e71ea71Smrg
8783c3c9db83Smrg      # Now hardcode the library paths
8784c3c9db83Smrg      rpath=
8785c3c9db83Smrg      hardcode_libdirs=
8786c3c9db83Smrg      for libdir in $compile_rpath $finalize_rpath; do
8787c3c9db83Smrg	if test -n "$hardcode_libdir_flag_spec"; then
8788c3c9db83Smrg	  if test -n "$hardcode_libdir_separator"; then
8789c3c9db83Smrg	    if test -z "$hardcode_libdirs"; then
8790c3c9db83Smrg	      hardcode_libdirs="$libdir"
8791c3c9db83Smrg	    else
8792c3c9db83Smrg	      # Just accumulate the unique libdirs.
8793c3c9db83Smrg	      case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in
8794c3c9db83Smrg	      *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*)
8795c3c9db83Smrg		;;
8796c3c9db83Smrg	      *)
87973f6d0e1dSmrg		func_append hardcode_libdirs "$hardcode_libdir_separator$libdir"
8798c3c9db83Smrg		;;
8799c3c9db83Smrg	      esac
8800c3c9db83Smrg	    fi
88012e71ea71Smrg	  else
8802c3c9db83Smrg	    eval flag=\"$hardcode_libdir_flag_spec\"
88033f6d0e1dSmrg	    func_append rpath " $flag"
88042e71ea71Smrg	  fi
8805c3c9db83Smrg	elif test -n "$runpath_var"; then
8806c3c9db83Smrg	  case "$perm_rpath " in
8807c3c9db83Smrg	  *" $libdir "*) ;;
88083f6d0e1dSmrg	  *) func_append perm_rpath " $libdir" ;;
8809c3c9db83Smrg	  esac
8810c3c9db83Smrg	fi
8811c3c9db83Smrg	case $host in
8812c3c9db83Smrg	*-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-cegcc*)
8813c3c9db83Smrg	  testbindir=`${ECHO} "$libdir" | ${SED} -e 's*/lib$*/bin*'`
8814c3c9db83Smrg	  case :$dllsearchpath: in
8815c3c9db83Smrg	  *":$libdir:"*) ;;
8816c3c9db83Smrg	  ::) dllsearchpath=$libdir;;
88173f6d0e1dSmrg	  *) func_append dllsearchpath ":$libdir";;
8818c3c9db83Smrg	  esac
8819c3c9db83Smrg	  case :$dllsearchpath: in
8820c3c9db83Smrg	  *":$testbindir:"*) ;;
8821c3c9db83Smrg	  ::) dllsearchpath=$testbindir;;
88223f6d0e1dSmrg	  *) func_append dllsearchpath ":$testbindir";;
8823c3c9db83Smrg	  esac
8824c3c9db83Smrg	  ;;
8825c3c9db83Smrg	esac
8826c3c9db83Smrg      done
8827c3c9db83Smrg      # Substitute the hardcoded libdirs into the rpath.
8828c3c9db83Smrg      if test -n "$hardcode_libdir_separator" &&
8829c3c9db83Smrg	 test -n "$hardcode_libdirs"; then
8830c3c9db83Smrg	libdir="$hardcode_libdirs"
8831c3c9db83Smrg	eval rpath=\" $hardcode_libdir_flag_spec\"
8832c3c9db83Smrg      fi
8833c3c9db83Smrg      compile_rpath="$rpath"
88342e71ea71Smrg
8835c3c9db83Smrg      rpath=
8836c3c9db83Smrg      hardcode_libdirs=
8837c3c9db83Smrg      for libdir in $finalize_rpath; do
8838c3c9db83Smrg	if test -n "$hardcode_libdir_flag_spec"; then
8839c3c9db83Smrg	  if test -n "$hardcode_libdir_separator"; then
8840c3c9db83Smrg	    if test -z "$hardcode_libdirs"; then
8841c3c9db83Smrg	      hardcode_libdirs="$libdir"
8842c3c9db83Smrg	    else
8843c3c9db83Smrg	      # Just accumulate the unique libdirs.
8844c3c9db83Smrg	      case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in
8845c3c9db83Smrg	      *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*)
8846c3c9db83Smrg		;;
8847c3c9db83Smrg	      *)
88483f6d0e1dSmrg		func_append hardcode_libdirs "$hardcode_libdir_separator$libdir"
8849c3c9db83Smrg		;;
8850c3c9db83Smrg	      esac
8851c3c9db83Smrg	    fi
8852692f60a7Smrg	  else
8853c3c9db83Smrg	    eval flag=\"$hardcode_libdir_flag_spec\"
88543f6d0e1dSmrg	    func_append rpath " $flag"
8855692f60a7Smrg	  fi
8856c3c9db83Smrg	elif test -n "$runpath_var"; then
8857c3c9db83Smrg	  case "$finalize_perm_rpath " in
8858c3c9db83Smrg	  *" $libdir "*) ;;
88593f6d0e1dSmrg	  *) func_append finalize_perm_rpath " $libdir" ;;
8860c3c9db83Smrg	  esac
8861692f60a7Smrg	fi
8862c3c9db83Smrg      done
8863c3c9db83Smrg      # Substitute the hardcoded libdirs into the rpath.
8864c3c9db83Smrg      if test -n "$hardcode_libdir_separator" &&
8865c3c9db83Smrg	 test -n "$hardcode_libdirs"; then
8866c3c9db83Smrg	libdir="$hardcode_libdirs"
8867c3c9db83Smrg	eval rpath=\" $hardcode_libdir_flag_spec\"
8868c3c9db83Smrg      fi
8869c3c9db83Smrg      finalize_rpath="$rpath"
8870692f60a7Smrg
8871c3c9db83Smrg      if test -n "$libobjs" && test "$build_old_libs" = yes; then
8872c3c9db83Smrg	# Transform all the library objects into standard objects.
88733f6d0e1dSmrg	compile_command=`$ECHO "$compile_command" | $SP2NL | $SED "$lo2o" | $NL2SP`
88743f6d0e1dSmrg	finalize_command=`$ECHO "$finalize_command" | $SP2NL | $SED "$lo2o" | $NL2SP`
8875c3c9db83Smrg      fi
8876692f60a7Smrg
8877c3c9db83Smrg      func_generate_dlsyms "$outputname" "@PROGRAM@" "no"
8878692f60a7Smrg
8879c3c9db83Smrg      # template prelinking step
8880c3c9db83Smrg      if test -n "$prelink_cmds"; then
8881c3c9db83Smrg	func_execute_cmds "$prelink_cmds" 'exit $?'
8882c3c9db83Smrg      fi
8883692f60a7Smrg
8884c3c9db83Smrg      wrappers_required=yes
8885c3c9db83Smrg      case $host in
88863f6d0e1dSmrg      *cegcc* | *mingw32ce*)
88873f6d0e1dSmrg        # Disable wrappers for cegcc and mingw32ce hosts, we are cross compiling anyway.
88883f6d0e1dSmrg        wrappers_required=no
88893f6d0e1dSmrg        ;;
8890c3c9db83Smrg      *cygwin* | *mingw* )
8891c3c9db83Smrg        if test "$build_libtool_libs" != yes; then
8892c3c9db83Smrg          wrappers_required=no
8893c3c9db83Smrg        fi
8894c3c9db83Smrg        ;;
8895c3c9db83Smrg      *)
8896c3c9db83Smrg        if test "$need_relink" = no || test "$build_libtool_libs" != yes; then
8897c3c9db83Smrg          wrappers_required=no
8898c3c9db83Smrg        fi
8899c3c9db83Smrg        ;;
8900c3c9db83Smrg      esac
8901c3c9db83Smrg      if test "$wrappers_required" = no; then
8902c3c9db83Smrg	# Replace the output file specification.
89033f6d0e1dSmrg	compile_command=`$ECHO "$compile_command" | $SED 's%@OUTPUT@%'"$output"'%g'`
8904c3c9db83Smrg	link_command="$compile_command$compile_rpath"
8905692f60a7Smrg
8906c3c9db83Smrg	# We have no uninstalled library dependencies, so finalize right now.
8907c3c9db83Smrg	exit_status=0
8908c3c9db83Smrg	func_show_eval "$link_command" 'exit_status=$?'
8909692f60a7Smrg
89103f6d0e1dSmrg	if test -n "$postlink_cmds"; then
89113f6d0e1dSmrg	  func_to_tool_file "$output"
89123f6d0e1dSmrg	  postlink_cmds=`func_echo_all "$postlink_cmds" | $SED -e 's%@OUTPUT@%'"$output"'%g' -e 's%@TOOL_OUTPUT@%'"$func_to_tool_file_result"'%g'`
89133f6d0e1dSmrg	  func_execute_cmds "$postlink_cmds" 'exit $?'
89143f6d0e1dSmrg	fi
89153f6d0e1dSmrg
8916c3c9db83Smrg	# Delete the generated files.
8917c3c9db83Smrg	if test -f "$output_objdir/${outputname}S.${objext}"; then
8918c3c9db83Smrg	  func_show_eval '$RM "$output_objdir/${outputname}S.${objext}"'
8919692f60a7Smrg	fi
8920692f60a7Smrg
8921c3c9db83Smrg	exit $exit_status
8922c3c9db83Smrg      fi
8923692f60a7Smrg
8924c3c9db83Smrg      if test -n "$compile_shlibpath$finalize_shlibpath"; then
8925c3c9db83Smrg	compile_command="$shlibpath_var=\"$compile_shlibpath$finalize_shlibpath\$$shlibpath_var\" $compile_command"
8926c3c9db83Smrg      fi
8927c3c9db83Smrg      if test -n "$finalize_shlibpath"; then
8928c3c9db83Smrg	finalize_command="$shlibpath_var=\"$finalize_shlibpath\$$shlibpath_var\" $finalize_command"
8929c3c9db83Smrg      fi
89302e71ea71Smrg
8931c3c9db83Smrg      compile_var=
8932c3c9db83Smrg      finalize_var=
8933c3c9db83Smrg      if test -n "$runpath_var"; then
8934c3c9db83Smrg	if test -n "$perm_rpath"; then
8935c3c9db83Smrg	  # We should set the runpath_var.
8936c3c9db83Smrg	  rpath=
8937c3c9db83Smrg	  for dir in $perm_rpath; do
89383f6d0e1dSmrg	    func_append rpath "$dir:"
8939c3c9db83Smrg	  done
8940c3c9db83Smrg	  compile_var="$runpath_var=\"$rpath\$$runpath_var\" "
8941692f60a7Smrg	fi
8942c3c9db83Smrg	if test -n "$finalize_perm_rpath"; then
8943c3c9db83Smrg	  # We should set the runpath_var.
8944c3c9db83Smrg	  rpath=
8945c3c9db83Smrg	  for dir in $finalize_perm_rpath; do
89463f6d0e1dSmrg	    func_append rpath "$dir:"
8947c3c9db83Smrg	  done
8948c3c9db83Smrg	  finalize_var="$runpath_var=\"$rpath\$$runpath_var\" "
8949692f60a7Smrg	fi
8950c3c9db83Smrg      fi
8951692f60a7Smrg
8952c3c9db83Smrg      if test "$no_install" = yes; then
8953c3c9db83Smrg	# We don't need to create a wrapper script.
8954c3c9db83Smrg	link_command="$compile_var$compile_command$compile_rpath"
8955c3c9db83Smrg	# Replace the output file specification.
89563f6d0e1dSmrg	link_command=`$ECHO "$link_command" | $SED 's%@OUTPUT@%'"$output"'%g'`
8957c3c9db83Smrg	# Delete the old output file.
8958c3c9db83Smrg	$opt_dry_run || $RM $output
8959c3c9db83Smrg	# Link the executable and exit
8960c3c9db83Smrg	func_show_eval "$link_command" 'exit $?'
89613f6d0e1dSmrg
89623f6d0e1dSmrg	if test -n "$postlink_cmds"; then
89633f6d0e1dSmrg	  func_to_tool_file "$output"
89643f6d0e1dSmrg	  postlink_cmds=`func_echo_all "$postlink_cmds" | $SED -e 's%@OUTPUT@%'"$output"'%g' -e 's%@TOOL_OUTPUT@%'"$func_to_tool_file_result"'%g'`
89653f6d0e1dSmrg	  func_execute_cmds "$postlink_cmds" 'exit $?'
89663f6d0e1dSmrg	fi
89673f6d0e1dSmrg
89682e71ea71Smrg	exit $EXIT_SUCCESS
8969c3c9db83Smrg      fi
897085ee4c00Smrg
8971c3c9db83Smrg      if test "$hardcode_action" = relink; then
8972c3c9db83Smrg	# Fast installation is not supported
8973c3c9db83Smrg	link_command="$compile_var$compile_command$compile_rpath"
8974c3c9db83Smrg	relink_command="$finalize_var$finalize_command$finalize_rpath"
8975c3c9db83Smrg
8976c3c9db83Smrg	func_warning "this platform does not like uninstalled shared libraries"
8977c3c9db83Smrg	func_warning "\`$output' will be relinked during installation"
8978c3c9db83Smrg      else
8979c3c9db83Smrg	if test "$fast_install" != no; then
8980c3c9db83Smrg	  link_command="$finalize_var$compile_command$finalize_rpath"
8981c3c9db83Smrg	  if test "$fast_install" = yes; then
89823f6d0e1dSmrg	    relink_command=`$ECHO "$compile_var$compile_command$compile_rpath" | $SED 's%@OUTPUT@%\$progdir/\$file%g'`
8983c3c9db83Smrg	  else
8984c3c9db83Smrg	    # fast_install is set to needless
8985c3c9db83Smrg	    relink_command=
8986c3c9db83Smrg	  fi
8987692f60a7Smrg	else
8988c3c9db83Smrg	  link_command="$compile_var$compile_command$compile_rpath"
8989c3c9db83Smrg	  relink_command="$finalize_var$finalize_command$finalize_rpath"
8990692f60a7Smrg	fi
8991c3c9db83Smrg      fi
8992692f60a7Smrg
8993c3c9db83Smrg      # Replace the output file specification.
89943f6d0e1dSmrg      link_command=`$ECHO "$link_command" | $SED 's%@OUTPUT@%'"$output_objdir/$outputname"'%g'`
8995692f60a7Smrg
8996c3c9db83Smrg      # Delete the old output files.
8997c3c9db83Smrg      $opt_dry_run || $RM $output $output_objdir/$outputname $output_objdir/lt-$outputname
8998692f60a7Smrg
8999c3c9db83Smrg      func_show_eval "$link_command" 'exit $?'
90002e71ea71Smrg
90013f6d0e1dSmrg      if test -n "$postlink_cmds"; then
90023f6d0e1dSmrg	func_to_tool_file "$output_objdir/$outputname"
90033f6d0e1dSmrg	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'`
90043f6d0e1dSmrg	func_execute_cmds "$postlink_cmds" 'exit $?'
90053f6d0e1dSmrg      fi
90063f6d0e1dSmrg
9007c3c9db83Smrg      # Now create the wrapper script.
9008c3c9db83Smrg      func_verbose "creating $output"
90092e71ea71Smrg
9010c3c9db83Smrg      # Quote the relink command for shipping.
9011c3c9db83Smrg      if test -n "$relink_command"; then
9012c3c9db83Smrg	# Preserve any variables that may affect compiler behavior
9013c3c9db83Smrg	for var in $variables_saved_for_relink; do
9014c3c9db83Smrg	  if eval test -z \"\${$var+set}\"; then
9015c3c9db83Smrg	    relink_command="{ test -z \"\${$var+set}\" || $lt_unset $var || { $var=; export $var; }; }; $relink_command"
9016c3c9db83Smrg	  elif eval var_value=\$$var; test -z "$var_value"; then
9017c3c9db83Smrg	    relink_command="$var=; export $var; $relink_command"
9018692f60a7Smrg	  else
9019c3c9db83Smrg	    func_quote_for_eval "$var_value"
9020c3c9db83Smrg	    relink_command="$var=$func_quote_for_eval_result; export $var; $relink_command"
9021692f60a7Smrg	  fi
9022c3c9db83Smrg	done
9023c3c9db83Smrg	relink_command="(cd `pwd`; $relink_command)"
90243f6d0e1dSmrg	relink_command=`$ECHO "$relink_command" | $SED "$sed_quote_subst"`
9025c3c9db83Smrg      fi
9026c3c9db83Smrg
9027c3c9db83Smrg      # Only actually do things if not in dry run mode.
9028c3c9db83Smrg      $opt_dry_run || {
9029c3c9db83Smrg	# win32 will think the script is a binary if it has
9030c3c9db83Smrg	# a .exe suffix, so we strip it off here.
9031c3c9db83Smrg	case $output in
9032c3c9db83Smrg	  *.exe) func_stripname '' '.exe' "$output"
9033c3c9db83Smrg	         output=$func_stripname_result ;;
9034c3c9db83Smrg	esac
9035c3c9db83Smrg	# test for cygwin because mv fails w/o .exe extensions
9036c3c9db83Smrg	case $host in
9037c3c9db83Smrg	  *cygwin*)
9038c3c9db83Smrg	    exeext=.exe
9039c3c9db83Smrg	    func_stripname '' '.exe' "$outputname"
9040c3c9db83Smrg	    outputname=$func_stripname_result ;;
9041c3c9db83Smrg	  *) exeext= ;;
9042692f60a7Smrg	esac
9043c3c9db83Smrg	case $host in
9044c3c9db83Smrg	  *cygwin* | *mingw* )
9045c3c9db83Smrg	    func_dirname_and_basename "$output" "" "."
9046c3c9db83Smrg	    output_name=$func_basename_result
9047c3c9db83Smrg	    output_path=$func_dirname_result
9048c3c9db83Smrg	    cwrappersource="$output_path/$objdir/lt-$output_name.c"
9049c3c9db83Smrg	    cwrapper="$output_path/$output_name.exe"
9050c3c9db83Smrg	    $RM $cwrappersource $cwrapper
9051c3c9db83Smrg	    trap "$RM $cwrappersource $cwrapper; exit $EXIT_FAILURE" 1 2 15
9052c3c9db83Smrg
9053c3c9db83Smrg	    func_emit_cwrapperexe_src > $cwrappersource
9054c3c9db83Smrg
9055c3c9db83Smrg	    # The wrapper executable is built using the $host compiler,
9056c3c9db83Smrg	    # because it contains $host paths and files. If cross-
9057c3c9db83Smrg	    # compiling, it, like the target executable, must be
9058c3c9db83Smrg	    # executed on the $host or under an emulation environment.
9059c3c9db83Smrg	    $opt_dry_run || {
9060c3c9db83Smrg	      $LTCC $LTCFLAGS -o $cwrapper $cwrappersource
9061c3c9db83Smrg	      $STRIP $cwrapper
9062c3c9db83Smrg	    }
9063692f60a7Smrg
9064c3c9db83Smrg	    # Now, create the wrapper script for func_source use:
9065c3c9db83Smrg	    func_ltwrapper_scriptname $cwrapper
9066c3c9db83Smrg	    $RM $func_ltwrapper_scriptname_result
9067c3c9db83Smrg	    trap "$RM $func_ltwrapper_scriptname_result; exit $EXIT_FAILURE" 1 2 15
9068c3c9db83Smrg	    $opt_dry_run || {
9069c3c9db83Smrg	      # note: this script will not be executed, so do not chmod.
9070c3c9db83Smrg	      if test "x$build" = "x$host" ; then
9071c3c9db83Smrg		$cwrapper --lt-dump-script > $func_ltwrapper_scriptname_result
9072c3c9db83Smrg	      else
9073c3c9db83Smrg		func_emit_wrapper no > $func_ltwrapper_scriptname_result
9074c3c9db83Smrg	      fi
9075c3c9db83Smrg	    }
9076c3c9db83Smrg	  ;;
9077c3c9db83Smrg	  * )
9078c3c9db83Smrg	    $RM $output
9079c3c9db83Smrg	    trap "$RM $output; exit $EXIT_FAILURE" 1 2 15
9080692f60a7Smrg
9081c3c9db83Smrg	    func_emit_wrapper no > $output
9082c3c9db83Smrg	    chmod +x $output
9083c3c9db83Smrg	  ;;
9084c3c9db83Smrg	esac
9085c3c9db83Smrg      }
9086c3c9db83Smrg      exit $EXIT_SUCCESS
9087c3c9db83Smrg      ;;
9088c3c9db83Smrg    esac
9089692f60a7Smrg
9090c3c9db83Smrg    # See if we need to build an old-fashioned archive.
9091c3c9db83Smrg    for oldlib in $oldlibs; do
9092692f60a7Smrg
9093c3c9db83Smrg      if test "$build_libtool_libs" = convenience; then
9094c3c9db83Smrg	oldobjs="$libobjs_save $symfileobj"
9095c3c9db83Smrg	addlibs="$convenience"
9096c3c9db83Smrg	build_libtool_libs=no
9097c3c9db83Smrg      else
9098c3c9db83Smrg	if test "$build_libtool_libs" = module; then
9099c3c9db83Smrg	  oldobjs="$libobjs_save"
9100c3c9db83Smrg	  build_libtool_libs=no
9101c3c9db83Smrg	else
9102c3c9db83Smrg	  oldobjs="$old_deplibs $non_pic_objects"
9103c3c9db83Smrg	  if test "$preload" = yes && test -f "$symfileobj"; then
91043f6d0e1dSmrg	    func_append oldobjs " $symfileobj"
9105c3c9db83Smrg	  fi
9106c3c9db83Smrg	fi
9107c3c9db83Smrg	addlibs="$old_convenience"
9108692f60a7Smrg      fi
9109692f60a7Smrg
9110c3c9db83Smrg      if test -n "$addlibs"; then
9111c3c9db83Smrg	gentop="$output_objdir/${outputname}x"
91123f6d0e1dSmrg	func_append generated " $gentop"
9113692f60a7Smrg
9114c3c9db83Smrg	func_extract_archives $gentop $addlibs
91153f6d0e1dSmrg	func_append oldobjs " $func_extract_archives_result"
9116c3c9db83Smrg      fi
9117692f60a7Smrg
9118c3c9db83Smrg      # Do each command in the archive commands.
9119c3c9db83Smrg      if test -n "$old_archive_from_new_cmds" && test "$build_libtool_libs" = yes; then
9120c3c9db83Smrg	cmds=$old_archive_from_new_cmds
9121c3c9db83Smrg      else
9122692f60a7Smrg
9123c3c9db83Smrg	# Add any objects from preloaded convenience libraries
9124c3c9db83Smrg	if test -n "$dlprefiles"; then
9125c3c9db83Smrg	  gentop="$output_objdir/${outputname}x"
91263f6d0e1dSmrg	  func_append generated " $gentop"
9127692f60a7Smrg
9128c3c9db83Smrg	  func_extract_archives $gentop $dlprefiles
91293f6d0e1dSmrg	  func_append oldobjs " $func_extract_archives_result"
9130c3c9db83Smrg	fi
9131692f60a7Smrg
9132c3c9db83Smrg	# POSIX demands no paths to be encoded in archives.  We have
9133c3c9db83Smrg	# to avoid creating archives with duplicate basenames if we
9134c3c9db83Smrg	# might have to extract them afterwards, e.g., when creating a
9135c3c9db83Smrg	# static archive out of a convenience library, or when linking
9136c3c9db83Smrg	# the entirety of a libtool archive into another (currently
9137c3c9db83Smrg	# not supported by libtool).
9138c3c9db83Smrg	if (for obj in $oldobjs
9139c3c9db83Smrg	    do
9140c3c9db83Smrg	      func_basename "$obj"
9141c3c9db83Smrg	      $ECHO "$func_basename_result"
9142c3c9db83Smrg	    done | sort | sort -uc >/dev/null 2>&1); then
9143c3c9db83Smrg	  :
9144c3c9db83Smrg	else
91453f6d0e1dSmrg	  echo "copying selected object files to avoid basename conflicts..."
9146c3c9db83Smrg	  gentop="$output_objdir/${outputname}x"
91473f6d0e1dSmrg	  func_append generated " $gentop"
9148c3c9db83Smrg	  func_mkdir_p "$gentop"
9149c3c9db83Smrg	  save_oldobjs=$oldobjs
9150c3c9db83Smrg	  oldobjs=
9151c3c9db83Smrg	  counter=1
9152c3c9db83Smrg	  for obj in $save_oldobjs
9153c3c9db83Smrg	  do
9154c3c9db83Smrg	    func_basename "$obj"
9155c3c9db83Smrg	    objbase="$func_basename_result"
9156c3c9db83Smrg	    case " $oldobjs " in
9157c3c9db83Smrg	    " ") oldobjs=$obj ;;
9158c3c9db83Smrg	    *[\ /]"$objbase "*)
9159c3c9db83Smrg	      while :; do
9160c3c9db83Smrg		# Make sure we don't pick an alternate name that also
9161c3c9db83Smrg		# overlaps.
9162c3c9db83Smrg		newobj=lt$counter-$objbase
9163c3c9db83Smrg		func_arith $counter + 1
9164c3c9db83Smrg		counter=$func_arith_result
9165c3c9db83Smrg		case " $oldobjs " in
9166c3c9db83Smrg		*[\ /]"$newobj "*) ;;
9167c3c9db83Smrg		*) if test ! -f "$gentop/$newobj"; then break; fi ;;
9168c3c9db83Smrg		esac
9169c3c9db83Smrg	      done
9170c3c9db83Smrg	      func_show_eval "ln $obj $gentop/$newobj || cp $obj $gentop/$newobj"
91713f6d0e1dSmrg	      func_append oldobjs " $gentop/$newobj"
9172c3c9db83Smrg	      ;;
91733f6d0e1dSmrg	    *) func_append oldobjs " $obj" ;;
9174c3c9db83Smrg	    esac
9175692f60a7Smrg	  done
917685ee4c00Smrg	fi
917795903e71Smrg	func_to_tool_file "$oldlib" func_convert_file_msys_to_w32
917895903e71Smrg	tool_oldlib=$func_to_tool_file_result
9179c3c9db83Smrg	eval cmds=\"$old_archive_cmds\"
91802e71ea71Smrg
9181c3c9db83Smrg	func_len " $cmds"
9182c3c9db83Smrg	len=$func_len_result
9183c3c9db83Smrg	if test "$len" -lt "$max_cmd_len" || test "$max_cmd_len" -le -1; then
9184c3c9db83Smrg	  cmds=$old_archive_cmds
91853f6d0e1dSmrg	elif test -n "$archiver_list_spec"; then
91863f6d0e1dSmrg	  func_verbose "using command file archive linking..."
91873f6d0e1dSmrg	  for obj in $oldobjs
91883f6d0e1dSmrg	  do
91893f6d0e1dSmrg	    func_to_tool_file "$obj"
91903f6d0e1dSmrg	    $ECHO "$func_to_tool_file_result"
91913f6d0e1dSmrg	  done > $output_objdir/$libname.libcmd
91923f6d0e1dSmrg	  func_to_tool_file "$output_objdir/$libname.libcmd"
91933f6d0e1dSmrg	  oldobjs=" $archiver_list_spec$func_to_tool_file_result"
91943f6d0e1dSmrg	  cmds=$old_archive_cmds
9195c3c9db83Smrg	else
9196c3c9db83Smrg	  # the command line is too long to link in one step, link in parts
9197c3c9db83Smrg	  func_verbose "using piecewise archive linking..."
9198c3c9db83Smrg	  save_RANLIB=$RANLIB
9199c3c9db83Smrg	  RANLIB=:
9200c3c9db83Smrg	  objlist=
9201c3c9db83Smrg	  concat_cmds=
9202c3c9db83Smrg	  save_oldobjs=$oldobjs
9203c3c9db83Smrg	  oldobjs=
9204c3c9db83Smrg	  # Is there a better way of finding the last object in the list?
9205c3c9db83Smrg	  for obj in $save_oldobjs
9206c3c9db83Smrg	  do
9207c3c9db83Smrg	    last_oldobj=$obj
9208c3c9db83Smrg	  done
9209c3c9db83Smrg	  eval test_cmds=\"$old_archive_cmds\"
9210c3c9db83Smrg	  func_len " $test_cmds"
9211c3c9db83Smrg	  len0=$func_len_result
9212c3c9db83Smrg	  len=$len0
9213c3c9db83Smrg	  for obj in $save_oldobjs
9214c3c9db83Smrg	  do
9215c3c9db83Smrg	    func_len " $obj"
9216c3c9db83Smrg	    func_arith $len + $func_len_result
9217c3c9db83Smrg	    len=$func_arith_result
9218c3c9db83Smrg	    func_append objlist " $obj"
9219c3c9db83Smrg	    if test "$len" -lt "$max_cmd_len"; then
9220c3c9db83Smrg	      :
9221c3c9db83Smrg	    else
9222c3c9db83Smrg	      # the above command should be used before it gets too long
9223c3c9db83Smrg	      oldobjs=$objlist
9224c3c9db83Smrg	      if test "$obj" = "$last_oldobj" ; then
9225c3c9db83Smrg		RANLIB=$save_RANLIB
9226c3c9db83Smrg	      fi
9227c3c9db83Smrg	      test -z "$concat_cmds" || concat_cmds=$concat_cmds~
9228c3c9db83Smrg	      eval concat_cmds=\"\${concat_cmds}$old_archive_cmds\"
9229c3c9db83Smrg	      objlist=
9230c3c9db83Smrg	      len=$len0
9231c3c9db83Smrg	    fi
9232c3c9db83Smrg	  done
9233c3c9db83Smrg	  RANLIB=$save_RANLIB
9234c3c9db83Smrg	  oldobjs=$objlist
9235c3c9db83Smrg	  if test "X$oldobjs" = "X" ; then
9236c3c9db83Smrg	    eval cmds=\"\$concat_cmds\"
9237c3c9db83Smrg	  else
9238c3c9db83Smrg	    eval cmds=\"\$concat_cmds~\$old_archive_cmds\"
9239c3c9db83Smrg	  fi
9240c3c9db83Smrg	fi
9241c3c9db83Smrg      fi
9242c3c9db83Smrg      func_execute_cmds "$cmds" 'exit $?'
9243692f60a7Smrg    done
9244692f60a7Smrg
9245c3c9db83Smrg    test -n "$generated" && \
9246c3c9db83Smrg      func_show_eval "${RM}r$generated"
9247692f60a7Smrg
9248c3c9db83Smrg    # Now create the libtool archive.
9249c3c9db83Smrg    case $output in
9250c3c9db83Smrg    *.la)
9251c3c9db83Smrg      old_library=
9252c3c9db83Smrg      test "$build_old_libs" = yes && old_library="$libname.$libext"
9253c3c9db83Smrg      func_verbose "creating $output"
925485ee4c00Smrg
9255c3c9db83Smrg      # Preserve any variables that may affect compiler behavior
9256c3c9db83Smrg      for var in $variables_saved_for_relink; do
9257c3c9db83Smrg	if eval test -z \"\${$var+set}\"; then
9258c3c9db83Smrg	  relink_command="{ test -z \"\${$var+set}\" || $lt_unset $var || { $var=; export $var; }; }; $relink_command"
9259c3c9db83Smrg	elif eval var_value=\$$var; test -z "$var_value"; then
9260c3c9db83Smrg	  relink_command="$var=; export $var; $relink_command"
92612e71ea71Smrg	else
9262c3c9db83Smrg	  func_quote_for_eval "$var_value"
9263c3c9db83Smrg	  relink_command="$var=$func_quote_for_eval_result; export $var; $relink_command"
92642e71ea71Smrg	fi
9265c3c9db83Smrg      done
9266c3c9db83Smrg      # Quote the link command for shipping.
9267c3c9db83Smrg      relink_command="(cd `pwd`; $SHELL $progpath $preserve_args --mode=relink $libtool_args @inst_prefix_dir@)"
92683f6d0e1dSmrg      relink_command=`$ECHO "$relink_command" | $SED "$sed_quote_subst"`
9269c3c9db83Smrg      if test "$hardcode_automatic" = yes ; then
9270c3c9db83Smrg	relink_command=
9271c3c9db83Smrg      fi
9272692f60a7Smrg
9273c3c9db83Smrg      # Only create the output if not a dry run.
9274c3c9db83Smrg      $opt_dry_run || {
9275c3c9db83Smrg	for installed in no yes; do
9276c3c9db83Smrg	  if test "$installed" = yes; then
9277c3c9db83Smrg	    if test -z "$install_libdir"; then
9278c3c9db83Smrg	      break
9279c3c9db83Smrg	    fi
9280c3c9db83Smrg	    output="$output_objdir/$outputname"i
9281c3c9db83Smrg	    # Replace all uninstalled libtool libraries with the installed ones
9282c3c9db83Smrg	    newdependency_libs=
9283c3c9db83Smrg	    for deplib in $dependency_libs; do
9284c3c9db83Smrg	      case $deplib in
9285c3c9db83Smrg	      *.la)
9286c3c9db83Smrg		func_basename "$deplib"
9287c3c9db83Smrg		name="$func_basename_result"
928895903e71Smrg		func_resolve_sysroot "$deplib"
928995903e71Smrg		eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $func_resolve_sysroot_result`
9290c3c9db83Smrg		test -z "$libdir" && \
9291c3c9db83Smrg		  func_fatal_error "\`$deplib' is not a valid libtool archive"
92923f6d0e1dSmrg		func_append newdependency_libs " ${lt_sysroot:+=}$libdir/$name"
92933f6d0e1dSmrg		;;
92943f6d0e1dSmrg	      -L*)
92953f6d0e1dSmrg		func_stripname -L '' "$deplib"
92963f6d0e1dSmrg		func_replace_sysroot "$func_stripname_result"
92973f6d0e1dSmrg		func_append newdependency_libs " -L$func_replace_sysroot_result"
9298c3c9db83Smrg		;;
92993f6d0e1dSmrg	      -R*)
93003f6d0e1dSmrg		func_stripname -R '' "$deplib"
93013f6d0e1dSmrg		func_replace_sysroot "$func_stripname_result"
93023f6d0e1dSmrg		func_append newdependency_libs " -R$func_replace_sysroot_result"
93033f6d0e1dSmrg		;;
93043f6d0e1dSmrg	      *) func_append newdependency_libs " $deplib" ;;
9305c3c9db83Smrg	      esac
9306c3c9db83Smrg	    done
9307c3c9db83Smrg	    dependency_libs="$newdependency_libs"
9308c3c9db83Smrg	    newdlfiles=
9309c3c9db83Smrg
9310c3c9db83Smrg	    for lib in $dlfiles; do
9311c3c9db83Smrg	      case $lib in
9312c3c9db83Smrg	      *.la)
9313c3c9db83Smrg	        func_basename "$lib"
9314c3c9db83Smrg		name="$func_basename_result"
9315c3c9db83Smrg		eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $lib`
9316c3c9db83Smrg		test -z "$libdir" && \
9317c3c9db83Smrg		  func_fatal_error "\`$lib' is not a valid libtool archive"
93183f6d0e1dSmrg		func_append newdlfiles " ${lt_sysroot:+=}$libdir/$name"
9319c3c9db83Smrg		;;
93203f6d0e1dSmrg	      *) func_append newdlfiles " $lib" ;;
9321c3c9db83Smrg	      esac
9322c3c9db83Smrg	    done
9323c3c9db83Smrg	    dlfiles="$newdlfiles"
9324c3c9db83Smrg	    newdlprefiles=
9325c3c9db83Smrg	    for lib in $dlprefiles; do
9326c3c9db83Smrg	      case $lib in
9327c3c9db83Smrg	      *.la)
9328c3c9db83Smrg		# Only pass preopened files to the pseudo-archive (for
9329c3c9db83Smrg		# eventual linking with the app. that links it) if we
9330c3c9db83Smrg		# didn't already link the preopened objects directly into
9331c3c9db83Smrg		# the library:
9332c3c9db83Smrg		func_basename "$lib"
9333c3c9db83Smrg		name="$func_basename_result"
9334c3c9db83Smrg		eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $lib`
9335c3c9db83Smrg		test -z "$libdir" && \
9336c3c9db83Smrg		  func_fatal_error "\`$lib' is not a valid libtool archive"
93373f6d0e1dSmrg		func_append newdlprefiles " ${lt_sysroot:+=}$libdir/$name"
9338c3c9db83Smrg		;;
9339c3c9db83Smrg	      esac
9340c3c9db83Smrg	    done
9341c3c9db83Smrg	    dlprefiles="$newdlprefiles"
9342c3c9db83Smrg	  else
9343c3c9db83Smrg	    newdlfiles=
9344c3c9db83Smrg	    for lib in $dlfiles; do
9345c3c9db83Smrg	      case $lib in
9346c3c9db83Smrg		[\\/]* | [A-Za-z]:[\\/]*) abs="$lib" ;;
9347c3c9db83Smrg		*) abs=`pwd`"/$lib" ;;
9348c3c9db83Smrg	      esac
93493f6d0e1dSmrg	      func_append newdlfiles " $abs"
9350c3c9db83Smrg	    done
9351c3c9db83Smrg	    dlfiles="$newdlfiles"
9352c3c9db83Smrg	    newdlprefiles=
9353c3c9db83Smrg	    for lib in $dlprefiles; do
9354c3c9db83Smrg	      case $lib in
9355c3c9db83Smrg		[\\/]* | [A-Za-z]:[\\/]*) abs="$lib" ;;
9356c3c9db83Smrg		*) abs=`pwd`"/$lib" ;;
9357c3c9db83Smrg	      esac
93583f6d0e1dSmrg	      func_append newdlprefiles " $abs"
9359c3c9db83Smrg	    done
9360c3c9db83Smrg	    dlprefiles="$newdlprefiles"
9361c3c9db83Smrg	  fi
9362c3c9db83Smrg	  $RM $output
9363c3c9db83Smrg	  # place dlname in correct position for cygwin
93643f6d0e1dSmrg	  # In fact, it would be nice if we could use this code for all target
93653f6d0e1dSmrg	  # systems that can't hard-code library paths into their executables
93663f6d0e1dSmrg	  # and that have no shared library path variable independent of PATH,
93673f6d0e1dSmrg	  # but it turns out we can't easily determine that from inspecting
93683f6d0e1dSmrg	  # libtool variables, so we have to hard-code the OSs to which it
93693f6d0e1dSmrg	  # applies here; at the moment, that means platforms that use the PE
93703f6d0e1dSmrg	  # object format with DLL files.  See the long comment at the top of
93713f6d0e1dSmrg	  # tests/bindir.at for full details.
9372c3c9db83Smrg	  tdlname=$dlname
9373c3c9db83Smrg	  case $host,$output,$installed,$module,$dlname in
93743f6d0e1dSmrg	    *cygwin*,*lai,yes,no,*.dll | *mingw*,*lai,yes,no,*.dll | *cegcc*,*lai,yes,no,*.dll)
93753f6d0e1dSmrg	      # If a -bindir argument was supplied, place the dll there.
93763f6d0e1dSmrg	      if test "x$bindir" != x ;
93773f6d0e1dSmrg	      then
93783f6d0e1dSmrg		func_relative_path "$install_libdir" "$bindir"
93793f6d0e1dSmrg		tdlname=$func_relative_path_result$dlname
93803f6d0e1dSmrg	      else
93813f6d0e1dSmrg		# Otherwise fall back on heuristic.
93823f6d0e1dSmrg		tdlname=../bin/$dlname
93833f6d0e1dSmrg	      fi
93843f6d0e1dSmrg	      ;;
9385c3c9db83Smrg	  esac
9386c3c9db83Smrg	  $ECHO > $output "\
9387c3c9db83Smrg# $outputname - a libtool library file
9388c3c9db83Smrg# Generated by $PROGRAM (GNU $PACKAGE$TIMESTAMP) $VERSION
9389c3c9db83Smrg#
9390c3c9db83Smrg# Please DO NOT delete this file!
9391c3c9db83Smrg# It is necessary for linking the library.
9392692f60a7Smrg
9393c3c9db83Smrg# The name that we can dlopen(3).
9394c3c9db83Smrgdlname='$tdlname'
9395692f60a7Smrg
9396c3c9db83Smrg# Names of this library.
9397c3c9db83Smrglibrary_names='$library_names'
9398692f60a7Smrg
9399c3c9db83Smrg# The name of the static archive.
9400c3c9db83Smrgold_library='$old_library'
9401692f60a7Smrg
9402c3c9db83Smrg# Linker flags that can not go in dependency_libs.
9403c3c9db83Smrginherited_linker_flags='$new_inherited_linker_flags'
9404692f60a7Smrg
9405c3c9db83Smrg# Libraries that this one depends upon.
9406c3c9db83Smrgdependency_libs='$dependency_libs'
9407692f60a7Smrg
9408c3c9db83Smrg# Names of additional weak libraries provided by this library
9409c3c9db83Smrgweak_library_names='$weak_libs'
9410692f60a7Smrg
9411c3c9db83Smrg# Version information for $libname.
9412c3c9db83Smrgcurrent=$current
9413c3c9db83Smrgage=$age
9414c3c9db83Smrgrevision=$revision
9415692f60a7Smrg
9416c3c9db83Smrg# Is this an already installed library?
9417c3c9db83Smrginstalled=$installed
9418692f60a7Smrg
9419c3c9db83Smrg# Should we warn about portability when linking against -modules?
9420c3c9db83Smrgshouldnotlink=$module
9421692f60a7Smrg
9422c3c9db83Smrg# Files to dlopen/dlpreopen
9423c3c9db83Smrgdlopen='$dlfiles'
9424c3c9db83Smrgdlpreopen='$dlprefiles'
9425692f60a7Smrg
9426c3c9db83Smrg# Directory that this library needs to be installed in:
9427c3c9db83Smrglibdir='$install_libdir'"
9428c3c9db83Smrg	  if test "$installed" = no && test "$need_relink" = yes; then
9429c3c9db83Smrg	    $ECHO >> $output "\
9430c3c9db83Smrgrelink_command=\"$relink_command\""
9431c3c9db83Smrg	  fi
9432c3c9db83Smrg	done
9433c3c9db83Smrg      }
9434692f60a7Smrg
9435c3c9db83Smrg      # Do a symbolic link so that the libtool archive can be found in
9436c3c9db83Smrg      # LD_LIBRARY_PATH before the program is installed.
9437c3c9db83Smrg      func_show_eval '( cd "$output_objdir" && $RM "$outputname" && $LN_S "../$outputname" "$outputname" )' 'exit $?'
9438c3c9db83Smrg      ;;
9439c3c9db83Smrg    esac
9440c3c9db83Smrg    exit $EXIT_SUCCESS
9441c3c9db83Smrg}
94422e71ea71Smrg
94433f6d0e1dSmrg{ test "$opt_mode" = link || test "$opt_mode" = relink; } &&
9444c3c9db83Smrg    func_mode_link ${1+"$@"}
9445692f60a7Smrg
9446692f60a7Smrg
9447c3c9db83Smrg# func_mode_uninstall arg...
9448c3c9db83Smrgfunc_mode_uninstall ()
9449c3c9db83Smrg{
9450c3c9db83Smrg    $opt_debug
9451c3c9db83Smrg    RM="$nonopt"
9452692f60a7Smrg    files=
9453692f60a7Smrg    rmforce=
9454692f60a7Smrg    exit_status=0
9455692f60a7Smrg
9456692f60a7Smrg    # This variable tells wrapper scripts just to set variables rather
9457692f60a7Smrg    # than running their programs.
9458692f60a7Smrg    libtool_install_magic="$magic"
9459692f60a7Smrg
9460692f60a7Smrg    for arg
9461692f60a7Smrg    do
9462692f60a7Smrg      case $arg in
94633f6d0e1dSmrg      -f) func_append RM " $arg"; rmforce=yes ;;
94643f6d0e1dSmrg      -*) func_append RM " $arg" ;;
94653f6d0e1dSmrg      *) func_append files " $arg" ;;
9466692f60a7Smrg      esac
9467692f60a7Smrg    done
9468692f60a7Smrg
9469c3c9db83Smrg    test -z "$RM" && \
9470c3c9db83Smrg      func_fatal_help "you must specify an RM program"
9471692f60a7Smrg
9472692f60a7Smrg    rmdirs=
9473692f60a7Smrg
9474692f60a7Smrg    for file in $files; do
9475c3c9db83Smrg      func_dirname "$file" "" "."
9476c3c9db83Smrg      dir="$func_dirname_result"
9477c3c9db83Smrg      if test "X$dir" = X.; then
94783f6d0e1dSmrg	odir="$objdir"
9479692f60a7Smrg      else
94803f6d0e1dSmrg	odir="$dir/$objdir"
9481692f60a7Smrg      fi
9482c3c9db83Smrg      func_basename "$file"
9483c3c9db83Smrg      name="$func_basename_result"
94843f6d0e1dSmrg      test "$opt_mode" = uninstall && odir="$dir"
9485692f60a7Smrg
94863f6d0e1dSmrg      # Remember odir for removal later, being careful to avoid duplicates
94873f6d0e1dSmrg      if test "$opt_mode" = clean; then
9488692f60a7Smrg	case " $rmdirs " in
94893f6d0e1dSmrg	  *" $odir "*) ;;
94903f6d0e1dSmrg	  *) func_append rmdirs " $odir" ;;
9491692f60a7Smrg	esac
9492692f60a7Smrg      fi
9493692f60a7Smrg
9494692f60a7Smrg      # Don't error if the file doesn't exist and rm -f was used.
9495c3c9db83Smrg      if { test -L "$file"; } >/dev/null 2>&1 ||
9496c3c9db83Smrg	 { test -h "$file"; } >/dev/null 2>&1 ||
9497c3c9db83Smrg	 test -f "$file"; then
9498692f60a7Smrg	:
9499692f60a7Smrg      elif test -d "$file"; then
9500692f60a7Smrg	exit_status=1
9501692f60a7Smrg	continue
9502692f60a7Smrg      elif test "$rmforce" = yes; then
9503692f60a7Smrg	continue
9504692f60a7Smrg      fi
9505692f60a7Smrg
9506692f60a7Smrg      rmfiles="$file"
9507692f60a7Smrg
9508692f60a7Smrg      case $name in
9509692f60a7Smrg      *.la)
9510692f60a7Smrg	# Possibly a libtool archive, so verify it.
9511c3c9db83Smrg	if func_lalib_p "$file"; then
9512c3c9db83Smrg	  func_source $dir/$name
9513692f60a7Smrg
9514692f60a7Smrg	  # Delete the libtool libraries and symlinks.
9515692f60a7Smrg	  for n in $library_names; do
95163f6d0e1dSmrg	    func_append rmfiles " $odir/$n"
9517692f60a7Smrg	  done
95183f6d0e1dSmrg	  test -n "$old_library" && func_append rmfiles " $odir/$old_library"
9519692f60a7Smrg
95203f6d0e1dSmrg	  case "$opt_mode" in
9521692f60a7Smrg	  clean)
95223f6d0e1dSmrg	    case " $library_names " in
9523692f60a7Smrg	    *" $dlname "*) ;;
95243f6d0e1dSmrg	    *) test -n "$dlname" && func_append rmfiles " $odir/$dlname" ;;
9525692f60a7Smrg	    esac
95263f6d0e1dSmrg	    test -n "$libdir" && func_append rmfiles " $odir/$name $odir/${name}i"
9527692f60a7Smrg	    ;;
9528692f60a7Smrg	  uninstall)
9529692f60a7Smrg	    if test -n "$library_names"; then
9530692f60a7Smrg	      # Do each command in the postuninstall commands.
9531c3c9db83Smrg	      func_execute_cmds "$postuninstall_cmds" 'test "$rmforce" = yes || exit_status=1'
9532692f60a7Smrg	    fi
9533692f60a7Smrg
9534692f60a7Smrg	    if test -n "$old_library"; then
9535692f60a7Smrg	      # Do each command in the old_postuninstall commands.
9536c3c9db83Smrg	      func_execute_cmds "$old_postuninstall_cmds" 'test "$rmforce" = yes || exit_status=1'
9537692f60a7Smrg	    fi
9538692f60a7Smrg	    # FIXME: should reinstall the best remaining shared library.
9539692f60a7Smrg	    ;;
9540692f60a7Smrg	  esac
9541692f60a7Smrg	fi
9542692f60a7Smrg	;;
9543692f60a7Smrg
9544692f60a7Smrg      *.lo)
9545692f60a7Smrg	# Possibly a libtool object, so verify it.
9546c3c9db83Smrg	if func_lalib_p "$file"; then
9547692f60a7Smrg
9548692f60a7Smrg	  # Read the .lo file
9549c3c9db83Smrg	  func_source $dir/$name
9550692f60a7Smrg
9551692f60a7Smrg	  # Add PIC object to the list of files to remove.
9552c3c9db83Smrg	  if test -n "$pic_object" &&
9553c3c9db83Smrg	     test "$pic_object" != none; then
95543f6d0e1dSmrg	    func_append rmfiles " $dir/$pic_object"
9555692f60a7Smrg	  fi
9556692f60a7Smrg
9557692f60a7Smrg	  # Add non-PIC object to the list of files to remove.
9558c3c9db83Smrg	  if test -n "$non_pic_object" &&
9559c3c9db83Smrg	     test "$non_pic_object" != none; then
95603f6d0e1dSmrg	    func_append rmfiles " $dir/$non_pic_object"
9561692f60a7Smrg	  fi
9562692f60a7Smrg	fi
9563692f60a7Smrg	;;
9564692f60a7Smrg
9565692f60a7Smrg      *)
95663f6d0e1dSmrg	if test "$opt_mode" = clean ; then
9567692f60a7Smrg	  noexename=$name
9568692f60a7Smrg	  case $file in
9569692f60a7Smrg	  *.exe)
9570c3c9db83Smrg	    func_stripname '' '.exe' "$file"
9571c3c9db83Smrg	    file=$func_stripname_result
9572c3c9db83Smrg	    func_stripname '' '.exe' "$name"
9573c3c9db83Smrg	    noexename=$func_stripname_result
9574692f60a7Smrg	    # $file with .exe has already been added to rmfiles,
9575692f60a7Smrg	    # add $file without .exe
95763f6d0e1dSmrg	    func_append rmfiles " $file"
9577692f60a7Smrg	    ;;
9578692f60a7Smrg	  esac
9579692f60a7Smrg	  # Do a test to see if this is a libtool program.
9580c3c9db83Smrg	  if func_ltwrapper_p "$file"; then
9581c3c9db83Smrg	    if func_ltwrapper_executable_p "$file"; then
9582c3c9db83Smrg	      func_ltwrapper_scriptname "$file"
9583c3c9db83Smrg	      relink_command=
9584c3c9db83Smrg	      func_source $func_ltwrapper_scriptname_result
95853f6d0e1dSmrg	      func_append rmfiles " $func_ltwrapper_scriptname_result"
9586c3c9db83Smrg	    else
9587c3c9db83Smrg	      relink_command=
9588c3c9db83Smrg	      func_source $dir/$noexename
9589c3c9db83Smrg	    fi
9590692f60a7Smrg
9591692f60a7Smrg	    # note $name still contains .exe if it was in $file originally
9592692f60a7Smrg	    # as does the version of $file that was added into $rmfiles
95933f6d0e1dSmrg	    func_append rmfiles " $odir/$name $odir/${name}S.${objext}"
9594692f60a7Smrg	    if test "$fast_install" = yes && test -n "$relink_command"; then
95953f6d0e1dSmrg	      func_append rmfiles " $odir/lt-$name"
9596692f60a7Smrg	    fi
9597692f60a7Smrg	    if test "X$noexename" != "X$name" ; then
95983f6d0e1dSmrg	      func_append rmfiles " $odir/lt-${noexename}.c"
9599692f60a7Smrg	    fi
9600692f60a7Smrg	  fi
9601692f60a7Smrg	fi
9602692f60a7Smrg	;;
9603692f60a7Smrg      esac
9604c3c9db83Smrg      func_show_eval "$RM $rmfiles" 'exit_status=1'
9605692f60a7Smrg    done
9606692f60a7Smrg
9607692f60a7Smrg    # Try to remove the ${objdir}s in the directories where we deleted files
9608692f60a7Smrg    for dir in $rmdirs; do
9609692f60a7Smrg      if test -d "$dir"; then
9610c3c9db83Smrg	func_show_eval "rmdir $dir >/dev/null 2>&1"
9611692f60a7Smrg      fi
9612692f60a7Smrg    done
9613692f60a7Smrg
9614692f60a7Smrg    exit $exit_status
9615c3c9db83Smrg}
9616692f60a7Smrg
96173f6d0e1dSmrg{ test "$opt_mode" = uninstall || test "$opt_mode" = clean; } &&
9618c3c9db83Smrg    func_mode_uninstall ${1+"$@"}
961985ee4c00Smrg
96203f6d0e1dSmrgtest -z "$opt_mode" && {
9621c3c9db83Smrg  help="$generic_help"
9622c3c9db83Smrg  func_fatal_help "you must specify a MODE"
9623c3c9db83Smrg}
9624c3c9db83Smrg
9625c3c9db83Smrgtest -z "$exec_cmd" && \
96263f6d0e1dSmrg  func_fatal_help "invalid operation mode \`$opt_mode'"
9627692f60a7Smrg
9628692f60a7Smrgif test -n "$exec_cmd"; then
9629c3c9db83Smrg  eval exec "$exec_cmd"
9630692f60a7Smrg  exit $EXIT_FAILURE
9631692f60a7Smrgfi
9632692f60a7Smrg
9633c3c9db83Smrgexit $exit_status
9634692f60a7Smrg
9635692f60a7Smrg
9636692f60a7Smrg# The TAGs below are defined such that we never get into a situation
9637692f60a7Smrg# in which we disable both kinds of libraries.  Given conflicting
9638692f60a7Smrg# choices, we go for a static library, that is the most portable,
9639692f60a7Smrg# since we can't tell whether shared libraries were disabled because
9640692f60a7Smrg# the user asked for that or because the platform doesn't support
9641692f60a7Smrg# them.  This is particularly important on AIX, because we don't
9642692f60a7Smrg# support having both static and shared libraries enabled at the same
9643692f60a7Smrg# time on that platform, so we default to a shared-only configuration.
9644692f60a7Smrg# If a disable-shared tag is given, we'll fallback to a static-only
9645692f60a7Smrg# configuration.  But we'll never go from static-only to shared-only.
9646692f60a7Smrg
9647692f60a7Smrg# ### BEGIN LIBTOOL TAG CONFIG: disable-shared
9648c3c9db83Smrgbuild_libtool_libs=no
9649c3c9db83Smrgbuild_old_libs=yes
9650692f60a7Smrg# ### END LIBTOOL TAG CONFIG: disable-shared
9651692f60a7Smrg
9652692f60a7Smrg# ### BEGIN LIBTOOL TAG CONFIG: disable-static
9653c3c9db83Smrgbuild_old_libs=`case $build_libtool_libs in yes) echo no;; *) echo yes;; esac`
9654692f60a7Smrg# ### END LIBTOOL TAG CONFIG: disable-static
9655692f60a7Smrg
9656692f60a7Smrg# Local Variables:
9657692f60a7Smrg# mode:shell-script
9658692f60a7Smrg# sh-indentation:2
9659692f60a7Smrg# End:
9660c3c9db83Smrg# vi:sw=2
9661c3c9db83Smrg
9662