ltmain.sh revision 49dc963f
149dc963fSmrg# Generated from ltmain.m4sh.
249dc963fSmrg
349dc963fSmrg# ltmain.sh (GNU libtool) 2.2.6b
449dc963fSmrg# Written by Gordon Matzigkeit <gord@gnu.ai.mit.edu>, 1996
549dc963fSmrg
649dc963fSmrg# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005, 2006, 2007 2008 Free Software Foundation, Inc.
749dc963fSmrg# This is free software; see the source for copying conditions.  There is NO
849dc963fSmrg# warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
949dc963fSmrg
1049dc963fSmrg# GNU Libtool is free software; you can redistribute it and/or modify
114b0ead49Smrg# it under the terms of the GNU General Public License as published by
124b0ead49Smrg# the Free Software Foundation; either version 2 of the License, or
134b0ead49Smrg# (at your option) any later version.
144b0ead49Smrg#
1549dc963fSmrg# As a special exception to the GNU General Public License,
1649dc963fSmrg# if you distribute this file as part of a program or library that
1749dc963fSmrg# is built using GNU Libtool, you may include this file under the
1849dc963fSmrg# same distribution terms that you use for the rest of that program.
1949dc963fSmrg#
2049dc963fSmrg# GNU Libtool is distributed in the hope that it will be useful, but
214b0ead49Smrg# WITHOUT ANY WARRANTY; without even the implied warranty of
224b0ead49Smrg# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
234b0ead49Smrg# General Public License for more details.
244b0ead49Smrg#
254b0ead49Smrg# You should have received a copy of the GNU General Public License
2649dc963fSmrg# along with GNU Libtool; see the file COPYING.  If not, a copy
2749dc963fSmrg# can be downloaded from http://www.gnu.org/licenses/gpl.html,
2849dc963fSmrg# or obtained by writing to the Free Software Foundation, Inc.,
2949dc963fSmrg# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
304b0ead49Smrg
3149dc963fSmrg# Usage: $progname [OPTION]... [MODE-ARG]...
3249dc963fSmrg#
3349dc963fSmrg# Provide generalized library-building support services.
3449dc963fSmrg#
3549dc963fSmrg#     --config             show all configuration variables
3649dc963fSmrg#     --debug              enable verbose shell tracing
3749dc963fSmrg# -n, --dry-run            display commands without modifying any files
3849dc963fSmrg#     --features           display basic configuration information and exit
3949dc963fSmrg#     --mode=MODE          use operation mode MODE
4049dc963fSmrg#     --preserve-dup-deps  don't remove duplicate dependency libraries
4149dc963fSmrg#     --quiet, --silent    don't print informational messages
4249dc963fSmrg#     --tag=TAG            use configuration variables from tag TAG
4349dc963fSmrg# -v, --verbose            print informational messages (default)
4449dc963fSmrg#     --version            print version information
4549dc963fSmrg# -h, --help               print short or long help message
4649dc963fSmrg#
4749dc963fSmrg# MODE must be one of the following:
4849dc963fSmrg#
4949dc963fSmrg#       clean              remove files from the build directory
5049dc963fSmrg#       compile            compile a source file into a libtool object
5149dc963fSmrg#       execute            automatically set library path, then run a program
5249dc963fSmrg#       finish             complete the installation of libtool libraries
5349dc963fSmrg#       install            install libraries or executables
5449dc963fSmrg#       link               create a library or an executable
5549dc963fSmrg#       uninstall          remove libraries from an installed directory
5649dc963fSmrg#
5749dc963fSmrg# MODE-ARGS vary depending on the MODE.
5849dc963fSmrg# Try `$progname --help --mode=MODE' for a more detailed description of MODE.
5949dc963fSmrg#
6049dc963fSmrg# When reporting a bug, please describe a test case to reproduce it and
6149dc963fSmrg# include the following information:
6249dc963fSmrg#
6349dc963fSmrg#       host-triplet:	$host
6449dc963fSmrg#       shell:		$SHELL
6549dc963fSmrg#       compiler:		$LTCC
6649dc963fSmrg#       compiler flags:		$LTCFLAGS
6749dc963fSmrg#       linker:		$LD (gnu? $with_gnu_ld)
6849dc963fSmrg#       $progname:		(GNU libtool) 2.2.6b
6949dc963fSmrg#       automake:		$automake_version
7049dc963fSmrg#       autoconf:		$autoconf_version
7149dc963fSmrg#
7249dc963fSmrg# Report bugs to <bug-libtool@gnu.org>.
734b0ead49Smrg
744b0ead49SmrgPROGRAM=ltmain.sh
754b0ead49SmrgPACKAGE=libtool
7649dc963fSmrgVERSION=2.2.6b
7749dc963fSmrgTIMESTAMP=""
7849dc963fSmrgpackage_revision=1.3017
7952b01e16Smrg
8049dc963fSmrg# Be Bourne compatible
8152b01e16Smrgif test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then
8252b01e16Smrg  emulate sh
8352b01e16Smrg  NULLCMD=:
8452b01e16Smrg  # Zsh 3.x and 4.x performs word splitting on ${1+"$@"}, which
8552b01e16Smrg  # is contrary to our usage.  Disable this feature.
8652b01e16Smrg  alias -g '${1+"$@"}'='"$@"'
874b0ead49Smrg  setopt NO_GLOB_SUBST
8852b01e16Smrgelse
8952b01e16Smrg  case `(set -o) 2>/dev/null` in *posix*) set -o posix;; esac
904b0ead49Smrgfi
9152b01e16SmrgBIN_SH=xpg4; export BIN_SH # for Tru64
9252b01e16SmrgDUALCASE=1; export DUALCASE # for MKS sh
934b0ead49Smrg
9449dc963fSmrg# NLS nuisances: We save the old values to restore during execute mode.
954b0ead49Smrg# Only set LANG and LC_ALL to C if already set.
964b0ead49Smrg# These must not be set unconditionally because not all systems understand
974b0ead49Smrg# e.g. LANG=C (notably SCO).
9849dc963fSmrglt_user_locale=
9949dc963fSmrglt_safe_locale=
10052b01e16Smrgfor lt_var in LANG LANGUAGE LC_ALL LC_CTYPE LC_COLLATE LC_MESSAGES
10152b01e16Smrgdo
10252b01e16Smrg  eval "if test \"\${$lt_var+set}\" = set; then
10349dc963fSmrg          save_$lt_var=\$$lt_var
10449dc963fSmrg          $lt_var=C
10552b01e16Smrg	  export $lt_var
10649dc963fSmrg	  lt_user_locale=\"$lt_var=\\\$save_\$lt_var; \$lt_user_locale\"
10749dc963fSmrg	  lt_safe_locale=\"$lt_var=C; \$lt_safe_locale\"
10852b01e16Smrg	fi"
10952b01e16Smrgdone
11052b01e16Smrg
11149dc963fSmrg$lt_unset CDPATH
11249dc963fSmrg
11349dc963fSmrg
11449dc963fSmrg
11549dc963fSmrg
11649dc963fSmrg
11749dc963fSmrg: ${CP="cp -f"}
11849dc963fSmrg: ${ECHO="echo"}
11949dc963fSmrg: ${EGREP="/bin/grep -E"}
12049dc963fSmrg: ${FGREP="/bin/grep -F"}
12149dc963fSmrg: ${GREP="/bin/grep"}
12249dc963fSmrg: ${LN_S="ln -s"}
12349dc963fSmrg: ${MAKE="make"}
12449dc963fSmrg: ${MKDIR="mkdir"}
12549dc963fSmrg: ${MV="mv -f"}
12649dc963fSmrg: ${RM="rm -f"}
12749dc963fSmrg: ${SED="/bin/sed"}
12849dc963fSmrg: ${SHELL="${CONFIG_SHELL-/bin/sh}"}
12949dc963fSmrg: ${Xsed="$SED -e 1s/^X//"}
13049dc963fSmrg
13149dc963fSmrg# Global variables:
13249dc963fSmrgEXIT_SUCCESS=0
13349dc963fSmrgEXIT_FAILURE=1
13449dc963fSmrgEXIT_MISMATCH=63  # $? = 63 is used to indicate version mismatch to missing.
13549dc963fSmrgEXIT_SKIP=77	  # $? = 77 is used to indicate a skipped test to automake.
13649dc963fSmrg
13749dc963fSmrgexit_status=$EXIT_SUCCESS
1384b0ead49Smrg
1394b0ead49Smrg# Make sure IFS has a sensible default
1404b0ead49Smrglt_nl='
1414b0ead49Smrg'
1424b0ead49SmrgIFS=" 	$lt_nl"
1434b0ead49Smrg
14449dc963fSmrgdirname="s,/[^/]*$,,"
14549dc963fSmrgbasename="s,^.*/,,"
14649dc963fSmrg
14749dc963fSmrg# func_dirname_and_basename file append nondir_replacement
14849dc963fSmrg# perform func_basename and func_dirname in a single function
14949dc963fSmrg# call:
15049dc963fSmrg#   dirname:  Compute the dirname of FILE.  If nonempty,
15149dc963fSmrg#             add APPEND to the result, otherwise set result
15249dc963fSmrg#             to NONDIR_REPLACEMENT.
15349dc963fSmrg#             value returned in "$func_dirname_result"
15449dc963fSmrg#   basename: Compute filename of FILE.
15549dc963fSmrg#             value retuned in "$func_basename_result"
15649dc963fSmrg# Implementation must be kept synchronized with func_dirname
15749dc963fSmrg# and func_basename. For efficiency, we do not delegate to
15849dc963fSmrg# those functions but instead duplicate the functionality here.
15949dc963fSmrgfunc_dirname_and_basename ()
16049dc963fSmrg{
16149dc963fSmrg  # Extract subdirectory from the argument.
16249dc963fSmrg  func_dirname_result=`$ECHO "X${1}" | $Xsed -e "$dirname"`
16349dc963fSmrg  if test "X$func_dirname_result" = "X${1}"; then
16449dc963fSmrg    func_dirname_result="${3}"
16549dc963fSmrg  else
16649dc963fSmrg    func_dirname_result="$func_dirname_result${2}"
16749dc963fSmrg  fi
16849dc963fSmrg  func_basename_result=`$ECHO "X${1}" | $Xsed -e "$basename"`
16949dc963fSmrg}
1704b0ead49Smrg
17149dc963fSmrg# Generated shell functions inserted here.
17249dc963fSmrg
17349dc963fSmrg# Work around backward compatibility issue on IRIX 6.5. On IRIX 6.4+, sh
17449dc963fSmrg# is ksh but when the shell is invoked as "sh" and the current value of
17549dc963fSmrg# the _XPG environment variable is not equal to 1 (one), the special
17649dc963fSmrg# positional parameter $0, within a function call, is the name of the
17749dc963fSmrg# function.
17849dc963fSmrgprogpath="$0"
17949dc963fSmrg
18049dc963fSmrg# The name of this program:
18149dc963fSmrg# In the unlikely event $progname began with a '-', it would play havoc with
18249dc963fSmrg# func_echo (imagine progname=-n), so we prepend ./ in that case:
18349dc963fSmrgfunc_dirname_and_basename "$progpath"
18449dc963fSmrgprogname=$func_basename_result
18549dc963fSmrgcase $progname in
18649dc963fSmrg  -*) progname=./$progname ;;
18749dc963fSmrgesac
18849dc963fSmrg
18949dc963fSmrg# Make sure we have an absolute path for reexecution:
19049dc963fSmrgcase $progpath in
19149dc963fSmrg  [\\/]*|[A-Za-z]:\\*) ;;
19249dc963fSmrg  *[\\/]*)
19349dc963fSmrg     progdir=$func_dirname_result
19449dc963fSmrg     progdir=`cd "$progdir" && pwd`
19549dc963fSmrg     progpath="$progdir/$progname"
19649dc963fSmrg     ;;
19749dc963fSmrg  *)
19849dc963fSmrg     save_IFS="$IFS"
19949dc963fSmrg     IFS=:
20049dc963fSmrg     for progdir in $PATH; do
20149dc963fSmrg       IFS="$save_IFS"
20249dc963fSmrg       test -x "$progdir/$progname" && break
20349dc963fSmrg     done
20449dc963fSmrg     IFS="$save_IFS"
20549dc963fSmrg     test -n "$progdir" || progdir=`pwd`
20649dc963fSmrg     progpath="$progdir/$progname"
20749dc963fSmrg     ;;
20849dc963fSmrgesac
20949dc963fSmrg
21049dc963fSmrg# Sed substitution that helps us do robust quoting.  It backslashifies
21149dc963fSmrg# metacharacters that are still active within double-quoted strings.
21249dc963fSmrgXsed="${SED}"' -e 1s/^X//'
21349dc963fSmrgsed_quote_subst='s/\([`"$\\]\)/\\\1/g'
21449dc963fSmrg
21549dc963fSmrg# Same as above, but do not quote variable references.
21649dc963fSmrgdouble_quote_subst='s/\(["`\\]\)/\\\1/g'
21749dc963fSmrg
21849dc963fSmrg# Re-`\' parameter expansions in output of double_quote_subst that were
21949dc963fSmrg# `\'-ed in input to the same.  If an odd number of `\' preceded a '$'
22049dc963fSmrg# in input to double_quote_subst, that '$' was protected from expansion.
22149dc963fSmrg# Since each input `\' is now two `\'s, look for any number of runs of
22249dc963fSmrg# four `\'s followed by two `\'s and then a '$'.  `\' that '$'.
22349dc963fSmrgbs='\\'
22449dc963fSmrgbs2='\\\\'
22549dc963fSmrgbs4='\\\\\\\\'
22649dc963fSmrgdollar='\$'
22749dc963fSmrgsed_double_backslash="\
22849dc963fSmrg  s/$bs4/&\\
22949dc963fSmrg/g
23049dc963fSmrg  s/^$bs2$dollar/$bs&/
23149dc963fSmrg  s/\\([^$bs]\\)$bs2$dollar/\\1$bs2$bs$dollar/g
23249dc963fSmrg  s/\n//g"
23349dc963fSmrg
23449dc963fSmrg# Standard options:
23549dc963fSmrgopt_dry_run=false
23649dc963fSmrgopt_help=false
23749dc963fSmrgopt_quiet=false
23849dc963fSmrgopt_verbose=false
23949dc963fSmrgopt_warning=:
24049dc963fSmrg
24149dc963fSmrg# func_echo arg...
24249dc963fSmrg# Echo program name prefixed message, along with the current mode
24349dc963fSmrg# name if it has been set yet.
24449dc963fSmrgfunc_echo ()
24549dc963fSmrg{
24649dc963fSmrg    $ECHO "$progname${mode+: }$mode: $*"
24749dc963fSmrg}
24849dc963fSmrg
24949dc963fSmrg# func_verbose arg...
25049dc963fSmrg# Echo program name prefixed message in verbose mode only.
25149dc963fSmrgfunc_verbose ()
25249dc963fSmrg{
25349dc963fSmrg    $opt_verbose && func_echo ${1+"$@"}
25449dc963fSmrg
25549dc963fSmrg    # A bug in bash halts the script if the last line of a function
25649dc963fSmrg    # fails when set -e is in force, so we need another command to
25749dc963fSmrg    # work around that:
25849dc963fSmrg    :
25949dc963fSmrg}
26049dc963fSmrg
26149dc963fSmrg# func_error arg...
26249dc963fSmrg# Echo program name prefixed message to standard error.
26349dc963fSmrgfunc_error ()
26449dc963fSmrg{
26549dc963fSmrg    $ECHO "$progname${mode+: }$mode: "${1+"$@"} 1>&2
26649dc963fSmrg}
26749dc963fSmrg
26849dc963fSmrg# func_warning arg...
26949dc963fSmrg# Echo program name prefixed warning message to standard error.
27049dc963fSmrgfunc_warning ()
27149dc963fSmrg{
27249dc963fSmrg    $opt_warning && $ECHO "$progname${mode+: }$mode: warning: "${1+"$@"} 1>&2
27349dc963fSmrg
27449dc963fSmrg    # bash bug again:
27549dc963fSmrg    :
27649dc963fSmrg}
27749dc963fSmrg
27849dc963fSmrg# func_fatal_error arg...
27949dc963fSmrg# Echo program name prefixed message to standard error, and exit.
28049dc963fSmrgfunc_fatal_error ()
28149dc963fSmrg{
28249dc963fSmrg    func_error ${1+"$@"}
28349dc963fSmrg    exit $EXIT_FAILURE
28449dc963fSmrg}
28549dc963fSmrg
28649dc963fSmrg# func_fatal_help arg...
28749dc963fSmrg# Echo program name prefixed message to standard error, followed by
28849dc963fSmrg# a help hint, and exit.
28949dc963fSmrgfunc_fatal_help ()
29049dc963fSmrg{
29149dc963fSmrg    func_error ${1+"$@"}
29249dc963fSmrg    func_fatal_error "$help"
29349dc963fSmrg}
29449dc963fSmrghelp="Try \`$progname --help' for more information."  ## default
29549dc963fSmrg
29649dc963fSmrg
29749dc963fSmrg# func_grep expression filename
29849dc963fSmrg# Check whether EXPRESSION matches any line of FILENAME, without output.
29949dc963fSmrgfunc_grep ()
30049dc963fSmrg{
30149dc963fSmrg    $GREP "$1" "$2" >/dev/null 2>&1
30249dc963fSmrg}
30349dc963fSmrg
30449dc963fSmrg
30549dc963fSmrg# func_mkdir_p directory-path
30649dc963fSmrg# Make sure the entire path to DIRECTORY-PATH is available.
30749dc963fSmrgfunc_mkdir_p ()
30849dc963fSmrg{
30949dc963fSmrg    my_directory_path="$1"
31049dc963fSmrg    my_dir_list=
31149dc963fSmrg
31249dc963fSmrg    if test -n "$my_directory_path" && test "$opt_dry_run" != ":"; then
31349dc963fSmrg
31449dc963fSmrg      # Protect directory names starting with `-'
31549dc963fSmrg      case $my_directory_path in
31649dc963fSmrg        -*) my_directory_path="./$my_directory_path" ;;
31749dc963fSmrg      esac
31849dc963fSmrg
31949dc963fSmrg      # While some portion of DIR does not yet exist...
32049dc963fSmrg      while test ! -d "$my_directory_path"; do
32149dc963fSmrg        # ...make a list in topmost first order.  Use a colon delimited
32249dc963fSmrg	# list incase some portion of path contains whitespace.
32349dc963fSmrg        my_dir_list="$my_directory_path:$my_dir_list"
32449dc963fSmrg
32549dc963fSmrg        # If the last portion added has no slash in it, the list is done
32649dc963fSmrg        case $my_directory_path in */*) ;; *) break ;; esac
32749dc963fSmrg
32849dc963fSmrg        # ...otherwise throw away the child directory and loop
32949dc963fSmrg        my_directory_path=`$ECHO "X$my_directory_path" | $Xsed -e "$dirname"`
33049dc963fSmrg      done
33149dc963fSmrg      my_dir_list=`$ECHO "X$my_dir_list" | $Xsed -e 's,:*$,,'`
33249dc963fSmrg
33349dc963fSmrg      save_mkdir_p_IFS="$IFS"; IFS=':'
33449dc963fSmrg      for my_dir in $my_dir_list; do
33549dc963fSmrg	IFS="$save_mkdir_p_IFS"
33649dc963fSmrg        # mkdir can fail with a `File exist' error if two processes
33749dc963fSmrg        # try to create one of the directories concurrently.  Don't
33849dc963fSmrg        # stop in that case!
33949dc963fSmrg        $MKDIR "$my_dir" 2>/dev/null || :
34049dc963fSmrg      done
34149dc963fSmrg      IFS="$save_mkdir_p_IFS"
34249dc963fSmrg
34349dc963fSmrg      # Bail out if we (or some other process) failed to create a directory.
34449dc963fSmrg      test -d "$my_directory_path" || \
34549dc963fSmrg        func_fatal_error "Failed to create \`$1'"
34649dc963fSmrg    fi
34749dc963fSmrg}
3484b0ead49Smrg
3494b0ead49Smrg
3504b0ead49Smrg# func_mktempdir [string]
3514b0ead49Smrg# Make a temporary directory that won't clash with other running
3524b0ead49Smrg# libtool processes, and avoids race conditions if possible.  If
3534b0ead49Smrg# given, STRING is the basename for that directory.
3544b0ead49Smrgfunc_mktempdir ()
3554b0ead49Smrg{
3564b0ead49Smrg    my_template="${TMPDIR-/tmp}/${1-$progname}"
3574b0ead49Smrg
35849dc963fSmrg    if test "$opt_dry_run" = ":"; then
3594b0ead49Smrg      # Return a directory name, but don't create it in dry-run mode
3604b0ead49Smrg      my_tmpdir="${my_template}-$$"
3614b0ead49Smrg    else
3624b0ead49Smrg
3634b0ead49Smrg      # If mktemp works, use that first and foremost
3644b0ead49Smrg      my_tmpdir=`mktemp -d "${my_template}-XXXXXXXX" 2>/dev/null`
3654b0ead49Smrg
3664b0ead49Smrg      if test ! -d "$my_tmpdir"; then
36749dc963fSmrg        # Failing that, at least try and use $RANDOM to avoid a race
36849dc963fSmrg        my_tmpdir="${my_template}-${RANDOM-0}$$"
3694b0ead49Smrg
37049dc963fSmrg        save_mktempdir_umask=`umask`
37149dc963fSmrg        umask 0077
37249dc963fSmrg        $MKDIR "$my_tmpdir"
37349dc963fSmrg        umask $save_mktempdir_umask
3744b0ead49Smrg      fi
3754b0ead49Smrg
3764b0ead49Smrg      # If we're not in dry-run mode, bomb out on failure
37749dc963fSmrg      test -d "$my_tmpdir" || \
37849dc963fSmrg        func_fatal_error "cannot create temporary directory \`$my_tmpdir'"
3794b0ead49Smrg    fi
3804b0ead49Smrg
38149dc963fSmrg    $ECHO "X$my_tmpdir" | $Xsed
3824b0ead49Smrg}
3834b0ead49Smrg
3844b0ead49Smrg
38549dc963fSmrg# func_quote_for_eval arg
38649dc963fSmrg# Aesthetically quote ARG to be evaled later.
38749dc963fSmrg# This function returns two values: FUNC_QUOTE_FOR_EVAL_RESULT
38849dc963fSmrg# is double-quoted, suitable for a subsequent eval, whereas
38949dc963fSmrg# FUNC_QUOTE_FOR_EVAL_UNQUOTED_RESULT has merely all characters
39049dc963fSmrg# which are still active within double quotes backslashified.
39149dc963fSmrgfunc_quote_for_eval ()
3924b0ead49Smrg{
39349dc963fSmrg    case $1 in
39449dc963fSmrg      *[\\\`\"\$]*)
39549dc963fSmrg	func_quote_for_eval_unquoted_result=`$ECHO "X$1" | $Xsed -e "$sed_quote_subst"` ;;
39649dc963fSmrg      *)
39749dc963fSmrg        func_quote_for_eval_unquoted_result="$1" ;;
39849dc963fSmrg    esac
39949dc963fSmrg
40049dc963fSmrg    case $func_quote_for_eval_unquoted_result in
40149dc963fSmrg      # Double-quote args containing shell metacharacters to delay
40249dc963fSmrg      # word splitting, command substitution and and variable
40349dc963fSmrg      # expansion for a subsequent eval.
40449dc963fSmrg      # Many Bourne shells cannot handle close brackets correctly
40549dc963fSmrg      # in scan sets, so we specify it separately.
40649dc963fSmrg      *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \	]*|*]*|"")
40749dc963fSmrg        func_quote_for_eval_result="\"$func_quote_for_eval_unquoted_result\""
40849dc963fSmrg        ;;
40949dc963fSmrg      *)
41049dc963fSmrg        func_quote_for_eval_result="$func_quote_for_eval_unquoted_result"
4114b0ead49Smrg    esac
4124b0ead49Smrg}
4134b0ead49Smrg
4144b0ead49Smrg
41549dc963fSmrg# func_quote_for_expand arg
41649dc963fSmrg# Aesthetically quote ARG to be evaled later; same as above,
41749dc963fSmrg# but do not quote variable references.
41849dc963fSmrgfunc_quote_for_expand ()
4194b0ead49Smrg{
42049dc963fSmrg    case $1 in
42149dc963fSmrg      *[\\\`\"]*)
42249dc963fSmrg	my_arg=`$ECHO "X$1" | $Xsed \
42349dc963fSmrg	    -e "$double_quote_subst" -e "$sed_double_backslash"` ;;
4244b0ead49Smrg      *)
42549dc963fSmrg        my_arg="$1" ;;
42649dc963fSmrg    esac
42749dc963fSmrg
42849dc963fSmrg    case $my_arg in
42949dc963fSmrg      # Double-quote args containing shell metacharacters to delay
43049dc963fSmrg      # word splitting and command substitution for a subsequent eval.
43149dc963fSmrg      # Many Bourne shells cannot handle close brackets correctly
43249dc963fSmrg      # in scan sets, so we specify it separately.
43349dc963fSmrg      *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \	]*|*]*|"")
43449dc963fSmrg        my_arg="\"$my_arg\""
43549dc963fSmrg        ;;
43649dc963fSmrg    esac
43749dc963fSmrg
43849dc963fSmrg    func_quote_for_expand_result="$my_arg"
4394b0ead49Smrg}
4404b0ead49Smrg
4414b0ead49Smrg
44249dc963fSmrg# func_show_eval cmd [fail_exp]
44349dc963fSmrg# Unless opt_silent is true, then output CMD.  Then, if opt_dryrun is
44449dc963fSmrg# not true, evaluate CMD.  If the evaluation of CMD fails, and FAIL_EXP
44549dc963fSmrg# is given, then evaluate it.
44649dc963fSmrgfunc_show_eval ()
4474b0ead49Smrg{
44849dc963fSmrg    my_cmd="$1"
44949dc963fSmrg    my_fail_exp="${2-:}"
4504b0ead49Smrg
45149dc963fSmrg    ${opt_silent-false} || {
45249dc963fSmrg      func_quote_for_expand "$my_cmd"
45349dc963fSmrg      eval "func_echo $func_quote_for_expand_result"
45449dc963fSmrg    }
45549dc963fSmrg
45649dc963fSmrg    if ${opt_dry_run-false}; then :; else
45749dc963fSmrg      eval "$my_cmd"
45849dc963fSmrg      my_status=$?
45949dc963fSmrg      if test "$my_status" -eq 0; then :; else
46049dc963fSmrg	eval "(exit $my_status); $my_fail_exp"
46149dc963fSmrg      fi
4624b0ead49Smrg    fi
4634b0ead49Smrg}
4644b0ead49Smrg
46549dc963fSmrg
46649dc963fSmrg# func_show_eval_locale cmd [fail_exp]
46749dc963fSmrg# Unless opt_silent is true, then output CMD.  Then, if opt_dryrun is
46849dc963fSmrg# not true, evaluate CMD.  If the evaluation of CMD fails, and FAIL_EXP
46949dc963fSmrg# is given, then evaluate it.  Use the saved locale for evaluation.
47049dc963fSmrgfunc_show_eval_locale ()
4714b0ead49Smrg{
47249dc963fSmrg    my_cmd="$1"
47349dc963fSmrg    my_fail_exp="${2-:}"
47449dc963fSmrg
47549dc963fSmrg    ${opt_silent-false} || {
47649dc963fSmrg      func_quote_for_expand "$my_cmd"
47749dc963fSmrg      eval "func_echo $func_quote_for_expand_result"
47849dc963fSmrg    }
47949dc963fSmrg
48049dc963fSmrg    if ${opt_dry_run-false}; then :; else
48149dc963fSmrg      eval "$lt_user_locale
48249dc963fSmrg	    $my_cmd"
48349dc963fSmrg      my_status=$?
48449dc963fSmrg      eval "$lt_safe_locale"
48549dc963fSmrg      if test "$my_status" -eq 0; then :; else
48649dc963fSmrg	eval "(exit $my_status); $my_fail_exp"
48749dc963fSmrg      fi
4884b0ead49Smrg    fi
48949dc963fSmrg}
4904b0ead49Smrg
4914b0ead49Smrg
49249dc963fSmrg
49349dc963fSmrg
49449dc963fSmrg
49549dc963fSmrg# func_version
49649dc963fSmrg# Echo version message to standard output and exit.
49749dc963fSmrgfunc_version ()
49849dc963fSmrg{
49949dc963fSmrg    $SED -n '/^# '$PROGRAM' (GNU /,/# warranty; / {
50049dc963fSmrg        s/^# //
50149dc963fSmrg	s/^# *$//
50249dc963fSmrg        s/\((C)\)[ 0-9,-]*\( [1-9][0-9]*\)/\1\2/
50349dc963fSmrg        p
50449dc963fSmrg     }' < "$progpath"
50549dc963fSmrg     exit $?
50649dc963fSmrg}
50749dc963fSmrg
50849dc963fSmrg# func_usage
50949dc963fSmrg# Echo short help message to standard output and exit.
51049dc963fSmrgfunc_usage ()
51149dc963fSmrg{
51249dc963fSmrg    $SED -n '/^# Usage:/,/# -h/ {
51349dc963fSmrg        s/^# //
51449dc963fSmrg	s/^# *$//
51549dc963fSmrg	s/\$progname/'$progname'/
51649dc963fSmrg	p
51749dc963fSmrg    }' < "$progpath"
51849dc963fSmrg    $ECHO
51949dc963fSmrg    $ECHO "run \`$progname --help | more' for full usage"
52049dc963fSmrg    exit $?
52149dc963fSmrg}
52249dc963fSmrg
52349dc963fSmrg# func_help
52449dc963fSmrg# Echo long help message to standard output and exit.
52549dc963fSmrgfunc_help ()
52649dc963fSmrg{
52749dc963fSmrg    $SED -n '/^# Usage:/,/# Report bugs to/ {
52849dc963fSmrg        s/^# //
52949dc963fSmrg	s/^# *$//
53049dc963fSmrg	s*\$progname*'$progname'*
53149dc963fSmrg	s*\$host*'"$host"'*
53249dc963fSmrg	s*\$SHELL*'"$SHELL"'*
53349dc963fSmrg	s*\$LTCC*'"$LTCC"'*
53449dc963fSmrg	s*\$LTCFLAGS*'"$LTCFLAGS"'*
53549dc963fSmrg	s*\$LD*'"$LD"'*
53649dc963fSmrg	s/\$with_gnu_ld/'"$with_gnu_ld"'/
53749dc963fSmrg	s/\$automake_version/'"`(automake --version) 2>/dev/null |$SED 1q`"'/
53849dc963fSmrg	s/\$autoconf_version/'"`(autoconf --version) 2>/dev/null |$SED 1q`"'/
53949dc963fSmrg	p
54049dc963fSmrg     }' < "$progpath"
54149dc963fSmrg    exit $?
54249dc963fSmrg}
54349dc963fSmrg
54449dc963fSmrg# func_missing_arg argname
54549dc963fSmrg# Echo program name prefixed message to standard error and set global
54649dc963fSmrg# exit_cmd.
54749dc963fSmrgfunc_missing_arg ()
54849dc963fSmrg{
54949dc963fSmrg    func_error "missing argument for $1"
55049dc963fSmrg    exit_cmd=exit
5514b0ead49Smrg}
5524b0ead49Smrg
55349dc963fSmrgexit_cmd=:
5544b0ead49Smrg
5554b0ead49Smrg
55649dc963fSmrg
55749dc963fSmrg
55849dc963fSmrg
55949dc963fSmrg# Check that we have a working $ECHO.
56049dc963fSmrgif test "X$1" = X--no-reexec; then
56149dc963fSmrg  # Discard the --no-reexec flag, and continue.
5624b0ead49Smrg  shift
56349dc963fSmrgelif test "X$1" = X--fallback-echo; then
56449dc963fSmrg  # Avoid inline document here, it may be left over
56549dc963fSmrg  :
56649dc963fSmrgelif test "X`{ $ECHO '\t'; } 2>/dev/null`" = 'X\t'; then
56749dc963fSmrg  # Yippee, $ECHO works!
56849dc963fSmrg  :
56949dc963fSmrgelse
57049dc963fSmrg  # Restart under the correct shell, and then maybe $ECHO will work.
57149dc963fSmrg  exec $SHELL "$progpath" --no-reexec ${1+"$@"}
57249dc963fSmrgfi
5734b0ead49Smrg
57449dc963fSmrgif test "X$1" = X--fallback-echo; then
57549dc963fSmrg  # used as fallback echo
57649dc963fSmrg  shift
57749dc963fSmrg  cat <<EOF
57849dc963fSmrg$*
57949dc963fSmrgEOF
58049dc963fSmrg  exit $EXIT_SUCCESS
58149dc963fSmrgfi
5824b0ead49Smrg
58349dc963fSmrgmagic="%%%MAGIC variable%%%"
58449dc963fSmrgmagic_exe="%%%MAGIC EXE variable%%%"
5854b0ead49Smrg
58649dc963fSmrg# Global variables.
58749dc963fSmrg# $mode is unset
58849dc963fSmrgnonopt=
58949dc963fSmrgexecute_dlfiles=
59049dc963fSmrgpreserve_args=
59149dc963fSmrglo2o="s/\\.lo\$/.${objext}/"
59249dc963fSmrgo2lo="s/\\.${objext}\$/.lo/"
59349dc963fSmrgextracted_archives=
59449dc963fSmrgextracted_serial=0
5954b0ead49Smrg
59649dc963fSmrgopt_dry_run=false
59749dc963fSmrgopt_duplicate_deps=false
59849dc963fSmrgopt_silent=false
59949dc963fSmrgopt_debug=:
6004b0ead49Smrg
60149dc963fSmrg# If this variable is set in any of the actions, the command in it
60249dc963fSmrg# will be execed at the end.  This prevents here-documents from being
60349dc963fSmrg# left over by shells.
60449dc963fSmrgexec_cmd=
60549dc963fSmrg
60649dc963fSmrg# func_fatal_configuration arg...
60749dc963fSmrg# Echo program name prefixed message to standard error, followed by
60849dc963fSmrg# a configuration failure hint, and exit.
60949dc963fSmrgfunc_fatal_configuration ()
61049dc963fSmrg{
61149dc963fSmrg    func_error ${1+"$@"}
61249dc963fSmrg    func_error "See the $PACKAGE documentation for more information."
61349dc963fSmrg    func_fatal_error "Fatal configuration error."
61449dc963fSmrg}
6154b0ead49Smrg
61652b01e16Smrg
61749dc963fSmrg# func_config
61849dc963fSmrg# Display the configuration for all the tags in this script.
61949dc963fSmrgfunc_config ()
62049dc963fSmrg{
62149dc963fSmrg    re_begincf='^# ### BEGIN LIBTOOL'
62249dc963fSmrg    re_endcf='^# ### END LIBTOOL'
62349dc963fSmrg
62449dc963fSmrg    # Default configuration.
62549dc963fSmrg    $SED "1,/$re_begincf CONFIG/d;/$re_endcf CONFIG/,\$d" < "$progpath"
6264b0ead49Smrg
6274b0ead49Smrg    # Now print the configurations for the tags.
6284b0ead49Smrg    for tagname in $taglist; do
62949dc963fSmrg      $SED -n "/$re_begincf TAG CONFIG: $tagname\$/,/$re_endcf TAG CONFIG: $tagname\$/p" < "$progpath"
6304b0ead49Smrg    done
6314b0ead49Smrg
63249dc963fSmrg    exit $?
63349dc963fSmrg}
6344b0ead49Smrg
63549dc963fSmrg# func_features
63649dc963fSmrg# Display the features supported by this script.
63749dc963fSmrgfunc_features ()
63849dc963fSmrg{
63949dc963fSmrg    $ECHO "host: $host"
6404b0ead49Smrg    if test "$build_libtool_libs" = yes; then
64149dc963fSmrg      $ECHO "enable shared libraries"
6424b0ead49Smrg    else
64349dc963fSmrg      $ECHO "disable shared libraries"
6444b0ead49Smrg    fi
6454b0ead49Smrg    if test "$build_old_libs" = yes; then
64649dc963fSmrg      $ECHO "enable static libraries"
6474b0ead49Smrg    else
64849dc963fSmrg      $ECHO "disable static libraries"
6494b0ead49Smrg    fi
65049dc963fSmrg
6514b0ead49Smrg    exit $?
65249dc963fSmrg}
6534b0ead49Smrg
65449dc963fSmrg# func_enable_tag tagname
65549dc963fSmrg# Verify that TAGNAME is valid, and either flag an error and exit, or
65649dc963fSmrg# enable the TAGNAME tag.  We also add TAGNAME to the global $taglist
65749dc963fSmrg# variable here.
65849dc963fSmrgfunc_enable_tag ()
65949dc963fSmrg{
66049dc963fSmrg  # Global variable:
66149dc963fSmrg  tagname="$1"
6624b0ead49Smrg
66349dc963fSmrg  re_begincf="^# ### BEGIN LIBTOOL TAG CONFIG: $tagname\$"
66449dc963fSmrg  re_endcf="^# ### END LIBTOOL TAG CONFIG: $tagname\$"
66549dc963fSmrg  sed_extractcf="/$re_begincf/,/$re_endcf/p"
6664b0ead49Smrg
66749dc963fSmrg  # Validate tagname.
66849dc963fSmrg  case $tagname in
66949dc963fSmrg    *[!-_A-Za-z0-9,/]*)
67049dc963fSmrg      func_fatal_error "invalid tag name: $tagname"
67149dc963fSmrg      ;;
67249dc963fSmrg  esac
6734b0ead49Smrg
67449dc963fSmrg  # Don't test for the "default" C tag, as we know it's
67549dc963fSmrg  # there but not specially marked.
67649dc963fSmrg  case $tagname in
67749dc963fSmrg    CC) ;;
67849dc963fSmrg    *)
67949dc963fSmrg      if $GREP "$re_begincf" "$progpath" >/dev/null 2>&1; then
68049dc963fSmrg	taglist="$taglist $tagname"
68149dc963fSmrg
68249dc963fSmrg	# Evaluate the configuration.  Be careful to quote the path
68349dc963fSmrg	# and the sed script, to avoid splitting on whitespace, but
68449dc963fSmrg	# also don't use non-portable quotes within backquotes within
68549dc963fSmrg	# quotes we have to do it in 2 steps:
68649dc963fSmrg	extractedcf=`$SED -n -e "$sed_extractcf" < "$progpath"`
68749dc963fSmrg	eval "$extractedcf"
68849dc963fSmrg      else
68949dc963fSmrg	func_error "ignoring unknown tag $tagname"
69049dc963fSmrg      fi
69149dc963fSmrg      ;;
69249dc963fSmrg  esac
69349dc963fSmrg}
69449dc963fSmrg
69549dc963fSmrg# Parse options once, thoroughly.  This comes as soon as possible in
69649dc963fSmrg# the script to make things like `libtool --version' happen quickly.
69749dc963fSmrg{
6984b0ead49Smrg
69949dc963fSmrg  # Shorthand for --mode=foo, only valid as the first argument
70049dc963fSmrg  case $1 in
70149dc963fSmrg  clean|clea|cle|cl)
70249dc963fSmrg    shift; set dummy --mode clean ${1+"$@"}; shift
7034b0ead49Smrg    ;;
70449dc963fSmrg  compile|compil|compi|comp|com|co|c)
70549dc963fSmrg    shift; set dummy --mode compile ${1+"$@"}; shift
7064b0ead49Smrg    ;;
70749dc963fSmrg  execute|execut|execu|exec|exe|ex|e)
70849dc963fSmrg    shift; set dummy --mode execute ${1+"$@"}; shift
7094b0ead49Smrg    ;;
71049dc963fSmrg  finish|finis|fini|fin|fi|f)
71149dc963fSmrg    shift; set dummy --mode finish ${1+"$@"}; shift
7124b0ead49Smrg    ;;
71349dc963fSmrg  install|instal|insta|inst|ins|in|i)
71449dc963fSmrg    shift; set dummy --mode install ${1+"$@"}; shift
71549dc963fSmrg    ;;
71649dc963fSmrg  link|lin|li|l)
71749dc963fSmrg    shift; set dummy --mode link ${1+"$@"}; shift
71849dc963fSmrg    ;;
71949dc963fSmrg  uninstall|uninstal|uninsta|uninst|unins|unin|uni|un|u)
72049dc963fSmrg    shift; set dummy --mode uninstall ${1+"$@"}; shift
7214b0ead49Smrg    ;;
7224b0ead49Smrg  esac
7234b0ead49Smrg
72449dc963fSmrg  # Parse non-mode specific arguments:
72549dc963fSmrg  while test "$#" -gt 0; do
72649dc963fSmrg    opt="$1"
72749dc963fSmrg    shift
7284b0ead49Smrg
72949dc963fSmrg    case $opt in
73049dc963fSmrg      --config)		func_config					;;
7314b0ead49Smrg
73249dc963fSmrg      --debug)		preserve_args="$preserve_args $opt"
73349dc963fSmrg			func_echo "enabling shell trace mode"
73449dc963fSmrg			opt_debug='set -x'
73549dc963fSmrg			$opt_debug
73649dc963fSmrg			;;
7374b0ead49Smrg
73849dc963fSmrg      -dlopen)		test "$#" -eq 0 && func_missing_arg "$opt" && break
73949dc963fSmrg			execute_dlfiles="$execute_dlfiles $1"
74049dc963fSmrg			shift
74149dc963fSmrg			;;
7424b0ead49Smrg
74349dc963fSmrg      --dry-run | -n)	opt_dry_run=:					;;
74449dc963fSmrg      --features)       func_features					;;
74549dc963fSmrg      --finish)		mode="finish"					;;
74649dc963fSmrg
74749dc963fSmrg      --mode)		test "$#" -eq 0 && func_missing_arg "$opt" && break
74849dc963fSmrg			case $1 in
74949dc963fSmrg			  # Valid mode arguments:
75049dc963fSmrg			  clean)	;;
75149dc963fSmrg			  compile)	;;
75249dc963fSmrg			  execute)	;;
75349dc963fSmrg			  finish)	;;
75449dc963fSmrg			  install)	;;
75549dc963fSmrg			  link)		;;
75649dc963fSmrg			  relink)	;;
75749dc963fSmrg			  uninstall)	;;
75849dc963fSmrg
75949dc963fSmrg			  # Catch anything else as an error
76049dc963fSmrg			  *) func_error "invalid argument for $opt"
76149dc963fSmrg			     exit_cmd=exit
76249dc963fSmrg			     break
76349dc963fSmrg			     ;;
76449dc963fSmrg		        esac
76549dc963fSmrg
76649dc963fSmrg			mode="$1"
76749dc963fSmrg			shift
76849dc963fSmrg			;;
76949dc963fSmrg
77049dc963fSmrg      --preserve-dup-deps)
77149dc963fSmrg			opt_duplicate_deps=:				;;
77249dc963fSmrg
77349dc963fSmrg      --quiet|--silent)	preserve_args="$preserve_args $opt"
77449dc963fSmrg			opt_silent=:
77549dc963fSmrg			;;
77649dc963fSmrg
77749dc963fSmrg      --verbose| -v)	preserve_args="$preserve_args $opt"
77849dc963fSmrg			opt_silent=false
77949dc963fSmrg			;;
78049dc963fSmrg
78149dc963fSmrg      --tag)		test "$#" -eq 0 && func_missing_arg "$opt" && break
78249dc963fSmrg			preserve_args="$preserve_args $opt $1"
78349dc963fSmrg			func_enable_tag "$1"	# tagname is set here
78449dc963fSmrg			shift
78549dc963fSmrg			;;
78649dc963fSmrg
78749dc963fSmrg      # Separate optargs to long options:
78849dc963fSmrg      -dlopen=*|--mode=*|--tag=*)
78949dc963fSmrg			func_opt_split "$opt"
79049dc963fSmrg			set dummy "$func_opt_split_opt" "$func_opt_split_arg" ${1+"$@"}
79149dc963fSmrg			shift
79249dc963fSmrg			;;
79349dc963fSmrg
79449dc963fSmrg      -\?|-h)		func_usage					;;
79549dc963fSmrg      --help)		opt_help=:					;;
79649dc963fSmrg      --version)	func_version					;;
79749dc963fSmrg
79849dc963fSmrg      -*)		func_fatal_help "unrecognized option \`$opt'"	;;
79949dc963fSmrg
80049dc963fSmrg      *)		nonopt="$opt"
80149dc963fSmrg			break
80249dc963fSmrg			;;
80349dc963fSmrg    esac
80449dc963fSmrg  done
80549dc963fSmrg
80649dc963fSmrg
80749dc963fSmrg  case $host in
80849dc963fSmrg    *cygwin* | *mingw* | *pw32* | *cegcc*)
80949dc963fSmrg      # don't eliminate duplications in $postdeps and $predeps
81049dc963fSmrg      opt_duplicate_compiler_generated_deps=:
8114b0ead49Smrg      ;;
8124b0ead49Smrg    *)
81349dc963fSmrg      opt_duplicate_compiler_generated_deps=$opt_duplicate_deps
81449dc963fSmrg      ;;
81549dc963fSmrg  esac
8164b0ead49Smrg
81749dc963fSmrg  # Having warned about all mis-specified options, bail out if
81849dc963fSmrg  # anything was wrong.
81949dc963fSmrg  $exit_cmd $EXIT_FAILURE
82049dc963fSmrg}
82149dc963fSmrg
82249dc963fSmrg# func_check_version_match
82349dc963fSmrg# Ensure that we are using m4 macros, and libtool script from the same
82449dc963fSmrg# release of libtool.
82549dc963fSmrgfunc_check_version_match ()
82649dc963fSmrg{
82749dc963fSmrg  if test "$package_revision" != "$macro_revision"; then
82849dc963fSmrg    if test "$VERSION" != "$macro_version"; then
82949dc963fSmrg      if test -z "$macro_version"; then
83049dc963fSmrg        cat >&2 <<_LT_EOF
83149dc963fSmrg$progname: Version mismatch error.  This is $PACKAGE $VERSION, but the
83249dc963fSmrg$progname: definition of this LT_INIT comes from an older release.
83349dc963fSmrg$progname: You should recreate aclocal.m4 with macros from $PACKAGE $VERSION
83449dc963fSmrg$progname: and run autoconf again.
83549dc963fSmrg_LT_EOF
83649dc963fSmrg      else
83749dc963fSmrg        cat >&2 <<_LT_EOF
83849dc963fSmrg$progname: Version mismatch error.  This is $PACKAGE $VERSION, but the
83949dc963fSmrg$progname: definition of this LT_INIT comes from $PACKAGE $macro_version.
84049dc963fSmrg$progname: You should recreate aclocal.m4 with macros from $PACKAGE $VERSION
84149dc963fSmrg$progname: and run autoconf again.
84249dc963fSmrg_LT_EOF
8434b0ead49Smrg      fi
84449dc963fSmrg    else
84549dc963fSmrg      cat >&2 <<_LT_EOF
84649dc963fSmrg$progname: Version mismatch error.  This is $PACKAGE $VERSION, revision $package_revision,
84749dc963fSmrg$progname: but the definition of this LT_INIT comes from revision $macro_revision.
84849dc963fSmrg$progname: You should recreate aclocal.m4 with macros from revision $package_revision
84949dc963fSmrg$progname: of $PACKAGE $VERSION and run autoconf again.
85049dc963fSmrg_LT_EOF
85149dc963fSmrg    fi
85249dc963fSmrg
85349dc963fSmrg    exit $EXIT_MISMATCH
85449dc963fSmrg  fi
85549dc963fSmrg}
85649dc963fSmrg
85749dc963fSmrg
85849dc963fSmrg## ----------- ##
85949dc963fSmrg##    Main.    ##
86049dc963fSmrg## ----------- ##
86149dc963fSmrg
86249dc963fSmrg$opt_help || {
86349dc963fSmrg  # Sanity checks first:
86449dc963fSmrg  func_check_version_match
86549dc963fSmrg
86649dc963fSmrg  if test "$build_libtool_libs" != yes && test "$build_old_libs" != yes; then
86749dc963fSmrg    func_fatal_configuration "not configured to build any kind of library"
8684b0ead49Smrg  fi
8694b0ead49Smrg
87049dc963fSmrg  test -z "$mode" && func_fatal_error "error: you must specify a MODE."
87149dc963fSmrg
87249dc963fSmrg
87349dc963fSmrg  # Darwin sucks
87449dc963fSmrg  eval std_shrext=\"$shrext_cmds\"
87549dc963fSmrg
87649dc963fSmrg
8774b0ead49Smrg  # Only execute mode is allowed to have -dlopen flags.
8784b0ead49Smrg  if test -n "$execute_dlfiles" && test "$mode" != execute; then
87949dc963fSmrg    func_error "unrecognized option \`-dlopen'"
88049dc963fSmrg    $ECHO "$help" 1>&2
8814b0ead49Smrg    exit $EXIT_FAILURE
8824b0ead49Smrg  fi
8834b0ead49Smrg
8844b0ead49Smrg  # Change the help message to a mode-specific one.
8854b0ead49Smrg  generic_help="$help"
88649dc963fSmrg  help="Try \`$progname --help --mode=$mode' for more information."
88749dc963fSmrg}
8884b0ead49Smrg
8894b0ead49Smrg
89049dc963fSmrg# func_lalib_p file
89149dc963fSmrg# True iff FILE is a libtool `.la' library or `.lo' object file.
89249dc963fSmrg# This function is only a basic sanity check; it will hardly flush out
89349dc963fSmrg# determined imposters.
89449dc963fSmrgfunc_lalib_p ()
89549dc963fSmrg{
89649dc963fSmrg    test -f "$1" &&
89749dc963fSmrg      $SED -e 4q "$1" 2>/dev/null \
89849dc963fSmrg        | $GREP "^# Generated by .*$PACKAGE" > /dev/null 2>&1
89949dc963fSmrg}
9004b0ead49Smrg
90149dc963fSmrg# func_lalib_unsafe_p file
90249dc963fSmrg# True iff FILE is a libtool `.la' library or `.lo' object file.
90349dc963fSmrg# This function implements the same check as func_lalib_p without
90449dc963fSmrg# resorting to external programs.  To this end, it redirects stdin and
90549dc963fSmrg# closes it afterwards, without saving the original file descriptor.
90649dc963fSmrg# As a safety measure, use it only where a negative result would be
90749dc963fSmrg# fatal anyway.  Works if `file' does not exist.
90849dc963fSmrgfunc_lalib_unsafe_p ()
90949dc963fSmrg{
91049dc963fSmrg    lalib_p=no
91149dc963fSmrg    if test -f "$1" && test -r "$1" && exec 5<&0 <"$1"; then
91249dc963fSmrg	for lalib_p_l in 1 2 3 4
91349dc963fSmrg	do
91449dc963fSmrg	    read lalib_p_line
91549dc963fSmrg	    case "$lalib_p_line" in
91649dc963fSmrg		\#\ Generated\ by\ *$PACKAGE* ) lalib_p=yes; break;;
91749dc963fSmrg	    esac
91849dc963fSmrg	done
91949dc963fSmrg	exec 0<&5 5<&-
92049dc963fSmrg    fi
92149dc963fSmrg    test "$lalib_p" = yes
92249dc963fSmrg}
9234b0ead49Smrg
92449dc963fSmrg# func_ltwrapper_script_p file
92549dc963fSmrg# True iff FILE is a libtool wrapper script
92649dc963fSmrg# This function is only a basic sanity check; it will hardly flush out
92749dc963fSmrg# determined imposters.
92849dc963fSmrgfunc_ltwrapper_script_p ()
92949dc963fSmrg{
93049dc963fSmrg    func_lalib_p "$1"
93149dc963fSmrg}
9324b0ead49Smrg
93349dc963fSmrg# func_ltwrapper_executable_p file
93449dc963fSmrg# True iff FILE is a libtool wrapper executable
93549dc963fSmrg# This function is only a basic sanity check; it will hardly flush out
93649dc963fSmrg# determined imposters.
93749dc963fSmrgfunc_ltwrapper_executable_p ()
93849dc963fSmrg{
93949dc963fSmrg    func_ltwrapper_exec_suffix=
94049dc963fSmrg    case $1 in
94149dc963fSmrg    *.exe) ;;
94249dc963fSmrg    *) func_ltwrapper_exec_suffix=.exe ;;
94349dc963fSmrg    esac
94449dc963fSmrg    $GREP "$magic_exe" "$1$func_ltwrapper_exec_suffix" >/dev/null 2>&1
94549dc963fSmrg}
9464b0ead49Smrg
94749dc963fSmrg# func_ltwrapper_scriptname file
94849dc963fSmrg# Assumes file is an ltwrapper_executable
94949dc963fSmrg# uses $file to determine the appropriate filename for a
95049dc963fSmrg# temporary ltwrapper_script.
95149dc963fSmrgfunc_ltwrapper_scriptname ()
95249dc963fSmrg{
95349dc963fSmrg    func_ltwrapper_scriptname_result=""
95449dc963fSmrg    if func_ltwrapper_executable_p "$1"; then
95549dc963fSmrg	func_dirname_and_basename "$1" "" "."
95649dc963fSmrg	func_stripname '' '.exe' "$func_basename_result"
95749dc963fSmrg	func_ltwrapper_scriptname_result="$func_dirname_result/$objdir/${func_stripname_result}_ltshwrapper"
95849dc963fSmrg    fi
95949dc963fSmrg}
96049dc963fSmrg
96149dc963fSmrg# func_ltwrapper_p file
96249dc963fSmrg# True iff FILE is a libtool wrapper script or wrapper executable
96349dc963fSmrg# This function is only a basic sanity check; it will hardly flush out
96449dc963fSmrg# determined imposters.
96549dc963fSmrgfunc_ltwrapper_p ()
96649dc963fSmrg{
96749dc963fSmrg    func_ltwrapper_script_p "$1" || func_ltwrapper_executable_p "$1"
96849dc963fSmrg}
96949dc963fSmrg
97049dc963fSmrg
97149dc963fSmrg# func_execute_cmds commands fail_cmd
97249dc963fSmrg# Execute tilde-delimited COMMANDS.
97349dc963fSmrg# If FAIL_CMD is given, eval that upon failure.
97449dc963fSmrg# FAIL_CMD may read-access the current command in variable CMD!
97549dc963fSmrgfunc_execute_cmds ()
97649dc963fSmrg{
97749dc963fSmrg    $opt_debug
97849dc963fSmrg    save_ifs=$IFS; IFS='~'
97949dc963fSmrg    for cmd in $1; do
98049dc963fSmrg      IFS=$save_ifs
98149dc963fSmrg      eval cmd=\"$cmd\"
98249dc963fSmrg      func_show_eval "$cmd" "${2-:}"
98349dc963fSmrg    done
98449dc963fSmrg    IFS=$save_ifs
98549dc963fSmrg}
98649dc963fSmrg
98749dc963fSmrg
98849dc963fSmrg# func_source file
98949dc963fSmrg# Source FILE, adding directory component if necessary.
99049dc963fSmrg# Note that it is not necessary on cygwin/mingw to append a dot to
99149dc963fSmrg# FILE even if both FILE and FILE.exe exist: automatic-append-.exe
99249dc963fSmrg# behavior happens only for exec(3), not for open(2)!  Also, sourcing
99349dc963fSmrg# `FILE.' does not work on cygwin managed mounts.
99449dc963fSmrgfunc_source ()
99549dc963fSmrg{
99649dc963fSmrg    $opt_debug
99749dc963fSmrg    case $1 in
99849dc963fSmrg    */* | *\\*)	. "$1" ;;
99949dc963fSmrg    *)		. "./$1" ;;
100049dc963fSmrg    esac
100149dc963fSmrg}
100249dc963fSmrg
100349dc963fSmrg
100449dc963fSmrg# func_infer_tag arg
100549dc963fSmrg# Infer tagged configuration to use if any are available and
100649dc963fSmrg# if one wasn't chosen via the "--tag" command line option.
100749dc963fSmrg# Only attempt this if the compiler in the base compile
100849dc963fSmrg# command doesn't match the default compiler.
100949dc963fSmrg# arg is usually of the form 'gcc ...'
101049dc963fSmrgfunc_infer_tag ()
101149dc963fSmrg{
101249dc963fSmrg    $opt_debug
101349dc963fSmrg    if test -n "$available_tags" && test -z "$tagname"; then
101449dc963fSmrg      CC_quoted=
101549dc963fSmrg      for arg in $CC; do
101649dc963fSmrg        func_quote_for_eval "$arg"
101749dc963fSmrg	CC_quoted="$CC_quoted $func_quote_for_eval_result"
101849dc963fSmrg      done
101949dc963fSmrg      case $@ in
102049dc963fSmrg      # Blanks in the command may have been stripped by the calling shell,
102149dc963fSmrg      # but not from the CC environment variable when configure was run.
102249dc963fSmrg      " $CC "* | "$CC "* | " `$ECHO $CC` "* | "`$ECHO $CC` "* | " $CC_quoted"* | "$CC_quoted "* | " `$ECHO $CC_quoted` "* | "`$ECHO $CC_quoted` "*) ;;
102349dc963fSmrg      # Blanks at the start of $base_compile will cause this to fail
102449dc963fSmrg      # if we don't check for them as well.
102549dc963fSmrg      *)
102649dc963fSmrg	for z in $available_tags; do
102749dc963fSmrg	  if $GREP "^# ### BEGIN LIBTOOL TAG CONFIG: $z$" < "$progpath" > /dev/null; then
102849dc963fSmrg	    # Evaluate the configuration.
102949dc963fSmrg	    eval "`${SED} -n -e '/^# ### BEGIN LIBTOOL TAG CONFIG: '$z'$/,/^# ### END LIBTOOL TAG CONFIG: '$z'$/p' < $progpath`"
103049dc963fSmrg	    CC_quoted=
103149dc963fSmrg	    for arg in $CC; do
103249dc963fSmrg	      # Double-quote args containing other shell metacharacters.
103349dc963fSmrg	      func_quote_for_eval "$arg"
103449dc963fSmrg	      CC_quoted="$CC_quoted $func_quote_for_eval_result"
103549dc963fSmrg	    done
103649dc963fSmrg	    case "$@ " in
103749dc963fSmrg	      " $CC "* | "$CC "* | " `$ECHO $CC` "* | "`$ECHO $CC` "* | " $CC_quoted"* | "$CC_quoted "* | " `$ECHO $CC_quoted` "* | "`$ECHO $CC_quoted` "*)
103849dc963fSmrg	      # The compiler in the base compile command matches
103949dc963fSmrg	      # the one in the tagged configuration.
104049dc963fSmrg	      # Assume this is the tagged configuration we want.
104149dc963fSmrg	      tagname=$z
104249dc963fSmrg	      break
104349dc963fSmrg	      ;;
104449dc963fSmrg	    esac
104549dc963fSmrg	  fi
104649dc963fSmrg	done
104749dc963fSmrg	# If $tagname still isn't set, then no tagged configuration
104849dc963fSmrg	# was found and let the user know that the "--tag" command
104949dc963fSmrg	# line option must be used.
105049dc963fSmrg	if test -z "$tagname"; then
105149dc963fSmrg	  func_echo "unable to infer tagged configuration"
105249dc963fSmrg	  func_fatal_error "specify a tag with \`--tag'"
105349dc963fSmrg#	else
105449dc963fSmrg#	  func_verbose "using $tagname tagged configuration"
105549dc963fSmrg	fi
105649dc963fSmrg	;;
105749dc963fSmrg      esac
105849dc963fSmrg    fi
105949dc963fSmrg}
106049dc963fSmrg
106149dc963fSmrg
106249dc963fSmrg
106349dc963fSmrg# func_write_libtool_object output_name pic_name nonpic_name
106449dc963fSmrg# Create a libtool object file (analogous to a ".la" file),
106549dc963fSmrg# but don't create it if we're doing a dry run.
106649dc963fSmrgfunc_write_libtool_object ()
106749dc963fSmrg{
106849dc963fSmrg    write_libobj=${1}
106949dc963fSmrg    if test "$build_libtool_libs" = yes; then
107049dc963fSmrg      write_lobj=\'${2}\'
107149dc963fSmrg    else
107249dc963fSmrg      write_lobj=none
107349dc963fSmrg    fi
107449dc963fSmrg
107549dc963fSmrg    if test "$build_old_libs" = yes; then
107649dc963fSmrg      write_oldobj=\'${3}\'
107749dc963fSmrg    else
107849dc963fSmrg      write_oldobj=none
107949dc963fSmrg    fi
108049dc963fSmrg
108149dc963fSmrg    $opt_dry_run || {
108249dc963fSmrg      cat >${write_libobj}T <<EOF
108349dc963fSmrg# $write_libobj - a libtool object file
108449dc963fSmrg# Generated by $PROGRAM (GNU $PACKAGE$TIMESTAMP) $VERSION
108549dc963fSmrg#
108649dc963fSmrg# Please DO NOT delete this file!
108749dc963fSmrg# It is necessary for linking the library.
108849dc963fSmrg
108949dc963fSmrg# Name of the PIC object.
109049dc963fSmrgpic_object=$write_lobj
109149dc963fSmrg
109249dc963fSmrg# Name of the non-PIC object
109349dc963fSmrgnon_pic_object=$write_oldobj
109449dc963fSmrg
109549dc963fSmrgEOF
109649dc963fSmrg      $MV "${write_libobj}T" "${write_libobj}"
109749dc963fSmrg    }
109849dc963fSmrg}
109949dc963fSmrg
110049dc963fSmrg# func_mode_compile arg...
110149dc963fSmrgfunc_mode_compile ()
110249dc963fSmrg{
110349dc963fSmrg    $opt_debug
110449dc963fSmrg    # Get the compilation command and the source file.
110549dc963fSmrg    base_compile=
110649dc963fSmrg    srcfile="$nonopt"  #  always keep a non-empty value in "srcfile"
110749dc963fSmrg    suppress_opt=yes
110849dc963fSmrg    suppress_output=
110949dc963fSmrg    arg_mode=normal
111049dc963fSmrg    libobj=
111149dc963fSmrg    later=
111249dc963fSmrg    pie_flag=
111349dc963fSmrg
111449dc963fSmrg    for arg
111549dc963fSmrg    do
111649dc963fSmrg      case $arg_mode in
111749dc963fSmrg      arg  )
111849dc963fSmrg	# do not "continue".  Instead, add this to base_compile
111949dc963fSmrg	lastarg="$arg"
112049dc963fSmrg	arg_mode=normal
112149dc963fSmrg	;;
112249dc963fSmrg
112349dc963fSmrg      target )
112449dc963fSmrg	libobj="$arg"
112549dc963fSmrg	arg_mode=normal
112649dc963fSmrg	continue
112749dc963fSmrg	;;
112849dc963fSmrg
112949dc963fSmrg      normal )
113049dc963fSmrg	# Accept any command-line options.
113149dc963fSmrg	case $arg in
113249dc963fSmrg	-o)
113349dc963fSmrg	  test -n "$libobj" && \
113449dc963fSmrg	    func_fatal_error "you cannot specify \`-o' more than once"
113549dc963fSmrg	  arg_mode=target
113649dc963fSmrg	  continue
113749dc963fSmrg	  ;;
113849dc963fSmrg
113949dc963fSmrg	-pie | -fpie | -fPIE)
114049dc963fSmrg          pie_flag="$pie_flag $arg"
114149dc963fSmrg	  continue
114249dc963fSmrg	  ;;
114349dc963fSmrg
114449dc963fSmrg	-shared | -static | -prefer-pic | -prefer-non-pic)
114549dc963fSmrg	  later="$later $arg"
114649dc963fSmrg	  continue
114749dc963fSmrg	  ;;
114849dc963fSmrg
114949dc963fSmrg	-no-suppress)
11504b0ead49Smrg	  suppress_opt=no
11514b0ead49Smrg	  continue
11524b0ead49Smrg	  ;;
11534b0ead49Smrg
11544b0ead49Smrg	-Xcompiler)
11554b0ead49Smrg	  arg_mode=arg  #  the next one goes into the "base_compile" arg list
11564b0ead49Smrg	  continue      #  The current "srcfile" will either be retained or
11574b0ead49Smrg	  ;;            #  replaced later.  I would guess that would be a bug.
11584b0ead49Smrg
11594b0ead49Smrg	-Wc,*)
116049dc963fSmrg	  func_stripname '-Wc,' '' "$arg"
116149dc963fSmrg	  args=$func_stripname_result
11624b0ead49Smrg	  lastarg=
11634b0ead49Smrg	  save_ifs="$IFS"; IFS=','
116449dc963fSmrg	  for arg in $args; do
11654b0ead49Smrg	    IFS="$save_ifs"
116649dc963fSmrg	    func_quote_for_eval "$arg"
116749dc963fSmrg	    lastarg="$lastarg $func_quote_for_eval_result"
11684b0ead49Smrg	  done
11694b0ead49Smrg	  IFS="$save_ifs"
117049dc963fSmrg	  func_stripname ' ' '' "$lastarg"
117149dc963fSmrg	  lastarg=$func_stripname_result
11724b0ead49Smrg
11734b0ead49Smrg	  # Add the arguments to base_compile.
11744b0ead49Smrg	  base_compile="$base_compile $lastarg"
11754b0ead49Smrg	  continue
11764b0ead49Smrg	  ;;
11774b0ead49Smrg
117849dc963fSmrg	*)
11794b0ead49Smrg	  # Accept the current argument as the source file.
11804b0ead49Smrg	  # The previous "srcfile" becomes the current argument.
11814b0ead49Smrg	  #
11824b0ead49Smrg	  lastarg="$srcfile"
11834b0ead49Smrg	  srcfile="$arg"
11844b0ead49Smrg	  ;;
11854b0ead49Smrg	esac  #  case $arg
11864b0ead49Smrg	;;
11874b0ead49Smrg      esac    #  case $arg_mode
11884b0ead49Smrg
11894b0ead49Smrg      # Aesthetically quote the previous argument.
119049dc963fSmrg      func_quote_for_eval "$lastarg"
119149dc963fSmrg      base_compile="$base_compile $func_quote_for_eval_result"
11924b0ead49Smrg    done # for arg
11934b0ead49Smrg
11944b0ead49Smrg    case $arg_mode in
11954b0ead49Smrg    arg)
119649dc963fSmrg      func_fatal_error "you must specify an argument for -Xcompile"
11974b0ead49Smrg      ;;
11984b0ead49Smrg    target)
119949dc963fSmrg      func_fatal_error "you must specify a target with \`-o'"
12004b0ead49Smrg      ;;
12014b0ead49Smrg    *)
12024b0ead49Smrg      # Get the name of the library object.
120349dc963fSmrg      test -z "$libobj" && {
120449dc963fSmrg	func_basename "$srcfile"
120549dc963fSmrg	libobj="$func_basename_result"
120649dc963fSmrg      }
12074b0ead49Smrg      ;;
12084b0ead49Smrg    esac
12094b0ead49Smrg
12104b0ead49Smrg    # Recognize several different file suffixes.
12114b0ead49Smrg    # If the user specifies -o file.o, it is replaced with file.lo
12124b0ead49Smrg    case $libobj in
121349dc963fSmrg    *.[cCFSifmso] | \
121449dc963fSmrg    *.ada | *.adb | *.ads | *.asm | \
121549dc963fSmrg    *.c++ | *.cc | *.ii | *.class | *.cpp | *.cxx | \
121649dc963fSmrg    *.[fF][09]? | *.for | *.java | *.obj | *.sx)
121749dc963fSmrg      func_xform "$libobj"
121849dc963fSmrg      libobj=$func_xform_result
121949dc963fSmrg      ;;
12204b0ead49Smrg    esac
12214b0ead49Smrg
12224b0ead49Smrg    case $libobj in
122349dc963fSmrg    *.lo) func_lo2o "$libobj"; obj=$func_lo2o_result ;;
12244b0ead49Smrg    *)
122549dc963fSmrg      func_fatal_error "cannot determine name of library object from \`$libobj'"
12264b0ead49Smrg      ;;
12274b0ead49Smrg    esac
12284b0ead49Smrg
12294b0ead49Smrg    func_infer_tag $base_compile
12304b0ead49Smrg
12314b0ead49Smrg    for arg in $later; do
12324b0ead49Smrg      case $arg in
123349dc963fSmrg      -shared)
123449dc963fSmrg	test "$build_libtool_libs" != yes && \
123549dc963fSmrg	  func_fatal_configuration "can not build a shared library"
123649dc963fSmrg	build_old_libs=no
123749dc963fSmrg	continue
123849dc963fSmrg	;;
123949dc963fSmrg
12404b0ead49Smrg      -static)
124149dc963fSmrg	build_libtool_libs=no
12424b0ead49Smrg	build_old_libs=yes
12434b0ead49Smrg	continue
12444b0ead49Smrg	;;
12454b0ead49Smrg
12464b0ead49Smrg      -prefer-pic)
12474b0ead49Smrg	pic_mode=yes
12484b0ead49Smrg	continue
12494b0ead49Smrg	;;
12504b0ead49Smrg
12514b0ead49Smrg      -prefer-non-pic)
12524b0ead49Smrg	pic_mode=no
12534b0ead49Smrg	continue
12544b0ead49Smrg	;;
12554b0ead49Smrg      esac
12564b0ead49Smrg    done
12574b0ead49Smrg
125849dc963fSmrg    func_quote_for_eval "$libobj"
125949dc963fSmrg    test "X$libobj" != "X$func_quote_for_eval_result" \
126049dc963fSmrg      && $ECHO "X$libobj" | $GREP '[]~#^*{};<>?"'"'"'	 &()|`$[]' \
126149dc963fSmrg      && func_warning "libobj name \`$libobj' may not contain shell special characters."
126249dc963fSmrg    func_dirname_and_basename "$obj" "/" ""
126349dc963fSmrg    objname="$func_basename_result"
126449dc963fSmrg    xdir="$func_dirname_result"
12654b0ead49Smrg    lobj=${xdir}$objdir/$objname
12664b0ead49Smrg
126749dc963fSmrg    test -z "$base_compile" && \
126849dc963fSmrg      func_fatal_help "you must specify a compilation command"
12694b0ead49Smrg
12704b0ead49Smrg    # Delete any leftover library objects.
12714b0ead49Smrg    if test "$build_old_libs" = yes; then
12724b0ead49Smrg      removelist="$obj $lobj $libobj ${libobj}T"
12734b0ead49Smrg    else
12744b0ead49Smrg      removelist="$lobj $libobj ${libobj}T"
12754b0ead49Smrg    fi
12764b0ead49Smrg
12774b0ead49Smrg    # On Cygwin there's no "real" PIC flag so we must build both object types
12784b0ead49Smrg    case $host_os in
127949dc963fSmrg    cygwin* | mingw* | pw32* | os2* | cegcc*)
12804b0ead49Smrg      pic_mode=default
12814b0ead49Smrg      ;;
12824b0ead49Smrg    esac
12834b0ead49Smrg    if test "$pic_mode" = no && test "$deplibs_check_method" != pass_all; then
12844b0ead49Smrg      # non-PIC code in shared libraries is not supported
12854b0ead49Smrg      pic_mode=default
12864b0ead49Smrg    fi
12874b0ead49Smrg
12884b0ead49Smrg    # Calculate the filename of the output object if compiler does
12894b0ead49Smrg    # not support -o with -c
12904b0ead49Smrg    if test "$compiler_c_o" = no; then
129149dc963fSmrg      output_obj=`$ECHO "X$srcfile" | $Xsed -e 's%^.*/%%' -e 's%\.[^.]*$%%'`.${objext}
12924b0ead49Smrg      lockfile="$output_obj.lock"
12934b0ead49Smrg    else
12944b0ead49Smrg      output_obj=
12954b0ead49Smrg      need_locks=no
12964b0ead49Smrg      lockfile=
12974b0ead49Smrg    fi
12984b0ead49Smrg
12994b0ead49Smrg    # Lock this critical section if it is needed
13004b0ead49Smrg    # We use this script file to make the link, it avoids creating a new file
13014b0ead49Smrg    if test "$need_locks" = yes; then
130249dc963fSmrg      until $opt_dry_run || ln "$progpath" "$lockfile" 2>/dev/null; do
130349dc963fSmrg	func_echo "Waiting for $lockfile to be removed"
13044b0ead49Smrg	sleep 2
13054b0ead49Smrg      done
13064b0ead49Smrg    elif test "$need_locks" = warn; then
13074b0ead49Smrg      if test -f "$lockfile"; then
130849dc963fSmrg	$ECHO "\
13094b0ead49Smrg*** ERROR, $lockfile exists and contains:
13104b0ead49Smrg`cat $lockfile 2>/dev/null`
13114b0ead49Smrg
13124b0ead49SmrgThis indicates that another process is trying to use the same
13134b0ead49Smrgtemporary object file, and libtool could not work around it because
13144b0ead49Smrgyour compiler does not support \`-c' and \`-o' together.  If you
13154b0ead49Smrgrepeat this compilation, it may succeed, by chance, but you had better
13164b0ead49Smrgavoid parallel builds (make -j) in this platform, or get a better
13174b0ead49Smrgcompiler."
13184b0ead49Smrg
131949dc963fSmrg	$opt_dry_run || $RM $removelist
13204b0ead49Smrg	exit $EXIT_FAILURE
13214b0ead49Smrg      fi
132249dc963fSmrg      removelist="$removelist $output_obj"
132349dc963fSmrg      $ECHO "$srcfile" > "$lockfile"
13244b0ead49Smrg    fi
13254b0ead49Smrg
132649dc963fSmrg    $opt_dry_run || $RM $removelist
132749dc963fSmrg    removelist="$removelist $lockfile"
132849dc963fSmrg    trap '$opt_dry_run || $RM $removelist; exit $EXIT_FAILURE' 1 2 15
132949dc963fSmrg
13304b0ead49Smrg    if test -n "$fix_srcfile_path"; then
13314b0ead49Smrg      eval srcfile=\"$fix_srcfile_path\"
13324b0ead49Smrg    fi
133349dc963fSmrg    func_quote_for_eval "$srcfile"
133449dc963fSmrg    qsrcfile=$func_quote_for_eval_result
13354b0ead49Smrg
13364b0ead49Smrg    # Only build a PIC object if we are building libtool libraries.
13374b0ead49Smrg    if test "$build_libtool_libs" = yes; then
13384b0ead49Smrg      # Without this assignment, base_compile gets emptied.
13394b0ead49Smrg      fbsd_hideous_sh_bug=$base_compile
13404b0ead49Smrg
13414b0ead49Smrg      if test "$pic_mode" != no; then
13424b0ead49Smrg	command="$base_compile $qsrcfile $pic_flag"
13434b0ead49Smrg      else
13444b0ead49Smrg	# Don't build PIC code
13454b0ead49Smrg	command="$base_compile $qsrcfile"
13464b0ead49Smrg      fi
13474b0ead49Smrg
134849dc963fSmrg      func_mkdir_p "$xdir$objdir"
13494b0ead49Smrg
13504b0ead49Smrg      if test -z "$output_obj"; then
13514b0ead49Smrg	# Place PIC objects in $objdir
13524b0ead49Smrg	command="$command -o $lobj"
13534b0ead49Smrg      fi
13544b0ead49Smrg
135549dc963fSmrg      func_show_eval_locale "$command"	\
135649dc963fSmrg          'test -n "$output_obj" && $RM $removelist; exit $EXIT_FAILURE'
13574b0ead49Smrg
13584b0ead49Smrg      if test "$need_locks" = warn &&
13594b0ead49Smrg	 test "X`cat $lockfile 2>/dev/null`" != "X$srcfile"; then
136049dc963fSmrg	$ECHO "\
13614b0ead49Smrg*** ERROR, $lockfile contains:
13624b0ead49Smrg`cat $lockfile 2>/dev/null`
13634b0ead49Smrg
13644b0ead49Smrgbut it should contain:
13654b0ead49Smrg$srcfile
13664b0ead49Smrg
13674b0ead49SmrgThis indicates that another process is trying to use the same
13684b0ead49Smrgtemporary object file, and libtool could not work around it because
13694b0ead49Smrgyour compiler does not support \`-c' and \`-o' together.  If you
13704b0ead49Smrgrepeat this compilation, it may succeed, by chance, but you had better
13714b0ead49Smrgavoid parallel builds (make -j) in this platform, or get a better
13724b0ead49Smrgcompiler."
13734b0ead49Smrg
137449dc963fSmrg	$opt_dry_run || $RM $removelist
13754b0ead49Smrg	exit $EXIT_FAILURE
13764b0ead49Smrg      fi
13774b0ead49Smrg
13784b0ead49Smrg      # Just move the object if needed, then go on to compile the next one
13794b0ead49Smrg      if test -n "$output_obj" && test "X$output_obj" != "X$lobj"; then
138049dc963fSmrg	func_show_eval '$MV "$output_obj" "$lobj"' \
138149dc963fSmrg	  'error=$?; $opt_dry_run || $RM $removelist; exit $error'
13824b0ead49Smrg      fi
13834b0ead49Smrg
13844b0ead49Smrg      # Allow error messages only from the first compilation.
13854b0ead49Smrg      if test "$suppress_opt" = yes; then
138649dc963fSmrg	suppress_output=' >/dev/null 2>&1'
13874b0ead49Smrg      fi
13884b0ead49Smrg    fi
13894b0ead49Smrg
13904b0ead49Smrg    # Only build a position-dependent object if we build old libraries.
13914b0ead49Smrg    if test "$build_old_libs" = yes; then
13924b0ead49Smrg      if test "$pic_mode" != yes; then
13934b0ead49Smrg	# Don't build PIC code
139449dc963fSmrg	command="$base_compile $qsrcfile$pie_flag"
13954b0ead49Smrg      else
13964b0ead49Smrg	command="$base_compile $qsrcfile $pic_flag"
13974b0ead49Smrg      fi
13984b0ead49Smrg      if test "$compiler_c_o" = yes; then
13994b0ead49Smrg	command="$command -o $obj"
14004b0ead49Smrg      fi
14014b0ead49Smrg
14024b0ead49Smrg      # Suppress compiler output if we already did a PIC compilation.
14034b0ead49Smrg      command="$command$suppress_output"
140449dc963fSmrg      func_show_eval_locale "$command" \
140549dc963fSmrg        '$opt_dry_run || $RM $removelist; exit $EXIT_FAILURE'
14064b0ead49Smrg
14074b0ead49Smrg      if test "$need_locks" = warn &&
14084b0ead49Smrg	 test "X`cat $lockfile 2>/dev/null`" != "X$srcfile"; then
140949dc963fSmrg	$ECHO "\
14104b0ead49Smrg*** ERROR, $lockfile contains:
14114b0ead49Smrg`cat $lockfile 2>/dev/null`
14124b0ead49Smrg
14134b0ead49Smrgbut it should contain:
14144b0ead49Smrg$srcfile
14154b0ead49Smrg
14164b0ead49SmrgThis indicates that another process is trying to use the same
14174b0ead49Smrgtemporary object file, and libtool could not work around it because
14184b0ead49Smrgyour compiler does not support \`-c' and \`-o' together.  If you
14194b0ead49Smrgrepeat this compilation, it may succeed, by chance, but you had better
14204b0ead49Smrgavoid parallel builds (make -j) in this platform, or get a better
14214b0ead49Smrgcompiler."
14224b0ead49Smrg
142349dc963fSmrg	$opt_dry_run || $RM $removelist
14244b0ead49Smrg	exit $EXIT_FAILURE
14254b0ead49Smrg      fi
14264b0ead49Smrg
14274b0ead49Smrg      # Just move the object if needed
14284b0ead49Smrg      if test -n "$output_obj" && test "X$output_obj" != "X$obj"; then
142949dc963fSmrg	func_show_eval '$MV "$output_obj" "$obj"' \
143049dc963fSmrg	  'error=$?; $opt_dry_run || $RM $removelist; exit $error'
14314b0ead49Smrg      fi
14324b0ead49Smrg    fi
14334b0ead49Smrg
143449dc963fSmrg    $opt_dry_run || {
143549dc963fSmrg      func_write_libtool_object "$libobj" "$objdir/$objname" "$objname"
14364b0ead49Smrg
143749dc963fSmrg      # Unlock the critical section if it was locked
143849dc963fSmrg      if test "$need_locks" != no; then
143949dc963fSmrg	removelist=$lockfile
144049dc963fSmrg        $RM "$lockfile"
144149dc963fSmrg      fi
144249dc963fSmrg    }
14434b0ead49Smrg
14444b0ead49Smrg    exit $EXIT_SUCCESS
144549dc963fSmrg}
14464b0ead49Smrg
144749dc963fSmrg$opt_help || {
144849dc963fSmrgtest "$mode" = compile && func_mode_compile ${1+"$@"}
144949dc963fSmrg}
14504b0ead49Smrg
145149dc963fSmrgfunc_mode_help ()
145249dc963fSmrg{
145349dc963fSmrg    # We need to display help for each of the modes.
145449dc963fSmrg    case $mode in
145549dc963fSmrg      "")
145649dc963fSmrg        # Generic help is extracted from the usage comments
145749dc963fSmrg        # at the start of this file.
145849dc963fSmrg        func_help
145949dc963fSmrg        ;;
14604b0ead49Smrg
146149dc963fSmrg      clean)
146249dc963fSmrg        $ECHO \
146349dc963fSmrg"Usage: $progname [OPTION]... --mode=clean RM [RM-OPTION]... FILE...
14644b0ead49Smrg
146549dc963fSmrgRemove files from the build directory.
14664b0ead49Smrg
146749dc963fSmrgRM is the name of the program to use to delete files associated with each FILE
146849dc963fSmrg(typically \`/bin/rm').  RM-OPTIONS are options (such as \`-f') to be passed
146949dc963fSmrgto RM.
14704b0ead49Smrg
147149dc963fSmrgIf FILE is a libtool library, object or program, all the files associated
147249dc963fSmrgwith it are deleted. Otherwise, only FILE itself is deleted using RM."
147349dc963fSmrg        ;;
14744b0ead49Smrg
147549dc963fSmrg      compile)
147649dc963fSmrg      $ECHO \
147749dc963fSmrg"Usage: $progname [OPTION]... --mode=compile COMPILE-COMMAND... SOURCEFILE
14784b0ead49Smrg
147949dc963fSmrgCompile a source file into a libtool library object.
14804b0ead49Smrg
148149dc963fSmrgThis mode accepts the following additional options:
14824b0ead49Smrg
148349dc963fSmrg  -o OUTPUT-FILE    set the output file name to OUTPUT-FILE
148449dc963fSmrg  -no-suppress      do not suppress compiler output for multiple passes
148549dc963fSmrg  -prefer-pic       try to building PIC objects only
148649dc963fSmrg  -prefer-non-pic   try to building non-PIC objects only
148749dc963fSmrg  -shared           do not build a \`.o' file suitable for static linking
148849dc963fSmrg  -static           only build a \`.o' file suitable for static linking
14894b0ead49Smrg
149049dc963fSmrgCOMPILE-COMMAND is a command to be used in creating a \`standard' object file
149149dc963fSmrgfrom the given SOURCEFILE.
14924b0ead49Smrg
149349dc963fSmrgThe output file name is determined by removing the directory component from
149449dc963fSmrgSOURCEFILE, then substituting the C source code suffix \`.c' with the
149549dc963fSmrglibrary object suffix, \`.lo'."
149649dc963fSmrg        ;;
14974b0ead49Smrg
149849dc963fSmrg      execute)
149949dc963fSmrg        $ECHO \
150049dc963fSmrg"Usage: $progname [OPTION]... --mode=execute COMMAND [ARGS]...
15014b0ead49Smrg
150249dc963fSmrgAutomatically set library path, then run a program.
15034b0ead49Smrg
150449dc963fSmrgThis mode accepts the following additional options:
15054b0ead49Smrg
150649dc963fSmrg  -dlopen FILE      add the directory containing FILE to the library path
15074b0ead49Smrg
150849dc963fSmrgThis mode sets the library path environment variable according to \`-dlopen'
150949dc963fSmrgflags.
15104b0ead49Smrg
151149dc963fSmrgIf any of the ARGS are libtool executable wrappers, then they are translated
151249dc963fSmrginto their corresponding uninstalled binary, and any of their required library
151349dc963fSmrgdirectories are added to the library path.
15144b0ead49Smrg
151549dc963fSmrgThen, COMMAND is executed, with ARGS as arguments."
151649dc963fSmrg        ;;
15174b0ead49Smrg
151849dc963fSmrg      finish)
151949dc963fSmrg        $ECHO \
152049dc963fSmrg"Usage: $progname [OPTION]... --mode=finish [LIBDIR]...
15214b0ead49Smrg
152249dc963fSmrgComplete the installation of libtool libraries.
15234b0ead49Smrg
152449dc963fSmrgEach LIBDIR is a directory that contains libtool libraries.
15254b0ead49Smrg
152649dc963fSmrgThe commands that this mode executes may require superuser privileges.  Use
152749dc963fSmrgthe \`--dry-run' option if you just want to see what would be executed."
152849dc963fSmrg        ;;
15294b0ead49Smrg
153049dc963fSmrg      install)
153149dc963fSmrg        $ECHO \
153249dc963fSmrg"Usage: $progname [OPTION]... --mode=install INSTALL-COMMAND...
15334b0ead49Smrg
153449dc963fSmrgInstall executables or libraries.
15354b0ead49Smrg
153649dc963fSmrgINSTALL-COMMAND is the installation command.  The first component should be
153749dc963fSmrgeither the \`install' or \`cp' program.
15384b0ead49Smrg
153949dc963fSmrgThe following components of INSTALL-COMMAND are treated specially:
15404b0ead49Smrg
154149dc963fSmrg  -inst-prefix PREFIX-DIR  Use PREFIX-DIR as a staging area for installation
15424b0ead49Smrg
154349dc963fSmrgThe rest of the components are interpreted as arguments to that command (only
154449dc963fSmrgBSD-compatible install options are recognized)."
154549dc963fSmrg        ;;
15464b0ead49Smrg
154749dc963fSmrg      link)
154849dc963fSmrg        $ECHO \
154949dc963fSmrg"Usage: $progname [OPTION]... --mode=link LINK-COMMAND...
15504b0ead49Smrg
155149dc963fSmrgLink object files or libraries together to form another library, or to
155249dc963fSmrgcreate an executable program.
15534b0ead49Smrg
155449dc963fSmrgLINK-COMMAND is a command using the C compiler that you would use to create
155549dc963fSmrga program from several object files.
15564b0ead49Smrg
155749dc963fSmrgThe following components of LINK-COMMAND are treated specially:
15584b0ead49Smrg
155949dc963fSmrg  -all-static       do not do any dynamic linking at all
156049dc963fSmrg  -avoid-version    do not add a version suffix if possible
156149dc963fSmrg  -dlopen FILE      \`-dlpreopen' FILE if it cannot be dlopened at runtime
156249dc963fSmrg  -dlpreopen FILE   link in FILE and add its symbols to lt_preloaded_symbols
156349dc963fSmrg  -export-dynamic   allow symbols from OUTPUT-FILE to be resolved with dlsym(3)
156449dc963fSmrg  -export-symbols SYMFILE
156549dc963fSmrg                    try to export only the symbols listed in SYMFILE
156649dc963fSmrg  -export-symbols-regex REGEX
156749dc963fSmrg                    try to export only the symbols matching REGEX
156849dc963fSmrg  -LLIBDIR          search LIBDIR for required installed libraries
156949dc963fSmrg  -lNAME            OUTPUT-FILE requires the installed library libNAME
157049dc963fSmrg  -module           build a library that can dlopened
157149dc963fSmrg  -no-fast-install  disable the fast-install mode
157249dc963fSmrg  -no-install       link a not-installable executable
157349dc963fSmrg  -no-undefined     declare that a library does not refer to external symbols
157449dc963fSmrg  -o OUTPUT-FILE    create OUTPUT-FILE from the specified objects
157549dc963fSmrg  -objectlist FILE  Use a list of object files found in FILE to specify objects
157649dc963fSmrg  -precious-files-regex REGEX
157749dc963fSmrg                    don't remove output files matching REGEX
157849dc963fSmrg  -release RELEASE  specify package release information
157949dc963fSmrg  -rpath LIBDIR     the created library will eventually be installed in LIBDIR
158049dc963fSmrg  -R[ ]LIBDIR       add LIBDIR to the runtime path of programs and libraries
158149dc963fSmrg  -shared           only do dynamic linking of libtool libraries
158249dc963fSmrg  -shrext SUFFIX    override the standard shared library file extension
158349dc963fSmrg  -static           do not do any dynamic linking of uninstalled libtool libraries
158449dc963fSmrg  -static-libtool-libs
158549dc963fSmrg                    do not do any dynamic linking of libtool libraries
158649dc963fSmrg  -version-info CURRENT[:REVISION[:AGE]]
158749dc963fSmrg                    specify library version info [each variable defaults to 0]
158849dc963fSmrg  -weak LIBNAME     declare that the target provides the LIBNAME interface
15894b0ead49Smrg
159049dc963fSmrgAll other options (arguments beginning with \`-') are ignored.
15914b0ead49Smrg
159249dc963fSmrgEvery other argument is treated as a filename.  Files ending in \`.la' are
159349dc963fSmrgtreated as uninstalled libtool libraries, other files are standard or library
159449dc963fSmrgobject files.
159552b01e16Smrg
159649dc963fSmrgIf the OUTPUT-FILE ends in \`.la', then a libtool library is created,
159749dc963fSmrgonly library objects (\`.lo' files) may be specified, and \`-rpath' is
159849dc963fSmrgrequired, except when creating a convenience library.
15994b0ead49Smrg
160049dc963fSmrgIf OUTPUT-FILE ends in \`.a' or \`.lib', then a standard library is created
160149dc963fSmrgusing \`ar' and \`ranlib', or on Windows using \`lib'.
16024b0ead49Smrg
160349dc963fSmrgIf OUTPUT-FILE ends in \`.lo' or \`.${objext}', then a reloadable object file
160449dc963fSmrgis created, otherwise an executable program is created."
16054b0ead49Smrg        ;;
16064b0ead49Smrg
160749dc963fSmrg      uninstall)
160849dc963fSmrg        $ECHO \
160949dc963fSmrg"Usage: $progname [OPTION]... --mode=uninstall RM [RM-OPTION]... FILE...
16104b0ead49Smrg
161149dc963fSmrgRemove libraries from an installation directory.
16124b0ead49Smrg
161349dc963fSmrgRM is the name of the program to use to delete files associated with each FILE
161449dc963fSmrg(typically \`/bin/rm').  RM-OPTIONS are options (such as \`-f') to be passed
161549dc963fSmrgto RM.
16164b0ead49Smrg
161749dc963fSmrgIf FILE is a libtool library, all the files associated with it are deleted.
161849dc963fSmrgOtherwise, only FILE itself is deleted using RM."
161949dc963fSmrg        ;;
16204b0ead49Smrg
162149dc963fSmrg      *)
162249dc963fSmrg        func_fatal_help "invalid operation mode \`$mode'"
162349dc963fSmrg        ;;
162449dc963fSmrg    esac
16254b0ead49Smrg
162649dc963fSmrg    $ECHO
162749dc963fSmrg    $ECHO "Try \`$progname --help' for more information about other modes."
16284b0ead49Smrg
162949dc963fSmrg    exit $?
163049dc963fSmrg}
16314b0ead49Smrg
163249dc963fSmrg  # Now that we've collected a possible --mode arg, show help if necessary
163349dc963fSmrg  $opt_help && func_mode_help
16344b0ead49Smrg
16354b0ead49Smrg
163649dc963fSmrg# func_mode_execute arg...
163749dc963fSmrgfunc_mode_execute ()
163849dc963fSmrg{
163949dc963fSmrg    $opt_debug
164049dc963fSmrg    # The first argument is the command name.
164149dc963fSmrg    cmd="$nonopt"
164249dc963fSmrg    test -z "$cmd" && \
164349dc963fSmrg      func_fatal_help "you must specify a COMMAND"
16444b0ead49Smrg
164549dc963fSmrg    # Handle -dlopen flags immediately.
164649dc963fSmrg    for file in $execute_dlfiles; do
164749dc963fSmrg      test -f "$file" \
164849dc963fSmrg	|| func_fatal_help "\`$file' is not a file"
16494b0ead49Smrg
165049dc963fSmrg      dir=
165149dc963fSmrg      case $file in
165249dc963fSmrg      *.la)
165349dc963fSmrg	# Check to see that this really is a libtool archive.
165449dc963fSmrg	func_lalib_unsafe_p "$file" \
165549dc963fSmrg	  || func_fatal_help "\`$lib' is not a valid libtool archive"
16564b0ead49Smrg
165749dc963fSmrg	# Read the libtool library.
165849dc963fSmrg	dlname=
165949dc963fSmrg	library_names=
166049dc963fSmrg	func_source "$file"
16614b0ead49Smrg
166249dc963fSmrg	# Skip this library if it cannot be dlopened.
166349dc963fSmrg	if test -z "$dlname"; then
166449dc963fSmrg	  # Warn if it was a shared library.
166549dc963fSmrg	  test -n "$library_names" && \
166649dc963fSmrg	    func_warning "\`$file' was not linked with \`-export-dynamic'"
166749dc963fSmrg	  continue
166849dc963fSmrg	fi
16694b0ead49Smrg
167049dc963fSmrg	func_dirname "$file" "" "."
167149dc963fSmrg	dir="$func_dirname_result"
16724b0ead49Smrg
167349dc963fSmrg	if test -f "$dir/$objdir/$dlname"; then
167449dc963fSmrg	  dir="$dir/$objdir"
167549dc963fSmrg	else
167649dc963fSmrg	  if test ! -f "$dir/$dlname"; then
167749dc963fSmrg	    func_fatal_error "cannot find \`$dlname' in \`$dir' or \`$dir/$objdir'"
167849dc963fSmrg	  fi
167949dc963fSmrg	fi
16804b0ead49Smrg	;;
16814b0ead49Smrg
168249dc963fSmrg      *.lo)
168349dc963fSmrg	# Just add the directory containing the .lo file.
168449dc963fSmrg	func_dirname "$file" "" "."
168549dc963fSmrg	dir="$func_dirname_result"
16864b0ead49Smrg	;;
16874b0ead49Smrg
168849dc963fSmrg      *)
168949dc963fSmrg	func_warning "\`-dlopen' is ignored for non-libtool libraries and objects"
16904b0ead49Smrg	continue
16914b0ead49Smrg	;;
169249dc963fSmrg      esac
16934b0ead49Smrg
169449dc963fSmrg      # Get the absolute pathname.
169549dc963fSmrg      absdir=`cd "$dir" && pwd`
169649dc963fSmrg      test -n "$absdir" && dir="$absdir"
16974b0ead49Smrg
169849dc963fSmrg      # Now add the directory to shlibpath_var.
169949dc963fSmrg      if eval "test -z \"\$$shlibpath_var\""; then
170049dc963fSmrg	eval "$shlibpath_var=\"\$dir\""
170149dc963fSmrg      else
170249dc963fSmrg	eval "$shlibpath_var=\"\$dir:\$$shlibpath_var\""
170349dc963fSmrg      fi
170449dc963fSmrg    done
17054b0ead49Smrg
170649dc963fSmrg    # This variable tells wrapper scripts just to set shlibpath_var
170749dc963fSmrg    # rather than running their programs.
170849dc963fSmrg    libtool_execute_magic="$magic"
17094b0ead49Smrg
171049dc963fSmrg    # Check if any of the arguments is a wrapper script.
171149dc963fSmrg    args=
171249dc963fSmrg    for file
171349dc963fSmrg    do
171449dc963fSmrg      case $file in
171549dc963fSmrg      -*) ;;
171649dc963fSmrg      *)
171749dc963fSmrg	# Do a test to see if this is really a libtool program.
171849dc963fSmrg	if func_ltwrapper_script_p "$file"; then
171949dc963fSmrg	  func_source "$file"
172049dc963fSmrg	  # Transform arg to wrapped name.
172149dc963fSmrg	  file="$progdir/$program"
172249dc963fSmrg	elif func_ltwrapper_executable_p "$file"; then
172349dc963fSmrg	  func_ltwrapper_scriptname "$file"
172449dc963fSmrg	  func_source "$func_ltwrapper_scriptname_result"
172549dc963fSmrg	  # Transform arg to wrapped name.
172649dc963fSmrg	  file="$progdir/$program"
172749dc963fSmrg	fi
172849dc963fSmrg	;;
172949dc963fSmrg      esac
173049dc963fSmrg      # Quote arguments (to preserve shell metacharacters).
173149dc963fSmrg      func_quote_for_eval "$file"
173249dc963fSmrg      args="$args $func_quote_for_eval_result"
173349dc963fSmrg    done
17344b0ead49Smrg
173549dc963fSmrg    if test "X$opt_dry_run" = Xfalse; then
173649dc963fSmrg      if test -n "$shlibpath_var"; then
173749dc963fSmrg	# Export the shlibpath_var.
173849dc963fSmrg	eval "export $shlibpath_var"
173949dc963fSmrg      fi
17404b0ead49Smrg
174149dc963fSmrg      # Restore saved environment variables
174249dc963fSmrg      for lt_var in LANG LANGUAGE LC_ALL LC_CTYPE LC_COLLATE LC_MESSAGES
174349dc963fSmrg      do
174449dc963fSmrg	eval "if test \"\${save_$lt_var+set}\" = set; then
174549dc963fSmrg                $lt_var=\$save_$lt_var; export $lt_var
17464b0ead49Smrg	      else
174749dc963fSmrg		$lt_unset $lt_var
174849dc963fSmrg	      fi"
174949dc963fSmrg      done
17504b0ead49Smrg
175149dc963fSmrg      # Now prepare to actually exec the command.
175249dc963fSmrg      exec_cmd="\$cmd$args"
175349dc963fSmrg    else
175449dc963fSmrg      # Display what would be done.
175549dc963fSmrg      if test -n "$shlibpath_var"; then
175649dc963fSmrg	eval "\$ECHO \"\$shlibpath_var=\$$shlibpath_var\""
175749dc963fSmrg	$ECHO "export $shlibpath_var"
175849dc963fSmrg      fi
175949dc963fSmrg      $ECHO "$cmd$args"
176049dc963fSmrg      exit $EXIT_SUCCESS
176149dc963fSmrg    fi
176249dc963fSmrg}
17634b0ead49Smrg
176449dc963fSmrgtest "$mode" = execute && func_mode_execute ${1+"$@"}
17654b0ead49Smrg
17664b0ead49Smrg
176749dc963fSmrg# func_mode_finish arg...
176849dc963fSmrgfunc_mode_finish ()
176949dc963fSmrg{
177049dc963fSmrg    $opt_debug
177149dc963fSmrg    libdirs="$nonopt"
177249dc963fSmrg    admincmds=
17734b0ead49Smrg
177449dc963fSmrg    if test -n "$finish_cmds$finish_eval" && test -n "$libdirs"; then
177549dc963fSmrg      for dir
177649dc963fSmrg      do
177749dc963fSmrg	libdirs="$libdirs $dir"
177849dc963fSmrg      done
17794b0ead49Smrg
178049dc963fSmrg      for libdir in $libdirs; do
178149dc963fSmrg	if test -n "$finish_cmds"; then
178249dc963fSmrg	  # Do each command in the finish commands.
178349dc963fSmrg	  func_execute_cmds "$finish_cmds" 'admincmds="$admincmds
178449dc963fSmrg'"$cmd"'"'
17854b0ead49Smrg	fi
178649dc963fSmrg	if test -n "$finish_eval"; then
178749dc963fSmrg	  # Do the single finish_eval.
178849dc963fSmrg	  eval cmds=\"$finish_eval\"
178949dc963fSmrg	  $opt_dry_run || eval "$cmds" || admincmds="$admincmds
179049dc963fSmrg       $cmds"
179149dc963fSmrg	fi
179249dc963fSmrg      done
179349dc963fSmrg    fi
17944b0ead49Smrg
179549dc963fSmrg    # Exit here if they wanted silent mode.
179649dc963fSmrg    $opt_silent && exit $EXIT_SUCCESS
17974b0ead49Smrg
179849dc963fSmrg    $ECHO "X----------------------------------------------------------------------" | $Xsed
179949dc963fSmrg    $ECHO "Libraries have been installed in:"
180049dc963fSmrg    for libdir in $libdirs; do
180149dc963fSmrg      $ECHO "   $libdir"
180249dc963fSmrg    done
180349dc963fSmrg    $ECHO
180449dc963fSmrg    $ECHO "If you ever happen to want to link against installed libraries"
180549dc963fSmrg    $ECHO "in a given directory, LIBDIR, you must either use libtool, and"
180649dc963fSmrg    $ECHO "specify the full pathname of the library, or use the \`-LLIBDIR'"
180749dc963fSmrg    $ECHO "flag during linking and do at least one of the following:"
180849dc963fSmrg    if test -n "$shlibpath_var"; then
180949dc963fSmrg      $ECHO "   - add LIBDIR to the \`$shlibpath_var' environment variable"
181049dc963fSmrg      $ECHO "     during execution"
181149dc963fSmrg    fi
181249dc963fSmrg    if test -n "$runpath_var"; then
181349dc963fSmrg      $ECHO "   - add LIBDIR to the \`$runpath_var' environment variable"
181449dc963fSmrg      $ECHO "     during linking"
181549dc963fSmrg    fi
181649dc963fSmrg    if test -n "$hardcode_libdir_flag_spec"; then
181749dc963fSmrg      libdir=LIBDIR
181849dc963fSmrg      eval flag=\"$hardcode_libdir_flag_spec\"
181949dc963fSmrg
182049dc963fSmrg      $ECHO "   - use the \`$flag' linker flag"
182149dc963fSmrg    fi
182249dc963fSmrg    if test -n "$admincmds"; then
182349dc963fSmrg      $ECHO "   - have your system administrator run these commands:$admincmds"
182449dc963fSmrg    fi
182549dc963fSmrg    if test -f /etc/ld.so.conf; then
182649dc963fSmrg      $ECHO "   - have your system administrator add LIBDIR to \`/etc/ld.so.conf'"
182749dc963fSmrg    fi
182849dc963fSmrg    $ECHO
182949dc963fSmrg
183049dc963fSmrg    $ECHO "See any operating system documentation about shared libraries for"
183149dc963fSmrg    case $host in
183249dc963fSmrg      solaris2.[6789]|solaris2.1[0-9])
183349dc963fSmrg        $ECHO "more information, such as the ld(1), crle(1) and ld.so(8) manual"
183449dc963fSmrg	$ECHO "pages."
183549dc963fSmrg	;;
183649dc963fSmrg      *)
183749dc963fSmrg        $ECHO "more information, such as the ld(1) and ld.so(8) manual pages."
183849dc963fSmrg        ;;
183949dc963fSmrg    esac
184049dc963fSmrg    $ECHO "X----------------------------------------------------------------------" | $Xsed
184149dc963fSmrg    exit $EXIT_SUCCESS
184249dc963fSmrg}
184349dc963fSmrg
184449dc963fSmrgtest "$mode" = finish && func_mode_finish ${1+"$@"}
184549dc963fSmrg
184649dc963fSmrg
184749dc963fSmrg# func_mode_install arg...
184849dc963fSmrgfunc_mode_install ()
184949dc963fSmrg{
185049dc963fSmrg    $opt_debug
185149dc963fSmrg    # There may be an optional sh(1) argument at the beginning of
185249dc963fSmrg    # install_prog (especially on Windows NT).
185349dc963fSmrg    if test "$nonopt" = "$SHELL" || test "$nonopt" = /bin/sh ||
185449dc963fSmrg       # Allow the use of GNU shtool's install command.
185549dc963fSmrg       $ECHO "X$nonopt" | $GREP shtool >/dev/null; then
185649dc963fSmrg      # Aesthetically quote it.
185749dc963fSmrg      func_quote_for_eval "$nonopt"
185849dc963fSmrg      install_prog="$func_quote_for_eval_result "
185949dc963fSmrg      arg=$1
186049dc963fSmrg      shift
186149dc963fSmrg    else
186249dc963fSmrg      install_prog=
186349dc963fSmrg      arg=$nonopt
186449dc963fSmrg    fi
186549dc963fSmrg
186649dc963fSmrg    # The real first argument should be the name of the installation program.
186749dc963fSmrg    # Aesthetically quote it.
186849dc963fSmrg    func_quote_for_eval "$arg"
186949dc963fSmrg    install_prog="$install_prog$func_quote_for_eval_result"
187049dc963fSmrg
187149dc963fSmrg    # We need to accept at least all the BSD install flags.
187249dc963fSmrg    dest=
187349dc963fSmrg    files=
187449dc963fSmrg    opts=
187549dc963fSmrg    prev=
187649dc963fSmrg    install_type=
187749dc963fSmrg    isdir=no
187849dc963fSmrg    stripme=
187949dc963fSmrg    for arg
188049dc963fSmrg    do
188149dc963fSmrg      if test -n "$dest"; then
188249dc963fSmrg	files="$files $dest"
188349dc963fSmrg	dest=$arg
188449dc963fSmrg	continue
188549dc963fSmrg      fi
188649dc963fSmrg
188749dc963fSmrg      case $arg in
188849dc963fSmrg      -d) isdir=yes ;;
188949dc963fSmrg      -f)
189049dc963fSmrg	case " $install_prog " in
189149dc963fSmrg	*[\\\ /]cp\ *) ;;
189249dc963fSmrg	*) prev=$arg ;;
189349dc963fSmrg	esac
189449dc963fSmrg	;;
189549dc963fSmrg      -g | -m | -o)
189649dc963fSmrg	prev=$arg
189749dc963fSmrg	;;
189849dc963fSmrg      -s)
189949dc963fSmrg	stripme=" -s"
190049dc963fSmrg	continue
190149dc963fSmrg	;;
190249dc963fSmrg      -*)
190349dc963fSmrg	;;
190449dc963fSmrg      *)
190549dc963fSmrg	# If the previous option needed an argument, then skip it.
190649dc963fSmrg	if test -n "$prev"; then
19074b0ead49Smrg	  prev=
19084b0ead49Smrg	else
190949dc963fSmrg	  dest=$arg
191049dc963fSmrg	  continue
19114b0ead49Smrg	fi
19124b0ead49Smrg	;;
191349dc963fSmrg      esac
19144b0ead49Smrg
191549dc963fSmrg      # Aesthetically quote the argument.
191649dc963fSmrg      func_quote_for_eval "$arg"
191749dc963fSmrg      install_prog="$install_prog $func_quote_for_eval_result"
191849dc963fSmrg    done
19194b0ead49Smrg
192049dc963fSmrg    test -z "$install_prog" && \
192149dc963fSmrg      func_fatal_help "you must specify an install program"
19224b0ead49Smrg
192349dc963fSmrg    test -n "$prev" && \
192449dc963fSmrg      func_fatal_help "the \`$prev' option requires an argument"
19254b0ead49Smrg
192649dc963fSmrg    if test -z "$files"; then
192749dc963fSmrg      if test -z "$dest"; then
192849dc963fSmrg	func_fatal_help "no file or destination specified"
192949dc963fSmrg      else
193049dc963fSmrg	func_fatal_help "you must specify a destination"
193149dc963fSmrg      fi
19324b0ead49Smrg    fi
19334b0ead49Smrg
193449dc963fSmrg    # Strip any trailing slash from the destination.
193549dc963fSmrg    func_stripname '' '/' "$dest"
193649dc963fSmrg    dest=$func_stripname_result
19374b0ead49Smrg
193849dc963fSmrg    # Check to see that the destination is a directory.
193949dc963fSmrg    test -d "$dest" && isdir=yes
194049dc963fSmrg    if test "$isdir" = yes; then
194149dc963fSmrg      destdir="$dest"
194249dc963fSmrg      destname=
19434b0ead49Smrg    else
194449dc963fSmrg      func_dirname_and_basename "$dest" "" "."
194549dc963fSmrg      destdir="$func_dirname_result"
194649dc963fSmrg      destname="$func_basename_result"
19474b0ead49Smrg
194849dc963fSmrg      # Not a directory, so check to see that there is only one file specified.
194949dc963fSmrg      set dummy $files; shift
195049dc963fSmrg      test "$#" -gt 1 && \
195149dc963fSmrg	func_fatal_help "\`$dest' is not a directory"
19524b0ead49Smrg    fi
195349dc963fSmrg    case $destdir in
195449dc963fSmrg    [\\/]* | [A-Za-z]:[\\/]*) ;;
19554b0ead49Smrg    *)
195649dc963fSmrg      for file in $files; do
195749dc963fSmrg	case $file in
195849dc963fSmrg	*.lo) ;;
195949dc963fSmrg	*)
196049dc963fSmrg	  func_fatal_help "\`$destdir' must be an absolute directory name"
196149dc963fSmrg	  ;;
196249dc963fSmrg	esac
196349dc963fSmrg      done
19644b0ead49Smrg      ;;
19654b0ead49Smrg    esac
19664b0ead49Smrg
196749dc963fSmrg    # This variable tells wrapper scripts just to set variables rather
196849dc963fSmrg    # than running their programs.
196949dc963fSmrg    libtool_install_magic="$magic"
19704b0ead49Smrg
197149dc963fSmrg    staticlibs=
197249dc963fSmrg    future_libdirs=
197349dc963fSmrg    current_libdirs=
197449dc963fSmrg    for file in $files; do
19754b0ead49Smrg
197649dc963fSmrg      # Do each installation.
197749dc963fSmrg      case $file in
197849dc963fSmrg      *.$libext)
197949dc963fSmrg	# Do the static libraries later.
198049dc963fSmrg	staticlibs="$staticlibs $file"
198149dc963fSmrg	;;
198249dc963fSmrg
198349dc963fSmrg      *.la)
198449dc963fSmrg	# Check to see that this really is a libtool archive.
198549dc963fSmrg	func_lalib_unsafe_p "$file" \
198649dc963fSmrg	  || func_fatal_help "\`$file' is not a valid libtool archive"
198749dc963fSmrg
198849dc963fSmrg	library_names=
198949dc963fSmrg	old_library=
199049dc963fSmrg	relink_command=
199149dc963fSmrg	func_source "$file"
199249dc963fSmrg
199349dc963fSmrg	# Add the libdir to current_libdirs if it is the destination.
199449dc963fSmrg	if test "X$destdir" = "X$libdir"; then
199549dc963fSmrg	  case "$current_libdirs " in
199649dc963fSmrg	  *" $libdir "*) ;;
199749dc963fSmrg	  *) current_libdirs="$current_libdirs $libdir" ;;
19984b0ead49Smrg	  esac
199949dc963fSmrg	else
200049dc963fSmrg	  # Note the libdir as a future libdir.
200149dc963fSmrg	  case "$future_libdirs " in
200249dc963fSmrg	  *" $libdir "*) ;;
200349dc963fSmrg	  *) future_libdirs="$future_libdirs $libdir" ;;
200449dc963fSmrg	  esac
200549dc963fSmrg	fi
20064b0ead49Smrg
200749dc963fSmrg	func_dirname "$file" "/" ""
200849dc963fSmrg	dir="$func_dirname_result"
200949dc963fSmrg	dir="$dir$objdir"
201049dc963fSmrg
201149dc963fSmrg	if test -n "$relink_command"; then
201249dc963fSmrg	  # Determine the prefix the user has applied to our future dir.
201349dc963fSmrg	  inst_prefix_dir=`$ECHO "X$destdir" | $Xsed -e "s%$libdir\$%%"`
201449dc963fSmrg
201549dc963fSmrg	  # Don't allow the user to place us outside of our expected
201649dc963fSmrg	  # location b/c this prevents finding dependent libraries that
201749dc963fSmrg	  # are installed to the same prefix.
201849dc963fSmrg	  # At present, this check doesn't affect windows .dll's that
201949dc963fSmrg	  # are installed into $libdir/../bin (currently, that works fine)
202049dc963fSmrg	  # but it's something to keep an eye on.
202149dc963fSmrg	  test "$inst_prefix_dir" = "$destdir" && \
202249dc963fSmrg	    func_fatal_error "error: cannot install \`$file' to a directory not ending in $libdir"
202349dc963fSmrg
202449dc963fSmrg	  if test -n "$inst_prefix_dir"; then
202549dc963fSmrg	    # Stick the inst_prefix_dir data into the link command.
202649dc963fSmrg	    relink_command=`$ECHO "X$relink_command" | $Xsed -e "s%@inst_prefix_dir@%-inst-prefix-dir $inst_prefix_dir%"`
202749dc963fSmrg	  else
202849dc963fSmrg	    relink_command=`$ECHO "X$relink_command" | $Xsed -e "s%@inst_prefix_dir@%%"`
202949dc963fSmrg	  fi
203049dc963fSmrg
203149dc963fSmrg	  func_warning "relinking \`$file'"
203249dc963fSmrg	  func_show_eval "$relink_command" \
203349dc963fSmrg	    'func_fatal_error "error: relink \`$file'\'' with the above command before installing it"'
203449dc963fSmrg	fi
203549dc963fSmrg
203649dc963fSmrg	# See the names of the shared library.
203749dc963fSmrg	set dummy $library_names; shift
203849dc963fSmrg	if test -n "$1"; then
203949dc963fSmrg	  realname="$1"
204049dc963fSmrg	  shift
204149dc963fSmrg
204249dc963fSmrg	  srcname="$realname"
204349dc963fSmrg	  test -n "$relink_command" && srcname="$realname"T
204449dc963fSmrg
204549dc963fSmrg	  # Install the shared library and build the symlinks.
204649dc963fSmrg	  func_show_eval "$install_prog $dir/$srcname $destdir/$realname" \
204749dc963fSmrg	      'exit $?'
204849dc963fSmrg	  tstripme="$stripme"
204949dc963fSmrg	  case $host_os in
205049dc963fSmrg	  cygwin* | mingw* | pw32* | cegcc*)
205149dc963fSmrg	    case $realname in
205249dc963fSmrg	    *.dll.a)
205349dc963fSmrg	      tstripme=""
205449dc963fSmrg	      ;;
205549dc963fSmrg	    esac
20564b0ead49Smrg	    ;;
20574b0ead49Smrg	  esac
205849dc963fSmrg	  if test -n "$tstripme" && test -n "$striplib"; then
205949dc963fSmrg	    func_show_eval "$striplib $destdir/$realname" 'exit $?'
20604b0ead49Smrg	  fi
206149dc963fSmrg
206249dc963fSmrg	  if test "$#" -gt 0; then
206349dc963fSmrg	    # Delete the old symlinks, and create new ones.
206449dc963fSmrg	    # Try `ln -sf' first, because the `ln' binary might depend on
206549dc963fSmrg	    # the symlink we replace!  Solaris /bin/ln does not understand -f,
206649dc963fSmrg	    # so we also need to try rm && ln -s.
206749dc963fSmrg	    for linkname
206849dc963fSmrg	    do
206949dc963fSmrg	      test "$linkname" != "$realname" \
207049dc963fSmrg		&& func_show_eval "(cd $destdir && { $LN_S -f $realname $linkname || { $RM $linkname && $LN_S $realname $linkname; }; })"
20714b0ead49Smrg	    done
20724b0ead49Smrg	  fi
20734b0ead49Smrg
207449dc963fSmrg	  # Do each command in the postinstall commands.
207549dc963fSmrg	  lib="$destdir/$realname"
207649dc963fSmrg	  func_execute_cmds "$postinstall_cmds" 'exit $?'
20774b0ead49Smrg	fi
20784b0ead49Smrg
207949dc963fSmrg	# Install the pseudo-library for information purposes.
208049dc963fSmrg	func_basename "$file"
208149dc963fSmrg	name="$func_basename_result"
208249dc963fSmrg	instname="$dir/$name"i
208349dc963fSmrg	func_show_eval "$install_prog $instname $destdir/$name" 'exit $?'
20844b0ead49Smrg
208549dc963fSmrg	# Maybe install the static library, too.
208649dc963fSmrg	test -n "$old_library" && staticlibs="$staticlibs $dir/$old_library"
208749dc963fSmrg	;;
20884b0ead49Smrg
208949dc963fSmrg      *.lo)
209049dc963fSmrg	# Install (i.e. copy) a libtool object.
20914b0ead49Smrg
209249dc963fSmrg	# Figure out destination file name, if it wasn't already specified.
209349dc963fSmrg	if test -n "$destname"; then
209449dc963fSmrg	  destfile="$destdir/$destname"
209549dc963fSmrg	else
209649dc963fSmrg	  func_basename "$file"
209749dc963fSmrg	  destfile="$func_basename_result"
209849dc963fSmrg	  destfile="$destdir/$destfile"
20994b0ead49Smrg	fi
21004b0ead49Smrg
210149dc963fSmrg	# Deduce the name of the destination old-style object file.
210249dc963fSmrg	case $destfile in
210349dc963fSmrg	*.lo)
210449dc963fSmrg	  func_lo2o "$destfile"
210549dc963fSmrg	  staticdest=$func_lo2o_result
210649dc963fSmrg	  ;;
210749dc963fSmrg	*.$objext)
210849dc963fSmrg	  staticdest="$destfile"
210949dc963fSmrg	  destfile=
211049dc963fSmrg	  ;;
211149dc963fSmrg	*)
211249dc963fSmrg	  func_fatal_help "cannot copy a libtool object to \`$destfile'"
211349dc963fSmrg	  ;;
211449dc963fSmrg	esac
21154b0ead49Smrg
211649dc963fSmrg	# Install the libtool object if requested.
211749dc963fSmrg	test -n "$destfile" && \
211849dc963fSmrg	  func_show_eval "$install_prog $file $destfile" 'exit $?'
21194b0ead49Smrg
212049dc963fSmrg	# Install the old object if enabled.
212149dc963fSmrg	if test "$build_old_libs" = yes; then
212249dc963fSmrg	  # Deduce the name of the old-style object file.
212349dc963fSmrg	  func_lo2o "$file"
212449dc963fSmrg	  staticobj=$func_lo2o_result
212549dc963fSmrg	  func_show_eval "$install_prog \$staticobj \$staticdest" 'exit $?'
21264b0ead49Smrg	fi
212749dc963fSmrg	exit $EXIT_SUCCESS
212849dc963fSmrg	;;
21294b0ead49Smrg
213049dc963fSmrg      *)
213149dc963fSmrg	# Figure out destination file name, if it wasn't already specified.
213249dc963fSmrg	if test -n "$destname"; then
213349dc963fSmrg	  destfile="$destdir/$destname"
213449dc963fSmrg	else
213549dc963fSmrg	  func_basename "$file"
213649dc963fSmrg	  destfile="$func_basename_result"
213749dc963fSmrg	  destfile="$destdir/$destfile"
213849dc963fSmrg	fi
21394b0ead49Smrg
214049dc963fSmrg	# If the file is missing, and there is a .exe on the end, strip it
214149dc963fSmrg	# because it is most likely a libtool script we actually want to
214249dc963fSmrg	# install
214349dc963fSmrg	stripped_ext=""
214449dc963fSmrg	case $file in
214549dc963fSmrg	  *.exe)
214649dc963fSmrg	    if test ! -f "$file"; then
214749dc963fSmrg	      func_stripname '' '.exe' "$file"
214849dc963fSmrg	      file=$func_stripname_result
214949dc963fSmrg	      stripped_ext=".exe"
215049dc963fSmrg	    fi
215149dc963fSmrg	    ;;
215249dc963fSmrg	esac
215349dc963fSmrg
215449dc963fSmrg	# Do a test to see if this is really a libtool program.
215549dc963fSmrg	case $host in
215649dc963fSmrg	*cygwin* | *mingw*)
215749dc963fSmrg	    if func_ltwrapper_executable_p "$file"; then
215849dc963fSmrg	      func_ltwrapper_scriptname "$file"
215949dc963fSmrg	      wrapper=$func_ltwrapper_scriptname_result
216049dc963fSmrg	    else
216149dc963fSmrg	      func_stripname '' '.exe' "$file"
216249dc963fSmrg	      wrapper=$func_stripname_result
216349dc963fSmrg	    fi
216449dc963fSmrg	    ;;
21654b0ead49Smrg	*)
216649dc963fSmrg	    wrapper=$file
216749dc963fSmrg	    ;;
216849dc963fSmrg	esac
216949dc963fSmrg	if func_ltwrapper_script_p "$wrapper"; then
217049dc963fSmrg	  notinst_deplibs=
217149dc963fSmrg	  relink_command=
217249dc963fSmrg
217349dc963fSmrg	  func_source "$wrapper"
217449dc963fSmrg
217549dc963fSmrg	  # Check the variables that should have been set.
217649dc963fSmrg	  test -z "$generated_by_libtool_version" && \
217749dc963fSmrg	    func_fatal_error "invalid libtool wrapper script \`$wrapper'"
217849dc963fSmrg
217949dc963fSmrg	  finalize=yes
218049dc963fSmrg	  for lib in $notinst_deplibs; do
218149dc963fSmrg	    # Check to see that each library is installed.
218249dc963fSmrg	    libdir=
218349dc963fSmrg	    if test -f "$lib"; then
218449dc963fSmrg	      func_source "$lib"
218549dc963fSmrg	    fi
218649dc963fSmrg	    libfile="$libdir/"`$ECHO "X$lib" | $Xsed -e 's%^.*/%%g'` ### testsuite: skip nested quoting test
218749dc963fSmrg	    if test -n "$libdir" && test ! -f "$libfile"; then
218849dc963fSmrg	      func_warning "\`$lib' has not been installed in \`$libdir'"
218949dc963fSmrg	      finalize=no
219049dc963fSmrg	    fi
219149dc963fSmrg	  done
219249dc963fSmrg
219349dc963fSmrg	  relink_command=
219449dc963fSmrg	  func_source "$wrapper"
219549dc963fSmrg
219649dc963fSmrg	  outputname=
219749dc963fSmrg	  if test "$fast_install" = no && test -n "$relink_command"; then
219849dc963fSmrg	    $opt_dry_run || {
219949dc963fSmrg	      if test "$finalize" = yes; then
220049dc963fSmrg	        tmpdir=`func_mktempdir`
220149dc963fSmrg		func_basename "$file$stripped_ext"
220249dc963fSmrg		file="$func_basename_result"
220349dc963fSmrg	        outputname="$tmpdir/$file"
220449dc963fSmrg	        # Replace the output file specification.
220549dc963fSmrg	        relink_command=`$ECHO "X$relink_command" | $Xsed -e 's%@OUTPUT@%'"$outputname"'%g'`
220649dc963fSmrg
220749dc963fSmrg	        $opt_silent || {
220849dc963fSmrg	          func_quote_for_expand "$relink_command"
220949dc963fSmrg		  eval "func_echo $func_quote_for_expand_result"
221049dc963fSmrg	        }
221149dc963fSmrg	        if eval "$relink_command"; then :
221249dc963fSmrg	          else
221349dc963fSmrg		  func_error "error: relink \`$file' with the above command before installing it"
221449dc963fSmrg		  $opt_dry_run || ${RM}r "$tmpdir"
221549dc963fSmrg		  continue
221649dc963fSmrg	        fi
221749dc963fSmrg	        file="$outputname"
221849dc963fSmrg	      else
221949dc963fSmrg	        func_warning "cannot relink \`$file'"
222049dc963fSmrg	      fi
222149dc963fSmrg	    }
222249dc963fSmrg	  else
222349dc963fSmrg	    # Install the binary that we compiled earlier.
222449dc963fSmrg	    file=`$ECHO "X$file$stripped_ext" | $Xsed -e "s%\([^/]*\)$%$objdir/\1%"`
22254b0ead49Smrg	  fi
222649dc963fSmrg	fi
222749dc963fSmrg
222849dc963fSmrg	# remove .exe since cygwin /usr/bin/install will append another
222949dc963fSmrg	# one anyway
223049dc963fSmrg	case $install_prog,$host in
223149dc963fSmrg	*/usr/bin/install*,*cygwin*)
223249dc963fSmrg	  case $file:$destfile in
223349dc963fSmrg	  *.exe:*.exe)
223449dc963fSmrg	    # this is ok
223549dc963fSmrg	    ;;
223649dc963fSmrg	  *.exe:*)
223749dc963fSmrg	    destfile=$destfile.exe
223849dc963fSmrg	    ;;
223949dc963fSmrg	  *:*.exe)
224049dc963fSmrg	    func_stripname '' '.exe' "$destfile"
224149dc963fSmrg	    destfile=$func_stripname_result
224249dc963fSmrg	    ;;
224349dc963fSmrg	  esac
22444b0ead49Smrg	  ;;
22454b0ead49Smrg	esac
224649dc963fSmrg	func_show_eval "$install_prog\$stripme \$file \$destfile" 'exit $?'
224749dc963fSmrg	$opt_dry_run || if test -n "$outputname"; then
224849dc963fSmrg	  ${RM}r "$tmpdir"
224949dc963fSmrg	fi
225049dc963fSmrg	;;
225149dc963fSmrg      esac
225249dc963fSmrg    done
22534b0ead49Smrg
225449dc963fSmrg    for file in $staticlibs; do
225549dc963fSmrg      func_basename "$file"
225649dc963fSmrg      name="$func_basename_result"
225749dc963fSmrg
225849dc963fSmrg      # Set up the ranlib parameters.
225949dc963fSmrg      oldlib="$destdir/$name"
226049dc963fSmrg
226149dc963fSmrg      func_show_eval "$install_prog \$file \$oldlib" 'exit $?'
226249dc963fSmrg
226349dc963fSmrg      if test -n "$stripme" && test -n "$old_striplib"; then
226449dc963fSmrg	func_show_eval "$old_striplib $oldlib" 'exit $?'
226549dc963fSmrg      fi
226649dc963fSmrg
226749dc963fSmrg      # Do each command in the postinstall commands.
226849dc963fSmrg      func_execute_cmds "$old_postinstall_cmds" 'exit $?'
226949dc963fSmrg    done
227049dc963fSmrg
227149dc963fSmrg    test -n "$future_libdirs" && \
227249dc963fSmrg      func_warning "remember to run \`$progname --finish$future_libdirs'"
227349dc963fSmrg
227449dc963fSmrg    if test -n "$current_libdirs"; then
227549dc963fSmrg      # Maybe just do a dry run.
227649dc963fSmrg      $opt_dry_run && current_libdirs=" -n$current_libdirs"
227749dc963fSmrg      exec_cmd='$SHELL $progpath $preserve_args --finish$current_libdirs'
227849dc963fSmrg    else
227949dc963fSmrg      exit $EXIT_SUCCESS
228049dc963fSmrg    fi
228149dc963fSmrg}
228249dc963fSmrg
228349dc963fSmrgtest "$mode" = install && func_mode_install ${1+"$@"}
228449dc963fSmrg
228549dc963fSmrg
228649dc963fSmrg# func_generate_dlsyms outputname originator pic_p
228749dc963fSmrg# Extract symbols from dlprefiles and create ${outputname}S.o with
228849dc963fSmrg# a dlpreopen symbol table.
228949dc963fSmrgfunc_generate_dlsyms ()
229049dc963fSmrg{
229149dc963fSmrg    $opt_debug
229249dc963fSmrg    my_outputname="$1"
229349dc963fSmrg    my_originator="$2"
229449dc963fSmrg    my_pic_p="${3-no}"
229549dc963fSmrg    my_prefix=`$ECHO "$my_originator" | sed 's%[^a-zA-Z0-9]%_%g'`
229649dc963fSmrg    my_dlsyms=
229749dc963fSmrg
229849dc963fSmrg    if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then
229949dc963fSmrg      if test -n "$NM" && test -n "$global_symbol_pipe"; then
230049dc963fSmrg	my_dlsyms="${my_outputname}S.c"
230149dc963fSmrg      else
230249dc963fSmrg	func_error "not configured to extract global symbols from dlpreopened files"
230349dc963fSmrg      fi
230449dc963fSmrg    fi
230549dc963fSmrg
230649dc963fSmrg    if test -n "$my_dlsyms"; then
230749dc963fSmrg      case $my_dlsyms in
230849dc963fSmrg      "") ;;
230949dc963fSmrg      *.c)
231049dc963fSmrg	# Discover the nlist of each of the dlfiles.
231149dc963fSmrg	nlist="$output_objdir/${my_outputname}.nm"
231249dc963fSmrg
231349dc963fSmrg	func_show_eval "$RM $nlist ${nlist}S ${nlist}T"
231449dc963fSmrg
231549dc963fSmrg	# Parse the name list into a source file.
231649dc963fSmrg	func_verbose "creating $output_objdir/$my_dlsyms"
231749dc963fSmrg
231849dc963fSmrg	$opt_dry_run || $ECHO > "$output_objdir/$my_dlsyms" "\
231949dc963fSmrg/* $my_dlsyms - symbol resolution table for \`$my_outputname' dlsym emulation. */
232049dc963fSmrg/* Generated by $PROGRAM (GNU $PACKAGE$TIMESTAMP) $VERSION */
232149dc963fSmrg
232249dc963fSmrg#ifdef __cplusplus
232349dc963fSmrgextern \"C\" {
232449dc963fSmrg#endif
232549dc963fSmrg
232649dc963fSmrg/* External symbol declarations for the compiler. */\
232749dc963fSmrg"
232849dc963fSmrg
232949dc963fSmrg	if test "$dlself" = yes; then
233049dc963fSmrg	  func_verbose "generating symbol list for \`$output'"
233149dc963fSmrg
233249dc963fSmrg	  $opt_dry_run || echo ': @PROGRAM@ ' > "$nlist"
233349dc963fSmrg
233449dc963fSmrg	  # Add our own program objects to the symbol list.
233549dc963fSmrg	  progfiles=`$ECHO "X$objs$old_deplibs" | $SP2NL | $Xsed -e "$lo2o" | $NL2SP`
233649dc963fSmrg	  for progfile in $progfiles; do
233749dc963fSmrg	    func_verbose "extracting global C symbols from \`$progfile'"
233849dc963fSmrg	    $opt_dry_run || eval "$NM $progfile | $global_symbol_pipe >> '$nlist'"
233949dc963fSmrg	  done
234049dc963fSmrg
234149dc963fSmrg	  if test -n "$exclude_expsyms"; then
234249dc963fSmrg	    $opt_dry_run || {
234349dc963fSmrg	      eval '$EGREP -v " ($exclude_expsyms)$" "$nlist" > "$nlist"T'
234449dc963fSmrg	      eval '$MV "$nlist"T "$nlist"'
234549dc963fSmrg	    }
23464b0ead49Smrg	  fi
234749dc963fSmrg
234849dc963fSmrg	  if test -n "$export_symbols_regex"; then
234949dc963fSmrg	    $opt_dry_run || {
235049dc963fSmrg	      eval '$EGREP -e "$export_symbols_regex" "$nlist" > "$nlist"T'
235149dc963fSmrg	      eval '$MV "$nlist"T "$nlist"'
235249dc963fSmrg	    }
235349dc963fSmrg	  fi
235449dc963fSmrg
235549dc963fSmrg	  # Prepare the list of exported symbols
235649dc963fSmrg	  if test -z "$export_symbols"; then
235749dc963fSmrg	    export_symbols="$output_objdir/$outputname.exp"
235849dc963fSmrg	    $opt_dry_run || {
235949dc963fSmrg	      $RM $export_symbols
236049dc963fSmrg	      eval "${SED} -n -e '/^: @PROGRAM@ $/d' -e 's/^.* \(.*\)$/\1/p' "'< "$nlist" > "$export_symbols"'
236149dc963fSmrg	      case $host in
236249dc963fSmrg	      *cygwin* | *mingw* | *cegcc* )
236349dc963fSmrg                eval "echo EXPORTS "'> "$output_objdir/$outputname.def"'
236449dc963fSmrg                eval 'cat "$export_symbols" >> "$output_objdir/$outputname.def"'
236549dc963fSmrg	        ;;
236649dc963fSmrg	      esac
236749dc963fSmrg	    }
23684b0ead49Smrg	  else
236949dc963fSmrg	    $opt_dry_run || {
237049dc963fSmrg	      eval "${SED} -e 's/\([].[*^$]\)/\\\\\1/g' -e 's/^/ /' -e 's/$/$/'"' < "$export_symbols" > "$output_objdir/$outputname.exp"'
237149dc963fSmrg	      eval '$GREP -f "$output_objdir/$outputname.exp" < "$nlist" > "$nlist"T'
237249dc963fSmrg	      eval '$MV "$nlist"T "$nlist"'
237349dc963fSmrg	      case $host in
237449dc963fSmrg	        *cygwin | *mingw* | *cegcc* )
237549dc963fSmrg	          eval "echo EXPORTS "'> "$output_objdir/$outputname.def"'
237649dc963fSmrg	          eval 'cat "$nlist" >> "$output_objdir/$outputname.def"'
237749dc963fSmrg	          ;;
237849dc963fSmrg	      esac
237949dc963fSmrg	    }
23804b0ead49Smrg	  fi
238149dc963fSmrg	fi
23824b0ead49Smrg
238349dc963fSmrg	for dlprefile in $dlprefiles; do
238449dc963fSmrg	  func_verbose "extracting global C symbols from \`$dlprefile'"
238549dc963fSmrg	  func_basename "$dlprefile"
238649dc963fSmrg	  name="$func_basename_result"
238749dc963fSmrg	  $opt_dry_run || {
238849dc963fSmrg	    eval '$ECHO ": $name " >> "$nlist"'
238949dc963fSmrg	    eval "$NM $dlprefile 2>/dev/null | $global_symbol_pipe >> '$nlist'"
239049dc963fSmrg	  }
239149dc963fSmrg	done
239249dc963fSmrg
239349dc963fSmrg	$opt_dry_run || {
239449dc963fSmrg	  # Make sure we have at least an empty file.
239549dc963fSmrg	  test -f "$nlist" || : > "$nlist"
239649dc963fSmrg
239749dc963fSmrg	  if test -n "$exclude_expsyms"; then
239849dc963fSmrg	    $EGREP -v " ($exclude_expsyms)$" "$nlist" > "$nlist"T
239949dc963fSmrg	    $MV "$nlist"T "$nlist"
24004b0ead49Smrg	  fi
240149dc963fSmrg
240249dc963fSmrg	  # Try sorting and uniquifying the output.
240349dc963fSmrg	  if $GREP -v "^: " < "$nlist" |
240449dc963fSmrg	      if sort -k 3 </dev/null >/dev/null 2>&1; then
240549dc963fSmrg		sort -k 3
240649dc963fSmrg	      else
240749dc963fSmrg		sort +2
240849dc963fSmrg	      fi |
240949dc963fSmrg	      uniq > "$nlist"S; then
241049dc963fSmrg	    :
24114b0ead49Smrg	  else
241249dc963fSmrg	    $GREP -v "^: " < "$nlist" > "$nlist"S
24134b0ead49Smrg	  fi
24144b0ead49Smrg
241549dc963fSmrg	  if test -f "$nlist"S; then
241649dc963fSmrg	    eval "$global_symbol_to_cdecl"' < "$nlist"S >> "$output_objdir/$my_dlsyms"'
24174b0ead49Smrg	  else
241849dc963fSmrg	    $ECHO '/* NONE */' >> "$output_objdir/$my_dlsyms"
24194b0ead49Smrg	  fi
24204b0ead49Smrg
242149dc963fSmrg	  $ECHO >> "$output_objdir/$my_dlsyms" "\
24224b0ead49Smrg
242349dc963fSmrg/* The mapping between symbol names and symbols.  */
242449dc963fSmrgtypedef struct {
242549dc963fSmrg  const char *name;
242649dc963fSmrg  void *address;
242749dc963fSmrg} lt_dlsymlist;
242849dc963fSmrg"
242949dc963fSmrg	  case $host in
243049dc963fSmrg	  *cygwin* | *mingw* | *cegcc* )
243149dc963fSmrg	    $ECHO >> "$output_objdir/$my_dlsyms" "\
243249dc963fSmrg/* DATA imports from DLLs on WIN32 con't be const, because
243349dc963fSmrg   runtime relocations are performed -- see ld's documentation
243449dc963fSmrg   on pseudo-relocs.  */"
243549dc963fSmrg	    lt_dlsym_const= ;;
243649dc963fSmrg	  *osf5*)
243749dc963fSmrg	    echo >> "$output_objdir/$my_dlsyms" "\
243849dc963fSmrg/* This system does not cope well with relocations in const data */"
243949dc963fSmrg	    lt_dlsym_const= ;;
244049dc963fSmrg	  *)
244149dc963fSmrg	    lt_dlsym_const=const ;;
244249dc963fSmrg	  esac
24434b0ead49Smrg
244449dc963fSmrg	  $ECHO >> "$output_objdir/$my_dlsyms" "\
244549dc963fSmrgextern $lt_dlsym_const lt_dlsymlist
244649dc963fSmrglt_${my_prefix}_LTX_preloaded_symbols[];
244749dc963fSmrg$lt_dlsym_const lt_dlsymlist
244849dc963fSmrglt_${my_prefix}_LTX_preloaded_symbols[] =
244949dc963fSmrg{\
245049dc963fSmrg  { \"$my_originator\", (void *) 0 },"
24514b0ead49Smrg
245249dc963fSmrg	  case $need_lib_prefix in
245349dc963fSmrg	  no)
245449dc963fSmrg	    eval "$global_symbol_to_c_name_address" < "$nlist" >> "$output_objdir/$my_dlsyms"
245549dc963fSmrg	    ;;
245649dc963fSmrg	  *)
245749dc963fSmrg	    eval "$global_symbol_to_c_name_address_lib_prefix" < "$nlist" >> "$output_objdir/$my_dlsyms"
245849dc963fSmrg	    ;;
245949dc963fSmrg	  esac
246049dc963fSmrg	  $ECHO >> "$output_objdir/$my_dlsyms" "\
246149dc963fSmrg  {0, (void *) 0}
246249dc963fSmrg};
24634b0ead49Smrg
246449dc963fSmrg/* This works around a problem in FreeBSD linker */
246549dc963fSmrg#ifdef FREEBSD_WORKAROUND
246649dc963fSmrgstatic const void *lt_preloaded_setup() {
246749dc963fSmrg  return lt_${my_prefix}_LTX_preloaded_symbols;
246849dc963fSmrg}
246949dc963fSmrg#endif
247049dc963fSmrg
247149dc963fSmrg#ifdef __cplusplus
247249dc963fSmrg}
247349dc963fSmrg#endif\
247449dc963fSmrg"
247549dc963fSmrg	} # !$opt_dry_run
247649dc963fSmrg
247749dc963fSmrg	pic_flag_for_symtable=
247849dc963fSmrg	case "$compile_command " in
247949dc963fSmrg	*" -static "*) ;;
248049dc963fSmrg	*)
248149dc963fSmrg	  case $host in
248249dc963fSmrg	  # compiling the symbol table file with pic_flag works around
248349dc963fSmrg	  # a FreeBSD bug that causes programs to crash when -lm is
248449dc963fSmrg	  # linked before any other PIC object.  But we must not use
248549dc963fSmrg	  # pic_flag when linking with -static.  The problem exists in
248649dc963fSmrg	  # FreeBSD 2.2.6 and is fixed in FreeBSD 3.1.
248749dc963fSmrg	  *-*-freebsd2*|*-*-freebsd3.0*|*-*-freebsdelf3.0*)
248849dc963fSmrg	    pic_flag_for_symtable=" $pic_flag -DFREEBSD_WORKAROUND" ;;
248949dc963fSmrg	  *-*-hpux*)
249049dc963fSmrg	    pic_flag_for_symtable=" $pic_flag"  ;;
249149dc963fSmrg	  *)
249249dc963fSmrg	    if test "X$my_pic_p" != Xno; then
249349dc963fSmrg	      pic_flag_for_symtable=" $pic_flag"
24944b0ead49Smrg	    fi
249549dc963fSmrg	    ;;
249649dc963fSmrg	  esac
249749dc963fSmrg	  ;;
249849dc963fSmrg	esac
249949dc963fSmrg	symtab_cflags=
250049dc963fSmrg	for arg in $LTCFLAGS; do
250149dc963fSmrg	  case $arg in
250249dc963fSmrg	  -pie | -fpie | -fPIE) ;;
250349dc963fSmrg	  *) symtab_cflags="$symtab_cflags $arg" ;;
250449dc963fSmrg	  esac
250549dc963fSmrg	done
25064b0ead49Smrg
250749dc963fSmrg	# Now compile the dynamic symbol file.
250849dc963fSmrg	func_show_eval '(cd $output_objdir && $LTCC$symtab_cflags -c$no_builtin_flag$pic_flag_for_symtable "$my_dlsyms")' 'exit $?'
25094b0ead49Smrg
251049dc963fSmrg	# Clean up the generated files.
251149dc963fSmrg	func_show_eval '$RM "$output_objdir/$my_dlsyms" "$nlist" "${nlist}S" "${nlist}T"'
25124b0ead49Smrg
251349dc963fSmrg	# Transform the symbol file into the correct name.
251449dc963fSmrg	symfileobj="$output_objdir/${my_outputname}S.$objext"
251549dc963fSmrg	case $host in
251649dc963fSmrg	*cygwin* | *mingw* | *cegcc* )
251749dc963fSmrg	  if test -f "$output_objdir/$my_outputname.def"; then
251849dc963fSmrg	    compile_command=`$ECHO "X$compile_command" | $Xsed -e "s%@SYMFILE@%$output_objdir/$my_outputname.def $symfileobj%"`
251949dc963fSmrg	    finalize_command=`$ECHO "X$finalize_command" | $Xsed -e "s%@SYMFILE@%$output_objdir/$my_outputname.def $symfileobj%"`
252049dc963fSmrg	  else
252149dc963fSmrg	    compile_command=`$ECHO "X$compile_command" | $Xsed -e "s%@SYMFILE@%$symfileobj%"`
252249dc963fSmrg	    finalize_command=`$ECHO "X$finalize_command" | $Xsed -e "s%@SYMFILE@%$symfileobj%"`
25234b0ead49Smrg	  fi
252449dc963fSmrg	  ;;
252549dc963fSmrg	*)
252649dc963fSmrg	  compile_command=`$ECHO "X$compile_command" | $Xsed -e "s%@SYMFILE@%$symfileobj%"`
252749dc963fSmrg	  finalize_command=`$ECHO "X$finalize_command" | $Xsed -e "s%@SYMFILE@%$symfileobj%"`
252849dc963fSmrg	  ;;
252949dc963fSmrg	esac
253049dc963fSmrg	;;
253149dc963fSmrg      *)
253249dc963fSmrg	func_fatal_error "unknown suffix for \`$my_dlsyms'"
253349dc963fSmrg	;;
253449dc963fSmrg      esac
253549dc963fSmrg    else
253649dc963fSmrg      # We keep going just in case the user didn't refer to
253749dc963fSmrg      # lt_preloaded_symbols.  The linker will fail if global_symbol_pipe
253849dc963fSmrg      # really was required.
25394b0ead49Smrg
254049dc963fSmrg      # Nullify the symbol file.
254149dc963fSmrg      compile_command=`$ECHO "X$compile_command" | $Xsed -e "s% @SYMFILE@%%"`
254249dc963fSmrg      finalize_command=`$ECHO "X$finalize_command" | $Xsed -e "s% @SYMFILE@%%"`
254349dc963fSmrg    fi
254449dc963fSmrg}
25454b0ead49Smrg
254649dc963fSmrg# func_win32_libid arg
254749dc963fSmrg# return the library type of file 'arg'
254849dc963fSmrg#
254949dc963fSmrg# Need a lot of goo to handle *both* DLLs and import libs
255049dc963fSmrg# Has to be a shell function in order to 'eat' the argument
255149dc963fSmrg# that is supplied when $file_magic_command is called.
255249dc963fSmrgfunc_win32_libid ()
255349dc963fSmrg{
255449dc963fSmrg  $opt_debug
255549dc963fSmrg  win32_libid_type="unknown"
255649dc963fSmrg  win32_fileres=`file -L $1 2>/dev/null`
255749dc963fSmrg  case $win32_fileres in
255849dc963fSmrg  *ar\ archive\ import\ library*) # definitely import
255949dc963fSmrg    win32_libid_type="x86 archive import"
256049dc963fSmrg    ;;
256149dc963fSmrg  *ar\ archive*) # could be an import, or static
256249dc963fSmrg    if eval $OBJDUMP -f $1 | $SED -e '10q' 2>/dev/null |
256349dc963fSmrg       $EGREP 'file format pe-i386(.*architecture: i386)?' >/dev/null ; then
256449dc963fSmrg      win32_nmres=`eval $NM -f posix -A $1 |
256549dc963fSmrg	$SED -n -e '
256649dc963fSmrg	    1,100{
256749dc963fSmrg		/ I /{
256849dc963fSmrg		    s,.*,import,
256949dc963fSmrg		    p
257049dc963fSmrg		    q
257149dc963fSmrg		}
257249dc963fSmrg	    }'`
257349dc963fSmrg      case $win32_nmres in
257449dc963fSmrg      import*)  win32_libid_type="x86 archive import";;
257549dc963fSmrg      *)        win32_libid_type="x86 archive static";;
257649dc963fSmrg      esac
257749dc963fSmrg    fi
257849dc963fSmrg    ;;
257949dc963fSmrg  *DLL*)
258049dc963fSmrg    win32_libid_type="x86 DLL"
258149dc963fSmrg    ;;
258249dc963fSmrg  *executable*) # but shell scripts are "executable" too...
258349dc963fSmrg    case $win32_fileres in
258449dc963fSmrg    *MS\ Windows\ PE\ Intel*)
258549dc963fSmrg      win32_libid_type="x86 DLL"
258649dc963fSmrg      ;;
258749dc963fSmrg    esac
258849dc963fSmrg    ;;
258949dc963fSmrg  esac
259049dc963fSmrg  $ECHO "$win32_libid_type"
259149dc963fSmrg}
25924b0ead49Smrg
25934b0ead49Smrg
25944b0ead49Smrg
259549dc963fSmrg# func_extract_an_archive dir oldlib
259649dc963fSmrgfunc_extract_an_archive ()
259749dc963fSmrg{
259849dc963fSmrg    $opt_debug
259949dc963fSmrg    f_ex_an_ar_dir="$1"; shift
260049dc963fSmrg    f_ex_an_ar_oldlib="$1"
260149dc963fSmrg    func_show_eval "(cd \$f_ex_an_ar_dir && $AR x \"\$f_ex_an_ar_oldlib\")" 'exit $?'
260249dc963fSmrg    if ($AR t "$f_ex_an_ar_oldlib" | sort | sort -uc >/dev/null 2>&1); then
260349dc963fSmrg     :
260449dc963fSmrg    else
260549dc963fSmrg      func_fatal_error "object name conflicts in archive: $f_ex_an_ar_dir/$f_ex_an_ar_oldlib"
260649dc963fSmrg    fi
260749dc963fSmrg}
26084b0ead49Smrg
26094b0ead49Smrg
261049dc963fSmrg# func_extract_archives gentop oldlib ...
261149dc963fSmrgfunc_extract_archives ()
261249dc963fSmrg{
261349dc963fSmrg    $opt_debug
261449dc963fSmrg    my_gentop="$1"; shift
261549dc963fSmrg    my_oldlibs=${1+"$@"}
261649dc963fSmrg    my_oldobjs=""
261749dc963fSmrg    my_xlib=""
261849dc963fSmrg    my_xabs=""
261949dc963fSmrg    my_xdir=""
26204b0ead49Smrg
262149dc963fSmrg    for my_xlib in $my_oldlibs; do
262249dc963fSmrg      # Extract the objects.
262349dc963fSmrg      case $my_xlib in
262449dc963fSmrg	[\\/]* | [A-Za-z]:[\\/]*) my_xabs="$my_xlib" ;;
262549dc963fSmrg	*) my_xabs=`pwd`"/$my_xlib" ;;
262649dc963fSmrg      esac
262749dc963fSmrg      func_basename "$my_xlib"
262849dc963fSmrg      my_xlib="$func_basename_result"
262949dc963fSmrg      my_xlib_u=$my_xlib
263049dc963fSmrg      while :; do
263149dc963fSmrg        case " $extracted_archives " in
263249dc963fSmrg	*" $my_xlib_u "*)
263349dc963fSmrg	  func_arith $extracted_serial + 1
263449dc963fSmrg	  extracted_serial=$func_arith_result
263549dc963fSmrg	  my_xlib_u=lt$extracted_serial-$my_xlib ;;
263649dc963fSmrg	*) break ;;
263749dc963fSmrg	esac
263849dc963fSmrg      done
263949dc963fSmrg      extracted_archives="$extracted_archives $my_xlib_u"
264049dc963fSmrg      my_xdir="$my_gentop/$my_xlib_u"
26414b0ead49Smrg
264249dc963fSmrg      func_mkdir_p "$my_xdir"
26434b0ead49Smrg
264449dc963fSmrg      case $host in
264549dc963fSmrg      *-darwin*)
264649dc963fSmrg	func_verbose "Extracting $my_xabs"
264749dc963fSmrg	# Do not bother doing anything if just a dry run
264849dc963fSmrg	$opt_dry_run || {
264949dc963fSmrg	  darwin_orig_dir=`pwd`
265049dc963fSmrg	  cd $my_xdir || exit $?
265149dc963fSmrg	  darwin_archive=$my_xabs
265249dc963fSmrg	  darwin_curdir=`pwd`
265349dc963fSmrg	  darwin_base_archive=`basename "$darwin_archive"`
265449dc963fSmrg	  darwin_arches=`$LIPO -info "$darwin_archive" 2>/dev/null | $GREP Architectures 2>/dev/null || true`
265549dc963fSmrg	  if test -n "$darwin_arches"; then
265649dc963fSmrg	    darwin_arches=`$ECHO "$darwin_arches" | $SED -e 's/.*are://'`
265749dc963fSmrg	    darwin_arch=
265849dc963fSmrg	    func_verbose "$darwin_base_archive has multiple architectures $darwin_arches"
265949dc963fSmrg	    for darwin_arch in  $darwin_arches ; do
266049dc963fSmrg	      func_mkdir_p "unfat-$$/${darwin_base_archive}-${darwin_arch}"
266149dc963fSmrg	      $LIPO -thin $darwin_arch -output "unfat-$$/${darwin_base_archive}-${darwin_arch}/${darwin_base_archive}" "${darwin_archive}"
266249dc963fSmrg	      cd "unfat-$$/${darwin_base_archive}-${darwin_arch}"
266349dc963fSmrg	      func_extract_an_archive "`pwd`" "${darwin_base_archive}"
266449dc963fSmrg	      cd "$darwin_curdir"
266549dc963fSmrg	      $RM "unfat-$$/${darwin_base_archive}-${darwin_arch}/${darwin_base_archive}"
266649dc963fSmrg	    done # $darwin_arches
266749dc963fSmrg            ## Okay now we've a bunch of thin objects, gotta fatten them up :)
266849dc963fSmrg	    darwin_filelist=`find unfat-$$ -type f -name \*.o -print -o -name \*.lo -print | $SED -e "$basename" | sort -u`
266949dc963fSmrg	    darwin_file=
267049dc963fSmrg	    darwin_files=
267149dc963fSmrg	    for darwin_file in $darwin_filelist; do
267249dc963fSmrg	      darwin_files=`find unfat-$$ -name $darwin_file -print | $NL2SP`
267349dc963fSmrg	      $LIPO -create -output "$darwin_file" $darwin_files
267449dc963fSmrg	    done # $darwin_filelist
267549dc963fSmrg	    $RM -rf unfat-$$
267649dc963fSmrg	    cd "$darwin_orig_dir"
26774b0ead49Smrg	  else
267849dc963fSmrg	    cd $darwin_orig_dir
267949dc963fSmrg	    func_extract_an_archive "$my_xdir" "$my_xabs"
268049dc963fSmrg	  fi # $darwin_arches
268149dc963fSmrg	} # !$opt_dry_run
268249dc963fSmrg	;;
268349dc963fSmrg      *)
268449dc963fSmrg        func_extract_an_archive "$my_xdir" "$my_xabs"
268549dc963fSmrg	;;
268649dc963fSmrg      esac
268749dc963fSmrg      my_oldobjs="$my_oldobjs "`find $my_xdir -name \*.$objext -print -o -name \*.lo -print | $NL2SP`
268849dc963fSmrg    done
26894b0ead49Smrg
269049dc963fSmrg    func_extract_archives_result="$my_oldobjs"
269149dc963fSmrg}
26924b0ead49Smrg
26934b0ead49Smrg
26944b0ead49Smrg
269549dc963fSmrg# func_emit_wrapper_part1 [arg=no]
269649dc963fSmrg#
269749dc963fSmrg# Emit the first part of a libtool wrapper script on stdout.
269849dc963fSmrg# For more information, see the description associated with
269949dc963fSmrg# func_emit_wrapper(), below.
270049dc963fSmrgfunc_emit_wrapper_part1 ()
270149dc963fSmrg{
270249dc963fSmrg	func_emit_wrapper_part1_arg1=no
270349dc963fSmrg	if test -n "$1" ; then
270449dc963fSmrg	  func_emit_wrapper_part1_arg1=$1
27054b0ead49Smrg	fi
27064b0ead49Smrg
270749dc963fSmrg	$ECHO "\
270849dc963fSmrg#! $SHELL
27094b0ead49Smrg
271049dc963fSmrg# $output - temporary wrapper script for $objdir/$outputname
271149dc963fSmrg# Generated by $PROGRAM (GNU $PACKAGE$TIMESTAMP) $VERSION
271249dc963fSmrg#
271349dc963fSmrg# The $output program cannot be directly executed until all the libtool
271449dc963fSmrg# libraries that it depends on are installed.
271549dc963fSmrg#
271649dc963fSmrg# This wrapper script should never be moved out of the build directory.
271749dc963fSmrg# If it is, it will not operate correctly.
27184b0ead49Smrg
271949dc963fSmrg# Sed substitution that helps us do robust quoting.  It backslashifies
272049dc963fSmrg# metacharacters that are still active within double-quoted strings.
272149dc963fSmrgXsed='${SED} -e 1s/^X//'
272249dc963fSmrgsed_quote_subst='$sed_quote_subst'
27234b0ead49Smrg
272449dc963fSmrg# Be Bourne compatible
272549dc963fSmrgif test -n \"\${ZSH_VERSION+set}\" && (emulate sh) >/dev/null 2>&1; then
272649dc963fSmrg  emulate sh
272749dc963fSmrg  NULLCMD=:
272849dc963fSmrg  # Zsh 3.x and 4.x performs word splitting on \${1+\"\$@\"}, which
272949dc963fSmrg  # is contrary to our usage.  Disable this feature.
273049dc963fSmrg  alias -g '\${1+\"\$@\"}'='\"\$@\"'
273149dc963fSmrg  setopt NO_GLOB_SUBST
273249dc963fSmrgelse
273349dc963fSmrg  case \`(set -o) 2>/dev/null\` in *posix*) set -o posix;; esac
273449dc963fSmrgfi
273549dc963fSmrgBIN_SH=xpg4; export BIN_SH # for Tru64
273649dc963fSmrgDUALCASE=1; export DUALCASE # for MKS sh
27374b0ead49Smrg
273849dc963fSmrg# The HP-UX ksh and POSIX shell print the target directory to stdout
273949dc963fSmrg# if CDPATH is set.
274049dc963fSmrg(unset CDPATH) >/dev/null 2>&1 && unset CDPATH
27414b0ead49Smrg
274249dc963fSmrgrelink_command=\"$relink_command\"
27434b0ead49Smrg
274449dc963fSmrg# This environment variable determines our operation mode.
274549dc963fSmrgif test \"\$libtool_install_magic\" = \"$magic\"; then
274649dc963fSmrg  # install mode needs the following variables:
274749dc963fSmrg  generated_by_libtool_version='$macro_version'
274849dc963fSmrg  notinst_deplibs='$notinst_deplibs'
274949dc963fSmrgelse
275049dc963fSmrg  # When we are sourced in execute mode, \$file and \$ECHO are already set.
275149dc963fSmrg  if test \"\$libtool_execute_magic\" != \"$magic\"; then
275249dc963fSmrg    ECHO=\"$qecho\"
275349dc963fSmrg    file=\"\$0\"
275449dc963fSmrg    # Make sure echo works.
275549dc963fSmrg    if test \"X\$1\" = X--no-reexec; then
275649dc963fSmrg      # Discard the --no-reexec flag, and continue.
275749dc963fSmrg      shift
275849dc963fSmrg    elif test \"X\`{ \$ECHO '\t'; } 2>/dev/null\`\" = 'X\t'; then
275949dc963fSmrg      # Yippee, \$ECHO works!
276049dc963fSmrg      :
276149dc963fSmrg    else
276249dc963fSmrg      # Restart under the correct shell, and then maybe \$ECHO will work.
276349dc963fSmrg      exec $SHELL \"\$0\" --no-reexec \${1+\"\$@\"}
276449dc963fSmrg    fi
276549dc963fSmrg  fi\
276649dc963fSmrg"
276749dc963fSmrg	$ECHO "\
27684b0ead49Smrg
276949dc963fSmrg  # Find the directory that this script lives in.
277049dc963fSmrg  thisdir=\`\$ECHO \"X\$file\" | \$Xsed -e 's%/[^/]*$%%'\`
277149dc963fSmrg  test \"x\$thisdir\" = \"x\$file\" && thisdir=.
27724b0ead49Smrg
277349dc963fSmrg  # Follow symbolic links until we get to the real thisdir.
277449dc963fSmrg  file=\`ls -ld \"\$file\" | ${SED} -n 's/.*-> //p'\`
277549dc963fSmrg  while test -n \"\$file\"; do
277649dc963fSmrg    destdir=\`\$ECHO \"X\$file\" | \$Xsed -e 's%/[^/]*\$%%'\`
27774b0ead49Smrg
277849dc963fSmrg    # If there was a directory component, then change thisdir.
277949dc963fSmrg    if test \"x\$destdir\" != \"x\$file\"; then
278049dc963fSmrg      case \"\$destdir\" in
278149dc963fSmrg      [\\\\/]* | [A-Za-z]:[\\\\/]*) thisdir=\"\$destdir\" ;;
278249dc963fSmrg      *) thisdir=\"\$thisdir/\$destdir\" ;;
27834b0ead49Smrg      esac
278449dc963fSmrg    fi
27854b0ead49Smrg
278649dc963fSmrg    file=\`\$ECHO \"X\$file\" | \$Xsed -e 's%^.*/%%'\`
278749dc963fSmrg    file=\`ls -ld \"\$thisdir/\$file\" | ${SED} -n 's/.*-> //p'\`
278849dc963fSmrg  done
278949dc963fSmrg"
279049dc963fSmrg}
279149dc963fSmrg# end: func_emit_wrapper_part1
279249dc963fSmrg
279349dc963fSmrg# func_emit_wrapper_part2 [arg=no]
279449dc963fSmrg#
279549dc963fSmrg# Emit the second part of a libtool wrapper script on stdout.
279649dc963fSmrg# For more information, see the description associated with
279749dc963fSmrg# func_emit_wrapper(), below.
279849dc963fSmrgfunc_emit_wrapper_part2 ()
279949dc963fSmrg{
280049dc963fSmrg	func_emit_wrapper_part2_arg1=no
280149dc963fSmrg	if test -n "$1" ; then
280249dc963fSmrg	  func_emit_wrapper_part2_arg1=$1
28034b0ead49Smrg	fi
28044b0ead49Smrg
280549dc963fSmrg	$ECHO "\
28064b0ead49Smrg
280749dc963fSmrg  # Usually 'no', except on cygwin/mingw when embedded into
280849dc963fSmrg  # the cwrapper.
280949dc963fSmrg  WRAPPER_SCRIPT_BELONGS_IN_OBJDIR=$func_emit_wrapper_part2_arg1
281049dc963fSmrg  if test \"\$WRAPPER_SCRIPT_BELONGS_IN_OBJDIR\" = \"yes\"; then
281149dc963fSmrg    # special case for '.'
281249dc963fSmrg    if test \"\$thisdir\" = \".\"; then
281349dc963fSmrg      thisdir=\`pwd\`
281449dc963fSmrg    fi
281549dc963fSmrg    # remove .libs from thisdir
281649dc963fSmrg    case \"\$thisdir\" in
281749dc963fSmrg    *[\\\\/]$objdir ) thisdir=\`\$ECHO \"X\$thisdir\" | \$Xsed -e 's%[\\\\/][^\\\\/]*$%%'\` ;;
281849dc963fSmrg    $objdir )   thisdir=. ;;
281949dc963fSmrg    esac
282049dc963fSmrg  fi
282149dc963fSmrg
282249dc963fSmrg  # Try to get the absolute directory name.
282349dc963fSmrg  absdir=\`cd \"\$thisdir\" && pwd\`
282449dc963fSmrg  test -n \"\$absdir\" && thisdir=\"\$absdir\"
282549dc963fSmrg"
282649dc963fSmrg
282749dc963fSmrg	if test "$fast_install" = yes; then
282849dc963fSmrg	  $ECHO "\
282949dc963fSmrg  program=lt-'$outputname'$exeext
283049dc963fSmrg  progdir=\"\$thisdir/$objdir\"
283149dc963fSmrg
283249dc963fSmrg  if test ! -f \"\$progdir/\$program\" ||
283349dc963fSmrg     { file=\`ls -1dt \"\$progdir/\$program\" \"\$progdir/../\$program\" 2>/dev/null | ${SED} 1q\`; \\
283449dc963fSmrg       test \"X\$file\" != \"X\$progdir/\$program\"; }; then
283549dc963fSmrg
283649dc963fSmrg    file=\"\$\$-\$program\"
283749dc963fSmrg
283849dc963fSmrg    if test ! -d \"\$progdir\"; then
283949dc963fSmrg      $MKDIR \"\$progdir\"
284049dc963fSmrg    else
284149dc963fSmrg      $RM \"\$progdir/\$file\"
284249dc963fSmrg    fi"
284349dc963fSmrg
284449dc963fSmrg	  $ECHO "\
284549dc963fSmrg
284649dc963fSmrg    # relink executable if necessary
284749dc963fSmrg    if test -n \"\$relink_command\"; then
284849dc963fSmrg      if relink_command_output=\`eval \$relink_command 2>&1\`; then :
284949dc963fSmrg      else
285049dc963fSmrg	$ECHO \"\$relink_command_output\" >&2
285149dc963fSmrg	$RM \"\$progdir/\$file\"
285249dc963fSmrg	exit 1
28534b0ead49Smrg      fi
285449dc963fSmrg    fi
28554b0ead49Smrg
285649dc963fSmrg    $MV \"\$progdir/\$file\" \"\$progdir/\$program\" 2>/dev/null ||
285749dc963fSmrg    { $RM \"\$progdir/\$program\";
285849dc963fSmrg      $MV \"\$progdir/\$file\" \"\$progdir/\$program\"; }
285949dc963fSmrg    $RM \"\$progdir/\$file\"
286049dc963fSmrg  fi"
286149dc963fSmrg	else
286249dc963fSmrg	  $ECHO "\
286349dc963fSmrg  program='$outputname'
286449dc963fSmrg  progdir=\"\$thisdir/$objdir\"
286549dc963fSmrg"
28664b0ead49Smrg	fi
28674b0ead49Smrg
286849dc963fSmrg	$ECHO "\
28694b0ead49Smrg
287049dc963fSmrg  if test -f \"\$progdir/\$program\"; then"
28714b0ead49Smrg
287249dc963fSmrg	# Export our shlibpath_var if we have one.
287349dc963fSmrg	if test "$shlibpath_overrides_runpath" = yes && test -n "$shlibpath_var" && test -n "$temp_rpath"; then
287449dc963fSmrg	  $ECHO "\
287549dc963fSmrg    # Add our own library path to $shlibpath_var
287649dc963fSmrg    $shlibpath_var=\"$temp_rpath\$$shlibpath_var\"
287749dc963fSmrg
287849dc963fSmrg    # Some systems cannot cope with colon-terminated $shlibpath_var
287949dc963fSmrg    # The second colon is a workaround for a bug in BeOS R4 sed
288049dc963fSmrg    $shlibpath_var=\`\$ECHO \"X\$$shlibpath_var\" | \$Xsed -e 's/::*\$//'\`
28814b0ead49Smrg
288249dc963fSmrg    export $shlibpath_var
288349dc963fSmrg"
28844b0ead49Smrg	fi
28854b0ead49Smrg
288649dc963fSmrg	# fixup the dll searchpath if we need to.
288749dc963fSmrg	if test -n "$dllsearchpath"; then
288849dc963fSmrg	  $ECHO "\
288949dc963fSmrg    # Add the dll search path components to the executable PATH
289049dc963fSmrg    PATH=$dllsearchpath:\$PATH
289149dc963fSmrg"
289249dc963fSmrg	fi
28934b0ead49Smrg
289449dc963fSmrg	$ECHO "\
289549dc963fSmrg    if test \"\$libtool_execute_magic\" != \"$magic\"; then
289649dc963fSmrg      # Run the actual program with our arguments.
289749dc963fSmrg"
289849dc963fSmrg	case $host in
289949dc963fSmrg	# Backslashes separate directories on plain windows
290049dc963fSmrg	*-*-mingw | *-*-os2* | *-cegcc*)
290149dc963fSmrg	  $ECHO "\
290249dc963fSmrg      exec \"\$progdir\\\\\$program\" \${1+\"\$@\"}
290349dc963fSmrg"
29044b0ead49Smrg	  ;;
29054b0ead49Smrg
29064b0ead49Smrg	*)
290749dc963fSmrg	  $ECHO "\
290849dc963fSmrg      exec \"\$progdir/\$program\" \${1+\"\$@\"}
290949dc963fSmrg"
29104b0ead49Smrg	  ;;
29114b0ead49Smrg	esac
291249dc963fSmrg	$ECHO "\
291349dc963fSmrg      \$ECHO \"\$0: cannot exec \$program \$*\" 1>&2
291449dc963fSmrg      exit 1
291549dc963fSmrg    fi
291649dc963fSmrg  else
291749dc963fSmrg    # The program doesn't exist.
291849dc963fSmrg    \$ECHO \"\$0: error: \\\`\$progdir/\$program' does not exist\" 1>&2
291949dc963fSmrg    \$ECHO \"This script is just a wrapper for \$program.\" 1>&2
292049dc963fSmrg    $ECHO \"See the $PACKAGE documentation for more information.\" 1>&2
292149dc963fSmrg    exit 1
292249dc963fSmrg  fi
292349dc963fSmrgfi\
292449dc963fSmrg"
292549dc963fSmrg}
292649dc963fSmrg# end: func_emit_wrapper_part2
29274b0ead49Smrg
29284b0ead49Smrg
292949dc963fSmrg# func_emit_wrapper [arg=no]
293049dc963fSmrg#
293149dc963fSmrg# Emit a libtool wrapper script on stdout.
293249dc963fSmrg# Don't directly open a file because we may want to
293349dc963fSmrg# incorporate the script contents within a cygwin/mingw
293449dc963fSmrg# wrapper executable.  Must ONLY be called from within
293549dc963fSmrg# func_mode_link because it depends on a number of variables
293649dc963fSmrg# set therein.
293749dc963fSmrg#
293849dc963fSmrg# ARG is the value that the WRAPPER_SCRIPT_BELONGS_IN_OBJDIR
293949dc963fSmrg# variable will take.  If 'yes', then the emitted script
294049dc963fSmrg# will assume that the directory in which it is stored is
294149dc963fSmrg# the $objdir directory.  This is a cygwin/mingw-specific
294249dc963fSmrg# behavior.
294349dc963fSmrgfunc_emit_wrapper ()
294449dc963fSmrg{
294549dc963fSmrg	func_emit_wrapper_arg1=no
294649dc963fSmrg	if test -n "$1" ; then
294749dc963fSmrg	  func_emit_wrapper_arg1=$1
29484b0ead49Smrg	fi
29494b0ead49Smrg
295049dc963fSmrg	# split this up so that func_emit_cwrapperexe_src
295149dc963fSmrg	# can call each part independently.
295249dc963fSmrg	func_emit_wrapper_part1 "${func_emit_wrapper_arg1}"
295349dc963fSmrg	func_emit_wrapper_part2 "${func_emit_wrapper_arg1}"
295449dc963fSmrg}
29554b0ead49Smrg
29564b0ead49Smrg
295749dc963fSmrg# func_to_host_path arg
295849dc963fSmrg#
295949dc963fSmrg# Convert paths to host format when used with build tools.
296049dc963fSmrg# Intended for use with "native" mingw (where libtool itself
296149dc963fSmrg# is running under the msys shell), or in the following cross-
296249dc963fSmrg# build environments:
296349dc963fSmrg#    $build          $host
296449dc963fSmrg#    mingw (msys)    mingw  [e.g. native]
296549dc963fSmrg#    cygwin          mingw
296649dc963fSmrg#    *nix + wine     mingw
296749dc963fSmrg# where wine is equipped with the `winepath' executable.
296849dc963fSmrg# In the native mingw case, the (msys) shell automatically
296949dc963fSmrg# converts paths for any non-msys applications it launches,
297049dc963fSmrg# but that facility isn't available from inside the cwrapper.
297149dc963fSmrg# Similar accommodations are necessary for $host mingw and
297249dc963fSmrg# $build cygwin.  Calling this function does no harm for other
297349dc963fSmrg# $host/$build combinations not listed above.
297449dc963fSmrg#
297549dc963fSmrg# ARG is the path (on $build) that should be converted to
297649dc963fSmrg# the proper representation for $host. The result is stored
297749dc963fSmrg# in $func_to_host_path_result.
297849dc963fSmrgfunc_to_host_path ()
297949dc963fSmrg{
298049dc963fSmrg  func_to_host_path_result="$1"
298149dc963fSmrg  if test -n "$1" ; then
298249dc963fSmrg    case $host in
298349dc963fSmrg      *mingw* )
298449dc963fSmrg        lt_sed_naive_backslashify='s|\\\\*|\\|g;s|/|\\|g;s|\\|\\\\|g'
298549dc963fSmrg        case $build in
298649dc963fSmrg          *mingw* ) # actually, msys
298749dc963fSmrg            # awkward: cmd appends spaces to result
298849dc963fSmrg            lt_sed_strip_trailing_spaces="s/[ ]*\$//"
298949dc963fSmrg            func_to_host_path_tmp1=`( cmd //c echo "$1" |\
299049dc963fSmrg              $SED -e "$lt_sed_strip_trailing_spaces" ) 2>/dev/null || echo ""`
299149dc963fSmrg            func_to_host_path_result=`echo "$func_to_host_path_tmp1" |\
299249dc963fSmrg              $SED -e "$lt_sed_naive_backslashify"`
299349dc963fSmrg            ;;
299449dc963fSmrg          *cygwin* )
299549dc963fSmrg            func_to_host_path_tmp1=`cygpath -w "$1"`
299649dc963fSmrg            func_to_host_path_result=`echo "$func_to_host_path_tmp1" |\
299749dc963fSmrg              $SED -e "$lt_sed_naive_backslashify"`
299849dc963fSmrg            ;;
299949dc963fSmrg          * )
300049dc963fSmrg            # Unfortunately, winepath does not exit with a non-zero
300149dc963fSmrg            # error code, so we are forced to check the contents of
300249dc963fSmrg            # stdout. On the other hand, if the command is not
300349dc963fSmrg            # found, the shell will set an exit code of 127 and print
300449dc963fSmrg            # *an error message* to stdout. So we must check for both
300549dc963fSmrg            # error code of zero AND non-empty stdout, which explains
300649dc963fSmrg            # the odd construction:
300749dc963fSmrg            func_to_host_path_tmp1=`winepath -w "$1" 2>/dev/null`
300849dc963fSmrg            if test "$?" -eq 0 && test -n "${func_to_host_path_tmp1}"; then
300949dc963fSmrg              func_to_host_path_result=`echo "$func_to_host_path_tmp1" |\
301049dc963fSmrg                $SED -e "$lt_sed_naive_backslashify"`
301149dc963fSmrg            else
301249dc963fSmrg              # Allow warning below.
301349dc963fSmrg              func_to_host_path_result=""
301449dc963fSmrg            fi
301549dc963fSmrg            ;;
301649dc963fSmrg        esac
301749dc963fSmrg        if test -z "$func_to_host_path_result" ; then
301849dc963fSmrg          func_error "Could not determine host path corresponding to"
301949dc963fSmrg          func_error "  '$1'"
302049dc963fSmrg          func_error "Continuing, but uninstalled executables may not work."
302149dc963fSmrg          # Fallback:
302249dc963fSmrg          func_to_host_path_result="$1"
302349dc963fSmrg        fi
302449dc963fSmrg        ;;
302549dc963fSmrg    esac
302649dc963fSmrg  fi
302749dc963fSmrg}
302849dc963fSmrg# end: func_to_host_path
30294b0ead49Smrg
303049dc963fSmrg# func_to_host_pathlist arg
303149dc963fSmrg#
303249dc963fSmrg# Convert pathlists to host format when used with build tools.
303349dc963fSmrg# See func_to_host_path(), above. This function supports the
303449dc963fSmrg# following $build/$host combinations (but does no harm for
303549dc963fSmrg# combinations not listed here):
303649dc963fSmrg#    $build          $host
303749dc963fSmrg#    mingw (msys)    mingw  [e.g. native]
303849dc963fSmrg#    cygwin          mingw
303949dc963fSmrg#    *nix + wine     mingw
304049dc963fSmrg#
304149dc963fSmrg# Path separators are also converted from $build format to
304249dc963fSmrg# $host format. If ARG begins or ends with a path separator
304349dc963fSmrg# character, it is preserved (but converted to $host format)
304449dc963fSmrg# on output.
304549dc963fSmrg#
304649dc963fSmrg# ARG is a pathlist (on $build) that should be converted to
304749dc963fSmrg# the proper representation on $host. The result is stored
304849dc963fSmrg# in $func_to_host_pathlist_result.
304949dc963fSmrgfunc_to_host_pathlist ()
305049dc963fSmrg{
305149dc963fSmrg  func_to_host_pathlist_result="$1"
305249dc963fSmrg  if test -n "$1" ; then
305349dc963fSmrg    case $host in
305449dc963fSmrg      *mingw* )
305549dc963fSmrg        lt_sed_naive_backslashify='s|\\\\*|\\|g;s|/|\\|g;s|\\|\\\\|g'
305649dc963fSmrg        # Remove leading and trailing path separator characters from
305749dc963fSmrg        # ARG. msys behavior is inconsistent here, cygpath turns them
305849dc963fSmrg        # into '.;' and ';.', and winepath ignores them completely.
305949dc963fSmrg        func_to_host_pathlist_tmp2="$1"
306049dc963fSmrg        # Once set for this call, this variable should not be
306149dc963fSmrg        # reassigned. It is used in tha fallback case.
306249dc963fSmrg        func_to_host_pathlist_tmp1=`echo "$func_to_host_pathlist_tmp2" |\
306349dc963fSmrg          $SED -e 's|^:*||' -e 's|:*$||'`
306449dc963fSmrg        case $build in
306549dc963fSmrg          *mingw* ) # Actually, msys.
306649dc963fSmrg            # Awkward: cmd appends spaces to result.
306749dc963fSmrg            lt_sed_strip_trailing_spaces="s/[ ]*\$//"
306849dc963fSmrg            func_to_host_pathlist_tmp2=`( cmd //c echo "$func_to_host_pathlist_tmp1" |\
306949dc963fSmrg              $SED -e "$lt_sed_strip_trailing_spaces" ) 2>/dev/null || echo ""`
307049dc963fSmrg            func_to_host_pathlist_result=`echo "$func_to_host_pathlist_tmp2" |\
307149dc963fSmrg              $SED -e "$lt_sed_naive_backslashify"`
307249dc963fSmrg            ;;
307349dc963fSmrg          *cygwin* )
307449dc963fSmrg            func_to_host_pathlist_tmp2=`cygpath -w -p "$func_to_host_pathlist_tmp1"`
307549dc963fSmrg            func_to_host_pathlist_result=`echo "$func_to_host_pathlist_tmp2" |\
307649dc963fSmrg              $SED -e "$lt_sed_naive_backslashify"`
307749dc963fSmrg            ;;
307849dc963fSmrg          * )
307949dc963fSmrg            # unfortunately, winepath doesn't convert pathlists
308049dc963fSmrg            func_to_host_pathlist_result=""
308149dc963fSmrg            func_to_host_pathlist_oldIFS=$IFS
308249dc963fSmrg            IFS=:
308349dc963fSmrg            for func_to_host_pathlist_f in $func_to_host_pathlist_tmp1 ; do
308449dc963fSmrg              IFS=$func_to_host_pathlist_oldIFS
308549dc963fSmrg              if test -n "$func_to_host_pathlist_f" ; then
308649dc963fSmrg                func_to_host_path "$func_to_host_pathlist_f"
308749dc963fSmrg                if test -n "$func_to_host_path_result" ; then
308849dc963fSmrg                  if test -z "$func_to_host_pathlist_result" ; then
308949dc963fSmrg                    func_to_host_pathlist_result="$func_to_host_path_result"
309049dc963fSmrg                  else
309149dc963fSmrg                    func_to_host_pathlist_result="$func_to_host_pathlist_result;$func_to_host_path_result"
309249dc963fSmrg                  fi
309349dc963fSmrg                fi
309449dc963fSmrg              fi
309549dc963fSmrg              IFS=:
309649dc963fSmrg            done
309749dc963fSmrg            IFS=$func_to_host_pathlist_oldIFS
309849dc963fSmrg            ;;
309949dc963fSmrg        esac
310049dc963fSmrg        if test -z "$func_to_host_pathlist_result" ; then
310149dc963fSmrg          func_error "Could not determine the host path(s) corresponding to"
310249dc963fSmrg          func_error "  '$1'"
310349dc963fSmrg          func_error "Continuing, but uninstalled executables may not work."
310449dc963fSmrg          # Fallback. This may break if $1 contains DOS-style drive
310549dc963fSmrg          # specifications. The fix is not to complicate the expression
310649dc963fSmrg          # below, but for the user to provide a working wine installation
310749dc963fSmrg          # with winepath so that path translation in the cross-to-mingw
310849dc963fSmrg          # case works properly.
310949dc963fSmrg          lt_replace_pathsep_nix_to_dos="s|:|;|g"
311049dc963fSmrg          func_to_host_pathlist_result=`echo "$func_to_host_pathlist_tmp1" |\
311149dc963fSmrg            $SED -e "$lt_replace_pathsep_nix_to_dos"`
311249dc963fSmrg        fi
311349dc963fSmrg        # Now, add the leading and trailing path separators back
311449dc963fSmrg        case "$1" in
311549dc963fSmrg          :* ) func_to_host_pathlist_result=";$func_to_host_pathlist_result"
311649dc963fSmrg            ;;
311749dc963fSmrg        esac
311849dc963fSmrg        case "$1" in
311949dc963fSmrg          *: ) func_to_host_pathlist_result="$func_to_host_pathlist_result;"
312049dc963fSmrg            ;;
312149dc963fSmrg        esac
312249dc963fSmrg        ;;
312349dc963fSmrg    esac
312449dc963fSmrg  fi
312549dc963fSmrg}
312649dc963fSmrg# end: func_to_host_pathlist
31274b0ead49Smrg
312849dc963fSmrg# func_emit_cwrapperexe_src
312949dc963fSmrg# emit the source code for a wrapper executable on stdout
313049dc963fSmrg# Must ONLY be called from within func_mode_link because
313149dc963fSmrg# it depends on a number of variable set therein.
313249dc963fSmrgfunc_emit_cwrapperexe_src ()
313349dc963fSmrg{
313449dc963fSmrg	cat <<EOF
31354b0ead49Smrg
313649dc963fSmrg/* $cwrappersource - temporary wrapper executable for $objdir/$outputname
313749dc963fSmrg   Generated by $PROGRAM (GNU $PACKAGE$TIMESTAMP) $VERSION
31384b0ead49Smrg
313949dc963fSmrg   The $output program cannot be directly executed until all the libtool
314049dc963fSmrg   libraries that it depends on are installed.
31414b0ead49Smrg
314249dc963fSmrg   This wrapper executable should never be moved out of the build directory.
314349dc963fSmrg   If it is, it will not operate correctly.
31444b0ead49Smrg
314549dc963fSmrg   Currently, it simply execs the wrapper *script* "$SHELL $output",
314649dc963fSmrg   but could eventually absorb all of the scripts functionality and
314749dc963fSmrg   exec $objdir/$outputname directly.
314849dc963fSmrg*/
314949dc963fSmrgEOF
315049dc963fSmrg	    cat <<"EOF"
315149dc963fSmrg#include <stdio.h>
315249dc963fSmrg#include <stdlib.h>
315349dc963fSmrg#ifdef _MSC_VER
315449dc963fSmrg# include <direct.h>
315549dc963fSmrg# include <process.h>
315649dc963fSmrg# include <io.h>
315749dc963fSmrg# define setmode _setmode
315849dc963fSmrg#else
315949dc963fSmrg# include <unistd.h>
316049dc963fSmrg# include <stdint.h>
316149dc963fSmrg# ifdef __CYGWIN__
316249dc963fSmrg#  include <io.h>
316349dc963fSmrg#  define HAVE_SETENV
316449dc963fSmrg#  ifdef __STRICT_ANSI__
316549dc963fSmrgchar *realpath (const char *, char *);
316649dc963fSmrgint putenv (char *);
316749dc963fSmrgint setenv (const char *, const char *, int);
316849dc963fSmrg#  endif
316949dc963fSmrg# endif
317049dc963fSmrg#endif
317149dc963fSmrg#include <malloc.h>
317249dc963fSmrg#include <stdarg.h>
317349dc963fSmrg#include <assert.h>
317449dc963fSmrg#include <string.h>
317549dc963fSmrg#include <ctype.h>
317649dc963fSmrg#include <errno.h>
317749dc963fSmrg#include <fcntl.h>
317849dc963fSmrg#include <sys/stat.h>
31794b0ead49Smrg
318049dc963fSmrg#if defined(PATH_MAX)
318149dc963fSmrg# define LT_PATHMAX PATH_MAX
318249dc963fSmrg#elif defined(MAXPATHLEN)
318349dc963fSmrg# define LT_PATHMAX MAXPATHLEN
318449dc963fSmrg#else
318549dc963fSmrg# define LT_PATHMAX 1024
318649dc963fSmrg#endif
31874b0ead49Smrg
318849dc963fSmrg#ifndef S_IXOTH
318949dc963fSmrg# define S_IXOTH 0
319049dc963fSmrg#endif
319149dc963fSmrg#ifndef S_IXGRP
319249dc963fSmrg# define S_IXGRP 0
319349dc963fSmrg#endif
31944b0ead49Smrg
319549dc963fSmrg#ifdef _MSC_VER
319649dc963fSmrg# define S_IXUSR _S_IEXEC
319749dc963fSmrg# define stat _stat
319849dc963fSmrg# ifndef _INTPTR_T_DEFINED
319949dc963fSmrg#  define intptr_t int
320049dc963fSmrg# endif
320149dc963fSmrg#endif
32024b0ead49Smrg
320349dc963fSmrg#ifndef DIR_SEPARATOR
320449dc963fSmrg# define DIR_SEPARATOR '/'
320549dc963fSmrg# define PATH_SEPARATOR ':'
320649dc963fSmrg#endif
32074b0ead49Smrg
320849dc963fSmrg#if defined (_WIN32) || defined (__MSDOS__) || defined (__DJGPP__) || \
320949dc963fSmrg  defined (__OS2__)
321049dc963fSmrg# define HAVE_DOS_BASED_FILE_SYSTEM
321149dc963fSmrg# define FOPEN_WB "wb"
321249dc963fSmrg# ifndef DIR_SEPARATOR_2
321349dc963fSmrg#  define DIR_SEPARATOR_2 '\\'
321449dc963fSmrg# endif
321549dc963fSmrg# ifndef PATH_SEPARATOR_2
321649dc963fSmrg#  define PATH_SEPARATOR_2 ';'
321749dc963fSmrg# endif
321849dc963fSmrg#endif
32194b0ead49Smrg
322049dc963fSmrg#ifndef DIR_SEPARATOR_2
322149dc963fSmrg# define IS_DIR_SEPARATOR(ch) ((ch) == DIR_SEPARATOR)
322249dc963fSmrg#else /* DIR_SEPARATOR_2 */
322349dc963fSmrg# define IS_DIR_SEPARATOR(ch) \
322449dc963fSmrg	(((ch) == DIR_SEPARATOR) || ((ch) == DIR_SEPARATOR_2))
322549dc963fSmrg#endif /* DIR_SEPARATOR_2 */
32264b0ead49Smrg
322749dc963fSmrg#ifndef PATH_SEPARATOR_2
322849dc963fSmrg# define IS_PATH_SEPARATOR(ch) ((ch) == PATH_SEPARATOR)
322949dc963fSmrg#else /* PATH_SEPARATOR_2 */
323049dc963fSmrg# define IS_PATH_SEPARATOR(ch) ((ch) == PATH_SEPARATOR_2)
323149dc963fSmrg#endif /* PATH_SEPARATOR_2 */
32324b0ead49Smrg
323349dc963fSmrg#ifdef __CYGWIN__
323449dc963fSmrg# define FOPEN_WB "wb"
323549dc963fSmrg#endif
32364b0ead49Smrg
323749dc963fSmrg#ifndef FOPEN_WB
323849dc963fSmrg# define FOPEN_WB "w"
323949dc963fSmrg#endif
324049dc963fSmrg#ifndef _O_BINARY
324149dc963fSmrg# define _O_BINARY 0
324249dc963fSmrg#endif
32434b0ead49Smrg
324449dc963fSmrg#define XMALLOC(type, num)      ((type *) xmalloc ((num) * sizeof(type)))
324549dc963fSmrg#define XFREE(stale) do { \
324649dc963fSmrg  if (stale) { free ((void *) stale); stale = 0; } \
324749dc963fSmrg} while (0)
32484b0ead49Smrg
324949dc963fSmrg#undef LTWRAPPER_DEBUGPRINTF
325049dc963fSmrg#if defined DEBUGWRAPPER
325149dc963fSmrg# define LTWRAPPER_DEBUGPRINTF(args) ltwrapper_debugprintf args
325249dc963fSmrgstatic void
325349dc963fSmrgltwrapper_debugprintf (const char *fmt, ...)
325449dc963fSmrg{
325549dc963fSmrg    va_list args;
325649dc963fSmrg    va_start (args, fmt);
325749dc963fSmrg    (void) vfprintf (stderr, fmt, args);
325849dc963fSmrg    va_end (args);
325949dc963fSmrg}
326049dc963fSmrg#else
326149dc963fSmrg# define LTWRAPPER_DEBUGPRINTF(args)
326249dc963fSmrg#endif
32634b0ead49Smrg
326449dc963fSmrgconst char *program_name = NULL;
32654b0ead49Smrg
326649dc963fSmrgvoid *xmalloc (size_t num);
326749dc963fSmrgchar *xstrdup (const char *string);
326849dc963fSmrgconst char *base_name (const char *name);
326949dc963fSmrgchar *find_executable (const char *wrapper);
327049dc963fSmrgchar *chase_symlinks (const char *pathspec);
327149dc963fSmrgint make_executable (const char *path);
327249dc963fSmrgint check_executable (const char *path);
327349dc963fSmrgchar *strendzap (char *str, const char *pat);
327449dc963fSmrgvoid lt_fatal (const char *message, ...);
327549dc963fSmrgvoid lt_setenv (const char *name, const char *value);
327649dc963fSmrgchar *lt_extend_str (const char *orig_value, const char *add, int to_end);
327749dc963fSmrgvoid lt_opt_process_env_set (const char *arg);
327849dc963fSmrgvoid lt_opt_process_env_prepend (const char *arg);
327949dc963fSmrgvoid lt_opt_process_env_append (const char *arg);
328049dc963fSmrgint lt_split_name_value (const char *arg, char** name, char** value);
328149dc963fSmrgvoid lt_update_exe_path (const char *name, const char *value);
328249dc963fSmrgvoid lt_update_lib_path (const char *name, const char *value);
328349dc963fSmrg
328449dc963fSmrgstatic const char *script_text_part1 =
328549dc963fSmrgEOF
32864b0ead49Smrg
328749dc963fSmrg	    func_emit_wrapper_part1 yes |
328849dc963fSmrg	        $SED -e 's/\([\\"]\)/\\\1/g' \
328949dc963fSmrg	             -e 's/^/  "/' -e 's/$/\\n"/'
329049dc963fSmrg	    echo ";"
329149dc963fSmrg	    cat <<EOF
32924b0ead49Smrg
329349dc963fSmrgstatic const char *script_text_part2 =
329449dc963fSmrgEOF
329549dc963fSmrg	    func_emit_wrapper_part2 yes |
329649dc963fSmrg	        $SED -e 's/\([\\"]\)/\\\1/g' \
329749dc963fSmrg	             -e 's/^/  "/' -e 's/$/\\n"/'
329849dc963fSmrg	    echo ";"
329949dc963fSmrg
330049dc963fSmrg	    cat <<EOF
330149dc963fSmrgconst char * MAGIC_EXE = "$magic_exe";
330249dc963fSmrgconst char * LIB_PATH_VARNAME = "$shlibpath_var";
330349dc963fSmrgEOF
33044b0ead49Smrg
330549dc963fSmrg	    if test "$shlibpath_overrides_runpath" = yes && test -n "$shlibpath_var" && test -n "$temp_rpath"; then
330649dc963fSmrg              func_to_host_pathlist "$temp_rpath"
330749dc963fSmrg	      cat <<EOF
330849dc963fSmrgconst char * LIB_PATH_VALUE   = "$func_to_host_pathlist_result";
330949dc963fSmrgEOF
331049dc963fSmrg	    else
331149dc963fSmrg	      cat <<"EOF"
331249dc963fSmrgconst char * LIB_PATH_VALUE   = "";
331349dc963fSmrgEOF
33144b0ead49Smrg	    fi
33154b0ead49Smrg
331649dc963fSmrg	    if test -n "$dllsearchpath"; then
331749dc963fSmrg              func_to_host_pathlist "$dllsearchpath:"
331849dc963fSmrg	      cat <<EOF
331949dc963fSmrgconst char * EXE_PATH_VARNAME = "PATH";
332049dc963fSmrgconst char * EXE_PATH_VALUE   = "$func_to_host_pathlist_result";
33214b0ead49SmrgEOF
33224b0ead49Smrg	    else
332349dc963fSmrg	      cat <<"EOF"
332449dc963fSmrgconst char * EXE_PATH_VARNAME = "";
332549dc963fSmrgconst char * EXE_PATH_VALUE   = "";
332649dc963fSmrgEOF
33274b0ead49Smrg	    fi
332849dc963fSmrg
332949dc963fSmrg	    if test "$fast_install" = yes; then
333049dc963fSmrg	      cat <<EOF
333149dc963fSmrgconst char * TARGET_PROGRAM_NAME = "lt-$outputname"; /* hopefully, no .exe */
333249dc963fSmrgEOF
33334b0ead49Smrg	    else
333449dc963fSmrg	      cat <<EOF
333549dc963fSmrgconst char * TARGET_PROGRAM_NAME = "$outputname"; /* hopefully, no .exe */
333649dc963fSmrgEOF
33374b0ead49Smrg	    fi
33384b0ead49Smrg
33394b0ead49Smrg
334049dc963fSmrg	    cat <<"EOF"
33414b0ead49Smrg
334249dc963fSmrg#define LTWRAPPER_OPTION_PREFIX         "--lt-"
334349dc963fSmrg#define LTWRAPPER_OPTION_PREFIX_LENGTH  5
33444b0ead49Smrg
334549dc963fSmrgstatic const size_t opt_prefix_len         = LTWRAPPER_OPTION_PREFIX_LENGTH;
334649dc963fSmrgstatic const char *ltwrapper_option_prefix = LTWRAPPER_OPTION_PREFIX;
33474b0ead49Smrg
334849dc963fSmrgstatic const char *dumpscript_opt       = LTWRAPPER_OPTION_PREFIX "dump-script";
33494b0ead49Smrg
335049dc963fSmrgstatic const size_t env_set_opt_len     = LTWRAPPER_OPTION_PREFIX_LENGTH + 7;
335149dc963fSmrgstatic const char *env_set_opt          = LTWRAPPER_OPTION_PREFIX "env-set";
335249dc963fSmrg  /* argument is putenv-style "foo=bar", value of foo is set to bar */
33534b0ead49Smrg
335449dc963fSmrgstatic const size_t env_prepend_opt_len = LTWRAPPER_OPTION_PREFIX_LENGTH + 11;
335549dc963fSmrgstatic const char *env_prepend_opt      = LTWRAPPER_OPTION_PREFIX "env-prepend";
335649dc963fSmrg  /* argument is putenv-style "foo=bar", new value of foo is bar${foo} */
33574b0ead49Smrg
335849dc963fSmrgstatic const size_t env_append_opt_len  = LTWRAPPER_OPTION_PREFIX_LENGTH + 10;
335949dc963fSmrgstatic const char *env_append_opt       = LTWRAPPER_OPTION_PREFIX "env-append";
336049dc963fSmrg  /* argument is putenv-style "foo=bar", new value of foo is ${foo}bar */
33614b0ead49Smrg
336249dc963fSmrgint
336349dc963fSmrgmain (int argc, char *argv[])
336449dc963fSmrg{
336549dc963fSmrg  char **newargz;
336649dc963fSmrg  int  newargc;
336749dc963fSmrg  char *tmp_pathspec;
336849dc963fSmrg  char *actual_cwrapper_path;
336949dc963fSmrg  char *actual_cwrapper_name;
337049dc963fSmrg  char *target_name;
337149dc963fSmrg  char *lt_argv_zero;
337249dc963fSmrg  intptr_t rval = 127;
33734b0ead49Smrg
337449dc963fSmrg  int i;
33754b0ead49Smrg
337649dc963fSmrg  program_name = (char *) xstrdup (base_name (argv[0]));
337749dc963fSmrg  LTWRAPPER_DEBUGPRINTF (("(main) argv[0]      : %s\n", argv[0]));
337849dc963fSmrg  LTWRAPPER_DEBUGPRINTF (("(main) program_name : %s\n", program_name));
33794b0ead49Smrg
338049dc963fSmrg  /* very simple arg parsing; don't want to rely on getopt */
338149dc963fSmrg  for (i = 1; i < argc; i++)
338249dc963fSmrg    {
338349dc963fSmrg      if (strcmp (argv[i], dumpscript_opt) == 0)
338449dc963fSmrg	{
338549dc963fSmrgEOF
338649dc963fSmrg	    case "$host" in
338749dc963fSmrg	      *mingw* | *cygwin* )
338849dc963fSmrg		# make stdout use "unix" line endings
338949dc963fSmrg		echo "          setmode(1,_O_BINARY);"
339049dc963fSmrg		;;
339149dc963fSmrg	      esac
33924b0ead49Smrg
339349dc963fSmrg	    cat <<"EOF"
339449dc963fSmrg	  printf ("%s", script_text_part1);
339549dc963fSmrg	  printf ("%s", script_text_part2);
339649dc963fSmrg	  return 0;
339749dc963fSmrg	}
339849dc963fSmrg    }
33994b0ead49Smrg
340049dc963fSmrg  newargz = XMALLOC (char *, argc + 1);
340149dc963fSmrg  tmp_pathspec = find_executable (argv[0]);
340249dc963fSmrg  if (tmp_pathspec == NULL)
340349dc963fSmrg    lt_fatal ("Couldn't find %s", argv[0]);
340449dc963fSmrg  LTWRAPPER_DEBUGPRINTF (("(main) found exe (before symlink chase) at : %s\n",
340549dc963fSmrg			  tmp_pathspec));
340649dc963fSmrg
340749dc963fSmrg  actual_cwrapper_path = chase_symlinks (tmp_pathspec);
340849dc963fSmrg  LTWRAPPER_DEBUGPRINTF (("(main) found exe (after symlink chase) at : %s\n",
340949dc963fSmrg			  actual_cwrapper_path));
341049dc963fSmrg  XFREE (tmp_pathspec);
341149dc963fSmrg
341249dc963fSmrg  actual_cwrapper_name = xstrdup( base_name (actual_cwrapper_path));
341349dc963fSmrg  strendzap (actual_cwrapper_path, actual_cwrapper_name);
341449dc963fSmrg
341549dc963fSmrg  /* wrapper name transforms */
341649dc963fSmrg  strendzap (actual_cwrapper_name, ".exe");
341749dc963fSmrg  tmp_pathspec = lt_extend_str (actual_cwrapper_name, ".exe", 1);
341849dc963fSmrg  XFREE (actual_cwrapper_name);
341949dc963fSmrg  actual_cwrapper_name = tmp_pathspec;
342049dc963fSmrg  tmp_pathspec = 0;
342149dc963fSmrg
342249dc963fSmrg  /* target_name transforms -- use actual target program name; might have lt- prefix */
342349dc963fSmrg  target_name = xstrdup (base_name (TARGET_PROGRAM_NAME));
342449dc963fSmrg  strendzap (target_name, ".exe");
342549dc963fSmrg  tmp_pathspec = lt_extend_str (target_name, ".exe", 1);
342649dc963fSmrg  XFREE (target_name);
342749dc963fSmrg  target_name = tmp_pathspec;
342849dc963fSmrg  tmp_pathspec = 0;
342949dc963fSmrg
343049dc963fSmrg  LTWRAPPER_DEBUGPRINTF (("(main) libtool target name: %s\n",
343149dc963fSmrg			  target_name));
343249dc963fSmrgEOF
34334b0ead49Smrg
343449dc963fSmrg	    cat <<EOF
343549dc963fSmrg  newargz[0] =
343649dc963fSmrg    XMALLOC (char, (strlen (actual_cwrapper_path) +
343749dc963fSmrg		    strlen ("$objdir") + 1 + strlen (actual_cwrapper_name) + 1));
343849dc963fSmrg  strcpy (newargz[0], actual_cwrapper_path);
343949dc963fSmrg  strcat (newargz[0], "$objdir");
344049dc963fSmrg  strcat (newargz[0], "/");
344149dc963fSmrgEOF
34424b0ead49Smrg
344349dc963fSmrg	    cat <<"EOF"
344449dc963fSmrg  /* stop here, and copy so we don't have to do this twice */
344549dc963fSmrg  tmp_pathspec = xstrdup (newargz[0]);
34464b0ead49Smrg
344749dc963fSmrg  /* do NOT want the lt- prefix here, so use actual_cwrapper_name */
344849dc963fSmrg  strcat (newargz[0], actual_cwrapper_name);
34494b0ead49Smrg
345049dc963fSmrg  /* DO want the lt- prefix here if it exists, so use target_name */
345149dc963fSmrg  lt_argv_zero = lt_extend_str (tmp_pathspec, target_name, 1);
345249dc963fSmrg  XFREE (tmp_pathspec);
345349dc963fSmrg  tmp_pathspec = NULL;
345449dc963fSmrgEOF
34554b0ead49Smrg
345649dc963fSmrg	    case $host_os in
345749dc963fSmrg	      mingw*)
345849dc963fSmrg	    cat <<"EOF"
345949dc963fSmrg  {
346049dc963fSmrg    char* p;
346149dc963fSmrg    while ((p = strchr (newargz[0], '\\')) != NULL)
346249dc963fSmrg      {
346349dc963fSmrg	*p = '/';
346449dc963fSmrg      }
346549dc963fSmrg    while ((p = strchr (lt_argv_zero, '\\')) != NULL)
346649dc963fSmrg      {
346749dc963fSmrg	*p = '/';
346849dc963fSmrg      }
346949dc963fSmrg  }
347049dc963fSmrgEOF
347149dc963fSmrg	    ;;
347249dc963fSmrg	    esac
34734b0ead49Smrg
347449dc963fSmrg	    cat <<"EOF"
347549dc963fSmrg  XFREE (target_name);
347649dc963fSmrg  XFREE (actual_cwrapper_path);
347749dc963fSmrg  XFREE (actual_cwrapper_name);
34784b0ead49Smrg
347949dc963fSmrg  lt_setenv ("BIN_SH", "xpg4"); /* for Tru64 */
348049dc963fSmrg  lt_setenv ("DUALCASE", "1");  /* for MSK sh */
348149dc963fSmrg  lt_update_lib_path (LIB_PATH_VARNAME, LIB_PATH_VALUE);
348249dc963fSmrg  lt_update_exe_path (EXE_PATH_VARNAME, EXE_PATH_VALUE);
34834b0ead49Smrg
348449dc963fSmrg  newargc=0;
348549dc963fSmrg  for (i = 1; i < argc; i++)
348649dc963fSmrg    {
348749dc963fSmrg      if (strncmp (argv[i], env_set_opt, env_set_opt_len) == 0)
348849dc963fSmrg        {
348949dc963fSmrg          if (argv[i][env_set_opt_len] == '=')
349049dc963fSmrg            {
349149dc963fSmrg              const char *p = argv[i] + env_set_opt_len + 1;
349249dc963fSmrg              lt_opt_process_env_set (p);
349349dc963fSmrg            }
349449dc963fSmrg          else if (argv[i][env_set_opt_len] == '\0' && i + 1 < argc)
349549dc963fSmrg            {
349649dc963fSmrg              lt_opt_process_env_set (argv[++i]); /* don't copy */
349749dc963fSmrg            }
349849dc963fSmrg          else
349949dc963fSmrg            lt_fatal ("%s missing required argument", env_set_opt);
350049dc963fSmrg          continue;
350149dc963fSmrg        }
350249dc963fSmrg      if (strncmp (argv[i], env_prepend_opt, env_prepend_opt_len) == 0)
350349dc963fSmrg        {
350449dc963fSmrg          if (argv[i][env_prepend_opt_len] == '=')
350549dc963fSmrg            {
350649dc963fSmrg              const char *p = argv[i] + env_prepend_opt_len + 1;
350749dc963fSmrg              lt_opt_process_env_prepend (p);
350849dc963fSmrg            }
350949dc963fSmrg          else if (argv[i][env_prepend_opt_len] == '\0' && i + 1 < argc)
351049dc963fSmrg            {
351149dc963fSmrg              lt_opt_process_env_prepend (argv[++i]); /* don't copy */
351249dc963fSmrg            }
351349dc963fSmrg          else
351449dc963fSmrg            lt_fatal ("%s missing required argument", env_prepend_opt);
351549dc963fSmrg          continue;
351649dc963fSmrg        }
351749dc963fSmrg      if (strncmp (argv[i], env_append_opt, env_append_opt_len) == 0)
351849dc963fSmrg        {
351949dc963fSmrg          if (argv[i][env_append_opt_len] == '=')
352049dc963fSmrg            {
352149dc963fSmrg              const char *p = argv[i] + env_append_opt_len + 1;
352249dc963fSmrg              lt_opt_process_env_append (p);
352349dc963fSmrg            }
352449dc963fSmrg          else if (argv[i][env_append_opt_len] == '\0' && i + 1 < argc)
352549dc963fSmrg            {
352649dc963fSmrg              lt_opt_process_env_append (argv[++i]); /* don't copy */
352749dc963fSmrg            }
352849dc963fSmrg          else
352949dc963fSmrg            lt_fatal ("%s missing required argument", env_append_opt);
353049dc963fSmrg          continue;
353149dc963fSmrg        }
353249dc963fSmrg      if (strncmp (argv[i], ltwrapper_option_prefix, opt_prefix_len) == 0)
353349dc963fSmrg        {
353449dc963fSmrg          /* however, if there is an option in the LTWRAPPER_OPTION_PREFIX
353549dc963fSmrg             namespace, but it is not one of the ones we know about and
353649dc963fSmrg             have already dealt with, above (inluding dump-script), then
353749dc963fSmrg             report an error. Otherwise, targets might begin to believe
353849dc963fSmrg             they are allowed to use options in the LTWRAPPER_OPTION_PREFIX
353949dc963fSmrg             namespace. The first time any user complains about this, we'll
354049dc963fSmrg             need to make LTWRAPPER_OPTION_PREFIX a configure-time option
354149dc963fSmrg             or a configure.ac-settable value.
354249dc963fSmrg           */
354349dc963fSmrg          lt_fatal ("Unrecognized option in %s namespace: '%s'",
354449dc963fSmrg                    ltwrapper_option_prefix, argv[i]);
354549dc963fSmrg        }
354649dc963fSmrg      /* otherwise ... */
354749dc963fSmrg      newargz[++newargc] = xstrdup (argv[i]);
354849dc963fSmrg    }
354949dc963fSmrg  newargz[++newargc] = NULL;
35504b0ead49Smrg
355149dc963fSmrg  LTWRAPPER_DEBUGPRINTF     (("(main) lt_argv_zero : %s\n", (lt_argv_zero ? lt_argv_zero : "<NULL>")));
355249dc963fSmrg  for (i = 0; i < newargc; i++)
355349dc963fSmrg    {
355449dc963fSmrg      LTWRAPPER_DEBUGPRINTF (("(main) newargz[%d]   : %s\n", i, (newargz[i] ? newargz[i] : "<NULL>")));
355549dc963fSmrg    }
35564b0ead49Smrg
355749dc963fSmrgEOF
35584b0ead49Smrg
355949dc963fSmrg	    case $host_os in
356049dc963fSmrg	      mingw*)
356149dc963fSmrg		cat <<"EOF"
356249dc963fSmrg  /* execv doesn't actually work on mingw as expected on unix */
356349dc963fSmrg  rval = _spawnv (_P_WAIT, lt_argv_zero, (const char * const *) newargz);
356449dc963fSmrg  if (rval == -1)
356549dc963fSmrg    {
356649dc963fSmrg      /* failed to start process */
356749dc963fSmrg      LTWRAPPER_DEBUGPRINTF (("(main) failed to launch target \"%s\": errno = %d\n", lt_argv_zero, errno));
356849dc963fSmrg      return 127;
356949dc963fSmrg    }
357049dc963fSmrg  return rval;
357149dc963fSmrgEOF
357249dc963fSmrg		;;
357349dc963fSmrg	      *)
357449dc963fSmrg		cat <<"EOF"
357549dc963fSmrg  execv (lt_argv_zero, newargz);
357649dc963fSmrg  return rval; /* =127, but avoids unused variable warning */
357749dc963fSmrgEOF
357849dc963fSmrg		;;
357949dc963fSmrg	    esac
35804b0ead49Smrg
358149dc963fSmrg	    cat <<"EOF"
358249dc963fSmrg}
35834b0ead49Smrg
358449dc963fSmrgvoid *
358549dc963fSmrgxmalloc (size_t num)
358649dc963fSmrg{
358749dc963fSmrg  void *p = (void *) malloc (num);
358849dc963fSmrg  if (!p)
358949dc963fSmrg    lt_fatal ("Memory exhausted");
35904b0ead49Smrg
359149dc963fSmrg  return p;
359249dc963fSmrg}
35934b0ead49Smrg
359449dc963fSmrgchar *
359549dc963fSmrgxstrdup (const char *string)
359649dc963fSmrg{
359749dc963fSmrg  return string ? strcpy ((char *) xmalloc (strlen (string) + 1),
359849dc963fSmrg			  string) : NULL;
359949dc963fSmrg}
36004b0ead49Smrg
360149dc963fSmrgconst char *
360249dc963fSmrgbase_name (const char *name)
360349dc963fSmrg{
360449dc963fSmrg  const char *base;
36054b0ead49Smrg
360649dc963fSmrg#if defined (HAVE_DOS_BASED_FILE_SYSTEM)
360749dc963fSmrg  /* Skip over the disk name in MSDOS pathnames. */
360849dc963fSmrg  if (isalpha ((unsigned char) name[0]) && name[1] == ':')
360949dc963fSmrg    name += 2;
361049dc963fSmrg#endif
36114b0ead49Smrg
361249dc963fSmrg  for (base = name; *name; name++)
361349dc963fSmrg    if (IS_DIR_SEPARATOR (*name))
361449dc963fSmrg      base = name + 1;
361549dc963fSmrg  return base;
361649dc963fSmrg}
36174b0ead49Smrg
361849dc963fSmrgint
361949dc963fSmrgcheck_executable (const char *path)
362049dc963fSmrg{
362149dc963fSmrg  struct stat st;
36224b0ead49Smrg
362349dc963fSmrg  LTWRAPPER_DEBUGPRINTF (("(check_executable)  : %s\n",
362449dc963fSmrg			  path ? (*path ? path : "EMPTY!") : "NULL!"));
362549dc963fSmrg  if ((!path) || (!*path))
362649dc963fSmrg    return 0;
36274b0ead49Smrg
362849dc963fSmrg  if ((stat (path, &st) >= 0)
362949dc963fSmrg      && (st.st_mode & (S_IXUSR | S_IXGRP | S_IXOTH)))
363049dc963fSmrg    return 1;
363149dc963fSmrg  else
363249dc963fSmrg    return 0;
363349dc963fSmrg}
36344b0ead49Smrg
363549dc963fSmrgint
363649dc963fSmrgmake_executable (const char *path)
363749dc963fSmrg{
363849dc963fSmrg  int rval = 0;
363949dc963fSmrg  struct stat st;
36404b0ead49Smrg
364149dc963fSmrg  LTWRAPPER_DEBUGPRINTF (("(make_executable)   : %s\n",
364249dc963fSmrg			  path ? (*path ? path : "EMPTY!") : "NULL!"));
364349dc963fSmrg  if ((!path) || (!*path))
364449dc963fSmrg    return 0;
36454b0ead49Smrg
364649dc963fSmrg  if (stat (path, &st) >= 0)
364749dc963fSmrg    {
364849dc963fSmrg      rval = chmod (path, st.st_mode | S_IXOTH | S_IXGRP | S_IXUSR);
364949dc963fSmrg    }
365049dc963fSmrg  return rval;
365149dc963fSmrg}
36524b0ead49Smrg
365349dc963fSmrg/* Searches for the full path of the wrapper.  Returns
365449dc963fSmrg   newly allocated full path name if found, NULL otherwise
365549dc963fSmrg   Does not chase symlinks, even on platforms that support them.
365649dc963fSmrg*/
365749dc963fSmrgchar *
365849dc963fSmrgfind_executable (const char *wrapper)
365949dc963fSmrg{
366049dc963fSmrg  int has_slash = 0;
366149dc963fSmrg  const char *p;
366249dc963fSmrg  const char *p_next;
366349dc963fSmrg  /* static buffer for getcwd */
366449dc963fSmrg  char tmp[LT_PATHMAX + 1];
366549dc963fSmrg  int tmp_len;
366649dc963fSmrg  char *concat_name;
36674b0ead49Smrg
366849dc963fSmrg  LTWRAPPER_DEBUGPRINTF (("(find_executable)   : %s\n",
366949dc963fSmrg			  wrapper ? (*wrapper ? wrapper : "EMPTY!") : "NULL!"));
36704b0ead49Smrg
367149dc963fSmrg  if ((wrapper == NULL) || (*wrapper == '\0'))
367249dc963fSmrg    return NULL;
36734b0ead49Smrg
367449dc963fSmrg  /* Absolute path? */
367549dc963fSmrg#if defined (HAVE_DOS_BASED_FILE_SYSTEM)
367649dc963fSmrg  if (isalpha ((unsigned char) wrapper[0]) && wrapper[1] == ':')
367749dc963fSmrg    {
367849dc963fSmrg      concat_name = xstrdup (wrapper);
367949dc963fSmrg      if (check_executable (concat_name))
368049dc963fSmrg	return concat_name;
368149dc963fSmrg      XFREE (concat_name);
368249dc963fSmrg    }
368349dc963fSmrg  else
368449dc963fSmrg    {
368549dc963fSmrg#endif
368649dc963fSmrg      if (IS_DIR_SEPARATOR (wrapper[0]))
368749dc963fSmrg	{
368849dc963fSmrg	  concat_name = xstrdup (wrapper);
368949dc963fSmrg	  if (check_executable (concat_name))
369049dc963fSmrg	    return concat_name;
369149dc963fSmrg	  XFREE (concat_name);
369249dc963fSmrg	}
369349dc963fSmrg#if defined (HAVE_DOS_BASED_FILE_SYSTEM)
369449dc963fSmrg    }
369549dc963fSmrg#endif
36964b0ead49Smrg
369749dc963fSmrg  for (p = wrapper; *p; p++)
369849dc963fSmrg    if (*p == '/')
369949dc963fSmrg      {
370049dc963fSmrg	has_slash = 1;
370149dc963fSmrg	break;
370249dc963fSmrg      }
370349dc963fSmrg  if (!has_slash)
370449dc963fSmrg    {
370549dc963fSmrg      /* no slashes; search PATH */
370649dc963fSmrg      const char *path = getenv ("PATH");
370749dc963fSmrg      if (path != NULL)
370849dc963fSmrg	{
370949dc963fSmrg	  for (p = path; *p; p = p_next)
371049dc963fSmrg	    {
371149dc963fSmrg	      const char *q;
371249dc963fSmrg	      size_t p_len;
371349dc963fSmrg	      for (q = p; *q; q++)
371449dc963fSmrg		if (IS_PATH_SEPARATOR (*q))
371549dc963fSmrg		  break;
371649dc963fSmrg	      p_len = q - p;
371749dc963fSmrg	      p_next = (*q == '\0' ? q : q + 1);
371849dc963fSmrg	      if (p_len == 0)
371949dc963fSmrg		{
372049dc963fSmrg		  /* empty path: current directory */
372149dc963fSmrg		  if (getcwd (tmp, LT_PATHMAX) == NULL)
372249dc963fSmrg		    lt_fatal ("getcwd failed");
372349dc963fSmrg		  tmp_len = strlen (tmp);
372449dc963fSmrg		  concat_name =
372549dc963fSmrg		    XMALLOC (char, tmp_len + 1 + strlen (wrapper) + 1);
372649dc963fSmrg		  memcpy (concat_name, tmp, tmp_len);
372749dc963fSmrg		  concat_name[tmp_len] = '/';
372849dc963fSmrg		  strcpy (concat_name + tmp_len + 1, wrapper);
372949dc963fSmrg		}
373049dc963fSmrg	      else
373149dc963fSmrg		{
373249dc963fSmrg		  concat_name =
373349dc963fSmrg		    XMALLOC (char, p_len + 1 + strlen (wrapper) + 1);
373449dc963fSmrg		  memcpy (concat_name, p, p_len);
373549dc963fSmrg		  concat_name[p_len] = '/';
373649dc963fSmrg		  strcpy (concat_name + p_len + 1, wrapper);
373749dc963fSmrg		}
373849dc963fSmrg	      if (check_executable (concat_name))
373949dc963fSmrg		return concat_name;
374049dc963fSmrg	      XFREE (concat_name);
374149dc963fSmrg	    }
374249dc963fSmrg	}
374349dc963fSmrg      /* not found in PATH; assume curdir */
374449dc963fSmrg    }
374549dc963fSmrg  /* Relative path | not found in path: prepend cwd */
374649dc963fSmrg  if (getcwd (tmp, LT_PATHMAX) == NULL)
374749dc963fSmrg    lt_fatal ("getcwd failed");
374849dc963fSmrg  tmp_len = strlen (tmp);
374949dc963fSmrg  concat_name = XMALLOC (char, tmp_len + 1 + strlen (wrapper) + 1);
375049dc963fSmrg  memcpy (concat_name, tmp, tmp_len);
375149dc963fSmrg  concat_name[tmp_len] = '/';
375249dc963fSmrg  strcpy (concat_name + tmp_len + 1, wrapper);
37534b0ead49Smrg
375449dc963fSmrg  if (check_executable (concat_name))
375549dc963fSmrg    return concat_name;
375649dc963fSmrg  XFREE (concat_name);
375749dc963fSmrg  return NULL;
375849dc963fSmrg}
37594b0ead49Smrg
376049dc963fSmrgchar *
376149dc963fSmrgchase_symlinks (const char *pathspec)
376249dc963fSmrg{
376349dc963fSmrg#ifndef S_ISLNK
376449dc963fSmrg  return xstrdup (pathspec);
376549dc963fSmrg#else
376649dc963fSmrg  char buf[LT_PATHMAX];
376749dc963fSmrg  struct stat s;
376849dc963fSmrg  char *tmp_pathspec = xstrdup (pathspec);
376949dc963fSmrg  char *p;
377049dc963fSmrg  int has_symlinks = 0;
377149dc963fSmrg  while (strlen (tmp_pathspec) && !has_symlinks)
377249dc963fSmrg    {
377349dc963fSmrg      LTWRAPPER_DEBUGPRINTF (("checking path component for symlinks: %s\n",
377449dc963fSmrg			      tmp_pathspec));
377549dc963fSmrg      if (lstat (tmp_pathspec, &s) == 0)
377649dc963fSmrg	{
377749dc963fSmrg	  if (S_ISLNK (s.st_mode) != 0)
377849dc963fSmrg	    {
377949dc963fSmrg	      has_symlinks = 1;
378049dc963fSmrg	      break;
378149dc963fSmrg	    }
37824b0ead49Smrg
378349dc963fSmrg	  /* search backwards for last DIR_SEPARATOR */
378449dc963fSmrg	  p = tmp_pathspec + strlen (tmp_pathspec) - 1;
378549dc963fSmrg	  while ((p > tmp_pathspec) && (!IS_DIR_SEPARATOR (*p)))
378649dc963fSmrg	    p--;
378749dc963fSmrg	  if ((p == tmp_pathspec) && (!IS_DIR_SEPARATOR (*p)))
378849dc963fSmrg	    {
378949dc963fSmrg	      /* no more DIR_SEPARATORS left */
379049dc963fSmrg	      break;
379149dc963fSmrg	    }
379249dc963fSmrg	  *p = '\0';
379349dc963fSmrg	}
379449dc963fSmrg      else
379549dc963fSmrg	{
379649dc963fSmrg	  char *errstr = strerror (errno);
379749dc963fSmrg	  lt_fatal ("Error accessing file %s (%s)", tmp_pathspec, errstr);
379849dc963fSmrg	}
379949dc963fSmrg    }
380049dc963fSmrg  XFREE (tmp_pathspec);
38014b0ead49Smrg
380249dc963fSmrg  if (!has_symlinks)
380349dc963fSmrg    {
380449dc963fSmrg      return xstrdup (pathspec);
380549dc963fSmrg    }
38064b0ead49Smrg
380749dc963fSmrg  tmp_pathspec = realpath (pathspec, buf);
380849dc963fSmrg  if (tmp_pathspec == 0)
380949dc963fSmrg    {
381049dc963fSmrg      lt_fatal ("Could not follow symlinks for %s", pathspec);
381149dc963fSmrg    }
381249dc963fSmrg  return xstrdup (tmp_pathspec);
381349dc963fSmrg#endif
381449dc963fSmrg}
38154b0ead49Smrg
381649dc963fSmrgchar *
381749dc963fSmrgstrendzap (char *str, const char *pat)
381849dc963fSmrg{
381949dc963fSmrg  size_t len, patlen;
38204b0ead49Smrg
382149dc963fSmrg  assert (str != NULL);
382249dc963fSmrg  assert (pat != NULL);
38234b0ead49Smrg
382449dc963fSmrg  len = strlen (str);
382549dc963fSmrg  patlen = strlen (pat);
38264b0ead49Smrg
382749dc963fSmrg  if (patlen <= len)
382849dc963fSmrg    {
382949dc963fSmrg      str += len - patlen;
383049dc963fSmrg      if (strcmp (str, pat) == 0)
383149dc963fSmrg	*str = '\0';
383249dc963fSmrg    }
383349dc963fSmrg  return str;
383449dc963fSmrg}
38354b0ead49Smrg
383649dc963fSmrgstatic void
383749dc963fSmrglt_error_core (int exit_status, const char *mode,
383849dc963fSmrg	       const char *message, va_list ap)
383949dc963fSmrg{
384049dc963fSmrg  fprintf (stderr, "%s: %s: ", program_name, mode);
384149dc963fSmrg  vfprintf (stderr, message, ap);
384249dc963fSmrg  fprintf (stderr, ".\n");
38434b0ead49Smrg
384449dc963fSmrg  if (exit_status >= 0)
384549dc963fSmrg    exit (exit_status);
384649dc963fSmrg}
38474b0ead49Smrg
384849dc963fSmrgvoid
384949dc963fSmrglt_fatal (const char *message, ...)
385049dc963fSmrg{
385149dc963fSmrg  va_list ap;
385249dc963fSmrg  va_start (ap, message);
385349dc963fSmrg  lt_error_core (EXIT_FAILURE, "FATAL", message, ap);
385449dc963fSmrg  va_end (ap);
385549dc963fSmrg}
38564b0ead49Smrg
385749dc963fSmrgvoid
385849dc963fSmrglt_setenv (const char *name, const char *value)
385949dc963fSmrg{
386049dc963fSmrg  LTWRAPPER_DEBUGPRINTF (("(lt_setenv) setting '%s' to '%s'\n",
386149dc963fSmrg                          (name ? name : "<NULL>"),
386249dc963fSmrg                          (value ? value : "<NULL>")));
386349dc963fSmrg  {
386449dc963fSmrg#ifdef HAVE_SETENV
386549dc963fSmrg    /* always make a copy, for consistency with !HAVE_SETENV */
386649dc963fSmrg    char *str = xstrdup (value);
386749dc963fSmrg    setenv (name, str, 1);
386849dc963fSmrg#else
386949dc963fSmrg    int len = strlen (name) + 1 + strlen (value) + 1;
387049dc963fSmrg    char *str = XMALLOC (char, len);
387149dc963fSmrg    sprintf (str, "%s=%s", name, value);
387249dc963fSmrg    if (putenv (str) != EXIT_SUCCESS)
387349dc963fSmrg      {
387449dc963fSmrg        XFREE (str);
387549dc963fSmrg      }
387649dc963fSmrg#endif
387749dc963fSmrg  }
387849dc963fSmrg}
38794b0ead49Smrg
388049dc963fSmrgchar *
388149dc963fSmrglt_extend_str (const char *orig_value, const char *add, int to_end)
388249dc963fSmrg{
388349dc963fSmrg  char *new_value;
388449dc963fSmrg  if (orig_value && *orig_value)
388549dc963fSmrg    {
388649dc963fSmrg      int orig_value_len = strlen (orig_value);
388749dc963fSmrg      int add_len = strlen (add);
388849dc963fSmrg      new_value = XMALLOC (char, add_len + orig_value_len + 1);
388949dc963fSmrg      if (to_end)
389049dc963fSmrg        {
389149dc963fSmrg          strcpy (new_value, orig_value);
389249dc963fSmrg          strcpy (new_value + orig_value_len, add);
389349dc963fSmrg        }
389449dc963fSmrg      else
389549dc963fSmrg        {
389649dc963fSmrg          strcpy (new_value, add);
389749dc963fSmrg          strcpy (new_value + add_len, orig_value);
389849dc963fSmrg        }
389949dc963fSmrg    }
390049dc963fSmrg  else
390149dc963fSmrg    {
390249dc963fSmrg      new_value = xstrdup (add);
390349dc963fSmrg    }
390449dc963fSmrg  return new_value;
390549dc963fSmrg}
39064b0ead49Smrg
390749dc963fSmrgint
390849dc963fSmrglt_split_name_value (const char *arg, char** name, char** value)
390949dc963fSmrg{
391049dc963fSmrg  const char *p;
391149dc963fSmrg  int len;
391249dc963fSmrg  if (!arg || !*arg)
391349dc963fSmrg    return 1;
39144b0ead49Smrg
391549dc963fSmrg  p = strchr (arg, (int)'=');
39164b0ead49Smrg
391749dc963fSmrg  if (!p)
391849dc963fSmrg    return 1;
39194b0ead49Smrg
392049dc963fSmrg  *value = xstrdup (++p);
39214b0ead49Smrg
392249dc963fSmrg  len = strlen (arg) - strlen (*value);
392349dc963fSmrg  *name = XMALLOC (char, len);
392449dc963fSmrg  strncpy (*name, arg, len-1);
392549dc963fSmrg  (*name)[len - 1] = '\0';
39264b0ead49Smrg
392749dc963fSmrg  return 0;
392849dc963fSmrg}
39294b0ead49Smrg
393049dc963fSmrgvoid
393149dc963fSmrglt_opt_process_env_set (const char *arg)
393249dc963fSmrg{
393349dc963fSmrg  char *name = NULL;
393449dc963fSmrg  char *value = NULL;
39354b0ead49Smrg
393649dc963fSmrg  if (lt_split_name_value (arg, &name, &value) != 0)
393749dc963fSmrg    {
393849dc963fSmrg      XFREE (name);
393949dc963fSmrg      XFREE (value);
394049dc963fSmrg      lt_fatal ("bad argument for %s: '%s'", env_set_opt, arg);
394149dc963fSmrg    }
39424b0ead49Smrg
394349dc963fSmrg  lt_setenv (name, value);
394449dc963fSmrg  XFREE (name);
394549dc963fSmrg  XFREE (value);
394649dc963fSmrg}
39474b0ead49Smrg
394849dc963fSmrgvoid
394949dc963fSmrglt_opt_process_env_prepend (const char *arg)
395049dc963fSmrg{
395149dc963fSmrg  char *name = NULL;
395249dc963fSmrg  char *value = NULL;
395349dc963fSmrg  char *new_value = NULL;
39544b0ead49Smrg
395549dc963fSmrg  if (lt_split_name_value (arg, &name, &value) != 0)
395649dc963fSmrg    {
395749dc963fSmrg      XFREE (name);
395849dc963fSmrg      XFREE (value);
395949dc963fSmrg      lt_fatal ("bad argument for %s: '%s'", env_prepend_opt, arg);
396049dc963fSmrg    }
39614b0ead49Smrg
396249dc963fSmrg  new_value = lt_extend_str (getenv (name), value, 0);
396349dc963fSmrg  lt_setenv (name, new_value);
396449dc963fSmrg  XFREE (new_value);
396549dc963fSmrg  XFREE (name);
396649dc963fSmrg  XFREE (value);
396749dc963fSmrg}
39684b0ead49Smrg
396949dc963fSmrgvoid
397049dc963fSmrglt_opt_process_env_append (const char *arg)
397149dc963fSmrg{
397249dc963fSmrg  char *name = NULL;
397349dc963fSmrg  char *value = NULL;
397449dc963fSmrg  char *new_value = NULL;
39754b0ead49Smrg
397649dc963fSmrg  if (lt_split_name_value (arg, &name, &value) != 0)
397749dc963fSmrg    {
397849dc963fSmrg      XFREE (name);
397949dc963fSmrg      XFREE (value);
398049dc963fSmrg      lt_fatal ("bad argument for %s: '%s'", env_append_opt, arg);
398149dc963fSmrg    }
39824b0ead49Smrg
398349dc963fSmrg  new_value = lt_extend_str (getenv (name), value, 1);
398449dc963fSmrg  lt_setenv (name, new_value);
398549dc963fSmrg  XFREE (new_value);
398649dc963fSmrg  XFREE (name);
398749dc963fSmrg  XFREE (value);
398849dc963fSmrg}
39894b0ead49Smrg
399049dc963fSmrgvoid
399149dc963fSmrglt_update_exe_path (const char *name, const char *value)
399249dc963fSmrg{
399349dc963fSmrg  LTWRAPPER_DEBUGPRINTF (("(lt_update_exe_path) modifying '%s' by prepending '%s'\n",
399449dc963fSmrg                          (name ? name : "<NULL>"),
399549dc963fSmrg                          (value ? value : "<NULL>")));
39964b0ead49Smrg
399749dc963fSmrg  if (name && *name && value && *value)
399849dc963fSmrg    {
399949dc963fSmrg      char *new_value = lt_extend_str (getenv (name), value, 0);
400049dc963fSmrg      /* some systems can't cope with a ':'-terminated path #' */
400149dc963fSmrg      int len = strlen (new_value);
400249dc963fSmrg      while (((len = strlen (new_value)) > 0) && IS_PATH_SEPARATOR (new_value[len-1]))
400349dc963fSmrg        {
400449dc963fSmrg          new_value[len-1] = '\0';
400549dc963fSmrg        }
400649dc963fSmrg      lt_setenv (name, new_value);
400749dc963fSmrg      XFREE (new_value);
400849dc963fSmrg    }
400949dc963fSmrg}
40104b0ead49Smrg
401149dc963fSmrgvoid
401249dc963fSmrglt_update_lib_path (const char *name, const char *value)
401349dc963fSmrg{
401449dc963fSmrg  LTWRAPPER_DEBUGPRINTF (("(lt_update_lib_path) modifying '%s' by prepending '%s'\n",
401549dc963fSmrg                          (name ? name : "<NULL>"),
401649dc963fSmrg                          (value ? value : "<NULL>")));
40174b0ead49Smrg
401849dc963fSmrg  if (name && *name && value && *value)
401949dc963fSmrg    {
402049dc963fSmrg      char *new_value = lt_extend_str (getenv (name), value, 0);
402149dc963fSmrg      lt_setenv (name, new_value);
402249dc963fSmrg      XFREE (new_value);
402349dc963fSmrg    }
402449dc963fSmrg}
40254b0ead49Smrg
40264b0ead49Smrg
402749dc963fSmrgEOF
402849dc963fSmrg}
402949dc963fSmrg# end: func_emit_cwrapperexe_src
40304b0ead49Smrg
403149dc963fSmrg# func_mode_link arg...
403249dc963fSmrgfunc_mode_link ()
403349dc963fSmrg{
403449dc963fSmrg    $opt_debug
403549dc963fSmrg    case $host in
403649dc963fSmrg    *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-cegcc*)
403749dc963fSmrg      # It is impossible to link a dll without this setting, and
403849dc963fSmrg      # we shouldn't force the makefile maintainer to figure out
403949dc963fSmrg      # which system we are compiling for in order to pass an extra
404049dc963fSmrg      # flag for every libtool invocation.
404149dc963fSmrg      # allow_undefined=no
40424b0ead49Smrg
404349dc963fSmrg      # FIXME: Unfortunately, there are problems with the above when trying
404449dc963fSmrg      # to make a dll which has undefined symbols, in which case not
404549dc963fSmrg      # even a static library is built.  For now, we need to specify
404649dc963fSmrg      # -no-undefined on the libtool link line when we can be certain
404749dc963fSmrg      # that all symbols are satisfied, otherwise we get a static library.
404849dc963fSmrg      allow_undefined=yes
404949dc963fSmrg      ;;
405049dc963fSmrg    *)
405149dc963fSmrg      allow_undefined=yes
405249dc963fSmrg      ;;
405349dc963fSmrg    esac
405449dc963fSmrg    libtool_args=$nonopt
405549dc963fSmrg    base_compile="$nonopt $@"
405649dc963fSmrg    compile_command=$nonopt
405749dc963fSmrg    finalize_command=$nonopt
40584b0ead49Smrg
405949dc963fSmrg    compile_rpath=
406049dc963fSmrg    finalize_rpath=
406149dc963fSmrg    compile_shlibpath=
406249dc963fSmrg    finalize_shlibpath=
406349dc963fSmrg    convenience=
406449dc963fSmrg    old_convenience=
406549dc963fSmrg    deplibs=
406649dc963fSmrg    old_deplibs=
406749dc963fSmrg    compiler_flags=
406849dc963fSmrg    linker_flags=
406949dc963fSmrg    dllsearchpath=
407049dc963fSmrg    lib_search_path=`pwd`
407149dc963fSmrg    inst_prefix_dir=
407249dc963fSmrg    new_inherited_linker_flags=
40734b0ead49Smrg
407449dc963fSmrg    avoid_version=no
407549dc963fSmrg    dlfiles=
407649dc963fSmrg    dlprefiles=
407749dc963fSmrg    dlself=no
407849dc963fSmrg    export_dynamic=no
407949dc963fSmrg    export_symbols=
408049dc963fSmrg    export_symbols_regex=
408149dc963fSmrg    generated=
408249dc963fSmrg    libobjs=
408349dc963fSmrg    ltlibs=
408449dc963fSmrg    module=no
408549dc963fSmrg    no_install=no
408649dc963fSmrg    objs=
408749dc963fSmrg    non_pic_objects=
408849dc963fSmrg    precious_files_regex=
408949dc963fSmrg    prefer_static_libs=no
409049dc963fSmrg    preload=no
409149dc963fSmrg    prev=
409249dc963fSmrg    prevarg=
409349dc963fSmrg    release=
409449dc963fSmrg    rpath=
409549dc963fSmrg    xrpath=
409649dc963fSmrg    perm_rpath=
409749dc963fSmrg    temp_rpath=
409849dc963fSmrg    thread_safe=no
409949dc963fSmrg    vinfo=
410049dc963fSmrg    vinfo_number=no
410149dc963fSmrg    weak_libs=
410249dc963fSmrg    single_module="${wl}-single_module"
410349dc963fSmrg    func_infer_tag $base_compile
410449dc963fSmrg
410549dc963fSmrg    # We need to know -static, to get the right output filenames.
410649dc963fSmrg    for arg
410749dc963fSmrg    do
410849dc963fSmrg      case $arg in
410949dc963fSmrg      -shared)
411049dc963fSmrg	test "$build_libtool_libs" != yes && \
411149dc963fSmrg	  func_fatal_configuration "can not build a shared library"
411249dc963fSmrg	build_old_libs=no
411349dc963fSmrg	break
411449dc963fSmrg	;;
411549dc963fSmrg      -all-static | -static | -static-libtool-libs)
411649dc963fSmrg	case $arg in
411749dc963fSmrg	-all-static)
411849dc963fSmrg	  if test "$build_libtool_libs" = yes && test -z "$link_static_flag"; then
411949dc963fSmrg	    func_warning "complete static linking is impossible in this configuration"
412049dc963fSmrg	  fi
412149dc963fSmrg	  if test -n "$link_static_flag"; then
412249dc963fSmrg	    dlopen_self=$dlopen_self_static
412349dc963fSmrg	  fi
412449dc963fSmrg	  prefer_static_libs=yes
412549dc963fSmrg	  ;;
412649dc963fSmrg	-static)
412749dc963fSmrg	  if test -z "$pic_flag" && test -n "$link_static_flag"; then
412849dc963fSmrg	    dlopen_self=$dlopen_self_static
412949dc963fSmrg	  fi
413049dc963fSmrg	  prefer_static_libs=built
413149dc963fSmrg	  ;;
413249dc963fSmrg	-static-libtool-libs)
413349dc963fSmrg	  if test -z "$pic_flag" && test -n "$link_static_flag"; then
413449dc963fSmrg	    dlopen_self=$dlopen_self_static
41354b0ead49Smrg	  fi
413649dc963fSmrg	  prefer_static_libs=yes
413749dc963fSmrg	  ;;
413849dc963fSmrg	esac
413949dc963fSmrg	build_libtool_libs=no
414049dc963fSmrg	build_old_libs=yes
414149dc963fSmrg	break
414249dc963fSmrg	;;
414349dc963fSmrg      esac
414449dc963fSmrg    done
41454b0ead49Smrg
414649dc963fSmrg    # See if our shared archives depend on static archives.
414749dc963fSmrg    test -n "$old_archive_from_new_cmds" && build_old_libs=yes
41484b0ead49Smrg
414949dc963fSmrg    # Go through the arguments, transforming them on the way.
415049dc963fSmrg    while test "$#" -gt 0; do
415149dc963fSmrg      arg="$1"
415249dc963fSmrg      shift
415349dc963fSmrg      func_quote_for_eval "$arg"
415449dc963fSmrg      qarg=$func_quote_for_eval_unquoted_result
415549dc963fSmrg      func_append libtool_args " $func_quote_for_eval_result"
41564b0ead49Smrg
415749dc963fSmrg      # If the previous option needs an argument, assign it.
415849dc963fSmrg      if test -n "$prev"; then
415949dc963fSmrg	case $prev in
416049dc963fSmrg	output)
416149dc963fSmrg	  func_append compile_command " @OUTPUT@"
416249dc963fSmrg	  func_append finalize_command " @OUTPUT@"
416349dc963fSmrg	  ;;
416449dc963fSmrg	esac
41654b0ead49Smrg
416649dc963fSmrg	case $prev in
416749dc963fSmrg	dlfiles|dlprefiles)
416849dc963fSmrg	  if test "$preload" = no; then
416949dc963fSmrg	    # Add the symbol object into the linking commands.
417049dc963fSmrg	    func_append compile_command " @SYMFILE@"
417149dc963fSmrg	    func_append finalize_command " @SYMFILE@"
417249dc963fSmrg	    preload=yes
417349dc963fSmrg	  fi
417449dc963fSmrg	  case $arg in
417549dc963fSmrg	  *.la | *.lo) ;;  # We handle these cases below.
417649dc963fSmrg	  force)
417749dc963fSmrg	    if test "$dlself" = no; then
417849dc963fSmrg	      dlself=needless
417949dc963fSmrg	      export_dynamic=yes
418049dc963fSmrg	    fi
418149dc963fSmrg	    prev=
418249dc963fSmrg	    continue
418349dc963fSmrg	    ;;
418449dc963fSmrg	  self)
418549dc963fSmrg	    if test "$prev" = dlprefiles; then
418649dc963fSmrg	      dlself=yes
418749dc963fSmrg	    elif test "$prev" = dlfiles && test "$dlopen_self" != yes; then
418849dc963fSmrg	      dlself=yes
41894b0ead49Smrg	    else
419049dc963fSmrg	      dlself=needless
419149dc963fSmrg	      export_dynamic=yes
41924b0ead49Smrg	    fi
419349dc963fSmrg	    prev=
419449dc963fSmrg	    continue
419549dc963fSmrg	    ;;
419649dc963fSmrg	  *)
419749dc963fSmrg	    if test "$prev" = dlfiles; then
419849dc963fSmrg	      dlfiles="$dlfiles $arg"
41994b0ead49Smrg	    else
420049dc963fSmrg	      dlprefiles="$dlprefiles $arg"
42014b0ead49Smrg	    fi
420249dc963fSmrg	    prev=
420349dc963fSmrg	    continue
420449dc963fSmrg	    ;;
420549dc963fSmrg	  esac
420649dc963fSmrg	  ;;
420749dc963fSmrg	expsyms)
420849dc963fSmrg	  export_symbols="$arg"
420949dc963fSmrg	  test -f "$arg" \
421049dc963fSmrg	    || func_fatal_error "symbol file \`$arg' does not exist"
421149dc963fSmrg	  prev=
421249dc963fSmrg	  continue
421349dc963fSmrg	  ;;
421449dc963fSmrg	expsyms_regex)
421549dc963fSmrg	  export_symbols_regex="$arg"
421649dc963fSmrg	  prev=
421749dc963fSmrg	  continue
421849dc963fSmrg	  ;;
421949dc963fSmrg	framework)
42204b0ead49Smrg	  case $host in
422149dc963fSmrg	    *-*-darwin*)
422249dc963fSmrg	      case "$deplibs " in
422349dc963fSmrg		*" $qarg.ltframework "*) ;;
422449dc963fSmrg		*) deplibs="$deplibs $qarg.ltframework" # this is fixed later
422549dc963fSmrg		   ;;
422649dc963fSmrg	      esac
422749dc963fSmrg	      ;;
42284b0ead49Smrg	  esac
422949dc963fSmrg	  prev=
423049dc963fSmrg	  continue
42314b0ead49Smrg	  ;;
423249dc963fSmrg	inst_prefix)
423349dc963fSmrg	  inst_prefix_dir="$arg"
423449dc963fSmrg	  prev=
423549dc963fSmrg	  continue
42364b0ead49Smrg	  ;;
423749dc963fSmrg	objectlist)
423849dc963fSmrg	  if test -f "$arg"; then
423949dc963fSmrg	    save_arg=$arg
424049dc963fSmrg	    moreargs=
424149dc963fSmrg	    for fil in `cat "$save_arg"`
424249dc963fSmrg	    do
424349dc963fSmrg#	      moreargs="$moreargs $fil"
424449dc963fSmrg	      arg=$fil
424549dc963fSmrg	      # A libtool-controlled object.
42464b0ead49Smrg
424749dc963fSmrg	      # Check to see that this really is a libtool object.
424849dc963fSmrg	      if func_lalib_unsafe_p "$arg"; then
424949dc963fSmrg		pic_object=
425049dc963fSmrg		non_pic_object=
42514b0ead49Smrg
425249dc963fSmrg		# Read the .lo file
425349dc963fSmrg		func_source "$arg"
42544b0ead49Smrg
425549dc963fSmrg		if test -z "$pic_object" ||
425649dc963fSmrg		   test -z "$non_pic_object" ||
425749dc963fSmrg		   test "$pic_object" = none &&
425849dc963fSmrg		   test "$non_pic_object" = none; then
425949dc963fSmrg		  func_fatal_error "cannot find name of object for \`$arg'"
426049dc963fSmrg		fi
42614b0ead49Smrg
426249dc963fSmrg		# Extract subdirectory from the argument.
426349dc963fSmrg		func_dirname "$arg" "/" ""
426449dc963fSmrg		xdir="$func_dirname_result"
42654b0ead49Smrg
426649dc963fSmrg		if test "$pic_object" != none; then
426749dc963fSmrg		  # Prepend the subdirectory the object is found in.
426849dc963fSmrg		  pic_object="$xdir$pic_object"
42694b0ead49Smrg
427049dc963fSmrg		  if test "$prev" = dlfiles; then
427149dc963fSmrg		    if test "$build_libtool_libs" = yes && test "$dlopen_support" = yes; then
427249dc963fSmrg		      dlfiles="$dlfiles $pic_object"
427349dc963fSmrg		      prev=
427449dc963fSmrg		      continue
427549dc963fSmrg		    else
427649dc963fSmrg		      # If libtool objects are unsupported, then we need to preload.
427749dc963fSmrg		      prev=dlprefiles
427849dc963fSmrg		    fi
427949dc963fSmrg		  fi
42804b0ead49Smrg
428149dc963fSmrg		  # CHECK ME:  I think I busted this.  -Ossama
428249dc963fSmrg		  if test "$prev" = dlprefiles; then
428349dc963fSmrg		    # Preload the old-style object.
428449dc963fSmrg		    dlprefiles="$dlprefiles $pic_object"
428549dc963fSmrg		    prev=
428649dc963fSmrg		  fi
42874b0ead49Smrg
428849dc963fSmrg		  # A PIC object.
428949dc963fSmrg		  func_append libobjs " $pic_object"
429049dc963fSmrg		  arg="$pic_object"
429149dc963fSmrg		fi
42924b0ead49Smrg
429349dc963fSmrg		# Non-PIC object.
429449dc963fSmrg		if test "$non_pic_object" != none; then
429549dc963fSmrg		  # Prepend the subdirectory the object is found in.
429649dc963fSmrg		  non_pic_object="$xdir$non_pic_object"
42974b0ead49Smrg
429849dc963fSmrg		  # A standard non-PIC object
429949dc963fSmrg		  func_append non_pic_objects " $non_pic_object"
430049dc963fSmrg		  if test -z "$pic_object" || test "$pic_object" = none ; then
430149dc963fSmrg		    arg="$non_pic_object"
430249dc963fSmrg		  fi
430349dc963fSmrg		else
430449dc963fSmrg		  # If the PIC object exists, use it instead.
430549dc963fSmrg		  # $xdir was prepended to $pic_object above.
430649dc963fSmrg		  non_pic_object="$pic_object"
430749dc963fSmrg		  func_append non_pic_objects " $non_pic_object"
430849dc963fSmrg		fi
430949dc963fSmrg	      else
431049dc963fSmrg		# Only an error if not doing a dry-run.
431149dc963fSmrg		if $opt_dry_run; then
431249dc963fSmrg		  # Extract subdirectory from the argument.
431349dc963fSmrg		  func_dirname "$arg" "/" ""
431449dc963fSmrg		  xdir="$func_dirname_result"
431549dc963fSmrg
431649dc963fSmrg		  func_lo2o "$arg"
431749dc963fSmrg		  pic_object=$xdir$objdir/$func_lo2o_result
431849dc963fSmrg		  non_pic_object=$xdir$func_lo2o_result
431949dc963fSmrg		  func_append libobjs " $pic_object"
432049dc963fSmrg		  func_append non_pic_objects " $non_pic_object"
432149dc963fSmrg	        else
432249dc963fSmrg		  func_fatal_error "\`$arg' is not a valid libtool object"
432349dc963fSmrg		fi
432449dc963fSmrg	      fi
432549dc963fSmrg	    done
43264b0ead49Smrg	  else
432749dc963fSmrg	    func_fatal_error "link input file \`$arg' does not exist"
43284b0ead49Smrg	  fi
432949dc963fSmrg	  arg=$save_arg
433049dc963fSmrg	  prev=
433149dc963fSmrg	  continue
433249dc963fSmrg	  ;;
433349dc963fSmrg	precious_regex)
433449dc963fSmrg	  precious_files_regex="$arg"
433549dc963fSmrg	  prev=
433649dc963fSmrg	  continue
433749dc963fSmrg	  ;;
433849dc963fSmrg	release)
433949dc963fSmrg	  release="-$arg"
434049dc963fSmrg	  prev=
434149dc963fSmrg	  continue
434249dc963fSmrg	  ;;
434349dc963fSmrg	rpath | xrpath)
434449dc963fSmrg	  # We need an absolute path.
434549dc963fSmrg	  case $arg in
434649dc963fSmrg	  [\\/]* | [A-Za-z]:[\\/]*) ;;
434749dc963fSmrg	  *)
434849dc963fSmrg	    func_fatal_error "only absolute run-paths are allowed"
434949dc963fSmrg	    ;;
435049dc963fSmrg	  esac
435149dc963fSmrg	  if test "$prev" = rpath; then
435249dc963fSmrg	    case "$rpath " in
435349dc963fSmrg	    *" $arg "*) ;;
435449dc963fSmrg	    *) rpath="$rpath $arg" ;;
435549dc963fSmrg	    esac
43564b0ead49Smrg	  else
435749dc963fSmrg	    case "$xrpath " in
435849dc963fSmrg	    *" $arg "*) ;;
435949dc963fSmrg	    *) xrpath="$xrpath $arg" ;;
436049dc963fSmrg	    esac
43614b0ead49Smrg	  fi
436249dc963fSmrg	  prev=
436349dc963fSmrg	  continue
436449dc963fSmrg	  ;;
436549dc963fSmrg	shrext)
436649dc963fSmrg	  shrext_cmds="$arg"
436749dc963fSmrg	  prev=
436849dc963fSmrg	  continue
436949dc963fSmrg	  ;;
437049dc963fSmrg	weak)
437149dc963fSmrg	  weak_libs="$weak_libs $arg"
437249dc963fSmrg	  prev=
437349dc963fSmrg	  continue
437449dc963fSmrg	  ;;
437549dc963fSmrg	xcclinker)
437649dc963fSmrg	  linker_flags="$linker_flags $qarg"
437749dc963fSmrg	  compiler_flags="$compiler_flags $qarg"
437849dc963fSmrg	  prev=
437949dc963fSmrg	  func_append compile_command " $qarg"
438049dc963fSmrg	  func_append finalize_command " $qarg"
438149dc963fSmrg	  continue
438249dc963fSmrg	  ;;
438349dc963fSmrg	xcompiler)
438449dc963fSmrg	  compiler_flags="$compiler_flags $qarg"
438549dc963fSmrg	  prev=
438649dc963fSmrg	  func_append compile_command " $qarg"
438749dc963fSmrg	  func_append finalize_command " $qarg"
438849dc963fSmrg	  continue
438949dc963fSmrg	  ;;
439049dc963fSmrg	xlinker)
439149dc963fSmrg	  linker_flags="$linker_flags $qarg"
439249dc963fSmrg	  compiler_flags="$compiler_flags $wl$qarg"
439349dc963fSmrg	  prev=
439449dc963fSmrg	  func_append compile_command " $wl$qarg"
439549dc963fSmrg	  func_append finalize_command " $wl$qarg"
439649dc963fSmrg	  continue
439749dc963fSmrg	  ;;
439849dc963fSmrg	*)
439949dc963fSmrg	  eval "$prev=\"\$arg\""
440049dc963fSmrg	  prev=
440149dc963fSmrg	  continue
440249dc963fSmrg	  ;;
44034b0ead49Smrg	esac
440449dc963fSmrg      fi # test -n "$prev"
44054b0ead49Smrg
440649dc963fSmrg      prevarg="$arg"
44074b0ead49Smrg
440849dc963fSmrg      case $arg in
440949dc963fSmrg      -all-static)
441049dc963fSmrg	if test -n "$link_static_flag"; then
441149dc963fSmrg	  # See comment for -static flag below, for more details.
441249dc963fSmrg	  func_append compile_command " $link_static_flag"
441349dc963fSmrg	  func_append finalize_command " $link_static_flag"
441449dc963fSmrg	fi
441549dc963fSmrg	continue
441649dc963fSmrg	;;
44174b0ead49Smrg
441849dc963fSmrg      -allow-undefined)
441949dc963fSmrg	# FIXME: remove this flag sometime in the future.
442049dc963fSmrg	func_fatal_error "\`-allow-undefined' must not be used because it is the default"
442149dc963fSmrg	;;
44224b0ead49Smrg
442349dc963fSmrg      -avoid-version)
442449dc963fSmrg	avoid_version=yes
442549dc963fSmrg	continue
442649dc963fSmrg	;;
44274b0ead49Smrg
442849dc963fSmrg      -dlopen)
442949dc963fSmrg	prev=dlfiles
443049dc963fSmrg	continue
443149dc963fSmrg	;;
44324b0ead49Smrg
443349dc963fSmrg      -dlpreopen)
443449dc963fSmrg	prev=dlprefiles
443549dc963fSmrg	continue
443649dc963fSmrg	;;
44374b0ead49Smrg
443849dc963fSmrg      -export-dynamic)
443949dc963fSmrg	export_dynamic=yes
444049dc963fSmrg	continue
444149dc963fSmrg	;;
44424b0ead49Smrg
444349dc963fSmrg      -export-symbols | -export-symbols-regex)
444449dc963fSmrg	if test -n "$export_symbols" || test -n "$export_symbols_regex"; then
444549dc963fSmrg	  func_fatal_error "more than one -exported-symbols argument is not allowed"
444649dc963fSmrg	fi
444749dc963fSmrg	if test "X$arg" = "X-export-symbols"; then
444849dc963fSmrg	  prev=expsyms
444949dc963fSmrg	else
445049dc963fSmrg	  prev=expsyms_regex
445149dc963fSmrg	fi
445249dc963fSmrg	continue
445349dc963fSmrg	;;
44544b0ead49Smrg
445549dc963fSmrg      -framework)
445649dc963fSmrg	prev=framework
445749dc963fSmrg	continue
445849dc963fSmrg	;;
44594b0ead49Smrg
446049dc963fSmrg      -inst-prefix-dir)
446149dc963fSmrg	prev=inst_prefix
446249dc963fSmrg	continue
446349dc963fSmrg	;;
44644b0ead49Smrg
446549dc963fSmrg      # The native IRIX linker understands -LANG:*, -LIST:* and -LNO:*
446649dc963fSmrg      # so, if we see these flags be careful not to treat them like -L
446749dc963fSmrg      -L[A-Z][A-Z]*:*)
446849dc963fSmrg	case $with_gcc/$host in
446949dc963fSmrg	no/*-*-irix* | /*-*-irix*)
447049dc963fSmrg	  func_append compile_command " $arg"
447149dc963fSmrg	  func_append finalize_command " $arg"
447249dc963fSmrg	  ;;
447349dc963fSmrg	esac
447449dc963fSmrg	continue
447549dc963fSmrg	;;
44764b0ead49Smrg
447749dc963fSmrg      -L*)
447849dc963fSmrg	func_stripname '-L' '' "$arg"
447949dc963fSmrg	dir=$func_stripname_result
448049dc963fSmrg	if test -z "$dir"; then
448149dc963fSmrg	  if test "$#" -gt 0; then
448249dc963fSmrg	    func_fatal_error "require no space between \`-L' and \`$1'"
448349dc963fSmrg	  else
448449dc963fSmrg	    func_fatal_error "need path for \`-L' option"
448549dc963fSmrg	  fi
448649dc963fSmrg	fi
448749dc963fSmrg	# We need an absolute path.
448849dc963fSmrg	case $dir in
448949dc963fSmrg	[\\/]* | [A-Za-z]:[\\/]*) ;;
449049dc963fSmrg	*)
449149dc963fSmrg	  absdir=`cd "$dir" && pwd`
449249dc963fSmrg	  test -z "$absdir" && \
449349dc963fSmrg	    func_fatal_error "cannot determine absolute directory name of \`$dir'"
449449dc963fSmrg	  dir="$absdir"
449549dc963fSmrg	  ;;
449649dc963fSmrg	esac
449749dc963fSmrg	case "$deplibs " in
449849dc963fSmrg	*" -L$dir "*) ;;
449949dc963fSmrg	*)
450049dc963fSmrg	  deplibs="$deplibs -L$dir"
450149dc963fSmrg	  lib_search_path="$lib_search_path $dir"
450249dc963fSmrg	  ;;
450349dc963fSmrg	esac
450449dc963fSmrg	case $host in
450549dc963fSmrg	*-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-cegcc*)
450649dc963fSmrg	  testbindir=`$ECHO "X$dir" | $Xsed -e 's*/lib$*/bin*'`
450749dc963fSmrg	  case :$dllsearchpath: in
450849dc963fSmrg	  *":$dir:"*) ;;
450949dc963fSmrg	  ::) dllsearchpath=$dir;;
451049dc963fSmrg	  *) dllsearchpath="$dllsearchpath:$dir";;
451149dc963fSmrg	  esac
451249dc963fSmrg	  case :$dllsearchpath: in
451349dc963fSmrg	  *":$testbindir:"*) ;;
451449dc963fSmrg	  ::) dllsearchpath=$testbindir;;
451549dc963fSmrg	  *) dllsearchpath="$dllsearchpath:$testbindir";;
451649dc963fSmrg	  esac
451749dc963fSmrg	  ;;
451849dc963fSmrg	esac
451949dc963fSmrg	continue
452049dc963fSmrg	;;
45214b0ead49Smrg
452249dc963fSmrg      -l*)
452349dc963fSmrg	if test "X$arg" = "X-lc" || test "X$arg" = "X-lm"; then
452449dc963fSmrg	  case $host in
452549dc963fSmrg	  *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-beos* | *-cegcc*)
452649dc963fSmrg	    # These systems don't actually have a C or math library (as such)
452749dc963fSmrg	    continue
452849dc963fSmrg	    ;;
452949dc963fSmrg	  *-*-os2*)
453049dc963fSmrg	    # These systems don't actually have a C library (as such)
453149dc963fSmrg	    test "X$arg" = "X-lc" && continue
453249dc963fSmrg	    ;;
453349dc963fSmrg	  *-*-openbsd* | *-*-freebsd* | *-*-dragonfly*)
453449dc963fSmrg	    # Do not include libc due to us having libc/libc_r.
453549dc963fSmrg	    test "X$arg" = "X-lc" && continue
453649dc963fSmrg	    ;;
453749dc963fSmrg	  *-*-rhapsody* | *-*-darwin1.[012])
453849dc963fSmrg	    # Rhapsody C and math libraries are in the System framework
453949dc963fSmrg	    deplibs="$deplibs System.ltframework"
454049dc963fSmrg	    continue
454149dc963fSmrg	    ;;
454249dc963fSmrg	  *-*-sco3.2v5* | *-*-sco5v6*)
454349dc963fSmrg	    # Causes problems with __ctype
454449dc963fSmrg	    test "X$arg" = "X-lc" && continue
454549dc963fSmrg	    ;;
454649dc963fSmrg	  *-*-sysv4.2uw2* | *-*-sysv5* | *-*-unixware* | *-*-OpenUNIX*)
454749dc963fSmrg	    # Compiler inserts libc in the correct place for threads to work
454849dc963fSmrg	    test "X$arg" = "X-lc" && continue
454949dc963fSmrg	    ;;
455049dc963fSmrg	  esac
455149dc963fSmrg	elif test "X$arg" = "X-lc_r"; then
455249dc963fSmrg	 case $host in
455349dc963fSmrg	 *-*-openbsd* | *-*-freebsd* | *-*-dragonfly*)
455449dc963fSmrg	   # Do not include libc_r directly, use -pthread flag.
455549dc963fSmrg	   continue
455649dc963fSmrg	   ;;
455749dc963fSmrg	 esac
455849dc963fSmrg	fi
455949dc963fSmrg	deplibs="$deplibs $arg"
456049dc963fSmrg	continue
456149dc963fSmrg	;;
45624b0ead49Smrg
456349dc963fSmrg      -module)
456449dc963fSmrg	module=yes
456549dc963fSmrg	continue
456649dc963fSmrg	;;
45674b0ead49Smrg
456849dc963fSmrg      # Tru64 UNIX uses -model [arg] to determine the layout of C++
456949dc963fSmrg      # classes, name mangling, and exception handling.
457049dc963fSmrg      # Darwin uses the -arch flag to determine output architecture.
457149dc963fSmrg      -model|-arch|-isysroot)
457249dc963fSmrg	compiler_flags="$compiler_flags $arg"
457349dc963fSmrg	func_append compile_command " $arg"
457449dc963fSmrg	func_append finalize_command " $arg"
457549dc963fSmrg	prev=xcompiler
457649dc963fSmrg	continue
457749dc963fSmrg	;;
45784b0ead49Smrg
457949dc963fSmrg      -mt|-mthreads|-kthread|-Kthread|-pthread|-pthreads|--thread-safe|-threads)
458049dc963fSmrg	compiler_flags="$compiler_flags $arg"
458149dc963fSmrg	func_append compile_command " $arg"
458249dc963fSmrg	func_append finalize_command " $arg"
458349dc963fSmrg	case "$new_inherited_linker_flags " in
458449dc963fSmrg	    *" $arg "*) ;;
458549dc963fSmrg	    * ) new_inherited_linker_flags="$new_inherited_linker_flags $arg" ;;
458649dc963fSmrg	esac
458749dc963fSmrg	continue
458849dc963fSmrg	;;
45894b0ead49Smrg
459049dc963fSmrg      -multi_module)
459149dc963fSmrg	single_module="${wl}-multi_module"
459249dc963fSmrg	continue
459349dc963fSmrg	;;
45944b0ead49Smrg
459549dc963fSmrg      -no-fast-install)
459649dc963fSmrg	fast_install=no
459749dc963fSmrg	continue
459849dc963fSmrg	;;
45994b0ead49Smrg
460049dc963fSmrg      -no-install)
460149dc963fSmrg	case $host in
460249dc963fSmrg	*-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-*-darwin* | *-cegcc*)
460349dc963fSmrg	  # The PATH hackery in wrapper scripts is required on Windows
460449dc963fSmrg	  # and Darwin in order for the loader to find any dlls it needs.
460549dc963fSmrg	  func_warning "\`-no-install' is ignored for $host"
460649dc963fSmrg	  func_warning "assuming \`-no-fast-install' instead"
460749dc963fSmrg	  fast_install=no
460849dc963fSmrg	  ;;
460949dc963fSmrg	*) no_install=yes ;;
461049dc963fSmrg	esac
461149dc963fSmrg	continue
461249dc963fSmrg	;;
46134b0ead49Smrg
461449dc963fSmrg      -no-undefined)
461549dc963fSmrg	allow_undefined=no
461649dc963fSmrg	continue
461749dc963fSmrg	;;
46184b0ead49Smrg
461949dc963fSmrg      -objectlist)
462049dc963fSmrg	prev=objectlist
462149dc963fSmrg	continue
462249dc963fSmrg	;;
46234b0ead49Smrg
462449dc963fSmrg      -o) prev=output ;;
46254b0ead49Smrg
462649dc963fSmrg      -precious-files-regex)
462749dc963fSmrg	prev=precious_regex
462849dc963fSmrg	continue
462949dc963fSmrg	;;
46304b0ead49Smrg
463149dc963fSmrg      -release)
463249dc963fSmrg	prev=release
463349dc963fSmrg	continue
463449dc963fSmrg	;;
46354b0ead49Smrg
463649dc963fSmrg      -rpath)
463749dc963fSmrg	prev=rpath
463849dc963fSmrg	continue
463949dc963fSmrg	;;
46404b0ead49Smrg
464149dc963fSmrg      -R)
464249dc963fSmrg	prev=xrpath
464349dc963fSmrg	continue
464449dc963fSmrg	;;
46454b0ead49Smrg
464649dc963fSmrg      -R*)
464749dc963fSmrg	func_stripname '-R' '' "$arg"
464849dc963fSmrg	dir=$func_stripname_result
464949dc963fSmrg	# We need an absolute path.
465049dc963fSmrg	case $dir in
465149dc963fSmrg	[\\/]* | [A-Za-z]:[\\/]*) ;;
465249dc963fSmrg	*)
465349dc963fSmrg	  func_fatal_error "only absolute run-paths are allowed"
465449dc963fSmrg	  ;;
465549dc963fSmrg	esac
465649dc963fSmrg	case "$xrpath " in
465749dc963fSmrg	*" $dir "*) ;;
465849dc963fSmrg	*) xrpath="$xrpath $dir" ;;
465949dc963fSmrg	esac
466049dc963fSmrg	continue
466149dc963fSmrg	;;
46624b0ead49Smrg
466349dc963fSmrg      -shared)
466449dc963fSmrg	# The effects of -shared are defined in a previous loop.
466549dc963fSmrg	continue
466649dc963fSmrg	;;
46674b0ead49Smrg
466849dc963fSmrg      -shrext)
466949dc963fSmrg	prev=shrext
467049dc963fSmrg	continue
467149dc963fSmrg	;;
46724b0ead49Smrg
467349dc963fSmrg      -static | -static-libtool-libs)
467449dc963fSmrg	# The effects of -static are defined in a previous loop.
467549dc963fSmrg	# We used to do the same as -all-static on platforms that
467649dc963fSmrg	# didn't have a PIC flag, but the assumption that the effects
467749dc963fSmrg	# would be equivalent was wrong.  It would break on at least
467849dc963fSmrg	# Digital Unix and AIX.
467949dc963fSmrg	continue
468049dc963fSmrg	;;
46814b0ead49Smrg
468249dc963fSmrg      -thread-safe)
468349dc963fSmrg	thread_safe=yes
468449dc963fSmrg	continue
468549dc963fSmrg	;;
46864b0ead49Smrg
468749dc963fSmrg      -version-info)
468849dc963fSmrg	prev=vinfo
468949dc963fSmrg	continue
469049dc963fSmrg	;;
46914b0ead49Smrg
469249dc963fSmrg      -version-number)
469349dc963fSmrg	prev=vinfo
469449dc963fSmrg	vinfo_number=yes
469549dc963fSmrg	continue
469649dc963fSmrg	;;
46974b0ead49Smrg
469849dc963fSmrg      -weak)
469949dc963fSmrg        prev=weak
470049dc963fSmrg	continue
470149dc963fSmrg	;;
47024b0ead49Smrg
470349dc963fSmrg      -Wc,*)
470449dc963fSmrg	func_stripname '-Wc,' '' "$arg"
470549dc963fSmrg	args=$func_stripname_result
470649dc963fSmrg	arg=
470749dc963fSmrg	save_ifs="$IFS"; IFS=','
470849dc963fSmrg	for flag in $args; do
470949dc963fSmrg	  IFS="$save_ifs"
471049dc963fSmrg          func_quote_for_eval "$flag"
471149dc963fSmrg	  arg="$arg $wl$func_quote_for_eval_result"
471249dc963fSmrg	  compiler_flags="$compiler_flags $func_quote_for_eval_result"
471349dc963fSmrg	done
471449dc963fSmrg	IFS="$save_ifs"
471549dc963fSmrg	func_stripname ' ' '' "$arg"
471649dc963fSmrg	arg=$func_stripname_result
471749dc963fSmrg	;;
47184b0ead49Smrg
471949dc963fSmrg      -Wl,*)
472049dc963fSmrg	func_stripname '-Wl,' '' "$arg"
472149dc963fSmrg	args=$func_stripname_result
472249dc963fSmrg	arg=
472349dc963fSmrg	save_ifs="$IFS"; IFS=','
472449dc963fSmrg	for flag in $args; do
472549dc963fSmrg	  IFS="$save_ifs"
472649dc963fSmrg          func_quote_for_eval "$flag"
472749dc963fSmrg	  arg="$arg $wl$func_quote_for_eval_result"
472849dc963fSmrg	  compiler_flags="$compiler_flags $wl$func_quote_for_eval_result"
472949dc963fSmrg	  linker_flags="$linker_flags $func_quote_for_eval_result"
473049dc963fSmrg	done
473149dc963fSmrg	IFS="$save_ifs"
473249dc963fSmrg	func_stripname ' ' '' "$arg"
473349dc963fSmrg	arg=$func_stripname_result
473449dc963fSmrg	;;
47354b0ead49Smrg
473649dc963fSmrg      -Xcompiler)
473749dc963fSmrg	prev=xcompiler
473849dc963fSmrg	continue
473949dc963fSmrg	;;
47404b0ead49Smrg
474149dc963fSmrg      -Xlinker)
474249dc963fSmrg	prev=xlinker
474349dc963fSmrg	continue
474449dc963fSmrg	;;
47454b0ead49Smrg
474649dc963fSmrg      -XCClinker)
474749dc963fSmrg	prev=xcclinker
474849dc963fSmrg	continue
474949dc963fSmrg	;;
47504b0ead49Smrg
475149dc963fSmrg      # -msg_* for osf cc
475249dc963fSmrg      -msg_*)
475349dc963fSmrg	func_quote_for_eval "$arg"
475449dc963fSmrg	arg="$func_quote_for_eval_result"
475549dc963fSmrg	;;
47564b0ead49Smrg
475749dc963fSmrg      # -64, -mips[0-9] enable 64-bit mode on the SGI compiler
475849dc963fSmrg      # -r[0-9][0-9]* specifies the processor on the SGI compiler
475949dc963fSmrg      # -xarch=*, -xtarget=* enable 64-bit mode on the Sun compiler
476049dc963fSmrg      # +DA*, +DD* enable 64-bit mode on the HP compiler
476149dc963fSmrg      # -q* pass through compiler args for the IBM compiler
476249dc963fSmrg      # -m*, -t[45]*, -txscale* pass through architecture-specific
476349dc963fSmrg      # compiler args for GCC
476449dc963fSmrg      # -F/path gives path to uninstalled frameworks, gcc on darwin
476549dc963fSmrg      # -p, -pg, --coverage, -fprofile-* pass through profiling flag for GCC
476649dc963fSmrg      # @file GCC response files
476749dc963fSmrg      -64|-mips[0-9]|-r[0-9][0-9]*|-xarch=*|-xtarget=*|+DA*|+DD*|-q*|-m*| \
476849dc963fSmrg      -t[45]*|-txscale*|-p|-pg|--coverage|-fprofile-*|-F*|@*)
476949dc963fSmrg        func_quote_for_eval "$arg"
477049dc963fSmrg	arg="$func_quote_for_eval_result"
477149dc963fSmrg        func_append compile_command " $arg"
477249dc963fSmrg        func_append finalize_command " $arg"
477349dc963fSmrg        compiler_flags="$compiler_flags $arg"
477449dc963fSmrg        continue
477549dc963fSmrg        ;;
47764b0ead49Smrg
477749dc963fSmrg      # Some other compiler flag.
477849dc963fSmrg      -* | +*)
477949dc963fSmrg        func_quote_for_eval "$arg"
478049dc963fSmrg	arg="$func_quote_for_eval_result"
478149dc963fSmrg	;;
47824b0ead49Smrg
478349dc963fSmrg      *.$objext)
478449dc963fSmrg	# A standard object.
478549dc963fSmrg	objs="$objs $arg"
478649dc963fSmrg	;;
47874b0ead49Smrg
478849dc963fSmrg      *.lo)
478949dc963fSmrg	# A libtool-controlled object.
47904b0ead49Smrg
479149dc963fSmrg	# Check to see that this really is a libtool object.
479249dc963fSmrg	if func_lalib_unsafe_p "$arg"; then
479349dc963fSmrg	  pic_object=
479449dc963fSmrg	  non_pic_object=
47954b0ead49Smrg
479649dc963fSmrg	  # Read the .lo file
479749dc963fSmrg	  func_source "$arg"
47984b0ead49Smrg
479949dc963fSmrg	  if test -z "$pic_object" ||
480049dc963fSmrg	     test -z "$non_pic_object" ||
480149dc963fSmrg	     test "$pic_object" = none &&
480249dc963fSmrg	     test "$non_pic_object" = none; then
480349dc963fSmrg	    func_fatal_error "cannot find name of object for \`$arg'"
480449dc963fSmrg	  fi
48054b0ead49Smrg
480649dc963fSmrg	  # Extract subdirectory from the argument.
480749dc963fSmrg	  func_dirname "$arg" "/" ""
480849dc963fSmrg	  xdir="$func_dirname_result"
480952b01e16Smrg
481049dc963fSmrg	  if test "$pic_object" != none; then
481149dc963fSmrg	    # Prepend the subdirectory the object is found in.
481249dc963fSmrg	    pic_object="$xdir$pic_object"
48134b0ead49Smrg
481449dc963fSmrg	    if test "$prev" = dlfiles; then
481549dc963fSmrg	      if test "$build_libtool_libs" = yes && test "$dlopen_support" = yes; then
481649dc963fSmrg		dlfiles="$dlfiles $pic_object"
481749dc963fSmrg		prev=
481849dc963fSmrg		continue
481949dc963fSmrg	      else
482049dc963fSmrg		# If libtool objects are unsupported, then we need to preload.
482149dc963fSmrg		prev=dlprefiles
482249dc963fSmrg	      fi
482349dc963fSmrg	    fi
48244b0ead49Smrg
482549dc963fSmrg	    # CHECK ME:  I think I busted this.  -Ossama
482649dc963fSmrg	    if test "$prev" = dlprefiles; then
482749dc963fSmrg	      # Preload the old-style object.
482849dc963fSmrg	      dlprefiles="$dlprefiles $pic_object"
482949dc963fSmrg	      prev=
483049dc963fSmrg	    fi
48314b0ead49Smrg
483249dc963fSmrg	    # A PIC object.
483349dc963fSmrg	    func_append libobjs " $pic_object"
483449dc963fSmrg	    arg="$pic_object"
483549dc963fSmrg	  fi
48364b0ead49Smrg
483749dc963fSmrg	  # Non-PIC object.
483849dc963fSmrg	  if test "$non_pic_object" != none; then
483949dc963fSmrg	    # Prepend the subdirectory the object is found in.
484049dc963fSmrg	    non_pic_object="$xdir$non_pic_object"
48414b0ead49Smrg
484249dc963fSmrg	    # A standard non-PIC object
484349dc963fSmrg	    func_append non_pic_objects " $non_pic_object"
484449dc963fSmrg	    if test -z "$pic_object" || test "$pic_object" = none ; then
484549dc963fSmrg	      arg="$non_pic_object"
484649dc963fSmrg	    fi
484749dc963fSmrg	  else
484849dc963fSmrg	    # If the PIC object exists, use it instead.
484949dc963fSmrg	    # $xdir was prepended to $pic_object above.
485049dc963fSmrg	    non_pic_object="$pic_object"
485149dc963fSmrg	    func_append non_pic_objects " $non_pic_object"
485249dc963fSmrg	  fi
485349dc963fSmrg	else
485449dc963fSmrg	  # Only an error if not doing a dry-run.
485549dc963fSmrg	  if $opt_dry_run; then
485649dc963fSmrg	    # Extract subdirectory from the argument.
485749dc963fSmrg	    func_dirname "$arg" "/" ""
485849dc963fSmrg	    xdir="$func_dirname_result"
485949dc963fSmrg
486049dc963fSmrg	    func_lo2o "$arg"
486149dc963fSmrg	    pic_object=$xdir$objdir/$func_lo2o_result
486249dc963fSmrg	    non_pic_object=$xdir$func_lo2o_result
486349dc963fSmrg	    func_append libobjs " $pic_object"
486449dc963fSmrg	    func_append non_pic_objects " $non_pic_object"
486549dc963fSmrg	  else
486649dc963fSmrg	    func_fatal_error "\`$arg' is not a valid libtool object"
486749dc963fSmrg	  fi
486849dc963fSmrg	fi
486949dc963fSmrg	;;
48704b0ead49Smrg
487149dc963fSmrg      *.$libext)
487249dc963fSmrg	# An archive.
487349dc963fSmrg	deplibs="$deplibs $arg"
487449dc963fSmrg	old_deplibs="$old_deplibs $arg"
487549dc963fSmrg	continue
487649dc963fSmrg	;;
487749dc963fSmrg
487849dc963fSmrg      *.la)
487949dc963fSmrg	# A libtool-controlled library.
488049dc963fSmrg
488149dc963fSmrg	if test "$prev" = dlfiles; then
488249dc963fSmrg	  # This library was specified with -dlopen.
488349dc963fSmrg	  dlfiles="$dlfiles $arg"
488449dc963fSmrg	  prev=
488549dc963fSmrg	elif test "$prev" = dlprefiles; then
488649dc963fSmrg	  # The library was specified with -dlpreopen.
488749dc963fSmrg	  dlprefiles="$dlprefiles $arg"
488849dc963fSmrg	  prev=
488949dc963fSmrg	else
489049dc963fSmrg	  deplibs="$deplibs $arg"
489149dc963fSmrg	fi
489249dc963fSmrg	continue
489349dc963fSmrg	;;
489449dc963fSmrg
489549dc963fSmrg      # Some other compiler argument.
489649dc963fSmrg      *)
489749dc963fSmrg	# Unknown arguments in both finalize_command and compile_command need
489849dc963fSmrg	# to be aesthetically quoted because they are evaled later.
489949dc963fSmrg	func_quote_for_eval "$arg"
490049dc963fSmrg	arg="$func_quote_for_eval_result"
490149dc963fSmrg	;;
490249dc963fSmrg      esac # arg
490349dc963fSmrg
490449dc963fSmrg      # Now actually substitute the argument into the commands.
490549dc963fSmrg      if test -n "$arg"; then
490649dc963fSmrg	func_append compile_command " $arg"
490749dc963fSmrg	func_append finalize_command " $arg"
490849dc963fSmrg      fi
490949dc963fSmrg    done # argument parsing loop
491049dc963fSmrg
491149dc963fSmrg    test -n "$prev" && \
491249dc963fSmrg      func_fatal_help "the \`$prevarg' option requires an argument"
491349dc963fSmrg
491449dc963fSmrg    if test "$export_dynamic" = yes && test -n "$export_dynamic_flag_spec"; then
491549dc963fSmrg      eval arg=\"$export_dynamic_flag_spec\"
491649dc963fSmrg      func_append compile_command " $arg"
491749dc963fSmrg      func_append finalize_command " $arg"
491849dc963fSmrg    fi
491949dc963fSmrg
492049dc963fSmrg    oldlibs=
492149dc963fSmrg    # calculate the name of the file, without its directory
492249dc963fSmrg    func_basename "$output"
492349dc963fSmrg    outputname="$func_basename_result"
492449dc963fSmrg    libobjs_save="$libobjs"
492549dc963fSmrg
492649dc963fSmrg    if test -n "$shlibpath_var"; then
492749dc963fSmrg      # get the directories listed in $shlibpath_var
492849dc963fSmrg      eval shlib_search_path=\`\$ECHO \"X\${$shlibpath_var}\" \| \$Xsed -e \'s/:/ /g\'\`
492949dc963fSmrg    else
493049dc963fSmrg      shlib_search_path=
493149dc963fSmrg    fi
493249dc963fSmrg    eval sys_lib_search_path=\"$sys_lib_search_path_spec\"
493349dc963fSmrg    eval sys_lib_dlsearch_path=\"$sys_lib_dlsearch_path_spec\"
493449dc963fSmrg
493549dc963fSmrg    func_dirname "$output" "/" ""
493649dc963fSmrg    output_objdir="$func_dirname_result$objdir"
493749dc963fSmrg    # Create the object directory.
493849dc963fSmrg    func_mkdir_p "$output_objdir"
493949dc963fSmrg
494049dc963fSmrg    # Determine the type of output
494149dc963fSmrg    case $output in
494249dc963fSmrg    "")
494349dc963fSmrg      func_fatal_help "you must specify an output file"
494449dc963fSmrg      ;;
494549dc963fSmrg    *.$libext) linkmode=oldlib ;;
494649dc963fSmrg    *.lo | *.$objext) linkmode=obj ;;
494749dc963fSmrg    *.la) linkmode=lib ;;
494849dc963fSmrg    *) linkmode=prog ;; # Anything else should be a program.
494949dc963fSmrg    esac
495049dc963fSmrg
495149dc963fSmrg    specialdeplibs=
495249dc963fSmrg
495349dc963fSmrg    libs=
495449dc963fSmrg    # Find all interdependent deplibs by searching for libraries
495549dc963fSmrg    # that are linked more than once (e.g. -la -lb -la)
495649dc963fSmrg    for deplib in $deplibs; do
495749dc963fSmrg      if $opt_duplicate_deps ; then
495849dc963fSmrg	case "$libs " in
495949dc963fSmrg	*" $deplib "*) specialdeplibs="$specialdeplibs $deplib" ;;
496049dc963fSmrg	esac
496149dc963fSmrg      fi
496249dc963fSmrg      libs="$libs $deplib"
496349dc963fSmrg    done
496449dc963fSmrg
496549dc963fSmrg    if test "$linkmode" = lib; then
496649dc963fSmrg      libs="$predeps $libs $compiler_lib_search_path $postdeps"
496749dc963fSmrg
496849dc963fSmrg      # Compute libraries that are listed more than once in $predeps
496949dc963fSmrg      # $postdeps and mark them as special (i.e., whose duplicates are
497049dc963fSmrg      # not to be eliminated).
497149dc963fSmrg      pre_post_deps=
497249dc963fSmrg      if $opt_duplicate_compiler_generated_deps; then
497349dc963fSmrg	for pre_post_dep in $predeps $postdeps; do
497449dc963fSmrg	  case "$pre_post_deps " in
497549dc963fSmrg	  *" $pre_post_dep "*) specialdeplibs="$specialdeplibs $pre_post_deps" ;;
497649dc963fSmrg	  esac
497749dc963fSmrg	  pre_post_deps="$pre_post_deps $pre_post_dep"
497849dc963fSmrg	done
497949dc963fSmrg      fi
498049dc963fSmrg      pre_post_deps=
498149dc963fSmrg    fi
498249dc963fSmrg
498349dc963fSmrg    deplibs=
498449dc963fSmrg    newdependency_libs=
498549dc963fSmrg    newlib_search_path=
498649dc963fSmrg    need_relink=no # whether we're linking any uninstalled libtool libraries
498749dc963fSmrg    notinst_deplibs= # not-installed libtool libraries
498849dc963fSmrg    notinst_path= # paths that contain not-installed libtool libraries
498949dc963fSmrg
499049dc963fSmrg    case $linkmode in
499149dc963fSmrg    lib)
499249dc963fSmrg	passes="conv dlpreopen link"
499349dc963fSmrg	for file in $dlfiles $dlprefiles; do
499449dc963fSmrg	  case $file in
499549dc963fSmrg	  *.la) ;;
499649dc963fSmrg	  *)
499749dc963fSmrg	    func_fatal_help "libraries can \`-dlopen' only libtool libraries: $file"
499849dc963fSmrg	    ;;
499949dc963fSmrg	  esac
500049dc963fSmrg	done
500149dc963fSmrg	;;
500249dc963fSmrg    prog)
500349dc963fSmrg	compile_deplibs=
500449dc963fSmrg	finalize_deplibs=
500549dc963fSmrg	alldeplibs=no
500649dc963fSmrg	newdlfiles=
500749dc963fSmrg	newdlprefiles=
500849dc963fSmrg	passes="conv scan dlopen dlpreopen link"
500949dc963fSmrg	;;
501049dc963fSmrg    *)  passes="conv"
501149dc963fSmrg	;;
501249dc963fSmrg    esac
501349dc963fSmrg
501449dc963fSmrg    for pass in $passes; do
501549dc963fSmrg      # The preopen pass in lib mode reverses $deplibs; put it back here
501649dc963fSmrg      # so that -L comes before libs that need it for instance...
501749dc963fSmrg      if test "$linkmode,$pass" = "lib,link"; then
501849dc963fSmrg	## FIXME: Find the place where the list is rebuilt in the wrong
501949dc963fSmrg	##        order, and fix it there properly
502049dc963fSmrg        tmp_deplibs=
502149dc963fSmrg	for deplib in $deplibs; do
502249dc963fSmrg	  tmp_deplibs="$deplib $tmp_deplibs"
502349dc963fSmrg	done
502449dc963fSmrg	deplibs="$tmp_deplibs"
502549dc963fSmrg      fi
502649dc963fSmrg
502749dc963fSmrg      if test "$linkmode,$pass" = "lib,link" ||
502849dc963fSmrg	 test "$linkmode,$pass" = "prog,scan"; then
502949dc963fSmrg	libs="$deplibs"
503049dc963fSmrg	deplibs=
503149dc963fSmrg      fi
503249dc963fSmrg      if test "$linkmode" = prog; then
503349dc963fSmrg	case $pass in
503449dc963fSmrg	dlopen) libs="$dlfiles" ;;
503549dc963fSmrg	dlpreopen) libs="$dlprefiles" ;;
503649dc963fSmrg	link) libs="$deplibs %DEPLIBS% $dependency_libs" ;;
503749dc963fSmrg	esac
503849dc963fSmrg      fi
503949dc963fSmrg      if test "$linkmode,$pass" = "lib,dlpreopen"; then
504049dc963fSmrg	# Collect and forward deplibs of preopened libtool libs
504149dc963fSmrg	for lib in $dlprefiles; do
504249dc963fSmrg	  # Ignore non-libtool-libs
504349dc963fSmrg	  dependency_libs=
504449dc963fSmrg	  case $lib in
504549dc963fSmrg	  *.la)	func_source "$lib" ;;
504649dc963fSmrg	  esac
504749dc963fSmrg
504849dc963fSmrg	  # Collect preopened libtool deplibs, except any this library
504949dc963fSmrg	  # has declared as weak libs
505049dc963fSmrg	  for deplib in $dependency_libs; do
505149dc963fSmrg            deplib_base=`$ECHO "X$deplib" | $Xsed -e "$basename"`
505249dc963fSmrg	    case " $weak_libs " in
505349dc963fSmrg	    *" $deplib_base "*) ;;
505449dc963fSmrg	    *) deplibs="$deplibs $deplib" ;;
505549dc963fSmrg	    esac
505649dc963fSmrg	  done
505749dc963fSmrg	done
505849dc963fSmrg	libs="$dlprefiles"
505949dc963fSmrg      fi
506049dc963fSmrg      if test "$pass" = dlopen; then
506149dc963fSmrg	# Collect dlpreopened libraries
506249dc963fSmrg	save_deplibs="$deplibs"
506349dc963fSmrg	deplibs=
506449dc963fSmrg      fi
506549dc963fSmrg
506649dc963fSmrg      for deplib in $libs; do
506749dc963fSmrg	lib=
506849dc963fSmrg	found=no
506949dc963fSmrg	case $deplib in
507049dc963fSmrg	-mt|-mthreads|-kthread|-Kthread|-pthread|-pthreads|--thread-safe|-threads)
507149dc963fSmrg	  if test "$linkmode,$pass" = "prog,link"; then
507249dc963fSmrg	    compile_deplibs="$deplib $compile_deplibs"
507349dc963fSmrg	    finalize_deplibs="$deplib $finalize_deplibs"
507449dc963fSmrg	  else
507549dc963fSmrg	    compiler_flags="$compiler_flags $deplib"
507649dc963fSmrg	    if test "$linkmode" = lib ; then
507749dc963fSmrg		case "$new_inherited_linker_flags " in
507849dc963fSmrg		    *" $deplib "*) ;;
507949dc963fSmrg		    * ) new_inherited_linker_flags="$new_inherited_linker_flags $deplib" ;;
508049dc963fSmrg		esac
508149dc963fSmrg	    fi
508249dc963fSmrg	  fi
508349dc963fSmrg	  continue
508449dc963fSmrg	  ;;
508549dc963fSmrg	-l*)
508649dc963fSmrg	  if test "$linkmode" != lib && test "$linkmode" != prog; then
508749dc963fSmrg	    func_warning "\`-l' is ignored for archives/objects"
508849dc963fSmrg	    continue
508949dc963fSmrg	  fi
509049dc963fSmrg	  func_stripname '-l' '' "$deplib"
509149dc963fSmrg	  name=$func_stripname_result
509249dc963fSmrg	  if test "$linkmode" = lib; then
509349dc963fSmrg	    searchdirs="$newlib_search_path $lib_search_path $compiler_lib_search_dirs $sys_lib_search_path $shlib_search_path"
509449dc963fSmrg	  else
509549dc963fSmrg	    searchdirs="$newlib_search_path $lib_search_path $sys_lib_search_path $shlib_search_path"
509649dc963fSmrg	  fi
509749dc963fSmrg	  for searchdir in $searchdirs; do
509849dc963fSmrg	    for search_ext in .la $std_shrext .so .a; do
509949dc963fSmrg	      # Search the libtool library
510049dc963fSmrg	      lib="$searchdir/lib${name}${search_ext}"
510149dc963fSmrg	      if test -f "$lib"; then
510249dc963fSmrg		if test "$search_ext" = ".la"; then
510349dc963fSmrg		  found=yes
510449dc963fSmrg		else
510549dc963fSmrg		  found=no
510649dc963fSmrg		fi
510749dc963fSmrg		break 2
510849dc963fSmrg	      fi
510949dc963fSmrg	    done
511049dc963fSmrg	  done
511149dc963fSmrg	  if test "$found" != yes; then
511249dc963fSmrg	    # deplib doesn't seem to be a libtool library
511349dc963fSmrg	    if test "$linkmode,$pass" = "prog,link"; then
511449dc963fSmrg	      compile_deplibs="$deplib $compile_deplibs"
511549dc963fSmrg	      finalize_deplibs="$deplib $finalize_deplibs"
511649dc963fSmrg	    else
511749dc963fSmrg	      deplibs="$deplib $deplibs"
511849dc963fSmrg	      test "$linkmode" = lib && newdependency_libs="$deplib $newdependency_libs"
511949dc963fSmrg	    fi
512049dc963fSmrg	    continue
512149dc963fSmrg	  else # deplib is a libtool library
512249dc963fSmrg	    # If $allow_libtool_libs_with_static_runtimes && $deplib is a stdlib,
512349dc963fSmrg	    # We need to do some special things here, and not later.
512449dc963fSmrg	    if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then
512549dc963fSmrg	      case " $predeps $postdeps " in
512649dc963fSmrg	      *" $deplib "*)
512749dc963fSmrg		if func_lalib_p "$lib"; then
512849dc963fSmrg		  library_names=
512949dc963fSmrg		  old_library=
513049dc963fSmrg		  func_source "$lib"
513149dc963fSmrg		  for l in $old_library $library_names; do
513249dc963fSmrg		    ll="$l"
513349dc963fSmrg		  done
513449dc963fSmrg		  if test "X$ll" = "X$old_library" ; then # only static version available
513549dc963fSmrg		    found=no
513649dc963fSmrg		    func_dirname "$lib" "" "."
513749dc963fSmrg		    ladir="$func_dirname_result"
513849dc963fSmrg		    lib=$ladir/$old_library
513949dc963fSmrg		    if test "$linkmode,$pass" = "prog,link"; then
514049dc963fSmrg		      compile_deplibs="$deplib $compile_deplibs"
514149dc963fSmrg		      finalize_deplibs="$deplib $finalize_deplibs"
514249dc963fSmrg		    else
514349dc963fSmrg		      deplibs="$deplib $deplibs"
514449dc963fSmrg		      test "$linkmode" = lib && newdependency_libs="$deplib $newdependency_libs"
514549dc963fSmrg		    fi
514649dc963fSmrg		    continue
514749dc963fSmrg		  fi
514849dc963fSmrg		fi
514949dc963fSmrg		;;
515049dc963fSmrg	      *) ;;
515149dc963fSmrg	      esac
515249dc963fSmrg	    fi
515349dc963fSmrg	  fi
515449dc963fSmrg	  ;; # -l
515549dc963fSmrg	*.ltframework)
515649dc963fSmrg	  if test "$linkmode,$pass" = "prog,link"; then
515749dc963fSmrg	    compile_deplibs="$deplib $compile_deplibs"
515849dc963fSmrg	    finalize_deplibs="$deplib $finalize_deplibs"
515949dc963fSmrg	  else
516049dc963fSmrg	    deplibs="$deplib $deplibs"
516149dc963fSmrg	    if test "$linkmode" = lib ; then
516249dc963fSmrg		case "$new_inherited_linker_flags " in
516349dc963fSmrg		    *" $deplib "*) ;;
516449dc963fSmrg		    * ) new_inherited_linker_flags="$new_inherited_linker_flags $deplib" ;;
516549dc963fSmrg		esac
516649dc963fSmrg	    fi
516749dc963fSmrg	  fi
516849dc963fSmrg	  continue
516949dc963fSmrg	  ;;
517049dc963fSmrg	-L*)
517149dc963fSmrg	  case $linkmode in
517249dc963fSmrg	  lib)
517349dc963fSmrg	    deplibs="$deplib $deplibs"
517449dc963fSmrg	    test "$pass" = conv && continue
517549dc963fSmrg	    newdependency_libs="$deplib $newdependency_libs"
517649dc963fSmrg	    func_stripname '-L' '' "$deplib"
517749dc963fSmrg	    newlib_search_path="$newlib_search_path $func_stripname_result"
517849dc963fSmrg	    ;;
517949dc963fSmrg	  prog)
518049dc963fSmrg	    if test "$pass" = conv; then
518149dc963fSmrg	      deplibs="$deplib $deplibs"
518249dc963fSmrg	      continue
518349dc963fSmrg	    fi
518449dc963fSmrg	    if test "$pass" = scan; then
518549dc963fSmrg	      deplibs="$deplib $deplibs"
518649dc963fSmrg	    else
518749dc963fSmrg	      compile_deplibs="$deplib $compile_deplibs"
518849dc963fSmrg	      finalize_deplibs="$deplib $finalize_deplibs"
518949dc963fSmrg	    fi
519049dc963fSmrg	    func_stripname '-L' '' "$deplib"
519149dc963fSmrg	    newlib_search_path="$newlib_search_path $func_stripname_result"
519249dc963fSmrg	    ;;
519349dc963fSmrg	  *)
519449dc963fSmrg	    func_warning "\`-L' is ignored for archives/objects"
519549dc963fSmrg	    ;;
519649dc963fSmrg	  esac # linkmode
519749dc963fSmrg	  continue
519849dc963fSmrg	  ;; # -L
519949dc963fSmrg	-R*)
520049dc963fSmrg	  if test "$pass" = link; then
520149dc963fSmrg	    func_stripname '-R' '' "$deplib"
520249dc963fSmrg	    dir=$func_stripname_result
520349dc963fSmrg	    # Make sure the xrpath contains only unique directories.
520449dc963fSmrg	    case "$xrpath " in
520549dc963fSmrg	    *" $dir "*) ;;
520649dc963fSmrg	    *) xrpath="$xrpath $dir" ;;
520749dc963fSmrg	    esac
520849dc963fSmrg	  fi
520949dc963fSmrg	  deplibs="$deplib $deplibs"
521049dc963fSmrg	  continue
521149dc963fSmrg	  ;;
521249dc963fSmrg	*.la) lib="$deplib" ;;
521349dc963fSmrg	*.$libext)
521449dc963fSmrg	  if test "$pass" = conv; then
521549dc963fSmrg	    deplibs="$deplib $deplibs"
521649dc963fSmrg	    continue
521749dc963fSmrg	  fi
521849dc963fSmrg	  case $linkmode in
521949dc963fSmrg	  lib)
522049dc963fSmrg	    # Linking convenience modules into shared libraries is allowed,
522149dc963fSmrg	    # but linking other static libraries is non-portable.
522249dc963fSmrg	    case " $dlpreconveniencelibs " in
522349dc963fSmrg	    *" $deplib "*) ;;
522449dc963fSmrg	    *)
522549dc963fSmrg	      valid_a_lib=no
522649dc963fSmrg	      case $deplibs_check_method in
522749dc963fSmrg		match_pattern*)
522849dc963fSmrg		  set dummy $deplibs_check_method; shift
522949dc963fSmrg		  match_pattern_regex=`expr "$deplibs_check_method" : "$1 \(.*\)"`
523049dc963fSmrg		  if eval "\$ECHO \"X$deplib\"" 2>/dev/null | $Xsed -e 10q \
523149dc963fSmrg		    | $EGREP "$match_pattern_regex" > /dev/null; then
523249dc963fSmrg		    valid_a_lib=yes
523349dc963fSmrg		  fi
523449dc963fSmrg		;;
523549dc963fSmrg		pass_all)
523649dc963fSmrg		  valid_a_lib=yes
523749dc963fSmrg		;;
523849dc963fSmrg	      esac
523949dc963fSmrg	      if test "$valid_a_lib" != yes; then
524049dc963fSmrg		$ECHO
524149dc963fSmrg		$ECHO "*** Warning: Trying to link with static lib archive $deplib."
524249dc963fSmrg		$ECHO "*** I have the capability to make that library automatically link in when"
524349dc963fSmrg		$ECHO "*** you link to this library.  But I can only do this if you have a"
524449dc963fSmrg		$ECHO "*** shared version of the library, which you do not appear to have"
524549dc963fSmrg		$ECHO "*** because the file extensions .$libext of this argument makes me believe"
524649dc963fSmrg		$ECHO "*** that it is just a static archive that I should not use here."
524749dc963fSmrg	      else
524849dc963fSmrg		$ECHO
524949dc963fSmrg		$ECHO "*** Warning: Linking the shared library $output against the"
525049dc963fSmrg		$ECHO "*** static library $deplib is not portable!"
525149dc963fSmrg		deplibs="$deplib $deplibs"
525249dc963fSmrg	      fi
525349dc963fSmrg	      ;;
525449dc963fSmrg	    esac
525549dc963fSmrg	    continue
525649dc963fSmrg	    ;;
525749dc963fSmrg	  prog)
525849dc963fSmrg	    if test "$pass" != link; then
525949dc963fSmrg	      deplibs="$deplib $deplibs"
526049dc963fSmrg	    else
526149dc963fSmrg	      compile_deplibs="$deplib $compile_deplibs"
526249dc963fSmrg	      finalize_deplibs="$deplib $finalize_deplibs"
526349dc963fSmrg	    fi
526449dc963fSmrg	    continue
526549dc963fSmrg	    ;;
526649dc963fSmrg	  esac # linkmode
526749dc963fSmrg	  ;; # *.$libext
526849dc963fSmrg	*.lo | *.$objext)
526949dc963fSmrg	  if test "$pass" = conv; then
527049dc963fSmrg	    deplibs="$deplib $deplibs"
527149dc963fSmrg	  elif test "$linkmode" = prog; then
527249dc963fSmrg	    if test "$pass" = dlpreopen || test "$dlopen_support" != yes || test "$build_libtool_libs" = no; then
527349dc963fSmrg	      # If there is no dlopen support or we're linking statically,
527449dc963fSmrg	      # we need to preload.
527549dc963fSmrg	      newdlprefiles="$newdlprefiles $deplib"
527649dc963fSmrg	      compile_deplibs="$deplib $compile_deplibs"
527749dc963fSmrg	      finalize_deplibs="$deplib $finalize_deplibs"
527849dc963fSmrg	    else
527949dc963fSmrg	      newdlfiles="$newdlfiles $deplib"
528049dc963fSmrg	    fi
528149dc963fSmrg	  fi
528249dc963fSmrg	  continue
528349dc963fSmrg	  ;;
528449dc963fSmrg	%DEPLIBS%)
528549dc963fSmrg	  alldeplibs=yes
528649dc963fSmrg	  continue
528749dc963fSmrg	  ;;
528849dc963fSmrg	esac # case $deplib
528949dc963fSmrg
529049dc963fSmrg	if test "$found" = yes || test -f "$lib"; then :
529149dc963fSmrg	else
529249dc963fSmrg	  func_fatal_error "cannot find the library \`$lib' or unhandled argument \`$deplib'"
529349dc963fSmrg	fi
529449dc963fSmrg
529549dc963fSmrg	# Check to see that this really is a libtool archive.
529649dc963fSmrg	func_lalib_unsafe_p "$lib" \
529749dc963fSmrg	  || func_fatal_error "\`$lib' is not a valid libtool archive"
529849dc963fSmrg
529949dc963fSmrg	func_dirname "$lib" "" "."
530049dc963fSmrg	ladir="$func_dirname_result"
530149dc963fSmrg
530249dc963fSmrg	dlname=
530349dc963fSmrg	dlopen=
530449dc963fSmrg	dlpreopen=
530549dc963fSmrg	libdir=
530649dc963fSmrg	library_names=
530749dc963fSmrg	old_library=
530849dc963fSmrg	inherited_linker_flags=
530949dc963fSmrg	# If the library was installed with an old release of libtool,
531049dc963fSmrg	# it will not redefine variables installed, or shouldnotlink
531149dc963fSmrg	installed=yes
531249dc963fSmrg	shouldnotlink=no
531349dc963fSmrg	avoidtemprpath=
531449dc963fSmrg
531549dc963fSmrg
531649dc963fSmrg	# Read the .la file
531749dc963fSmrg	func_source "$lib"
531849dc963fSmrg
531949dc963fSmrg	# Convert "-framework foo" to "foo.ltframework"
532049dc963fSmrg	if test -n "$inherited_linker_flags"; then
532149dc963fSmrg	  tmp_inherited_linker_flags=`$ECHO "X$inherited_linker_flags" | $Xsed -e 's/-framework \([^ $]*\)/\1.ltframework/g'`
532249dc963fSmrg	  for tmp_inherited_linker_flag in $tmp_inherited_linker_flags; do
532349dc963fSmrg	    case " $new_inherited_linker_flags " in
532449dc963fSmrg	      *" $tmp_inherited_linker_flag "*) ;;
532549dc963fSmrg	      *) new_inherited_linker_flags="$new_inherited_linker_flags $tmp_inherited_linker_flag";;
532649dc963fSmrg	    esac
532749dc963fSmrg	  done
532849dc963fSmrg	fi
532949dc963fSmrg	dependency_libs=`$ECHO "X $dependency_libs" | $Xsed -e 's% \([^ $]*\).ltframework% -framework \1%g'`
533049dc963fSmrg	if test "$linkmode,$pass" = "lib,link" ||
533149dc963fSmrg	   test "$linkmode,$pass" = "prog,scan" ||
533249dc963fSmrg	   { test "$linkmode" != prog && test "$linkmode" != lib; }; then
533349dc963fSmrg	  test -n "$dlopen" && dlfiles="$dlfiles $dlopen"
533449dc963fSmrg	  test -n "$dlpreopen" && dlprefiles="$dlprefiles $dlpreopen"
533549dc963fSmrg	fi
533649dc963fSmrg
533749dc963fSmrg	if test "$pass" = conv; then
533849dc963fSmrg	  # Only check for convenience libraries
533949dc963fSmrg	  deplibs="$lib $deplibs"
534049dc963fSmrg	  if test -z "$libdir"; then
534149dc963fSmrg	    if test -z "$old_library"; then
534249dc963fSmrg	      func_fatal_error "cannot find name of link library for \`$lib'"
534349dc963fSmrg	    fi
534449dc963fSmrg	    # It is a libtool convenience library, so add in its objects.
534549dc963fSmrg	    convenience="$convenience $ladir/$objdir/$old_library"
534649dc963fSmrg	    old_convenience="$old_convenience $ladir/$objdir/$old_library"
534749dc963fSmrg	  elif test "$linkmode" != prog && test "$linkmode" != lib; then
534849dc963fSmrg	    func_fatal_error "\`$lib' is not a convenience library"
534949dc963fSmrg	  fi
535049dc963fSmrg	  tmp_libs=
535149dc963fSmrg	  for deplib in $dependency_libs; do
535249dc963fSmrg	    deplibs="$deplib $deplibs"
535349dc963fSmrg	    if $opt_duplicate_deps ; then
535449dc963fSmrg	      case "$tmp_libs " in
535549dc963fSmrg	      *" $deplib "*) specialdeplibs="$specialdeplibs $deplib" ;;
535649dc963fSmrg	      esac
535749dc963fSmrg	    fi
535849dc963fSmrg	    tmp_libs="$tmp_libs $deplib"
535949dc963fSmrg	  done
536049dc963fSmrg	  continue
536149dc963fSmrg	fi # $pass = conv
536249dc963fSmrg
536349dc963fSmrg
536449dc963fSmrg	# Get the name of the library we link against.
536549dc963fSmrg	linklib=
536649dc963fSmrg	for l in $old_library $library_names; do
536749dc963fSmrg	  linklib="$l"
536849dc963fSmrg	done
536949dc963fSmrg	if test -z "$linklib"; then
537049dc963fSmrg	  func_fatal_error "cannot find name of link library for \`$lib'"
537149dc963fSmrg	fi
537249dc963fSmrg
537349dc963fSmrg	# This library was specified with -dlopen.
537449dc963fSmrg	if test "$pass" = dlopen; then
537549dc963fSmrg	  if test -z "$libdir"; then
537649dc963fSmrg	    func_fatal_error "cannot -dlopen a convenience library: \`$lib'"
537749dc963fSmrg	  fi
537849dc963fSmrg	  if test -z "$dlname" ||
537949dc963fSmrg	     test "$dlopen_support" != yes ||
538049dc963fSmrg	     test "$build_libtool_libs" = no; then
538149dc963fSmrg	    # If there is no dlname, no dlopen support or we're linking
538249dc963fSmrg	    # statically, we need to preload.  We also need to preload any
538349dc963fSmrg	    # dependent libraries so libltdl's deplib preloader doesn't
538449dc963fSmrg	    # bomb out in the load deplibs phase.
538549dc963fSmrg	    dlprefiles="$dlprefiles $lib $dependency_libs"
538649dc963fSmrg	  else
538749dc963fSmrg	    newdlfiles="$newdlfiles $lib"
538849dc963fSmrg	  fi
538949dc963fSmrg	  continue
539049dc963fSmrg	fi # $pass = dlopen
539149dc963fSmrg
539249dc963fSmrg	# We need an absolute path.
539349dc963fSmrg	case $ladir in
539449dc963fSmrg	[\\/]* | [A-Za-z]:[\\/]*) abs_ladir="$ladir" ;;
539549dc963fSmrg	*)
539649dc963fSmrg	  abs_ladir=`cd "$ladir" && pwd`
539749dc963fSmrg	  if test -z "$abs_ladir"; then
539849dc963fSmrg	    func_warning "cannot determine absolute directory name of \`$ladir'"
539949dc963fSmrg	    func_warning "passing it literally to the linker, although it might fail"
540049dc963fSmrg	    abs_ladir="$ladir"
540149dc963fSmrg	  fi
540249dc963fSmrg	  ;;
540349dc963fSmrg	esac
540449dc963fSmrg	func_basename "$lib"
540549dc963fSmrg	laname="$func_basename_result"
540649dc963fSmrg
540749dc963fSmrg	# Find the relevant object directory and library name.
540849dc963fSmrg	if test "X$installed" = Xyes; then
540949dc963fSmrg	  if test ! -f "$libdir/$linklib" && test -f "$abs_ladir/$linklib"; then
541049dc963fSmrg	    func_warning "library \`$lib' was moved."
541149dc963fSmrg	    dir="$ladir"
541249dc963fSmrg	    absdir="$abs_ladir"
541349dc963fSmrg	    libdir="$abs_ladir"
541449dc963fSmrg	  else
541549dc963fSmrg	    dir="$libdir"
541649dc963fSmrg	    absdir="$libdir"
541749dc963fSmrg	  fi
541849dc963fSmrg	  test "X$hardcode_automatic" = Xyes && avoidtemprpath=yes
541949dc963fSmrg	else
542049dc963fSmrg	  if test ! -f "$ladir/$objdir/$linklib" && test -f "$abs_ladir/$linklib"; then
542149dc963fSmrg	    dir="$ladir"
542249dc963fSmrg	    absdir="$abs_ladir"
542349dc963fSmrg	    # Remove this search path later
542449dc963fSmrg	    notinst_path="$notinst_path $abs_ladir"
542549dc963fSmrg	  else
542649dc963fSmrg	    dir="$ladir/$objdir"
542749dc963fSmrg	    absdir="$abs_ladir/$objdir"
542849dc963fSmrg	    # Remove this search path later
542949dc963fSmrg	    notinst_path="$notinst_path $abs_ladir"
543049dc963fSmrg	  fi
543149dc963fSmrg	fi # $installed = yes
543249dc963fSmrg	func_stripname 'lib' '.la' "$laname"
543349dc963fSmrg	name=$func_stripname_result
543449dc963fSmrg
543549dc963fSmrg	# This library was specified with -dlpreopen.
543649dc963fSmrg	if test "$pass" = dlpreopen; then
543749dc963fSmrg	  if test -z "$libdir" && test "$linkmode" = prog; then
543849dc963fSmrg	    func_fatal_error "only libraries may -dlpreopen a convenience library: \`$lib'"
543949dc963fSmrg	  fi
544049dc963fSmrg	  # Prefer using a static library (so that no silly _DYNAMIC symbols
544149dc963fSmrg	  # are required to link).
544249dc963fSmrg	  if test -n "$old_library"; then
544349dc963fSmrg	    newdlprefiles="$newdlprefiles $dir/$old_library"
544449dc963fSmrg	    # Keep a list of preopened convenience libraries to check
544549dc963fSmrg	    # that they are being used correctly in the link pass.
544649dc963fSmrg	    test -z "$libdir" && \
544749dc963fSmrg		dlpreconveniencelibs="$dlpreconveniencelibs $dir/$old_library"
544849dc963fSmrg	  # Otherwise, use the dlname, so that lt_dlopen finds it.
544949dc963fSmrg	  elif test -n "$dlname"; then
545049dc963fSmrg	    newdlprefiles="$newdlprefiles $dir/$dlname"
545149dc963fSmrg	  else
545249dc963fSmrg	    newdlprefiles="$newdlprefiles $dir/$linklib"
545349dc963fSmrg	  fi
545449dc963fSmrg	fi # $pass = dlpreopen
545549dc963fSmrg
545649dc963fSmrg	if test -z "$libdir"; then
545749dc963fSmrg	  # Link the convenience library
545849dc963fSmrg	  if test "$linkmode" = lib; then
545949dc963fSmrg	    deplibs="$dir/$old_library $deplibs"
546049dc963fSmrg	  elif test "$linkmode,$pass" = "prog,link"; then
546149dc963fSmrg	    compile_deplibs="$dir/$old_library $compile_deplibs"
546249dc963fSmrg	    finalize_deplibs="$dir/$old_library $finalize_deplibs"
546349dc963fSmrg	  else
546449dc963fSmrg	    deplibs="$lib $deplibs" # used for prog,scan pass
546549dc963fSmrg	  fi
546649dc963fSmrg	  continue
546749dc963fSmrg	fi
546849dc963fSmrg
546949dc963fSmrg
547049dc963fSmrg	if test "$linkmode" = prog && test "$pass" != link; then
547149dc963fSmrg	  newlib_search_path="$newlib_search_path $ladir"
547249dc963fSmrg	  deplibs="$lib $deplibs"
547349dc963fSmrg
547449dc963fSmrg	  linkalldeplibs=no
547549dc963fSmrg	  if test "$link_all_deplibs" != no || test -z "$library_names" ||
547649dc963fSmrg	     test "$build_libtool_libs" = no; then
547749dc963fSmrg	    linkalldeplibs=yes
547849dc963fSmrg	  fi
547949dc963fSmrg
548049dc963fSmrg	  tmp_libs=
548149dc963fSmrg	  for deplib in $dependency_libs; do
548249dc963fSmrg	    case $deplib in
548349dc963fSmrg	    -L*) func_stripname '-L' '' "$deplib"
548449dc963fSmrg	         newlib_search_path="$newlib_search_path $func_stripname_result"
548549dc963fSmrg		 ;;
548649dc963fSmrg	    esac
548749dc963fSmrg	    # Need to link against all dependency_libs?
548849dc963fSmrg	    if test "$linkalldeplibs" = yes; then
548949dc963fSmrg	      deplibs="$deplib $deplibs"
549049dc963fSmrg	    else
549149dc963fSmrg	      # Need to hardcode shared library paths
549249dc963fSmrg	      # or/and link against static libraries
549349dc963fSmrg	      newdependency_libs="$deplib $newdependency_libs"
549449dc963fSmrg	    fi
549549dc963fSmrg	    if $opt_duplicate_deps ; then
549649dc963fSmrg	      case "$tmp_libs " in
549749dc963fSmrg	      *" $deplib "*) specialdeplibs="$specialdeplibs $deplib" ;;
549849dc963fSmrg	      esac
549949dc963fSmrg	    fi
550049dc963fSmrg	    tmp_libs="$tmp_libs $deplib"
550149dc963fSmrg	  done # for deplib
550249dc963fSmrg	  continue
550349dc963fSmrg	fi # $linkmode = prog...
550449dc963fSmrg
550549dc963fSmrg	if test "$linkmode,$pass" = "prog,link"; then
550649dc963fSmrg	  if test -n "$library_names" &&
550749dc963fSmrg	     { { test "$prefer_static_libs" = no ||
550849dc963fSmrg	         test "$prefer_static_libs,$installed" = "built,yes"; } ||
550949dc963fSmrg	       test -z "$old_library"; }; then
551049dc963fSmrg	    # We need to hardcode the library path
551149dc963fSmrg	    if test -n "$shlibpath_var" && test -z "$avoidtemprpath" ; then
551249dc963fSmrg	      # Make sure the rpath contains only unique directories.
551349dc963fSmrg	      case "$temp_rpath:" in
551449dc963fSmrg	      *"$absdir:"*) ;;
551549dc963fSmrg	      *) temp_rpath="$temp_rpath$absdir:" ;;
551649dc963fSmrg	      esac
551749dc963fSmrg	    fi
551849dc963fSmrg
551949dc963fSmrg	    # Hardcode the library path.
552049dc963fSmrg	    # Skip directories that are in the system default run-time
552149dc963fSmrg	    # search path.
552249dc963fSmrg	    case " $sys_lib_dlsearch_path " in
552349dc963fSmrg	    *" $absdir "*) ;;
552449dc963fSmrg	    *)
552549dc963fSmrg	      case "$compile_rpath " in
552649dc963fSmrg	      *" $absdir "*) ;;
552749dc963fSmrg	      *) compile_rpath="$compile_rpath $absdir"
552849dc963fSmrg	      esac
552949dc963fSmrg	      ;;
553049dc963fSmrg	    esac
553149dc963fSmrg	    case " $sys_lib_dlsearch_path " in
553249dc963fSmrg	    *" $libdir "*) ;;
553349dc963fSmrg	    *)
553449dc963fSmrg	      case "$finalize_rpath " in
553549dc963fSmrg	      *" $libdir "*) ;;
553649dc963fSmrg	      *) finalize_rpath="$finalize_rpath $libdir"
553749dc963fSmrg	      esac
553849dc963fSmrg	      ;;
553949dc963fSmrg	    esac
554049dc963fSmrg	  fi # $linkmode,$pass = prog,link...
554149dc963fSmrg
554249dc963fSmrg	  if test "$alldeplibs" = yes &&
554349dc963fSmrg	     { test "$deplibs_check_method" = pass_all ||
554449dc963fSmrg	       { test "$build_libtool_libs" = yes &&
554549dc963fSmrg		 test -n "$library_names"; }; }; then
554649dc963fSmrg	    # We only need to search for static libraries
554749dc963fSmrg	    continue
554849dc963fSmrg	  fi
554949dc963fSmrg	fi
555049dc963fSmrg
555149dc963fSmrg	link_static=no # Whether the deplib will be linked statically
555249dc963fSmrg	use_static_libs=$prefer_static_libs
555349dc963fSmrg	if test "$use_static_libs" = built && test "$installed" = yes; then
555449dc963fSmrg	  use_static_libs=no
555549dc963fSmrg	fi
555649dc963fSmrg	if test -n "$library_names" &&
555749dc963fSmrg	   { test "$use_static_libs" = no || test -z "$old_library"; }; then
555849dc963fSmrg	  case $host in
555949dc963fSmrg	  *cygwin* | *mingw* | *cegcc*)
556049dc963fSmrg	      # No point in relinking DLLs because paths are not encoded
556149dc963fSmrg	      notinst_deplibs="$notinst_deplibs $lib"
556249dc963fSmrg	      need_relink=no
556349dc963fSmrg	    ;;
556449dc963fSmrg	  *)
556549dc963fSmrg	    if test "$installed" = no; then
556649dc963fSmrg	      notinst_deplibs="$notinst_deplibs $lib"
556749dc963fSmrg	      need_relink=yes
556849dc963fSmrg	    fi
556949dc963fSmrg	    ;;
557049dc963fSmrg	  esac
557149dc963fSmrg	  # This is a shared library
557249dc963fSmrg
557349dc963fSmrg	  # Warn about portability, can't link against -module's on some
557449dc963fSmrg	  # systems (darwin).  Don't bleat about dlopened modules though!
557549dc963fSmrg	  dlopenmodule=""
557649dc963fSmrg	  for dlpremoduletest in $dlprefiles; do
557749dc963fSmrg	    if test "X$dlpremoduletest" = "X$lib"; then
557849dc963fSmrg	      dlopenmodule="$dlpremoduletest"
557949dc963fSmrg	      break
558049dc963fSmrg	    fi
558149dc963fSmrg	  done
558249dc963fSmrg	  if test -z "$dlopenmodule" && test "$shouldnotlink" = yes && test "$pass" = link; then
558349dc963fSmrg	    $ECHO
558449dc963fSmrg	    if test "$linkmode" = prog; then
558549dc963fSmrg	      $ECHO "*** Warning: Linking the executable $output against the loadable module"
558649dc963fSmrg	    else
558749dc963fSmrg	      $ECHO "*** Warning: Linking the shared library $output against the loadable module"
558849dc963fSmrg	    fi
558949dc963fSmrg	    $ECHO "*** $linklib is not portable!"
559049dc963fSmrg	  fi
559149dc963fSmrg	  if test "$linkmode" = lib &&
559249dc963fSmrg	     test "$hardcode_into_libs" = yes; then
559349dc963fSmrg	    # Hardcode the library path.
559449dc963fSmrg	    # Skip directories that are in the system default run-time
559549dc963fSmrg	    # search path.
559649dc963fSmrg	    case " $sys_lib_dlsearch_path " in
559749dc963fSmrg	    *" $absdir "*) ;;
559849dc963fSmrg	    *)
559949dc963fSmrg	      case "$compile_rpath " in
560049dc963fSmrg	      *" $absdir "*) ;;
560149dc963fSmrg	      *) compile_rpath="$compile_rpath $absdir"
560249dc963fSmrg	      esac
560349dc963fSmrg	      ;;
560449dc963fSmrg	    esac
560549dc963fSmrg	    case " $sys_lib_dlsearch_path " in
560649dc963fSmrg	    *" $libdir "*) ;;
560749dc963fSmrg	    *)
560849dc963fSmrg	      case "$finalize_rpath " in
560949dc963fSmrg	      *" $libdir "*) ;;
561049dc963fSmrg	      *) finalize_rpath="$finalize_rpath $libdir"
561149dc963fSmrg	      esac
561249dc963fSmrg	      ;;
561349dc963fSmrg	    esac
561449dc963fSmrg	  fi
561549dc963fSmrg
561649dc963fSmrg	  if test -n "$old_archive_from_expsyms_cmds"; then
561749dc963fSmrg	    # figure out the soname
561849dc963fSmrg	    set dummy $library_names
561949dc963fSmrg	    shift
562049dc963fSmrg	    realname="$1"
562149dc963fSmrg	    shift
562249dc963fSmrg	    libname=`eval "\\$ECHO \"$libname_spec\""`
562349dc963fSmrg	    # use dlname if we got it. it's perfectly good, no?
562449dc963fSmrg	    if test -n "$dlname"; then
562549dc963fSmrg	      soname="$dlname"
562649dc963fSmrg	    elif test -n "$soname_spec"; then
562749dc963fSmrg	      # bleh windows
562849dc963fSmrg	      case $host in
562949dc963fSmrg	      *cygwin* | mingw* | *cegcc*)
563049dc963fSmrg	        func_arith $current - $age
563149dc963fSmrg		major=$func_arith_result
563249dc963fSmrg		versuffix="-$major"
563349dc963fSmrg		;;
563449dc963fSmrg	      esac
563549dc963fSmrg	      eval soname=\"$soname_spec\"
563649dc963fSmrg	    else
563749dc963fSmrg	      soname="$realname"
563849dc963fSmrg	    fi
563949dc963fSmrg
564049dc963fSmrg	    # Make a new name for the extract_expsyms_cmds to use
564149dc963fSmrg	    soroot="$soname"
564249dc963fSmrg	    func_basename "$soroot"
564349dc963fSmrg	    soname="$func_basename_result"
564449dc963fSmrg	    func_stripname 'lib' '.dll' "$soname"
564549dc963fSmrg	    newlib=libimp-$func_stripname_result.a
564649dc963fSmrg
564749dc963fSmrg	    # If the library has no export list, then create one now
564849dc963fSmrg	    if test -f "$output_objdir/$soname-def"; then :
564949dc963fSmrg	    else
565049dc963fSmrg	      func_verbose "extracting exported symbol list from \`$soname'"
565149dc963fSmrg	      func_execute_cmds "$extract_expsyms_cmds" 'exit $?'
565249dc963fSmrg	    fi
565349dc963fSmrg
565449dc963fSmrg	    # Create $newlib
565549dc963fSmrg	    if test -f "$output_objdir/$newlib"; then :; else
565649dc963fSmrg	      func_verbose "generating import library for \`$soname'"
565749dc963fSmrg	      func_execute_cmds "$old_archive_from_expsyms_cmds" 'exit $?'
565849dc963fSmrg	    fi
565949dc963fSmrg	    # make sure the library variables are pointing to the new library
566049dc963fSmrg	    dir=$output_objdir
566149dc963fSmrg	    linklib=$newlib
566249dc963fSmrg	  fi # test -n "$old_archive_from_expsyms_cmds"
566349dc963fSmrg
566449dc963fSmrg	  if test "$linkmode" = prog || test "$mode" != relink; then
566549dc963fSmrg	    add_shlibpath=
566649dc963fSmrg	    add_dir=
566749dc963fSmrg	    add=
566849dc963fSmrg	    lib_linked=yes
566949dc963fSmrg	    case $hardcode_action in
567049dc963fSmrg	    immediate | unsupported)
567149dc963fSmrg	      if test "$hardcode_direct" = no; then
567249dc963fSmrg		add="$dir/$linklib"
567349dc963fSmrg		case $host in
567449dc963fSmrg		  *-*-sco3.2v5.0.[024]*) add_dir="-L$dir" ;;
567549dc963fSmrg		  *-*-sysv4*uw2*) add_dir="-L$dir" ;;
567649dc963fSmrg		  *-*-sysv5OpenUNIX* | *-*-sysv5UnixWare7.[01].[10]* | \
567749dc963fSmrg		    *-*-unixware7*) add_dir="-L$dir" ;;
567849dc963fSmrg		  *-*-darwin* )
567949dc963fSmrg		    # if the lib is a (non-dlopened) module then we can not
568049dc963fSmrg		    # link against it, someone is ignoring the earlier warnings
568149dc963fSmrg		    if /usr/bin/file -L $add 2> /dev/null |
568249dc963fSmrg			 $GREP ": [^:]* bundle" >/dev/null ; then
568349dc963fSmrg		      if test "X$dlopenmodule" != "X$lib"; then
568449dc963fSmrg			$ECHO "*** Warning: lib $linklib is a module, not a shared library"
568549dc963fSmrg			if test -z "$old_library" ; then
568649dc963fSmrg			  $ECHO
568749dc963fSmrg			  $ECHO "*** And there doesn't seem to be a static archive available"
568849dc963fSmrg			  $ECHO "*** The link will probably fail, sorry"
568949dc963fSmrg			else
569049dc963fSmrg			  add="$dir/$old_library"
569149dc963fSmrg			fi
569249dc963fSmrg		      elif test -n "$old_library"; then
569349dc963fSmrg			add="$dir/$old_library"
569449dc963fSmrg		      fi
569549dc963fSmrg		    fi
569649dc963fSmrg		esac
569749dc963fSmrg	      elif test "$hardcode_minus_L" = no; then
569849dc963fSmrg		case $host in
569949dc963fSmrg		*-*-sunos*) add_shlibpath="$dir" ;;
570049dc963fSmrg		esac
570149dc963fSmrg		add_dir="-L$dir"
570249dc963fSmrg		add="-l$name"
570349dc963fSmrg	      elif test "$hardcode_shlibpath_var" = no; then
570449dc963fSmrg		add_shlibpath="$dir"
570549dc963fSmrg		add="-l$name"
570649dc963fSmrg	      else
570749dc963fSmrg		lib_linked=no
570849dc963fSmrg	      fi
570949dc963fSmrg	      ;;
571049dc963fSmrg	    relink)
571149dc963fSmrg	      if test "$hardcode_direct" = yes &&
571249dc963fSmrg	         test "$hardcode_direct_absolute" = no; then
571349dc963fSmrg		add="$dir/$linklib"
571449dc963fSmrg	      elif test "$hardcode_minus_L" = yes; then
571549dc963fSmrg		add_dir="-L$dir"
571649dc963fSmrg		# Try looking first in the location we're being installed to.
571749dc963fSmrg		if test -n "$inst_prefix_dir"; then
571849dc963fSmrg		  case $libdir in
571949dc963fSmrg		    [\\/]*)
572049dc963fSmrg		      add_dir="$add_dir -L$inst_prefix_dir$libdir"
572149dc963fSmrg		      ;;
572249dc963fSmrg		  esac
572349dc963fSmrg		fi
572449dc963fSmrg		add="-l$name"
572549dc963fSmrg	      elif test "$hardcode_shlibpath_var" = yes; then
572649dc963fSmrg		add_shlibpath="$dir"
572749dc963fSmrg		add="-l$name"
572849dc963fSmrg	      else
572949dc963fSmrg		lib_linked=no
573049dc963fSmrg	      fi
573149dc963fSmrg	      ;;
573249dc963fSmrg	    *) lib_linked=no ;;
573349dc963fSmrg	    esac
573449dc963fSmrg
573549dc963fSmrg	    if test "$lib_linked" != yes; then
573649dc963fSmrg	      func_fatal_configuration "unsupported hardcode properties"
573749dc963fSmrg	    fi
573849dc963fSmrg
573949dc963fSmrg	    if test -n "$add_shlibpath"; then
574049dc963fSmrg	      case :$compile_shlibpath: in
574149dc963fSmrg	      *":$add_shlibpath:"*) ;;
574249dc963fSmrg	      *) compile_shlibpath="$compile_shlibpath$add_shlibpath:" ;;
574349dc963fSmrg	      esac
574449dc963fSmrg	    fi
574549dc963fSmrg	    if test "$linkmode" = prog; then
574649dc963fSmrg	      test -n "$add_dir" && compile_deplibs="$add_dir $compile_deplibs"
574749dc963fSmrg	      test -n "$add" && compile_deplibs="$add $compile_deplibs"
574849dc963fSmrg	    else
574949dc963fSmrg	      test -n "$add_dir" && deplibs="$add_dir $deplibs"
575049dc963fSmrg	      test -n "$add" && deplibs="$add $deplibs"
575149dc963fSmrg	      if test "$hardcode_direct" != yes &&
575249dc963fSmrg		 test "$hardcode_minus_L" != yes &&
575349dc963fSmrg		 test "$hardcode_shlibpath_var" = yes; then
575449dc963fSmrg		case :$finalize_shlibpath: in
575549dc963fSmrg		*":$libdir:"*) ;;
575649dc963fSmrg		*) finalize_shlibpath="$finalize_shlibpath$libdir:" ;;
575749dc963fSmrg		esac
575849dc963fSmrg	      fi
575949dc963fSmrg	    fi
576049dc963fSmrg	  fi
576149dc963fSmrg
576249dc963fSmrg	  if test "$linkmode" = prog || test "$mode" = relink; then
576349dc963fSmrg	    add_shlibpath=
576449dc963fSmrg	    add_dir=
576549dc963fSmrg	    add=
576649dc963fSmrg	    # Finalize command for both is simple: just hardcode it.
576749dc963fSmrg	    if test "$hardcode_direct" = yes &&
576849dc963fSmrg	       test "$hardcode_direct_absolute" = no; then
576949dc963fSmrg	      add="$libdir/$linklib"
577049dc963fSmrg	    elif test "$hardcode_minus_L" = yes; then
577149dc963fSmrg	      add_dir="-L$libdir"
577249dc963fSmrg	      add="-l$name"
577349dc963fSmrg	    elif test "$hardcode_shlibpath_var" = yes; then
577449dc963fSmrg	      case :$finalize_shlibpath: in
577549dc963fSmrg	      *":$libdir:"*) ;;
577649dc963fSmrg	      *) finalize_shlibpath="$finalize_shlibpath$libdir:" ;;
577749dc963fSmrg	      esac
577849dc963fSmrg	      add="-l$name"
577949dc963fSmrg	    elif test "$hardcode_automatic" = yes; then
578049dc963fSmrg	      if test -n "$inst_prefix_dir" &&
578149dc963fSmrg		 test -f "$inst_prefix_dir$libdir/$linklib" ; then
578249dc963fSmrg		add="$inst_prefix_dir$libdir/$linklib"
578349dc963fSmrg	      else
578449dc963fSmrg		add="$libdir/$linklib"
578549dc963fSmrg	      fi
578649dc963fSmrg	    else
578749dc963fSmrg	      # We cannot seem to hardcode it, guess we'll fake it.
578849dc963fSmrg	      add_dir="-L$libdir"
578949dc963fSmrg	      # Try looking first in the location we're being installed to.
579049dc963fSmrg	      if test -n "$inst_prefix_dir"; then
579149dc963fSmrg		case $libdir in
579249dc963fSmrg		  [\\/]*)
579349dc963fSmrg		    add_dir="$add_dir -L$inst_prefix_dir$libdir"
579449dc963fSmrg		    ;;
579549dc963fSmrg		esac
579649dc963fSmrg	      fi
579749dc963fSmrg	      add="-l$name"
579849dc963fSmrg	    fi
579949dc963fSmrg
580049dc963fSmrg	    if test "$linkmode" = prog; then
580149dc963fSmrg	      test -n "$add_dir" && finalize_deplibs="$add_dir $finalize_deplibs"
580249dc963fSmrg	      test -n "$add" && finalize_deplibs="$add $finalize_deplibs"
580349dc963fSmrg	    else
580449dc963fSmrg	      test -n "$add_dir" && deplibs="$add_dir $deplibs"
580549dc963fSmrg	      test -n "$add" && deplibs="$add $deplibs"
580649dc963fSmrg	    fi
580749dc963fSmrg	  fi
580849dc963fSmrg	elif test "$linkmode" = prog; then
580949dc963fSmrg	  # Here we assume that one of hardcode_direct or hardcode_minus_L
581049dc963fSmrg	  # is not unsupported.  This is valid on all known static and
581149dc963fSmrg	  # shared platforms.
581249dc963fSmrg	  if test "$hardcode_direct" != unsupported; then
581349dc963fSmrg	    test -n "$old_library" && linklib="$old_library"
581449dc963fSmrg	    compile_deplibs="$dir/$linklib $compile_deplibs"
581549dc963fSmrg	    finalize_deplibs="$dir/$linklib $finalize_deplibs"
581649dc963fSmrg	  else
581749dc963fSmrg	    compile_deplibs="-l$name -L$dir $compile_deplibs"
581849dc963fSmrg	    finalize_deplibs="-l$name -L$dir $finalize_deplibs"
581949dc963fSmrg	  fi
582049dc963fSmrg	elif test "$build_libtool_libs" = yes; then
582149dc963fSmrg	  # Not a shared library
582249dc963fSmrg	  if test "$deplibs_check_method" != pass_all; then
582349dc963fSmrg	    # We're trying link a shared library against a static one
582449dc963fSmrg	    # but the system doesn't support it.
582549dc963fSmrg
582649dc963fSmrg	    # Just print a warning and add the library to dependency_libs so
582749dc963fSmrg	    # that the program can be linked against the static library.
582849dc963fSmrg	    $ECHO
582949dc963fSmrg	    $ECHO "*** Warning: This system can not link to static lib archive $lib."
583049dc963fSmrg	    $ECHO "*** I have the capability to make that library automatically link in when"
583149dc963fSmrg	    $ECHO "*** you link to this library.  But I can only do this if you have a"
583249dc963fSmrg	    $ECHO "*** shared version of the library, which you do not appear to have."
583349dc963fSmrg	    if test "$module" = yes; then
583449dc963fSmrg	      $ECHO "*** But as you try to build a module library, libtool will still create "
583549dc963fSmrg	      $ECHO "*** a static module, that should work as long as the dlopening application"
583649dc963fSmrg	      $ECHO "*** is linked with the -dlopen flag to resolve symbols at runtime."
583749dc963fSmrg	      if test -z "$global_symbol_pipe"; then
583849dc963fSmrg		$ECHO
583949dc963fSmrg		$ECHO "*** However, this would only work if libtool was able to extract symbol"
584049dc963fSmrg		$ECHO "*** lists from a program, using \`nm' or equivalent, but libtool could"
584149dc963fSmrg		$ECHO "*** not find such a program.  So, this module is probably useless."
584249dc963fSmrg		$ECHO "*** \`nm' from GNU binutils and a full rebuild may help."
584349dc963fSmrg	      fi
584449dc963fSmrg	      if test "$build_old_libs" = no; then
584549dc963fSmrg		build_libtool_libs=module
584649dc963fSmrg		build_old_libs=yes
584749dc963fSmrg	      else
584849dc963fSmrg		build_libtool_libs=no
584949dc963fSmrg	      fi
585049dc963fSmrg	    fi
585149dc963fSmrg	  else
585249dc963fSmrg	    deplibs="$dir/$old_library $deplibs"
585349dc963fSmrg	    link_static=yes
585449dc963fSmrg	  fi
585549dc963fSmrg	fi # link shared/static library?
585649dc963fSmrg
585749dc963fSmrg	if test "$linkmode" = lib; then
585849dc963fSmrg	  if test -n "$dependency_libs" &&
585949dc963fSmrg	     { test "$hardcode_into_libs" != yes ||
586049dc963fSmrg	       test "$build_old_libs" = yes ||
586149dc963fSmrg	       test "$link_static" = yes; }; then
586249dc963fSmrg	    # Extract -R from dependency_libs
586349dc963fSmrg	    temp_deplibs=
586449dc963fSmrg	    for libdir in $dependency_libs; do
586549dc963fSmrg	      case $libdir in
586649dc963fSmrg	      -R*) func_stripname '-R' '' "$libdir"
586749dc963fSmrg	           temp_xrpath=$func_stripname_result
586849dc963fSmrg		   case " $xrpath " in
586949dc963fSmrg		   *" $temp_xrpath "*) ;;
587049dc963fSmrg		   *) xrpath="$xrpath $temp_xrpath";;
587149dc963fSmrg		   esac;;
587249dc963fSmrg	      *) temp_deplibs="$temp_deplibs $libdir";;
587349dc963fSmrg	      esac
587449dc963fSmrg	    done
587549dc963fSmrg	    dependency_libs="$temp_deplibs"
587649dc963fSmrg	  fi
587749dc963fSmrg
587849dc963fSmrg	  newlib_search_path="$newlib_search_path $absdir"
587949dc963fSmrg	  # Link against this library
588049dc963fSmrg	  test "$link_static" = no && newdependency_libs="$abs_ladir/$laname $newdependency_libs"
588149dc963fSmrg	  # ... and its dependency_libs
588249dc963fSmrg	  tmp_libs=
588349dc963fSmrg	  for deplib in $dependency_libs; do
588449dc963fSmrg	    newdependency_libs="$deplib $newdependency_libs"
588549dc963fSmrg	    if $opt_duplicate_deps ; then
588649dc963fSmrg	      case "$tmp_libs " in
588749dc963fSmrg	      *" $deplib "*) specialdeplibs="$specialdeplibs $deplib" ;;
588849dc963fSmrg	      esac
588949dc963fSmrg	    fi
589049dc963fSmrg	    tmp_libs="$tmp_libs $deplib"
589149dc963fSmrg	  done
589249dc963fSmrg
589349dc963fSmrg	  if test "$link_all_deplibs" != no; then
589449dc963fSmrg	    # Add the search paths of all dependency libraries
589549dc963fSmrg	    for deplib in $dependency_libs; do
589649dc963fSmrg	      case $deplib in
589749dc963fSmrg	      -L*) path="$deplib" ;;
589849dc963fSmrg	      *.la)
589949dc963fSmrg	        func_dirname "$deplib" "" "."
590049dc963fSmrg		dir="$func_dirname_result"
590149dc963fSmrg		# We need an absolute path.
590249dc963fSmrg		case $dir in
590349dc963fSmrg		[\\/]* | [A-Za-z]:[\\/]*) absdir="$dir" ;;
590449dc963fSmrg		*)
590549dc963fSmrg		  absdir=`cd "$dir" && pwd`
590649dc963fSmrg		  if test -z "$absdir"; then
590749dc963fSmrg		    func_warning "cannot determine absolute directory name of \`$dir'"
590849dc963fSmrg		    absdir="$dir"
590949dc963fSmrg		  fi
591049dc963fSmrg		  ;;
591149dc963fSmrg		esac
591249dc963fSmrg		if $GREP "^installed=no" $deplib > /dev/null; then
591349dc963fSmrg		case $host in
591449dc963fSmrg		*-*-darwin*)
591549dc963fSmrg		  depdepl=
591649dc963fSmrg		  eval deplibrary_names=`${SED} -n -e 's/^library_names=\(.*\)$/\1/p' $deplib`
591749dc963fSmrg		  if test -n "$deplibrary_names" ; then
591849dc963fSmrg		    for tmp in $deplibrary_names ; do
591949dc963fSmrg		      depdepl=$tmp
592049dc963fSmrg		    done
592149dc963fSmrg		    if test -f "$absdir/$objdir/$depdepl" ; then
592249dc963fSmrg		      depdepl="$absdir/$objdir/$depdepl"
592349dc963fSmrg		      darwin_install_name=`${OTOOL} -L $depdepl | awk '{if (NR == 2) {print $1;exit}}'`
592449dc963fSmrg                      if test -z "$darwin_install_name"; then
592549dc963fSmrg                          darwin_install_name=`${OTOOL64} -L $depdepl  | awk '{if (NR == 2) {print $1;exit}}'`
592649dc963fSmrg                      fi
592749dc963fSmrg		      compiler_flags="$compiler_flags ${wl}-dylib_file ${wl}${darwin_install_name}:${depdepl}"
592849dc963fSmrg		      linker_flags="$linker_flags -dylib_file ${darwin_install_name}:${depdepl}"
592949dc963fSmrg		      path=
593049dc963fSmrg		    fi
593149dc963fSmrg		  fi
593249dc963fSmrg		  ;;
593349dc963fSmrg		*)
593449dc963fSmrg		  path="-L$absdir/$objdir"
593549dc963fSmrg		  ;;
593649dc963fSmrg		esac
593749dc963fSmrg		else
593849dc963fSmrg		  eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $deplib`
593949dc963fSmrg		  test -z "$libdir" && \
594049dc963fSmrg		    func_fatal_error "\`$deplib' is not a valid libtool archive"
594149dc963fSmrg		  test "$absdir" != "$libdir" && \
594249dc963fSmrg		    func_warning "\`$deplib' seems to be moved"
594349dc963fSmrg
594449dc963fSmrg		  path="-L$absdir"
594549dc963fSmrg		fi
594649dc963fSmrg		;;
594749dc963fSmrg	      esac
594849dc963fSmrg	      case " $deplibs " in
594949dc963fSmrg	      *" $path "*) ;;
595049dc963fSmrg	      *) deplibs="$path $deplibs" ;;
595149dc963fSmrg	      esac
595249dc963fSmrg	    done
595349dc963fSmrg	  fi # link_all_deplibs != no
595449dc963fSmrg	fi # linkmode = lib
595549dc963fSmrg      done # for deplib in $libs
595649dc963fSmrg      if test "$pass" = link; then
595749dc963fSmrg	if test "$linkmode" = "prog"; then
595849dc963fSmrg	  compile_deplibs="$new_inherited_linker_flags $compile_deplibs"
595949dc963fSmrg	  finalize_deplibs="$new_inherited_linker_flags $finalize_deplibs"
596049dc963fSmrg	else
596149dc963fSmrg	  compiler_flags="$compiler_flags "`$ECHO "X $new_inherited_linker_flags" | $Xsed -e 's% \([^ $]*\).ltframework% -framework \1%g'`
596249dc963fSmrg	fi
596349dc963fSmrg      fi
596449dc963fSmrg      dependency_libs="$newdependency_libs"
596549dc963fSmrg      if test "$pass" = dlpreopen; then
596649dc963fSmrg	# Link the dlpreopened libraries before other libraries
596749dc963fSmrg	for deplib in $save_deplibs; do
596849dc963fSmrg	  deplibs="$deplib $deplibs"
596949dc963fSmrg	done
597049dc963fSmrg      fi
597149dc963fSmrg      if test "$pass" != dlopen; then
597249dc963fSmrg	if test "$pass" != conv; then
597349dc963fSmrg	  # Make sure lib_search_path contains only unique directories.
597449dc963fSmrg	  lib_search_path=
597549dc963fSmrg	  for dir in $newlib_search_path; do
597649dc963fSmrg	    case "$lib_search_path " in
597749dc963fSmrg	    *" $dir "*) ;;
597849dc963fSmrg	    *) lib_search_path="$lib_search_path $dir" ;;
597949dc963fSmrg	    esac
598049dc963fSmrg	  done
598149dc963fSmrg	  newlib_search_path=
598249dc963fSmrg	fi
598349dc963fSmrg
598449dc963fSmrg	if test "$linkmode,$pass" != "prog,link"; then
598549dc963fSmrg	  vars="deplibs"
598649dc963fSmrg	else
598749dc963fSmrg	  vars="compile_deplibs finalize_deplibs"
598849dc963fSmrg	fi
598949dc963fSmrg	for var in $vars dependency_libs; do
599049dc963fSmrg	  # Add libraries to $var in reverse order
599149dc963fSmrg	  eval tmp_libs=\"\$$var\"
599249dc963fSmrg	  new_libs=
599349dc963fSmrg	  for deplib in $tmp_libs; do
599449dc963fSmrg	    # FIXME: Pedantically, this is the right thing to do, so
599549dc963fSmrg	    #        that some nasty dependency loop isn't accidentally
599649dc963fSmrg	    #        broken:
599749dc963fSmrg	    #new_libs="$deplib $new_libs"
599849dc963fSmrg	    # Pragmatically, this seems to cause very few problems in
599949dc963fSmrg	    # practice:
600049dc963fSmrg	    case $deplib in
600149dc963fSmrg	    -L*) new_libs="$deplib $new_libs" ;;
600249dc963fSmrg	    -R*) ;;
600349dc963fSmrg	    *)
600449dc963fSmrg	      # And here is the reason: when a library appears more
600549dc963fSmrg	      # than once as an explicit dependence of a library, or
600649dc963fSmrg	      # is implicitly linked in more than once by the
600749dc963fSmrg	      # compiler, it is considered special, and multiple
600849dc963fSmrg	      # occurrences thereof are not removed.  Compare this
600949dc963fSmrg	      # with having the same library being listed as a
601049dc963fSmrg	      # dependency of multiple other libraries: in this case,
601149dc963fSmrg	      # we know (pedantically, we assume) the library does not
601249dc963fSmrg	      # need to be listed more than once, so we keep only the
601349dc963fSmrg	      # last copy.  This is not always right, but it is rare
601449dc963fSmrg	      # enough that we require users that really mean to play
601549dc963fSmrg	      # such unportable linking tricks to link the library
601649dc963fSmrg	      # using -Wl,-lname, so that libtool does not consider it
601749dc963fSmrg	      # for duplicate removal.
601849dc963fSmrg	      case " $specialdeplibs " in
601949dc963fSmrg	      *" $deplib "*) new_libs="$deplib $new_libs" ;;
602049dc963fSmrg	      *)
602149dc963fSmrg		case " $new_libs " in
602249dc963fSmrg		*" $deplib "*) ;;
602349dc963fSmrg		*) new_libs="$deplib $new_libs" ;;
602449dc963fSmrg		esac
602549dc963fSmrg		;;
602649dc963fSmrg	      esac
602749dc963fSmrg	      ;;
602849dc963fSmrg	    esac
602949dc963fSmrg	  done
603049dc963fSmrg	  tmp_libs=
603149dc963fSmrg	  for deplib in $new_libs; do
603249dc963fSmrg	    case $deplib in
603349dc963fSmrg	    -L*)
603449dc963fSmrg	      case " $tmp_libs " in
603549dc963fSmrg	      *" $deplib "*) ;;
603649dc963fSmrg	      *) tmp_libs="$tmp_libs $deplib" ;;
603749dc963fSmrg	      esac
603849dc963fSmrg	      ;;
603949dc963fSmrg	    *) tmp_libs="$tmp_libs $deplib" ;;
604049dc963fSmrg	    esac
604149dc963fSmrg	  done
604249dc963fSmrg	  eval $var=\"$tmp_libs\"
604349dc963fSmrg	done # for var
604449dc963fSmrg      fi
604549dc963fSmrg      # Last step: remove runtime libs from dependency_libs
604649dc963fSmrg      # (they stay in deplibs)
604749dc963fSmrg      tmp_libs=
604849dc963fSmrg      for i in $dependency_libs ; do
604949dc963fSmrg	case " $predeps $postdeps $compiler_lib_search_path " in
605049dc963fSmrg	*" $i "*)
605149dc963fSmrg	  i=""
605249dc963fSmrg	  ;;
605349dc963fSmrg	esac
605449dc963fSmrg	if test -n "$i" ; then
605549dc963fSmrg	  tmp_libs="$tmp_libs $i"
605649dc963fSmrg	fi
605749dc963fSmrg      done
605849dc963fSmrg      dependency_libs=$tmp_libs
605949dc963fSmrg    done # for pass
606049dc963fSmrg    if test "$linkmode" = prog; then
606149dc963fSmrg      dlfiles="$newdlfiles"
606249dc963fSmrg    fi
606349dc963fSmrg    if test "$linkmode" = prog || test "$linkmode" = lib; then
606449dc963fSmrg      dlprefiles="$newdlprefiles"
606549dc963fSmrg    fi
606649dc963fSmrg
606749dc963fSmrg    case $linkmode in
606849dc963fSmrg    oldlib)
606949dc963fSmrg      if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then
607049dc963fSmrg	func_warning "\`-dlopen' is ignored for archives"
607149dc963fSmrg      fi
607249dc963fSmrg
607349dc963fSmrg      case " $deplibs" in
607449dc963fSmrg      *\ -l* | *\ -L*)
607549dc963fSmrg	func_warning "\`-l' and \`-L' are ignored for archives" ;;
607649dc963fSmrg      esac
607749dc963fSmrg
607849dc963fSmrg      test -n "$rpath" && \
607949dc963fSmrg	func_warning "\`-rpath' is ignored for archives"
608049dc963fSmrg
608149dc963fSmrg      test -n "$xrpath" && \
608249dc963fSmrg	func_warning "\`-R' is ignored for archives"
608349dc963fSmrg
608449dc963fSmrg      test -n "$vinfo" && \
608549dc963fSmrg	func_warning "\`-version-info/-version-number' is ignored for archives"
608649dc963fSmrg
608749dc963fSmrg      test -n "$release" && \
608849dc963fSmrg	func_warning "\`-release' is ignored for archives"
608949dc963fSmrg
609049dc963fSmrg      test -n "$export_symbols$export_symbols_regex" && \
609149dc963fSmrg	func_warning "\`-export-symbols' is ignored for archives"
609249dc963fSmrg
609349dc963fSmrg      # Now set the variables for building old libraries.
609449dc963fSmrg      build_libtool_libs=no
609549dc963fSmrg      oldlibs="$output"
609649dc963fSmrg      objs="$objs$old_deplibs"
609749dc963fSmrg      ;;
609849dc963fSmrg
609949dc963fSmrg    lib)
610049dc963fSmrg      # Make sure we only generate libraries of the form `libNAME.la'.
610149dc963fSmrg      case $outputname in
610249dc963fSmrg      lib*)
610349dc963fSmrg	func_stripname 'lib' '.la' "$outputname"
610449dc963fSmrg	name=$func_stripname_result
610549dc963fSmrg	eval shared_ext=\"$shrext_cmds\"
610649dc963fSmrg	eval libname=\"$libname_spec\"
610749dc963fSmrg	;;
610849dc963fSmrg      *)
610949dc963fSmrg	test "$module" = no && \
611049dc963fSmrg	  func_fatal_help "libtool library \`$output' must begin with \`lib'"
611149dc963fSmrg
611249dc963fSmrg	if test "$need_lib_prefix" != no; then
611349dc963fSmrg	  # Add the "lib" prefix for modules if required
611449dc963fSmrg	  func_stripname '' '.la' "$outputname"
611549dc963fSmrg	  name=$func_stripname_result
611649dc963fSmrg	  eval shared_ext=\"$shrext_cmds\"
611749dc963fSmrg	  eval libname=\"$libname_spec\"
611849dc963fSmrg	else
611949dc963fSmrg	  func_stripname '' '.la' "$outputname"
612049dc963fSmrg	  libname=$func_stripname_result
612149dc963fSmrg	fi
612249dc963fSmrg	;;
612349dc963fSmrg      esac
612449dc963fSmrg
612549dc963fSmrg      if test -n "$objs"; then
612649dc963fSmrg	if test "$deplibs_check_method" != pass_all; then
612749dc963fSmrg	  func_fatal_error "cannot build libtool library \`$output' from non-libtool objects on this host:$objs"
612849dc963fSmrg	else
612949dc963fSmrg	  $ECHO
613049dc963fSmrg	  $ECHO "*** Warning: Linking the shared library $output against the non-libtool"
613149dc963fSmrg	  $ECHO "*** objects $objs is not portable!"
613249dc963fSmrg	  libobjs="$libobjs $objs"
613349dc963fSmrg	fi
613449dc963fSmrg      fi
613549dc963fSmrg
613649dc963fSmrg      test "$dlself" != no && \
613749dc963fSmrg	func_warning "\`-dlopen self' is ignored for libtool libraries"
613849dc963fSmrg
613949dc963fSmrg      set dummy $rpath
614049dc963fSmrg      shift
614149dc963fSmrg      test "$#" -gt 1 && \
614249dc963fSmrg	func_warning "ignoring multiple \`-rpath's for a libtool library"
614349dc963fSmrg
614449dc963fSmrg      install_libdir="$1"
614549dc963fSmrg
614649dc963fSmrg      oldlibs=
614749dc963fSmrg      if test -z "$rpath"; then
614849dc963fSmrg	if test "$build_libtool_libs" = yes; then
614949dc963fSmrg	  # Building a libtool convenience library.
615049dc963fSmrg	  # Some compilers have problems with a `.al' extension so
615149dc963fSmrg	  # convenience libraries should have the same extension an
615249dc963fSmrg	  # archive normally would.
615349dc963fSmrg	  oldlibs="$output_objdir/$libname.$libext $oldlibs"
615449dc963fSmrg	  build_libtool_libs=convenience
615549dc963fSmrg	  build_old_libs=yes
615649dc963fSmrg	fi
615749dc963fSmrg
615849dc963fSmrg	test -n "$vinfo" && \
615949dc963fSmrg	  func_warning "\`-version-info/-version-number' is ignored for convenience libraries"
616049dc963fSmrg
616149dc963fSmrg	test -n "$release" && \
616249dc963fSmrg	  func_warning "\`-release' is ignored for convenience libraries"
616349dc963fSmrg      else
616449dc963fSmrg
616549dc963fSmrg	# Parse the version information argument.
616649dc963fSmrg	save_ifs="$IFS"; IFS=':'
616749dc963fSmrg	set dummy $vinfo 0 0 0
616849dc963fSmrg	shift
616949dc963fSmrg	IFS="$save_ifs"
617049dc963fSmrg
617149dc963fSmrg	test -n "$7" && \
617249dc963fSmrg	  func_fatal_help "too many parameters to \`-version-info'"
617349dc963fSmrg
617449dc963fSmrg	# convert absolute version numbers to libtool ages
617549dc963fSmrg	# this retains compatibility with .la files and attempts
617649dc963fSmrg	# to make the code below a bit more comprehensible
617749dc963fSmrg
617849dc963fSmrg	case $vinfo_number in
617949dc963fSmrg	yes)
618049dc963fSmrg	  number_major="$1"
618149dc963fSmrg	  number_minor="$2"
618249dc963fSmrg	  number_revision="$3"
618349dc963fSmrg	  #
618449dc963fSmrg	  # There are really only two kinds -- those that
618549dc963fSmrg	  # use the current revision as the major version
618649dc963fSmrg	  # and those that subtract age and use age as
618749dc963fSmrg	  # a minor version.  But, then there is irix
618849dc963fSmrg	  # which has an extra 1 added just for fun
618949dc963fSmrg	  #
619049dc963fSmrg	  case $version_type in
619149dc963fSmrg	  darwin|linux|osf|windows|none)
619249dc963fSmrg	    func_arith $number_major + $number_minor
619349dc963fSmrg	    current=$func_arith_result
619449dc963fSmrg	    age="$number_minor"
619549dc963fSmrg	    revision="$number_revision"
619649dc963fSmrg	    ;;
619749dc963fSmrg	  freebsd-aout|freebsd-elf|sunos)
619849dc963fSmrg	    current="$number_major"
619949dc963fSmrg	    revision="$number_minor"
620049dc963fSmrg	    age="0"
620149dc963fSmrg	    ;;
620249dc963fSmrg	  irix|nonstopux)
620349dc963fSmrg	    func_arith $number_major + $number_minor
620449dc963fSmrg	    current=$func_arith_result
620549dc963fSmrg	    age="$number_minor"
620649dc963fSmrg	    revision="$number_minor"
620749dc963fSmrg	    lt_irix_increment=no
620849dc963fSmrg	    ;;
620949dc963fSmrg	  esac
621049dc963fSmrg	  ;;
621149dc963fSmrg	no)
621249dc963fSmrg	  current="$1"
621349dc963fSmrg	  revision="$2"
621449dc963fSmrg	  age="$3"
621549dc963fSmrg	  ;;
621649dc963fSmrg	esac
621749dc963fSmrg
621849dc963fSmrg	# Check that each of the things are valid numbers.
621949dc963fSmrg	case $current in
622049dc963fSmrg	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]) ;;
622149dc963fSmrg	*)
622249dc963fSmrg	  func_error "CURRENT \`$current' must be a nonnegative integer"
622349dc963fSmrg	  func_fatal_error "\`$vinfo' is not valid version information"
622449dc963fSmrg	  ;;
622549dc963fSmrg	esac
622649dc963fSmrg
622749dc963fSmrg	case $revision in
622849dc963fSmrg	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]) ;;
622949dc963fSmrg	*)
623049dc963fSmrg	  func_error "REVISION \`$revision' must be a nonnegative integer"
623149dc963fSmrg	  func_fatal_error "\`$vinfo' is not valid version information"
623249dc963fSmrg	  ;;
623349dc963fSmrg	esac
623449dc963fSmrg
623549dc963fSmrg	case $age in
623649dc963fSmrg	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]) ;;
623749dc963fSmrg	*)
623849dc963fSmrg	  func_error "AGE \`$age' must be a nonnegative integer"
623949dc963fSmrg	  func_fatal_error "\`$vinfo' is not valid version information"
624049dc963fSmrg	  ;;
624149dc963fSmrg	esac
624249dc963fSmrg
624349dc963fSmrg	if test "$age" -gt "$current"; then
624449dc963fSmrg	  func_error "AGE \`$age' is greater than the current interface number \`$current'"
624549dc963fSmrg	  func_fatal_error "\`$vinfo' is not valid version information"
624649dc963fSmrg	fi
624749dc963fSmrg
624849dc963fSmrg	# Calculate the version variables.
624949dc963fSmrg	major=
625049dc963fSmrg	versuffix=
625149dc963fSmrg	verstring=
625249dc963fSmrg	case $version_type in
625349dc963fSmrg	none) ;;
625449dc963fSmrg
625549dc963fSmrg	darwin)
625649dc963fSmrg	  # Like Linux, but with the current version available in
625749dc963fSmrg	  # verstring for coding it into the library header
625849dc963fSmrg	  func_arith $current - $age
625949dc963fSmrg	  major=.$func_arith_result
626049dc963fSmrg	  versuffix="$major.$age.$revision"
626149dc963fSmrg	  # Darwin ld doesn't like 0 for these options...
626249dc963fSmrg	  func_arith $current + 1
626349dc963fSmrg	  minor_current=$func_arith_result
626449dc963fSmrg	  xlcverstring="${wl}-compatibility_version ${wl}$minor_current ${wl}-current_version ${wl}$minor_current.$revision"
626549dc963fSmrg	  verstring="-compatibility_version $minor_current -current_version $minor_current.$revision"
626649dc963fSmrg	  ;;
626749dc963fSmrg
626849dc963fSmrg	freebsd-aout)
626949dc963fSmrg	  major=".$current"
627049dc963fSmrg	  versuffix=".$current.$revision";
627149dc963fSmrg	  ;;
627249dc963fSmrg
627349dc963fSmrg	freebsd-elf)
627449dc963fSmrg	  major=".$current"
627549dc963fSmrg	  versuffix=".$current"
627649dc963fSmrg	  ;;
627749dc963fSmrg
627849dc963fSmrg	irix | nonstopux)
627949dc963fSmrg	  if test "X$lt_irix_increment" = "Xno"; then
628049dc963fSmrg	    func_arith $current - $age
628149dc963fSmrg	  else
628249dc963fSmrg	    func_arith $current - $age + 1
628349dc963fSmrg	  fi
628449dc963fSmrg	  major=$func_arith_result
628549dc963fSmrg
628649dc963fSmrg	  case $version_type in
628749dc963fSmrg	    nonstopux) verstring_prefix=nonstopux ;;
628849dc963fSmrg	    *)         verstring_prefix=sgi ;;
628949dc963fSmrg	  esac
629049dc963fSmrg	  verstring="$verstring_prefix$major.$revision"
629149dc963fSmrg
629249dc963fSmrg	  # Add in all the interfaces that we are compatible with.
629349dc963fSmrg	  loop=$revision
629449dc963fSmrg	  while test "$loop" -ne 0; do
629549dc963fSmrg	    func_arith $revision - $loop
629649dc963fSmrg	    iface=$func_arith_result
629749dc963fSmrg	    func_arith $loop - 1
629849dc963fSmrg	    loop=$func_arith_result
629949dc963fSmrg	    verstring="$verstring_prefix$major.$iface:$verstring"
630049dc963fSmrg	  done
630149dc963fSmrg
630249dc963fSmrg	  # Before this point, $major must not contain `.'.
630349dc963fSmrg	  major=.$major
630449dc963fSmrg	  versuffix="$major.$revision"
630549dc963fSmrg	  ;;
630649dc963fSmrg
630749dc963fSmrg	linux)
630849dc963fSmrg	  func_arith $current - $age
630949dc963fSmrg	  major=.$func_arith_result
631049dc963fSmrg	  versuffix="$major.$age.$revision"
631149dc963fSmrg	  ;;
631249dc963fSmrg
631349dc963fSmrg	osf)
631449dc963fSmrg	  func_arith $current - $age
631549dc963fSmrg	  major=.$func_arith_result
631649dc963fSmrg	  versuffix=".$current.$age.$revision"
631749dc963fSmrg	  verstring="$current.$age.$revision"
631849dc963fSmrg
631949dc963fSmrg	  # Add in all the interfaces that we are compatible with.
632049dc963fSmrg	  loop=$age
632149dc963fSmrg	  while test "$loop" -ne 0; do
632249dc963fSmrg	    func_arith $current - $loop
632349dc963fSmrg	    iface=$func_arith_result
632449dc963fSmrg	    func_arith $loop - 1
632549dc963fSmrg	    loop=$func_arith_result
632649dc963fSmrg	    verstring="$verstring:${iface}.0"
632749dc963fSmrg	  done
632849dc963fSmrg
632949dc963fSmrg	  # Make executables depend on our current version.
633049dc963fSmrg	  verstring="$verstring:${current}.0"
633149dc963fSmrg	  ;;
633249dc963fSmrg
633349dc963fSmrg	qnx)
633449dc963fSmrg	  major=".$current"
633549dc963fSmrg	  versuffix=".$current"
633649dc963fSmrg	  ;;
633749dc963fSmrg
633849dc963fSmrg	sunos)
633949dc963fSmrg	  major=".$current"
634049dc963fSmrg	  versuffix=".$current.$revision"
634149dc963fSmrg	  ;;
634249dc963fSmrg
634349dc963fSmrg	windows)
634449dc963fSmrg	  # Use '-' rather than '.', since we only want one
634549dc963fSmrg	  # extension on DOS 8.3 filesystems.
634649dc963fSmrg	  func_arith $current - $age
634749dc963fSmrg	  major=$func_arith_result
634849dc963fSmrg	  versuffix="-$major"
634949dc963fSmrg	  ;;
635049dc963fSmrg
635149dc963fSmrg	*)
635249dc963fSmrg	  func_fatal_configuration "unknown library version type \`$version_type'"
635349dc963fSmrg	  ;;
635449dc963fSmrg	esac
635549dc963fSmrg
635649dc963fSmrg	# Clear the version info if we defaulted, and they specified a release.
635749dc963fSmrg	if test -z "$vinfo" && test -n "$release"; then
635849dc963fSmrg	  major=
635949dc963fSmrg	  case $version_type in
636049dc963fSmrg	  darwin)
636149dc963fSmrg	    # we can't check for "0.0" in archive_cmds due to quoting
636249dc963fSmrg	    # problems, so we reset it completely
636349dc963fSmrg	    verstring=
636449dc963fSmrg	    ;;
636549dc963fSmrg	  *)
636649dc963fSmrg	    verstring="0.0"
636749dc963fSmrg	    ;;
636849dc963fSmrg	  esac
636949dc963fSmrg	  if test "$need_version" = no; then
637049dc963fSmrg	    versuffix=
637149dc963fSmrg	  else
637249dc963fSmrg	    versuffix=".0.0"
637349dc963fSmrg	  fi
637449dc963fSmrg	fi
637549dc963fSmrg
637649dc963fSmrg	# Remove version info from name if versioning should be avoided
637749dc963fSmrg	if test "$avoid_version" = yes && test "$need_version" = no; then
637849dc963fSmrg	  major=
637949dc963fSmrg	  versuffix=
638049dc963fSmrg	  verstring=""
638149dc963fSmrg	fi
638249dc963fSmrg
638349dc963fSmrg	# Check to see if the archive will have undefined symbols.
638449dc963fSmrg	if test "$allow_undefined" = yes; then
638549dc963fSmrg	  if test "$allow_undefined_flag" = unsupported; then
638649dc963fSmrg	    func_warning "undefined symbols not allowed in $host shared libraries"
638749dc963fSmrg	    build_libtool_libs=no
638849dc963fSmrg	    build_old_libs=yes
638949dc963fSmrg	  fi
639049dc963fSmrg	else
639149dc963fSmrg	  # Don't allow undefined symbols.
639249dc963fSmrg	  allow_undefined_flag="$no_undefined_flag"
639349dc963fSmrg	fi
639449dc963fSmrg
639549dc963fSmrg      fi
639649dc963fSmrg
639749dc963fSmrg      func_generate_dlsyms "$libname" "$libname" "yes"
639849dc963fSmrg      libobjs="$libobjs $symfileobj"
639949dc963fSmrg      test "X$libobjs" = "X " && libobjs=
640049dc963fSmrg
640149dc963fSmrg      if test "$mode" != relink; then
640249dc963fSmrg	# Remove our outputs, but don't remove object files since they
640349dc963fSmrg	# may have been created when compiling PIC objects.
640449dc963fSmrg	removelist=
640549dc963fSmrg	tempremovelist=`$ECHO "$output_objdir/*"`
640649dc963fSmrg	for p in $tempremovelist; do
640749dc963fSmrg	  case $p in
640849dc963fSmrg	    *.$objext | *.gcno)
640949dc963fSmrg	       ;;
641049dc963fSmrg	    $output_objdir/$outputname | $output_objdir/$libname.* | $output_objdir/${libname}${release}.*)
641149dc963fSmrg	       if test "X$precious_files_regex" != "X"; then
641249dc963fSmrg		 if $ECHO "$p" | $EGREP -e "$precious_files_regex" >/dev/null 2>&1
641349dc963fSmrg		 then
641449dc963fSmrg		   continue
641549dc963fSmrg		 fi
641649dc963fSmrg	       fi
641749dc963fSmrg	       removelist="$removelist $p"
641849dc963fSmrg	       ;;
641949dc963fSmrg	    *) ;;
642049dc963fSmrg	  esac
642149dc963fSmrg	done
642249dc963fSmrg	test -n "$removelist" && \
642349dc963fSmrg	  func_show_eval "${RM}r \$removelist"
642449dc963fSmrg      fi
642549dc963fSmrg
642649dc963fSmrg      # Now set the variables for building old libraries.
642749dc963fSmrg      if test "$build_old_libs" = yes && test "$build_libtool_libs" != convenience ; then
642849dc963fSmrg	oldlibs="$oldlibs $output_objdir/$libname.$libext"
642949dc963fSmrg
643049dc963fSmrg	# Transform .lo files to .o files.
643149dc963fSmrg	oldobjs="$objs "`$ECHO "X$libobjs" | $SP2NL | $Xsed -e '/\.'${libext}'$/d' -e "$lo2o" | $NL2SP`
643249dc963fSmrg      fi
643349dc963fSmrg
643449dc963fSmrg      # Eliminate all temporary directories.
643549dc963fSmrg      #for path in $notinst_path; do
643649dc963fSmrg      #	lib_search_path=`$ECHO "X$lib_search_path " | $Xsed -e "s% $path % %g"`
643749dc963fSmrg      #	deplibs=`$ECHO "X$deplibs " | $Xsed -e "s% -L$path % %g"`
643849dc963fSmrg      #	dependency_libs=`$ECHO "X$dependency_libs " | $Xsed -e "s% -L$path % %g"`
643949dc963fSmrg      #done
644049dc963fSmrg
644149dc963fSmrg      if test -n "$xrpath"; then
644249dc963fSmrg	# If the user specified any rpath flags, then add them.
644349dc963fSmrg	temp_xrpath=
644449dc963fSmrg	for libdir in $xrpath; do
644549dc963fSmrg	  temp_xrpath="$temp_xrpath -R$libdir"
644649dc963fSmrg	  case "$finalize_rpath " in
644749dc963fSmrg	  *" $libdir "*) ;;
644849dc963fSmrg	  *) finalize_rpath="$finalize_rpath $libdir" ;;
644949dc963fSmrg	  esac
645049dc963fSmrg	done
645149dc963fSmrg	if test "$hardcode_into_libs" != yes || test "$build_old_libs" = yes; then
645249dc963fSmrg	  dependency_libs="$temp_xrpath $dependency_libs"
645349dc963fSmrg	fi
645449dc963fSmrg      fi
645549dc963fSmrg
645649dc963fSmrg      # Make sure dlfiles contains only unique files that won't be dlpreopened
645749dc963fSmrg      old_dlfiles="$dlfiles"
645849dc963fSmrg      dlfiles=
645949dc963fSmrg      for lib in $old_dlfiles; do
646049dc963fSmrg	case " $dlprefiles $dlfiles " in
646149dc963fSmrg	*" $lib "*) ;;
646249dc963fSmrg	*) dlfiles="$dlfiles $lib" ;;
646349dc963fSmrg	esac
646449dc963fSmrg      done
646549dc963fSmrg
646649dc963fSmrg      # Make sure dlprefiles contains only unique files
646749dc963fSmrg      old_dlprefiles="$dlprefiles"
646849dc963fSmrg      dlprefiles=
646949dc963fSmrg      for lib in $old_dlprefiles; do
647049dc963fSmrg	case "$dlprefiles " in
647149dc963fSmrg	*" $lib "*) ;;
647249dc963fSmrg	*) dlprefiles="$dlprefiles $lib" ;;
647349dc963fSmrg	esac
647449dc963fSmrg      done
647549dc963fSmrg
647649dc963fSmrg      if test "$build_libtool_libs" = yes; then
647749dc963fSmrg	if test -n "$rpath"; then
647849dc963fSmrg	  case $host in
647949dc963fSmrg	  *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-*-beos* | *-cegcc*)
648049dc963fSmrg	    # these systems don't actually have a c library (as such)!
648149dc963fSmrg	    ;;
648249dc963fSmrg	  *-*-rhapsody* | *-*-darwin1.[012])
648349dc963fSmrg	    # Rhapsody C library is in the System framework
648449dc963fSmrg	    deplibs="$deplibs System.ltframework"
648549dc963fSmrg	    ;;
648649dc963fSmrg	  *-*-netbsd*)
648749dc963fSmrg	    # Don't link with libc until the a.out ld.so is fixed.
648849dc963fSmrg	    ;;
648949dc963fSmrg	  *-*-openbsd* | *-*-freebsd* | *-*-dragonfly*)
649049dc963fSmrg	    # Do not include libc due to us having libc/libc_r.
649149dc963fSmrg	    ;;
649249dc963fSmrg	  *-*-sco3.2v5* | *-*-sco5v6*)
649349dc963fSmrg	    # Causes problems with __ctype
649449dc963fSmrg	    ;;
649549dc963fSmrg	  *-*-sysv4.2uw2* | *-*-sysv5* | *-*-unixware* | *-*-OpenUNIX*)
649649dc963fSmrg	    # Compiler inserts libc in the correct place for threads to work
649749dc963fSmrg	    ;;
649849dc963fSmrg	  *)
649949dc963fSmrg	    # Add libc to deplibs on all other systems if necessary.
650049dc963fSmrg	    if test "$build_libtool_need_lc" = "yes"; then
650149dc963fSmrg	      deplibs="$deplibs -lc"
650249dc963fSmrg	    fi
650349dc963fSmrg	    ;;
650449dc963fSmrg	  esac
650549dc963fSmrg	fi
650649dc963fSmrg
650749dc963fSmrg	# Transform deplibs into only deplibs that can be linked in shared.
650849dc963fSmrg	name_save=$name
650949dc963fSmrg	libname_save=$libname
651049dc963fSmrg	release_save=$release
651149dc963fSmrg	versuffix_save=$versuffix
651249dc963fSmrg	major_save=$major
651349dc963fSmrg	# I'm not sure if I'm treating the release correctly.  I think
651449dc963fSmrg	# release should show up in the -l (ie -lgmp5) so we don't want to
651549dc963fSmrg	# add it in twice.  Is that correct?
651649dc963fSmrg	release=""
651749dc963fSmrg	versuffix=""
651849dc963fSmrg	major=""
651949dc963fSmrg	newdeplibs=
652049dc963fSmrg	droppeddeps=no
652149dc963fSmrg	case $deplibs_check_method in
652249dc963fSmrg	pass_all)
652349dc963fSmrg	  # Don't check for shared/static.  Everything works.
652449dc963fSmrg	  # This might be a little naive.  We might want to check
652549dc963fSmrg	  # whether the library exists or not.  But this is on
652649dc963fSmrg	  # osf3 & osf4 and I'm not really sure... Just
652749dc963fSmrg	  # implementing what was already the behavior.
652849dc963fSmrg	  newdeplibs=$deplibs
652949dc963fSmrg	  ;;
653049dc963fSmrg	test_compile)
653149dc963fSmrg	  # This code stresses the "libraries are programs" paradigm to its
653249dc963fSmrg	  # limits. Maybe even breaks it.  We compile a program, linking it
653349dc963fSmrg	  # against the deplibs as a proxy for the library.  Then we can check
653449dc963fSmrg	  # whether they linked in statically or dynamically with ldd.
653549dc963fSmrg	  $opt_dry_run || $RM conftest.c
653649dc963fSmrg	  cat > conftest.c <<EOF
653749dc963fSmrg	  int main() { return 0; }
653849dc963fSmrgEOF
653949dc963fSmrg	  $opt_dry_run || $RM conftest
654049dc963fSmrg	  if $LTCC $LTCFLAGS -o conftest conftest.c $deplibs; then
654149dc963fSmrg	    ldd_output=`ldd conftest`
654249dc963fSmrg	    for i in $deplibs; do
654349dc963fSmrg	      case $i in
654449dc963fSmrg	      -l*)
654549dc963fSmrg		func_stripname -l '' "$i"
654649dc963fSmrg		name=$func_stripname_result
654749dc963fSmrg		if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then
654849dc963fSmrg		  case " $predeps $postdeps " in
654949dc963fSmrg		  *" $i "*)
655049dc963fSmrg		    newdeplibs="$newdeplibs $i"
655149dc963fSmrg		    i=""
655249dc963fSmrg		    ;;
655349dc963fSmrg		  esac
655449dc963fSmrg		fi
655549dc963fSmrg		if test -n "$i" ; then
655649dc963fSmrg		  libname=`eval "\\$ECHO \"$libname_spec\""`
655749dc963fSmrg		  deplib_matches=`eval "\\$ECHO \"$library_names_spec\""`
655849dc963fSmrg		  set dummy $deplib_matches; shift
655949dc963fSmrg		  deplib_match=$1
656049dc963fSmrg		  if test `expr "$ldd_output" : ".*$deplib_match"` -ne 0 ; then
656149dc963fSmrg		    newdeplibs="$newdeplibs $i"
656249dc963fSmrg		  else
656349dc963fSmrg		    droppeddeps=yes
656449dc963fSmrg		    $ECHO
656549dc963fSmrg		    $ECHO "*** Warning: dynamic linker does not accept needed library $i."
656649dc963fSmrg		    $ECHO "*** I have the capability to make that library automatically link in when"
656749dc963fSmrg		    $ECHO "*** you link to this library.  But I can only do this if you have a"
656849dc963fSmrg		    $ECHO "*** shared version of the library, which I believe you do not have"
656949dc963fSmrg		    $ECHO "*** because a test_compile did reveal that the linker did not use it for"
657049dc963fSmrg		    $ECHO "*** its dynamic dependency list that programs get resolved with at runtime."
657149dc963fSmrg		  fi
657249dc963fSmrg		fi
657349dc963fSmrg		;;
657449dc963fSmrg	      *)
657549dc963fSmrg		newdeplibs="$newdeplibs $i"
657649dc963fSmrg		;;
657749dc963fSmrg	      esac
657849dc963fSmrg	    done
657949dc963fSmrg	  else
658049dc963fSmrg	    # Error occurred in the first compile.  Let's try to salvage
658149dc963fSmrg	    # the situation: Compile a separate program for each library.
658249dc963fSmrg	    for i in $deplibs; do
658349dc963fSmrg	      case $i in
658449dc963fSmrg	      -l*)
658549dc963fSmrg		func_stripname -l '' "$i"
658649dc963fSmrg		name=$func_stripname_result
658749dc963fSmrg		$opt_dry_run || $RM conftest
658849dc963fSmrg		if $LTCC $LTCFLAGS -o conftest conftest.c $i; then
658949dc963fSmrg		  ldd_output=`ldd conftest`
659049dc963fSmrg		  if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then
659149dc963fSmrg		    case " $predeps $postdeps " in
659249dc963fSmrg		    *" $i "*)
659349dc963fSmrg		      newdeplibs="$newdeplibs $i"
659449dc963fSmrg		      i=""
659549dc963fSmrg		      ;;
659649dc963fSmrg		    esac
659749dc963fSmrg		  fi
659849dc963fSmrg		  if test -n "$i" ; then
659949dc963fSmrg		    libname=`eval "\\$ECHO \"$libname_spec\""`
660049dc963fSmrg		    deplib_matches=`eval "\\$ECHO \"$library_names_spec\""`
660149dc963fSmrg		    set dummy $deplib_matches; shift
660249dc963fSmrg		    deplib_match=$1
660349dc963fSmrg		    if test `expr "$ldd_output" : ".*$deplib_match"` -ne 0 ; then
660449dc963fSmrg		      newdeplibs="$newdeplibs $i"
660549dc963fSmrg		    else
660649dc963fSmrg		      droppeddeps=yes
660749dc963fSmrg		      $ECHO
660849dc963fSmrg		      $ECHO "*** Warning: dynamic linker does not accept needed library $i."
660949dc963fSmrg		      $ECHO "*** I have the capability to make that library automatically link in when"
661049dc963fSmrg		      $ECHO "*** you link to this library.  But I can only do this if you have a"
661149dc963fSmrg		      $ECHO "*** shared version of the library, which you do not appear to have"
661249dc963fSmrg		      $ECHO "*** because a test_compile did reveal that the linker did not use this one"
661349dc963fSmrg		      $ECHO "*** as a dynamic dependency that programs can get resolved with at runtime."
661449dc963fSmrg		    fi
661549dc963fSmrg		  fi
661649dc963fSmrg		else
661749dc963fSmrg		  droppeddeps=yes
661849dc963fSmrg		  $ECHO
661949dc963fSmrg		  $ECHO "*** Warning!  Library $i is needed by this library but I was not able to"
662049dc963fSmrg		  $ECHO "*** make it link in!  You will probably need to install it or some"
662149dc963fSmrg		  $ECHO "*** library that it depends on before this library will be fully"
662249dc963fSmrg		  $ECHO "*** functional.  Installing it before continuing would be even better."
662349dc963fSmrg		fi
662449dc963fSmrg		;;
662549dc963fSmrg	      *)
662649dc963fSmrg		newdeplibs="$newdeplibs $i"
662749dc963fSmrg		;;
662849dc963fSmrg	      esac
662949dc963fSmrg	    done
663049dc963fSmrg	  fi
663149dc963fSmrg	  ;;
663249dc963fSmrg	file_magic*)
663349dc963fSmrg	  set dummy $deplibs_check_method; shift
663449dc963fSmrg	  file_magic_regex=`expr "$deplibs_check_method" : "$1 \(.*\)"`
663549dc963fSmrg	  for a_deplib in $deplibs; do
663649dc963fSmrg	    case $a_deplib in
663749dc963fSmrg	    -l*)
663849dc963fSmrg	      func_stripname -l '' "$a_deplib"
663949dc963fSmrg	      name=$func_stripname_result
664049dc963fSmrg	      if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then
664149dc963fSmrg		case " $predeps $postdeps " in
664249dc963fSmrg		*" $a_deplib "*)
664349dc963fSmrg		  newdeplibs="$newdeplibs $a_deplib"
664449dc963fSmrg		  a_deplib=""
664549dc963fSmrg		  ;;
664649dc963fSmrg		esac
664749dc963fSmrg	      fi
664849dc963fSmrg	      if test -n "$a_deplib" ; then
664949dc963fSmrg		libname=`eval "\\$ECHO \"$libname_spec\""`
665049dc963fSmrg		for i in $lib_search_path $sys_lib_search_path $shlib_search_path; do
665149dc963fSmrg		  potential_libs=`ls $i/$libname[.-]* 2>/dev/null`
665249dc963fSmrg		  for potent_lib in $potential_libs; do
665349dc963fSmrg		      # Follow soft links.
665449dc963fSmrg		      if ls -lLd "$potent_lib" 2>/dev/null |
665549dc963fSmrg			 $GREP " -> " >/dev/null; then
665649dc963fSmrg			continue
665749dc963fSmrg		      fi
665849dc963fSmrg		      # The statement above tries to avoid entering an
665949dc963fSmrg		      # endless loop below, in case of cyclic links.
666049dc963fSmrg		      # We might still enter an endless loop, since a link
666149dc963fSmrg		      # loop can be closed while we follow links,
666249dc963fSmrg		      # but so what?
666349dc963fSmrg		      potlib="$potent_lib"
666449dc963fSmrg		      while test -h "$potlib" 2>/dev/null; do
666549dc963fSmrg			potliblink=`ls -ld $potlib | ${SED} 's/.* -> //'`
666649dc963fSmrg			case $potliblink in
666749dc963fSmrg			[\\/]* | [A-Za-z]:[\\/]*) potlib="$potliblink";;
666849dc963fSmrg			*) potlib=`$ECHO "X$potlib" | $Xsed -e 's,[^/]*$,,'`"$potliblink";;
666949dc963fSmrg			esac
667049dc963fSmrg		      done
667149dc963fSmrg		      if eval $file_magic_cmd \"\$potlib\" 2>/dev/null |
667249dc963fSmrg			 $SED -e 10q |
667349dc963fSmrg			 $EGREP "$file_magic_regex" > /dev/null; then
667449dc963fSmrg			newdeplibs="$newdeplibs $a_deplib"
667549dc963fSmrg			a_deplib=""
667649dc963fSmrg			break 2
667749dc963fSmrg		      fi
667849dc963fSmrg		  done
667949dc963fSmrg		done
668049dc963fSmrg	      fi
668149dc963fSmrg	      if test -n "$a_deplib" ; then
668249dc963fSmrg		droppeddeps=yes
668349dc963fSmrg		$ECHO
668449dc963fSmrg		$ECHO "*** Warning: linker path does not have real file for library $a_deplib."
668549dc963fSmrg		$ECHO "*** I have the capability to make that library automatically link in when"
668649dc963fSmrg		$ECHO "*** you link to this library.  But I can only do this if you have a"
668749dc963fSmrg		$ECHO "*** shared version of the library, which you do not appear to have"
668849dc963fSmrg		$ECHO "*** because I did check the linker path looking for a file starting"
668949dc963fSmrg		if test -z "$potlib" ; then
669049dc963fSmrg		  $ECHO "*** with $libname but no candidates were found. (...for file magic test)"
669149dc963fSmrg		else
669249dc963fSmrg		  $ECHO "*** with $libname and none of the candidates passed a file format test"
669349dc963fSmrg		  $ECHO "*** using a file magic. Last file checked: $potlib"
669449dc963fSmrg		fi
669549dc963fSmrg	      fi
669649dc963fSmrg	      ;;
669749dc963fSmrg	    *)
669849dc963fSmrg	      # Add a -L argument.
669949dc963fSmrg	      newdeplibs="$newdeplibs $a_deplib"
670049dc963fSmrg	      ;;
670149dc963fSmrg	    esac
670249dc963fSmrg	  done # Gone through all deplibs.
670349dc963fSmrg	  ;;
670449dc963fSmrg	match_pattern*)
670549dc963fSmrg	  set dummy $deplibs_check_method; shift
670649dc963fSmrg	  match_pattern_regex=`expr "$deplibs_check_method" : "$1 \(.*\)"`
670749dc963fSmrg	  for a_deplib in $deplibs; do
670849dc963fSmrg	    case $a_deplib in
670949dc963fSmrg	    -l*)
671049dc963fSmrg	      func_stripname -l '' "$a_deplib"
671149dc963fSmrg	      name=$func_stripname_result
671249dc963fSmrg	      if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then
671349dc963fSmrg		case " $predeps $postdeps " in
671449dc963fSmrg		*" $a_deplib "*)
671549dc963fSmrg		  newdeplibs="$newdeplibs $a_deplib"
671649dc963fSmrg		  a_deplib=""
671749dc963fSmrg		  ;;
671849dc963fSmrg		esac
671949dc963fSmrg	      fi
672049dc963fSmrg	      if test -n "$a_deplib" ; then
672149dc963fSmrg		libname=`eval "\\$ECHO \"$libname_spec\""`
672249dc963fSmrg		for i in $lib_search_path $sys_lib_search_path $shlib_search_path; do
672349dc963fSmrg		  potential_libs=`ls $i/$libname[.-]* 2>/dev/null`
672449dc963fSmrg		  for potent_lib in $potential_libs; do
672549dc963fSmrg		    potlib="$potent_lib" # see symlink-check above in file_magic test
672649dc963fSmrg		    if eval "\$ECHO \"X$potent_lib\"" 2>/dev/null | $Xsed -e 10q | \
672749dc963fSmrg		       $EGREP "$match_pattern_regex" > /dev/null; then
672849dc963fSmrg		      newdeplibs="$newdeplibs $a_deplib"
672949dc963fSmrg		      a_deplib=""
673049dc963fSmrg		      break 2
673149dc963fSmrg		    fi
673249dc963fSmrg		  done
673349dc963fSmrg		done
673449dc963fSmrg	      fi
673549dc963fSmrg	      if test -n "$a_deplib" ; then
673649dc963fSmrg		droppeddeps=yes
673749dc963fSmrg		$ECHO
673849dc963fSmrg		$ECHO "*** Warning: linker path does not have real file for library $a_deplib."
673949dc963fSmrg		$ECHO "*** I have the capability to make that library automatically link in when"
674049dc963fSmrg		$ECHO "*** you link to this library.  But I can only do this if you have a"
674149dc963fSmrg		$ECHO "*** shared version of the library, which you do not appear to have"
674249dc963fSmrg		$ECHO "*** because I did check the linker path looking for a file starting"
674349dc963fSmrg		if test -z "$potlib" ; then
674449dc963fSmrg		  $ECHO "*** with $libname but no candidates were found. (...for regex pattern test)"
674549dc963fSmrg		else
674649dc963fSmrg		  $ECHO "*** with $libname and none of the candidates passed a file format test"
674749dc963fSmrg		  $ECHO "*** using a regex pattern. Last file checked: $potlib"
674849dc963fSmrg		fi
674949dc963fSmrg	      fi
675049dc963fSmrg	      ;;
675149dc963fSmrg	    *)
675249dc963fSmrg	      # Add a -L argument.
675349dc963fSmrg	      newdeplibs="$newdeplibs $a_deplib"
675449dc963fSmrg	      ;;
675549dc963fSmrg	    esac
675649dc963fSmrg	  done # Gone through all deplibs.
675749dc963fSmrg	  ;;
675849dc963fSmrg	none | unknown | *)
675949dc963fSmrg	  newdeplibs=""
676049dc963fSmrg	  tmp_deplibs=`$ECHO "X $deplibs" | $Xsed \
676149dc963fSmrg	      -e 's/ -lc$//' -e 's/ -[LR][^ ]*//g'`
676249dc963fSmrg	  if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then
676349dc963fSmrg	    for i in $predeps $postdeps ; do
676449dc963fSmrg	      # can't use Xsed below, because $i might contain '/'
676549dc963fSmrg	      tmp_deplibs=`$ECHO "X $tmp_deplibs" | $Xsed -e "s,$i,,"`
676649dc963fSmrg	    done
676749dc963fSmrg	  fi
676849dc963fSmrg	  if $ECHO "X $tmp_deplibs" | $Xsed -e 's/[	 ]//g' |
676949dc963fSmrg	     $GREP . >/dev/null; then
677049dc963fSmrg	    $ECHO
677149dc963fSmrg	    if test "X$deplibs_check_method" = "Xnone"; then
677249dc963fSmrg	      $ECHO "*** Warning: inter-library dependencies are not supported in this platform."
677349dc963fSmrg	    else
677449dc963fSmrg	      $ECHO "*** Warning: inter-library dependencies are not known to be supported."
677549dc963fSmrg	    fi
677649dc963fSmrg	    $ECHO "*** All declared inter-library dependencies are being dropped."
677749dc963fSmrg	    droppeddeps=yes
677849dc963fSmrg	  fi
677949dc963fSmrg	  ;;
678049dc963fSmrg	esac
678149dc963fSmrg	versuffix=$versuffix_save
678249dc963fSmrg	major=$major_save
678349dc963fSmrg	release=$release_save
678449dc963fSmrg	libname=$libname_save
678549dc963fSmrg	name=$name_save
678649dc963fSmrg
678749dc963fSmrg	case $host in
678849dc963fSmrg	*-*-rhapsody* | *-*-darwin1.[012])
678949dc963fSmrg	  # On Rhapsody replace the C library with the System framework
679049dc963fSmrg	  newdeplibs=`$ECHO "X $newdeplibs" | $Xsed -e 's/ -lc / System.ltframework /'`
679149dc963fSmrg	  ;;
679249dc963fSmrg	esac
679349dc963fSmrg
679449dc963fSmrg	if test "$droppeddeps" = yes; then
679549dc963fSmrg	  if test "$module" = yes; then
679649dc963fSmrg	    $ECHO
679749dc963fSmrg	    $ECHO "*** Warning: libtool could not satisfy all declared inter-library"
679849dc963fSmrg	    $ECHO "*** dependencies of module $libname.  Therefore, libtool will create"
679949dc963fSmrg	    $ECHO "*** a static module, that should work as long as the dlopening"
680049dc963fSmrg	    $ECHO "*** application is linked with the -dlopen flag."
680149dc963fSmrg	    if test -z "$global_symbol_pipe"; then
680249dc963fSmrg	      $ECHO
680349dc963fSmrg	      $ECHO "*** However, this would only work if libtool was able to extract symbol"
680449dc963fSmrg	      $ECHO "*** lists from a program, using \`nm' or equivalent, but libtool could"
680549dc963fSmrg	      $ECHO "*** not find such a program.  So, this module is probably useless."
680649dc963fSmrg	      $ECHO "*** \`nm' from GNU binutils and a full rebuild may help."
680749dc963fSmrg	    fi
680849dc963fSmrg	    if test "$build_old_libs" = no; then
680949dc963fSmrg	      oldlibs="$output_objdir/$libname.$libext"
681049dc963fSmrg	      build_libtool_libs=module
681149dc963fSmrg	      build_old_libs=yes
681249dc963fSmrg	    else
681349dc963fSmrg	      build_libtool_libs=no
681449dc963fSmrg	    fi
681549dc963fSmrg	  else
681649dc963fSmrg	    $ECHO "*** The inter-library dependencies that have been dropped here will be"
681749dc963fSmrg	    $ECHO "*** automatically added whenever a program is linked with this library"
681849dc963fSmrg	    $ECHO "*** or is declared to -dlopen it."
681949dc963fSmrg
682049dc963fSmrg	    if test "$allow_undefined" = no; then
682149dc963fSmrg	      $ECHO
682249dc963fSmrg	      $ECHO "*** Since this library must not contain undefined symbols,"
682349dc963fSmrg	      $ECHO "*** because either the platform does not support them or"
682449dc963fSmrg	      $ECHO "*** it was explicitly requested with -no-undefined,"
682549dc963fSmrg	      $ECHO "*** libtool will only create a static version of it."
682649dc963fSmrg	      if test "$build_old_libs" = no; then
682749dc963fSmrg		oldlibs="$output_objdir/$libname.$libext"
682849dc963fSmrg		build_libtool_libs=module
682949dc963fSmrg		build_old_libs=yes
683049dc963fSmrg	      else
683149dc963fSmrg		build_libtool_libs=no
683249dc963fSmrg	      fi
683349dc963fSmrg	    fi
683449dc963fSmrg	  fi
683549dc963fSmrg	fi
683649dc963fSmrg	# Done checking deplibs!
683749dc963fSmrg	deplibs=$newdeplibs
683849dc963fSmrg      fi
683949dc963fSmrg      # Time to change all our "foo.ltframework" stuff back to "-framework foo"
684049dc963fSmrg      case $host in
684149dc963fSmrg	*-*-darwin*)
684249dc963fSmrg	  newdeplibs=`$ECHO "X $newdeplibs" | $Xsed -e 's% \([^ $]*\).ltframework% -framework \1%g'`
684349dc963fSmrg	  new_inherited_linker_flags=`$ECHO "X $new_inherited_linker_flags" | $Xsed -e 's% \([^ $]*\).ltframework% -framework \1%g'`
684449dc963fSmrg	  deplibs=`$ECHO "X $deplibs" | $Xsed -e 's% \([^ $]*\).ltframework% -framework \1%g'`
684549dc963fSmrg	  ;;
684649dc963fSmrg      esac
684749dc963fSmrg
684849dc963fSmrg      # move library search paths that coincide with paths to not yet
684949dc963fSmrg      # installed libraries to the beginning of the library search list
685049dc963fSmrg      new_libs=
685149dc963fSmrg      for path in $notinst_path; do
685249dc963fSmrg	case " $new_libs " in
685349dc963fSmrg	*" -L$path/$objdir "*) ;;
685449dc963fSmrg	*)
685549dc963fSmrg	  case " $deplibs " in
685649dc963fSmrg	  *" -L$path/$objdir "*)
685749dc963fSmrg	    new_libs="$new_libs -L$path/$objdir" ;;
685849dc963fSmrg	  esac
685949dc963fSmrg	  ;;
686049dc963fSmrg	esac
686149dc963fSmrg      done
686249dc963fSmrg      for deplib in $deplibs; do
686349dc963fSmrg	case $deplib in
686449dc963fSmrg	-L*)
686549dc963fSmrg	  case " $new_libs " in
686649dc963fSmrg	  *" $deplib "*) ;;
686749dc963fSmrg	  *) new_libs="$new_libs $deplib" ;;
686849dc963fSmrg	  esac
686949dc963fSmrg	  ;;
687049dc963fSmrg	*) new_libs="$new_libs $deplib" ;;
687149dc963fSmrg	esac
687249dc963fSmrg      done
687349dc963fSmrg      deplibs="$new_libs"
687449dc963fSmrg
687549dc963fSmrg      # All the library-specific variables (install_libdir is set above).
687649dc963fSmrg      library_names=
687749dc963fSmrg      old_library=
687849dc963fSmrg      dlname=
687949dc963fSmrg
688049dc963fSmrg      # Test again, we may have decided not to build it any more
688149dc963fSmrg      if test "$build_libtool_libs" = yes; then
688249dc963fSmrg	if test "$hardcode_into_libs" = yes; then
688349dc963fSmrg	  # Hardcode the library paths
688449dc963fSmrg	  hardcode_libdirs=
688549dc963fSmrg	  dep_rpath=
688649dc963fSmrg	  rpath="$finalize_rpath"
688749dc963fSmrg	  test "$mode" != relink && rpath="$compile_rpath$rpath"
688849dc963fSmrg	  for libdir in $rpath; do
688949dc963fSmrg	    if test -n "$hardcode_libdir_flag_spec"; then
689049dc963fSmrg	      if test -n "$hardcode_libdir_separator"; then
689149dc963fSmrg		if test -z "$hardcode_libdirs"; then
689249dc963fSmrg		  hardcode_libdirs="$libdir"
689349dc963fSmrg		else
689449dc963fSmrg		  # Just accumulate the unique libdirs.
689549dc963fSmrg		  case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in
689649dc963fSmrg		  *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*)
689749dc963fSmrg		    ;;
689849dc963fSmrg		  *)
689949dc963fSmrg		    hardcode_libdirs="$hardcode_libdirs$hardcode_libdir_separator$libdir"
690049dc963fSmrg		    ;;
690149dc963fSmrg		  esac
690249dc963fSmrg		fi
690349dc963fSmrg	      else
690449dc963fSmrg		eval flag=\"$hardcode_libdir_flag_spec\"
690549dc963fSmrg		dep_rpath="$dep_rpath $flag"
690649dc963fSmrg	      fi
690749dc963fSmrg	    elif test -n "$runpath_var"; then
690849dc963fSmrg	      case "$perm_rpath " in
690949dc963fSmrg	      *" $libdir "*) ;;
691049dc963fSmrg	      *) perm_rpath="$perm_rpath $libdir" ;;
691149dc963fSmrg	      esac
691249dc963fSmrg	    fi
691349dc963fSmrg	  done
691449dc963fSmrg	  # Substitute the hardcoded libdirs into the rpath.
691549dc963fSmrg	  if test -n "$hardcode_libdir_separator" &&
691649dc963fSmrg	     test -n "$hardcode_libdirs"; then
691749dc963fSmrg	    libdir="$hardcode_libdirs"
691849dc963fSmrg	    if test -n "$hardcode_libdir_flag_spec_ld"; then
691949dc963fSmrg	      eval dep_rpath=\"$hardcode_libdir_flag_spec_ld\"
692049dc963fSmrg	    else
692149dc963fSmrg	      eval dep_rpath=\"$hardcode_libdir_flag_spec\"
692249dc963fSmrg	    fi
692349dc963fSmrg	  fi
692449dc963fSmrg	  if test -n "$runpath_var" && test -n "$perm_rpath"; then
692549dc963fSmrg	    # We should set the runpath_var.
692649dc963fSmrg	    rpath=
692749dc963fSmrg	    for dir in $perm_rpath; do
692849dc963fSmrg	      rpath="$rpath$dir:"
692949dc963fSmrg	    done
693049dc963fSmrg	    eval "$runpath_var='$rpath\$$runpath_var'; export $runpath_var"
693149dc963fSmrg	  fi
693249dc963fSmrg	  test -n "$dep_rpath" && deplibs="$dep_rpath $deplibs"
693349dc963fSmrg	fi
69344b0ead49Smrg
693549dc963fSmrg	shlibpath="$finalize_shlibpath"
693649dc963fSmrg	test "$mode" != relink && shlibpath="$compile_shlibpath$shlibpath"
693749dc963fSmrg	if test -n "$shlibpath"; then
693849dc963fSmrg	  eval "$shlibpath_var='$shlibpath\$$shlibpath_var'; export $shlibpath_var"
693949dc963fSmrg	fi
69404b0ead49Smrg
694149dc963fSmrg	# Get the real and link names of the library.
694249dc963fSmrg	eval shared_ext=\"$shrext_cmds\"
694349dc963fSmrg	eval library_names=\"$library_names_spec\"
694449dc963fSmrg	set dummy $library_names
694549dc963fSmrg	shift
694649dc963fSmrg	realname="$1"
694749dc963fSmrg	shift
69484b0ead49Smrg
694949dc963fSmrg	if test -n "$soname_spec"; then
695049dc963fSmrg	  eval soname=\"$soname_spec\"
695149dc963fSmrg	else
695249dc963fSmrg	  soname="$realname"
695349dc963fSmrg	fi
695449dc963fSmrg	if test -z "$dlname"; then
695549dc963fSmrg	  dlname=$soname
695649dc963fSmrg	fi
69574b0ead49Smrg
695849dc963fSmrg	lib="$output_objdir/$realname"
695949dc963fSmrg	linknames=
696049dc963fSmrg	for link
696149dc963fSmrg	do
696249dc963fSmrg	  linknames="$linknames $link"
696349dc963fSmrg	done
69644b0ead49Smrg
696549dc963fSmrg	# Use standard objects if they are pic
696649dc963fSmrg	test -z "$pic_flag" && libobjs=`$ECHO "X$libobjs" | $SP2NL | $Xsed -e "$lo2o" | $NL2SP`
696749dc963fSmrg	test "X$libobjs" = "X " && libobjs=
69684b0ead49Smrg
696949dc963fSmrg	delfiles=
697049dc963fSmrg	if test -n "$export_symbols" && test -n "$include_expsyms"; then
697149dc963fSmrg	  $opt_dry_run || cp "$export_symbols" "$output_objdir/$libname.uexp"
697249dc963fSmrg	  export_symbols="$output_objdir/$libname.uexp"
697349dc963fSmrg	  delfiles="$delfiles $export_symbols"
697449dc963fSmrg	fi
69754b0ead49Smrg
697649dc963fSmrg	orig_export_symbols=
697749dc963fSmrg	case $host_os in
697849dc963fSmrg	cygwin* | mingw* | cegcc*)
697949dc963fSmrg	  if test -n "$export_symbols" && test -z "$export_symbols_regex"; then
698049dc963fSmrg	    # exporting using user supplied symfile
698149dc963fSmrg	    if test "x`$SED 1q $export_symbols`" != xEXPORTS; then
698249dc963fSmrg	      # and it's NOT already a .def file. Must figure out
698349dc963fSmrg	      # which of the given symbols are data symbols and tag
698449dc963fSmrg	      # them as such. So, trigger use of export_symbols_cmds.
698549dc963fSmrg	      # export_symbols gets reassigned inside the "prepare
698649dc963fSmrg	      # the list of exported symbols" if statement, so the
698749dc963fSmrg	      # include_expsyms logic still works.
698849dc963fSmrg	      orig_export_symbols="$export_symbols"
698949dc963fSmrg	      export_symbols=
699049dc963fSmrg	      always_export_symbols=yes
699149dc963fSmrg	    fi
699249dc963fSmrg	  fi
699349dc963fSmrg	  ;;
699449dc963fSmrg	esac
69954b0ead49Smrg
699649dc963fSmrg	# Prepare the list of exported symbols
699749dc963fSmrg	if test -z "$export_symbols"; then
699849dc963fSmrg	  if test "$always_export_symbols" = yes || test -n "$export_symbols_regex"; then
699949dc963fSmrg	    func_verbose "generating symbol list for \`$libname.la'"
700049dc963fSmrg	    export_symbols="$output_objdir/$libname.exp"
700149dc963fSmrg	    $opt_dry_run || $RM $export_symbols
700249dc963fSmrg	    cmds=$export_symbols_cmds
700349dc963fSmrg	    save_ifs="$IFS"; IFS='~'
700449dc963fSmrg	    for cmd in $cmds; do
700549dc963fSmrg	      IFS="$save_ifs"
700649dc963fSmrg	      eval cmd=\"$cmd\"
700749dc963fSmrg	      func_len " $cmd"
700849dc963fSmrg	      len=$func_len_result
700949dc963fSmrg	      if test "$len" -lt "$max_cmd_len" || test "$max_cmd_len" -le -1; then
701049dc963fSmrg		func_show_eval "$cmd" 'exit $?'
701149dc963fSmrg		skipped_export=false
701249dc963fSmrg	      else
701349dc963fSmrg		# The command line is too long to execute in one step.
701449dc963fSmrg		func_verbose "using reloadable object file for export list..."
701549dc963fSmrg		skipped_export=:
701649dc963fSmrg		# Break out early, otherwise skipped_export may be
701749dc963fSmrg		# set to false by a later but shorter cmd.
701849dc963fSmrg		break
701949dc963fSmrg	      fi
702049dc963fSmrg	    done
702149dc963fSmrg	    IFS="$save_ifs"
702249dc963fSmrg	    if test -n "$export_symbols_regex" && test "X$skipped_export" != "X:"; then
702349dc963fSmrg	      func_show_eval '$EGREP -e "$export_symbols_regex" "$export_symbols" > "${export_symbols}T"'
702449dc963fSmrg	      func_show_eval '$MV "${export_symbols}T" "$export_symbols"'
702549dc963fSmrg	    fi
702649dc963fSmrg	  fi
70274b0ead49Smrg	fi
70284b0ead49Smrg
702949dc963fSmrg	if test -n "$export_symbols" && test -n "$include_expsyms"; then
703049dc963fSmrg	  tmp_export_symbols="$export_symbols"
703149dc963fSmrg	  test -n "$orig_export_symbols" && tmp_export_symbols="$orig_export_symbols"
703249dc963fSmrg	  $opt_dry_run || eval '$ECHO "X$include_expsyms" | $Xsed | $SP2NL >> "$tmp_export_symbols"'
703349dc963fSmrg	fi
70344b0ead49Smrg
703549dc963fSmrg	if test "X$skipped_export" != "X:" && test -n "$orig_export_symbols"; then
703649dc963fSmrg	  # The given exports_symbols file has to be filtered, so filter it.
703749dc963fSmrg	  func_verbose "filter symbol list for \`$libname.la' to tag DATA exports"
703849dc963fSmrg	  # FIXME: $output_objdir/$libname.filter potentially contains lots of
703949dc963fSmrg	  # 's' commands which not all seds can handle. GNU sed should be fine
704049dc963fSmrg	  # though. Also, the filter scales superlinearly with the number of
704149dc963fSmrg	  # global variables. join(1) would be nice here, but unfortunately
704249dc963fSmrg	  # isn't a blessed tool.
704349dc963fSmrg	  $opt_dry_run || $SED -e '/[ ,]DATA/!d;s,\(.*\)\([ \,].*\),s|^\1$|\1\2|,' < $export_symbols > $output_objdir/$libname.filter
704449dc963fSmrg	  delfiles="$delfiles $export_symbols $output_objdir/$libname.filter"
704549dc963fSmrg	  export_symbols=$output_objdir/$libname.def
704649dc963fSmrg	  $opt_dry_run || $SED -f $output_objdir/$libname.filter < $orig_export_symbols > $export_symbols
704749dc963fSmrg	fi
70484b0ead49Smrg
704949dc963fSmrg	tmp_deplibs=
705049dc963fSmrg	for test_deplib in $deplibs; do
705149dc963fSmrg	  case " $convenience " in
705249dc963fSmrg	  *" $test_deplib "*) ;;
705349dc963fSmrg	  *)
705449dc963fSmrg	    tmp_deplibs="$tmp_deplibs $test_deplib"
705549dc963fSmrg	    ;;
705649dc963fSmrg	  esac
705749dc963fSmrg	done
705849dc963fSmrg	deplibs="$tmp_deplibs"
70594b0ead49Smrg
706049dc963fSmrg	if test -n "$convenience"; then
706149dc963fSmrg	  if test -n "$whole_archive_flag_spec" &&
706249dc963fSmrg	    test "$compiler_needs_object" = yes &&
706349dc963fSmrg	    test -z "$libobjs"; then
706449dc963fSmrg	    # extract the archives, so we have objects to list.
706549dc963fSmrg	    # TODO: could optimize this to just extract one archive.
706649dc963fSmrg	    whole_archive_flag_spec=
706749dc963fSmrg	  fi
706849dc963fSmrg	  if test -n "$whole_archive_flag_spec"; then
706949dc963fSmrg	    save_libobjs=$libobjs
707049dc963fSmrg	    eval libobjs=\"\$libobjs $whole_archive_flag_spec\"
707149dc963fSmrg	    test "X$libobjs" = "X " && libobjs=
707249dc963fSmrg	  else
707349dc963fSmrg	    gentop="$output_objdir/${outputname}x"
707449dc963fSmrg	    generated="$generated $gentop"
70754b0ead49Smrg
707649dc963fSmrg	    func_extract_archives $gentop $convenience
707749dc963fSmrg	    libobjs="$libobjs $func_extract_archives_result"
707849dc963fSmrg	    test "X$libobjs" = "X " && libobjs=
707949dc963fSmrg	  fi
70804b0ead49Smrg	fi
70814b0ead49Smrg
708249dc963fSmrg	if test "$thread_safe" = yes && test -n "$thread_safe_flag_spec"; then
708349dc963fSmrg	  eval flag=\"$thread_safe_flag_spec\"
708449dc963fSmrg	  linker_flags="$linker_flags $flag"
70854b0ead49Smrg	fi
70864b0ead49Smrg
708749dc963fSmrg	# Make a backup of the uninstalled library when relinking
708849dc963fSmrg	if test "$mode" = relink; then
708949dc963fSmrg	  $opt_dry_run || eval '(cd $output_objdir && $RM ${realname}U && $MV $realname ${realname}U)' || exit $?
709049dc963fSmrg	fi
70914b0ead49Smrg
709249dc963fSmrg	# Do each of the archive commands.
709349dc963fSmrg	if test "$module" = yes && test -n "$module_cmds" ; then
709449dc963fSmrg	  if test -n "$export_symbols" && test -n "$module_expsym_cmds"; then
709549dc963fSmrg	    eval test_cmds=\"$module_expsym_cmds\"
709649dc963fSmrg	    cmds=$module_expsym_cmds
709749dc963fSmrg	  else
709849dc963fSmrg	    eval test_cmds=\"$module_cmds\"
709949dc963fSmrg	    cmds=$module_cmds
710049dc963fSmrg	  fi
71014b0ead49Smrg	else
710249dc963fSmrg	  if test -n "$export_symbols" && test -n "$archive_expsym_cmds"; then
710349dc963fSmrg	    eval test_cmds=\"$archive_expsym_cmds\"
710449dc963fSmrg	    cmds=$archive_expsym_cmds
710549dc963fSmrg	  else
710649dc963fSmrg	    eval test_cmds=\"$archive_cmds\"
710749dc963fSmrg	    cmds=$archive_cmds
710849dc963fSmrg	  fi
71094b0ead49Smrg	fi
71104b0ead49Smrg
711149dc963fSmrg	if test "X$skipped_export" != "X:" &&
711249dc963fSmrg	   func_len " $test_cmds" &&
711349dc963fSmrg	   len=$func_len_result &&
711449dc963fSmrg	   test "$len" -lt "$max_cmd_len" || test "$max_cmd_len" -le -1; then
711549dc963fSmrg	  :
711649dc963fSmrg	else
711749dc963fSmrg	  # The command line is too long to link in one step, link piecewise
711849dc963fSmrg	  # or, if using GNU ld and skipped_export is not :, use a linker
711949dc963fSmrg	  # script.
71204b0ead49Smrg
712149dc963fSmrg	  # Save the value of $output and $libobjs because we want to
712249dc963fSmrg	  # use them later.  If we have whole_archive_flag_spec, we
712349dc963fSmrg	  # want to use save_libobjs as it was before
712449dc963fSmrg	  # whole_archive_flag_spec was expanded, because we can't
712549dc963fSmrg	  # assume the linker understands whole_archive_flag_spec.
712649dc963fSmrg	  # This may have to be revisited, in case too many
712749dc963fSmrg	  # convenience libraries get linked in and end up exceeding
712849dc963fSmrg	  # the spec.
712949dc963fSmrg	  if test -z "$convenience" || test -z "$whole_archive_flag_spec"; then
713049dc963fSmrg	    save_libobjs=$libobjs
713149dc963fSmrg	  fi
713249dc963fSmrg	  save_output=$output
713349dc963fSmrg	  output_la=`$ECHO "X$output" | $Xsed -e "$basename"`
71344b0ead49Smrg
713549dc963fSmrg	  # Clear the reloadable object creation command queue and
713649dc963fSmrg	  # initialize k to one.
713749dc963fSmrg	  test_cmds=
713849dc963fSmrg	  concat_cmds=
713949dc963fSmrg	  objlist=
714049dc963fSmrg	  last_robj=
714149dc963fSmrg	  k=1
714249dc963fSmrg
714349dc963fSmrg	  if test -n "$save_libobjs" && test "X$skipped_export" != "X:" && test "$with_gnu_ld" = yes; then
714449dc963fSmrg	    output=${output_objdir}/${output_la}.lnkscript
714549dc963fSmrg	    func_verbose "creating GNU ld script: $output"
714649dc963fSmrg	    $ECHO 'INPUT (' > $output
714749dc963fSmrg	    for obj in $save_libobjs
71484b0ead49Smrg	    do
714949dc963fSmrg	      $ECHO "$obj" >> $output
715049dc963fSmrg	    done
715149dc963fSmrg	    $ECHO ')' >> $output
715249dc963fSmrg	    delfiles="$delfiles $output"
715349dc963fSmrg	  elif test -n "$save_libobjs" && test "X$skipped_export" != "X:" && test "X$file_list_spec" != X; then
715449dc963fSmrg	    output=${output_objdir}/${output_la}.lnk
715549dc963fSmrg	    func_verbose "creating linker input file list: $output"
715649dc963fSmrg	    : > $output
715749dc963fSmrg	    set x $save_libobjs
715849dc963fSmrg	    shift
715949dc963fSmrg	    firstobj=
716049dc963fSmrg	    if test "$compiler_needs_object" = yes; then
716149dc963fSmrg	      firstobj="$1 "
716249dc963fSmrg	      shift
716349dc963fSmrg	    fi
716449dc963fSmrg	    for obj
716549dc963fSmrg	    do
716649dc963fSmrg	      $ECHO "$obj" >> $output
716749dc963fSmrg	    done
716849dc963fSmrg	    delfiles="$delfiles $output"
716949dc963fSmrg	    output=$firstobj\"$file_list_spec$output\"
717049dc963fSmrg	  else
717149dc963fSmrg	    if test -n "$save_libobjs"; then
717249dc963fSmrg	      func_verbose "creating reloadable object files..."
717349dc963fSmrg	      output=$output_objdir/$output_la-${k}.$objext
717449dc963fSmrg	      eval test_cmds=\"$reload_cmds\"
717549dc963fSmrg	      func_len " $test_cmds"
717649dc963fSmrg	      len0=$func_len_result
717749dc963fSmrg	      len=$len0
717849dc963fSmrg
717949dc963fSmrg	      # Loop over the list of objects to be linked.
718049dc963fSmrg	      for obj in $save_libobjs
718149dc963fSmrg	      do
718249dc963fSmrg		func_len " $obj"
718349dc963fSmrg		func_arith $len + $func_len_result
718449dc963fSmrg		len=$func_arith_result
718549dc963fSmrg		if test "X$objlist" = X ||
718649dc963fSmrg		   test "$len" -lt "$max_cmd_len"; then
718749dc963fSmrg		  func_append objlist " $obj"
718849dc963fSmrg		else
718949dc963fSmrg		  # The command $test_cmds is almost too long, add a
719049dc963fSmrg		  # command to the queue.
719149dc963fSmrg		  if test "$k" -eq 1 ; then
719249dc963fSmrg		    # The first file doesn't have a previous command to add.
719349dc963fSmrg		    eval concat_cmds=\"$reload_cmds $objlist $last_robj\"
719449dc963fSmrg		  else
719549dc963fSmrg		    # All subsequent reloadable object files will link in
719649dc963fSmrg		    # the last one created.
719749dc963fSmrg		    eval concat_cmds=\"\$concat_cmds~$reload_cmds $objlist $last_robj~\$RM $last_robj\"
719849dc963fSmrg		  fi
719949dc963fSmrg		  last_robj=$output_objdir/$output_la-${k}.$objext
720049dc963fSmrg		  func_arith $k + 1
720149dc963fSmrg		  k=$func_arith_result
720249dc963fSmrg		  output=$output_objdir/$output_la-${k}.$objext
720349dc963fSmrg		  objlist=$obj
720449dc963fSmrg		  func_len " $last_robj"
720549dc963fSmrg		  func_arith $len0 + $func_len_result
720649dc963fSmrg		  len=$func_arith_result
720749dc963fSmrg		fi
720849dc963fSmrg	      done
720949dc963fSmrg	      # Handle the remaining objects by creating one last
721049dc963fSmrg	      # reloadable object file.  All subsequent reloadable object
721149dc963fSmrg	      # files will link in the last one created.
721249dc963fSmrg	      test -z "$concat_cmds" || concat_cmds=$concat_cmds~
721349dc963fSmrg	      eval concat_cmds=\"\${concat_cmds}$reload_cmds $objlist $last_robj\"
721449dc963fSmrg	      if test -n "$last_robj"; then
721549dc963fSmrg	        eval concat_cmds=\"\${concat_cmds}~\$RM $last_robj\"
721649dc963fSmrg	      fi
721749dc963fSmrg	      delfiles="$delfiles $output"
72184b0ead49Smrg
721949dc963fSmrg	    else
722049dc963fSmrg	      output=
722149dc963fSmrg	    fi
72224b0ead49Smrg
722349dc963fSmrg	    if ${skipped_export-false}; then
722449dc963fSmrg	      func_verbose "generating symbol list for \`$libname.la'"
722549dc963fSmrg	      export_symbols="$output_objdir/$libname.exp"
722649dc963fSmrg	      $opt_dry_run || $RM $export_symbols
722749dc963fSmrg	      libobjs=$output
722849dc963fSmrg	      # Append the command to create the export file.
722949dc963fSmrg	      test -z "$concat_cmds" || concat_cmds=$concat_cmds~
723049dc963fSmrg	      eval concat_cmds=\"\$concat_cmds$export_symbols_cmds\"
723149dc963fSmrg	      if test -n "$last_robj"; then
723249dc963fSmrg		eval concat_cmds=\"\$concat_cmds~\$RM $last_robj\"
723349dc963fSmrg	      fi
72344b0ead49Smrg	    fi
72354b0ead49Smrg
723649dc963fSmrg	    test -n "$save_libobjs" &&
723749dc963fSmrg	      func_verbose "creating a temporary reloadable object file: $output"
72384b0ead49Smrg
723949dc963fSmrg	    # Loop through the commands generated above and execute them.
724049dc963fSmrg	    save_ifs="$IFS"; IFS='~'
724149dc963fSmrg	    for cmd in $concat_cmds; do
724249dc963fSmrg	      IFS="$save_ifs"
724349dc963fSmrg	      $opt_silent || {
724449dc963fSmrg		  func_quote_for_expand "$cmd"
724549dc963fSmrg		  eval "func_echo $func_quote_for_expand_result"
724649dc963fSmrg	      }
724749dc963fSmrg	      $opt_dry_run || eval "$cmd" || {
724849dc963fSmrg		lt_exit=$?
724949dc963fSmrg
725049dc963fSmrg		# Restore the uninstalled library and exit
725149dc963fSmrg		if test "$mode" = relink; then
725249dc963fSmrg		  ( cd "$output_objdir" && \
725349dc963fSmrg		    $RM "${realname}T" && \
725449dc963fSmrg		    $MV "${realname}U" "$realname" )
725549dc963fSmrg		fi
72564b0ead49Smrg
725749dc963fSmrg		exit $lt_exit
725849dc963fSmrg	      }
725949dc963fSmrg	    done
726049dc963fSmrg	    IFS="$save_ifs"
72614b0ead49Smrg
726249dc963fSmrg	    if test -n "$export_symbols_regex" && ${skipped_export-false}; then
726349dc963fSmrg	      func_show_eval '$EGREP -e "$export_symbols_regex" "$export_symbols" > "${export_symbols}T"'
726449dc963fSmrg	      func_show_eval '$MV "${export_symbols}T" "$export_symbols"'
72654b0ead49Smrg	    fi
72664b0ead49Smrg	  fi
72674b0ead49Smrg
726849dc963fSmrg          if ${skipped_export-false}; then
726949dc963fSmrg	    if test -n "$export_symbols" && test -n "$include_expsyms"; then
727049dc963fSmrg	      tmp_export_symbols="$export_symbols"
727149dc963fSmrg	      test -n "$orig_export_symbols" && tmp_export_symbols="$orig_export_symbols"
727249dc963fSmrg	      $opt_dry_run || eval '$ECHO "X$include_expsyms" | $Xsed | $SP2NL >> "$tmp_export_symbols"'
727349dc963fSmrg	    fi
72744b0ead49Smrg
727549dc963fSmrg	    if test -n "$orig_export_symbols"; then
727649dc963fSmrg	      # The given exports_symbols file has to be filtered, so filter it.
727749dc963fSmrg	      func_verbose "filter symbol list for \`$libname.la' to tag DATA exports"
727849dc963fSmrg	      # FIXME: $output_objdir/$libname.filter potentially contains lots of
727949dc963fSmrg	      # 's' commands which not all seds can handle. GNU sed should be fine
728049dc963fSmrg	      # though. Also, the filter scales superlinearly with the number of
728149dc963fSmrg	      # global variables. join(1) would be nice here, but unfortunately
728249dc963fSmrg	      # isn't a blessed tool.
728349dc963fSmrg	      $opt_dry_run || $SED -e '/[ ,]DATA/!d;s,\(.*\)\([ \,].*\),s|^\1$|\1\2|,' < $export_symbols > $output_objdir/$libname.filter
728449dc963fSmrg	      delfiles="$delfiles $export_symbols $output_objdir/$libname.filter"
728549dc963fSmrg	      export_symbols=$output_objdir/$libname.def
728649dc963fSmrg	      $opt_dry_run || $SED -f $output_objdir/$libname.filter < $orig_export_symbols > $export_symbols
728749dc963fSmrg	    fi
728849dc963fSmrg	  fi
72894b0ead49Smrg
729049dc963fSmrg	  libobjs=$output
729149dc963fSmrg	  # Restore the value of output.
729249dc963fSmrg	  output=$save_output
72934b0ead49Smrg
729449dc963fSmrg	  if test -n "$convenience" && test -n "$whole_archive_flag_spec"; then
729549dc963fSmrg	    eval libobjs=\"\$libobjs $whole_archive_flag_spec\"
729649dc963fSmrg	    test "X$libobjs" = "X " && libobjs=
729749dc963fSmrg	  fi
729849dc963fSmrg	  # Expand the library linking commands again to reset the
729949dc963fSmrg	  # value of $libobjs for piecewise linking.
73004b0ead49Smrg
730149dc963fSmrg	  # Do each of the archive commands.
730249dc963fSmrg	  if test "$module" = yes && test -n "$module_cmds" ; then
730349dc963fSmrg	    if test -n "$export_symbols" && test -n "$module_expsym_cmds"; then
730449dc963fSmrg	      cmds=$module_expsym_cmds
730549dc963fSmrg	    else
730649dc963fSmrg	      cmds=$module_cmds
73074b0ead49Smrg	    fi
73084b0ead49Smrg	  else
730949dc963fSmrg	    if test -n "$export_symbols" && test -n "$archive_expsym_cmds"; then
731049dc963fSmrg	      cmds=$archive_expsym_cmds
731149dc963fSmrg	    else
731249dc963fSmrg	      cmds=$archive_cmds
731349dc963fSmrg	    fi
73144b0ead49Smrg	  fi
731549dc963fSmrg	fi
73164b0ead49Smrg
731749dc963fSmrg	if test -n "$delfiles"; then
731849dc963fSmrg	  # Append the command to remove temporary files to $cmds.
731949dc963fSmrg	  eval cmds=\"\$cmds~\$RM $delfiles\"
732049dc963fSmrg	fi
73214b0ead49Smrg
732249dc963fSmrg	# Add any objects from preloaded convenience libraries
732349dc963fSmrg	if test -n "$dlprefiles"; then
732449dc963fSmrg	  gentop="$output_objdir/${outputname}x"
732549dc963fSmrg	  generated="$generated $gentop"
73264b0ead49Smrg
732749dc963fSmrg	  func_extract_archives $gentop $dlprefiles
732849dc963fSmrg	  libobjs="$libobjs $func_extract_archives_result"
732949dc963fSmrg	  test "X$libobjs" = "X " && libobjs=
733049dc963fSmrg	fi
73314b0ead49Smrg
733249dc963fSmrg	save_ifs="$IFS"; IFS='~'
733349dc963fSmrg	for cmd in $cmds; do
733449dc963fSmrg	  IFS="$save_ifs"
733549dc963fSmrg	  eval cmd=\"$cmd\"
733649dc963fSmrg	  $opt_silent || {
733749dc963fSmrg	    func_quote_for_expand "$cmd"
733849dc963fSmrg	    eval "func_echo $func_quote_for_expand_result"
733949dc963fSmrg	  }
734049dc963fSmrg	  $opt_dry_run || eval "$cmd" || {
734149dc963fSmrg	    lt_exit=$?
73424b0ead49Smrg
734349dc963fSmrg	    # Restore the uninstalled library and exit
734449dc963fSmrg	    if test "$mode" = relink; then
734549dc963fSmrg	      ( cd "$output_objdir" && \
734649dc963fSmrg	        $RM "${realname}T" && \
734749dc963fSmrg		$MV "${realname}U" "$realname" )
734849dc963fSmrg	    fi
73494b0ead49Smrg
735049dc963fSmrg	    exit $lt_exit
735149dc963fSmrg	  }
735249dc963fSmrg	done
735349dc963fSmrg	IFS="$save_ifs"
73544b0ead49Smrg
735549dc963fSmrg	# Restore the uninstalled library and exit
735649dc963fSmrg	if test "$mode" = relink; then
735749dc963fSmrg	  $opt_dry_run || eval '(cd $output_objdir && $RM ${realname}T && $MV $realname ${realname}T && $MV ${realname}U $realname)' || exit $?
73584b0ead49Smrg
735949dc963fSmrg	  if test -n "$convenience"; then
736049dc963fSmrg	    if test -z "$whole_archive_flag_spec"; then
736149dc963fSmrg	      func_show_eval '${RM}r "$gentop"'
736249dc963fSmrg	    fi
736349dc963fSmrg	  fi
73644b0ead49Smrg
736549dc963fSmrg	  exit $EXIT_SUCCESS
736649dc963fSmrg	fi
736749dc963fSmrg
736849dc963fSmrg	# Create links to the real library.
736949dc963fSmrg	for linkname in $linknames; do
737049dc963fSmrg	  if test "$realname" != "$linkname"; then
737149dc963fSmrg	    func_show_eval '(cd "$output_objdir" && $RM "$linkname" && $LN_S "$realname" "$linkname")' 'exit $?'
73724b0ead49Smrg	  fi
73734b0ead49Smrg	done
73744b0ead49Smrg
737549dc963fSmrg	# If -module or -export-dynamic was specified, set the dlname.
737649dc963fSmrg	if test "$module" = yes || test "$export_dynamic" = yes; then
737749dc963fSmrg	  # On all known operating systems, these are identical.
737849dc963fSmrg	  dlname="$soname"
737949dc963fSmrg	fi
738049dc963fSmrg      fi
73814b0ead49Smrg      ;;
73824b0ead49Smrg
738349dc963fSmrg    obj)
738449dc963fSmrg      if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then
738549dc963fSmrg	func_warning "\`-dlopen' is ignored for objects"
738649dc963fSmrg      fi
73874b0ead49Smrg
738849dc963fSmrg      case " $deplibs" in
738949dc963fSmrg      *\ -l* | *\ -L*)
739049dc963fSmrg	func_warning "\`-l' and \`-L' are ignored for objects" ;;
73914b0ead49Smrg      esac
73924b0ead49Smrg
739349dc963fSmrg      test -n "$rpath" && \
739449dc963fSmrg	func_warning "\`-rpath' is ignored for objects"
739549dc963fSmrg
739649dc963fSmrg      test -n "$xrpath" && \
739749dc963fSmrg	func_warning "\`-R' is ignored for objects"
73984b0ead49Smrg
739949dc963fSmrg      test -n "$vinfo" && \
740049dc963fSmrg	func_warning "\`-version-info' is ignored for objects"
74014b0ead49Smrg
740249dc963fSmrg      test -n "$release" && \
740349dc963fSmrg	func_warning "\`-release' is ignored for objects"
740449dc963fSmrg
740549dc963fSmrg      case $output in
740649dc963fSmrg      *.lo)
740749dc963fSmrg	test -n "$objs$old_deplibs" && \
740849dc963fSmrg	  func_fatal_error "cannot build library object \`$output' from non-libtool objects"
740949dc963fSmrg
741049dc963fSmrg	libobj=$output
741149dc963fSmrg	func_lo2o "$libobj"
741249dc963fSmrg	obj=$func_lo2o_result
74134b0ead49Smrg	;;
74144b0ead49Smrg      *)
741549dc963fSmrg	libobj=
741649dc963fSmrg	obj="$output"
74174b0ead49Smrg	;;
74184b0ead49Smrg      esac
74194b0ead49Smrg
742049dc963fSmrg      # Delete the old objects.
742149dc963fSmrg      $opt_dry_run || $RM $obj $libobj
74224b0ead49Smrg
742349dc963fSmrg      # Objects from convenience libraries.  This assumes
742449dc963fSmrg      # single-version convenience libraries.  Whenever we create
742549dc963fSmrg      # different ones for PIC/non-PIC, this we'll have to duplicate
742649dc963fSmrg      # the extraction.
742749dc963fSmrg      reload_conv_objs=
742849dc963fSmrg      gentop=
742949dc963fSmrg      # reload_cmds runs $LD directly, so let us get rid of
743049dc963fSmrg      # -Wl from whole_archive_flag_spec and hope we can get by with
743149dc963fSmrg      # turning comma into space..
743249dc963fSmrg      wl=
74334b0ead49Smrg
743449dc963fSmrg      if test -n "$convenience"; then
743549dc963fSmrg	if test -n "$whole_archive_flag_spec"; then
743649dc963fSmrg	  eval tmp_whole_archive_flags=\"$whole_archive_flag_spec\"
743749dc963fSmrg	  reload_conv_objs=$reload_objs\ `$ECHO "X$tmp_whole_archive_flags" | $Xsed -e 's|,| |g'`
743849dc963fSmrg	else
743949dc963fSmrg	  gentop="$output_objdir/${obj}x"
744049dc963fSmrg	  generated="$generated $gentop"
74414b0ead49Smrg
744249dc963fSmrg	  func_extract_archives $gentop $convenience
744349dc963fSmrg	  reload_conv_objs="$reload_objs $func_extract_archives_result"
744449dc963fSmrg	fi
74454b0ead49Smrg      fi
74464b0ead49Smrg
744749dc963fSmrg      # Create the old-style object.
744849dc963fSmrg      reload_objs="$objs$old_deplibs "`$ECHO "X$libobjs" | $SP2NL | $Xsed -e '/\.'${libext}$'/d' -e '/\.lib$/d' -e "$lo2o" | $NL2SP`" $reload_conv_objs" ### testsuite: skip nested quoting test
74494b0ead49Smrg
745049dc963fSmrg      output="$obj"
745149dc963fSmrg      func_execute_cmds "$reload_cmds" 'exit $?'
74524b0ead49Smrg
745349dc963fSmrg      # Exit if we aren't doing a library object file.
745449dc963fSmrg      if test -z "$libobj"; then
745549dc963fSmrg	if test -n "$gentop"; then
745649dc963fSmrg	  func_show_eval '${RM}r "$gentop"'
745749dc963fSmrg	fi
745849dc963fSmrg
745949dc963fSmrg	exit $EXIT_SUCCESS
74604b0ead49Smrg      fi
746149dc963fSmrg
746249dc963fSmrg      if test "$build_libtool_libs" != yes; then
746349dc963fSmrg	if test -n "$gentop"; then
746449dc963fSmrg	  func_show_eval '${RM}r "$gentop"'
746549dc963fSmrg	fi
746649dc963fSmrg
746749dc963fSmrg	# Create an invalid libtool object if no PIC, so that we don't
746849dc963fSmrg	# accidentally link it into a program.
746949dc963fSmrg	# $show "echo timestamp > $libobj"
747049dc963fSmrg	# $opt_dry_run || eval "echo timestamp > $libobj" || exit $?
747149dc963fSmrg	exit $EXIT_SUCCESS
747249dc963fSmrg      fi
747349dc963fSmrg
747449dc963fSmrg      if test -n "$pic_flag" || test "$pic_mode" != default; then
747549dc963fSmrg	# Only do commands if we really have different PIC objects.
747649dc963fSmrg	reload_objs="$libobjs $reload_conv_objs"
747749dc963fSmrg	output="$libobj"
747849dc963fSmrg	func_execute_cmds "$reload_cmds" 'exit $?'
747949dc963fSmrg      fi
748049dc963fSmrg
748149dc963fSmrg      if test -n "$gentop"; then
748249dc963fSmrg	func_show_eval '${RM}r "$gentop"'
748349dc963fSmrg      fi
748449dc963fSmrg
748549dc963fSmrg      exit $EXIT_SUCCESS
74864b0ead49Smrg      ;;
74874b0ead49Smrg
748849dc963fSmrg    prog)
748949dc963fSmrg      case $host in
749049dc963fSmrg	*cygwin*) func_stripname '' '.exe' "$output"
749149dc963fSmrg	          output=$func_stripname_result.exe;;
749249dc963fSmrg      esac
749349dc963fSmrg      test -n "$vinfo" && \
749449dc963fSmrg	func_warning "\`-version-info' is ignored for programs"
74954b0ead49Smrg
749649dc963fSmrg      test -n "$release" && \
749749dc963fSmrg	func_warning "\`-release' is ignored for programs"
74984b0ead49Smrg
749949dc963fSmrg      test "$preload" = yes \
750049dc963fSmrg        && test "$dlopen_support" = unknown \
750149dc963fSmrg	&& test "$dlopen_self" = unknown \
750249dc963fSmrg	&& test "$dlopen_self_static" = unknown && \
750349dc963fSmrg	  func_warning "\`LT_INIT([dlopen])' not used. Assuming no dlopen support."
750449dc963fSmrg
750549dc963fSmrg      case $host in
750649dc963fSmrg      *-*-rhapsody* | *-*-darwin1.[012])
750749dc963fSmrg	# On Rhapsody replace the C library is the System framework
750849dc963fSmrg	compile_deplibs=`$ECHO "X $compile_deplibs" | $Xsed -e 's/ -lc / System.ltframework /'`
750949dc963fSmrg	finalize_deplibs=`$ECHO "X $finalize_deplibs" | $Xsed -e 's/ -lc / System.ltframework /'`
75104b0ead49Smrg	;;
751149dc963fSmrg      esac
75124b0ead49Smrg
751349dc963fSmrg      case $host in
751449dc963fSmrg      *-*-darwin*)
751549dc963fSmrg	# Don't allow lazy linking, it breaks C++ global constructors
751649dc963fSmrg	# But is supposedly fixed on 10.4 or later (yay!).
751749dc963fSmrg	if test "$tagname" = CXX ; then
751849dc963fSmrg	  case ${MACOSX_DEPLOYMENT_TARGET-10.0} in
751949dc963fSmrg	    10.[0123])
752049dc963fSmrg	      compile_command="$compile_command ${wl}-bind_at_load"
752149dc963fSmrg	      finalize_command="$finalize_command ${wl}-bind_at_load"
752249dc963fSmrg	    ;;
752349dc963fSmrg	  esac
75244b0ead49Smrg	fi
752549dc963fSmrg	# Time to change all our "foo.ltframework" stuff back to "-framework foo"
752649dc963fSmrg	compile_deplibs=`$ECHO "X $compile_deplibs" | $Xsed -e 's% \([^ $]*\).ltframework% -framework \1%g'`
752749dc963fSmrg	finalize_deplibs=`$ECHO "X $finalize_deplibs" | $Xsed -e 's% \([^ $]*\).ltframework% -framework \1%g'`
752849dc963fSmrg	;;
752949dc963fSmrg      esac
75304b0ead49Smrg
75314b0ead49Smrg
753249dc963fSmrg      # move library search paths that coincide with paths to not yet
753349dc963fSmrg      # installed libraries to the beginning of the library search list
753449dc963fSmrg      new_libs=
753549dc963fSmrg      for path in $notinst_path; do
753649dc963fSmrg	case " $new_libs " in
753749dc963fSmrg	*" -L$path/$objdir "*) ;;
753849dc963fSmrg	*)
753949dc963fSmrg	  case " $compile_deplibs " in
754049dc963fSmrg	  *" -L$path/$objdir "*)
754149dc963fSmrg	    new_libs="$new_libs -L$path/$objdir" ;;
75424b0ead49Smrg	  esac
754349dc963fSmrg	  ;;
754449dc963fSmrg	esac
754549dc963fSmrg      done
754649dc963fSmrg      for deplib in $compile_deplibs; do
754749dc963fSmrg	case $deplib in
754849dc963fSmrg	-L*)
754949dc963fSmrg	  case " $new_libs " in
755049dc963fSmrg	  *" $deplib "*) ;;
755149dc963fSmrg	  *) new_libs="$new_libs $deplib" ;;
75524b0ead49Smrg	  esac
755349dc963fSmrg	  ;;
755449dc963fSmrg	*) new_libs="$new_libs $deplib" ;;
755549dc963fSmrg	esac
755649dc963fSmrg      done
755749dc963fSmrg      compile_deplibs="$new_libs"
75584b0ead49Smrg
75594b0ead49Smrg
756049dc963fSmrg      compile_command="$compile_command $compile_deplibs"
756149dc963fSmrg      finalize_command="$finalize_command $finalize_deplibs"
75624b0ead49Smrg
756349dc963fSmrg      if test -n "$rpath$xrpath"; then
756449dc963fSmrg	# If the user specified any rpath flags, then add them.
756549dc963fSmrg	for libdir in $rpath $xrpath; do
756649dc963fSmrg	  # This is the magic to use -rpath.
756749dc963fSmrg	  case "$finalize_rpath " in
756849dc963fSmrg	  *" $libdir "*) ;;
756949dc963fSmrg	  *) finalize_rpath="$finalize_rpath $libdir" ;;
757049dc963fSmrg	  esac
757149dc963fSmrg	done
757249dc963fSmrg      fi
75734b0ead49Smrg
757449dc963fSmrg      # Now hardcode the library paths
757549dc963fSmrg      rpath=
757649dc963fSmrg      hardcode_libdirs=
757749dc963fSmrg      for libdir in $compile_rpath $finalize_rpath; do
757849dc963fSmrg	if test -n "$hardcode_libdir_flag_spec"; then
757949dc963fSmrg	  if test -n "$hardcode_libdir_separator"; then
758049dc963fSmrg	    if test -z "$hardcode_libdirs"; then
758149dc963fSmrg	      hardcode_libdirs="$libdir"
758249dc963fSmrg	    else
758349dc963fSmrg	      # Just accumulate the unique libdirs.
758449dc963fSmrg	      case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in
758549dc963fSmrg	      *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*)
758649dc963fSmrg		;;
758749dc963fSmrg	      *)
758849dc963fSmrg		hardcode_libdirs="$hardcode_libdirs$hardcode_libdir_separator$libdir"
758949dc963fSmrg		;;
759049dc963fSmrg	      esac
759149dc963fSmrg	    fi
75924b0ead49Smrg	  else
759349dc963fSmrg	    eval flag=\"$hardcode_libdir_flag_spec\"
759449dc963fSmrg	    rpath="$rpath $flag"
75954b0ead49Smrg	  fi
759649dc963fSmrg	elif test -n "$runpath_var"; then
759749dc963fSmrg	  case "$perm_rpath " in
759849dc963fSmrg	  *" $libdir "*) ;;
759949dc963fSmrg	  *) perm_rpath="$perm_rpath $libdir" ;;
760049dc963fSmrg	  esac
760149dc963fSmrg	fi
760249dc963fSmrg	case $host in
760349dc963fSmrg	*-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-cegcc*)
760449dc963fSmrg	  testbindir=`${ECHO} "$libdir" | ${SED} -e 's*/lib$*/bin*'`
760549dc963fSmrg	  case :$dllsearchpath: in
760649dc963fSmrg	  *":$libdir:"*) ;;
760749dc963fSmrg	  ::) dllsearchpath=$libdir;;
760849dc963fSmrg	  *) dllsearchpath="$dllsearchpath:$libdir";;
760949dc963fSmrg	  esac
761049dc963fSmrg	  case :$dllsearchpath: in
761149dc963fSmrg	  *":$testbindir:"*) ;;
761249dc963fSmrg	  ::) dllsearchpath=$testbindir;;
761349dc963fSmrg	  *) dllsearchpath="$dllsearchpath:$testbindir";;
761449dc963fSmrg	  esac
761549dc963fSmrg	  ;;
761649dc963fSmrg	esac
761749dc963fSmrg      done
761849dc963fSmrg      # Substitute the hardcoded libdirs into the rpath.
761949dc963fSmrg      if test -n "$hardcode_libdir_separator" &&
762049dc963fSmrg	 test -n "$hardcode_libdirs"; then
762149dc963fSmrg	libdir="$hardcode_libdirs"
762249dc963fSmrg	eval rpath=\" $hardcode_libdir_flag_spec\"
762349dc963fSmrg      fi
762449dc963fSmrg      compile_rpath="$rpath"
76254b0ead49Smrg
762649dc963fSmrg      rpath=
762749dc963fSmrg      hardcode_libdirs=
762849dc963fSmrg      for libdir in $finalize_rpath; do
762949dc963fSmrg	if test -n "$hardcode_libdir_flag_spec"; then
763049dc963fSmrg	  if test -n "$hardcode_libdir_separator"; then
763149dc963fSmrg	    if test -z "$hardcode_libdirs"; then
763249dc963fSmrg	      hardcode_libdirs="$libdir"
763349dc963fSmrg	    else
763449dc963fSmrg	      # Just accumulate the unique libdirs.
763549dc963fSmrg	      case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in
763649dc963fSmrg	      *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*)
763749dc963fSmrg		;;
763849dc963fSmrg	      *)
763949dc963fSmrg		hardcode_libdirs="$hardcode_libdirs$hardcode_libdir_separator$libdir"
764049dc963fSmrg		;;
764149dc963fSmrg	      esac
764249dc963fSmrg	    fi
76434b0ead49Smrg	  else
764449dc963fSmrg	    eval flag=\"$hardcode_libdir_flag_spec\"
764549dc963fSmrg	    rpath="$rpath $flag"
76464b0ead49Smrg	  fi
764749dc963fSmrg	elif test -n "$runpath_var"; then
764849dc963fSmrg	  case "$finalize_perm_rpath " in
764949dc963fSmrg	  *" $libdir "*) ;;
765049dc963fSmrg	  *) finalize_perm_rpath="$finalize_perm_rpath $libdir" ;;
765149dc963fSmrg	  esac
76524b0ead49Smrg	fi
765349dc963fSmrg      done
765449dc963fSmrg      # Substitute the hardcoded libdirs into the rpath.
765549dc963fSmrg      if test -n "$hardcode_libdir_separator" &&
765649dc963fSmrg	 test -n "$hardcode_libdirs"; then
765749dc963fSmrg	libdir="$hardcode_libdirs"
765849dc963fSmrg	eval rpath=\" $hardcode_libdir_flag_spec\"
765949dc963fSmrg      fi
766049dc963fSmrg      finalize_rpath="$rpath"
76614b0ead49Smrg
766249dc963fSmrg      if test -n "$libobjs" && test "$build_old_libs" = yes; then
766349dc963fSmrg	# Transform all the library objects into standard objects.
766449dc963fSmrg	compile_command=`$ECHO "X$compile_command" | $SP2NL | $Xsed -e "$lo2o" | $NL2SP`
766549dc963fSmrg	finalize_command=`$ECHO "X$finalize_command" | $SP2NL | $Xsed -e "$lo2o" | $NL2SP`
766649dc963fSmrg      fi
76674b0ead49Smrg
766849dc963fSmrg      func_generate_dlsyms "$outputname" "@PROGRAM@" "no"
76694b0ead49Smrg
767049dc963fSmrg      # template prelinking step
767149dc963fSmrg      if test -n "$prelink_cmds"; then
767249dc963fSmrg	func_execute_cmds "$prelink_cmds" 'exit $?'
767349dc963fSmrg      fi
76744b0ead49Smrg
767549dc963fSmrg      wrappers_required=yes
767649dc963fSmrg      case $host in
767749dc963fSmrg      *cygwin* | *mingw* )
767849dc963fSmrg        if test "$build_libtool_libs" != yes; then
767949dc963fSmrg          wrappers_required=no
768049dc963fSmrg        fi
768149dc963fSmrg        ;;
768249dc963fSmrg      *cegcc)
768349dc963fSmrg        # Disable wrappers for cegcc, we are cross compiling anyway.
768449dc963fSmrg        wrappers_required=no
768549dc963fSmrg        ;;
768649dc963fSmrg      *)
768749dc963fSmrg        if test "$need_relink" = no || test "$build_libtool_libs" != yes; then
768849dc963fSmrg          wrappers_required=no
768949dc963fSmrg        fi
769049dc963fSmrg        ;;
769149dc963fSmrg      esac
769249dc963fSmrg      if test "$wrappers_required" = no; then
769349dc963fSmrg	# Replace the output file specification.
769449dc963fSmrg	compile_command=`$ECHO "X$compile_command" | $Xsed -e 's%@OUTPUT@%'"$output"'%g'`
769549dc963fSmrg	link_command="$compile_command$compile_rpath"
76964b0ead49Smrg
769749dc963fSmrg	# We have no uninstalled library dependencies, so finalize right now.
769849dc963fSmrg	exit_status=0
769949dc963fSmrg	func_show_eval "$link_command" 'exit_status=$?'
77004b0ead49Smrg
770149dc963fSmrg	# Delete the generated files.
770249dc963fSmrg	if test -f "$output_objdir/${outputname}S.${objext}"; then
770349dc963fSmrg	  func_show_eval '$RM "$output_objdir/${outputname}S.${objext}"'
77044b0ead49Smrg	fi
77054b0ead49Smrg
770649dc963fSmrg	exit $exit_status
770749dc963fSmrg      fi
77084b0ead49Smrg
770949dc963fSmrg      if test -n "$compile_shlibpath$finalize_shlibpath"; then
771049dc963fSmrg	compile_command="$shlibpath_var=\"$compile_shlibpath$finalize_shlibpath\$$shlibpath_var\" $compile_command"
771149dc963fSmrg      fi
771249dc963fSmrg      if test -n "$finalize_shlibpath"; then
771349dc963fSmrg	finalize_command="$shlibpath_var=\"$finalize_shlibpath\$$shlibpath_var\" $finalize_command"
771449dc963fSmrg      fi
77154b0ead49Smrg
771649dc963fSmrg      compile_var=
771749dc963fSmrg      finalize_var=
771849dc963fSmrg      if test -n "$runpath_var"; then
771949dc963fSmrg	if test -n "$perm_rpath"; then
772049dc963fSmrg	  # We should set the runpath_var.
772149dc963fSmrg	  rpath=
772249dc963fSmrg	  for dir in $perm_rpath; do
772349dc963fSmrg	    rpath="$rpath$dir:"
772449dc963fSmrg	  done
772549dc963fSmrg	  compile_var="$runpath_var=\"$rpath\$$runpath_var\" "
77264b0ead49Smrg	fi
772749dc963fSmrg	if test -n "$finalize_perm_rpath"; then
772849dc963fSmrg	  # We should set the runpath_var.
772949dc963fSmrg	  rpath=
773049dc963fSmrg	  for dir in $finalize_perm_rpath; do
773149dc963fSmrg	    rpath="$rpath$dir:"
773249dc963fSmrg	  done
773349dc963fSmrg	  finalize_var="$runpath_var=\"$rpath\$$runpath_var\" "
77344b0ead49Smrg	fi
773549dc963fSmrg      fi
77364b0ead49Smrg
773749dc963fSmrg      if test "$no_install" = yes; then
773849dc963fSmrg	# We don't need to create a wrapper script.
773949dc963fSmrg	link_command="$compile_var$compile_command$compile_rpath"
774049dc963fSmrg	# Replace the output file specification.
774149dc963fSmrg	link_command=`$ECHO "X$link_command" | $Xsed -e 's%@OUTPUT@%'"$output"'%g'`
774249dc963fSmrg	# Delete the old output file.
774349dc963fSmrg	$opt_dry_run || $RM $output
774449dc963fSmrg	# Link the executable and exit
774549dc963fSmrg	func_show_eval "$link_command" 'exit $?'
77464b0ead49Smrg	exit $EXIT_SUCCESS
774749dc963fSmrg      fi
77484b0ead49Smrg
774949dc963fSmrg      if test "$hardcode_action" = relink; then
775049dc963fSmrg	# Fast installation is not supported
775149dc963fSmrg	link_command="$compile_var$compile_command$compile_rpath"
775249dc963fSmrg	relink_command="$finalize_var$finalize_command$finalize_rpath"
775349dc963fSmrg
775449dc963fSmrg	func_warning "this platform does not like uninstalled shared libraries"
775549dc963fSmrg	func_warning "\`$output' will be relinked during installation"
775649dc963fSmrg      else
775749dc963fSmrg	if test "$fast_install" != no; then
775849dc963fSmrg	  link_command="$finalize_var$compile_command$finalize_rpath"
775949dc963fSmrg	  if test "$fast_install" = yes; then
776049dc963fSmrg	    relink_command=`$ECHO "X$compile_var$compile_command$compile_rpath" | $Xsed -e 's%@OUTPUT@%\$progdir/\$file%g'`
776149dc963fSmrg	  else
776249dc963fSmrg	    # fast_install is set to needless
776349dc963fSmrg	    relink_command=
776449dc963fSmrg	  fi
77654b0ead49Smrg	else
776649dc963fSmrg	  link_command="$compile_var$compile_command$compile_rpath"
776749dc963fSmrg	  relink_command="$finalize_var$finalize_command$finalize_rpath"
77684b0ead49Smrg	fi
776949dc963fSmrg      fi
77704b0ead49Smrg
777149dc963fSmrg      # Replace the output file specification.
777249dc963fSmrg      link_command=`$ECHO "X$link_command" | $Xsed -e 's%@OUTPUT@%'"$output_objdir/$outputname"'%g'`
77734b0ead49Smrg
777449dc963fSmrg      # Delete the old output files.
777549dc963fSmrg      $opt_dry_run || $RM $output $output_objdir/$outputname $output_objdir/lt-$outputname
77764b0ead49Smrg
777749dc963fSmrg      func_show_eval "$link_command" 'exit $?'
77784b0ead49Smrg
777949dc963fSmrg      # Now create the wrapper script.
778049dc963fSmrg      func_verbose "creating $output"
77814b0ead49Smrg
778249dc963fSmrg      # Quote the relink command for shipping.
778349dc963fSmrg      if test -n "$relink_command"; then
778449dc963fSmrg	# Preserve any variables that may affect compiler behavior
778549dc963fSmrg	for var in $variables_saved_for_relink; do
778649dc963fSmrg	  if eval test -z \"\${$var+set}\"; then
778749dc963fSmrg	    relink_command="{ test -z \"\${$var+set}\" || $lt_unset $var || { $var=; export $var; }; }; $relink_command"
778849dc963fSmrg	  elif eval var_value=\$$var; test -z "$var_value"; then
778949dc963fSmrg	    relink_command="$var=; export $var; $relink_command"
77904b0ead49Smrg	  else
779149dc963fSmrg	    func_quote_for_eval "$var_value"
779249dc963fSmrg	    relink_command="$var=$func_quote_for_eval_result; export $var; $relink_command"
77934b0ead49Smrg	  fi
779449dc963fSmrg	done
779549dc963fSmrg	relink_command="(cd `pwd`; $relink_command)"
779649dc963fSmrg	relink_command=`$ECHO "X$relink_command" | $Xsed -e "$sed_quote_subst"`
779749dc963fSmrg      fi
77984b0ead49Smrg
779949dc963fSmrg      # Quote $ECHO for shipping.
780049dc963fSmrg      if test "X$ECHO" = "X$SHELL $progpath --fallback-echo"; then
780149dc963fSmrg	case $progpath in
780249dc963fSmrg	[\\/]* | [A-Za-z]:[\\/]*) qecho="$SHELL $progpath --fallback-echo";;
780349dc963fSmrg	*) qecho="$SHELL `pwd`/$progpath --fallback-echo";;
780449dc963fSmrg	esac
780549dc963fSmrg	qecho=`$ECHO "X$qecho" | $Xsed -e "$sed_quote_subst"`
780649dc963fSmrg      else
780749dc963fSmrg	qecho=`$ECHO "X$ECHO" | $Xsed -e "$sed_quote_subst"`
780849dc963fSmrg      fi
780949dc963fSmrg
781049dc963fSmrg      # Only actually do things if not in dry run mode.
781149dc963fSmrg      $opt_dry_run || {
781249dc963fSmrg	# win32 will think the script is a binary if it has
781349dc963fSmrg	# a .exe suffix, so we strip it off here.
781449dc963fSmrg	case $output in
781549dc963fSmrg	  *.exe) func_stripname '' '.exe' "$output"
781649dc963fSmrg	         output=$func_stripname_result ;;
781749dc963fSmrg	esac
781849dc963fSmrg	# test for cygwin because mv fails w/o .exe extensions
781949dc963fSmrg	case $host in
782049dc963fSmrg	  *cygwin*)
782149dc963fSmrg	    exeext=.exe
782249dc963fSmrg	    func_stripname '' '.exe' "$outputname"
782349dc963fSmrg	    outputname=$func_stripname_result ;;
782449dc963fSmrg	  *) exeext= ;;
78254b0ead49Smrg	esac
782649dc963fSmrg	case $host in
782749dc963fSmrg	  *cygwin* | *mingw* )
782849dc963fSmrg	    func_dirname_and_basename "$output" "" "."
782949dc963fSmrg	    output_name=$func_basename_result
783049dc963fSmrg	    output_path=$func_dirname_result
783149dc963fSmrg	    cwrappersource="$output_path/$objdir/lt-$output_name.c"
783249dc963fSmrg	    cwrapper="$output_path/$output_name.exe"
783349dc963fSmrg	    $RM $cwrappersource $cwrapper
783449dc963fSmrg	    trap "$RM $cwrappersource $cwrapper; exit $EXIT_FAILURE" 1 2 15
783549dc963fSmrg
783649dc963fSmrg	    func_emit_cwrapperexe_src > $cwrappersource
783749dc963fSmrg
783849dc963fSmrg	    # The wrapper executable is built using the $host compiler,
783949dc963fSmrg	    # because it contains $host paths and files. If cross-
784049dc963fSmrg	    # compiling, it, like the target executable, must be
784149dc963fSmrg	    # executed on the $host or under an emulation environment.
784249dc963fSmrg	    $opt_dry_run || {
784349dc963fSmrg	      $LTCC $LTCFLAGS -o $cwrapper $cwrappersource
784449dc963fSmrg	      $STRIP $cwrapper
784549dc963fSmrg	    }
78464b0ead49Smrg
784749dc963fSmrg	    # Now, create the wrapper script for func_source use:
784849dc963fSmrg	    func_ltwrapper_scriptname $cwrapper
784949dc963fSmrg	    $RM $func_ltwrapper_scriptname_result
785049dc963fSmrg	    trap "$RM $func_ltwrapper_scriptname_result; exit $EXIT_FAILURE" 1 2 15
785149dc963fSmrg	    $opt_dry_run || {
785249dc963fSmrg	      # note: this script will not be executed, so do not chmod.
785349dc963fSmrg	      if test "x$build" = "x$host" ; then
785449dc963fSmrg		$cwrapper --lt-dump-script > $func_ltwrapper_scriptname_result
785549dc963fSmrg	      else
785649dc963fSmrg		func_emit_wrapper no > $func_ltwrapper_scriptname_result
785749dc963fSmrg	      fi
785849dc963fSmrg	    }
785949dc963fSmrg	  ;;
786049dc963fSmrg	  * )
786149dc963fSmrg	    $RM $output
786249dc963fSmrg	    trap "$RM $output; exit $EXIT_FAILURE" 1 2 15
78634b0ead49Smrg
786449dc963fSmrg	    func_emit_wrapper no > $output
786549dc963fSmrg	    chmod +x $output
786649dc963fSmrg	  ;;
786749dc963fSmrg	esac
786849dc963fSmrg      }
786949dc963fSmrg      exit $EXIT_SUCCESS
787049dc963fSmrg      ;;
787149dc963fSmrg    esac
78724b0ead49Smrg
787349dc963fSmrg    # See if we need to build an old-fashioned archive.
787449dc963fSmrg    for oldlib in $oldlibs; do
78754b0ead49Smrg
787649dc963fSmrg      if test "$build_libtool_libs" = convenience; then
787749dc963fSmrg	oldobjs="$libobjs_save $symfileobj"
787849dc963fSmrg	addlibs="$convenience"
787949dc963fSmrg	build_libtool_libs=no
788049dc963fSmrg      else
788149dc963fSmrg	if test "$build_libtool_libs" = module; then
788249dc963fSmrg	  oldobjs="$libobjs_save"
788349dc963fSmrg	  build_libtool_libs=no
788449dc963fSmrg	else
788549dc963fSmrg	  oldobjs="$old_deplibs $non_pic_objects"
788649dc963fSmrg	  if test "$preload" = yes && test -f "$symfileobj"; then
788749dc963fSmrg	    oldobjs="$oldobjs $symfileobj"
788849dc963fSmrg	  fi
788949dc963fSmrg	fi
789049dc963fSmrg	addlibs="$old_convenience"
78914b0ead49Smrg      fi
78924b0ead49Smrg
789349dc963fSmrg      if test -n "$addlibs"; then
789449dc963fSmrg	gentop="$output_objdir/${outputname}x"
789549dc963fSmrg	generated="$generated $gentop"
78964b0ead49Smrg
789749dc963fSmrg	func_extract_archives $gentop $addlibs
789849dc963fSmrg	oldobjs="$oldobjs $func_extract_archives_result"
789949dc963fSmrg      fi
79004b0ead49Smrg
790149dc963fSmrg      # Do each command in the archive commands.
790249dc963fSmrg      if test -n "$old_archive_from_new_cmds" && test "$build_libtool_libs" = yes; then
790349dc963fSmrg	cmds=$old_archive_from_new_cmds
790449dc963fSmrg      else
79054b0ead49Smrg
790649dc963fSmrg	# Add any objects from preloaded convenience libraries
790749dc963fSmrg	if test -n "$dlprefiles"; then
790849dc963fSmrg	  gentop="$output_objdir/${outputname}x"
790949dc963fSmrg	  generated="$generated $gentop"
79104b0ead49Smrg
791149dc963fSmrg	  func_extract_archives $gentop $dlprefiles
791249dc963fSmrg	  oldobjs="$oldobjs $func_extract_archives_result"
791349dc963fSmrg	fi
79144b0ead49Smrg
791549dc963fSmrg	# POSIX demands no paths to be encoded in archives.  We have
791649dc963fSmrg	# to avoid creating archives with duplicate basenames if we
791749dc963fSmrg	# might have to extract them afterwards, e.g., when creating a
791849dc963fSmrg	# static archive out of a convenience library, or when linking
791949dc963fSmrg	# the entirety of a libtool archive into another (currently
792049dc963fSmrg	# not supported by libtool).
792149dc963fSmrg	if (for obj in $oldobjs
792249dc963fSmrg	    do
792349dc963fSmrg	      func_basename "$obj"
792449dc963fSmrg	      $ECHO "$func_basename_result"
792549dc963fSmrg	    done | sort | sort -uc >/dev/null 2>&1); then
792649dc963fSmrg	  :
792749dc963fSmrg	else
792849dc963fSmrg	  $ECHO "copying selected object files to avoid basename conflicts..."
792949dc963fSmrg	  gentop="$output_objdir/${outputname}x"
793049dc963fSmrg	  generated="$generated $gentop"
793149dc963fSmrg	  func_mkdir_p "$gentop"
793249dc963fSmrg	  save_oldobjs=$oldobjs
793349dc963fSmrg	  oldobjs=
793449dc963fSmrg	  counter=1
793549dc963fSmrg	  for obj in $save_oldobjs
793649dc963fSmrg	  do
793749dc963fSmrg	    func_basename "$obj"
793849dc963fSmrg	    objbase="$func_basename_result"
793949dc963fSmrg	    case " $oldobjs " in
794049dc963fSmrg	    " ") oldobjs=$obj ;;
794149dc963fSmrg	    *[\ /]"$objbase "*)
794249dc963fSmrg	      while :; do
794349dc963fSmrg		# Make sure we don't pick an alternate name that also
794449dc963fSmrg		# overlaps.
794549dc963fSmrg		newobj=lt$counter-$objbase
794649dc963fSmrg		func_arith $counter + 1
794749dc963fSmrg		counter=$func_arith_result
794849dc963fSmrg		case " $oldobjs " in
794949dc963fSmrg		*[\ /]"$newobj "*) ;;
795049dc963fSmrg		*) if test ! -f "$gentop/$newobj"; then break; fi ;;
795149dc963fSmrg		esac
795249dc963fSmrg	      done
795349dc963fSmrg	      func_show_eval "ln $obj $gentop/$newobj || cp $obj $gentop/$newobj"
795449dc963fSmrg	      oldobjs="$oldobjs $gentop/$newobj"
795549dc963fSmrg	      ;;
795649dc963fSmrg	    *) oldobjs="$oldobjs $obj" ;;
795749dc963fSmrg	    esac
79584b0ead49Smrg	  done
79594b0ead49Smrg	fi
796049dc963fSmrg	eval cmds=\"$old_archive_cmds\"
79614b0ead49Smrg
796249dc963fSmrg	func_len " $cmds"
796349dc963fSmrg	len=$func_len_result
796449dc963fSmrg	if test "$len" -lt "$max_cmd_len" || test "$max_cmd_len" -le -1; then
796549dc963fSmrg	  cmds=$old_archive_cmds
796649dc963fSmrg	else
796749dc963fSmrg	  # the command line is too long to link in one step, link in parts
796849dc963fSmrg	  func_verbose "using piecewise archive linking..."
796949dc963fSmrg	  save_RANLIB=$RANLIB
797049dc963fSmrg	  RANLIB=:
797149dc963fSmrg	  objlist=
797249dc963fSmrg	  concat_cmds=
797349dc963fSmrg	  save_oldobjs=$oldobjs
797449dc963fSmrg	  oldobjs=
797549dc963fSmrg	  # Is there a better way of finding the last object in the list?
797649dc963fSmrg	  for obj in $save_oldobjs
797749dc963fSmrg	  do
797849dc963fSmrg	    last_oldobj=$obj
797949dc963fSmrg	  done
798049dc963fSmrg	  eval test_cmds=\"$old_archive_cmds\"
798149dc963fSmrg	  func_len " $test_cmds"
798249dc963fSmrg	  len0=$func_len_result
798349dc963fSmrg	  len=$len0
798449dc963fSmrg	  for obj in $save_oldobjs
798549dc963fSmrg	  do
798649dc963fSmrg	    func_len " $obj"
798749dc963fSmrg	    func_arith $len + $func_len_result
798849dc963fSmrg	    len=$func_arith_result
798949dc963fSmrg	    func_append objlist " $obj"
799049dc963fSmrg	    if test "$len" -lt "$max_cmd_len"; then
799149dc963fSmrg	      :
799249dc963fSmrg	    else
799349dc963fSmrg	      # the above command should be used before it gets too long
799449dc963fSmrg	      oldobjs=$objlist
799549dc963fSmrg	      if test "$obj" = "$last_oldobj" ; then
799649dc963fSmrg		RANLIB=$save_RANLIB
799749dc963fSmrg	      fi
799849dc963fSmrg	      test -z "$concat_cmds" || concat_cmds=$concat_cmds~
799949dc963fSmrg	      eval concat_cmds=\"\${concat_cmds}$old_archive_cmds\"
800049dc963fSmrg	      objlist=
800149dc963fSmrg	      len=$len0
800249dc963fSmrg	    fi
800349dc963fSmrg	  done
800449dc963fSmrg	  RANLIB=$save_RANLIB
800549dc963fSmrg	  oldobjs=$objlist
800649dc963fSmrg	  if test "X$oldobjs" = "X" ; then
800749dc963fSmrg	    eval cmds=\"\$concat_cmds\"
800849dc963fSmrg	  else
800949dc963fSmrg	    eval cmds=\"\$concat_cmds~\$old_archive_cmds\"
801049dc963fSmrg	  fi
801149dc963fSmrg	fi
801249dc963fSmrg      fi
801349dc963fSmrg      func_execute_cmds "$cmds" 'exit $?'
80144b0ead49Smrg    done
80154b0ead49Smrg
801649dc963fSmrg    test -n "$generated" && \
801749dc963fSmrg      func_show_eval "${RM}r$generated"
80184b0ead49Smrg
801949dc963fSmrg    # Now create the libtool archive.
802049dc963fSmrg    case $output in
802149dc963fSmrg    *.la)
802249dc963fSmrg      old_library=
802349dc963fSmrg      test "$build_old_libs" = yes && old_library="$libname.$libext"
802449dc963fSmrg      func_verbose "creating $output"
80254b0ead49Smrg
802649dc963fSmrg      # Preserve any variables that may affect compiler behavior
802749dc963fSmrg      for var in $variables_saved_for_relink; do
802849dc963fSmrg	if eval test -z \"\${$var+set}\"; then
802949dc963fSmrg	  relink_command="{ test -z \"\${$var+set}\" || $lt_unset $var || { $var=; export $var; }; }; $relink_command"
803049dc963fSmrg	elif eval var_value=\$$var; test -z "$var_value"; then
803149dc963fSmrg	  relink_command="$var=; export $var; $relink_command"
80324b0ead49Smrg	else
803349dc963fSmrg	  func_quote_for_eval "$var_value"
803449dc963fSmrg	  relink_command="$var=$func_quote_for_eval_result; export $var; $relink_command"
80354b0ead49Smrg	fi
803649dc963fSmrg      done
803749dc963fSmrg      # Quote the link command for shipping.
803849dc963fSmrg      relink_command="(cd `pwd`; $SHELL $progpath $preserve_args --mode=relink $libtool_args @inst_prefix_dir@)"
803949dc963fSmrg      relink_command=`$ECHO "X$relink_command" | $Xsed -e "$sed_quote_subst"`
804049dc963fSmrg      if test "$hardcode_automatic" = yes ; then
804149dc963fSmrg	relink_command=
804249dc963fSmrg      fi
80434b0ead49Smrg
804449dc963fSmrg      # Only create the output if not a dry run.
804549dc963fSmrg      $opt_dry_run || {
804649dc963fSmrg	for installed in no yes; do
804749dc963fSmrg	  if test "$installed" = yes; then
804849dc963fSmrg	    if test -z "$install_libdir"; then
804949dc963fSmrg	      break
805049dc963fSmrg	    fi
805149dc963fSmrg	    output="$output_objdir/$outputname"i
805249dc963fSmrg	    # Replace all uninstalled libtool libraries with the installed ones
805349dc963fSmrg	    newdependency_libs=
805449dc963fSmrg	    for deplib in $dependency_libs; do
805549dc963fSmrg	      case $deplib in
805649dc963fSmrg	      *.la)
805749dc963fSmrg		func_basename "$deplib"
805849dc963fSmrg		name="$func_basename_result"
805949dc963fSmrg		eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $deplib`
806049dc963fSmrg		test -z "$libdir" && \
806149dc963fSmrg		  func_fatal_error "\`$deplib' is not a valid libtool archive"
806249dc963fSmrg		newdependency_libs="$newdependency_libs $libdir/$name"
806349dc963fSmrg		;;
806449dc963fSmrg	      *) newdependency_libs="$newdependency_libs $deplib" ;;
806549dc963fSmrg	      esac
806649dc963fSmrg	    done
806749dc963fSmrg	    dependency_libs="$newdependency_libs"
806849dc963fSmrg	    newdlfiles=
806949dc963fSmrg
807049dc963fSmrg	    for lib in $dlfiles; do
807149dc963fSmrg	      case $lib in
807249dc963fSmrg	      *.la)
807349dc963fSmrg	        func_basename "$lib"
807449dc963fSmrg		name="$func_basename_result"
807549dc963fSmrg		eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $lib`
807649dc963fSmrg		test -z "$libdir" && \
807749dc963fSmrg		  func_fatal_error "\`$lib' is not a valid libtool archive"
807849dc963fSmrg		newdlfiles="$newdlfiles $libdir/$name"
807949dc963fSmrg		;;
808049dc963fSmrg	      *) newdlfiles="$newdlfiles $lib" ;;
808149dc963fSmrg	      esac
808249dc963fSmrg	    done
808349dc963fSmrg	    dlfiles="$newdlfiles"
808449dc963fSmrg	    newdlprefiles=
808549dc963fSmrg	    for lib in $dlprefiles; do
808649dc963fSmrg	      case $lib in
808749dc963fSmrg	      *.la)
808849dc963fSmrg		# Only pass preopened files to the pseudo-archive (for
808949dc963fSmrg		# eventual linking with the app. that links it) if we
809049dc963fSmrg		# didn't already link the preopened objects directly into
809149dc963fSmrg		# the library:
809249dc963fSmrg		func_basename "$lib"
809349dc963fSmrg		name="$func_basename_result"
809449dc963fSmrg		eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $lib`
809549dc963fSmrg		test -z "$libdir" && \
809649dc963fSmrg		  func_fatal_error "\`$lib' is not a valid libtool archive"
809749dc963fSmrg		newdlprefiles="$newdlprefiles $libdir/$name"
809849dc963fSmrg		;;
809949dc963fSmrg	      esac
810049dc963fSmrg	    done
810149dc963fSmrg	    dlprefiles="$newdlprefiles"
810249dc963fSmrg	  else
810349dc963fSmrg	    newdlfiles=
810449dc963fSmrg	    for lib in $dlfiles; do
810549dc963fSmrg	      case $lib in
810649dc963fSmrg		[\\/]* | [A-Za-z]:[\\/]*) abs="$lib" ;;
810749dc963fSmrg		*) abs=`pwd`"/$lib" ;;
810849dc963fSmrg	      esac
810949dc963fSmrg	      newdlfiles="$newdlfiles $abs"
811049dc963fSmrg	    done
811149dc963fSmrg	    dlfiles="$newdlfiles"
811249dc963fSmrg	    newdlprefiles=
811349dc963fSmrg	    for lib in $dlprefiles; do
811449dc963fSmrg	      case $lib in
811549dc963fSmrg		[\\/]* | [A-Za-z]:[\\/]*) abs="$lib" ;;
811649dc963fSmrg		*) abs=`pwd`"/$lib" ;;
811749dc963fSmrg	      esac
811849dc963fSmrg	      newdlprefiles="$newdlprefiles $abs"
811949dc963fSmrg	    done
812049dc963fSmrg	    dlprefiles="$newdlprefiles"
812149dc963fSmrg	  fi
812249dc963fSmrg	  $RM $output
812349dc963fSmrg	  # place dlname in correct position for cygwin
812449dc963fSmrg	  tdlname=$dlname
812549dc963fSmrg	  case $host,$output,$installed,$module,$dlname in
812649dc963fSmrg	    *cygwin*,*lai,yes,no,*.dll | *mingw*,*lai,yes,no,*.dll | *cegcc*,*lai,yes,no,*.dll) tdlname=../bin/$dlname ;;
812749dc963fSmrg	  esac
812849dc963fSmrg	  $ECHO > $output "\
812949dc963fSmrg# $outputname - a libtool library file
813049dc963fSmrg# Generated by $PROGRAM (GNU $PACKAGE$TIMESTAMP) $VERSION
813149dc963fSmrg#
813249dc963fSmrg# Please DO NOT delete this file!
813349dc963fSmrg# It is necessary for linking the library.
81344b0ead49Smrg
813549dc963fSmrg# The name that we can dlopen(3).
813649dc963fSmrgdlname='$tdlname'
81374b0ead49Smrg
813849dc963fSmrg# Names of this library.
813949dc963fSmrglibrary_names='$library_names'
81404b0ead49Smrg
814149dc963fSmrg# The name of the static archive.
814249dc963fSmrgold_library='$old_library'
81434b0ead49Smrg
814449dc963fSmrg# Linker flags that can not go in dependency_libs.
814549dc963fSmrginherited_linker_flags='$new_inherited_linker_flags'
81464b0ead49Smrg
814749dc963fSmrg# Libraries that this one depends upon.
814849dc963fSmrgdependency_libs='$dependency_libs'
81494b0ead49Smrg
815049dc963fSmrg# Names of additional weak libraries provided by this library
815149dc963fSmrgweak_library_names='$weak_libs'
81524b0ead49Smrg
815349dc963fSmrg# Version information for $libname.
815449dc963fSmrgcurrent=$current
815549dc963fSmrgage=$age
815649dc963fSmrgrevision=$revision
81574b0ead49Smrg
815849dc963fSmrg# Is this an already installed library?
815949dc963fSmrginstalled=$installed
81604b0ead49Smrg
816149dc963fSmrg# Should we warn about portability when linking against -modules?
816249dc963fSmrgshouldnotlink=$module
81634b0ead49Smrg
816449dc963fSmrg# Files to dlopen/dlpreopen
816549dc963fSmrgdlopen='$dlfiles'
816649dc963fSmrgdlpreopen='$dlprefiles'
81674b0ead49Smrg
816849dc963fSmrg# Directory that this library needs to be installed in:
816949dc963fSmrglibdir='$install_libdir'"
817049dc963fSmrg	  if test "$installed" = no && test "$need_relink" = yes; then
817149dc963fSmrg	    $ECHO >> $output "\
817249dc963fSmrgrelink_command=\"$relink_command\""
817349dc963fSmrg	  fi
817449dc963fSmrg	done
817549dc963fSmrg      }
81764b0ead49Smrg
817749dc963fSmrg      # Do a symbolic link so that the libtool archive can be found in
817849dc963fSmrg      # LD_LIBRARY_PATH before the program is installed.
817949dc963fSmrg      func_show_eval '( cd "$output_objdir" && $RM "$outputname" && $LN_S "../$outputname" "$outputname" )' 'exit $?'
818049dc963fSmrg      ;;
818149dc963fSmrg    esac
818249dc963fSmrg    exit $EXIT_SUCCESS
818349dc963fSmrg}
81844b0ead49Smrg
818549dc963fSmrg{ test "$mode" = link || test "$mode" = relink; } &&
818649dc963fSmrg    func_mode_link ${1+"$@"}
81874b0ead49Smrg
81884b0ead49Smrg
818949dc963fSmrg# func_mode_uninstall arg...
819049dc963fSmrgfunc_mode_uninstall ()
819149dc963fSmrg{
819249dc963fSmrg    $opt_debug
819349dc963fSmrg    RM="$nonopt"
81944b0ead49Smrg    files=
81954b0ead49Smrg    rmforce=
81964b0ead49Smrg    exit_status=0
81974b0ead49Smrg
81984b0ead49Smrg    # This variable tells wrapper scripts just to set variables rather
81994b0ead49Smrg    # than running their programs.
82004b0ead49Smrg    libtool_install_magic="$magic"
82014b0ead49Smrg
82024b0ead49Smrg    for arg
82034b0ead49Smrg    do
82044b0ead49Smrg      case $arg in
820549dc963fSmrg      -f) RM="$RM $arg"; rmforce=yes ;;
820649dc963fSmrg      -*) RM="$RM $arg" ;;
82074b0ead49Smrg      *) files="$files $arg" ;;
82084b0ead49Smrg      esac
82094b0ead49Smrg    done
82104b0ead49Smrg
821149dc963fSmrg    test -z "$RM" && \
821249dc963fSmrg      func_fatal_help "you must specify an RM program"
82134b0ead49Smrg
82144b0ead49Smrg    rmdirs=
82154b0ead49Smrg
82164b0ead49Smrg    origobjdir="$objdir"
82174b0ead49Smrg    for file in $files; do
821849dc963fSmrg      func_dirname "$file" "" "."
821949dc963fSmrg      dir="$func_dirname_result"
822049dc963fSmrg      if test "X$dir" = X.; then
82214b0ead49Smrg	objdir="$origobjdir"
82224b0ead49Smrg      else
82234b0ead49Smrg	objdir="$dir/$origobjdir"
82244b0ead49Smrg      fi
822549dc963fSmrg      func_basename "$file"
822649dc963fSmrg      name="$func_basename_result"
82274b0ead49Smrg      test "$mode" = uninstall && objdir="$dir"
82284b0ead49Smrg
82294b0ead49Smrg      # Remember objdir for removal later, being careful to avoid duplicates
82304b0ead49Smrg      if test "$mode" = clean; then
82314b0ead49Smrg	case " $rmdirs " in
82324b0ead49Smrg	  *" $objdir "*) ;;
82334b0ead49Smrg	  *) rmdirs="$rmdirs $objdir" ;;
82344b0ead49Smrg	esac
82354b0ead49Smrg      fi
82364b0ead49Smrg
82374b0ead49Smrg      # Don't error if the file doesn't exist and rm -f was used.
823849dc963fSmrg      if { test -L "$file"; } >/dev/null 2>&1 ||
823949dc963fSmrg	 { test -h "$file"; } >/dev/null 2>&1 ||
824049dc963fSmrg	 test -f "$file"; then
82414b0ead49Smrg	:
82424b0ead49Smrg      elif test -d "$file"; then
82434b0ead49Smrg	exit_status=1
82444b0ead49Smrg	continue
82454b0ead49Smrg      elif test "$rmforce" = yes; then
82464b0ead49Smrg	continue
82474b0ead49Smrg      fi
82484b0ead49Smrg
82494b0ead49Smrg      rmfiles="$file"
82504b0ead49Smrg
82514b0ead49Smrg      case $name in
82524b0ead49Smrg      *.la)
82534b0ead49Smrg	# Possibly a libtool archive, so verify it.
825449dc963fSmrg	if func_lalib_p "$file"; then
825549dc963fSmrg	  func_source $dir/$name
82564b0ead49Smrg
82574b0ead49Smrg	  # Delete the libtool libraries and symlinks.
82584b0ead49Smrg	  for n in $library_names; do
82594b0ead49Smrg	    rmfiles="$rmfiles $objdir/$n"
82604b0ead49Smrg	  done
82614b0ead49Smrg	  test -n "$old_library" && rmfiles="$rmfiles $objdir/$old_library"
82624b0ead49Smrg
82634b0ead49Smrg	  case "$mode" in
82644b0ead49Smrg	  clean)
82654b0ead49Smrg	    case "  $library_names " in
82664b0ead49Smrg	    # "  " in the beginning catches empty $dlname
82674b0ead49Smrg	    *" $dlname "*) ;;
82684b0ead49Smrg	    *) rmfiles="$rmfiles $objdir/$dlname" ;;
82694b0ead49Smrg	    esac
827049dc963fSmrg	    test -n "$libdir" && rmfiles="$rmfiles $objdir/$name $objdir/${name}i"
82714b0ead49Smrg	    ;;
82724b0ead49Smrg	  uninstall)
82734b0ead49Smrg	    if test -n "$library_names"; then
82744b0ead49Smrg	      # Do each command in the postuninstall commands.
827549dc963fSmrg	      func_execute_cmds "$postuninstall_cmds" 'test "$rmforce" = yes || exit_status=1'
82764b0ead49Smrg	    fi
82774b0ead49Smrg
82784b0ead49Smrg	    if test -n "$old_library"; then
82794b0ead49Smrg	      # Do each command in the old_postuninstall commands.
828049dc963fSmrg	      func_execute_cmds "$old_postuninstall_cmds" 'test "$rmforce" = yes || exit_status=1'
82814b0ead49Smrg	    fi
82824b0ead49Smrg	    # FIXME: should reinstall the best remaining shared library.
82834b0ead49Smrg	    ;;
82844b0ead49Smrg	  esac
82854b0ead49Smrg	fi
82864b0ead49Smrg	;;
82874b0ead49Smrg
82884b0ead49Smrg      *.lo)
82894b0ead49Smrg	# Possibly a libtool object, so verify it.
829049dc963fSmrg	if func_lalib_p "$file"; then
82914b0ead49Smrg
82924b0ead49Smrg	  # Read the .lo file
829349dc963fSmrg	  func_source $dir/$name
82944b0ead49Smrg
82954b0ead49Smrg	  # Add PIC object to the list of files to remove.
829649dc963fSmrg	  if test -n "$pic_object" &&
829749dc963fSmrg	     test "$pic_object" != none; then
82984b0ead49Smrg	    rmfiles="$rmfiles $dir/$pic_object"
82994b0ead49Smrg	  fi
83004b0ead49Smrg
83014b0ead49Smrg	  # Add non-PIC object to the list of files to remove.
830249dc963fSmrg	  if test -n "$non_pic_object" &&
830349dc963fSmrg	     test "$non_pic_object" != none; then
83044b0ead49Smrg	    rmfiles="$rmfiles $dir/$non_pic_object"
83054b0ead49Smrg	  fi
83064b0ead49Smrg	fi
83074b0ead49Smrg	;;
83084b0ead49Smrg
83094b0ead49Smrg      *)
83104b0ead49Smrg	if test "$mode" = clean ; then
83114b0ead49Smrg	  noexename=$name
83124b0ead49Smrg	  case $file in
83134b0ead49Smrg	  *.exe)
831449dc963fSmrg	    func_stripname '' '.exe' "$file"
831549dc963fSmrg	    file=$func_stripname_result
831649dc963fSmrg	    func_stripname '' '.exe' "$name"
831749dc963fSmrg	    noexename=$func_stripname_result
83184b0ead49Smrg	    # $file with .exe has already been added to rmfiles,
83194b0ead49Smrg	    # add $file without .exe
83204b0ead49Smrg	    rmfiles="$rmfiles $file"
83214b0ead49Smrg	    ;;
83224b0ead49Smrg	  esac
83234b0ead49Smrg	  # Do a test to see if this is a libtool program.
832449dc963fSmrg	  if func_ltwrapper_p "$file"; then
832549dc963fSmrg	    if func_ltwrapper_executable_p "$file"; then
832649dc963fSmrg	      func_ltwrapper_scriptname "$file"
832749dc963fSmrg	      relink_command=
832849dc963fSmrg	      func_source $func_ltwrapper_scriptname_result
832949dc963fSmrg	      rmfiles="$rmfiles $func_ltwrapper_scriptname_result"
833049dc963fSmrg	    else
833149dc963fSmrg	      relink_command=
833249dc963fSmrg	      func_source $dir/$noexename
833349dc963fSmrg	    fi
83344b0ead49Smrg
83354b0ead49Smrg	    # note $name still contains .exe if it was in $file originally
83364b0ead49Smrg	    # as does the version of $file that was added into $rmfiles
83374b0ead49Smrg	    rmfiles="$rmfiles $objdir/$name $objdir/${name}S.${objext}"
83384b0ead49Smrg	    if test "$fast_install" = yes && test -n "$relink_command"; then
83394b0ead49Smrg	      rmfiles="$rmfiles $objdir/lt-$name"
83404b0ead49Smrg	    fi
83414b0ead49Smrg	    if test "X$noexename" != "X$name" ; then
83424b0ead49Smrg	      rmfiles="$rmfiles $objdir/lt-${noexename}.c"
83434b0ead49Smrg	    fi
83444b0ead49Smrg	  fi
83454b0ead49Smrg	fi
83464b0ead49Smrg	;;
83474b0ead49Smrg      esac
834849dc963fSmrg      func_show_eval "$RM $rmfiles" 'exit_status=1'
83494b0ead49Smrg    done
83504b0ead49Smrg    objdir="$origobjdir"
83514b0ead49Smrg
83524b0ead49Smrg    # Try to remove the ${objdir}s in the directories where we deleted files
83534b0ead49Smrg    for dir in $rmdirs; do
83544b0ead49Smrg      if test -d "$dir"; then
835549dc963fSmrg	func_show_eval "rmdir $dir >/dev/null 2>&1"
83564b0ead49Smrg      fi
83574b0ead49Smrg    done
83584b0ead49Smrg
83594b0ead49Smrg    exit $exit_status
836049dc963fSmrg}
83614b0ead49Smrg
836249dc963fSmrg{ test "$mode" = uninstall || test "$mode" = clean; } &&
836349dc963fSmrg    func_mode_uninstall ${1+"$@"}
83644b0ead49Smrg
836549dc963fSmrgtest -z "$mode" && {
836649dc963fSmrg  help="$generic_help"
836749dc963fSmrg  func_fatal_help "you must specify a MODE"
836849dc963fSmrg}
836949dc963fSmrg
837049dc963fSmrgtest -z "$exec_cmd" && \
837149dc963fSmrg  func_fatal_help "invalid operation mode \`$mode'"
83724b0ead49Smrg
83734b0ead49Smrgif test -n "$exec_cmd"; then
837449dc963fSmrg  eval exec "$exec_cmd"
83754b0ead49Smrg  exit $EXIT_FAILURE
83764b0ead49Smrgfi
83774b0ead49Smrg
837849dc963fSmrgexit $exit_status
83794b0ead49Smrg
83804b0ead49Smrg
83814b0ead49Smrg# The TAGs below are defined such that we never get into a situation
83824b0ead49Smrg# in which we disable both kinds of libraries.  Given conflicting
83834b0ead49Smrg# choices, we go for a static library, that is the most portable,
83844b0ead49Smrg# since we can't tell whether shared libraries were disabled because
83854b0ead49Smrg# the user asked for that or because the platform doesn't support
83864b0ead49Smrg# them.  This is particularly important on AIX, because we don't
83874b0ead49Smrg# support having both static and shared libraries enabled at the same
83884b0ead49Smrg# time on that platform, so we default to a shared-only configuration.
83894b0ead49Smrg# If a disable-shared tag is given, we'll fallback to a static-only
83904b0ead49Smrg# configuration.  But we'll never go from static-only to shared-only.
83914b0ead49Smrg
83924b0ead49Smrg# ### BEGIN LIBTOOL TAG CONFIG: disable-shared
839349dc963fSmrgbuild_libtool_libs=no
839449dc963fSmrgbuild_old_libs=yes
83954b0ead49Smrg# ### END LIBTOOL TAG CONFIG: disable-shared
83964b0ead49Smrg
83974b0ead49Smrg# ### BEGIN LIBTOOL TAG CONFIG: disable-static
839849dc963fSmrgbuild_old_libs=`case $build_libtool_libs in yes) echo no;; *) echo yes;; esac`
83994b0ead49Smrg# ### END LIBTOOL TAG CONFIG: disable-static
84004b0ead49Smrg
84014b0ead49Smrg# Local Variables:
84024b0ead49Smrg# mode:shell-script
84034b0ead49Smrg# sh-indentation:2
84044b0ead49Smrg# End:
840549dc963fSmrg# vi:sw=2
840649dc963fSmrg
8407