ltmain.sh revision 85ee4c00
185ee4c00Smrg# Generated from ltmain.m4sh.
285ee4c00Smrg
385ee4c00Smrg# ltmain.sh (GNU libtool) 2.2.6
485ee4c00Smrg# Written by Gordon Matzigkeit <gord@gnu.ai.mit.edu>, 1996
585ee4c00Smrg
685ee4c00Smrg# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005, 2006, 2007 2008 Free Software Foundation, Inc.
785ee4c00Smrg# This is free software; see the source for copying conditions.  There is NO
885ee4c00Smrg# warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
985ee4c00Smrg
1085ee4c00Smrg# GNU Libtool is free software; you can redistribute it and/or modify
11692f60a7Smrg# it under the terms of the GNU General Public License as published by
12692f60a7Smrg# the Free Software Foundation; either version 2 of the License, or
13692f60a7Smrg# (at your option) any later version.
14692f60a7Smrg#
1585ee4c00Smrg# As a special exception to the GNU General Public License,
1685ee4c00Smrg# if you distribute this file as part of a program or library that
1785ee4c00Smrg# is built using GNU Libtool, you may include this file under the
1885ee4c00Smrg# same distribution terms that you use for the rest of that program.
1985ee4c00Smrg#
2085ee4c00Smrg# GNU Libtool is distributed in the hope that it will be useful, but
21692f60a7Smrg# WITHOUT ANY WARRANTY; without even the implied warranty of
22692f60a7Smrg# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
23692f60a7Smrg# General Public License for more details.
24692f60a7Smrg#
25692f60a7Smrg# You should have received a copy of the GNU General Public License
2685ee4c00Smrg# along with GNU Libtool; see the file COPYING.  If not, a copy
2785ee4c00Smrg# can be downloaded from http://www.gnu.org/licenses/gpl.html,
2885ee4c00Smrg# or obtained by writing to the Free Software Foundation, Inc.,
2985ee4c00Smrg# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
30692f60a7Smrg
3185ee4c00Smrg# Usage: $progname [OPTION]... [MODE-ARG]...
3285ee4c00Smrg#
3385ee4c00Smrg# Provide generalized library-building support services.
3485ee4c00Smrg#
3585ee4c00Smrg#     --config             show all configuration variables
3685ee4c00Smrg#     --debug              enable verbose shell tracing
3785ee4c00Smrg# -n, --dry-run            display commands without modifying any files
3885ee4c00Smrg#     --features           display basic configuration information and exit
3985ee4c00Smrg#     --mode=MODE          use operation mode MODE
4085ee4c00Smrg#     --preserve-dup-deps  don't remove duplicate dependency libraries
4185ee4c00Smrg#     --quiet, --silent    don't print informational messages
4285ee4c00Smrg#     --tag=TAG            use configuration variables from tag TAG
4385ee4c00Smrg# -v, --verbose            print informational messages (default)
4485ee4c00Smrg#     --version            print version information
4585ee4c00Smrg# -h, --help               print short or long help message
4685ee4c00Smrg#
4785ee4c00Smrg# MODE must be one of the following:
4885ee4c00Smrg#
4985ee4c00Smrg#       clean              remove files from the build directory
5085ee4c00Smrg#       compile            compile a source file into a libtool object
5185ee4c00Smrg#       execute            automatically set library path, then run a program
5285ee4c00Smrg#       finish             complete the installation of libtool libraries
5385ee4c00Smrg#       install            install libraries or executables
5485ee4c00Smrg#       link               create a library or an executable
5585ee4c00Smrg#       uninstall          remove libraries from an installed directory
5685ee4c00Smrg#
5785ee4c00Smrg# MODE-ARGS vary depending on the MODE.
5885ee4c00Smrg# Try `$progname --help --mode=MODE' for a more detailed description of MODE.
5985ee4c00Smrg#
6085ee4c00Smrg# When reporting a bug, please describe a test case to reproduce it and
6185ee4c00Smrg# include the following information:
6285ee4c00Smrg#
6385ee4c00Smrg#       host-triplet:	$host
6485ee4c00Smrg#       shell:		$SHELL
6585ee4c00Smrg#       compiler:		$LTCC
6685ee4c00Smrg#       compiler flags:		$LTCFLAGS
6785ee4c00Smrg#       linker:		$LD (gnu? $with_gnu_ld)
6885ee4c00Smrg#       $progname:		(GNU libtool) 2.2.6
6985ee4c00Smrg#       automake:		$automake_version
7085ee4c00Smrg#       autoconf:		$autoconf_version
7185ee4c00Smrg#
7285ee4c00Smrg# Report bugs to <bug-libtool@gnu.org>.
73692f60a7Smrg
74692f60a7SmrgPROGRAM=ltmain.sh
75692f60a7SmrgPACKAGE=libtool
7685ee4c00SmrgVERSION=2.2.6
7785ee4c00SmrgTIMESTAMP=""
7885ee4c00Smrgpackage_revision=1.3012
7954569438Smrg
8085ee4c00Smrg# Be Bourne compatible
8154569438Smrgif test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then
8254569438Smrg  emulate sh
8354569438Smrg  NULLCMD=:
8454569438Smrg  # Zsh 3.x and 4.x performs word splitting on ${1+"$@"}, which
8554569438Smrg  # is contrary to our usage.  Disable this feature.
8654569438Smrg  alias -g '${1+"$@"}'='"$@"'
87692f60a7Smrg  setopt NO_GLOB_SUBST
8854569438Smrgelse
8954569438Smrg  case `(set -o) 2>/dev/null` in *posix*) set -o posix;; esac
90692f60a7Smrgfi
9154569438SmrgBIN_SH=xpg4; export BIN_SH # for Tru64
9254569438SmrgDUALCASE=1; export DUALCASE # for MKS sh
93692f60a7Smrg
9485ee4c00Smrg# NLS nuisances: We save the old values to restore during execute mode.
95692f60a7Smrg# Only set LANG and LC_ALL to C if already set.
96692f60a7Smrg# These must not be set unconditionally because not all systems understand
97692f60a7Smrg# e.g. LANG=C (notably SCO).
9885ee4c00Smrglt_user_locale=
9985ee4c00Smrglt_safe_locale=
10054569438Smrgfor lt_var in LANG LANGUAGE LC_ALL LC_CTYPE LC_COLLATE LC_MESSAGES
10154569438Smrgdo
10254569438Smrg  eval "if test \"\${$lt_var+set}\" = set; then
10385ee4c00Smrg          save_$lt_var=\$$lt_var
10485ee4c00Smrg          $lt_var=C
10554569438Smrg	  export $lt_var
10685ee4c00Smrg	  lt_user_locale=\"$lt_var=\\\$save_\$lt_var; \$lt_user_locale\"
10785ee4c00Smrg	  lt_safe_locale=\"$lt_var=C; \$lt_safe_locale\"
10854569438Smrg	fi"
10954569438Smrgdone
11054569438Smrg
11185ee4c00Smrg$lt_unset CDPATH
11285ee4c00Smrg
11385ee4c00Smrg
11485ee4c00Smrg
11585ee4c00Smrg
11685ee4c00Smrg
11785ee4c00Smrg: ${CP="cp -f"}
11885ee4c00Smrg: ${ECHO="echo"}
11985ee4c00Smrg: ${EGREP="/bin/grep -E"}
12085ee4c00Smrg: ${FGREP="/bin/grep -F"}
12185ee4c00Smrg: ${GREP="/bin/grep"}
12285ee4c00Smrg: ${LN_S="ln -s"}
12385ee4c00Smrg: ${MAKE="make"}
12485ee4c00Smrg: ${MKDIR="mkdir"}
12585ee4c00Smrg: ${MV="mv -f"}
12685ee4c00Smrg: ${RM="rm -f"}
12785ee4c00Smrg: ${SED="/bin/sed"}
12885ee4c00Smrg: ${SHELL="${CONFIG_SHELL-/bin/sh}"}
12985ee4c00Smrg: ${Xsed="$SED -e 1s/^X//"}
13085ee4c00Smrg
13185ee4c00Smrg# Global variables:
13285ee4c00SmrgEXIT_SUCCESS=0
13385ee4c00SmrgEXIT_FAILURE=1
13485ee4c00SmrgEXIT_MISMATCH=63  # $? = 63 is used to indicate version mismatch to missing.
13585ee4c00SmrgEXIT_SKIP=77	  # $? = 77 is used to indicate a skipped test to automake.
13685ee4c00Smrg
13785ee4c00Smrgexit_status=$EXIT_SUCCESS
138692f60a7Smrg
139692f60a7Smrg# Make sure IFS has a sensible default
140692f60a7Smrglt_nl='
141692f60a7Smrg'
142692f60a7SmrgIFS=" 	$lt_nl"
143692f60a7Smrg
14485ee4c00Smrgdirname="s,/[^/]*$,,"
14585ee4c00Smrgbasename="s,^.*/,,"
14685ee4c00Smrg
14785ee4c00Smrg# func_dirname_and_basename file append nondir_replacement
14885ee4c00Smrg# perform func_basename and func_dirname in a single function
14985ee4c00Smrg# call:
15085ee4c00Smrg#   dirname:  Compute the dirname of FILE.  If nonempty,
15185ee4c00Smrg#             add APPEND to the result, otherwise set result
15285ee4c00Smrg#             to NONDIR_REPLACEMENT.
15385ee4c00Smrg#             value returned in "$func_dirname_result"
15485ee4c00Smrg#   basename: Compute filename of FILE.
15585ee4c00Smrg#             value retuned in "$func_basename_result"
15685ee4c00Smrg# Implementation must be kept synchronized with func_dirname
15785ee4c00Smrg# and func_basename. For efficiency, we do not delegate to
15885ee4c00Smrg# those functions but instead duplicate the functionality here.
15985ee4c00Smrgfunc_dirname_and_basename ()
16085ee4c00Smrg{
16185ee4c00Smrg  # Extract subdirectory from the argument.
16285ee4c00Smrg  func_dirname_result=`$ECHO "X${1}" | $Xsed -e "$dirname"`
16385ee4c00Smrg  if test "X$func_dirname_result" = "X${1}"; then
16485ee4c00Smrg    func_dirname_result="${3}"
16585ee4c00Smrg  else
16685ee4c00Smrg    func_dirname_result="$func_dirname_result${2}"
16785ee4c00Smrg  fi
16885ee4c00Smrg  func_basename_result=`$ECHO "X${1}" | $Xsed -e "$basename"`
16985ee4c00Smrg}
170692f60a7Smrg
17185ee4c00Smrg# Generated shell functions inserted here.
17285ee4c00Smrg
17385ee4c00Smrg# Work around backward compatibility issue on IRIX 6.5. On IRIX 6.4+, sh
17485ee4c00Smrg# is ksh but when the shell is invoked as "sh" and the current value of
17585ee4c00Smrg# the _XPG environment variable is not equal to 1 (one), the special
17685ee4c00Smrg# positional parameter $0, within a function call, is the name of the
17785ee4c00Smrg# function.
17885ee4c00Smrgprogpath="$0"
17985ee4c00Smrg
18085ee4c00Smrg# The name of this program:
18185ee4c00Smrg# In the unlikely event $progname began with a '-', it would play havoc with
18285ee4c00Smrg# func_echo (imagine progname=-n), so we prepend ./ in that case:
18385ee4c00Smrgfunc_dirname_and_basename "$progpath"
18485ee4c00Smrgprogname=$func_basename_result
18585ee4c00Smrgcase $progname in
18685ee4c00Smrg  -*) progname=./$progname ;;
18785ee4c00Smrgesac
18885ee4c00Smrg
18985ee4c00Smrg# Make sure we have an absolute path for reexecution:
19085ee4c00Smrgcase $progpath in
19185ee4c00Smrg  [\\/]*|[A-Za-z]:\\*) ;;
19285ee4c00Smrg  *[\\/]*)
19385ee4c00Smrg     progdir=$func_dirname_result
19485ee4c00Smrg     progdir=`cd "$progdir" && pwd`
19585ee4c00Smrg     progpath="$progdir/$progname"
19685ee4c00Smrg     ;;
19785ee4c00Smrg  *)
19885ee4c00Smrg     save_IFS="$IFS"
19985ee4c00Smrg     IFS=:
20085ee4c00Smrg     for progdir in $PATH; do
20185ee4c00Smrg       IFS="$save_IFS"
20285ee4c00Smrg       test -x "$progdir/$progname" && break
20385ee4c00Smrg     done
20485ee4c00Smrg     IFS="$save_IFS"
20585ee4c00Smrg     test -n "$progdir" || progdir=`pwd`
20685ee4c00Smrg     progpath="$progdir/$progname"
20785ee4c00Smrg     ;;
20885ee4c00Smrgesac
20985ee4c00Smrg
21085ee4c00Smrg# Sed substitution that helps us do robust quoting.  It backslashifies
21185ee4c00Smrg# metacharacters that are still active within double-quoted strings.
21285ee4c00SmrgXsed="${SED}"' -e 1s/^X//'
21385ee4c00Smrgsed_quote_subst='s/\([`"$\\]\)/\\\1/g'
21485ee4c00Smrg
21585ee4c00Smrg# Same as above, but do not quote variable references.
21685ee4c00Smrgdouble_quote_subst='s/\(["`\\]\)/\\\1/g'
21785ee4c00Smrg
21885ee4c00Smrg# Re-`\' parameter expansions in output of double_quote_subst that were
21985ee4c00Smrg# `\'-ed in input to the same.  If an odd number of `\' preceded a '$'
22085ee4c00Smrg# in input to double_quote_subst, that '$' was protected from expansion.
22185ee4c00Smrg# Since each input `\' is now two `\'s, look for any number of runs of
22285ee4c00Smrg# four `\'s followed by two `\'s and then a '$'.  `\' that '$'.
22385ee4c00Smrgbs='\\'
22485ee4c00Smrgbs2='\\\\'
22585ee4c00Smrgbs4='\\\\\\\\'
22685ee4c00Smrgdollar='\$'
22785ee4c00Smrgsed_double_backslash="\
22885ee4c00Smrg  s/$bs4/&\\
22985ee4c00Smrg/g
23085ee4c00Smrg  s/^$bs2$dollar/$bs&/
23185ee4c00Smrg  s/\\([^$bs]\\)$bs2$dollar/\\1$bs2$bs$dollar/g
23285ee4c00Smrg  s/\n//g"
23385ee4c00Smrg
23485ee4c00Smrg# Standard options:
23585ee4c00Smrgopt_dry_run=false
23685ee4c00Smrgopt_help=false
23785ee4c00Smrgopt_quiet=false
23885ee4c00Smrgopt_verbose=false
23985ee4c00Smrgopt_warning=:
24085ee4c00Smrg
24185ee4c00Smrg# func_echo arg...
24285ee4c00Smrg# Echo program name prefixed message, along with the current mode
24385ee4c00Smrg# name if it has been set yet.
24485ee4c00Smrgfunc_echo ()
24585ee4c00Smrg{
24685ee4c00Smrg    $ECHO "$progname${mode+: }$mode: $*"
24785ee4c00Smrg}
24885ee4c00Smrg
24985ee4c00Smrg# func_verbose arg...
25085ee4c00Smrg# Echo program name prefixed message in verbose mode only.
25185ee4c00Smrgfunc_verbose ()
25285ee4c00Smrg{
25385ee4c00Smrg    $opt_verbose && func_echo ${1+"$@"}
25485ee4c00Smrg
25585ee4c00Smrg    # A bug in bash halts the script if the last line of a function
25685ee4c00Smrg    # fails when set -e is in force, so we need another command to
25785ee4c00Smrg    # work around that:
25885ee4c00Smrg    :
25985ee4c00Smrg}
26085ee4c00Smrg
26185ee4c00Smrg# func_error arg...
26285ee4c00Smrg# Echo program name prefixed message to standard error.
26385ee4c00Smrgfunc_error ()
26485ee4c00Smrg{
26585ee4c00Smrg    $ECHO "$progname${mode+: }$mode: "${1+"$@"} 1>&2
26685ee4c00Smrg}
26785ee4c00Smrg
26885ee4c00Smrg# func_warning arg...
26985ee4c00Smrg# Echo program name prefixed warning message to standard error.
27085ee4c00Smrgfunc_warning ()
27185ee4c00Smrg{
27285ee4c00Smrg    $opt_warning && $ECHO "$progname${mode+: }$mode: warning: "${1+"$@"} 1>&2
27385ee4c00Smrg
27485ee4c00Smrg    # bash bug again:
27585ee4c00Smrg    :
27685ee4c00Smrg}
27785ee4c00Smrg
27885ee4c00Smrg# func_fatal_error arg...
27985ee4c00Smrg# Echo program name prefixed message to standard error, and exit.
28085ee4c00Smrgfunc_fatal_error ()
28185ee4c00Smrg{
28285ee4c00Smrg    func_error ${1+"$@"}
28385ee4c00Smrg    exit $EXIT_FAILURE
28485ee4c00Smrg}
28585ee4c00Smrg
28685ee4c00Smrg# func_fatal_help arg...
28785ee4c00Smrg# Echo program name prefixed message to standard error, followed by
28885ee4c00Smrg# a help hint, and exit.
28985ee4c00Smrgfunc_fatal_help ()
29085ee4c00Smrg{
29185ee4c00Smrg    func_error ${1+"$@"}
29285ee4c00Smrg    func_fatal_error "$help"
29385ee4c00Smrg}
29485ee4c00Smrghelp="Try \`$progname --help' for more information."  ## default
29585ee4c00Smrg
29685ee4c00Smrg
29785ee4c00Smrg# func_grep expression filename
29885ee4c00Smrg# Check whether EXPRESSION matches any line of FILENAME, without output.
29985ee4c00Smrgfunc_grep ()
30085ee4c00Smrg{
30185ee4c00Smrg    $GREP "$1" "$2" >/dev/null 2>&1
30285ee4c00Smrg}
30385ee4c00Smrg
30485ee4c00Smrg
30585ee4c00Smrg# func_mkdir_p directory-path
30685ee4c00Smrg# Make sure the entire path to DIRECTORY-PATH is available.
30785ee4c00Smrgfunc_mkdir_p ()
30885ee4c00Smrg{
30985ee4c00Smrg    my_directory_path="$1"
31085ee4c00Smrg    my_dir_list=
31185ee4c00Smrg
31285ee4c00Smrg    if test -n "$my_directory_path" && test "$opt_dry_run" != ":"; then
31385ee4c00Smrg
31485ee4c00Smrg      # Protect directory names starting with `-'
31585ee4c00Smrg      case $my_directory_path in
31685ee4c00Smrg        -*) my_directory_path="./$my_directory_path" ;;
31785ee4c00Smrg      esac
31885ee4c00Smrg
31985ee4c00Smrg      # While some portion of DIR does not yet exist...
32085ee4c00Smrg      while test ! -d "$my_directory_path"; do
32185ee4c00Smrg        # ...make a list in topmost first order.  Use a colon delimited
32285ee4c00Smrg	# list incase some portion of path contains whitespace.
32385ee4c00Smrg        my_dir_list="$my_directory_path:$my_dir_list"
32485ee4c00Smrg
32585ee4c00Smrg        # If the last portion added has no slash in it, the list is done
32685ee4c00Smrg        case $my_directory_path in */*) ;; *) break ;; esac
32785ee4c00Smrg
32885ee4c00Smrg        # ...otherwise throw away the child directory and loop
32985ee4c00Smrg        my_directory_path=`$ECHO "X$my_directory_path" | $Xsed -e "$dirname"`
33085ee4c00Smrg      done
33185ee4c00Smrg      my_dir_list=`$ECHO "X$my_dir_list" | $Xsed -e 's,:*$,,'`
33285ee4c00Smrg
33385ee4c00Smrg      save_mkdir_p_IFS="$IFS"; IFS=':'
33485ee4c00Smrg      for my_dir in $my_dir_list; do
33585ee4c00Smrg	IFS="$save_mkdir_p_IFS"
33685ee4c00Smrg        # mkdir can fail with a `File exist' error if two processes
33785ee4c00Smrg        # try to create one of the directories concurrently.  Don't
33885ee4c00Smrg        # stop in that case!
33985ee4c00Smrg        $MKDIR "$my_dir" 2>/dev/null || :
34085ee4c00Smrg      done
34185ee4c00Smrg      IFS="$save_mkdir_p_IFS"
34285ee4c00Smrg
34385ee4c00Smrg      # Bail out if we (or some other process) failed to create a directory.
34485ee4c00Smrg      test -d "$my_directory_path" || \
34585ee4c00Smrg        func_fatal_error "Failed to create \`$1'"
34685ee4c00Smrg    fi
34785ee4c00Smrg}
348692f60a7Smrg
349692f60a7Smrg
350692f60a7Smrg# func_mktempdir [string]
351692f60a7Smrg# Make a temporary directory that won't clash with other running
352692f60a7Smrg# libtool processes, and avoids race conditions if possible.  If
353692f60a7Smrg# given, STRING is the basename for that directory.
354692f60a7Smrgfunc_mktempdir ()
355692f60a7Smrg{
356692f60a7Smrg    my_template="${TMPDIR-/tmp}/${1-$progname}"
357692f60a7Smrg
35885ee4c00Smrg    if test "$opt_dry_run" = ":"; then
359692f60a7Smrg      # Return a directory name, but don't create it in dry-run mode
360692f60a7Smrg      my_tmpdir="${my_template}-$$"
361692f60a7Smrg    else
362692f60a7Smrg
363692f60a7Smrg      # If mktemp works, use that first and foremost
364692f60a7Smrg      my_tmpdir=`mktemp -d "${my_template}-XXXXXXXX" 2>/dev/null`
365692f60a7Smrg
366692f60a7Smrg      if test ! -d "$my_tmpdir"; then
36785ee4c00Smrg        # Failing that, at least try and use $RANDOM to avoid a race
36885ee4c00Smrg        my_tmpdir="${my_template}-${RANDOM-0}$$"
369692f60a7Smrg
37085ee4c00Smrg        save_mktempdir_umask=`umask`
37185ee4c00Smrg        umask 0077
37285ee4c00Smrg        $MKDIR "$my_tmpdir"
37385ee4c00Smrg        umask $save_mktempdir_umask
374692f60a7Smrg      fi
375692f60a7Smrg
376692f60a7Smrg      # If we're not in dry-run mode, bomb out on failure
37785ee4c00Smrg      test -d "$my_tmpdir" || \
37885ee4c00Smrg        func_fatal_error "cannot create temporary directory \`$my_tmpdir'"
379692f60a7Smrg    fi
380692f60a7Smrg
38185ee4c00Smrg    $ECHO "X$my_tmpdir" | $Xsed
382692f60a7Smrg}
383692f60a7Smrg
384692f60a7Smrg
38585ee4c00Smrg# func_quote_for_eval arg
38685ee4c00Smrg# Aesthetically quote ARG to be evaled later.
38785ee4c00Smrg# This function returns two values: FUNC_QUOTE_FOR_EVAL_RESULT
38885ee4c00Smrg# is double-quoted, suitable for a subsequent eval, whereas
38985ee4c00Smrg# FUNC_QUOTE_FOR_EVAL_UNQUOTED_RESULT has merely all characters
39085ee4c00Smrg# which are still active within double quotes backslashified.
39185ee4c00Smrgfunc_quote_for_eval ()
392692f60a7Smrg{
39385ee4c00Smrg    case $1 in
39485ee4c00Smrg      *[\\\`\"\$]*)
39585ee4c00Smrg	func_quote_for_eval_unquoted_result=`$ECHO "X$1" | $Xsed -e "$sed_quote_subst"` ;;
39685ee4c00Smrg      *)
39785ee4c00Smrg        func_quote_for_eval_unquoted_result="$1" ;;
39885ee4c00Smrg    esac
39985ee4c00Smrg
40085ee4c00Smrg    case $func_quote_for_eval_unquoted_result in
40185ee4c00Smrg      # Double-quote args containing shell metacharacters to delay
40285ee4c00Smrg      # word splitting, command substitution and and variable
40385ee4c00Smrg      # expansion for a subsequent eval.
40485ee4c00Smrg      # Many Bourne shells cannot handle close brackets correctly
40585ee4c00Smrg      # in scan sets, so we specify it separately.
40685ee4c00Smrg      *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \	]*|*]*|"")
40785ee4c00Smrg        func_quote_for_eval_result="\"$func_quote_for_eval_unquoted_result\""
40885ee4c00Smrg        ;;
40985ee4c00Smrg      *)
41085ee4c00Smrg        func_quote_for_eval_result="$func_quote_for_eval_unquoted_result"
411692f60a7Smrg    esac
412692f60a7Smrg}
413692f60a7Smrg
414692f60a7Smrg
41585ee4c00Smrg# func_quote_for_expand arg
41685ee4c00Smrg# Aesthetically quote ARG to be evaled later; same as above,
41785ee4c00Smrg# but do not quote variable references.
41885ee4c00Smrgfunc_quote_for_expand ()
419692f60a7Smrg{
42085ee4c00Smrg    case $1 in
42185ee4c00Smrg      *[\\\`\"]*)
42285ee4c00Smrg	my_arg=`$ECHO "X$1" | $Xsed \
42385ee4c00Smrg	    -e "$double_quote_subst" -e "$sed_double_backslash"` ;;
424692f60a7Smrg      *)
42585ee4c00Smrg        my_arg="$1" ;;
42685ee4c00Smrg    esac
42785ee4c00Smrg
42885ee4c00Smrg    case $my_arg in
42985ee4c00Smrg      # Double-quote args containing shell metacharacters to delay
43085ee4c00Smrg      # word splitting and command substitution for a subsequent eval.
43185ee4c00Smrg      # Many Bourne shells cannot handle close brackets correctly
43285ee4c00Smrg      # in scan sets, so we specify it separately.
43385ee4c00Smrg      *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \	]*|*]*|"")
43485ee4c00Smrg        my_arg="\"$my_arg\""
43585ee4c00Smrg        ;;
43685ee4c00Smrg    esac
43785ee4c00Smrg
43885ee4c00Smrg    func_quote_for_expand_result="$my_arg"
439692f60a7Smrg}
440692f60a7Smrg
441692f60a7Smrg
44285ee4c00Smrg# func_show_eval cmd [fail_exp]
44385ee4c00Smrg# Unless opt_silent is true, then output CMD.  Then, if opt_dryrun is
44485ee4c00Smrg# not true, evaluate CMD.  If the evaluation of CMD fails, and FAIL_EXP
44585ee4c00Smrg# is given, then evaluate it.
44685ee4c00Smrgfunc_show_eval ()
447692f60a7Smrg{
44885ee4c00Smrg    my_cmd="$1"
44985ee4c00Smrg    my_fail_exp="${2-:}"
450692f60a7Smrg
45185ee4c00Smrg    ${opt_silent-false} || {
45285ee4c00Smrg      func_quote_for_expand "$my_cmd"
45385ee4c00Smrg      eval "func_echo $func_quote_for_expand_result"
45485ee4c00Smrg    }
45585ee4c00Smrg
45685ee4c00Smrg    if ${opt_dry_run-false}; then :; else
45785ee4c00Smrg      eval "$my_cmd"
45885ee4c00Smrg      my_status=$?
45985ee4c00Smrg      if test "$my_status" -eq 0; then :; else
46085ee4c00Smrg	eval "(exit $my_status); $my_fail_exp"
46185ee4c00Smrg      fi
462692f60a7Smrg    fi
463692f60a7Smrg}
464692f60a7Smrg
46585ee4c00Smrg
46685ee4c00Smrg# func_show_eval_locale cmd [fail_exp]
46785ee4c00Smrg# Unless opt_silent is true, then output CMD.  Then, if opt_dryrun is
46885ee4c00Smrg# not true, evaluate CMD.  If the evaluation of CMD fails, and FAIL_EXP
46985ee4c00Smrg# is given, then evaluate it.  Use the saved locale for evaluation.
47085ee4c00Smrgfunc_show_eval_locale ()
471692f60a7Smrg{
47285ee4c00Smrg    my_cmd="$1"
47385ee4c00Smrg    my_fail_exp="${2-:}"
47485ee4c00Smrg
47585ee4c00Smrg    ${opt_silent-false} || {
47685ee4c00Smrg      func_quote_for_expand "$my_cmd"
47785ee4c00Smrg      eval "func_echo $func_quote_for_expand_result"
47885ee4c00Smrg    }
47985ee4c00Smrg
48085ee4c00Smrg    if ${opt_dry_run-false}; then :; else
48185ee4c00Smrg      eval "$lt_user_locale
48285ee4c00Smrg	    $my_cmd"
48385ee4c00Smrg      my_status=$?
48485ee4c00Smrg      eval "$lt_safe_locale"
48585ee4c00Smrg      if test "$my_status" -eq 0; then :; else
48685ee4c00Smrg	eval "(exit $my_status); $my_fail_exp"
48785ee4c00Smrg      fi
488692f60a7Smrg    fi
48985ee4c00Smrg}
490692f60a7Smrg
491692f60a7Smrg
49285ee4c00Smrg
49385ee4c00Smrg
49485ee4c00Smrg
49585ee4c00Smrg# func_version
49685ee4c00Smrg# Echo version message to standard output and exit.
49785ee4c00Smrgfunc_version ()
49885ee4c00Smrg{
49985ee4c00Smrg    $SED -n '/^# '$PROGRAM' (GNU /,/# warranty; / {
50085ee4c00Smrg        s/^# //
50185ee4c00Smrg	s/^# *$//
50285ee4c00Smrg        s/\((C)\)[ 0-9,-]*\( [1-9][0-9]*\)/\1\2/
50385ee4c00Smrg        p
50485ee4c00Smrg     }' < "$progpath"
50585ee4c00Smrg     exit $?
50685ee4c00Smrg}
50785ee4c00Smrg
50885ee4c00Smrg# func_usage
50985ee4c00Smrg# Echo short help message to standard output and exit.
51085ee4c00Smrgfunc_usage ()
51185ee4c00Smrg{
51285ee4c00Smrg    $SED -n '/^# Usage:/,/# -h/ {
51385ee4c00Smrg        s/^# //
51485ee4c00Smrg	s/^# *$//
51585ee4c00Smrg	s/\$progname/'$progname'/
51685ee4c00Smrg	p
51785ee4c00Smrg    }' < "$progpath"
51885ee4c00Smrg    $ECHO
51985ee4c00Smrg    $ECHO "run \`$progname --help | more' for full usage"
52085ee4c00Smrg    exit $?
52185ee4c00Smrg}
52285ee4c00Smrg
52385ee4c00Smrg# func_help
52485ee4c00Smrg# Echo long help message to standard output and exit.
52585ee4c00Smrgfunc_help ()
52685ee4c00Smrg{
52785ee4c00Smrg    $SED -n '/^# Usage:/,/# Report bugs to/ {
52885ee4c00Smrg        s/^# //
52985ee4c00Smrg	s/^# *$//
53085ee4c00Smrg	s*\$progname*'$progname'*
53185ee4c00Smrg	s*\$host*'"$host"'*
53285ee4c00Smrg	s*\$SHELL*'"$SHELL"'*
53385ee4c00Smrg	s*\$LTCC*'"$LTCC"'*
53485ee4c00Smrg	s*\$LTCFLAGS*'"$LTCFLAGS"'*
53585ee4c00Smrg	s*\$LD*'"$LD"'*
53685ee4c00Smrg	s/\$with_gnu_ld/'"$with_gnu_ld"'/
53785ee4c00Smrg	s/\$automake_version/'"`(automake --version) 2>/dev/null |$SED 1q`"'/
53885ee4c00Smrg	s/\$autoconf_version/'"`(autoconf --version) 2>/dev/null |$SED 1q`"'/
53985ee4c00Smrg	p
54085ee4c00Smrg     }' < "$progpath"
54185ee4c00Smrg    exit $?
54285ee4c00Smrg}
54385ee4c00Smrg
54485ee4c00Smrg# func_missing_arg argname
54585ee4c00Smrg# Echo program name prefixed message to standard error and set global
54685ee4c00Smrg# exit_cmd.
54785ee4c00Smrgfunc_missing_arg ()
54885ee4c00Smrg{
54985ee4c00Smrg    func_error "missing argument for $1"
55085ee4c00Smrg    exit_cmd=exit
551692f60a7Smrg}
552692f60a7Smrg
55385ee4c00Smrgexit_cmd=:
554692f60a7Smrg
555692f60a7Smrg
55685ee4c00Smrg
55785ee4c00Smrg
55885ee4c00Smrg
55985ee4c00Smrg# Check that we have a working $ECHO.
56085ee4c00Smrgif test "X$1" = X--no-reexec; then
56185ee4c00Smrg  # Discard the --no-reexec flag, and continue.
562692f60a7Smrg  shift
56385ee4c00Smrgelif test "X$1" = X--fallback-echo; then
56485ee4c00Smrg  # Avoid inline document here, it may be left over
56585ee4c00Smrg  :
56685ee4c00Smrgelif test "X`{ $ECHO '\t'; } 2>/dev/null`" = 'X\t'; then
56785ee4c00Smrg  # Yippee, $ECHO works!
56885ee4c00Smrg  :
56985ee4c00Smrgelse
57085ee4c00Smrg  # Restart under the correct shell, and then maybe $ECHO will work.
57185ee4c00Smrg  exec $SHELL "$progpath" --no-reexec ${1+"$@"}
57285ee4c00Smrgfi
573692f60a7Smrg
57485ee4c00Smrgif test "X$1" = X--fallback-echo; then
57585ee4c00Smrg  # used as fallback echo
57685ee4c00Smrg  shift
57785ee4c00Smrg  cat <<EOF
57885ee4c00Smrg$*
57985ee4c00SmrgEOF
58085ee4c00Smrg  exit $EXIT_SUCCESS
58185ee4c00Smrgfi
582692f60a7Smrg
58385ee4c00Smrgmagic="%%%MAGIC variable%%%"
58485ee4c00Smrgmagic_exe="%%%MAGIC EXE variable%%%"
585692f60a7Smrg
58685ee4c00Smrg# Global variables.
58785ee4c00Smrg# $mode is unset
58885ee4c00Smrgnonopt=
58985ee4c00Smrgexecute_dlfiles=
59085ee4c00Smrgpreserve_args=
59185ee4c00Smrglo2o="s/\\.lo\$/.${objext}/"
59285ee4c00Smrgo2lo="s/\\.${objext}\$/.lo/"
59385ee4c00Smrgextracted_archives=
59485ee4c00Smrgextracted_serial=0
595692f60a7Smrg
59685ee4c00Smrgopt_dry_run=false
59785ee4c00Smrgopt_duplicate_deps=false
59885ee4c00Smrgopt_silent=false
59985ee4c00Smrgopt_debug=:
600692f60a7Smrg
60185ee4c00Smrg# If this variable is set in any of the actions, the command in it
60285ee4c00Smrg# will be execed at the end.  This prevents here-documents from being
60385ee4c00Smrg# left over by shells.
60485ee4c00Smrgexec_cmd=
60585ee4c00Smrg
60685ee4c00Smrg# func_fatal_configuration arg...
60785ee4c00Smrg# Echo program name prefixed message to standard error, followed by
60885ee4c00Smrg# a configuration failure hint, and exit.
60985ee4c00Smrgfunc_fatal_configuration ()
61085ee4c00Smrg{
61185ee4c00Smrg    func_error ${1+"$@"}
61285ee4c00Smrg    func_error "See the $PACKAGE documentation for more information."
61385ee4c00Smrg    func_fatal_error "Fatal configuration error."
61485ee4c00Smrg}
615692f60a7Smrg
61654569438Smrg
61785ee4c00Smrg# func_config
61885ee4c00Smrg# Display the configuration for all the tags in this script.
61985ee4c00Smrgfunc_config ()
62085ee4c00Smrg{
62185ee4c00Smrg    re_begincf='^# ### BEGIN LIBTOOL'
62285ee4c00Smrg    re_endcf='^# ### END LIBTOOL'
62385ee4c00Smrg
62485ee4c00Smrg    # Default configuration.
62585ee4c00Smrg    $SED "1,/$re_begincf CONFIG/d;/$re_endcf CONFIG/,\$d" < "$progpath"
626692f60a7Smrg
627692f60a7Smrg    # Now print the configurations for the tags.
628692f60a7Smrg    for tagname in $taglist; do
62985ee4c00Smrg      $SED -n "/$re_begincf TAG CONFIG: $tagname\$/,/$re_endcf TAG CONFIG: $tagname\$/p" < "$progpath"
630692f60a7Smrg    done
631692f60a7Smrg
63285ee4c00Smrg    exit $?
63385ee4c00Smrg}
634692f60a7Smrg
63585ee4c00Smrg# func_features
63685ee4c00Smrg# Display the features supported by this script.
63785ee4c00Smrgfunc_features ()
63885ee4c00Smrg{
63985ee4c00Smrg    $ECHO "host: $host"
640692f60a7Smrg    if test "$build_libtool_libs" = yes; then
64185ee4c00Smrg      $ECHO "enable shared libraries"
642692f60a7Smrg    else
64385ee4c00Smrg      $ECHO "disable shared libraries"
644692f60a7Smrg    fi
645692f60a7Smrg    if test "$build_old_libs" = yes; then
64685ee4c00Smrg      $ECHO "enable static libraries"
647692f60a7Smrg    else
64885ee4c00Smrg      $ECHO "disable static libraries"
649692f60a7Smrg    fi
65085ee4c00Smrg
651692f60a7Smrg    exit $?
65285ee4c00Smrg}
653692f60a7Smrg
65485ee4c00Smrg# func_enable_tag tagname
65585ee4c00Smrg# Verify that TAGNAME is valid, and either flag an error and exit, or
65685ee4c00Smrg# enable the TAGNAME tag.  We also add TAGNAME to the global $taglist
65785ee4c00Smrg# variable here.
65885ee4c00Smrgfunc_enable_tag ()
65985ee4c00Smrg{
66085ee4c00Smrg  # Global variable:
66185ee4c00Smrg  tagname="$1"
662692f60a7Smrg
66385ee4c00Smrg  re_begincf="^# ### BEGIN LIBTOOL TAG CONFIG: $tagname\$"
66485ee4c00Smrg  re_endcf="^# ### END LIBTOOL TAG CONFIG: $tagname\$"
66585ee4c00Smrg  sed_extractcf="/$re_begincf/,/$re_endcf/p"
666692f60a7Smrg
66785ee4c00Smrg  # Validate tagname.
66885ee4c00Smrg  case $tagname in
66985ee4c00Smrg    *[!-_A-Za-z0-9,/]*)
67085ee4c00Smrg      func_fatal_error "invalid tag name: $tagname"
67185ee4c00Smrg      ;;
67285ee4c00Smrg  esac
673692f60a7Smrg
67485ee4c00Smrg  # Don't test for the "default" C tag, as we know it's
67585ee4c00Smrg  # there but not specially marked.
67685ee4c00Smrg  case $tagname in
67785ee4c00Smrg    CC) ;;
67885ee4c00Smrg    *)
67985ee4c00Smrg      if $GREP "$re_begincf" "$progpath" >/dev/null 2>&1; then
68085ee4c00Smrg	taglist="$taglist $tagname"
68185ee4c00Smrg
68285ee4c00Smrg	# Evaluate the configuration.  Be careful to quote the path
68385ee4c00Smrg	# and the sed script, to avoid splitting on whitespace, but
68485ee4c00Smrg	# also don't use non-portable quotes within backquotes within
68585ee4c00Smrg	# quotes we have to do it in 2 steps:
68685ee4c00Smrg	extractedcf=`$SED -n -e "$sed_extractcf" < "$progpath"`
68785ee4c00Smrg	eval "$extractedcf"
68885ee4c00Smrg      else
68985ee4c00Smrg	func_error "ignoring unknown tag $tagname"
69085ee4c00Smrg      fi
69185ee4c00Smrg      ;;
69285ee4c00Smrg  esac
69385ee4c00Smrg}
69485ee4c00Smrg
69585ee4c00Smrg# Parse options once, thoroughly.  This comes as soon as possible in
69685ee4c00Smrg# the script to make things like `libtool --version' happen quickly.
69785ee4c00Smrg{
698692f60a7Smrg
69985ee4c00Smrg  # Shorthand for --mode=foo, only valid as the first argument
70085ee4c00Smrg  case $1 in
70185ee4c00Smrg  clean|clea|cle|cl)
70285ee4c00Smrg    shift; set dummy --mode clean ${1+"$@"}; shift
703692f60a7Smrg    ;;
70485ee4c00Smrg  compile|compil|compi|comp|com|co|c)
70585ee4c00Smrg    shift; set dummy --mode compile ${1+"$@"}; shift
706692f60a7Smrg    ;;
70785ee4c00Smrg  execute|execut|execu|exec|exe|ex|e)
70885ee4c00Smrg    shift; set dummy --mode execute ${1+"$@"}; shift
709692f60a7Smrg    ;;
71085ee4c00Smrg  finish|finis|fini|fin|fi|f)
71185ee4c00Smrg    shift; set dummy --mode finish ${1+"$@"}; shift
712692f60a7Smrg    ;;
71385ee4c00Smrg  install|instal|insta|inst|ins|in|i)
71485ee4c00Smrg    shift; set dummy --mode install ${1+"$@"}; shift
71585ee4c00Smrg    ;;
71685ee4c00Smrg  link|lin|li|l)
71785ee4c00Smrg    shift; set dummy --mode link ${1+"$@"}; shift
71885ee4c00Smrg    ;;
71985ee4c00Smrg  uninstall|uninstal|uninsta|uninst|unins|unin|uni|un|u)
72085ee4c00Smrg    shift; set dummy --mode uninstall ${1+"$@"}; shift
721692f60a7Smrg    ;;
722692f60a7Smrg  esac
723692f60a7Smrg
72485ee4c00Smrg  # Parse non-mode specific arguments:
72585ee4c00Smrg  while test "$#" -gt 0; do
72685ee4c00Smrg    opt="$1"
72785ee4c00Smrg    shift
728692f60a7Smrg
72985ee4c00Smrg    case $opt in
73085ee4c00Smrg      --config)		func_config					;;
731692f60a7Smrg
73285ee4c00Smrg      --debug)		preserve_args="$preserve_args $opt"
73385ee4c00Smrg			func_echo "enabling shell trace mode"
73485ee4c00Smrg			opt_debug='set -x'
73585ee4c00Smrg			$opt_debug
73685ee4c00Smrg			;;
737692f60a7Smrg
73885ee4c00Smrg      -dlopen)		test "$#" -eq 0 && func_missing_arg "$opt" && break
73985ee4c00Smrg			execute_dlfiles="$execute_dlfiles $1"
74085ee4c00Smrg			shift
74185ee4c00Smrg			;;
742692f60a7Smrg
74385ee4c00Smrg      --dry-run | -n)	opt_dry_run=:					;;
74485ee4c00Smrg      --features)       func_features					;;
74585ee4c00Smrg      --finish)		mode="finish"					;;
74685ee4c00Smrg
74785ee4c00Smrg      --mode)		test "$#" -eq 0 && func_missing_arg "$opt" && break
74885ee4c00Smrg			case $1 in
74985ee4c00Smrg			  # Valid mode arguments:
75085ee4c00Smrg			  clean)	;;
75185ee4c00Smrg			  compile)	;;
75285ee4c00Smrg			  execute)	;;
75385ee4c00Smrg			  finish)	;;
75485ee4c00Smrg			  install)	;;
75585ee4c00Smrg			  link)		;;
75685ee4c00Smrg			  relink)	;;
75785ee4c00Smrg			  uninstall)	;;
75885ee4c00Smrg
75985ee4c00Smrg			  # Catch anything else as an error
76085ee4c00Smrg			  *) func_error "invalid argument for $opt"
76185ee4c00Smrg			     exit_cmd=exit
76285ee4c00Smrg			     break
76385ee4c00Smrg			     ;;
76485ee4c00Smrg		        esac
76585ee4c00Smrg
76685ee4c00Smrg			mode="$1"
76785ee4c00Smrg			shift
76885ee4c00Smrg			;;
76985ee4c00Smrg
77085ee4c00Smrg      --preserve-dup-deps)
77185ee4c00Smrg			opt_duplicate_deps=:				;;
77285ee4c00Smrg
77385ee4c00Smrg      --quiet|--silent)	preserve_args="$preserve_args $opt"
77485ee4c00Smrg			opt_silent=:
77585ee4c00Smrg			;;
77685ee4c00Smrg
77785ee4c00Smrg      --verbose| -v)	preserve_args="$preserve_args $opt"
77885ee4c00Smrg			opt_silent=false
77985ee4c00Smrg			;;
78085ee4c00Smrg
78185ee4c00Smrg      --tag)		test "$#" -eq 0 && func_missing_arg "$opt" && break
78285ee4c00Smrg			preserve_args="$preserve_args $opt $1"
78385ee4c00Smrg			func_enable_tag "$1"	# tagname is set here
78485ee4c00Smrg			shift
78585ee4c00Smrg			;;
78685ee4c00Smrg
78785ee4c00Smrg      # Separate optargs to long options:
78885ee4c00Smrg      -dlopen=*|--mode=*|--tag=*)
78985ee4c00Smrg			func_opt_split "$opt"
79085ee4c00Smrg			set dummy "$func_opt_split_opt" "$func_opt_split_arg" ${1+"$@"}
79185ee4c00Smrg			shift
79285ee4c00Smrg			;;
79385ee4c00Smrg
79485ee4c00Smrg      -\?|-h)		func_usage					;;
79585ee4c00Smrg      --help)		opt_help=:					;;
79685ee4c00Smrg      --version)	func_version					;;
79785ee4c00Smrg
79885ee4c00Smrg      -*)		func_fatal_help "unrecognized option \`$opt'"	;;
79985ee4c00Smrg
80085ee4c00Smrg      *)		nonopt="$opt"
80185ee4c00Smrg			break
80285ee4c00Smrg			;;
80385ee4c00Smrg    esac
80485ee4c00Smrg  done
80585ee4c00Smrg
80685ee4c00Smrg
80785ee4c00Smrg  case $host in
80885ee4c00Smrg    *cygwin* | *mingw* | *pw32* | *cegcc*)
80985ee4c00Smrg      # don't eliminate duplications in $postdeps and $predeps
81085ee4c00Smrg      opt_duplicate_compiler_generated_deps=:
811692f60a7Smrg      ;;
812692f60a7Smrg    *)
81385ee4c00Smrg      opt_duplicate_compiler_generated_deps=$opt_duplicate_deps
81485ee4c00Smrg      ;;
81585ee4c00Smrg  esac
816692f60a7Smrg
81785ee4c00Smrg  # Having warned about all mis-specified options, bail out if
81885ee4c00Smrg  # anything was wrong.
81985ee4c00Smrg  $exit_cmd $EXIT_FAILURE
82085ee4c00Smrg}
82185ee4c00Smrg
82285ee4c00Smrg# func_check_version_match
82385ee4c00Smrg# Ensure that we are using m4 macros, and libtool script from the same
82485ee4c00Smrg# release of libtool.
82585ee4c00Smrgfunc_check_version_match ()
82685ee4c00Smrg{
82785ee4c00Smrg  if test "$package_revision" != "$macro_revision"; then
82885ee4c00Smrg    if test "$VERSION" != "$macro_version"; then
82985ee4c00Smrg      if test -z "$macro_version"; then
83085ee4c00Smrg        cat >&2 <<_LT_EOF
83185ee4c00Smrg$progname: Version mismatch error.  This is $PACKAGE $VERSION, but the
83285ee4c00Smrg$progname: definition of this LT_INIT comes from an older release.
83385ee4c00Smrg$progname: You should recreate aclocal.m4 with macros from $PACKAGE $VERSION
83485ee4c00Smrg$progname: and run autoconf again.
83585ee4c00Smrg_LT_EOF
83685ee4c00Smrg      else
83785ee4c00Smrg        cat >&2 <<_LT_EOF
83885ee4c00Smrg$progname: Version mismatch error.  This is $PACKAGE $VERSION, but the
83985ee4c00Smrg$progname: definition of this LT_INIT comes from $PACKAGE $macro_version.
84085ee4c00Smrg$progname: You should recreate aclocal.m4 with macros from $PACKAGE $VERSION
84185ee4c00Smrg$progname: and run autoconf again.
84285ee4c00Smrg_LT_EOF
843692f60a7Smrg      fi
84485ee4c00Smrg    else
84585ee4c00Smrg      cat >&2 <<_LT_EOF
84685ee4c00Smrg$progname: Version mismatch error.  This is $PACKAGE $VERSION, revision $package_revision,
84785ee4c00Smrg$progname: but the definition of this LT_INIT comes from revision $macro_revision.
84885ee4c00Smrg$progname: You should recreate aclocal.m4 with macros from revision $package_revision
84985ee4c00Smrg$progname: of $PACKAGE $VERSION and run autoconf again.
85085ee4c00Smrg_LT_EOF
85185ee4c00Smrg    fi
85285ee4c00Smrg
85385ee4c00Smrg    exit $EXIT_MISMATCH
85485ee4c00Smrg  fi
85585ee4c00Smrg}
85685ee4c00Smrg
85785ee4c00Smrg
85885ee4c00Smrg## ----------- ##
85985ee4c00Smrg##    Main.    ##
86085ee4c00Smrg## ----------- ##
86185ee4c00Smrg
86285ee4c00Smrg$opt_help || {
86385ee4c00Smrg  # Sanity checks first:
86485ee4c00Smrg  func_check_version_match
86585ee4c00Smrg
86685ee4c00Smrg  if test "$build_libtool_libs" != yes && test "$build_old_libs" != yes; then
86785ee4c00Smrg    func_fatal_configuration "not configured to build any kind of library"
868692f60a7Smrg  fi
869692f60a7Smrg
87085ee4c00Smrg  test -z "$mode" && func_fatal_error "error: you must specify a MODE."
87185ee4c00Smrg
87285ee4c00Smrg
87385ee4c00Smrg  # Darwin sucks
87485ee4c00Smrg  eval std_shrext=\"$shrext_cmds\"
87585ee4c00Smrg
87685ee4c00Smrg
877692f60a7Smrg  # Only execute mode is allowed to have -dlopen flags.
878692f60a7Smrg  if test -n "$execute_dlfiles" && test "$mode" != execute; then
87985ee4c00Smrg    func_error "unrecognized option \`-dlopen'"
88085ee4c00Smrg    $ECHO "$help" 1>&2
881692f60a7Smrg    exit $EXIT_FAILURE
882692f60a7Smrg  fi
883692f60a7Smrg
884692f60a7Smrg  # Change the help message to a mode-specific one.
885692f60a7Smrg  generic_help="$help"
88685ee4c00Smrg  help="Try \`$progname --help --mode=$mode' for more information."
88785ee4c00Smrg}
888692f60a7Smrg
889692f60a7Smrg
89085ee4c00Smrg# func_lalib_p file
89185ee4c00Smrg# True iff FILE is a libtool `.la' library or `.lo' object file.
89285ee4c00Smrg# This function is only a basic sanity check; it will hardly flush out
89385ee4c00Smrg# determined imposters.
89485ee4c00Smrgfunc_lalib_p ()
89585ee4c00Smrg{
89685ee4c00Smrg    test -f "$1" &&
89785ee4c00Smrg      $SED -e 4q "$1" 2>/dev/null \
89885ee4c00Smrg        | $GREP "^# Generated by .*$PACKAGE" > /dev/null 2>&1
89985ee4c00Smrg}
900692f60a7Smrg
90185ee4c00Smrg# func_lalib_unsafe_p file
90285ee4c00Smrg# True iff FILE is a libtool `.la' library or `.lo' object file.
90385ee4c00Smrg# This function implements the same check as func_lalib_p without
90485ee4c00Smrg# resorting to external programs.  To this end, it redirects stdin and
90585ee4c00Smrg# closes it afterwards, without saving the original file descriptor.
90685ee4c00Smrg# As a safety measure, use it only where a negative result would be
90785ee4c00Smrg# fatal anyway.  Works if `file' does not exist.
90885ee4c00Smrgfunc_lalib_unsafe_p ()
90985ee4c00Smrg{
91085ee4c00Smrg    lalib_p=no
91185ee4c00Smrg    if test -f "$1" && test -r "$1" && exec 5<&0 <"$1"; then
91285ee4c00Smrg	for lalib_p_l in 1 2 3 4
91385ee4c00Smrg	do
91485ee4c00Smrg	    read lalib_p_line
91585ee4c00Smrg	    case "$lalib_p_line" in
91685ee4c00Smrg		\#\ Generated\ by\ *$PACKAGE* ) lalib_p=yes; break;;
91785ee4c00Smrg	    esac
91885ee4c00Smrg	done
91985ee4c00Smrg	exec 0<&5 5<&-
92085ee4c00Smrg    fi
92185ee4c00Smrg    test "$lalib_p" = yes
92285ee4c00Smrg}
923692f60a7Smrg
92485ee4c00Smrg# func_ltwrapper_script_p file
92585ee4c00Smrg# True iff FILE is a libtool wrapper script
92685ee4c00Smrg# This function is only a basic sanity check; it will hardly flush out
92785ee4c00Smrg# determined imposters.
92885ee4c00Smrgfunc_ltwrapper_script_p ()
92985ee4c00Smrg{
93085ee4c00Smrg    func_lalib_p "$1"
93185ee4c00Smrg}
932692f60a7Smrg
93385ee4c00Smrg# func_ltwrapper_executable_p file
93485ee4c00Smrg# True iff FILE is a libtool wrapper executable
93585ee4c00Smrg# This function is only a basic sanity check; it will hardly flush out
93685ee4c00Smrg# determined imposters.
93785ee4c00Smrgfunc_ltwrapper_executable_p ()
93885ee4c00Smrg{
93985ee4c00Smrg    func_ltwrapper_exec_suffix=
94085ee4c00Smrg    case $1 in
94185ee4c00Smrg    *.exe) ;;
94285ee4c00Smrg    *) func_ltwrapper_exec_suffix=.exe ;;
94385ee4c00Smrg    esac
94485ee4c00Smrg    $GREP "$magic_exe" "$1$func_ltwrapper_exec_suffix" >/dev/null 2>&1
94585ee4c00Smrg}
946692f60a7Smrg
94785ee4c00Smrg# func_ltwrapper_scriptname file
94885ee4c00Smrg# Assumes file is an ltwrapper_executable
94985ee4c00Smrg# uses $file to determine the appropriate filename for a
95085ee4c00Smrg# temporary ltwrapper_script.
95185ee4c00Smrgfunc_ltwrapper_scriptname ()
95285ee4c00Smrg{
95385ee4c00Smrg    func_ltwrapper_scriptname_result=""
95485ee4c00Smrg    if func_ltwrapper_executable_p "$1"; then
95585ee4c00Smrg	func_dirname_and_basename "$1" "" "."
95685ee4c00Smrg	func_stripname '' '.exe' "$func_basename_result"
95785ee4c00Smrg	func_ltwrapper_scriptname_result="$func_dirname_result/$objdir/${func_stripname_result}_ltshwrapper"
95885ee4c00Smrg    fi
95985ee4c00Smrg}
96085ee4c00Smrg
96185ee4c00Smrg# func_ltwrapper_p file
96285ee4c00Smrg# True iff FILE is a libtool wrapper script or wrapper executable
96385ee4c00Smrg# This function is only a basic sanity check; it will hardly flush out
96485ee4c00Smrg# determined imposters.
96585ee4c00Smrgfunc_ltwrapper_p ()
96685ee4c00Smrg{
96785ee4c00Smrg    func_ltwrapper_script_p "$1" || func_ltwrapper_executable_p "$1"
96885ee4c00Smrg}
96985ee4c00Smrg
97085ee4c00Smrg
97185ee4c00Smrg# func_execute_cmds commands fail_cmd
97285ee4c00Smrg# Execute tilde-delimited COMMANDS.
97385ee4c00Smrg# If FAIL_CMD is given, eval that upon failure.
97485ee4c00Smrg# FAIL_CMD may read-access the current command in variable CMD!
97585ee4c00Smrgfunc_execute_cmds ()
97685ee4c00Smrg{
97785ee4c00Smrg    $opt_debug
97885ee4c00Smrg    save_ifs=$IFS; IFS='~'
97985ee4c00Smrg    for cmd in $1; do
98085ee4c00Smrg      IFS=$save_ifs
98185ee4c00Smrg      eval cmd=\"$cmd\"
98285ee4c00Smrg      func_show_eval "$cmd" "${2-:}"
98385ee4c00Smrg    done
98485ee4c00Smrg    IFS=$save_ifs
98585ee4c00Smrg}
98685ee4c00Smrg
98785ee4c00Smrg
98885ee4c00Smrg# func_source file
98985ee4c00Smrg# Source FILE, adding directory component if necessary.
99085ee4c00Smrg# Note that it is not necessary on cygwin/mingw to append a dot to
99185ee4c00Smrg# FILE even if both FILE and FILE.exe exist: automatic-append-.exe
99285ee4c00Smrg# behavior happens only for exec(3), not for open(2)!  Also, sourcing
99385ee4c00Smrg# `FILE.' does not work on cygwin managed mounts.
99485ee4c00Smrgfunc_source ()
99585ee4c00Smrg{
99685ee4c00Smrg    $opt_debug
99785ee4c00Smrg    case $1 in
99885ee4c00Smrg    */* | *\\*)	. "$1" ;;
99985ee4c00Smrg    *)		. "./$1" ;;
100085ee4c00Smrg    esac
100185ee4c00Smrg}
100285ee4c00Smrg
100385ee4c00Smrg
100485ee4c00Smrg# func_infer_tag arg
100585ee4c00Smrg# Infer tagged configuration to use if any are available and
100685ee4c00Smrg# if one wasn't chosen via the "--tag" command line option.
100785ee4c00Smrg# Only attempt this if the compiler in the base compile
100885ee4c00Smrg# command doesn't match the default compiler.
100985ee4c00Smrg# arg is usually of the form 'gcc ...'
101085ee4c00Smrgfunc_infer_tag ()
101185ee4c00Smrg{
101285ee4c00Smrg    $opt_debug
101385ee4c00Smrg    if test -n "$available_tags" && test -z "$tagname"; then
101485ee4c00Smrg      CC_quoted=
101585ee4c00Smrg      for arg in $CC; do
101685ee4c00Smrg        func_quote_for_eval "$arg"
101785ee4c00Smrg	CC_quoted="$CC_quoted $func_quote_for_eval_result"
101885ee4c00Smrg      done
101985ee4c00Smrg      case $@ in
102085ee4c00Smrg      # Blanks in the command may have been stripped by the calling shell,
102185ee4c00Smrg      # but not from the CC environment variable when configure was run.
102285ee4c00Smrg      " $CC "* | "$CC "* | " `$ECHO $CC` "* | "`$ECHO $CC` "* | " $CC_quoted"* | "$CC_quoted "* | " `$ECHO $CC_quoted` "* | "`$ECHO $CC_quoted` "*) ;;
102385ee4c00Smrg      # Blanks at the start of $base_compile will cause this to fail
102485ee4c00Smrg      # if we don't check for them as well.
102585ee4c00Smrg      *)
102685ee4c00Smrg	for z in $available_tags; do
102785ee4c00Smrg	  if $GREP "^# ### BEGIN LIBTOOL TAG CONFIG: $z$" < "$progpath" > /dev/null; then
102885ee4c00Smrg	    # Evaluate the configuration.
102985ee4c00Smrg	    eval "`${SED} -n -e '/^# ### BEGIN LIBTOOL TAG CONFIG: '$z'$/,/^# ### END LIBTOOL TAG CONFIG: '$z'$/p' < $progpath`"
103085ee4c00Smrg	    CC_quoted=
103185ee4c00Smrg	    for arg in $CC; do
103285ee4c00Smrg	      # Double-quote args containing other shell metacharacters.
103385ee4c00Smrg	      func_quote_for_eval "$arg"
103485ee4c00Smrg	      CC_quoted="$CC_quoted $func_quote_for_eval_result"
103585ee4c00Smrg	    done
103685ee4c00Smrg	    case "$@ " in
103785ee4c00Smrg	      " $CC "* | "$CC "* | " `$ECHO $CC` "* | "`$ECHO $CC` "* | " $CC_quoted"* | "$CC_quoted "* | " `$ECHO $CC_quoted` "* | "`$ECHO $CC_quoted` "*)
103885ee4c00Smrg	      # The compiler in the base compile command matches
103985ee4c00Smrg	      # the one in the tagged configuration.
104085ee4c00Smrg	      # Assume this is the tagged configuration we want.
104185ee4c00Smrg	      tagname=$z
104285ee4c00Smrg	      break
104385ee4c00Smrg	      ;;
104485ee4c00Smrg	    esac
104585ee4c00Smrg	  fi
104685ee4c00Smrg	done
104785ee4c00Smrg	# If $tagname still isn't set, then no tagged configuration
104885ee4c00Smrg	# was found and let the user know that the "--tag" command
104985ee4c00Smrg	# line option must be used.
105085ee4c00Smrg	if test -z "$tagname"; then
105185ee4c00Smrg	  func_echo "unable to infer tagged configuration"
105285ee4c00Smrg	  func_fatal_error "specify a tag with \`--tag'"
105385ee4c00Smrg#	else
105485ee4c00Smrg#	  func_verbose "using $tagname tagged configuration"
105585ee4c00Smrg	fi
105685ee4c00Smrg	;;
105785ee4c00Smrg      esac
105885ee4c00Smrg    fi
105985ee4c00Smrg}
106085ee4c00Smrg
106185ee4c00Smrg
106285ee4c00Smrg
106385ee4c00Smrg# func_write_libtool_object output_name pic_name nonpic_name
106485ee4c00Smrg# Create a libtool object file (analogous to a ".la" file),
106585ee4c00Smrg# but don't create it if we're doing a dry run.
106685ee4c00Smrgfunc_write_libtool_object ()
106785ee4c00Smrg{
106885ee4c00Smrg    write_libobj=${1}
106985ee4c00Smrg    if test "$build_libtool_libs" = yes; then
107085ee4c00Smrg      write_lobj=\'${2}\'
107185ee4c00Smrg    else
107285ee4c00Smrg      write_lobj=none
107385ee4c00Smrg    fi
107485ee4c00Smrg
107585ee4c00Smrg    if test "$build_old_libs" = yes; then
107685ee4c00Smrg      write_oldobj=\'${3}\'
107785ee4c00Smrg    else
107885ee4c00Smrg      write_oldobj=none
107985ee4c00Smrg    fi
108085ee4c00Smrg
108185ee4c00Smrg    $opt_dry_run || {
108285ee4c00Smrg      cat >${write_libobj}T <<EOF
108385ee4c00Smrg# $write_libobj - a libtool object file
108485ee4c00Smrg# Generated by $PROGRAM (GNU $PACKAGE$TIMESTAMP) $VERSION
108585ee4c00Smrg#
108685ee4c00Smrg# Please DO NOT delete this file!
108785ee4c00Smrg# It is necessary for linking the library.
108885ee4c00Smrg
108985ee4c00Smrg# Name of the PIC object.
109085ee4c00Smrgpic_object=$write_lobj
109185ee4c00Smrg
109285ee4c00Smrg# Name of the non-PIC object
109385ee4c00Smrgnon_pic_object=$write_oldobj
109485ee4c00Smrg
109585ee4c00SmrgEOF
109685ee4c00Smrg      $MV "${write_libobj}T" "${write_libobj}"
109785ee4c00Smrg    }
109885ee4c00Smrg}
109985ee4c00Smrg
110085ee4c00Smrg# func_mode_compile arg...
110185ee4c00Smrgfunc_mode_compile ()
110285ee4c00Smrg{
110385ee4c00Smrg    $opt_debug
110485ee4c00Smrg    # Get the compilation command and the source file.
110585ee4c00Smrg    base_compile=
110685ee4c00Smrg    srcfile="$nonopt"  #  always keep a non-empty value in "srcfile"
110785ee4c00Smrg    suppress_opt=yes
110885ee4c00Smrg    suppress_output=
110985ee4c00Smrg    arg_mode=normal
111085ee4c00Smrg    libobj=
111185ee4c00Smrg    later=
111285ee4c00Smrg    pie_flag=
111385ee4c00Smrg
111485ee4c00Smrg    for arg
111585ee4c00Smrg    do
111685ee4c00Smrg      case $arg_mode in
111785ee4c00Smrg      arg  )
111885ee4c00Smrg	# do not "continue".  Instead, add this to base_compile
111985ee4c00Smrg	lastarg="$arg"
112085ee4c00Smrg	arg_mode=normal
112185ee4c00Smrg	;;
112285ee4c00Smrg
112385ee4c00Smrg      target )
112485ee4c00Smrg	libobj="$arg"
112585ee4c00Smrg	arg_mode=normal
112685ee4c00Smrg	continue
112785ee4c00Smrg	;;
112885ee4c00Smrg
112985ee4c00Smrg      normal )
113085ee4c00Smrg	# Accept any command-line options.
113185ee4c00Smrg	case $arg in
113285ee4c00Smrg	-o)
113385ee4c00Smrg	  test -n "$libobj" && \
113485ee4c00Smrg	    func_fatal_error "you cannot specify \`-o' more than once"
113585ee4c00Smrg	  arg_mode=target
113685ee4c00Smrg	  continue
113785ee4c00Smrg	  ;;
113885ee4c00Smrg
113985ee4c00Smrg	-pie | -fpie | -fPIE)
114085ee4c00Smrg          pie_flag="$pie_flag $arg"
114185ee4c00Smrg	  continue
114285ee4c00Smrg	  ;;
114385ee4c00Smrg
114485ee4c00Smrg	-shared | -static | -prefer-pic | -prefer-non-pic)
114585ee4c00Smrg	  later="$later $arg"
114685ee4c00Smrg	  continue
114785ee4c00Smrg	  ;;
114885ee4c00Smrg
114985ee4c00Smrg	-no-suppress)
1150692f60a7Smrg	  suppress_opt=no
1151692f60a7Smrg	  continue
1152692f60a7Smrg	  ;;
1153692f60a7Smrg
1154692f60a7Smrg	-Xcompiler)
1155692f60a7Smrg	  arg_mode=arg  #  the next one goes into the "base_compile" arg list
1156692f60a7Smrg	  continue      #  The current "srcfile" will either be retained or
1157692f60a7Smrg	  ;;            #  replaced later.  I would guess that would be a bug.
1158692f60a7Smrg
1159692f60a7Smrg	-Wc,*)
116085ee4c00Smrg	  func_stripname '-Wc,' '' "$arg"
116185ee4c00Smrg	  args=$func_stripname_result
1162692f60a7Smrg	  lastarg=
1163692f60a7Smrg	  save_ifs="$IFS"; IFS=','
116485ee4c00Smrg	  for arg in $args; do
1165692f60a7Smrg	    IFS="$save_ifs"
116685ee4c00Smrg	    func_quote_for_eval "$arg"
116785ee4c00Smrg	    lastarg="$lastarg $func_quote_for_eval_result"
1168692f60a7Smrg	  done
1169692f60a7Smrg	  IFS="$save_ifs"
117085ee4c00Smrg	  func_stripname ' ' '' "$lastarg"
117185ee4c00Smrg	  lastarg=$func_stripname_result
1172692f60a7Smrg
1173692f60a7Smrg	  # Add the arguments to base_compile.
1174692f60a7Smrg	  base_compile="$base_compile $lastarg"
1175692f60a7Smrg	  continue
1176692f60a7Smrg	  ;;
1177692f60a7Smrg
117885ee4c00Smrg	*)
1179692f60a7Smrg	  # Accept the current argument as the source file.
1180692f60a7Smrg	  # The previous "srcfile" becomes the current argument.
1181692f60a7Smrg	  #
1182692f60a7Smrg	  lastarg="$srcfile"
1183692f60a7Smrg	  srcfile="$arg"
1184692f60a7Smrg	  ;;
1185692f60a7Smrg	esac  #  case $arg
1186692f60a7Smrg	;;
1187692f60a7Smrg      esac    #  case $arg_mode
1188692f60a7Smrg
1189692f60a7Smrg      # Aesthetically quote the previous argument.
119085ee4c00Smrg      func_quote_for_eval "$lastarg"
119185ee4c00Smrg      base_compile="$base_compile $func_quote_for_eval_result"
1192692f60a7Smrg    done # for arg
1193692f60a7Smrg
1194692f60a7Smrg    case $arg_mode in
1195692f60a7Smrg    arg)
119685ee4c00Smrg      func_fatal_error "you must specify an argument for -Xcompile"
1197692f60a7Smrg      ;;
1198692f60a7Smrg    target)
119985ee4c00Smrg      func_fatal_error "you must specify a target with \`-o'"
1200692f60a7Smrg      ;;
1201692f60a7Smrg    *)
1202692f60a7Smrg      # Get the name of the library object.
120385ee4c00Smrg      test -z "$libobj" && {
120485ee4c00Smrg	func_basename "$srcfile"
120585ee4c00Smrg	libobj="$func_basename_result"
120685ee4c00Smrg      }
1207692f60a7Smrg      ;;
1208692f60a7Smrg    esac
1209692f60a7Smrg
1210692f60a7Smrg    # Recognize several different file suffixes.
1211692f60a7Smrg    # If the user specifies -o file.o, it is replaced with file.lo
1212692f60a7Smrg    case $libobj in
121385ee4c00Smrg    *.[cCFSifmso] | \
121485ee4c00Smrg    *.ada | *.adb | *.ads | *.asm | \
121585ee4c00Smrg    *.c++ | *.cc | *.ii | *.class | *.cpp | *.cxx | \
121685ee4c00Smrg    *.[fF][09]? | *.for | *.java | *.obj | *.sx)
121785ee4c00Smrg      func_xform "$libobj"
121885ee4c00Smrg      libobj=$func_xform_result
121985ee4c00Smrg      ;;
1220692f60a7Smrg    esac
1221692f60a7Smrg
1222692f60a7Smrg    case $libobj in
122385ee4c00Smrg    *.lo) func_lo2o "$libobj"; obj=$func_lo2o_result ;;
1224692f60a7Smrg    *)
122585ee4c00Smrg      func_fatal_error "cannot determine name of library object from \`$libobj'"
1226692f60a7Smrg      ;;
1227692f60a7Smrg    esac
1228692f60a7Smrg
1229692f60a7Smrg    func_infer_tag $base_compile
1230692f60a7Smrg
1231692f60a7Smrg    for arg in $later; do
1232692f60a7Smrg      case $arg in
123385ee4c00Smrg      -shared)
123485ee4c00Smrg	test "$build_libtool_libs" != yes && \
123585ee4c00Smrg	  func_fatal_configuration "can not build a shared library"
123685ee4c00Smrg	build_old_libs=no
123785ee4c00Smrg	continue
123885ee4c00Smrg	;;
123985ee4c00Smrg
1240692f60a7Smrg      -static)
124185ee4c00Smrg	build_libtool_libs=no
1242692f60a7Smrg	build_old_libs=yes
1243692f60a7Smrg	continue
1244692f60a7Smrg	;;
1245692f60a7Smrg
1246692f60a7Smrg      -prefer-pic)
1247692f60a7Smrg	pic_mode=yes
1248692f60a7Smrg	continue
1249692f60a7Smrg	;;
1250692f60a7Smrg
1251692f60a7Smrg      -prefer-non-pic)
1252692f60a7Smrg	pic_mode=no
1253692f60a7Smrg	continue
1254692f60a7Smrg	;;
1255692f60a7Smrg      esac
1256692f60a7Smrg    done
1257692f60a7Smrg
125885ee4c00Smrg    func_quote_for_eval "$libobj"
125985ee4c00Smrg    test "X$libobj" != "X$func_quote_for_eval_result" \
126085ee4c00Smrg      && $ECHO "X$libobj" | $GREP '[]~#^*{};<>?"'"'"'	 &()|`$[]' \
126185ee4c00Smrg      && func_warning "libobj name \`$libobj' may not contain shell special characters."
126285ee4c00Smrg    func_dirname_and_basename "$obj" "/" ""
126385ee4c00Smrg    objname="$func_basename_result"
126485ee4c00Smrg    xdir="$func_dirname_result"
1265692f60a7Smrg    lobj=${xdir}$objdir/$objname
1266692f60a7Smrg
126785ee4c00Smrg    test -z "$base_compile" && \
126885ee4c00Smrg      func_fatal_help "you must specify a compilation command"
1269692f60a7Smrg
1270692f60a7Smrg    # Delete any leftover library objects.
1271692f60a7Smrg    if test "$build_old_libs" = yes; then
1272692f60a7Smrg      removelist="$obj $lobj $libobj ${libobj}T"
1273692f60a7Smrg    else
1274692f60a7Smrg      removelist="$lobj $libobj ${libobj}T"
1275692f60a7Smrg    fi
1276692f60a7Smrg
1277692f60a7Smrg    # On Cygwin there's no "real" PIC flag so we must build both object types
1278692f60a7Smrg    case $host_os in
127985ee4c00Smrg    cygwin* | mingw* | pw32* | os2* | cegcc*)
1280692f60a7Smrg      pic_mode=default
1281692f60a7Smrg      ;;
1282692f60a7Smrg    esac
1283692f60a7Smrg    if test "$pic_mode" = no && test "$deplibs_check_method" != pass_all; then
1284692f60a7Smrg      # non-PIC code in shared libraries is not supported
1285692f60a7Smrg      pic_mode=default
1286692f60a7Smrg    fi
1287692f60a7Smrg
1288692f60a7Smrg    # Calculate the filename of the output object if compiler does
1289692f60a7Smrg    # not support -o with -c
1290692f60a7Smrg    if test "$compiler_c_o" = no; then
129185ee4c00Smrg      output_obj=`$ECHO "X$srcfile" | $Xsed -e 's%^.*/%%' -e 's%\.[^.]*$%%'`.${objext}
1292692f60a7Smrg      lockfile="$output_obj.lock"
1293692f60a7Smrg    else
1294692f60a7Smrg      output_obj=
1295692f60a7Smrg      need_locks=no
1296692f60a7Smrg      lockfile=
1297692f60a7Smrg    fi
1298692f60a7Smrg
1299692f60a7Smrg    # Lock this critical section if it is needed
1300692f60a7Smrg    # We use this script file to make the link, it avoids creating a new file
1301692f60a7Smrg    if test "$need_locks" = yes; then
130285ee4c00Smrg      until $opt_dry_run || ln "$progpath" "$lockfile" 2>/dev/null; do
130385ee4c00Smrg	func_echo "Waiting for $lockfile to be removed"
1304692f60a7Smrg	sleep 2
1305692f60a7Smrg      done
1306692f60a7Smrg    elif test "$need_locks" = warn; then
1307692f60a7Smrg      if test -f "$lockfile"; then
130885ee4c00Smrg	$ECHO "\
1309692f60a7Smrg*** ERROR, $lockfile exists and contains:
1310692f60a7Smrg`cat $lockfile 2>/dev/null`
1311692f60a7Smrg
1312692f60a7SmrgThis indicates that another process is trying to use the same
1313692f60a7Smrgtemporary object file, and libtool could not work around it because
1314692f60a7Smrgyour compiler does not support \`-c' and \`-o' together.  If you
1315692f60a7Smrgrepeat this compilation, it may succeed, by chance, but you had better
1316692f60a7Smrgavoid parallel builds (make -j) in this platform, or get a better
1317692f60a7Smrgcompiler."
1318692f60a7Smrg
131985ee4c00Smrg	$opt_dry_run || $RM $removelist
1320692f60a7Smrg	exit $EXIT_FAILURE
1321692f60a7Smrg      fi
132285ee4c00Smrg      removelist="$removelist $output_obj"
132385ee4c00Smrg      $ECHO "$srcfile" > "$lockfile"
1324692f60a7Smrg    fi
1325692f60a7Smrg
132685ee4c00Smrg    $opt_dry_run || $RM $removelist
132785ee4c00Smrg    removelist="$removelist $lockfile"
132885ee4c00Smrg    trap '$opt_dry_run || $RM $removelist; exit $EXIT_FAILURE' 1 2 15
132985ee4c00Smrg
1330692f60a7Smrg    if test -n "$fix_srcfile_path"; then
1331692f60a7Smrg      eval srcfile=\"$fix_srcfile_path\"
1332692f60a7Smrg    fi
133385ee4c00Smrg    func_quote_for_eval "$srcfile"
133485ee4c00Smrg    qsrcfile=$func_quote_for_eval_result
1335692f60a7Smrg
1336692f60a7Smrg    # Only build a PIC object if we are building libtool libraries.
1337692f60a7Smrg    if test "$build_libtool_libs" = yes; then
1338692f60a7Smrg      # Without this assignment, base_compile gets emptied.
1339692f60a7Smrg      fbsd_hideous_sh_bug=$base_compile
1340692f60a7Smrg
1341692f60a7Smrg      if test "$pic_mode" != no; then
1342692f60a7Smrg	command="$base_compile $qsrcfile $pic_flag"
1343692f60a7Smrg      else
1344692f60a7Smrg	# Don't build PIC code
1345692f60a7Smrg	command="$base_compile $qsrcfile"
1346692f60a7Smrg      fi
1347692f60a7Smrg
134885ee4c00Smrg      func_mkdir_p "$xdir$objdir"
1349692f60a7Smrg
1350692f60a7Smrg      if test -z "$output_obj"; then
1351692f60a7Smrg	# Place PIC objects in $objdir
1352692f60a7Smrg	command="$command -o $lobj"
1353692f60a7Smrg      fi
1354692f60a7Smrg
135585ee4c00Smrg      func_show_eval_locale "$command"	\
135685ee4c00Smrg          'test -n "$output_obj" && $RM $removelist; exit $EXIT_FAILURE'
1357692f60a7Smrg
1358692f60a7Smrg      if test "$need_locks" = warn &&
1359692f60a7Smrg	 test "X`cat $lockfile 2>/dev/null`" != "X$srcfile"; then
136085ee4c00Smrg	$ECHO "\
1361692f60a7Smrg*** ERROR, $lockfile contains:
1362692f60a7Smrg`cat $lockfile 2>/dev/null`
1363692f60a7Smrg
1364692f60a7Smrgbut it should contain:
1365692f60a7Smrg$srcfile
1366692f60a7Smrg
1367692f60a7SmrgThis indicates that another process is trying to use the same
1368692f60a7Smrgtemporary object file, and libtool could not work around it because
1369692f60a7Smrgyour compiler does not support \`-c' and \`-o' together.  If you
1370692f60a7Smrgrepeat this compilation, it may succeed, by chance, but you had better
1371692f60a7Smrgavoid parallel builds (make -j) in this platform, or get a better
1372692f60a7Smrgcompiler."
1373692f60a7Smrg
137485ee4c00Smrg	$opt_dry_run || $RM $removelist
1375692f60a7Smrg	exit $EXIT_FAILURE
1376692f60a7Smrg      fi
1377692f60a7Smrg
1378692f60a7Smrg      # Just move the object if needed, then go on to compile the next one
1379692f60a7Smrg      if test -n "$output_obj" && test "X$output_obj" != "X$lobj"; then
138085ee4c00Smrg	func_show_eval '$MV "$output_obj" "$lobj"' \
138185ee4c00Smrg	  'error=$?; $opt_dry_run || $RM $removelist; exit $error'
1382692f60a7Smrg      fi
1383692f60a7Smrg
1384692f60a7Smrg      # Allow error messages only from the first compilation.
1385692f60a7Smrg      if test "$suppress_opt" = yes; then
138685ee4c00Smrg	suppress_output=' >/dev/null 2>&1'
1387692f60a7Smrg      fi
1388692f60a7Smrg    fi
1389692f60a7Smrg
1390692f60a7Smrg    # Only build a position-dependent object if we build old libraries.
1391692f60a7Smrg    if test "$build_old_libs" = yes; then
1392692f60a7Smrg      if test "$pic_mode" != yes; then
1393692f60a7Smrg	# Don't build PIC code
139485ee4c00Smrg	command="$base_compile $qsrcfile$pie_flag"
1395692f60a7Smrg      else
1396692f60a7Smrg	command="$base_compile $qsrcfile $pic_flag"
1397692f60a7Smrg      fi
1398692f60a7Smrg      if test "$compiler_c_o" = yes; then
1399692f60a7Smrg	command="$command -o $obj"
1400692f60a7Smrg      fi
1401692f60a7Smrg
1402692f60a7Smrg      # Suppress compiler output if we already did a PIC compilation.
1403692f60a7Smrg      command="$command$suppress_output"
140485ee4c00Smrg      func_show_eval_locale "$command" \
140585ee4c00Smrg        '$opt_dry_run || $RM $removelist; exit $EXIT_FAILURE'
1406692f60a7Smrg
1407692f60a7Smrg      if test "$need_locks" = warn &&
1408692f60a7Smrg	 test "X`cat $lockfile 2>/dev/null`" != "X$srcfile"; then
140985ee4c00Smrg	$ECHO "\
1410692f60a7Smrg*** ERROR, $lockfile contains:
1411692f60a7Smrg`cat $lockfile 2>/dev/null`
1412692f60a7Smrg
1413692f60a7Smrgbut it should contain:
1414692f60a7Smrg$srcfile
1415692f60a7Smrg
1416692f60a7SmrgThis indicates that another process is trying to use the same
1417692f60a7Smrgtemporary object file, and libtool could not work around it because
1418692f60a7Smrgyour compiler does not support \`-c' and \`-o' together.  If you
1419692f60a7Smrgrepeat this compilation, it may succeed, by chance, but you had better
1420692f60a7Smrgavoid parallel builds (make -j) in this platform, or get a better
1421692f60a7Smrgcompiler."
1422692f60a7Smrg
142385ee4c00Smrg	$opt_dry_run || $RM $removelist
1424692f60a7Smrg	exit $EXIT_FAILURE
1425692f60a7Smrg      fi
1426692f60a7Smrg
1427692f60a7Smrg      # Just move the object if needed
1428692f60a7Smrg      if test -n "$output_obj" && test "X$output_obj" != "X$obj"; then
142985ee4c00Smrg	func_show_eval '$MV "$output_obj" "$obj"' \
143085ee4c00Smrg	  'error=$?; $opt_dry_run || $RM $removelist; exit $error'
1431692f60a7Smrg      fi
1432692f60a7Smrg    fi
1433692f60a7Smrg
143485ee4c00Smrg    $opt_dry_run || {
143585ee4c00Smrg      func_write_libtool_object "$libobj" "$objdir/$objname" "$objname"
1436692f60a7Smrg
143785ee4c00Smrg      # Unlock the critical section if it was locked
143885ee4c00Smrg      if test "$need_locks" != no; then
143985ee4c00Smrg	removelist=$lockfile
144085ee4c00Smrg        $RM "$lockfile"
144185ee4c00Smrg      fi
144285ee4c00Smrg    }
1443692f60a7Smrg
1444692f60a7Smrg    exit $EXIT_SUCCESS
144585ee4c00Smrg}
1446692f60a7Smrg
144785ee4c00Smrg$opt_help || {
144885ee4c00Smrgtest "$mode" = compile && func_mode_compile ${1+"$@"}
144985ee4c00Smrg}
1450692f60a7Smrg
145185ee4c00Smrgfunc_mode_help ()
145285ee4c00Smrg{
145385ee4c00Smrg    # We need to display help for each of the modes.
145485ee4c00Smrg    case $mode in
145585ee4c00Smrg      "")
145685ee4c00Smrg        # Generic help is extracted from the usage comments
145785ee4c00Smrg        # at the start of this file.
145885ee4c00Smrg        func_help
145985ee4c00Smrg        ;;
1460692f60a7Smrg
146185ee4c00Smrg      clean)
146285ee4c00Smrg        $ECHO \
146385ee4c00Smrg"Usage: $progname [OPTION]... --mode=clean RM [RM-OPTION]... FILE...
1464692f60a7Smrg
146585ee4c00SmrgRemove files from the build directory.
1466692f60a7Smrg
146785ee4c00SmrgRM is the name of the program to use to delete files associated with each FILE
146885ee4c00Smrg(typically \`/bin/rm').  RM-OPTIONS are options (such as \`-f') to be passed
146985ee4c00Smrgto RM.
1470692f60a7Smrg
147185ee4c00SmrgIf FILE is a libtool library, object or program, all the files associated
147285ee4c00Smrgwith it are deleted. Otherwise, only FILE itself is deleted using RM."
147385ee4c00Smrg        ;;
1474692f60a7Smrg
147585ee4c00Smrg      compile)
147685ee4c00Smrg      $ECHO \
147785ee4c00Smrg"Usage: $progname [OPTION]... --mode=compile COMPILE-COMMAND... SOURCEFILE
1478692f60a7Smrg
147985ee4c00SmrgCompile a source file into a libtool library object.
1480692f60a7Smrg
148185ee4c00SmrgThis mode accepts the following additional options:
1482692f60a7Smrg
148385ee4c00Smrg  -o OUTPUT-FILE    set the output file name to OUTPUT-FILE
148485ee4c00Smrg  -no-suppress      do not suppress compiler output for multiple passes
148585ee4c00Smrg  -prefer-pic       try to building PIC objects only
148685ee4c00Smrg  -prefer-non-pic   try to building non-PIC objects only
148785ee4c00Smrg  -shared           do not build a \`.o' file suitable for static linking
148885ee4c00Smrg  -static           only build a \`.o' file suitable for static linking
1489692f60a7Smrg
149085ee4c00SmrgCOMPILE-COMMAND is a command to be used in creating a \`standard' object file
149185ee4c00Smrgfrom the given SOURCEFILE.
1492692f60a7Smrg
149385ee4c00SmrgThe output file name is determined by removing the directory component from
149485ee4c00SmrgSOURCEFILE, then substituting the C source code suffix \`.c' with the
149585ee4c00Smrglibrary object suffix, \`.lo'."
149685ee4c00Smrg        ;;
1497692f60a7Smrg
149885ee4c00Smrg      execute)
149985ee4c00Smrg        $ECHO \
150085ee4c00Smrg"Usage: $progname [OPTION]... --mode=execute COMMAND [ARGS]...
1501692f60a7Smrg
150285ee4c00SmrgAutomatically set library path, then run a program.
1503692f60a7Smrg
150485ee4c00SmrgThis mode accepts the following additional options:
1505692f60a7Smrg
150685ee4c00Smrg  -dlopen FILE      add the directory containing FILE to the library path
1507692f60a7Smrg
150885ee4c00SmrgThis mode sets the library path environment variable according to \`-dlopen'
150985ee4c00Smrgflags.
1510692f60a7Smrg
151185ee4c00SmrgIf any of the ARGS are libtool executable wrappers, then they are translated
151285ee4c00Smrginto their corresponding uninstalled binary, and any of their required library
151385ee4c00Smrgdirectories are added to the library path.
1514692f60a7Smrg
151585ee4c00SmrgThen, COMMAND is executed, with ARGS as arguments."
151685ee4c00Smrg        ;;
1517692f60a7Smrg
151885ee4c00Smrg      finish)
151985ee4c00Smrg        $ECHO \
152085ee4c00Smrg"Usage: $progname [OPTION]... --mode=finish [LIBDIR]...
1521692f60a7Smrg
152285ee4c00SmrgComplete the installation of libtool libraries.
1523692f60a7Smrg
152485ee4c00SmrgEach LIBDIR is a directory that contains libtool libraries.
1525692f60a7Smrg
152685ee4c00SmrgThe commands that this mode executes may require superuser privileges.  Use
152785ee4c00Smrgthe \`--dry-run' option if you just want to see what would be executed."
152885ee4c00Smrg        ;;
1529692f60a7Smrg
153085ee4c00Smrg      install)
153185ee4c00Smrg        $ECHO \
153285ee4c00Smrg"Usage: $progname [OPTION]... --mode=install INSTALL-COMMAND...
1533692f60a7Smrg
153485ee4c00SmrgInstall executables or libraries.
1535692f60a7Smrg
153685ee4c00SmrgINSTALL-COMMAND is the installation command.  The first component should be
153785ee4c00Smrgeither the \`install' or \`cp' program.
1538692f60a7Smrg
153985ee4c00SmrgThe following components of INSTALL-COMMAND are treated specially:
1540692f60a7Smrg
154185ee4c00Smrg  -inst-prefix PREFIX-DIR  Use PREFIX-DIR as a staging area for installation
1542692f60a7Smrg
154385ee4c00SmrgThe rest of the components are interpreted as arguments to that command (only
154485ee4c00SmrgBSD-compatible install options are recognized)."
154585ee4c00Smrg        ;;
1546692f60a7Smrg
154785ee4c00Smrg      link)
154885ee4c00Smrg        $ECHO \
154985ee4c00Smrg"Usage: $progname [OPTION]... --mode=link LINK-COMMAND...
1550692f60a7Smrg
155185ee4c00SmrgLink object files or libraries together to form another library, or to
155285ee4c00Smrgcreate an executable program.
1553692f60a7Smrg
155485ee4c00SmrgLINK-COMMAND is a command using the C compiler that you would use to create
155585ee4c00Smrga program from several object files.
1556692f60a7Smrg
155785ee4c00SmrgThe following components of LINK-COMMAND are treated specially:
1558692f60a7Smrg
155985ee4c00Smrg  -all-static       do not do any dynamic linking at all
156085ee4c00Smrg  -avoid-version    do not add a version suffix if possible
156185ee4c00Smrg  -dlopen FILE      \`-dlpreopen' FILE if it cannot be dlopened at runtime
156285ee4c00Smrg  -dlpreopen FILE   link in FILE and add its symbols to lt_preloaded_symbols
156385ee4c00Smrg  -export-dynamic   allow symbols from OUTPUT-FILE to be resolved with dlsym(3)
156485ee4c00Smrg  -export-symbols SYMFILE
156585ee4c00Smrg                    try to export only the symbols listed in SYMFILE
156685ee4c00Smrg  -export-symbols-regex REGEX
156785ee4c00Smrg                    try to export only the symbols matching REGEX
156885ee4c00Smrg  -LLIBDIR          search LIBDIR for required installed libraries
156985ee4c00Smrg  -lNAME            OUTPUT-FILE requires the installed library libNAME
157085ee4c00Smrg  -module           build a library that can dlopened
157185ee4c00Smrg  -no-fast-install  disable the fast-install mode
157285ee4c00Smrg  -no-install       link a not-installable executable
157385ee4c00Smrg  -no-undefined     declare that a library does not refer to external symbols
157485ee4c00Smrg  -o OUTPUT-FILE    create OUTPUT-FILE from the specified objects
157585ee4c00Smrg  -objectlist FILE  Use a list of object files found in FILE to specify objects
157685ee4c00Smrg  -precious-files-regex REGEX
157785ee4c00Smrg                    don't remove output files matching REGEX
157885ee4c00Smrg  -release RELEASE  specify package release information
157985ee4c00Smrg  -rpath LIBDIR     the created library will eventually be installed in LIBDIR
158085ee4c00Smrg  -R[ ]LIBDIR       add LIBDIR to the runtime path of programs and libraries
158185ee4c00Smrg  -shared           only do dynamic linking of libtool libraries
158285ee4c00Smrg  -shrext SUFFIX    override the standard shared library file extension
158385ee4c00Smrg  -static           do not do any dynamic linking of uninstalled libtool libraries
158485ee4c00Smrg  -static-libtool-libs
158585ee4c00Smrg                    do not do any dynamic linking of libtool libraries
158685ee4c00Smrg  -version-info CURRENT[:REVISION[:AGE]]
158785ee4c00Smrg                    specify library version info [each variable defaults to 0]
158885ee4c00Smrg  -weak LIBNAME     declare that the target provides the LIBNAME interface
1589692f60a7Smrg
159085ee4c00SmrgAll other options (arguments beginning with \`-') are ignored.
1591692f60a7Smrg
159285ee4c00SmrgEvery other argument is treated as a filename.  Files ending in \`.la' are
159385ee4c00Smrgtreated as uninstalled libtool libraries, other files are standard or library
159485ee4c00Smrgobject files.
159554569438Smrg
159685ee4c00SmrgIf the OUTPUT-FILE ends in \`.la', then a libtool library is created,
159785ee4c00Smrgonly library objects (\`.lo' files) may be specified, and \`-rpath' is
159885ee4c00Smrgrequired, except when creating a convenience library.
1599692f60a7Smrg
160085ee4c00SmrgIf OUTPUT-FILE ends in \`.a' or \`.lib', then a standard library is created
160185ee4c00Smrgusing \`ar' and \`ranlib', or on Windows using \`lib'.
1602692f60a7Smrg
160385ee4c00SmrgIf OUTPUT-FILE ends in \`.lo' or \`.${objext}', then a reloadable object file
160485ee4c00Smrgis created, otherwise an executable program is created."
1605692f60a7Smrg        ;;
1606692f60a7Smrg
160785ee4c00Smrg      uninstall)
160885ee4c00Smrg        $ECHO \
160985ee4c00Smrg"Usage: $progname [OPTION]... --mode=uninstall RM [RM-OPTION]... FILE...
1610692f60a7Smrg
161185ee4c00SmrgRemove libraries from an installation directory.
1612692f60a7Smrg
161385ee4c00SmrgRM is the name of the program to use to delete files associated with each FILE
161485ee4c00Smrg(typically \`/bin/rm').  RM-OPTIONS are options (such as \`-f') to be passed
161585ee4c00Smrgto RM.
1616692f60a7Smrg
161785ee4c00SmrgIf FILE is a libtool library, all the files associated with it are deleted.
161885ee4c00SmrgOtherwise, only FILE itself is deleted using RM."
161985ee4c00Smrg        ;;
1620692f60a7Smrg
162185ee4c00Smrg      *)
162285ee4c00Smrg        func_fatal_help "invalid operation mode \`$mode'"
162385ee4c00Smrg        ;;
162485ee4c00Smrg    esac
1625692f60a7Smrg
162685ee4c00Smrg    $ECHO
162785ee4c00Smrg    $ECHO "Try \`$progname --help' for more information about other modes."
1628692f60a7Smrg
162985ee4c00Smrg    exit $?
163085ee4c00Smrg}
1631692f60a7Smrg
163285ee4c00Smrg  # Now that we've collected a possible --mode arg, show help if necessary
163385ee4c00Smrg  $opt_help && func_mode_help
1634692f60a7Smrg
1635692f60a7Smrg
163685ee4c00Smrg# func_mode_execute arg...
163785ee4c00Smrgfunc_mode_execute ()
163885ee4c00Smrg{
163985ee4c00Smrg    $opt_debug
164085ee4c00Smrg    # The first argument is the command name.
164185ee4c00Smrg    cmd="$nonopt"
164285ee4c00Smrg    test -z "$cmd" && \
164385ee4c00Smrg      func_fatal_help "you must specify a COMMAND"
1644692f60a7Smrg
164585ee4c00Smrg    # Handle -dlopen flags immediately.
164685ee4c00Smrg    for file in $execute_dlfiles; do
164785ee4c00Smrg      test -f "$file" \
164885ee4c00Smrg	|| func_fatal_help "\`$file' is not a file"
1649692f60a7Smrg
165085ee4c00Smrg      dir=
165185ee4c00Smrg      case $file in
165285ee4c00Smrg      *.la)
165385ee4c00Smrg	# Check to see that this really is a libtool archive.
165485ee4c00Smrg	func_lalib_unsafe_p "$file" \
165585ee4c00Smrg	  || func_fatal_help "\`$lib' is not a valid libtool archive"
1656692f60a7Smrg
165785ee4c00Smrg	# Read the libtool library.
165885ee4c00Smrg	dlname=
165985ee4c00Smrg	library_names=
166085ee4c00Smrg	func_source "$file"
1661692f60a7Smrg
166285ee4c00Smrg	# Skip this library if it cannot be dlopened.
166385ee4c00Smrg	if test -z "$dlname"; then
166485ee4c00Smrg	  # Warn if it was a shared library.
166585ee4c00Smrg	  test -n "$library_names" && \
166685ee4c00Smrg	    func_warning "\`$file' was not linked with \`-export-dynamic'"
166785ee4c00Smrg	  continue
166885ee4c00Smrg	fi
1669692f60a7Smrg
167085ee4c00Smrg	func_dirname "$file" "" "."
167185ee4c00Smrg	dir="$func_dirname_result"
1672692f60a7Smrg
167385ee4c00Smrg	if test -f "$dir/$objdir/$dlname"; then
167485ee4c00Smrg	  dir="$dir/$objdir"
167585ee4c00Smrg	else
167685ee4c00Smrg	  if test ! -f "$dir/$dlname"; then
167785ee4c00Smrg	    func_fatal_error "cannot find \`$dlname' in \`$dir' or \`$dir/$objdir'"
167885ee4c00Smrg	  fi
167985ee4c00Smrg	fi
1680692f60a7Smrg	;;
1681692f60a7Smrg
168285ee4c00Smrg      *.lo)
168385ee4c00Smrg	# Just add the directory containing the .lo file.
168485ee4c00Smrg	func_dirname "$file" "" "."
168585ee4c00Smrg	dir="$func_dirname_result"
1686692f60a7Smrg	;;
1687692f60a7Smrg
168885ee4c00Smrg      *)
168985ee4c00Smrg	func_warning "\`-dlopen' is ignored for non-libtool libraries and objects"
1690692f60a7Smrg	continue
1691692f60a7Smrg	;;
169285ee4c00Smrg      esac
1693692f60a7Smrg
169485ee4c00Smrg      # Get the absolute pathname.
169585ee4c00Smrg      absdir=`cd "$dir" && pwd`
169685ee4c00Smrg      test -n "$absdir" && dir="$absdir"
1697692f60a7Smrg
169885ee4c00Smrg      # Now add the directory to shlibpath_var.
169985ee4c00Smrg      if eval "test -z \"\$$shlibpath_var\""; then
170085ee4c00Smrg	eval "$shlibpath_var=\"\$dir\""
170185ee4c00Smrg      else
170285ee4c00Smrg	eval "$shlibpath_var=\"\$dir:\$$shlibpath_var\""
170385ee4c00Smrg      fi
170485ee4c00Smrg    done
1705692f60a7Smrg
170685ee4c00Smrg    # This variable tells wrapper scripts just to set shlibpath_var
170785ee4c00Smrg    # rather than running their programs.
170885ee4c00Smrg    libtool_execute_magic="$magic"
1709692f60a7Smrg
171085ee4c00Smrg    # Check if any of the arguments is a wrapper script.
171185ee4c00Smrg    args=
171285ee4c00Smrg    for file
171385ee4c00Smrg    do
171485ee4c00Smrg      case $file in
171585ee4c00Smrg      -*) ;;
171685ee4c00Smrg      *)
171785ee4c00Smrg	# Do a test to see if this is really a libtool program.
171885ee4c00Smrg	if func_ltwrapper_script_p "$file"; then
171985ee4c00Smrg	  func_source "$file"
172085ee4c00Smrg	  # Transform arg to wrapped name.
172185ee4c00Smrg	  file="$progdir/$program"
172285ee4c00Smrg	elif func_ltwrapper_executable_p "$file"; then
172385ee4c00Smrg	  func_ltwrapper_scriptname "$file"
172485ee4c00Smrg	  func_source "$func_ltwrapper_scriptname_result"
172585ee4c00Smrg	  # Transform arg to wrapped name.
172685ee4c00Smrg	  file="$progdir/$program"
172785ee4c00Smrg	fi
172885ee4c00Smrg	;;
172985ee4c00Smrg      esac
173085ee4c00Smrg      # Quote arguments (to preserve shell metacharacters).
173185ee4c00Smrg      func_quote_for_eval "$file"
173285ee4c00Smrg      args="$args $func_quote_for_eval_result"
173385ee4c00Smrg    done
1734692f60a7Smrg
173585ee4c00Smrg    if test "X$opt_dry_run" = Xfalse; then
173685ee4c00Smrg      if test -n "$shlibpath_var"; then
173785ee4c00Smrg	# Export the shlibpath_var.
173885ee4c00Smrg	eval "export $shlibpath_var"
173985ee4c00Smrg      fi
1740692f60a7Smrg
174185ee4c00Smrg      # Restore saved environment variables
174285ee4c00Smrg      for lt_var in LANG LANGUAGE LC_ALL LC_CTYPE LC_COLLATE LC_MESSAGES
174385ee4c00Smrg      do
174485ee4c00Smrg	eval "if test \"\${save_$lt_var+set}\" = set; then
174585ee4c00Smrg                $lt_var=\$save_$lt_var; export $lt_var
1746692f60a7Smrg	      else
174785ee4c00Smrg		$lt_unset $lt_var
174885ee4c00Smrg	      fi"
174985ee4c00Smrg      done
1750692f60a7Smrg
175185ee4c00Smrg      # Now prepare to actually exec the command.
175285ee4c00Smrg      exec_cmd="\$cmd$args"
175385ee4c00Smrg    else
175485ee4c00Smrg      # Display what would be done.
175585ee4c00Smrg      if test -n "$shlibpath_var"; then
175685ee4c00Smrg	eval "\$ECHO \"\$shlibpath_var=\$$shlibpath_var\""
175785ee4c00Smrg	$ECHO "export $shlibpath_var"
175885ee4c00Smrg      fi
175985ee4c00Smrg      $ECHO "$cmd$args"
176085ee4c00Smrg      exit $EXIT_SUCCESS
176185ee4c00Smrg    fi
176285ee4c00Smrg}
1763692f60a7Smrg
176485ee4c00Smrgtest "$mode" = execute && func_mode_execute ${1+"$@"}
1765692f60a7Smrg
1766692f60a7Smrg
176785ee4c00Smrg# func_mode_finish arg...
176885ee4c00Smrgfunc_mode_finish ()
176985ee4c00Smrg{
177085ee4c00Smrg    $opt_debug
177185ee4c00Smrg    libdirs="$nonopt"
177285ee4c00Smrg    admincmds=
1773692f60a7Smrg
177485ee4c00Smrg    if test -n "$finish_cmds$finish_eval" && test -n "$libdirs"; then
177585ee4c00Smrg      for dir
177685ee4c00Smrg      do
177785ee4c00Smrg	libdirs="$libdirs $dir"
177885ee4c00Smrg      done
1779692f60a7Smrg
178085ee4c00Smrg      for libdir in $libdirs; do
178185ee4c00Smrg	if test -n "$finish_cmds"; then
178285ee4c00Smrg	  # Do each command in the finish commands.
178385ee4c00Smrg	  func_execute_cmds "$finish_cmds" 'admincmds="$admincmds
178485ee4c00Smrg'"$cmd"'"'
1785692f60a7Smrg	fi
178685ee4c00Smrg	if test -n "$finish_eval"; then
178785ee4c00Smrg	  # Do the single finish_eval.
178885ee4c00Smrg	  eval cmds=\"$finish_eval\"
178985ee4c00Smrg	  $opt_dry_run || eval "$cmds" || admincmds="$admincmds
179085ee4c00Smrg       $cmds"
179185ee4c00Smrg	fi
179285ee4c00Smrg      done
179385ee4c00Smrg    fi
1794692f60a7Smrg
179585ee4c00Smrg    # Exit here if they wanted silent mode.
179685ee4c00Smrg    $opt_silent && exit $EXIT_SUCCESS
1797692f60a7Smrg
179885ee4c00Smrg    $ECHO "X----------------------------------------------------------------------" | $Xsed
179985ee4c00Smrg    $ECHO "Libraries have been installed in:"
180085ee4c00Smrg    for libdir in $libdirs; do
180185ee4c00Smrg      $ECHO "   $libdir"
180285ee4c00Smrg    done
180385ee4c00Smrg    $ECHO
180485ee4c00Smrg    $ECHO "If you ever happen to want to link against installed libraries"
180585ee4c00Smrg    $ECHO "in a given directory, LIBDIR, you must either use libtool, and"
180685ee4c00Smrg    $ECHO "specify the full pathname of the library, or use the \`-LLIBDIR'"
180785ee4c00Smrg    $ECHO "flag during linking and do at least one of the following:"
180885ee4c00Smrg    if test -n "$shlibpath_var"; then
180985ee4c00Smrg      $ECHO "   - add LIBDIR to the \`$shlibpath_var' environment variable"
181085ee4c00Smrg      $ECHO "     during execution"
181185ee4c00Smrg    fi
181285ee4c00Smrg    if test -n "$runpath_var"; then
181385ee4c00Smrg      $ECHO "   - add LIBDIR to the \`$runpath_var' environment variable"
181485ee4c00Smrg      $ECHO "     during linking"
181585ee4c00Smrg    fi
181685ee4c00Smrg    if test -n "$hardcode_libdir_flag_spec"; then
181785ee4c00Smrg      libdir=LIBDIR
181885ee4c00Smrg      eval flag=\"$hardcode_libdir_flag_spec\"
181985ee4c00Smrg
182085ee4c00Smrg      $ECHO "   - use the \`$flag' linker flag"
182185ee4c00Smrg    fi
182285ee4c00Smrg    if test -n "$admincmds"; then
182385ee4c00Smrg      $ECHO "   - have your system administrator run these commands:$admincmds"
182485ee4c00Smrg    fi
182585ee4c00Smrg    if test -f /etc/ld.so.conf; then
182685ee4c00Smrg      $ECHO "   - have your system administrator add LIBDIR to \`/etc/ld.so.conf'"
182785ee4c00Smrg    fi
182885ee4c00Smrg    $ECHO
182985ee4c00Smrg
183085ee4c00Smrg    $ECHO "See any operating system documentation about shared libraries for"
183185ee4c00Smrg    case $host in
183285ee4c00Smrg      solaris2.[6789]|solaris2.1[0-9])
183385ee4c00Smrg        $ECHO "more information, such as the ld(1), crle(1) and ld.so(8) manual"
183485ee4c00Smrg	$ECHO "pages."
183585ee4c00Smrg	;;
183685ee4c00Smrg      *)
183785ee4c00Smrg        $ECHO "more information, such as the ld(1) and ld.so(8) manual pages."
183885ee4c00Smrg        ;;
183985ee4c00Smrg    esac
184085ee4c00Smrg    $ECHO "X----------------------------------------------------------------------" | $Xsed
184185ee4c00Smrg    exit $EXIT_SUCCESS
184285ee4c00Smrg}
184385ee4c00Smrg
184485ee4c00Smrgtest "$mode" = finish && func_mode_finish ${1+"$@"}
184585ee4c00Smrg
184685ee4c00Smrg
184785ee4c00Smrg# func_mode_install arg...
184885ee4c00Smrgfunc_mode_install ()
184985ee4c00Smrg{
185085ee4c00Smrg    $opt_debug
185185ee4c00Smrg    # There may be an optional sh(1) argument at the beginning of
185285ee4c00Smrg    # install_prog (especially on Windows NT).
185385ee4c00Smrg    if test "$nonopt" = "$SHELL" || test "$nonopt" = /bin/sh ||
185485ee4c00Smrg       # Allow the use of GNU shtool's install command.
185585ee4c00Smrg       $ECHO "X$nonopt" | $GREP shtool >/dev/null; then
185685ee4c00Smrg      # Aesthetically quote it.
185785ee4c00Smrg      func_quote_for_eval "$nonopt"
185885ee4c00Smrg      install_prog="$func_quote_for_eval_result "
185985ee4c00Smrg      arg=$1
186085ee4c00Smrg      shift
186185ee4c00Smrg    else
186285ee4c00Smrg      install_prog=
186385ee4c00Smrg      arg=$nonopt
186485ee4c00Smrg    fi
186585ee4c00Smrg
186685ee4c00Smrg    # The real first argument should be the name of the installation program.
186785ee4c00Smrg    # Aesthetically quote it.
186885ee4c00Smrg    func_quote_for_eval "$arg"
186985ee4c00Smrg    install_prog="$install_prog$func_quote_for_eval_result"
187085ee4c00Smrg
187185ee4c00Smrg    # We need to accept at least all the BSD install flags.
187285ee4c00Smrg    dest=
187385ee4c00Smrg    files=
187485ee4c00Smrg    opts=
187585ee4c00Smrg    prev=
187685ee4c00Smrg    install_type=
187785ee4c00Smrg    isdir=no
187885ee4c00Smrg    stripme=
187985ee4c00Smrg    for arg
188085ee4c00Smrg    do
188185ee4c00Smrg      if test -n "$dest"; then
188285ee4c00Smrg	files="$files $dest"
188385ee4c00Smrg	dest=$arg
188485ee4c00Smrg	continue
188585ee4c00Smrg      fi
188685ee4c00Smrg
188785ee4c00Smrg      case $arg in
188885ee4c00Smrg      -d) isdir=yes ;;
188985ee4c00Smrg      -f)
189085ee4c00Smrg	case " $install_prog " in
189185ee4c00Smrg	*[\\\ /]cp\ *) ;;
189285ee4c00Smrg	*) prev=$arg ;;
189385ee4c00Smrg	esac
189485ee4c00Smrg	;;
189585ee4c00Smrg      -g | -m | -o)
189685ee4c00Smrg	prev=$arg
189785ee4c00Smrg	;;
189885ee4c00Smrg      -s)
189985ee4c00Smrg	stripme=" -s"
190085ee4c00Smrg	continue
190185ee4c00Smrg	;;
190285ee4c00Smrg      -*)
190385ee4c00Smrg	;;
190485ee4c00Smrg      *)
190585ee4c00Smrg	# If the previous option needed an argument, then skip it.
190685ee4c00Smrg	if test -n "$prev"; then
1907692f60a7Smrg	  prev=
1908692f60a7Smrg	else
190985ee4c00Smrg	  dest=$arg
191085ee4c00Smrg	  continue
1911692f60a7Smrg	fi
1912692f60a7Smrg	;;
191385ee4c00Smrg      esac
1914692f60a7Smrg
191585ee4c00Smrg      # Aesthetically quote the argument.
191685ee4c00Smrg      func_quote_for_eval "$arg"
191785ee4c00Smrg      install_prog="$install_prog $func_quote_for_eval_result"
191885ee4c00Smrg    done
1919692f60a7Smrg
192085ee4c00Smrg    test -z "$install_prog" && \
192185ee4c00Smrg      func_fatal_help "you must specify an install program"
1922692f60a7Smrg
192385ee4c00Smrg    test -n "$prev" && \
192485ee4c00Smrg      func_fatal_help "the \`$prev' option requires an argument"
1925692f60a7Smrg
192685ee4c00Smrg    if test -z "$files"; then
192785ee4c00Smrg      if test -z "$dest"; then
192885ee4c00Smrg	func_fatal_help "no file or destination specified"
192985ee4c00Smrg      else
193085ee4c00Smrg	func_fatal_help "you must specify a destination"
193185ee4c00Smrg      fi
1932692f60a7Smrg    fi
1933692f60a7Smrg
193485ee4c00Smrg    # Strip any trailing slash from the destination.
193585ee4c00Smrg    func_stripname '' '/' "$dest"
193685ee4c00Smrg    dest=$func_stripname_result
1937692f60a7Smrg
193885ee4c00Smrg    # Check to see that the destination is a directory.
193985ee4c00Smrg    test -d "$dest" && isdir=yes
194085ee4c00Smrg    if test "$isdir" = yes; then
194185ee4c00Smrg      destdir="$dest"
194285ee4c00Smrg      destname=
1943692f60a7Smrg    else
194485ee4c00Smrg      func_dirname_and_basename "$dest" "" "."
194585ee4c00Smrg      destdir="$func_dirname_result"
194685ee4c00Smrg      destname="$func_basename_result"
1947692f60a7Smrg
194885ee4c00Smrg      # Not a directory, so check to see that there is only one file specified.
194985ee4c00Smrg      set dummy $files; shift
195085ee4c00Smrg      test "$#" -gt 1 && \
195185ee4c00Smrg	func_fatal_help "\`$dest' is not a directory"
1952692f60a7Smrg    fi
195385ee4c00Smrg    case $destdir in
195485ee4c00Smrg    [\\/]* | [A-Za-z]:[\\/]*) ;;
1955692f60a7Smrg    *)
195685ee4c00Smrg      for file in $files; do
195785ee4c00Smrg	case $file in
195885ee4c00Smrg	*.lo) ;;
195985ee4c00Smrg	*)
196085ee4c00Smrg	  func_fatal_help "\`$destdir' must be an absolute directory name"
196185ee4c00Smrg	  ;;
196285ee4c00Smrg	esac
196385ee4c00Smrg      done
1964692f60a7Smrg      ;;
1965692f60a7Smrg    esac
1966692f60a7Smrg
196785ee4c00Smrg    # This variable tells wrapper scripts just to set variables rather
196885ee4c00Smrg    # than running their programs.
196985ee4c00Smrg    libtool_install_magic="$magic"
1970692f60a7Smrg
197185ee4c00Smrg    staticlibs=
197285ee4c00Smrg    future_libdirs=
197385ee4c00Smrg    current_libdirs=
197485ee4c00Smrg    for file in $files; do
1975692f60a7Smrg
197685ee4c00Smrg      # Do each installation.
197785ee4c00Smrg      case $file in
197885ee4c00Smrg      *.$libext)
197985ee4c00Smrg	# Do the static libraries later.
198085ee4c00Smrg	staticlibs="$staticlibs $file"
198185ee4c00Smrg	;;
198285ee4c00Smrg
198385ee4c00Smrg      *.la)
198485ee4c00Smrg	# Check to see that this really is a libtool archive.
198585ee4c00Smrg	func_lalib_unsafe_p "$file" \
198685ee4c00Smrg	  || func_fatal_help "\`$file' is not a valid libtool archive"
198785ee4c00Smrg
198885ee4c00Smrg	library_names=
198985ee4c00Smrg	old_library=
199085ee4c00Smrg	relink_command=
199185ee4c00Smrg	func_source "$file"
199285ee4c00Smrg
199385ee4c00Smrg	# Add the libdir to current_libdirs if it is the destination.
199485ee4c00Smrg	if test "X$destdir" = "X$libdir"; then
199585ee4c00Smrg	  case "$current_libdirs " in
199685ee4c00Smrg	  *" $libdir "*) ;;
199785ee4c00Smrg	  *) current_libdirs="$current_libdirs $libdir" ;;
1998692f60a7Smrg	  esac
199985ee4c00Smrg	else
200085ee4c00Smrg	  # Note the libdir as a future libdir.
200185ee4c00Smrg	  case "$future_libdirs " in
200285ee4c00Smrg	  *" $libdir "*) ;;
200385ee4c00Smrg	  *) future_libdirs="$future_libdirs $libdir" ;;
200485ee4c00Smrg	  esac
200585ee4c00Smrg	fi
2006692f60a7Smrg
200785ee4c00Smrg	func_dirname "$file" "/" ""
200885ee4c00Smrg	dir="$func_dirname_result"
200985ee4c00Smrg	dir="$dir$objdir"
201085ee4c00Smrg
201185ee4c00Smrg	if test -n "$relink_command"; then
201285ee4c00Smrg	  # Determine the prefix the user has applied to our future dir.
201385ee4c00Smrg	  inst_prefix_dir=`$ECHO "X$destdir" | $Xsed -e "s%$libdir\$%%"`
201485ee4c00Smrg
201585ee4c00Smrg	  # Don't allow the user to place us outside of our expected
201685ee4c00Smrg	  # location b/c this prevents finding dependent libraries that
201785ee4c00Smrg	  # are installed to the same prefix.
201885ee4c00Smrg	  # At present, this check doesn't affect windows .dll's that
201985ee4c00Smrg	  # are installed into $libdir/../bin (currently, that works fine)
202085ee4c00Smrg	  # but it's something to keep an eye on.
202185ee4c00Smrg	  test "$inst_prefix_dir" = "$destdir" && \
202285ee4c00Smrg	    func_fatal_error "error: cannot install \`$file' to a directory not ending in $libdir"
202385ee4c00Smrg
202485ee4c00Smrg	  if test -n "$inst_prefix_dir"; then
202585ee4c00Smrg	    # Stick the inst_prefix_dir data into the link command.
202685ee4c00Smrg	    relink_command=`$ECHO "X$relink_command" | $Xsed -e "s%@inst_prefix_dir@%-inst-prefix-dir $inst_prefix_dir%"`
202785ee4c00Smrg	  else
202885ee4c00Smrg	    relink_command=`$ECHO "X$relink_command" | $Xsed -e "s%@inst_prefix_dir@%%"`
202985ee4c00Smrg	  fi
203085ee4c00Smrg
203185ee4c00Smrg	  func_warning "relinking \`$file'"
203285ee4c00Smrg	  func_show_eval "$relink_command" \
203385ee4c00Smrg	    'func_fatal_error "error: relink \`$file'\'' with the above command before installing it"'
203485ee4c00Smrg	fi
203585ee4c00Smrg
203685ee4c00Smrg	# See the names of the shared library.
203785ee4c00Smrg	set dummy $library_names; shift
203885ee4c00Smrg	if test -n "$1"; then
203985ee4c00Smrg	  realname="$1"
204085ee4c00Smrg	  shift
204185ee4c00Smrg
204285ee4c00Smrg	  srcname="$realname"
204385ee4c00Smrg	  test -n "$relink_command" && srcname="$realname"T
204485ee4c00Smrg
204585ee4c00Smrg	  # Install the shared library and build the symlinks.
204685ee4c00Smrg	  func_show_eval "$install_prog $dir/$srcname $destdir/$realname" \
204785ee4c00Smrg	      'exit $?'
204885ee4c00Smrg	  tstripme="$stripme"
204985ee4c00Smrg	  case $host_os in
205085ee4c00Smrg	  cygwin* | mingw* | pw32* | cegcc*)
205185ee4c00Smrg	    case $realname in
205285ee4c00Smrg	    *.dll.a)
205385ee4c00Smrg	      tstripme=""
205485ee4c00Smrg	      ;;
205585ee4c00Smrg	    esac
2056692f60a7Smrg	    ;;
2057692f60a7Smrg	  esac
205885ee4c00Smrg	  if test -n "$tstripme" && test -n "$striplib"; then
205985ee4c00Smrg	    func_show_eval "$striplib $destdir/$realname" 'exit $?'
2060692f60a7Smrg	  fi
206185ee4c00Smrg
206285ee4c00Smrg	  if test "$#" -gt 0; then
206385ee4c00Smrg	    # Delete the old symlinks, and create new ones.
206485ee4c00Smrg	    # Try `ln -sf' first, because the `ln' binary might depend on
206585ee4c00Smrg	    # the symlink we replace!  Solaris /bin/ln does not understand -f,
206685ee4c00Smrg	    # so we also need to try rm && ln -s.
206785ee4c00Smrg	    for linkname
206885ee4c00Smrg	    do
206985ee4c00Smrg	      test "$linkname" != "$realname" \
207085ee4c00Smrg		&& func_show_eval "(cd $destdir && { $LN_S -f $realname $linkname || { $RM $linkname && $LN_S $realname $linkname; }; })"
2071692f60a7Smrg	    done
2072692f60a7Smrg	  fi
2073692f60a7Smrg
207485ee4c00Smrg	  # Do each command in the postinstall commands.
207585ee4c00Smrg	  lib="$destdir/$realname"
207685ee4c00Smrg	  func_execute_cmds "$postinstall_cmds" 'exit $?'
2077692f60a7Smrg	fi
2078692f60a7Smrg
207985ee4c00Smrg	# Install the pseudo-library for information purposes.
208085ee4c00Smrg	func_basename "$file"
208185ee4c00Smrg	name="$func_basename_result"
208285ee4c00Smrg	instname="$dir/$name"i
208385ee4c00Smrg	func_show_eval "$install_prog $instname $destdir/$name" 'exit $?'
2084692f60a7Smrg
208585ee4c00Smrg	# Maybe install the static library, too.
208685ee4c00Smrg	test -n "$old_library" && staticlibs="$staticlibs $dir/$old_library"
208785ee4c00Smrg	;;
2088692f60a7Smrg
208985ee4c00Smrg      *.lo)
209085ee4c00Smrg	# Install (i.e. copy) a libtool object.
2091692f60a7Smrg
209285ee4c00Smrg	# Figure out destination file name, if it wasn't already specified.
209385ee4c00Smrg	if test -n "$destname"; then
209485ee4c00Smrg	  destfile="$destdir/$destname"
209585ee4c00Smrg	else
209685ee4c00Smrg	  func_basename "$file"
209785ee4c00Smrg	  destfile="$func_basename_result"
209885ee4c00Smrg	  destfile="$destdir/$destfile"
2099692f60a7Smrg	fi
2100692f60a7Smrg
210185ee4c00Smrg	# Deduce the name of the destination old-style object file.
210285ee4c00Smrg	case $destfile in
210385ee4c00Smrg	*.lo)
210485ee4c00Smrg	  func_lo2o "$destfile"
210585ee4c00Smrg	  staticdest=$func_lo2o_result
210685ee4c00Smrg	  ;;
210785ee4c00Smrg	*.$objext)
210885ee4c00Smrg	  staticdest="$destfile"
210985ee4c00Smrg	  destfile=
211085ee4c00Smrg	  ;;
211185ee4c00Smrg	*)
211285ee4c00Smrg	  func_fatal_help "cannot copy a libtool object to \`$destfile'"
211385ee4c00Smrg	  ;;
211485ee4c00Smrg	esac
2115692f60a7Smrg
211685ee4c00Smrg	# Install the libtool object if requested.
211785ee4c00Smrg	test -n "$destfile" && \
211885ee4c00Smrg	  func_show_eval "$install_prog $file $destfile" 'exit $?'
2119692f60a7Smrg
212085ee4c00Smrg	# Install the old object if enabled.
212185ee4c00Smrg	if test "$build_old_libs" = yes; then
212285ee4c00Smrg	  # Deduce the name of the old-style object file.
212385ee4c00Smrg	  func_lo2o "$file"
212485ee4c00Smrg	  staticobj=$func_lo2o_result
212585ee4c00Smrg	  func_show_eval "$install_prog \$staticobj \$staticdest" 'exit $?'
2126692f60a7Smrg	fi
212785ee4c00Smrg	exit $EXIT_SUCCESS
212885ee4c00Smrg	;;
2129692f60a7Smrg
213085ee4c00Smrg      *)
213185ee4c00Smrg	# Figure out destination file name, if it wasn't already specified.
213285ee4c00Smrg	if test -n "$destname"; then
213385ee4c00Smrg	  destfile="$destdir/$destname"
213485ee4c00Smrg	else
213585ee4c00Smrg	  func_basename "$file"
213685ee4c00Smrg	  destfile="$func_basename_result"
213785ee4c00Smrg	  destfile="$destdir/$destfile"
213885ee4c00Smrg	fi
2139692f60a7Smrg
214085ee4c00Smrg	# If the file is missing, and there is a .exe on the end, strip it
214185ee4c00Smrg	# because it is most likely a libtool script we actually want to
214285ee4c00Smrg	# install
214385ee4c00Smrg	stripped_ext=""
214485ee4c00Smrg	case $file in
214585ee4c00Smrg	  *.exe)
214685ee4c00Smrg	    if test ! -f "$file"; then
214785ee4c00Smrg	      func_stripname '' '.exe' "$file"
214885ee4c00Smrg	      file=$func_stripname_result
214985ee4c00Smrg	      stripped_ext=".exe"
215085ee4c00Smrg	    fi
215185ee4c00Smrg	    ;;
215285ee4c00Smrg	esac
215385ee4c00Smrg
215485ee4c00Smrg	# Do a test to see if this is really a libtool program.
215585ee4c00Smrg	case $host in
215685ee4c00Smrg	*cygwin* | *mingw*)
215785ee4c00Smrg	    if func_ltwrapper_executable_p "$file"; then
215885ee4c00Smrg	      func_ltwrapper_scriptname "$file"
215985ee4c00Smrg	      wrapper=$func_ltwrapper_scriptname_result
216085ee4c00Smrg	    else
216185ee4c00Smrg	      func_stripname '' '.exe' "$file"
216285ee4c00Smrg	      wrapper=$func_stripname_result
216385ee4c00Smrg	    fi
216485ee4c00Smrg	    ;;
2165692f60a7Smrg	*)
216685ee4c00Smrg	    wrapper=$file
216785ee4c00Smrg	    ;;
216885ee4c00Smrg	esac
216985ee4c00Smrg	if func_ltwrapper_script_p "$wrapper"; then
217085ee4c00Smrg	  notinst_deplibs=
217185ee4c00Smrg	  relink_command=
217285ee4c00Smrg
217385ee4c00Smrg	  func_source "$wrapper"
217485ee4c00Smrg
217585ee4c00Smrg	  # Check the variables that should have been set.
217685ee4c00Smrg	  test -z "$generated_by_libtool_version" && \
217785ee4c00Smrg	    func_fatal_error "invalid libtool wrapper script \`$wrapper'"
217885ee4c00Smrg
217985ee4c00Smrg	  finalize=yes
218085ee4c00Smrg	  for lib in $notinst_deplibs; do
218185ee4c00Smrg	    # Check to see that each library is installed.
218285ee4c00Smrg	    libdir=
218385ee4c00Smrg	    if test -f "$lib"; then
218485ee4c00Smrg	      func_source "$lib"
218585ee4c00Smrg	    fi
218685ee4c00Smrg	    libfile="$libdir/"`$ECHO "X$lib" | $Xsed -e 's%^.*/%%g'` ### testsuite: skip nested quoting test
218785ee4c00Smrg	    if test -n "$libdir" && test ! -f "$libfile"; then
218885ee4c00Smrg	      func_warning "\`$lib' has not been installed in \`$libdir'"
218985ee4c00Smrg	      finalize=no
219085ee4c00Smrg	    fi
219185ee4c00Smrg	  done
219285ee4c00Smrg
219385ee4c00Smrg	  relink_command=
219485ee4c00Smrg	  func_source "$wrapper"
219585ee4c00Smrg
219685ee4c00Smrg	  outputname=
219785ee4c00Smrg	  if test "$fast_install" = no && test -n "$relink_command"; then
219885ee4c00Smrg	    $opt_dry_run || {
219985ee4c00Smrg	      if test "$finalize" = yes; then
220085ee4c00Smrg	        tmpdir=`func_mktempdir`
220185ee4c00Smrg		func_basename "$file$stripped_ext"
220285ee4c00Smrg		file="$func_basename_result"
220385ee4c00Smrg	        outputname="$tmpdir/$file"
220485ee4c00Smrg	        # Replace the output file specification.
220585ee4c00Smrg	        relink_command=`$ECHO "X$relink_command" | $Xsed -e 's%@OUTPUT@%'"$outputname"'%g'`
220685ee4c00Smrg
220785ee4c00Smrg	        $opt_silent || {
220885ee4c00Smrg	          func_quote_for_expand "$relink_command"
220985ee4c00Smrg		  eval "func_echo $func_quote_for_expand_result"
221085ee4c00Smrg	        }
221185ee4c00Smrg	        if eval "$relink_command"; then :
221285ee4c00Smrg	          else
221385ee4c00Smrg		  func_error "error: relink \`$file' with the above command before installing it"
221485ee4c00Smrg		  $opt_dry_run || ${RM}r "$tmpdir"
221585ee4c00Smrg		  continue
221685ee4c00Smrg	        fi
221785ee4c00Smrg	        file="$outputname"
221885ee4c00Smrg	      else
221985ee4c00Smrg	        func_warning "cannot relink \`$file'"
222085ee4c00Smrg	      fi
222185ee4c00Smrg	    }
222285ee4c00Smrg	  else
222385ee4c00Smrg	    # Install the binary that we compiled earlier.
222485ee4c00Smrg	    file=`$ECHO "X$file$stripped_ext" | $Xsed -e "s%\([^/]*\)$%$objdir/\1%"`
2225692f60a7Smrg	  fi
222685ee4c00Smrg	fi
222785ee4c00Smrg
222885ee4c00Smrg	# remove .exe since cygwin /usr/bin/install will append another
222985ee4c00Smrg	# one anyway
223085ee4c00Smrg	case $install_prog,$host in
223185ee4c00Smrg	*/usr/bin/install*,*cygwin*)
223285ee4c00Smrg	  case $file:$destfile in
223385ee4c00Smrg	  *.exe:*.exe)
223485ee4c00Smrg	    # this is ok
223585ee4c00Smrg	    ;;
223685ee4c00Smrg	  *.exe:*)
223785ee4c00Smrg	    destfile=$destfile.exe
223885ee4c00Smrg	    ;;
223985ee4c00Smrg	  *:*.exe)
224085ee4c00Smrg	    func_stripname '' '.exe' "$destfile"
224185ee4c00Smrg	    destfile=$func_stripname_result
224285ee4c00Smrg	    ;;
224385ee4c00Smrg	  esac
2244692f60a7Smrg	  ;;
2245692f60a7Smrg	esac
224685ee4c00Smrg	func_show_eval "$install_prog\$stripme \$file \$destfile" 'exit $?'
224785ee4c00Smrg	$opt_dry_run || if test -n "$outputname"; then
224885ee4c00Smrg	  ${RM}r "$tmpdir"
224985ee4c00Smrg	fi
225085ee4c00Smrg	;;
225185ee4c00Smrg      esac
225285ee4c00Smrg    done
2253692f60a7Smrg
225485ee4c00Smrg    for file in $staticlibs; do
225585ee4c00Smrg      func_basename "$file"
225685ee4c00Smrg      name="$func_basename_result"
225785ee4c00Smrg
225885ee4c00Smrg      # Set up the ranlib parameters.
225985ee4c00Smrg      oldlib="$destdir/$name"
226085ee4c00Smrg
226185ee4c00Smrg      func_show_eval "$install_prog \$file \$oldlib" 'exit $?'
226285ee4c00Smrg
226385ee4c00Smrg      if test -n "$stripme" && test -n "$old_striplib"; then
226485ee4c00Smrg	func_show_eval "$old_striplib $oldlib" 'exit $?'
226585ee4c00Smrg      fi
226685ee4c00Smrg
226785ee4c00Smrg      # Do each command in the postinstall commands.
226885ee4c00Smrg      func_execute_cmds "$old_postinstall_cmds" 'exit $?'
226985ee4c00Smrg    done
227085ee4c00Smrg
227185ee4c00Smrg    test -n "$future_libdirs" && \
227285ee4c00Smrg      func_warning "remember to run \`$progname --finish$future_libdirs'"
227385ee4c00Smrg
227485ee4c00Smrg    if test -n "$current_libdirs"; then
227585ee4c00Smrg      # Maybe just do a dry run.
227685ee4c00Smrg      $opt_dry_run && current_libdirs=" -n$current_libdirs"
227785ee4c00Smrg      exec_cmd='$SHELL $progpath $preserve_args --finish$current_libdirs'
227885ee4c00Smrg    else
227985ee4c00Smrg      exit $EXIT_SUCCESS
228085ee4c00Smrg    fi
228185ee4c00Smrg}
228285ee4c00Smrg
228385ee4c00Smrgtest "$mode" = install && func_mode_install ${1+"$@"}
228485ee4c00Smrg
228585ee4c00Smrg
228685ee4c00Smrg# func_generate_dlsyms outputname originator pic_p
228785ee4c00Smrg# Extract symbols from dlprefiles and create ${outputname}S.o with
228885ee4c00Smrg# a dlpreopen symbol table.
228985ee4c00Smrgfunc_generate_dlsyms ()
229085ee4c00Smrg{
229185ee4c00Smrg    $opt_debug
229285ee4c00Smrg    my_outputname="$1"
229385ee4c00Smrg    my_originator="$2"
229485ee4c00Smrg    my_pic_p="${3-no}"
229585ee4c00Smrg    my_prefix=`$ECHO "$my_originator" | sed 's%[^a-zA-Z0-9]%_%g'`
229685ee4c00Smrg    my_dlsyms=
229785ee4c00Smrg
229885ee4c00Smrg    if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then
229985ee4c00Smrg      if test -n "$NM" && test -n "$global_symbol_pipe"; then
230085ee4c00Smrg	my_dlsyms="${my_outputname}S.c"
230185ee4c00Smrg      else
230285ee4c00Smrg	func_error "not configured to extract global symbols from dlpreopened files"
230385ee4c00Smrg      fi
230485ee4c00Smrg    fi
230585ee4c00Smrg
230685ee4c00Smrg    if test -n "$my_dlsyms"; then
230785ee4c00Smrg      case $my_dlsyms in
230885ee4c00Smrg      "") ;;
230985ee4c00Smrg      *.c)
231085ee4c00Smrg	# Discover the nlist of each of the dlfiles.
231185ee4c00Smrg	nlist="$output_objdir/${my_outputname}.nm"
231285ee4c00Smrg
231385ee4c00Smrg	func_show_eval "$RM $nlist ${nlist}S ${nlist}T"
231485ee4c00Smrg
231585ee4c00Smrg	# Parse the name list into a source file.
231685ee4c00Smrg	func_verbose "creating $output_objdir/$my_dlsyms"
231785ee4c00Smrg
231885ee4c00Smrg	$opt_dry_run || $ECHO > "$output_objdir/$my_dlsyms" "\
231985ee4c00Smrg/* $my_dlsyms - symbol resolution table for \`$my_outputname' dlsym emulation. */
232085ee4c00Smrg/* Generated by $PROGRAM (GNU $PACKAGE$TIMESTAMP) $VERSION */
232185ee4c00Smrg
232285ee4c00Smrg#ifdef __cplusplus
232385ee4c00Smrgextern \"C\" {
232485ee4c00Smrg#endif
232585ee4c00Smrg
232685ee4c00Smrg/* External symbol declarations for the compiler. */\
232785ee4c00Smrg"
232885ee4c00Smrg
232985ee4c00Smrg	if test "$dlself" = yes; then
233085ee4c00Smrg	  func_verbose "generating symbol list for \`$output'"
233185ee4c00Smrg
233285ee4c00Smrg	  $opt_dry_run || echo ': @PROGRAM@ ' > "$nlist"
233385ee4c00Smrg
233485ee4c00Smrg	  # Add our own program objects to the symbol list.
233585ee4c00Smrg	  progfiles=`$ECHO "X$objs$old_deplibs" | $SP2NL | $Xsed -e "$lo2o" | $NL2SP`
233685ee4c00Smrg	  for progfile in $progfiles; do
233785ee4c00Smrg	    func_verbose "extracting global C symbols from \`$progfile'"
233885ee4c00Smrg	    $opt_dry_run || eval "$NM $progfile | $global_symbol_pipe >> '$nlist'"
233985ee4c00Smrg	  done
234085ee4c00Smrg
234185ee4c00Smrg	  if test -n "$exclude_expsyms"; then
234285ee4c00Smrg	    $opt_dry_run || {
234385ee4c00Smrg	      eval '$EGREP -v " ($exclude_expsyms)$" "$nlist" > "$nlist"T'
234485ee4c00Smrg	      eval '$MV "$nlist"T "$nlist"'
234585ee4c00Smrg	    }
2346692f60a7Smrg	  fi
234785ee4c00Smrg
234885ee4c00Smrg	  if test -n "$export_symbols_regex"; then
234985ee4c00Smrg	    $opt_dry_run || {
235085ee4c00Smrg	      eval '$EGREP -e "$export_symbols_regex" "$nlist" > "$nlist"T'
235185ee4c00Smrg	      eval '$MV "$nlist"T "$nlist"'
235285ee4c00Smrg	    }
235385ee4c00Smrg	  fi
235485ee4c00Smrg
235585ee4c00Smrg	  # Prepare the list of exported symbols
235685ee4c00Smrg	  if test -z "$export_symbols"; then
235785ee4c00Smrg	    export_symbols="$output_objdir/$outputname.exp"
235885ee4c00Smrg	    $opt_dry_run || {
235985ee4c00Smrg	      $RM $export_symbols
236085ee4c00Smrg	      eval "${SED} -n -e '/^: @PROGRAM@ $/d' -e 's/^.* \(.*\)$/\1/p' "'< "$nlist" > "$export_symbols"'
236185ee4c00Smrg	      case $host in
236285ee4c00Smrg	      *cygwin* | *mingw* | *cegcc* )
236385ee4c00Smrg                eval "echo EXPORTS "'> "$output_objdir/$outputname.def"'
236485ee4c00Smrg                eval 'cat "$export_symbols" >> "$output_objdir/$outputname.def"'
236585ee4c00Smrg	        ;;
236685ee4c00Smrg	      esac
236785ee4c00Smrg	    }
2368692f60a7Smrg	  else
236985ee4c00Smrg	    $opt_dry_run || {
237085ee4c00Smrg	      eval "${SED} -e 's/\([].[*^$]\)/\\\\\1/g' -e 's/^/ /' -e 's/$/$/'"' < "$export_symbols" > "$output_objdir/$outputname.exp"'
237185ee4c00Smrg	      eval '$GREP -f "$output_objdir/$outputname.exp" < "$nlist" > "$nlist"T'
237285ee4c00Smrg	      eval '$MV "$nlist"T "$nlist"'
237385ee4c00Smrg	      case $host in
237485ee4c00Smrg	        *cygwin | *mingw* | *cegcc* )
237585ee4c00Smrg	          eval "echo EXPORTS "'> "$output_objdir/$outputname.def"'
237685ee4c00Smrg	          eval 'cat "$nlist" >> "$output_objdir/$outputname.def"'
237785ee4c00Smrg	          ;;
237885ee4c00Smrg	      esac
237985ee4c00Smrg	    }
2380692f60a7Smrg	  fi
238185ee4c00Smrg	fi
2382692f60a7Smrg
238385ee4c00Smrg	for dlprefile in $dlprefiles; do
238485ee4c00Smrg	  func_verbose "extracting global C symbols from \`$dlprefile'"
238585ee4c00Smrg	  func_basename "$dlprefile"
238685ee4c00Smrg	  name="$func_basename_result"
238785ee4c00Smrg	  $opt_dry_run || {
238885ee4c00Smrg	    eval '$ECHO ": $name " >> "$nlist"'
238985ee4c00Smrg	    eval "$NM $dlprefile 2>/dev/null | $global_symbol_pipe >> '$nlist'"
239085ee4c00Smrg	  }
239185ee4c00Smrg	done
239285ee4c00Smrg
239385ee4c00Smrg	$opt_dry_run || {
239485ee4c00Smrg	  # Make sure we have at least an empty file.
239585ee4c00Smrg	  test -f "$nlist" || : > "$nlist"
239685ee4c00Smrg
239785ee4c00Smrg	  if test -n "$exclude_expsyms"; then
239885ee4c00Smrg	    $EGREP -v " ($exclude_expsyms)$" "$nlist" > "$nlist"T
239985ee4c00Smrg	    $MV "$nlist"T "$nlist"
2400692f60a7Smrg	  fi
240185ee4c00Smrg
240285ee4c00Smrg	  # Try sorting and uniquifying the output.
240385ee4c00Smrg	  if $GREP -v "^: " < "$nlist" |
240485ee4c00Smrg	      if sort -k 3 </dev/null >/dev/null 2>&1; then
240585ee4c00Smrg		sort -k 3
240685ee4c00Smrg	      else
240785ee4c00Smrg		sort +2
240885ee4c00Smrg	      fi |
240985ee4c00Smrg	      uniq > "$nlist"S; then
241085ee4c00Smrg	    :
2411692f60a7Smrg	  else
241285ee4c00Smrg	    $GREP -v "^: " < "$nlist" > "$nlist"S
2413692f60a7Smrg	  fi
2414692f60a7Smrg
241585ee4c00Smrg	  if test -f "$nlist"S; then
241685ee4c00Smrg	    eval "$global_symbol_to_cdecl"' < "$nlist"S >> "$output_objdir/$my_dlsyms"'
2417692f60a7Smrg	  else
241885ee4c00Smrg	    $ECHO '/* NONE */' >> "$output_objdir/$my_dlsyms"
2419692f60a7Smrg	  fi
2420692f60a7Smrg
242185ee4c00Smrg	  $ECHO >> "$output_objdir/$my_dlsyms" "\
2422692f60a7Smrg
242385ee4c00Smrg/* The mapping between symbol names and symbols.  */
242485ee4c00Smrgtypedef struct {
242585ee4c00Smrg  const char *name;
242685ee4c00Smrg  void *address;
242785ee4c00Smrg} lt_dlsymlist;
242885ee4c00Smrg"
242985ee4c00Smrg	  case $host in
243085ee4c00Smrg	  *cygwin* | *mingw* | *cegcc* )
243185ee4c00Smrg	    $ECHO >> "$output_objdir/$my_dlsyms" "\
243285ee4c00Smrg/* DATA imports from DLLs on WIN32 con't be const, because
243385ee4c00Smrg   runtime relocations are performed -- see ld's documentation
243485ee4c00Smrg   on pseudo-relocs.  */"
243585ee4c00Smrg	    lt_dlsym_const= ;;
243685ee4c00Smrg	  *osf5*)
243785ee4c00Smrg	    echo >> "$output_objdir/$my_dlsyms" "\
243885ee4c00Smrg/* This system does not cope well with relocations in const data */"
243985ee4c00Smrg	    lt_dlsym_const= ;;
244085ee4c00Smrg	  *)
244185ee4c00Smrg	    lt_dlsym_const=const ;;
244285ee4c00Smrg	  esac
2443692f60a7Smrg
244485ee4c00Smrg	  $ECHO >> "$output_objdir/$my_dlsyms" "\
244585ee4c00Smrgextern $lt_dlsym_const lt_dlsymlist
244685ee4c00Smrglt_${my_prefix}_LTX_preloaded_symbols[];
244785ee4c00Smrg$lt_dlsym_const lt_dlsymlist
244885ee4c00Smrglt_${my_prefix}_LTX_preloaded_symbols[] =
244985ee4c00Smrg{\
245085ee4c00Smrg  { \"$my_originator\", (void *) 0 },"
2451692f60a7Smrg
245285ee4c00Smrg	  case $need_lib_prefix in
245385ee4c00Smrg	  no)
245485ee4c00Smrg	    eval "$global_symbol_to_c_name_address" < "$nlist" >> "$output_objdir/$my_dlsyms"
245585ee4c00Smrg	    ;;
245685ee4c00Smrg	  *)
245785ee4c00Smrg	    eval "$global_symbol_to_c_name_address_lib_prefix" < "$nlist" >> "$output_objdir/$my_dlsyms"
245885ee4c00Smrg	    ;;
245985ee4c00Smrg	  esac
246085ee4c00Smrg	  $ECHO >> "$output_objdir/$my_dlsyms" "\
246185ee4c00Smrg  {0, (void *) 0}
246285ee4c00Smrg};
2463692f60a7Smrg
246485ee4c00Smrg/* This works around a problem in FreeBSD linker */
246585ee4c00Smrg#ifdef FREEBSD_WORKAROUND
246685ee4c00Smrgstatic const void *lt_preloaded_setup() {
246785ee4c00Smrg  return lt_${my_prefix}_LTX_preloaded_symbols;
246885ee4c00Smrg}
246985ee4c00Smrg#endif
247085ee4c00Smrg
247185ee4c00Smrg#ifdef __cplusplus
247285ee4c00Smrg}
247385ee4c00Smrg#endif\
247485ee4c00Smrg"
247585ee4c00Smrg	} # !$opt_dry_run
247685ee4c00Smrg
247785ee4c00Smrg	pic_flag_for_symtable=
247885ee4c00Smrg	case "$compile_command " in
247985ee4c00Smrg	*" -static "*) ;;
248085ee4c00Smrg	*)
248185ee4c00Smrg	  case $host in
248285ee4c00Smrg	  # compiling the symbol table file with pic_flag works around
248385ee4c00Smrg	  # a FreeBSD bug that causes programs to crash when -lm is
248485ee4c00Smrg	  # linked before any other PIC object.  But we must not use
248585ee4c00Smrg	  # pic_flag when linking with -static.  The problem exists in
248685ee4c00Smrg	  # FreeBSD 2.2.6 and is fixed in FreeBSD 3.1.
248785ee4c00Smrg	  *-*-freebsd2*|*-*-freebsd3.0*|*-*-freebsdelf3.0*)
248885ee4c00Smrg	    pic_flag_for_symtable=" $pic_flag -DFREEBSD_WORKAROUND" ;;
248985ee4c00Smrg	  *-*-hpux*)
249085ee4c00Smrg	    pic_flag_for_symtable=" $pic_flag"  ;;
249185ee4c00Smrg	  *)
249285ee4c00Smrg	    if test "X$my_pic_p" != Xno; then
249385ee4c00Smrg	      pic_flag_for_symtable=" $pic_flag"
2494692f60a7Smrg	    fi
249585ee4c00Smrg	    ;;
249685ee4c00Smrg	  esac
249785ee4c00Smrg	  ;;
249885ee4c00Smrg	esac
249985ee4c00Smrg	symtab_cflags=
250085ee4c00Smrg	for arg in $LTCFLAGS; do
250185ee4c00Smrg	  case $arg in
250285ee4c00Smrg	  -pie | -fpie | -fPIE) ;;
250385ee4c00Smrg	  *) symtab_cflags="$symtab_cflags $arg" ;;
250485ee4c00Smrg	  esac
250585ee4c00Smrg	done
2506692f60a7Smrg
250785ee4c00Smrg	# Now compile the dynamic symbol file.
250885ee4c00Smrg	func_show_eval '(cd $output_objdir && $LTCC$symtab_cflags -c$no_builtin_flag$pic_flag_for_symtable "$my_dlsyms")' 'exit $?'
2509692f60a7Smrg
251085ee4c00Smrg	# Clean up the generated files.
251185ee4c00Smrg	func_show_eval '$RM "$output_objdir/$my_dlsyms" "$nlist" "${nlist}S" "${nlist}T"'
2512692f60a7Smrg
251385ee4c00Smrg	# Transform the symbol file into the correct name.
251485ee4c00Smrg	symfileobj="$output_objdir/${my_outputname}S.$objext"
251585ee4c00Smrg	case $host in
251685ee4c00Smrg	*cygwin* | *mingw* | *cegcc* )
251785ee4c00Smrg	  if test -f "$output_objdir/$my_outputname.def"; then
251885ee4c00Smrg	    compile_command=`$ECHO "X$compile_command" | $Xsed -e "s%@SYMFILE@%$output_objdir/$my_outputname.def $symfileobj%"`
251985ee4c00Smrg	    finalize_command=`$ECHO "X$finalize_command" | $Xsed -e "s%@SYMFILE@%$output_objdir/$my_outputname.def $symfileobj%"`
252085ee4c00Smrg	  else
252185ee4c00Smrg	    compile_command=`$ECHO "X$compile_command" | $Xsed -e "s%@SYMFILE@%$symfileobj%"`
252285ee4c00Smrg	    finalize_command=`$ECHO "X$finalize_command" | $Xsed -e "s%@SYMFILE@%$symfileobj%"`
2523692f60a7Smrg	  fi
252485ee4c00Smrg	  ;;
252585ee4c00Smrg	*)
252685ee4c00Smrg	  compile_command=`$ECHO "X$compile_command" | $Xsed -e "s%@SYMFILE@%$symfileobj%"`
252785ee4c00Smrg	  finalize_command=`$ECHO "X$finalize_command" | $Xsed -e "s%@SYMFILE@%$symfileobj%"`
252885ee4c00Smrg	  ;;
252985ee4c00Smrg	esac
253085ee4c00Smrg	;;
253185ee4c00Smrg      *)
253285ee4c00Smrg	func_fatal_error "unknown suffix for \`$my_dlsyms'"
253385ee4c00Smrg	;;
253485ee4c00Smrg      esac
253585ee4c00Smrg    else
253685ee4c00Smrg      # We keep going just in case the user didn't refer to
253785ee4c00Smrg      # lt_preloaded_symbols.  The linker will fail if global_symbol_pipe
253885ee4c00Smrg      # really was required.
2539692f60a7Smrg
254085ee4c00Smrg      # Nullify the symbol file.
254185ee4c00Smrg      compile_command=`$ECHO "X$compile_command" | $Xsed -e "s% @SYMFILE@%%"`
254285ee4c00Smrg      finalize_command=`$ECHO "X$finalize_command" | $Xsed -e "s% @SYMFILE@%%"`
254385ee4c00Smrg    fi
254485ee4c00Smrg}
2545692f60a7Smrg
254685ee4c00Smrg# func_win32_libid arg
254785ee4c00Smrg# return the library type of file 'arg'
254885ee4c00Smrg#
254985ee4c00Smrg# Need a lot of goo to handle *both* DLLs and import libs
255085ee4c00Smrg# Has to be a shell function in order to 'eat' the argument
255185ee4c00Smrg# that is supplied when $file_magic_command is called.
255285ee4c00Smrgfunc_win32_libid ()
255385ee4c00Smrg{
255485ee4c00Smrg  $opt_debug
255585ee4c00Smrg  win32_libid_type="unknown"
255685ee4c00Smrg  win32_fileres=`file -L $1 2>/dev/null`
255785ee4c00Smrg  case $win32_fileres in
255885ee4c00Smrg  *ar\ archive\ import\ library*) # definitely import
255985ee4c00Smrg    win32_libid_type="x86 archive import"
256085ee4c00Smrg    ;;
256185ee4c00Smrg  *ar\ archive*) # could be an import, or static
256285ee4c00Smrg    if eval $OBJDUMP -f $1 | $SED -e '10q' 2>/dev/null |
256385ee4c00Smrg       $EGREP 'file format pe-i386(.*architecture: i386)?' >/dev/null ; then
256485ee4c00Smrg      win32_nmres=`eval $NM -f posix -A $1 |
256585ee4c00Smrg	$SED -n -e '
256685ee4c00Smrg	    1,100{
256785ee4c00Smrg		/ I /{
256885ee4c00Smrg		    s,.*,import,
256985ee4c00Smrg		    p
257085ee4c00Smrg		    q
257185ee4c00Smrg		}
257285ee4c00Smrg	    }'`
257385ee4c00Smrg      case $win32_nmres in
257485ee4c00Smrg      import*)  win32_libid_type="x86 archive import";;
257585ee4c00Smrg      *)        win32_libid_type="x86 archive static";;
257685ee4c00Smrg      esac
257785ee4c00Smrg    fi
257885ee4c00Smrg    ;;
257985ee4c00Smrg  *DLL*)
258085ee4c00Smrg    win32_libid_type="x86 DLL"
258185ee4c00Smrg    ;;
258285ee4c00Smrg  *executable*) # but shell scripts are "executable" too...
258385ee4c00Smrg    case $win32_fileres in
258485ee4c00Smrg    *MS\ Windows\ PE\ Intel*)
258585ee4c00Smrg      win32_libid_type="x86 DLL"
258685ee4c00Smrg      ;;
258785ee4c00Smrg    esac
258885ee4c00Smrg    ;;
258985ee4c00Smrg  esac
259085ee4c00Smrg  $ECHO "$win32_libid_type"
259185ee4c00Smrg}
2592692f60a7Smrg
2593692f60a7Smrg
2594692f60a7Smrg
259585ee4c00Smrg# func_extract_an_archive dir oldlib
259685ee4c00Smrgfunc_extract_an_archive ()
259785ee4c00Smrg{
259885ee4c00Smrg    $opt_debug
259985ee4c00Smrg    f_ex_an_ar_dir="$1"; shift
260085ee4c00Smrg    f_ex_an_ar_oldlib="$1"
260185ee4c00Smrg    func_show_eval "(cd \$f_ex_an_ar_dir && $AR x \"\$f_ex_an_ar_oldlib\")" 'exit $?'
260285ee4c00Smrg    if ($AR t "$f_ex_an_ar_oldlib" | sort | sort -uc >/dev/null 2>&1); then
260385ee4c00Smrg     :
260485ee4c00Smrg    else
260585ee4c00Smrg      func_fatal_error "object name conflicts in archive: $f_ex_an_ar_dir/$f_ex_an_ar_oldlib"
260685ee4c00Smrg    fi
260785ee4c00Smrg}
2608692f60a7Smrg
2609692f60a7Smrg
261085ee4c00Smrg# func_extract_archives gentop oldlib ...
261185ee4c00Smrgfunc_extract_archives ()
261285ee4c00Smrg{
261385ee4c00Smrg    $opt_debug
261485ee4c00Smrg    my_gentop="$1"; shift
261585ee4c00Smrg    my_oldlibs=${1+"$@"}
261685ee4c00Smrg    my_oldobjs=""
261785ee4c00Smrg    my_xlib=""
261885ee4c00Smrg    my_xabs=""
261985ee4c00Smrg    my_xdir=""
2620692f60a7Smrg
262185ee4c00Smrg    for my_xlib in $my_oldlibs; do
262285ee4c00Smrg      # Extract the objects.
262385ee4c00Smrg      case $my_xlib in
262485ee4c00Smrg	[\\/]* | [A-Za-z]:[\\/]*) my_xabs="$my_xlib" ;;
262585ee4c00Smrg	*) my_xabs=`pwd`"/$my_xlib" ;;
262685ee4c00Smrg      esac
262785ee4c00Smrg      func_basename "$my_xlib"
262885ee4c00Smrg      my_xlib="$func_basename_result"
262985ee4c00Smrg      my_xlib_u=$my_xlib
263085ee4c00Smrg      while :; do
263185ee4c00Smrg        case " $extracted_archives " in
263285ee4c00Smrg	*" $my_xlib_u "*)
263385ee4c00Smrg	  func_arith $extracted_serial + 1
263485ee4c00Smrg	  extracted_serial=$func_arith_result
263585ee4c00Smrg	  my_xlib_u=lt$extracted_serial-$my_xlib ;;
263685ee4c00Smrg	*) break ;;
263785ee4c00Smrg	esac
263885ee4c00Smrg      done
263985ee4c00Smrg      extracted_archives="$extracted_archives $my_xlib_u"
264085ee4c00Smrg      my_xdir="$my_gentop/$my_xlib_u"
2641692f60a7Smrg
264285ee4c00Smrg      func_mkdir_p "$my_xdir"
2643692f60a7Smrg
264485ee4c00Smrg      case $host in
264585ee4c00Smrg      *-darwin*)
264685ee4c00Smrg	func_verbose "Extracting $my_xabs"
264785ee4c00Smrg	# Do not bother doing anything if just a dry run
264885ee4c00Smrg	$opt_dry_run || {
264985ee4c00Smrg	  darwin_orig_dir=`pwd`
265085ee4c00Smrg	  cd $my_xdir || exit $?
265185ee4c00Smrg	  darwin_archive=$my_xabs
265285ee4c00Smrg	  darwin_curdir=`pwd`
265385ee4c00Smrg	  darwin_base_archive=`basename "$darwin_archive"`
265485ee4c00Smrg	  darwin_arches=`$LIPO -info "$darwin_archive" 2>/dev/null | $GREP Architectures 2>/dev/null || true`
265585ee4c00Smrg	  if test -n "$darwin_arches"; then
265685ee4c00Smrg	    darwin_arches=`$ECHO "$darwin_arches" | $SED -e 's/.*are://'`
265785ee4c00Smrg	    darwin_arch=
265885ee4c00Smrg	    func_verbose "$darwin_base_archive has multiple architectures $darwin_arches"
265985ee4c00Smrg	    for darwin_arch in  $darwin_arches ; do
266085ee4c00Smrg	      func_mkdir_p "unfat-$$/${darwin_base_archive}-${darwin_arch}"
266185ee4c00Smrg	      $LIPO -thin $darwin_arch -output "unfat-$$/${darwin_base_archive}-${darwin_arch}/${darwin_base_archive}" "${darwin_archive}"
266285ee4c00Smrg	      cd "unfat-$$/${darwin_base_archive}-${darwin_arch}"
266385ee4c00Smrg	      func_extract_an_archive "`pwd`" "${darwin_base_archive}"
266485ee4c00Smrg	      cd "$darwin_curdir"
266585ee4c00Smrg	      $RM "unfat-$$/${darwin_base_archive}-${darwin_arch}/${darwin_base_archive}"
266685ee4c00Smrg	    done # $darwin_arches
266785ee4c00Smrg            ## Okay now we've a bunch of thin objects, gotta fatten them up :)
266885ee4c00Smrg	    darwin_filelist=`find unfat-$$ -type f -name \*.o -print -o -name \*.lo -print | $SED -e "$basename" | sort -u`
266985ee4c00Smrg	    darwin_file=
267085ee4c00Smrg	    darwin_files=
267185ee4c00Smrg	    for darwin_file in $darwin_filelist; do
267285ee4c00Smrg	      darwin_files=`find unfat-$$ -name $darwin_file -print | $NL2SP`
267385ee4c00Smrg	      $LIPO -create -output "$darwin_file" $darwin_files
267485ee4c00Smrg	    done # $darwin_filelist
267585ee4c00Smrg	    $RM -rf unfat-$$
267685ee4c00Smrg	    cd "$darwin_orig_dir"
2677692f60a7Smrg	  else
267885ee4c00Smrg	    cd $darwin_orig_dir
267985ee4c00Smrg	    func_extract_an_archive "$my_xdir" "$my_xabs"
268085ee4c00Smrg	  fi # $darwin_arches
268185ee4c00Smrg	} # !$opt_dry_run
268285ee4c00Smrg	;;
268385ee4c00Smrg      *)
268485ee4c00Smrg        func_extract_an_archive "$my_xdir" "$my_xabs"
268585ee4c00Smrg	;;
268685ee4c00Smrg      esac
268785ee4c00Smrg      my_oldobjs="$my_oldobjs "`find $my_xdir -name \*.$objext -print -o -name \*.lo -print | $NL2SP`
268885ee4c00Smrg    done
2689692f60a7Smrg
269085ee4c00Smrg    func_extract_archives_result="$my_oldobjs"
269185ee4c00Smrg}
2692692f60a7Smrg
2693692f60a7Smrg
2694692f60a7Smrg
269585ee4c00Smrg# func_emit_wrapper_part1 [arg=no]
269685ee4c00Smrg#
269785ee4c00Smrg# Emit the first part of a libtool wrapper script on stdout.
269885ee4c00Smrg# For more information, see the description associated with
269985ee4c00Smrg# func_emit_wrapper(), below.
270085ee4c00Smrgfunc_emit_wrapper_part1 ()
270185ee4c00Smrg{
270285ee4c00Smrg	func_emit_wrapper_part1_arg1=no
270385ee4c00Smrg	if test -n "$1" ; then
270485ee4c00Smrg	  func_emit_wrapper_part1_arg1=$1
2705692f60a7Smrg	fi
2706692f60a7Smrg
270785ee4c00Smrg	$ECHO "\
270885ee4c00Smrg#! $SHELL
2709692f60a7Smrg
271085ee4c00Smrg# $output - temporary wrapper script for $objdir/$outputname
271185ee4c00Smrg# Generated by $PROGRAM (GNU $PACKAGE$TIMESTAMP) $VERSION
271285ee4c00Smrg#
271385ee4c00Smrg# The $output program cannot be directly executed until all the libtool
271485ee4c00Smrg# libraries that it depends on are installed.
271585ee4c00Smrg#
271685ee4c00Smrg# This wrapper script should never be moved out of the build directory.
271785ee4c00Smrg# If it is, it will not operate correctly.
2718692f60a7Smrg
271985ee4c00Smrg# Sed substitution that helps us do robust quoting.  It backslashifies
272085ee4c00Smrg# metacharacters that are still active within double-quoted strings.
272185ee4c00SmrgXsed='${SED} -e 1s/^X//'
272285ee4c00Smrgsed_quote_subst='$sed_quote_subst'
2723692f60a7Smrg
272485ee4c00Smrg# Be Bourne compatible
272585ee4c00Smrgif test -n \"\${ZSH_VERSION+set}\" && (emulate sh) >/dev/null 2>&1; then
272685ee4c00Smrg  emulate sh
272785ee4c00Smrg  NULLCMD=:
272885ee4c00Smrg  # Zsh 3.x and 4.x performs word splitting on \${1+\"\$@\"}, which
272985ee4c00Smrg  # is contrary to our usage.  Disable this feature.
273085ee4c00Smrg  alias -g '\${1+\"\$@\"}'='\"\$@\"'
273185ee4c00Smrg  setopt NO_GLOB_SUBST
273285ee4c00Smrgelse
273385ee4c00Smrg  case \`(set -o) 2>/dev/null\` in *posix*) set -o posix;; esac
273485ee4c00Smrgfi
273585ee4c00SmrgBIN_SH=xpg4; export BIN_SH # for Tru64
273685ee4c00SmrgDUALCASE=1; export DUALCASE # for MKS sh
2737692f60a7Smrg
273885ee4c00Smrg# The HP-UX ksh and POSIX shell print the target directory to stdout
273985ee4c00Smrg# if CDPATH is set.
274085ee4c00Smrg(unset CDPATH) >/dev/null 2>&1 && unset CDPATH
2741692f60a7Smrg
274285ee4c00Smrgrelink_command=\"$relink_command\"
2743692f60a7Smrg
274485ee4c00Smrg# This environment variable determines our operation mode.
274585ee4c00Smrgif test \"\$libtool_install_magic\" = \"$magic\"; then
274685ee4c00Smrg  # install mode needs the following variables:
274785ee4c00Smrg  generated_by_libtool_version='$macro_version'
274885ee4c00Smrg  notinst_deplibs='$notinst_deplibs'
274985ee4c00Smrgelse
275085ee4c00Smrg  # When we are sourced in execute mode, \$file and \$ECHO are already set.
275185ee4c00Smrg  if test \"\$libtool_execute_magic\" != \"$magic\"; then
275285ee4c00Smrg    ECHO=\"$qecho\"
275385ee4c00Smrg    file=\"\$0\"
275485ee4c00Smrg    # Make sure echo works.
275585ee4c00Smrg    if test \"X\$1\" = X--no-reexec; then
275685ee4c00Smrg      # Discard the --no-reexec flag, and continue.
275785ee4c00Smrg      shift
275885ee4c00Smrg    elif test \"X\`{ \$ECHO '\t'; } 2>/dev/null\`\" = 'X\t'; then
275985ee4c00Smrg      # Yippee, \$ECHO works!
276085ee4c00Smrg      :
276185ee4c00Smrg    else
276285ee4c00Smrg      # Restart under the correct shell, and then maybe \$ECHO will work.
276385ee4c00Smrg      exec $SHELL \"\$0\" --no-reexec \${1+\"\$@\"}
276485ee4c00Smrg    fi
276585ee4c00Smrg  fi\
276685ee4c00Smrg"
276785ee4c00Smrg	$ECHO "\
2768692f60a7Smrg
276985ee4c00Smrg  # Find the directory that this script lives in.
277085ee4c00Smrg  thisdir=\`\$ECHO \"X\$file\" | \$Xsed -e 's%/[^/]*$%%'\`
277185ee4c00Smrg  test \"x\$thisdir\" = \"x\$file\" && thisdir=.
2772692f60a7Smrg
277385ee4c00Smrg  # Follow symbolic links until we get to the real thisdir.
277485ee4c00Smrg  file=\`ls -ld \"\$file\" | ${SED} -n 's/.*-> //p'\`
277585ee4c00Smrg  while test -n \"\$file\"; do
277685ee4c00Smrg    destdir=\`\$ECHO \"X\$file\" | \$Xsed -e 's%/[^/]*\$%%'\`
2777692f60a7Smrg
277885ee4c00Smrg    # If there was a directory component, then change thisdir.
277985ee4c00Smrg    if test \"x\$destdir\" != \"x\$file\"; then
278085ee4c00Smrg      case \"\$destdir\" in
278185ee4c00Smrg      [\\\\/]* | [A-Za-z]:[\\\\/]*) thisdir=\"\$destdir\" ;;
278285ee4c00Smrg      *) thisdir=\"\$thisdir/\$destdir\" ;;
2783692f60a7Smrg      esac
278485ee4c00Smrg    fi
2785692f60a7Smrg
278685ee4c00Smrg    file=\`\$ECHO \"X\$file\" | \$Xsed -e 's%^.*/%%'\`
278785ee4c00Smrg    file=\`ls -ld \"\$thisdir/\$file\" | ${SED} -n 's/.*-> //p'\`
278885ee4c00Smrg  done
278985ee4c00Smrg"
279085ee4c00Smrg}
279185ee4c00Smrg# end: func_emit_wrapper_part1
279285ee4c00Smrg
279385ee4c00Smrg# func_emit_wrapper_part2 [arg=no]
279485ee4c00Smrg#
279585ee4c00Smrg# Emit the second part of a libtool wrapper script on stdout.
279685ee4c00Smrg# For more information, see the description associated with
279785ee4c00Smrg# func_emit_wrapper(), below.
279885ee4c00Smrgfunc_emit_wrapper_part2 ()
279985ee4c00Smrg{
280085ee4c00Smrg	func_emit_wrapper_part2_arg1=no
280185ee4c00Smrg	if test -n "$1" ; then
280285ee4c00Smrg	  func_emit_wrapper_part2_arg1=$1
2803692f60a7Smrg	fi
2804692f60a7Smrg
280585ee4c00Smrg	$ECHO "\
2806692f60a7Smrg
280785ee4c00Smrg  # Usually 'no', except on cygwin/mingw when embedded into
280885ee4c00Smrg  # the cwrapper.
280985ee4c00Smrg  WRAPPER_SCRIPT_BELONGS_IN_OBJDIR=$func_emit_wrapper_part2_arg1
281085ee4c00Smrg  if test \"\$WRAPPER_SCRIPT_BELONGS_IN_OBJDIR\" = \"yes\"; then
281185ee4c00Smrg    # special case for '.'
281285ee4c00Smrg    if test \"\$thisdir\" = \".\"; then
281385ee4c00Smrg      thisdir=\`pwd\`
281485ee4c00Smrg    fi
281585ee4c00Smrg    # remove .libs from thisdir
281685ee4c00Smrg    case \"\$thisdir\" in
281785ee4c00Smrg    *[\\\\/]$objdir ) thisdir=\`\$ECHO \"X\$thisdir\" | \$Xsed -e 's%[\\\\/][^\\\\/]*$%%'\` ;;
281885ee4c00Smrg    $objdir )   thisdir=. ;;
281985ee4c00Smrg    esac
282085ee4c00Smrg  fi
282185ee4c00Smrg
282285ee4c00Smrg  # Try to get the absolute directory name.
282385ee4c00Smrg  absdir=\`cd \"\$thisdir\" && pwd\`
282485ee4c00Smrg  test -n \"\$absdir\" && thisdir=\"\$absdir\"
282585ee4c00Smrg"
282685ee4c00Smrg
282785ee4c00Smrg	if test "$fast_install" = yes; then
282885ee4c00Smrg	  $ECHO "\
282985ee4c00Smrg  program=lt-'$outputname'$exeext
283085ee4c00Smrg  progdir=\"\$thisdir/$objdir\"
283185ee4c00Smrg
283285ee4c00Smrg  if test ! -f \"\$progdir/\$program\" ||
283385ee4c00Smrg     { file=\`ls -1dt \"\$progdir/\$program\" \"\$progdir/../\$program\" 2>/dev/null | ${SED} 1q\`; \\
283485ee4c00Smrg       test \"X\$file\" != \"X\$progdir/\$program\"; }; then
283585ee4c00Smrg
283685ee4c00Smrg    file=\"\$\$-\$program\"
283785ee4c00Smrg
283885ee4c00Smrg    if test ! -d \"\$progdir\"; then
283985ee4c00Smrg      $MKDIR \"\$progdir\"
284085ee4c00Smrg    else
284185ee4c00Smrg      $RM \"\$progdir/\$file\"
284285ee4c00Smrg    fi"
284385ee4c00Smrg
284485ee4c00Smrg	  $ECHO "\
284585ee4c00Smrg
284685ee4c00Smrg    # relink executable if necessary
284785ee4c00Smrg    if test -n \"\$relink_command\"; then
284885ee4c00Smrg      if relink_command_output=\`eval \$relink_command 2>&1\`; then :
284985ee4c00Smrg      else
285085ee4c00Smrg	$ECHO \"\$relink_command_output\" >&2
285185ee4c00Smrg	$RM \"\$progdir/\$file\"
285285ee4c00Smrg	exit 1
2853692f60a7Smrg      fi
285485ee4c00Smrg    fi
2855692f60a7Smrg
285685ee4c00Smrg    $MV \"\$progdir/\$file\" \"\$progdir/\$program\" 2>/dev/null ||
285785ee4c00Smrg    { $RM \"\$progdir/\$program\";
285885ee4c00Smrg      $MV \"\$progdir/\$file\" \"\$progdir/\$program\"; }
285985ee4c00Smrg    $RM \"\$progdir/\$file\"
286085ee4c00Smrg  fi"
286185ee4c00Smrg	else
286285ee4c00Smrg	  $ECHO "\
286385ee4c00Smrg  program='$outputname'
286485ee4c00Smrg  progdir=\"\$thisdir/$objdir\"
286585ee4c00Smrg"
2866692f60a7Smrg	fi
2867692f60a7Smrg
286885ee4c00Smrg	$ECHO "\
2869692f60a7Smrg
287085ee4c00Smrg  if test -f \"\$progdir/\$program\"; then"
2871692f60a7Smrg
287285ee4c00Smrg	# Export our shlibpath_var if we have one.
287385ee4c00Smrg	if test "$shlibpath_overrides_runpath" = yes && test -n "$shlibpath_var" && test -n "$temp_rpath"; then
287485ee4c00Smrg	  $ECHO "\
287585ee4c00Smrg    # Add our own library path to $shlibpath_var
287685ee4c00Smrg    $shlibpath_var=\"$temp_rpath\$$shlibpath_var\"
287785ee4c00Smrg
287885ee4c00Smrg    # Some systems cannot cope with colon-terminated $shlibpath_var
287985ee4c00Smrg    # The second colon is a workaround for a bug in BeOS R4 sed
288085ee4c00Smrg    $shlibpath_var=\`\$ECHO \"X\$$shlibpath_var\" | \$Xsed -e 's/::*\$//'\`
2881692f60a7Smrg
288285ee4c00Smrg    export $shlibpath_var
288385ee4c00Smrg"
2884692f60a7Smrg	fi
2885692f60a7Smrg
288685ee4c00Smrg	# fixup the dll searchpath if we need to.
288785ee4c00Smrg	if test -n "$dllsearchpath"; then
288885ee4c00Smrg	  $ECHO "\
288985ee4c00Smrg    # Add the dll search path components to the executable PATH
289085ee4c00Smrg    PATH=$dllsearchpath:\$PATH
289185ee4c00Smrg"
289285ee4c00Smrg	fi
2893692f60a7Smrg
289485ee4c00Smrg	$ECHO "\
289585ee4c00Smrg    if test \"\$libtool_execute_magic\" != \"$magic\"; then
289685ee4c00Smrg      # Run the actual program with our arguments.
289785ee4c00Smrg"
289885ee4c00Smrg	case $host in
289985ee4c00Smrg	# Backslashes separate directories on plain windows
290085ee4c00Smrg	*-*-mingw | *-*-os2* | *-cegcc*)
290185ee4c00Smrg	  $ECHO "\
290285ee4c00Smrg      exec \"\$progdir\\\\\$program\" \${1+\"\$@\"}
290385ee4c00Smrg"
2904692f60a7Smrg	  ;;
2905692f60a7Smrg
2906692f60a7Smrg	*)
290785ee4c00Smrg	  $ECHO "\
290885ee4c00Smrg      exec \"\$progdir/\$program\" \${1+\"\$@\"}
290985ee4c00Smrg"
2910692f60a7Smrg	  ;;
2911692f60a7Smrg	esac
291285ee4c00Smrg	$ECHO "\
291385ee4c00Smrg      \$ECHO \"\$0: cannot exec \$program \$*\" 1>&2
291485ee4c00Smrg      exit 1
291585ee4c00Smrg    fi
291685ee4c00Smrg  else
291785ee4c00Smrg    # The program doesn't exist.
291885ee4c00Smrg    \$ECHO \"\$0: error: \\\`\$progdir/\$program' does not exist\" 1>&2
291985ee4c00Smrg    \$ECHO \"This script is just a wrapper for \$program.\" 1>&2
292085ee4c00Smrg    $ECHO \"See the $PACKAGE documentation for more information.\" 1>&2
292185ee4c00Smrg    exit 1
292285ee4c00Smrg  fi
292385ee4c00Smrgfi\
292485ee4c00Smrg"
292585ee4c00Smrg}
292685ee4c00Smrg# end: func_emit_wrapper_part2
2927692f60a7Smrg
2928692f60a7Smrg
292985ee4c00Smrg# func_emit_wrapper [arg=no]
293085ee4c00Smrg#
293185ee4c00Smrg# Emit a libtool wrapper script on stdout.
293285ee4c00Smrg# Don't directly open a file because we may want to
293385ee4c00Smrg# incorporate the script contents within a cygwin/mingw
293485ee4c00Smrg# wrapper executable.  Must ONLY be called from within
293585ee4c00Smrg# func_mode_link because it depends on a number of variables
293685ee4c00Smrg# set therein.
293785ee4c00Smrg#
293885ee4c00Smrg# ARG is the value that the WRAPPER_SCRIPT_BELONGS_IN_OBJDIR
293985ee4c00Smrg# variable will take.  If 'yes', then the emitted script
294085ee4c00Smrg# will assume that the directory in which it is stored is
294185ee4c00Smrg# the $objdir directory.  This is a cygwin/mingw-specific
294285ee4c00Smrg# behavior.
294385ee4c00Smrgfunc_emit_wrapper ()
294485ee4c00Smrg{
294585ee4c00Smrg	func_emit_wrapper_arg1=no
294685ee4c00Smrg	if test -n "$1" ; then
294785ee4c00Smrg	  func_emit_wrapper_arg1=$1
2948692f60a7Smrg	fi
2949692f60a7Smrg
295085ee4c00Smrg	# split this up so that func_emit_cwrapperexe_src
295185ee4c00Smrg	# can call each part independently.
295285ee4c00Smrg	func_emit_wrapper_part1 "${func_emit_wrapper_arg1}"
295385ee4c00Smrg	func_emit_wrapper_part2 "${func_emit_wrapper_arg1}"
295485ee4c00Smrg}
2955692f60a7Smrg
2956692f60a7Smrg
295785ee4c00Smrg# func_to_host_path arg
295885ee4c00Smrg#
295985ee4c00Smrg# Convert paths to host format when used with build tools.
296085ee4c00Smrg# Intended for use with "native" mingw (where libtool itself
296185ee4c00Smrg# is running under the msys shell), or in the following cross-
296285ee4c00Smrg# build environments:
296385ee4c00Smrg#    $build          $host
296485ee4c00Smrg#    mingw (msys)    mingw  [e.g. native]
296585ee4c00Smrg#    cygwin          mingw
296685ee4c00Smrg#    *nix + wine     mingw
296785ee4c00Smrg# where wine is equipped with the `winepath' executable.
296885ee4c00Smrg# In the native mingw case, the (msys) shell automatically
296985ee4c00Smrg# converts paths for any non-msys applications it launches,
297085ee4c00Smrg# but that facility isn't available from inside the cwrapper.
297185ee4c00Smrg# Similar accommodations are necessary for $host mingw and
297285ee4c00Smrg# $build cygwin.  Calling this function does no harm for other
297385ee4c00Smrg# $host/$build combinations not listed above.
297485ee4c00Smrg#
297585ee4c00Smrg# ARG is the path (on $build) that should be converted to
297685ee4c00Smrg# the proper representation for $host. The result is stored
297785ee4c00Smrg# in $func_to_host_path_result.
297885ee4c00Smrgfunc_to_host_path ()
297985ee4c00Smrg{
298085ee4c00Smrg  func_to_host_path_result="$1"
298185ee4c00Smrg  if test -n "$1" ; then
298285ee4c00Smrg    case $host in
298385ee4c00Smrg      *mingw* )
298485ee4c00Smrg        lt_sed_naive_backslashify='s|\\\\*|\\|g;s|/|\\|g;s|\\|\\\\|g'
298585ee4c00Smrg        case $build in
298685ee4c00Smrg          *mingw* ) # actually, msys
298785ee4c00Smrg            # awkward: cmd appends spaces to result
298885ee4c00Smrg            lt_sed_strip_trailing_spaces="s/[ ]*\$//"
298985ee4c00Smrg            func_to_host_path_tmp1=`( cmd //c echo "$1" |\
299085ee4c00Smrg              $SED -e "$lt_sed_strip_trailing_spaces" ) 2>/dev/null || echo ""`
299185ee4c00Smrg            func_to_host_path_result=`echo "$func_to_host_path_tmp1" |\
299285ee4c00Smrg              $SED -e "$lt_sed_naive_backslashify"`
299385ee4c00Smrg            ;;
299485ee4c00Smrg          *cygwin* )
299585ee4c00Smrg            func_to_host_path_tmp1=`cygpath -w "$1"`
299685ee4c00Smrg            func_to_host_path_result=`echo "$func_to_host_path_tmp1" |\
299785ee4c00Smrg              $SED -e "$lt_sed_naive_backslashify"`
299885ee4c00Smrg            ;;
299985ee4c00Smrg          * )
300085ee4c00Smrg            # Unfortunately, winepath does not exit with a non-zero
300185ee4c00Smrg            # error code, so we are forced to check the contents of
300285ee4c00Smrg            # stdout. On the other hand, if the command is not
300385ee4c00Smrg            # found, the shell will set an exit code of 127 and print
300485ee4c00Smrg            # *an error message* to stdout. So we must check for both
300585ee4c00Smrg            # error code of zero AND non-empty stdout, which explains
300685ee4c00Smrg            # the odd construction:
300785ee4c00Smrg            func_to_host_path_tmp1=`winepath -w "$1" 2>/dev/null`
300885ee4c00Smrg            if test "$?" -eq 0 && test -n "${func_to_host_path_tmp1}"; then
300985ee4c00Smrg              func_to_host_path_result=`echo "$func_to_host_path_tmp1" |\
301085ee4c00Smrg                $SED -e "$lt_sed_naive_backslashify"`
301185ee4c00Smrg            else
301285ee4c00Smrg              # Allow warning below.
301385ee4c00Smrg              func_to_host_path_result=""
301485ee4c00Smrg            fi
301585ee4c00Smrg            ;;
301685ee4c00Smrg        esac
301785ee4c00Smrg        if test -z "$func_to_host_path_result" ; then
301885ee4c00Smrg          func_error "Could not determine host path corresponding to"
301985ee4c00Smrg          func_error "  '$1'"
302085ee4c00Smrg          func_error "Continuing, but uninstalled executables may not work."
302185ee4c00Smrg          # Fallback:
302285ee4c00Smrg          func_to_host_path_result="$1"
302385ee4c00Smrg        fi
302485ee4c00Smrg        ;;
302585ee4c00Smrg    esac
302685ee4c00Smrg  fi
302785ee4c00Smrg}
302885ee4c00Smrg# end: func_to_host_path
3029692f60a7Smrg
303085ee4c00Smrg# func_to_host_pathlist arg
303185ee4c00Smrg#
303285ee4c00Smrg# Convert pathlists to host format when used with build tools.
303385ee4c00Smrg# See func_to_host_path(), above. This function supports the
303485ee4c00Smrg# following $build/$host combinations (but does no harm for
303585ee4c00Smrg# combinations not listed here):
303685ee4c00Smrg#    $build          $host
303785ee4c00Smrg#    mingw (msys)    mingw  [e.g. native]
303885ee4c00Smrg#    cygwin          mingw
303985ee4c00Smrg#    *nix + wine     mingw
304085ee4c00Smrg#
304185ee4c00Smrg# Path separators are also converted from $build format to
304285ee4c00Smrg# $host format. If ARG begins or ends with a path separator
304385ee4c00Smrg# character, it is preserved (but converted to $host format)
304485ee4c00Smrg# on output.
304585ee4c00Smrg#
304685ee4c00Smrg# ARG is a pathlist (on $build) that should be converted to
304785ee4c00Smrg# the proper representation on $host. The result is stored
304885ee4c00Smrg# in $func_to_host_pathlist_result.
304985ee4c00Smrgfunc_to_host_pathlist ()
305085ee4c00Smrg{
305185ee4c00Smrg  func_to_host_pathlist_result="$1"
305285ee4c00Smrg  if test -n "$1" ; then
305385ee4c00Smrg    case $host in
305485ee4c00Smrg      *mingw* )
305585ee4c00Smrg        lt_sed_naive_backslashify='s|\\\\*|\\|g;s|/|\\|g;s|\\|\\\\|g'
305685ee4c00Smrg        # Remove leading and trailing path separator characters from
305785ee4c00Smrg        # ARG. msys behavior is inconsistent here, cygpath turns them
305885ee4c00Smrg        # into '.;' and ';.', and winepath ignores them completely.
305985ee4c00Smrg        func_to_host_pathlist_tmp2="$1"
306085ee4c00Smrg        # Once set for this call, this variable should not be
306185ee4c00Smrg        # reassigned. It is used in tha fallback case.
306285ee4c00Smrg        func_to_host_pathlist_tmp1=`echo "$func_to_host_pathlist_tmp2" |\
306385ee4c00Smrg          $SED -e 's|^:*||' -e 's|:*$||'`
306485ee4c00Smrg        case $build in
306585ee4c00Smrg          *mingw* ) # Actually, msys.
306685ee4c00Smrg            # Awkward: cmd appends spaces to result.
306785ee4c00Smrg            lt_sed_strip_trailing_spaces="s/[ ]*\$//"
306885ee4c00Smrg            func_to_host_pathlist_tmp2=`( cmd //c echo "$func_to_host_pathlist_tmp1" |\
306985ee4c00Smrg              $SED -e "$lt_sed_strip_trailing_spaces" ) 2>/dev/null || echo ""`
307085ee4c00Smrg            func_to_host_pathlist_result=`echo "$func_to_host_pathlist_tmp2" |\
307185ee4c00Smrg              $SED -e "$lt_sed_naive_backslashify"`
307285ee4c00Smrg            ;;
307385ee4c00Smrg          *cygwin* )
307485ee4c00Smrg            func_to_host_pathlist_tmp2=`cygpath -w -p "$func_to_host_pathlist_tmp1"`
307585ee4c00Smrg            func_to_host_pathlist_result=`echo "$func_to_host_pathlist_tmp2" |\
307685ee4c00Smrg              $SED -e "$lt_sed_naive_backslashify"`
307785ee4c00Smrg            ;;
307885ee4c00Smrg          * )
307985ee4c00Smrg            # unfortunately, winepath doesn't convert pathlists
308085ee4c00Smrg            func_to_host_pathlist_result=""
308185ee4c00Smrg            func_to_host_pathlist_oldIFS=$IFS
308285ee4c00Smrg            IFS=:
308385ee4c00Smrg            for func_to_host_pathlist_f in $func_to_host_pathlist_tmp1 ; do
308485ee4c00Smrg              IFS=$func_to_host_pathlist_oldIFS
308585ee4c00Smrg              if test -n "$func_to_host_pathlist_f" ; then
308685ee4c00Smrg                func_to_host_path "$func_to_host_pathlist_f"
308785ee4c00Smrg                if test -n "$func_to_host_path_result" ; then
308885ee4c00Smrg                  if test -z "$func_to_host_pathlist_result" ; then
308985ee4c00Smrg                    func_to_host_pathlist_result="$func_to_host_path_result"
309085ee4c00Smrg                  else
309185ee4c00Smrg                    func_to_host_pathlist_result="$func_to_host_pathlist_result;$func_to_host_path_result"
309285ee4c00Smrg                  fi
309385ee4c00Smrg                fi
309485ee4c00Smrg              fi
309585ee4c00Smrg              IFS=:
309685ee4c00Smrg            done
309785ee4c00Smrg            IFS=$func_to_host_pathlist_oldIFS
309885ee4c00Smrg            ;;
309985ee4c00Smrg        esac
310085ee4c00Smrg        if test -z "$func_to_host_pathlist_result" ; then
310185ee4c00Smrg          func_error "Could not determine the host path(s) corresponding to"
310285ee4c00Smrg          func_error "  '$1'"
310385ee4c00Smrg          func_error "Continuing, but uninstalled executables may not work."
310485ee4c00Smrg          # Fallback. This may break if $1 contains DOS-style drive
310585ee4c00Smrg          # specifications. The fix is not to complicate the expression
310685ee4c00Smrg          # below, but for the user to provide a working wine installation
310785ee4c00Smrg          # with winepath so that path translation in the cross-to-mingw
310885ee4c00Smrg          # case works properly.
310985ee4c00Smrg          lt_replace_pathsep_nix_to_dos="s|:|;|g"
311085ee4c00Smrg          func_to_host_pathlist_result=`echo "$func_to_host_pathlist_tmp1" |\
311185ee4c00Smrg            $SED -e "$lt_replace_pathsep_nix_to_dos"`
311285ee4c00Smrg        fi
311385ee4c00Smrg        # Now, add the leading and trailing path separators back
311485ee4c00Smrg        case "$1" in
311585ee4c00Smrg          :* ) func_to_host_pathlist_result=";$func_to_host_pathlist_result"
311685ee4c00Smrg            ;;
311785ee4c00Smrg        esac
311885ee4c00Smrg        case "$1" in
311985ee4c00Smrg          *: ) func_to_host_pathlist_result="$func_to_host_pathlist_result;"
312085ee4c00Smrg            ;;
312185ee4c00Smrg        esac
312285ee4c00Smrg        ;;
312385ee4c00Smrg    esac
312485ee4c00Smrg  fi
312585ee4c00Smrg}
312685ee4c00Smrg# end: func_to_host_pathlist
3127692f60a7Smrg
312885ee4c00Smrg# func_emit_cwrapperexe_src
312985ee4c00Smrg# emit the source code for a wrapper executable on stdout
313085ee4c00Smrg# Must ONLY be called from within func_mode_link because
313185ee4c00Smrg# it depends on a number of variable set therein.
313285ee4c00Smrgfunc_emit_cwrapperexe_src ()
313385ee4c00Smrg{
313485ee4c00Smrg	cat <<EOF
3135692f60a7Smrg
313685ee4c00Smrg/* $cwrappersource - temporary wrapper executable for $objdir/$outputname
313785ee4c00Smrg   Generated by $PROGRAM (GNU $PACKAGE$TIMESTAMP) $VERSION
3138692f60a7Smrg
313985ee4c00Smrg   The $output program cannot be directly executed until all the libtool
314085ee4c00Smrg   libraries that it depends on are installed.
3141692f60a7Smrg
314285ee4c00Smrg   This wrapper executable should never be moved out of the build directory.
314385ee4c00Smrg   If it is, it will not operate correctly.
3144692f60a7Smrg
314585ee4c00Smrg   Currently, it simply execs the wrapper *script* "$SHELL $output",
314685ee4c00Smrg   but could eventually absorb all of the scripts functionality and
314785ee4c00Smrg   exec $objdir/$outputname directly.
314885ee4c00Smrg*/
314985ee4c00SmrgEOF
315085ee4c00Smrg	    cat <<"EOF"
315185ee4c00Smrg#include <stdio.h>
315285ee4c00Smrg#include <stdlib.h>
315385ee4c00Smrg#ifdef _MSC_VER
315485ee4c00Smrg# include <direct.h>
315585ee4c00Smrg# include <process.h>
315685ee4c00Smrg# include <io.h>
315785ee4c00Smrg# define setmode _setmode
315885ee4c00Smrg#else
315985ee4c00Smrg# include <unistd.h>
316085ee4c00Smrg# include <stdint.h>
316185ee4c00Smrg# ifdef __CYGWIN__
316285ee4c00Smrg#  include <io.h>
316385ee4c00Smrg#  define HAVE_SETENV
316485ee4c00Smrg#  ifdef __STRICT_ANSI__
316585ee4c00Smrgchar *realpath (const char *, char *);
316685ee4c00Smrgint putenv (char *);
316785ee4c00Smrgint setenv (const char *, const char *, int);
316885ee4c00Smrg#  endif
316985ee4c00Smrg# endif
317085ee4c00Smrg#endif
317185ee4c00Smrg#include <malloc.h>
317285ee4c00Smrg#include <stdarg.h>
317385ee4c00Smrg#include <assert.h>
317485ee4c00Smrg#include <string.h>
317585ee4c00Smrg#include <ctype.h>
317685ee4c00Smrg#include <errno.h>
317785ee4c00Smrg#include <fcntl.h>
317885ee4c00Smrg#include <sys/stat.h>
3179692f60a7Smrg
318085ee4c00Smrg#if defined(PATH_MAX)
318185ee4c00Smrg# define LT_PATHMAX PATH_MAX
318285ee4c00Smrg#elif defined(MAXPATHLEN)
318385ee4c00Smrg# define LT_PATHMAX MAXPATHLEN
318485ee4c00Smrg#else
318585ee4c00Smrg# define LT_PATHMAX 1024
318685ee4c00Smrg#endif
3187692f60a7Smrg
318885ee4c00Smrg#ifndef S_IXOTH
318985ee4c00Smrg# define S_IXOTH 0
319085ee4c00Smrg#endif
319185ee4c00Smrg#ifndef S_IXGRP
319285ee4c00Smrg# define S_IXGRP 0
319385ee4c00Smrg#endif
3194692f60a7Smrg
319585ee4c00Smrg#ifdef _MSC_VER
319685ee4c00Smrg# define S_IXUSR _S_IEXEC
319785ee4c00Smrg# define stat _stat
319885ee4c00Smrg# ifndef _INTPTR_T_DEFINED
319985ee4c00Smrg#  define intptr_t int
320085ee4c00Smrg# endif
320185ee4c00Smrg#endif
3202692f60a7Smrg
320385ee4c00Smrg#ifndef DIR_SEPARATOR
320485ee4c00Smrg# define DIR_SEPARATOR '/'
320585ee4c00Smrg# define PATH_SEPARATOR ':'
320685ee4c00Smrg#endif
3207692f60a7Smrg
320885ee4c00Smrg#if defined (_WIN32) || defined (__MSDOS__) || defined (__DJGPP__) || \
320985ee4c00Smrg  defined (__OS2__)
321085ee4c00Smrg# define HAVE_DOS_BASED_FILE_SYSTEM
321185ee4c00Smrg# define FOPEN_WB "wb"
321285ee4c00Smrg# ifndef DIR_SEPARATOR_2
321385ee4c00Smrg#  define DIR_SEPARATOR_2 '\\'
321485ee4c00Smrg# endif
321585ee4c00Smrg# ifndef PATH_SEPARATOR_2
321685ee4c00Smrg#  define PATH_SEPARATOR_2 ';'
321785ee4c00Smrg# endif
321885ee4c00Smrg#endif
3219692f60a7Smrg
322085ee4c00Smrg#ifndef DIR_SEPARATOR_2
322185ee4c00Smrg# define IS_DIR_SEPARATOR(ch) ((ch) == DIR_SEPARATOR)
322285ee4c00Smrg#else /* DIR_SEPARATOR_2 */
322385ee4c00Smrg# define IS_DIR_SEPARATOR(ch) \
322485ee4c00Smrg	(((ch) == DIR_SEPARATOR) || ((ch) == DIR_SEPARATOR_2))
322585ee4c00Smrg#endif /* DIR_SEPARATOR_2 */
3226692f60a7Smrg
322785ee4c00Smrg#ifndef PATH_SEPARATOR_2
322885ee4c00Smrg# define IS_PATH_SEPARATOR(ch) ((ch) == PATH_SEPARATOR)
322985ee4c00Smrg#else /* PATH_SEPARATOR_2 */
323085ee4c00Smrg# define IS_PATH_SEPARATOR(ch) ((ch) == PATH_SEPARATOR_2)
323185ee4c00Smrg#endif /* PATH_SEPARATOR_2 */
3232692f60a7Smrg
323385ee4c00Smrg#ifdef __CYGWIN__
323485ee4c00Smrg# define FOPEN_WB "wb"
323585ee4c00Smrg#endif
3236692f60a7Smrg
323785ee4c00Smrg#ifndef FOPEN_WB
323885ee4c00Smrg# define FOPEN_WB "w"
323985ee4c00Smrg#endif
324085ee4c00Smrg#ifndef _O_BINARY
324185ee4c00Smrg# define _O_BINARY 0
324285ee4c00Smrg#endif
3243692f60a7Smrg
324485ee4c00Smrg#define XMALLOC(type, num)      ((type *) xmalloc ((num) * sizeof(type)))
324585ee4c00Smrg#define XFREE(stale) do { \
324685ee4c00Smrg  if (stale) { free ((void *) stale); stale = 0; } \
324785ee4c00Smrg} while (0)
3248692f60a7Smrg
324985ee4c00Smrg#undef LTWRAPPER_DEBUGPRINTF
325085ee4c00Smrg#if defined DEBUGWRAPPER
325185ee4c00Smrg# define LTWRAPPER_DEBUGPRINTF(args) ltwrapper_debugprintf args
325285ee4c00Smrgstatic void
325385ee4c00Smrgltwrapper_debugprintf (const char *fmt, ...)
325485ee4c00Smrg{
325585ee4c00Smrg    va_list args;
325685ee4c00Smrg    va_start (args, fmt);
325785ee4c00Smrg    (void) vfprintf (stderr, fmt, args);
325885ee4c00Smrg    va_end (args);
325985ee4c00Smrg}
326085ee4c00Smrg#else
326185ee4c00Smrg# define LTWRAPPER_DEBUGPRINTF(args)
326285ee4c00Smrg#endif
3263692f60a7Smrg
326485ee4c00Smrgconst char *program_name = NULL;
3265692f60a7Smrg
326685ee4c00Smrgvoid *xmalloc (size_t num);
326785ee4c00Smrgchar *xstrdup (const char *string);
326885ee4c00Smrgconst char *base_name (const char *name);
326985ee4c00Smrgchar *find_executable (const char *wrapper);
327085ee4c00Smrgchar *chase_symlinks (const char *pathspec);
327185ee4c00Smrgint make_executable (const char *path);
327285ee4c00Smrgint check_executable (const char *path);
327385ee4c00Smrgchar *strendzap (char *str, const char *pat);
327485ee4c00Smrgvoid lt_fatal (const char *message, ...);
327585ee4c00Smrgvoid lt_setenv (const char *name, const char *value);
327685ee4c00Smrgchar *lt_extend_str (const char *orig_value, const char *add, int to_end);
327785ee4c00Smrgvoid lt_opt_process_env_set (const char *arg);
327885ee4c00Smrgvoid lt_opt_process_env_prepend (const char *arg);
327985ee4c00Smrgvoid lt_opt_process_env_append (const char *arg);
328085ee4c00Smrgint lt_split_name_value (const char *arg, char** name, char** value);
328185ee4c00Smrgvoid lt_update_exe_path (const char *name, const char *value);
328285ee4c00Smrgvoid lt_update_lib_path (const char *name, const char *value);
328385ee4c00Smrg
328485ee4c00Smrgstatic const char *script_text_part1 =
328585ee4c00SmrgEOF
3286692f60a7Smrg
328785ee4c00Smrg	    func_emit_wrapper_part1 yes |
328885ee4c00Smrg	        $SED -e 's/\([\\"]\)/\\\1/g' \
328985ee4c00Smrg	             -e 's/^/  "/' -e 's/$/\\n"/'
329085ee4c00Smrg	    echo ";"
329185ee4c00Smrg	    cat <<EOF
3292692f60a7Smrg
329385ee4c00Smrgstatic const char *script_text_part2 =
329485ee4c00SmrgEOF
329585ee4c00Smrg	    func_emit_wrapper_part2 yes |
329685ee4c00Smrg	        $SED -e 's/\([\\"]\)/\\\1/g' \
329785ee4c00Smrg	             -e 's/^/  "/' -e 's/$/\\n"/'
329885ee4c00Smrg	    echo ";"
329985ee4c00Smrg
330085ee4c00Smrg	    cat <<EOF
330185ee4c00Smrgconst char * MAGIC_EXE = "$magic_exe";
330285ee4c00Smrgconst char * LIB_PATH_VARNAME = "$shlibpath_var";
330385ee4c00SmrgEOF
3304692f60a7Smrg
330585ee4c00Smrg	    if test "$shlibpath_overrides_runpath" = yes && test -n "$shlibpath_var" && test -n "$temp_rpath"; then
330685ee4c00Smrg              func_to_host_pathlist "$temp_rpath"
330785ee4c00Smrg	      cat <<EOF
330885ee4c00Smrgconst char * LIB_PATH_VALUE   = "$func_to_host_pathlist_result";
330985ee4c00SmrgEOF
331085ee4c00Smrg	    else
331185ee4c00Smrg	      cat <<"EOF"
331285ee4c00Smrgconst char * LIB_PATH_VALUE   = "";
331385ee4c00SmrgEOF
3314692f60a7Smrg	    fi
3315692f60a7Smrg
331685ee4c00Smrg	    if test -n "$dllsearchpath"; then
331785ee4c00Smrg              func_to_host_pathlist "$dllsearchpath:"
331885ee4c00Smrg	      cat <<EOF
331985ee4c00Smrgconst char * EXE_PATH_VARNAME = "PATH";
332085ee4c00Smrgconst char * EXE_PATH_VALUE   = "$func_to_host_pathlist_result";
3321692f60a7SmrgEOF
3322692f60a7Smrg	    else
332385ee4c00Smrg	      cat <<"EOF"
332485ee4c00Smrgconst char * EXE_PATH_VARNAME = "";
332585ee4c00Smrgconst char * EXE_PATH_VALUE   = "";
332685ee4c00SmrgEOF
3327692f60a7Smrg	    fi
332885ee4c00Smrg
332985ee4c00Smrg	    if test "$fast_install" = yes; then
333085ee4c00Smrg	      cat <<EOF
333185ee4c00Smrgconst char * TARGET_PROGRAM_NAME = "lt-$outputname"; /* hopefully, no .exe */
333285ee4c00SmrgEOF
3333692f60a7Smrg	    else
333485ee4c00Smrg	      cat <<EOF
333585ee4c00Smrgconst char * TARGET_PROGRAM_NAME = "$outputname"; /* hopefully, no .exe */
333685ee4c00SmrgEOF
3337692f60a7Smrg	    fi
3338692f60a7Smrg
3339692f60a7Smrg
334085ee4c00Smrg	    cat <<"EOF"
3341692f60a7Smrg
334285ee4c00Smrg#define LTWRAPPER_OPTION_PREFIX         "--lt-"
334385ee4c00Smrg#define LTWRAPPER_OPTION_PREFIX_LENGTH  5
3344692f60a7Smrg
334585ee4c00Smrgstatic const size_t opt_prefix_len         = LTWRAPPER_OPTION_PREFIX_LENGTH;
334685ee4c00Smrgstatic const char *ltwrapper_option_prefix = LTWRAPPER_OPTION_PREFIX;
3347692f60a7Smrg
334885ee4c00Smrgstatic const char *dumpscript_opt       = LTWRAPPER_OPTION_PREFIX "dump-script";
3349692f60a7Smrg
335085ee4c00Smrgstatic const size_t env_set_opt_len     = LTWRAPPER_OPTION_PREFIX_LENGTH + 7;
335185ee4c00Smrgstatic const char *env_set_opt          = LTWRAPPER_OPTION_PREFIX "env-set";
335285ee4c00Smrg  /* argument is putenv-style "foo=bar", value of foo is set to bar */
3353692f60a7Smrg
335485ee4c00Smrgstatic const size_t env_prepend_opt_len = LTWRAPPER_OPTION_PREFIX_LENGTH + 11;
335585ee4c00Smrgstatic const char *env_prepend_opt      = LTWRAPPER_OPTION_PREFIX "env-prepend";
335685ee4c00Smrg  /* argument is putenv-style "foo=bar", new value of foo is bar${foo} */
3357692f60a7Smrg
335885ee4c00Smrgstatic const size_t env_append_opt_len  = LTWRAPPER_OPTION_PREFIX_LENGTH + 10;
335985ee4c00Smrgstatic const char *env_append_opt       = LTWRAPPER_OPTION_PREFIX "env-append";
336085ee4c00Smrg  /* argument is putenv-style "foo=bar", new value of foo is ${foo}bar */
3361692f60a7Smrg
336285ee4c00Smrgint
336385ee4c00Smrgmain (int argc, char *argv[])
336485ee4c00Smrg{
336585ee4c00Smrg  char **newargz;
336685ee4c00Smrg  int  newargc;
336785ee4c00Smrg  char *tmp_pathspec;
336885ee4c00Smrg  char *actual_cwrapper_path;
336985ee4c00Smrg  char *actual_cwrapper_name;
337085ee4c00Smrg  char *target_name;
337185ee4c00Smrg  char *lt_argv_zero;
337285ee4c00Smrg  intptr_t rval = 127;
3373692f60a7Smrg
337485ee4c00Smrg  int i;
3375692f60a7Smrg
337685ee4c00Smrg  program_name = (char *) xstrdup (base_name (argv[0]));
337785ee4c00Smrg  LTWRAPPER_DEBUGPRINTF (("(main) argv[0]      : %s\n", argv[0]));
337885ee4c00Smrg  LTWRAPPER_DEBUGPRINTF (("(main) program_name : %s\n", program_name));
3379692f60a7Smrg
338085ee4c00Smrg  /* very simple arg parsing; don't want to rely on getopt */
338185ee4c00Smrg  for (i = 1; i < argc; i++)
338285ee4c00Smrg    {
338385ee4c00Smrg      if (strcmp (argv[i], dumpscript_opt) == 0)
338485ee4c00Smrg	{
338585ee4c00SmrgEOF
338685ee4c00Smrg	    case "$host" in
338785ee4c00Smrg	      *mingw* | *cygwin* )
338885ee4c00Smrg		# make stdout use "unix" line endings
338985ee4c00Smrg		echo "          setmode(1,_O_BINARY);"
339085ee4c00Smrg		;;
339185ee4c00Smrg	      esac
3392692f60a7Smrg
339385ee4c00Smrg	    cat <<"EOF"
339485ee4c00Smrg	  printf ("%s", script_text_part1);
339585ee4c00Smrg	  printf ("%s", script_text_part2);
339685ee4c00Smrg	  return 0;
339785ee4c00Smrg	}
339885ee4c00Smrg    }
3399692f60a7Smrg
340085ee4c00Smrg  newargz = XMALLOC (char *, argc + 1);
340185ee4c00Smrg  tmp_pathspec = find_executable (argv[0]);
340285ee4c00Smrg  if (tmp_pathspec == NULL)
340385ee4c00Smrg    lt_fatal ("Couldn't find %s", argv[0]);
340485ee4c00Smrg  LTWRAPPER_DEBUGPRINTF (("(main) found exe (before symlink chase) at : %s\n",
340585ee4c00Smrg			  tmp_pathspec));
340685ee4c00Smrg
340785ee4c00Smrg  actual_cwrapper_path = chase_symlinks (tmp_pathspec);
340885ee4c00Smrg  LTWRAPPER_DEBUGPRINTF (("(main) found exe (after symlink chase) at : %s\n",
340985ee4c00Smrg			  actual_cwrapper_path));
341085ee4c00Smrg  XFREE (tmp_pathspec);
341185ee4c00Smrg
341285ee4c00Smrg  actual_cwrapper_name = xstrdup( base_name (actual_cwrapper_path));
341385ee4c00Smrg  strendzap (actual_cwrapper_path, actual_cwrapper_name);
341485ee4c00Smrg
341585ee4c00Smrg  /* wrapper name transforms */
341685ee4c00Smrg  strendzap (actual_cwrapper_name, ".exe");
341785ee4c00Smrg  tmp_pathspec = lt_extend_str (actual_cwrapper_name, ".exe", 1);
341885ee4c00Smrg  XFREE (actual_cwrapper_name);
341985ee4c00Smrg  actual_cwrapper_name = tmp_pathspec;
342085ee4c00Smrg  tmp_pathspec = 0;
342185ee4c00Smrg
342285ee4c00Smrg  /* target_name transforms -- use actual target program name; might have lt- prefix */
342385ee4c00Smrg  target_name = xstrdup (base_name (TARGET_PROGRAM_NAME));
342485ee4c00Smrg  strendzap (target_name, ".exe");
342585ee4c00Smrg  tmp_pathspec = lt_extend_str (target_name, ".exe", 1);
342685ee4c00Smrg  XFREE (target_name);
342785ee4c00Smrg  target_name = tmp_pathspec;
342885ee4c00Smrg  tmp_pathspec = 0;
342985ee4c00Smrg
343085ee4c00Smrg  LTWRAPPER_DEBUGPRINTF (("(main) libtool target name: %s\n",
343185ee4c00Smrg			  target_name));
343285ee4c00SmrgEOF
3433692f60a7Smrg
343485ee4c00Smrg	    cat <<EOF
343585ee4c00Smrg  newargz[0] =
343685ee4c00Smrg    XMALLOC (char, (strlen (actual_cwrapper_path) +
343785ee4c00Smrg		    strlen ("$objdir") + 1 + strlen (actual_cwrapper_name) + 1));
343885ee4c00Smrg  strcpy (newargz[0], actual_cwrapper_path);
343985ee4c00Smrg  strcat (newargz[0], "$objdir");
344085ee4c00Smrg  strcat (newargz[0], "/");
344185ee4c00SmrgEOF
3442692f60a7Smrg
344385ee4c00Smrg	    cat <<"EOF"
344485ee4c00Smrg  /* stop here, and copy so we don't have to do this twice */
344585ee4c00Smrg  tmp_pathspec = xstrdup (newargz[0]);
3446692f60a7Smrg
344785ee4c00Smrg  /* do NOT want the lt- prefix here, so use actual_cwrapper_name */
344885ee4c00Smrg  strcat (newargz[0], actual_cwrapper_name);
3449692f60a7Smrg
345085ee4c00Smrg  /* DO want the lt- prefix here if it exists, so use target_name */
345185ee4c00Smrg  lt_argv_zero = lt_extend_str (tmp_pathspec, target_name, 1);
345285ee4c00Smrg  XFREE (tmp_pathspec);
345385ee4c00Smrg  tmp_pathspec = NULL;
345485ee4c00SmrgEOF
3455692f60a7Smrg
345685ee4c00Smrg	    case $host_os in
345785ee4c00Smrg	      mingw*)
345885ee4c00Smrg	    cat <<"EOF"
345985ee4c00Smrg  {
346085ee4c00Smrg    char* p;
346185ee4c00Smrg    while ((p = strchr (newargz[0], '\\')) != NULL)
346285ee4c00Smrg      {
346385ee4c00Smrg	*p = '/';
346485ee4c00Smrg      }
346585ee4c00Smrg    while ((p = strchr (lt_argv_zero, '\\')) != NULL)
346685ee4c00Smrg      {
346785ee4c00Smrg	*p = '/';
346885ee4c00Smrg      }
346985ee4c00Smrg  }
347085ee4c00SmrgEOF
347185ee4c00Smrg	    ;;
347285ee4c00Smrg	    esac
3473692f60a7Smrg
347485ee4c00Smrg	    cat <<"EOF"
347585ee4c00Smrg  XFREE (target_name);
347685ee4c00Smrg  XFREE (actual_cwrapper_path);
347785ee4c00Smrg  XFREE (actual_cwrapper_name);
3478692f60a7Smrg
347985ee4c00Smrg  lt_setenv ("BIN_SH", "xpg4"); /* for Tru64 */
348085ee4c00Smrg  lt_setenv ("DUALCASE", "1");  /* for MSK sh */
348185ee4c00Smrg  lt_update_lib_path (LIB_PATH_VARNAME, LIB_PATH_VALUE);
348285ee4c00Smrg  lt_update_exe_path (EXE_PATH_VARNAME, EXE_PATH_VALUE);
3483692f60a7Smrg
348485ee4c00Smrg  newargc=0;
348585ee4c00Smrg  for (i = 1; i < argc; i++)
348685ee4c00Smrg    {
348785ee4c00Smrg      if (strncmp (argv[i], env_set_opt, env_set_opt_len) == 0)
348885ee4c00Smrg        {
348985ee4c00Smrg          if (argv[i][env_set_opt_len] == '=')
349085ee4c00Smrg            {
349185ee4c00Smrg              const char *p = argv[i] + env_set_opt_len + 1;
349285ee4c00Smrg              lt_opt_process_env_set (p);
349385ee4c00Smrg            }
349485ee4c00Smrg          else if (argv[i][env_set_opt_len] == '\0' && i + 1 < argc)
349585ee4c00Smrg            {
349685ee4c00Smrg              lt_opt_process_env_set (argv[++i]); /* don't copy */
349785ee4c00Smrg            }
349885ee4c00Smrg          else
349985ee4c00Smrg            lt_fatal ("%s missing required argument", env_set_opt);
350085ee4c00Smrg          continue;
350185ee4c00Smrg        }
350285ee4c00Smrg      if (strncmp (argv[i], env_prepend_opt, env_prepend_opt_len) == 0)
350385ee4c00Smrg        {
350485ee4c00Smrg          if (argv[i][env_prepend_opt_len] == '=')
350585ee4c00Smrg            {
350685ee4c00Smrg              const char *p = argv[i] + env_prepend_opt_len + 1;
350785ee4c00Smrg              lt_opt_process_env_prepend (p);
350885ee4c00Smrg            }
350985ee4c00Smrg          else if (argv[i][env_prepend_opt_len] == '\0' && i + 1 < argc)
351085ee4c00Smrg            {
351185ee4c00Smrg              lt_opt_process_env_prepend (argv[++i]); /* don't copy */
351285ee4c00Smrg            }
351385ee4c00Smrg          else
351485ee4c00Smrg            lt_fatal ("%s missing required argument", env_prepend_opt);
351585ee4c00Smrg          continue;
351685ee4c00Smrg        }
351785ee4c00Smrg      if (strncmp (argv[i], env_append_opt, env_append_opt_len) == 0)
351885ee4c00Smrg        {
351985ee4c00Smrg          if (argv[i][env_append_opt_len] == '=')
352085ee4c00Smrg            {
352185ee4c00Smrg              const char *p = argv[i] + env_append_opt_len + 1;
352285ee4c00Smrg              lt_opt_process_env_append (p);
352385ee4c00Smrg            }
352485ee4c00Smrg          else if (argv[i][env_append_opt_len] == '\0' && i + 1 < argc)
352585ee4c00Smrg            {
352685ee4c00Smrg              lt_opt_process_env_append (argv[++i]); /* don't copy */
352785ee4c00Smrg            }
352885ee4c00Smrg          else
352985ee4c00Smrg            lt_fatal ("%s missing required argument", env_append_opt);
353085ee4c00Smrg          continue;
353185ee4c00Smrg        }
353285ee4c00Smrg      if (strncmp (argv[i], ltwrapper_option_prefix, opt_prefix_len) == 0)
353385ee4c00Smrg        {
353485ee4c00Smrg          /* however, if there is an option in the LTWRAPPER_OPTION_PREFIX
353585ee4c00Smrg             namespace, but it is not one of the ones we know about and
353685ee4c00Smrg             have already dealt with, above (inluding dump-script), then
353785ee4c00Smrg             report an error. Otherwise, targets might begin to believe
353885ee4c00Smrg             they are allowed to use options in the LTWRAPPER_OPTION_PREFIX
353985ee4c00Smrg             namespace. The first time any user complains about this, we'll
354085ee4c00Smrg             need to make LTWRAPPER_OPTION_PREFIX a configure-time option
354185ee4c00Smrg             or a configure.ac-settable value.
354285ee4c00Smrg           */
354385ee4c00Smrg          lt_fatal ("Unrecognized option in %s namespace: '%s'",
354485ee4c00Smrg                    ltwrapper_option_prefix, argv[i]);
354585ee4c00Smrg        }
354685ee4c00Smrg      /* otherwise ... */
354785ee4c00Smrg      newargz[++newargc] = xstrdup (argv[i]);
354885ee4c00Smrg    }
354985ee4c00Smrg  newargz[++newargc] = NULL;
3550692f60a7Smrg
355185ee4c00Smrg  LTWRAPPER_DEBUGPRINTF     (("(main) lt_argv_zero : %s\n", (lt_argv_zero ? lt_argv_zero : "<NULL>")));
355285ee4c00Smrg  for (i = 0; i < newargc; i++)
355385ee4c00Smrg    {
355485ee4c00Smrg      LTWRAPPER_DEBUGPRINTF (("(main) newargz[%d]   : %s\n", i, (newargz[i] ? newargz[i] : "<NULL>")));
355585ee4c00Smrg    }
3556692f60a7Smrg
355785ee4c00SmrgEOF
3558692f60a7Smrg
355985ee4c00Smrg	    case $host_os in
356085ee4c00Smrg	      mingw*)
356185ee4c00Smrg		cat <<"EOF"
356285ee4c00Smrg  /* execv doesn't actually work on mingw as expected on unix */
356385ee4c00Smrg  rval = _spawnv (_P_WAIT, lt_argv_zero, (const char * const *) newargz);
356485ee4c00Smrg  if (rval == -1)
356585ee4c00Smrg    {
356685ee4c00Smrg      /* failed to start process */
356785ee4c00Smrg      LTWRAPPER_DEBUGPRINTF (("(main) failed to launch target \"%s\": errno = %d\n", lt_argv_zero, errno));
356885ee4c00Smrg      return 127;
356985ee4c00Smrg    }
357085ee4c00Smrg  return rval;
357185ee4c00SmrgEOF
357285ee4c00Smrg		;;
357385ee4c00Smrg	      *)
357485ee4c00Smrg		cat <<"EOF"
357585ee4c00Smrg  execv (lt_argv_zero, newargz);
357685ee4c00Smrg  return rval; /* =127, but avoids unused variable warning */
357785ee4c00SmrgEOF
357885ee4c00Smrg		;;
357985ee4c00Smrg	    esac
3580692f60a7Smrg
358185ee4c00Smrg	    cat <<"EOF"
358285ee4c00Smrg}
3583692f60a7Smrg
358485ee4c00Smrgvoid *
358585ee4c00Smrgxmalloc (size_t num)
358685ee4c00Smrg{
358785ee4c00Smrg  void *p = (void *) malloc (num);
358885ee4c00Smrg  if (!p)
358985ee4c00Smrg    lt_fatal ("Memory exhausted");
3590692f60a7Smrg
359185ee4c00Smrg  return p;
359285ee4c00Smrg}
3593692f60a7Smrg
359485ee4c00Smrgchar *
359585ee4c00Smrgxstrdup (const char *string)
359685ee4c00Smrg{
359785ee4c00Smrg  return string ? strcpy ((char *) xmalloc (strlen (string) + 1),
359885ee4c00Smrg			  string) : NULL;
359985ee4c00Smrg}
3600692f60a7Smrg
360185ee4c00Smrgconst char *
360285ee4c00Smrgbase_name (const char *name)
360385ee4c00Smrg{
360485ee4c00Smrg  const char *base;
3605692f60a7Smrg
360685ee4c00Smrg#if defined (HAVE_DOS_BASED_FILE_SYSTEM)
360785ee4c00Smrg  /* Skip over the disk name in MSDOS pathnames. */
360885ee4c00Smrg  if (isalpha ((unsigned char) name[0]) && name[1] == ':')
360985ee4c00Smrg    name += 2;
361085ee4c00Smrg#endif
3611692f60a7Smrg
361285ee4c00Smrg  for (base = name; *name; name++)
361385ee4c00Smrg    if (IS_DIR_SEPARATOR (*name))
361485ee4c00Smrg      base = name + 1;
361585ee4c00Smrg  return base;
361685ee4c00Smrg}
3617692f60a7Smrg
361885ee4c00Smrgint
361985ee4c00Smrgcheck_executable (const char *path)
362085ee4c00Smrg{
362185ee4c00Smrg  struct stat st;
3622692f60a7Smrg
362385ee4c00Smrg  LTWRAPPER_DEBUGPRINTF (("(check_executable)  : %s\n",
362485ee4c00Smrg			  path ? (*path ? path : "EMPTY!") : "NULL!"));
362585ee4c00Smrg  if ((!path) || (!*path))
362685ee4c00Smrg    return 0;
3627692f60a7Smrg
362885ee4c00Smrg  if ((stat (path, &st) >= 0)
362985ee4c00Smrg      && (st.st_mode & (S_IXUSR | S_IXGRP | S_IXOTH)))
363085ee4c00Smrg    return 1;
363185ee4c00Smrg  else
363285ee4c00Smrg    return 0;
363385ee4c00Smrg}
3634692f60a7Smrg
363585ee4c00Smrgint
363685ee4c00Smrgmake_executable (const char *path)
363785ee4c00Smrg{
363885ee4c00Smrg  int rval = 0;
363985ee4c00Smrg  struct stat st;
3640692f60a7Smrg
364185ee4c00Smrg  LTWRAPPER_DEBUGPRINTF (("(make_executable)   : %s\n",
364285ee4c00Smrg			  path ? (*path ? path : "EMPTY!") : "NULL!"));
364385ee4c00Smrg  if ((!path) || (!*path))
364485ee4c00Smrg    return 0;
3645692f60a7Smrg
364685ee4c00Smrg  if (stat (path, &st) >= 0)
364785ee4c00Smrg    {
364885ee4c00Smrg      rval = chmod (path, st.st_mode | S_IXOTH | S_IXGRP | S_IXUSR);
364985ee4c00Smrg    }
365085ee4c00Smrg  return rval;
365185ee4c00Smrg}
3652692f60a7Smrg
365385ee4c00Smrg/* Searches for the full path of the wrapper.  Returns
365485ee4c00Smrg   newly allocated full path name if found, NULL otherwise
365585ee4c00Smrg   Does not chase symlinks, even on platforms that support them.
365685ee4c00Smrg*/
365785ee4c00Smrgchar *
365885ee4c00Smrgfind_executable (const char *wrapper)
365985ee4c00Smrg{
366085ee4c00Smrg  int has_slash = 0;
366185ee4c00Smrg  const char *p;
366285ee4c00Smrg  const char *p_next;
366385ee4c00Smrg  /* static buffer for getcwd */
366485ee4c00Smrg  char tmp[LT_PATHMAX + 1];
366585ee4c00Smrg  int tmp_len;
366685ee4c00Smrg  char *concat_name;
3667692f60a7Smrg
366885ee4c00Smrg  LTWRAPPER_DEBUGPRINTF (("(find_executable)   : %s\n",
366985ee4c00Smrg			  wrapper ? (*wrapper ? wrapper : "EMPTY!") : "NULL!"));
3670692f60a7Smrg
367185ee4c00Smrg  if ((wrapper == NULL) || (*wrapper == '\0'))
367285ee4c00Smrg    return NULL;
3673692f60a7Smrg
367485ee4c00Smrg  /* Absolute path? */
367585ee4c00Smrg#if defined (HAVE_DOS_BASED_FILE_SYSTEM)
367685ee4c00Smrg  if (isalpha ((unsigned char) wrapper[0]) && wrapper[1] == ':')
367785ee4c00Smrg    {
367885ee4c00Smrg      concat_name = xstrdup (wrapper);
367985ee4c00Smrg      if (check_executable (concat_name))
368085ee4c00Smrg	return concat_name;
368185ee4c00Smrg      XFREE (concat_name);
368285ee4c00Smrg    }
368385ee4c00Smrg  else
368485ee4c00Smrg    {
368585ee4c00Smrg#endif
368685ee4c00Smrg      if (IS_DIR_SEPARATOR (wrapper[0]))
368785ee4c00Smrg	{
368885ee4c00Smrg	  concat_name = xstrdup (wrapper);
368985ee4c00Smrg	  if (check_executable (concat_name))
369085ee4c00Smrg	    return concat_name;
369185ee4c00Smrg	  XFREE (concat_name);
369285ee4c00Smrg	}
369385ee4c00Smrg#if defined (HAVE_DOS_BASED_FILE_SYSTEM)
369485ee4c00Smrg    }
369585ee4c00Smrg#endif
3696692f60a7Smrg
369785ee4c00Smrg  for (p = wrapper; *p; p++)
369885ee4c00Smrg    if (*p == '/')
369985ee4c00Smrg      {
370085ee4c00Smrg	has_slash = 1;
370185ee4c00Smrg	break;
370285ee4c00Smrg      }
370385ee4c00Smrg  if (!has_slash)
370485ee4c00Smrg    {
370585ee4c00Smrg      /* no slashes; search PATH */
370685ee4c00Smrg      const char *path = getenv ("PATH");
370785ee4c00Smrg      if (path != NULL)
370885ee4c00Smrg	{
370985ee4c00Smrg	  for (p = path; *p; p = p_next)
371085ee4c00Smrg	    {
371185ee4c00Smrg	      const char *q;
371285ee4c00Smrg	      size_t p_len;
371385ee4c00Smrg	      for (q = p; *q; q++)
371485ee4c00Smrg		if (IS_PATH_SEPARATOR (*q))
371585ee4c00Smrg		  break;
371685ee4c00Smrg	      p_len = q - p;
371785ee4c00Smrg	      p_next = (*q == '\0' ? q : q + 1);
371885ee4c00Smrg	      if (p_len == 0)
371985ee4c00Smrg		{
372085ee4c00Smrg		  /* empty path: current directory */
372185ee4c00Smrg		  if (getcwd (tmp, LT_PATHMAX) == NULL)
372285ee4c00Smrg		    lt_fatal ("getcwd failed");
372385ee4c00Smrg		  tmp_len = strlen (tmp);
372485ee4c00Smrg		  concat_name =
372585ee4c00Smrg		    XMALLOC (char, tmp_len + 1 + strlen (wrapper) + 1);
372685ee4c00Smrg		  memcpy (concat_name, tmp, tmp_len);
372785ee4c00Smrg		  concat_name[tmp_len] = '/';
372885ee4c00Smrg		  strcpy (concat_name + tmp_len + 1, wrapper);
372985ee4c00Smrg		}
373085ee4c00Smrg	      else
373185ee4c00Smrg		{
373285ee4c00Smrg		  concat_name =
373385ee4c00Smrg		    XMALLOC (char, p_len + 1 + strlen (wrapper) + 1);
373485ee4c00Smrg		  memcpy (concat_name, p, p_len);
373585ee4c00Smrg		  concat_name[p_len] = '/';
373685ee4c00Smrg		  strcpy (concat_name + p_len + 1, wrapper);
373785ee4c00Smrg		}
373885ee4c00Smrg	      if (check_executable (concat_name))
373985ee4c00Smrg		return concat_name;
374085ee4c00Smrg	      XFREE (concat_name);
374185ee4c00Smrg	    }
374285ee4c00Smrg	}
374385ee4c00Smrg      /* not found in PATH; assume curdir */
374485ee4c00Smrg    }
374585ee4c00Smrg  /* Relative path | not found in path: prepend cwd */
374685ee4c00Smrg  if (getcwd (tmp, LT_PATHMAX) == NULL)
374785ee4c00Smrg    lt_fatal ("getcwd failed");
374885ee4c00Smrg  tmp_len = strlen (tmp);
374985ee4c00Smrg  concat_name = XMALLOC (char, tmp_len + 1 + strlen (wrapper) + 1);
375085ee4c00Smrg  memcpy (concat_name, tmp, tmp_len);
375185ee4c00Smrg  concat_name[tmp_len] = '/';
375285ee4c00Smrg  strcpy (concat_name + tmp_len + 1, wrapper);
3753692f60a7Smrg
375485ee4c00Smrg  if (check_executable (concat_name))
375585ee4c00Smrg    return concat_name;
375685ee4c00Smrg  XFREE (concat_name);
375785ee4c00Smrg  return NULL;
375885ee4c00Smrg}
3759692f60a7Smrg
376085ee4c00Smrgchar *
376185ee4c00Smrgchase_symlinks (const char *pathspec)
376285ee4c00Smrg{
376385ee4c00Smrg#ifndef S_ISLNK
376485ee4c00Smrg  return xstrdup (pathspec);
376585ee4c00Smrg#else
376685ee4c00Smrg  char buf[LT_PATHMAX];
376785ee4c00Smrg  struct stat s;
376885ee4c00Smrg  char *tmp_pathspec = xstrdup (pathspec);
376985ee4c00Smrg  char *p;
377085ee4c00Smrg  int has_symlinks = 0;
377185ee4c00Smrg  while (strlen (tmp_pathspec) && !has_symlinks)
377285ee4c00Smrg    {
377385ee4c00Smrg      LTWRAPPER_DEBUGPRINTF (("checking path component for symlinks: %s\n",
377485ee4c00Smrg			      tmp_pathspec));
377585ee4c00Smrg      if (lstat (tmp_pathspec, &s) == 0)
377685ee4c00Smrg	{
377785ee4c00Smrg	  if (S_ISLNK (s.st_mode) != 0)
377885ee4c00Smrg	    {
377985ee4c00Smrg	      has_symlinks = 1;
378085ee4c00Smrg	      break;
378185ee4c00Smrg	    }
3782692f60a7Smrg
378385ee4c00Smrg	  /* search backwards for last DIR_SEPARATOR */
378485ee4c00Smrg	  p = tmp_pathspec + strlen (tmp_pathspec) - 1;
378585ee4c00Smrg	  while ((p > tmp_pathspec) && (!IS_DIR_SEPARATOR (*p)))
378685ee4c00Smrg	    p--;
378785ee4c00Smrg	  if ((p == tmp_pathspec) && (!IS_DIR_SEPARATOR (*p)))
378885ee4c00Smrg	    {
378985ee4c00Smrg	      /* no more DIR_SEPARATORS left */
379085ee4c00Smrg	      break;
379185ee4c00Smrg	    }
379285ee4c00Smrg	  *p = '\0';
379385ee4c00Smrg	}
379485ee4c00Smrg      else
379585ee4c00Smrg	{
379685ee4c00Smrg	  char *errstr = strerror (errno);
379785ee4c00Smrg	  lt_fatal ("Error accessing file %s (%s)", tmp_pathspec, errstr);
379885ee4c00Smrg	}
379985ee4c00Smrg    }
380085ee4c00Smrg  XFREE (tmp_pathspec);
3801692f60a7Smrg
380285ee4c00Smrg  if (!has_symlinks)
380385ee4c00Smrg    {
380485ee4c00Smrg      return xstrdup (pathspec);
380585ee4c00Smrg    }
3806692f60a7Smrg
380785ee4c00Smrg  tmp_pathspec = realpath (pathspec, buf);
380885ee4c00Smrg  if (tmp_pathspec == 0)
380985ee4c00Smrg    {
381085ee4c00Smrg      lt_fatal ("Could not follow symlinks for %s", pathspec);
381185ee4c00Smrg    }
381285ee4c00Smrg  return xstrdup (tmp_pathspec);
381385ee4c00Smrg#endif
381485ee4c00Smrg}
3815692f60a7Smrg
381685ee4c00Smrgchar *
381785ee4c00Smrgstrendzap (char *str, const char *pat)
381885ee4c00Smrg{
381985ee4c00Smrg  size_t len, patlen;
3820692f60a7Smrg
382185ee4c00Smrg  assert (str != NULL);
382285ee4c00Smrg  assert (pat != NULL);
3823692f60a7Smrg
382485ee4c00Smrg  len = strlen (str);
382585ee4c00Smrg  patlen = strlen (pat);
3826692f60a7Smrg
382785ee4c00Smrg  if (patlen <= len)
382885ee4c00Smrg    {
382985ee4c00Smrg      str += len - patlen;
383085ee4c00Smrg      if (strcmp (str, pat) == 0)
383185ee4c00Smrg	*str = '\0';
383285ee4c00Smrg    }
383385ee4c00Smrg  return str;
383485ee4c00Smrg}
3835692f60a7Smrg
383685ee4c00Smrgstatic void
383785ee4c00Smrglt_error_core (int exit_status, const char *mode,
383885ee4c00Smrg	       const char *message, va_list ap)
383985ee4c00Smrg{
384085ee4c00Smrg  fprintf (stderr, "%s: %s: ", program_name, mode);
384185ee4c00Smrg  vfprintf (stderr, message, ap);
384285ee4c00Smrg  fprintf (stderr, ".\n");
3843692f60a7Smrg
384485ee4c00Smrg  if (exit_status >= 0)
384585ee4c00Smrg    exit (exit_status);
384685ee4c00Smrg}
3847692f60a7Smrg
384885ee4c00Smrgvoid
384985ee4c00Smrglt_fatal (const char *message, ...)
385085ee4c00Smrg{
385185ee4c00Smrg  va_list ap;
385285ee4c00Smrg  va_start (ap, message);
385385ee4c00Smrg  lt_error_core (EXIT_FAILURE, "FATAL", message, ap);
385485ee4c00Smrg  va_end (ap);
385585ee4c00Smrg}
3856692f60a7Smrg
385785ee4c00Smrgvoid
385885ee4c00Smrglt_setenv (const char *name, const char *value)
385985ee4c00Smrg{
386085ee4c00Smrg  LTWRAPPER_DEBUGPRINTF (("(lt_setenv) setting '%s' to '%s'\n",
386185ee4c00Smrg                          (name ? name : "<NULL>"),
386285ee4c00Smrg                          (value ? value : "<NULL>")));
386385ee4c00Smrg  {
386485ee4c00Smrg#ifdef HAVE_SETENV
386585ee4c00Smrg    /* always make a copy, for consistency with !HAVE_SETENV */
386685ee4c00Smrg    char *str = xstrdup (value);
386785ee4c00Smrg    setenv (name, str, 1);
386885ee4c00Smrg#else
386985ee4c00Smrg    int len = strlen (name) + 1 + strlen (value) + 1;
387085ee4c00Smrg    char *str = XMALLOC (char, len);
387185ee4c00Smrg    sprintf (str, "%s=%s", name, value);
387285ee4c00Smrg    if (putenv (str) != EXIT_SUCCESS)
387385ee4c00Smrg      {
387485ee4c00Smrg        XFREE (str);
387585ee4c00Smrg      }
387685ee4c00Smrg#endif
387785ee4c00Smrg  }
387885ee4c00Smrg}
3879692f60a7Smrg
388085ee4c00Smrgchar *
388185ee4c00Smrglt_extend_str (const char *orig_value, const char *add, int to_end)
388285ee4c00Smrg{
388385ee4c00Smrg  char *new_value;
388485ee4c00Smrg  if (orig_value && *orig_value)
388585ee4c00Smrg    {
388685ee4c00Smrg      int orig_value_len = strlen (orig_value);
388785ee4c00Smrg      int add_len = strlen (add);
388885ee4c00Smrg      new_value = XMALLOC (char, add_len + orig_value_len + 1);
388985ee4c00Smrg      if (to_end)
389085ee4c00Smrg        {
389185ee4c00Smrg          strcpy (new_value, orig_value);
389285ee4c00Smrg          strcpy (new_value + orig_value_len, add);
389385ee4c00Smrg        }
389485ee4c00Smrg      else
389585ee4c00Smrg        {
389685ee4c00Smrg          strcpy (new_value, add);
389785ee4c00Smrg          strcpy (new_value + add_len, orig_value);
389885ee4c00Smrg        }
389985ee4c00Smrg    }
390085ee4c00Smrg  else
390185ee4c00Smrg    {
390285ee4c00Smrg      new_value = xstrdup (add);
390385ee4c00Smrg    }
390485ee4c00Smrg  return new_value;
390585ee4c00Smrg}
3906692f60a7Smrg
390785ee4c00Smrgint
390885ee4c00Smrglt_split_name_value (const char *arg, char** name, char** value)
390985ee4c00Smrg{
391085ee4c00Smrg  const char *p;
391185ee4c00Smrg  int len;
391285ee4c00Smrg  if (!arg || !*arg)
391385ee4c00Smrg    return 1;
3914692f60a7Smrg
391585ee4c00Smrg  p = strchr (arg, (int)'=');
3916692f60a7Smrg
391785ee4c00Smrg  if (!p)
391885ee4c00Smrg    return 1;
3919692f60a7Smrg
392085ee4c00Smrg  *value = xstrdup (++p);
3921692f60a7Smrg
392285ee4c00Smrg  len = strlen (arg) - strlen (*value);
392385ee4c00Smrg  *name = XMALLOC (char, len);
392485ee4c00Smrg  strncpy (*name, arg, len-1);
392585ee4c00Smrg  (*name)[len - 1] = '\0';
3926692f60a7Smrg
392785ee4c00Smrg  return 0;
392885ee4c00Smrg}
3929692f60a7Smrg
393085ee4c00Smrgvoid
393185ee4c00Smrglt_opt_process_env_set (const char *arg)
393285ee4c00Smrg{
393385ee4c00Smrg  char *name = NULL;
393485ee4c00Smrg  char *value = NULL;
3935692f60a7Smrg
393685ee4c00Smrg  if (lt_split_name_value (arg, &name, &value) != 0)
393785ee4c00Smrg    {
393885ee4c00Smrg      XFREE (name);
393985ee4c00Smrg      XFREE (value);
394085ee4c00Smrg      lt_fatal ("bad argument for %s: '%s'", env_set_opt, arg);
394185ee4c00Smrg    }
3942692f60a7Smrg
394385ee4c00Smrg  lt_setenv (name, value);
394485ee4c00Smrg  XFREE (name);
394585ee4c00Smrg  XFREE (value);
394685ee4c00Smrg}
3947692f60a7Smrg
394885ee4c00Smrgvoid
394985ee4c00Smrglt_opt_process_env_prepend (const char *arg)
395085ee4c00Smrg{
395185ee4c00Smrg  char *name = NULL;
395285ee4c00Smrg  char *value = NULL;
395385ee4c00Smrg  char *new_value = NULL;
3954692f60a7Smrg
395585ee4c00Smrg  if (lt_split_name_value (arg, &name, &value) != 0)
395685ee4c00Smrg    {
395785ee4c00Smrg      XFREE (name);
395885ee4c00Smrg      XFREE (value);
395985ee4c00Smrg      lt_fatal ("bad argument for %s: '%s'", env_prepend_opt, arg);
396085ee4c00Smrg    }
3961692f60a7Smrg
396285ee4c00Smrg  new_value = lt_extend_str (getenv (name), value, 0);
396385ee4c00Smrg  lt_setenv (name, new_value);
396485ee4c00Smrg  XFREE (new_value);
396585ee4c00Smrg  XFREE (name);
396685ee4c00Smrg  XFREE (value);
396785ee4c00Smrg}
3968692f60a7Smrg
396985ee4c00Smrgvoid
397085ee4c00Smrglt_opt_process_env_append (const char *arg)
397185ee4c00Smrg{
397285ee4c00Smrg  char *name = NULL;
397385ee4c00Smrg  char *value = NULL;
397485ee4c00Smrg  char *new_value = NULL;
3975692f60a7Smrg
397685ee4c00Smrg  if (lt_split_name_value (arg, &name, &value) != 0)
397785ee4c00Smrg    {
397885ee4c00Smrg      XFREE (name);
397985ee4c00Smrg      XFREE (value);
398085ee4c00Smrg      lt_fatal ("bad argument for %s: '%s'", env_append_opt, arg);
398185ee4c00Smrg    }
3982692f60a7Smrg
398385ee4c00Smrg  new_value = lt_extend_str (getenv (name), value, 1);
398485ee4c00Smrg  lt_setenv (name, new_value);
398585ee4c00Smrg  XFREE (new_value);
398685ee4c00Smrg  XFREE (name);
398785ee4c00Smrg  XFREE (value);
398885ee4c00Smrg}
3989692f60a7Smrg
399085ee4c00Smrgvoid
399185ee4c00Smrglt_update_exe_path (const char *name, const char *value)
399285ee4c00Smrg{
399385ee4c00Smrg  LTWRAPPER_DEBUGPRINTF (("(lt_update_exe_path) modifying '%s' by prepending '%s'\n",
399485ee4c00Smrg                          (name ? name : "<NULL>"),
399585ee4c00Smrg                          (value ? value : "<NULL>")));
3996692f60a7Smrg
399785ee4c00Smrg  if (name && *name && value && *value)
399885ee4c00Smrg    {
399985ee4c00Smrg      char *new_value = lt_extend_str (getenv (name), value, 0);
400085ee4c00Smrg      /* some systems can't cope with a ':'-terminated path #' */
400185ee4c00Smrg      int len = strlen (new_value);
400285ee4c00Smrg      while (((len = strlen (new_value)) > 0) && IS_PATH_SEPARATOR (new_value[len-1]))
400385ee4c00Smrg        {
400485ee4c00Smrg          new_value[len-1] = '\0';
400585ee4c00Smrg        }
400685ee4c00Smrg      lt_setenv (name, new_value);
400785ee4c00Smrg      XFREE (new_value);
400885ee4c00Smrg    }
400985ee4c00Smrg}
4010692f60a7Smrg
401185ee4c00Smrgvoid
401285ee4c00Smrglt_update_lib_path (const char *name, const char *value)
401385ee4c00Smrg{
401485ee4c00Smrg  LTWRAPPER_DEBUGPRINTF (("(lt_update_lib_path) modifying '%s' by prepending '%s'\n",
401585ee4c00Smrg                          (name ? name : "<NULL>"),
401685ee4c00Smrg                          (value ? value : "<NULL>")));
4017692f60a7Smrg
401885ee4c00Smrg  if (name && *name && value && *value)
401985ee4c00Smrg    {
402085ee4c00Smrg      char *new_value = lt_extend_str (getenv (name), value, 0);
402185ee4c00Smrg      lt_setenv (name, new_value);
402285ee4c00Smrg      XFREE (new_value);
402385ee4c00Smrg    }
402485ee4c00Smrg}
4025692f60a7Smrg
4026692f60a7Smrg
402785ee4c00SmrgEOF
402885ee4c00Smrg}
402985ee4c00Smrg# end: func_emit_cwrapperexe_src
4030692f60a7Smrg
403185ee4c00Smrg# func_mode_link arg...
403285ee4c00Smrgfunc_mode_link ()
403385ee4c00Smrg{
403485ee4c00Smrg    $opt_debug
403585ee4c00Smrg    case $host in
403685ee4c00Smrg    *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-cegcc*)
403785ee4c00Smrg      # It is impossible to link a dll without this setting, and
403885ee4c00Smrg      # we shouldn't force the makefile maintainer to figure out
403985ee4c00Smrg      # which system we are compiling for in order to pass an extra
404085ee4c00Smrg      # flag for every libtool invocation.
404185ee4c00Smrg      # allow_undefined=no
4042692f60a7Smrg
404385ee4c00Smrg      # FIXME: Unfortunately, there are problems with the above when trying
404485ee4c00Smrg      # to make a dll which has undefined symbols, in which case not
404585ee4c00Smrg      # even a static library is built.  For now, we need to specify
404685ee4c00Smrg      # -no-undefined on the libtool link line when we can be certain
404785ee4c00Smrg      # that all symbols are satisfied, otherwise we get a static library.
404885ee4c00Smrg      allow_undefined=yes
404985ee4c00Smrg      ;;
405085ee4c00Smrg    *)
405185ee4c00Smrg      allow_undefined=yes
405285ee4c00Smrg      ;;
405385ee4c00Smrg    esac
405485ee4c00Smrg    libtool_args=$nonopt
405585ee4c00Smrg    base_compile="$nonopt $@"
405685ee4c00Smrg    compile_command=$nonopt
405785ee4c00Smrg    finalize_command=$nonopt
4058692f60a7Smrg
405985ee4c00Smrg    compile_rpath=
406085ee4c00Smrg    finalize_rpath=
406185ee4c00Smrg    compile_shlibpath=
406285ee4c00Smrg    finalize_shlibpath=
406385ee4c00Smrg    convenience=
406485ee4c00Smrg    old_convenience=
406585ee4c00Smrg    deplibs=
406685ee4c00Smrg    old_deplibs=
406785ee4c00Smrg    compiler_flags=
406885ee4c00Smrg    linker_flags=
406985ee4c00Smrg    dllsearchpath=
407085ee4c00Smrg    lib_search_path=`pwd`
407185ee4c00Smrg    inst_prefix_dir=
407285ee4c00Smrg    new_inherited_linker_flags=
4073692f60a7Smrg
407485ee4c00Smrg    avoid_version=no
407585ee4c00Smrg    dlfiles=
407685ee4c00Smrg    dlprefiles=
407785ee4c00Smrg    dlself=no
407885ee4c00Smrg    export_dynamic=no
407985ee4c00Smrg    export_symbols=
408085ee4c00Smrg    export_symbols_regex=
408185ee4c00Smrg    generated=
408285ee4c00Smrg    libobjs=
408385ee4c00Smrg    ltlibs=
408485ee4c00Smrg    module=no
408585ee4c00Smrg    no_install=no
408685ee4c00Smrg    objs=
408785ee4c00Smrg    non_pic_objects=
408885ee4c00Smrg    precious_files_regex=
408985ee4c00Smrg    prefer_static_libs=no
409085ee4c00Smrg    preload=no
409185ee4c00Smrg    prev=
409285ee4c00Smrg    prevarg=
409385ee4c00Smrg    release=
409485ee4c00Smrg    rpath=
409585ee4c00Smrg    xrpath=
409685ee4c00Smrg    perm_rpath=
409785ee4c00Smrg    temp_rpath=
409885ee4c00Smrg    thread_safe=no
409985ee4c00Smrg    vinfo=
410085ee4c00Smrg    vinfo_number=no
410185ee4c00Smrg    weak_libs=
410285ee4c00Smrg    single_module="${wl}-single_module"
410385ee4c00Smrg    func_infer_tag $base_compile
410485ee4c00Smrg
410585ee4c00Smrg    # We need to know -static, to get the right output filenames.
410685ee4c00Smrg    for arg
410785ee4c00Smrg    do
410885ee4c00Smrg      case $arg in
410985ee4c00Smrg      -shared)
411085ee4c00Smrg	test "$build_libtool_libs" != yes && \
411185ee4c00Smrg	  func_fatal_configuration "can not build a shared library"
411285ee4c00Smrg	build_old_libs=no
411385ee4c00Smrg	break
411485ee4c00Smrg	;;
411585ee4c00Smrg      -all-static | -static | -static-libtool-libs)
411685ee4c00Smrg	case $arg in
411785ee4c00Smrg	-all-static)
411885ee4c00Smrg	  if test "$build_libtool_libs" = yes && test -z "$link_static_flag"; then
411985ee4c00Smrg	    func_warning "complete static linking is impossible in this configuration"
412085ee4c00Smrg	  fi
412185ee4c00Smrg	  if test -n "$link_static_flag"; then
412285ee4c00Smrg	    dlopen_self=$dlopen_self_static
412385ee4c00Smrg	  fi
412485ee4c00Smrg	  prefer_static_libs=yes
412585ee4c00Smrg	  ;;
412685ee4c00Smrg	-static)
412785ee4c00Smrg	  if test -z "$pic_flag" && test -n "$link_static_flag"; then
412885ee4c00Smrg	    dlopen_self=$dlopen_self_static
412985ee4c00Smrg	  fi
413085ee4c00Smrg	  prefer_static_libs=built
413185ee4c00Smrg	  ;;
413285ee4c00Smrg	-static-libtool-libs)
413385ee4c00Smrg	  if test -z "$pic_flag" && test -n "$link_static_flag"; then
413485ee4c00Smrg	    dlopen_self=$dlopen_self_static
4135692f60a7Smrg	  fi
413685ee4c00Smrg	  prefer_static_libs=yes
413785ee4c00Smrg	  ;;
413885ee4c00Smrg	esac
413985ee4c00Smrg	build_libtool_libs=no
414085ee4c00Smrg	build_old_libs=yes
414185ee4c00Smrg	break
414285ee4c00Smrg	;;
414385ee4c00Smrg      esac
414485ee4c00Smrg    done
4145692f60a7Smrg
414685ee4c00Smrg    # See if our shared archives depend on static archives.
414785ee4c00Smrg    test -n "$old_archive_from_new_cmds" && build_old_libs=yes
4148692f60a7Smrg
414985ee4c00Smrg    # Go through the arguments, transforming them on the way.
415085ee4c00Smrg    while test "$#" -gt 0; do
415185ee4c00Smrg      arg="$1"
415285ee4c00Smrg      shift
415385ee4c00Smrg      func_quote_for_eval "$arg"
415485ee4c00Smrg      qarg=$func_quote_for_eval_unquoted_result
415585ee4c00Smrg      func_append libtool_args " $func_quote_for_eval_result"
4156692f60a7Smrg
415785ee4c00Smrg      # If the previous option needs an argument, assign it.
415885ee4c00Smrg      if test -n "$prev"; then
415985ee4c00Smrg	case $prev in
416085ee4c00Smrg	output)
416185ee4c00Smrg	  func_append compile_command " @OUTPUT@"
416285ee4c00Smrg	  func_append finalize_command " @OUTPUT@"
416385ee4c00Smrg	  ;;
416485ee4c00Smrg	esac
4165692f60a7Smrg
416685ee4c00Smrg	case $prev in
416785ee4c00Smrg	dlfiles|dlprefiles)
416885ee4c00Smrg	  if test "$preload" = no; then
416985ee4c00Smrg	    # Add the symbol object into the linking commands.
417085ee4c00Smrg	    func_append compile_command " @SYMFILE@"
417185ee4c00Smrg	    func_append finalize_command " @SYMFILE@"
417285ee4c00Smrg	    preload=yes
417385ee4c00Smrg	  fi
417485ee4c00Smrg	  case $arg in
417585ee4c00Smrg	  *.la | *.lo) ;;  # We handle these cases below.
417685ee4c00Smrg	  force)
417785ee4c00Smrg	    if test "$dlself" = no; then
417885ee4c00Smrg	      dlself=needless
417985ee4c00Smrg	      export_dynamic=yes
418085ee4c00Smrg	    fi
418185ee4c00Smrg	    prev=
418285ee4c00Smrg	    continue
418385ee4c00Smrg	    ;;
418485ee4c00Smrg	  self)
418585ee4c00Smrg	    if test "$prev" = dlprefiles; then
418685ee4c00Smrg	      dlself=yes
418785ee4c00Smrg	    elif test "$prev" = dlfiles && test "$dlopen_self" != yes; then
418885ee4c00Smrg	      dlself=yes
4189692f60a7Smrg	    else
419085ee4c00Smrg	      dlself=needless
419185ee4c00Smrg	      export_dynamic=yes
4192692f60a7Smrg	    fi
419385ee4c00Smrg	    prev=
419485ee4c00Smrg	    continue
419585ee4c00Smrg	    ;;
419685ee4c00Smrg	  *)
419785ee4c00Smrg	    if test "$prev" = dlfiles; then
419885ee4c00Smrg	      dlfiles="$dlfiles $arg"
4199692f60a7Smrg	    else
420085ee4c00Smrg	      dlprefiles="$dlprefiles $arg"
4201692f60a7Smrg	    fi
420285ee4c00Smrg	    prev=
420385ee4c00Smrg	    continue
420485ee4c00Smrg	    ;;
420585ee4c00Smrg	  esac
420685ee4c00Smrg	  ;;
420785ee4c00Smrg	expsyms)
420885ee4c00Smrg	  export_symbols="$arg"
420985ee4c00Smrg	  test -f "$arg" \
421085ee4c00Smrg	    || func_fatal_error "symbol file \`$arg' does not exist"
421185ee4c00Smrg	  prev=
421285ee4c00Smrg	  continue
421385ee4c00Smrg	  ;;
421485ee4c00Smrg	expsyms_regex)
421585ee4c00Smrg	  export_symbols_regex="$arg"
421685ee4c00Smrg	  prev=
421785ee4c00Smrg	  continue
421885ee4c00Smrg	  ;;
421985ee4c00Smrg	framework)
4220692f60a7Smrg	  case $host in
422185ee4c00Smrg	    *-*-darwin*)
422285ee4c00Smrg	      case "$deplibs " in
422385ee4c00Smrg		*" $qarg.ltframework "*) ;;
422485ee4c00Smrg		*) deplibs="$deplibs $qarg.ltframework" # this is fixed later
422585ee4c00Smrg		   ;;
422685ee4c00Smrg	      esac
422785ee4c00Smrg	      ;;
4228692f60a7Smrg	  esac
422985ee4c00Smrg	  prev=
423085ee4c00Smrg	  continue
4231692f60a7Smrg	  ;;
423285ee4c00Smrg	inst_prefix)
423385ee4c00Smrg	  inst_prefix_dir="$arg"
423485ee4c00Smrg	  prev=
423585ee4c00Smrg	  continue
4236692f60a7Smrg	  ;;
423785ee4c00Smrg	objectlist)
423885ee4c00Smrg	  if test -f "$arg"; then
423985ee4c00Smrg	    save_arg=$arg
424085ee4c00Smrg	    moreargs=
424185ee4c00Smrg	    for fil in `cat "$save_arg"`
424285ee4c00Smrg	    do
424385ee4c00Smrg#	      moreargs="$moreargs $fil"
424485ee4c00Smrg	      arg=$fil
424585ee4c00Smrg	      # A libtool-controlled object.
4246692f60a7Smrg
424785ee4c00Smrg	      # Check to see that this really is a libtool object.
424885ee4c00Smrg	      if func_lalib_unsafe_p "$arg"; then
424985ee4c00Smrg		pic_object=
425085ee4c00Smrg		non_pic_object=
4251692f60a7Smrg
425285ee4c00Smrg		# Read the .lo file
425385ee4c00Smrg		func_source "$arg"
4254692f60a7Smrg
425585ee4c00Smrg		if test -z "$pic_object" ||
425685ee4c00Smrg		   test -z "$non_pic_object" ||
425785ee4c00Smrg		   test "$pic_object" = none &&
425885ee4c00Smrg		   test "$non_pic_object" = none; then
425985ee4c00Smrg		  func_fatal_error "cannot find name of object for \`$arg'"
426085ee4c00Smrg		fi
4261692f60a7Smrg
426285ee4c00Smrg		# Extract subdirectory from the argument.
426385ee4c00Smrg		func_dirname "$arg" "/" ""
426485ee4c00Smrg		xdir="$func_dirname_result"
4265692f60a7Smrg
426685ee4c00Smrg		if test "$pic_object" != none; then
426785ee4c00Smrg		  # Prepend the subdirectory the object is found in.
426885ee4c00Smrg		  pic_object="$xdir$pic_object"
4269692f60a7Smrg
427085ee4c00Smrg		  if test "$prev" = dlfiles; then
427185ee4c00Smrg		    if test "$build_libtool_libs" = yes && test "$dlopen_support" = yes; then
427285ee4c00Smrg		      dlfiles="$dlfiles $pic_object"
427385ee4c00Smrg		      prev=
427485ee4c00Smrg		      continue
427585ee4c00Smrg		    else
427685ee4c00Smrg		      # If libtool objects are unsupported, then we need to preload.
427785ee4c00Smrg		      prev=dlprefiles
427885ee4c00Smrg		    fi
427985ee4c00Smrg		  fi
4280692f60a7Smrg
428185ee4c00Smrg		  # CHECK ME:  I think I busted this.  -Ossama
428285ee4c00Smrg		  if test "$prev" = dlprefiles; then
428385ee4c00Smrg		    # Preload the old-style object.
428485ee4c00Smrg		    dlprefiles="$dlprefiles $pic_object"
428585ee4c00Smrg		    prev=
428685ee4c00Smrg		  fi
4287692f60a7Smrg
428885ee4c00Smrg		  # A PIC object.
428985ee4c00Smrg		  func_append libobjs " $pic_object"
429085ee4c00Smrg		  arg="$pic_object"
429185ee4c00Smrg		fi
4292692f60a7Smrg
429385ee4c00Smrg		# Non-PIC object.
429485ee4c00Smrg		if test "$non_pic_object" != none; then
429585ee4c00Smrg		  # Prepend the subdirectory the object is found in.
429685ee4c00Smrg		  non_pic_object="$xdir$non_pic_object"
4297692f60a7Smrg
429885ee4c00Smrg		  # A standard non-PIC object
429985ee4c00Smrg		  func_append non_pic_objects " $non_pic_object"
430085ee4c00Smrg		  if test -z "$pic_object" || test "$pic_object" = none ; then
430185ee4c00Smrg		    arg="$non_pic_object"
430285ee4c00Smrg		  fi
430385ee4c00Smrg		else
430485ee4c00Smrg		  # If the PIC object exists, use it instead.
430585ee4c00Smrg		  # $xdir was prepended to $pic_object above.
430685ee4c00Smrg		  non_pic_object="$pic_object"
430785ee4c00Smrg		  func_append non_pic_objects " $non_pic_object"
430885ee4c00Smrg		fi
430985ee4c00Smrg	      else
431085ee4c00Smrg		# Only an error if not doing a dry-run.
431185ee4c00Smrg		if $opt_dry_run; then
431285ee4c00Smrg		  # Extract subdirectory from the argument.
431385ee4c00Smrg		  func_dirname "$arg" "/" ""
431485ee4c00Smrg		  xdir="$func_dirname_result"
431585ee4c00Smrg
431685ee4c00Smrg		  func_lo2o "$arg"
431785ee4c00Smrg		  pic_object=$xdir$objdir/$func_lo2o_result
431885ee4c00Smrg		  non_pic_object=$xdir$func_lo2o_result
431985ee4c00Smrg		  func_append libobjs " $pic_object"
432085ee4c00Smrg		  func_append non_pic_objects " $non_pic_object"
432185ee4c00Smrg	        else
432285ee4c00Smrg		  func_fatal_error "\`$arg' is not a valid libtool object"
432385ee4c00Smrg		fi
432485ee4c00Smrg	      fi
432585ee4c00Smrg	    done
4326692f60a7Smrg	  else
432785ee4c00Smrg	    func_fatal_error "link input file \`$arg' does not exist"
4328692f60a7Smrg	  fi
432985ee4c00Smrg	  arg=$save_arg
433085ee4c00Smrg	  prev=
433185ee4c00Smrg	  continue
433285ee4c00Smrg	  ;;
433385ee4c00Smrg	precious_regex)
433485ee4c00Smrg	  precious_files_regex="$arg"
433585ee4c00Smrg	  prev=
433685ee4c00Smrg	  continue
433785ee4c00Smrg	  ;;
433885ee4c00Smrg	release)
433985ee4c00Smrg	  release="-$arg"
434085ee4c00Smrg	  prev=
434185ee4c00Smrg	  continue
434285ee4c00Smrg	  ;;
434385ee4c00Smrg	rpath | xrpath)
434485ee4c00Smrg	  # We need an absolute path.
434585ee4c00Smrg	  case $arg in
434685ee4c00Smrg	  [\\/]* | [A-Za-z]:[\\/]*) ;;
434785ee4c00Smrg	  *)
434885ee4c00Smrg	    func_fatal_error "only absolute run-paths are allowed"
434985ee4c00Smrg	    ;;
435085ee4c00Smrg	  esac
435185ee4c00Smrg	  if test "$prev" = rpath; then
435285ee4c00Smrg	    case "$rpath " in
435385ee4c00Smrg	    *" $arg "*) ;;
435485ee4c00Smrg	    *) rpath="$rpath $arg" ;;
435585ee4c00Smrg	    esac
4356692f60a7Smrg	  else
435785ee4c00Smrg	    case "$xrpath " in
435885ee4c00Smrg	    *" $arg "*) ;;
435985ee4c00Smrg	    *) xrpath="$xrpath $arg" ;;
436085ee4c00Smrg	    esac
4361692f60a7Smrg	  fi
436285ee4c00Smrg	  prev=
436385ee4c00Smrg	  continue
436485ee4c00Smrg	  ;;
436585ee4c00Smrg	shrext)
436685ee4c00Smrg	  shrext_cmds="$arg"
436785ee4c00Smrg	  prev=
436885ee4c00Smrg	  continue
436985ee4c00Smrg	  ;;
437085ee4c00Smrg	weak)
437185ee4c00Smrg	  weak_libs="$weak_libs $arg"
437285ee4c00Smrg	  prev=
437385ee4c00Smrg	  continue
437485ee4c00Smrg	  ;;
437585ee4c00Smrg	xcclinker)
437685ee4c00Smrg	  linker_flags="$linker_flags $qarg"
437785ee4c00Smrg	  compiler_flags="$compiler_flags $qarg"
437885ee4c00Smrg	  prev=
437985ee4c00Smrg	  func_append compile_command " $qarg"
438085ee4c00Smrg	  func_append finalize_command " $qarg"
438185ee4c00Smrg	  continue
438285ee4c00Smrg	  ;;
438385ee4c00Smrg	xcompiler)
438485ee4c00Smrg	  compiler_flags="$compiler_flags $qarg"
438585ee4c00Smrg	  prev=
438685ee4c00Smrg	  func_append compile_command " $qarg"
438785ee4c00Smrg	  func_append finalize_command " $qarg"
438885ee4c00Smrg	  continue
438985ee4c00Smrg	  ;;
439085ee4c00Smrg	xlinker)
439185ee4c00Smrg	  linker_flags="$linker_flags $qarg"
439285ee4c00Smrg	  compiler_flags="$compiler_flags $wl$qarg"
439385ee4c00Smrg	  prev=
439485ee4c00Smrg	  func_append compile_command " $wl$qarg"
439585ee4c00Smrg	  func_append finalize_command " $wl$qarg"
439685ee4c00Smrg	  continue
439785ee4c00Smrg	  ;;
439885ee4c00Smrg	*)
439985ee4c00Smrg	  eval "$prev=\"\$arg\""
440085ee4c00Smrg	  prev=
440185ee4c00Smrg	  continue
440285ee4c00Smrg	  ;;
4403692f60a7Smrg	esac
440485ee4c00Smrg      fi # test -n "$prev"
4405692f60a7Smrg
440685ee4c00Smrg      prevarg="$arg"
4407692f60a7Smrg
440885ee4c00Smrg      case $arg in
440985ee4c00Smrg      -all-static)
441085ee4c00Smrg	if test -n "$link_static_flag"; then
441185ee4c00Smrg	  # See comment for -static flag below, for more details.
441285ee4c00Smrg	  func_append compile_command " $link_static_flag"
441385ee4c00Smrg	  func_append finalize_command " $link_static_flag"
441485ee4c00Smrg	fi
441585ee4c00Smrg	continue
441685ee4c00Smrg	;;
4417692f60a7Smrg
441885ee4c00Smrg      -allow-undefined)
441985ee4c00Smrg	# FIXME: remove this flag sometime in the future.
442085ee4c00Smrg	func_fatal_error "\`-allow-undefined' must not be used because it is the default"
442185ee4c00Smrg	;;
4422692f60a7Smrg
442385ee4c00Smrg      -avoid-version)
442485ee4c00Smrg	avoid_version=yes
442585ee4c00Smrg	continue
442685ee4c00Smrg	;;
4427692f60a7Smrg
442885ee4c00Smrg      -dlopen)
442985ee4c00Smrg	prev=dlfiles
443085ee4c00Smrg	continue
443185ee4c00Smrg	;;
4432692f60a7Smrg
443385ee4c00Smrg      -dlpreopen)
443485ee4c00Smrg	prev=dlprefiles
443585ee4c00Smrg	continue
443685ee4c00Smrg	;;
4437692f60a7Smrg
443885ee4c00Smrg      -export-dynamic)
443985ee4c00Smrg	export_dynamic=yes
444085ee4c00Smrg	continue
444185ee4c00Smrg	;;
4442692f60a7Smrg
444385ee4c00Smrg      -export-symbols | -export-symbols-regex)
444485ee4c00Smrg	if test -n "$export_symbols" || test -n "$export_symbols_regex"; then
444585ee4c00Smrg	  func_fatal_error "more than one -exported-symbols argument is not allowed"
444685ee4c00Smrg	fi
444785ee4c00Smrg	if test "X$arg" = "X-export-symbols"; then
444885ee4c00Smrg	  prev=expsyms
444985ee4c00Smrg	else
445085ee4c00Smrg	  prev=expsyms_regex
445185ee4c00Smrg	fi
445285ee4c00Smrg	continue
445385ee4c00Smrg	;;
4454692f60a7Smrg
445585ee4c00Smrg      -framework)
445685ee4c00Smrg	prev=framework
445785ee4c00Smrg	continue
445885ee4c00Smrg	;;
4459692f60a7Smrg
446085ee4c00Smrg      -inst-prefix-dir)
446185ee4c00Smrg	prev=inst_prefix
446285ee4c00Smrg	continue
446385ee4c00Smrg	;;
4464692f60a7Smrg
446585ee4c00Smrg      # The native IRIX linker understands -LANG:*, -LIST:* and -LNO:*
446685ee4c00Smrg      # so, if we see these flags be careful not to treat them like -L
446785ee4c00Smrg      -L[A-Z][A-Z]*:*)
446885ee4c00Smrg	case $with_gcc/$host in
446985ee4c00Smrg	no/*-*-irix* | /*-*-irix*)
447085ee4c00Smrg	  func_append compile_command " $arg"
447185ee4c00Smrg	  func_append finalize_command " $arg"
447285ee4c00Smrg	  ;;
447385ee4c00Smrg	esac
447485ee4c00Smrg	continue
447585ee4c00Smrg	;;
4476692f60a7Smrg
447785ee4c00Smrg      -L*)
447885ee4c00Smrg	func_stripname '-L' '' "$arg"
447985ee4c00Smrg	dir=$func_stripname_result
448085ee4c00Smrg	if test -z "$dir"; then
448185ee4c00Smrg	  if test "$#" -gt 0; then
448285ee4c00Smrg	    func_fatal_error "require no space between \`-L' and \`$1'"
448385ee4c00Smrg	  else
448485ee4c00Smrg	    func_fatal_error "need path for \`-L' option"
448585ee4c00Smrg	  fi
448685ee4c00Smrg	fi
448785ee4c00Smrg	# We need an absolute path.
448885ee4c00Smrg	case $dir in
448985ee4c00Smrg	[\\/]* | [A-Za-z]:[\\/]*) ;;
449085ee4c00Smrg	*)
449185ee4c00Smrg	  absdir=`cd "$dir" && pwd`
449285ee4c00Smrg	  test -z "$absdir" && \
449385ee4c00Smrg	    func_fatal_error "cannot determine absolute directory name of \`$dir'"
449485ee4c00Smrg	  dir="$absdir"
449585ee4c00Smrg	  ;;
449685ee4c00Smrg	esac
449785ee4c00Smrg	case "$deplibs " in
449885ee4c00Smrg	*" -L$dir "*) ;;
449985ee4c00Smrg	*)
450085ee4c00Smrg	  deplibs="$deplibs -L$dir"
450185ee4c00Smrg	  lib_search_path="$lib_search_path $dir"
450285ee4c00Smrg	  ;;
450385ee4c00Smrg	esac
450485ee4c00Smrg	case $host in
450585ee4c00Smrg	*-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-cegcc*)
450685ee4c00Smrg	  testbindir=`$ECHO "X$dir" | $Xsed -e 's*/lib$*/bin*'`
450785ee4c00Smrg	  case :$dllsearchpath: in
450885ee4c00Smrg	  *":$dir:"*) ;;
450985ee4c00Smrg	  ::) dllsearchpath=$dir;;
451085ee4c00Smrg	  *) dllsearchpath="$dllsearchpath:$dir";;
451185ee4c00Smrg	  esac
451285ee4c00Smrg	  case :$dllsearchpath: in
451385ee4c00Smrg	  *":$testbindir:"*) ;;
451485ee4c00Smrg	  ::) dllsearchpath=$testbindir;;
451585ee4c00Smrg	  *) dllsearchpath="$dllsearchpath:$testbindir";;
451685ee4c00Smrg	  esac
451785ee4c00Smrg	  ;;
451885ee4c00Smrg	esac
451985ee4c00Smrg	continue
452085ee4c00Smrg	;;
4521692f60a7Smrg
452285ee4c00Smrg      -l*)
452385ee4c00Smrg	if test "X$arg" = "X-lc" || test "X$arg" = "X-lm"; then
452485ee4c00Smrg	  case $host in
452585ee4c00Smrg	  *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-beos* | *-cegcc*)
452685ee4c00Smrg	    # These systems don't actually have a C or math library (as such)
452785ee4c00Smrg	    continue
452885ee4c00Smrg	    ;;
452985ee4c00Smrg	  *-*-os2*)
453085ee4c00Smrg	    # These systems don't actually have a C library (as such)
453185ee4c00Smrg	    test "X$arg" = "X-lc" && continue
453285ee4c00Smrg	    ;;
453385ee4c00Smrg	  *-*-openbsd* | *-*-freebsd* | *-*-dragonfly*)
453485ee4c00Smrg	    # Do not include libc due to us having libc/libc_r.
453585ee4c00Smrg	    test "X$arg" = "X-lc" && continue
453685ee4c00Smrg	    ;;
453785ee4c00Smrg	  *-*-rhapsody* | *-*-darwin1.[012])
453885ee4c00Smrg	    # Rhapsody C and math libraries are in the System framework
453985ee4c00Smrg	    deplibs="$deplibs System.ltframework"
454085ee4c00Smrg	    continue
454185ee4c00Smrg	    ;;
454285ee4c00Smrg	  *-*-sco3.2v5* | *-*-sco5v6*)
454385ee4c00Smrg	    # Causes problems with __ctype
454485ee4c00Smrg	    test "X$arg" = "X-lc" && continue
454585ee4c00Smrg	    ;;
454685ee4c00Smrg	  *-*-sysv4.2uw2* | *-*-sysv5* | *-*-unixware* | *-*-OpenUNIX*)
454785ee4c00Smrg	    # Compiler inserts libc in the correct place for threads to work
454885ee4c00Smrg	    test "X$arg" = "X-lc" && continue
454985ee4c00Smrg	    ;;
455085ee4c00Smrg	  esac
455185ee4c00Smrg	elif test "X$arg" = "X-lc_r"; then
455285ee4c00Smrg	 case $host in
455385ee4c00Smrg	 *-*-openbsd* | *-*-freebsd* | *-*-dragonfly*)
455485ee4c00Smrg	   # Do not include libc_r directly, use -pthread flag.
455585ee4c00Smrg	   continue
455685ee4c00Smrg	   ;;
455785ee4c00Smrg	 esac
455885ee4c00Smrg	fi
455985ee4c00Smrg	deplibs="$deplibs $arg"
456085ee4c00Smrg	continue
456185ee4c00Smrg	;;
4562692f60a7Smrg
456385ee4c00Smrg      -module)
456485ee4c00Smrg	module=yes
456585ee4c00Smrg	continue
456685ee4c00Smrg	;;
4567692f60a7Smrg
456885ee4c00Smrg      # Tru64 UNIX uses -model [arg] to determine the layout of C++
456985ee4c00Smrg      # classes, name mangling, and exception handling.
457085ee4c00Smrg      # Darwin uses the -arch flag to determine output architecture.
457185ee4c00Smrg      -model|-arch|-isysroot)
457285ee4c00Smrg	compiler_flags="$compiler_flags $arg"
457385ee4c00Smrg	func_append compile_command " $arg"
457485ee4c00Smrg	func_append finalize_command " $arg"
457585ee4c00Smrg	prev=xcompiler
457685ee4c00Smrg	continue
457785ee4c00Smrg	;;
4578692f60a7Smrg
457985ee4c00Smrg      -mt|-mthreads|-kthread|-Kthread|-pthread|-pthreads|--thread-safe|-threads)
458085ee4c00Smrg	compiler_flags="$compiler_flags $arg"
458185ee4c00Smrg	func_append compile_command " $arg"
458285ee4c00Smrg	func_append finalize_command " $arg"
458385ee4c00Smrg	case "$new_inherited_linker_flags " in
458485ee4c00Smrg	    *" $arg "*) ;;
458585ee4c00Smrg	    * ) new_inherited_linker_flags="$new_inherited_linker_flags $arg" ;;
458685ee4c00Smrg	esac
458785ee4c00Smrg	continue
458885ee4c00Smrg	;;
4589692f60a7Smrg
459085ee4c00Smrg      -multi_module)
459185ee4c00Smrg	single_module="${wl}-multi_module"
459285ee4c00Smrg	continue
459385ee4c00Smrg	;;
4594692f60a7Smrg
459585ee4c00Smrg      -no-fast-install)
459685ee4c00Smrg	fast_install=no
459785ee4c00Smrg	continue
459885ee4c00Smrg	;;
4599692f60a7Smrg
460085ee4c00Smrg      -no-install)
460185ee4c00Smrg	case $host in
460285ee4c00Smrg	*-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-*-darwin* | *-cegcc*)
460385ee4c00Smrg	  # The PATH hackery in wrapper scripts is required on Windows
460485ee4c00Smrg	  # and Darwin in order for the loader to find any dlls it needs.
460585ee4c00Smrg	  func_warning "\`-no-install' is ignored for $host"
460685ee4c00Smrg	  func_warning "assuming \`-no-fast-install' instead"
460785ee4c00Smrg	  fast_install=no
460885ee4c00Smrg	  ;;
460985ee4c00Smrg	*) no_install=yes ;;
461085ee4c00Smrg	esac
461185ee4c00Smrg	continue
461285ee4c00Smrg	;;
4613692f60a7Smrg
461485ee4c00Smrg      -no-undefined)
461585ee4c00Smrg	allow_undefined=no
461685ee4c00Smrg	continue
461785ee4c00Smrg	;;
4618692f60a7Smrg
461985ee4c00Smrg      -objectlist)
462085ee4c00Smrg	prev=objectlist
462185ee4c00Smrg	continue
462285ee4c00Smrg	;;
4623692f60a7Smrg
462485ee4c00Smrg      -o) prev=output ;;
4625692f60a7Smrg
462685ee4c00Smrg      -precious-files-regex)
462785ee4c00Smrg	prev=precious_regex
462885ee4c00Smrg	continue
462985ee4c00Smrg	;;
4630692f60a7Smrg
463185ee4c00Smrg      -release)
463285ee4c00Smrg	prev=release
463385ee4c00Smrg	continue
463485ee4c00Smrg	;;
4635692f60a7Smrg
463685ee4c00Smrg      -rpath)
463785ee4c00Smrg	prev=rpath
463885ee4c00Smrg	continue
463985ee4c00Smrg	;;
4640692f60a7Smrg
464185ee4c00Smrg      -R)
464285ee4c00Smrg	prev=xrpath
464385ee4c00Smrg	continue
464485ee4c00Smrg	;;
4645692f60a7Smrg
464685ee4c00Smrg      -R*)
464785ee4c00Smrg	func_stripname '-R' '' "$arg"
464885ee4c00Smrg	dir=$func_stripname_result
464985ee4c00Smrg	# We need an absolute path.
465085ee4c00Smrg	case $dir in
465185ee4c00Smrg	[\\/]* | [A-Za-z]:[\\/]*) ;;
465285ee4c00Smrg	*)
465385ee4c00Smrg	  func_fatal_error "only absolute run-paths are allowed"
465485ee4c00Smrg	  ;;
465585ee4c00Smrg	esac
465685ee4c00Smrg	case "$xrpath " in
465785ee4c00Smrg	*" $dir "*) ;;
465885ee4c00Smrg	*) xrpath="$xrpath $dir" ;;
465985ee4c00Smrg	esac
466085ee4c00Smrg	continue
466185ee4c00Smrg	;;
4662692f60a7Smrg
466385ee4c00Smrg      -shared)
466485ee4c00Smrg	# The effects of -shared are defined in a previous loop.
466585ee4c00Smrg	continue
466685ee4c00Smrg	;;
4667692f60a7Smrg
466885ee4c00Smrg      -shrext)
466985ee4c00Smrg	prev=shrext
467085ee4c00Smrg	continue
467185ee4c00Smrg	;;
4672692f60a7Smrg
467385ee4c00Smrg      -static | -static-libtool-libs)
467485ee4c00Smrg	# The effects of -static are defined in a previous loop.
467585ee4c00Smrg	# We used to do the same as -all-static on platforms that
467685ee4c00Smrg	# didn't have a PIC flag, but the assumption that the effects
467785ee4c00Smrg	# would be equivalent was wrong.  It would break on at least
467885ee4c00Smrg	# Digital Unix and AIX.
467985ee4c00Smrg	continue
468085ee4c00Smrg	;;
4681692f60a7Smrg
468285ee4c00Smrg      -thread-safe)
468385ee4c00Smrg	thread_safe=yes
468485ee4c00Smrg	continue
468585ee4c00Smrg	;;
4686692f60a7Smrg
468785ee4c00Smrg      -version-info)
468885ee4c00Smrg	prev=vinfo
468985ee4c00Smrg	continue
469085ee4c00Smrg	;;
4691692f60a7Smrg
469285ee4c00Smrg      -version-number)
469385ee4c00Smrg	prev=vinfo
469485ee4c00Smrg	vinfo_number=yes
469585ee4c00Smrg	continue
469685ee4c00Smrg	;;
4697692f60a7Smrg
469885ee4c00Smrg      -weak)
469985ee4c00Smrg        prev=weak
470085ee4c00Smrg	continue
470185ee4c00Smrg	;;
4702692f60a7Smrg
470385ee4c00Smrg      -Wc,*)
470485ee4c00Smrg	func_stripname '-Wc,' '' "$arg"
470585ee4c00Smrg	args=$func_stripname_result
470685ee4c00Smrg	arg=
470785ee4c00Smrg	save_ifs="$IFS"; IFS=','
470885ee4c00Smrg	for flag in $args; do
470985ee4c00Smrg	  IFS="$save_ifs"
471085ee4c00Smrg          func_quote_for_eval "$flag"
471185ee4c00Smrg	  arg="$arg $wl$func_quote_for_eval_result"
471285ee4c00Smrg	  compiler_flags="$compiler_flags $func_quote_for_eval_result"
471385ee4c00Smrg	done
471485ee4c00Smrg	IFS="$save_ifs"
471585ee4c00Smrg	func_stripname ' ' '' "$arg"
471685ee4c00Smrg	arg=$func_stripname_result
471785ee4c00Smrg	;;
4718692f60a7Smrg
471985ee4c00Smrg      -Wl,*)
472085ee4c00Smrg	func_stripname '-Wl,' '' "$arg"
472185ee4c00Smrg	args=$func_stripname_result
472285ee4c00Smrg	arg=
472385ee4c00Smrg	save_ifs="$IFS"; IFS=','
472485ee4c00Smrg	for flag in $args; do
472585ee4c00Smrg	  IFS="$save_ifs"
472685ee4c00Smrg          func_quote_for_eval "$flag"
472785ee4c00Smrg	  arg="$arg $wl$func_quote_for_eval_result"
472885ee4c00Smrg	  compiler_flags="$compiler_flags $wl$func_quote_for_eval_result"
472985ee4c00Smrg	  linker_flags="$linker_flags $func_quote_for_eval_result"
473085ee4c00Smrg	done
473185ee4c00Smrg	IFS="$save_ifs"
473285ee4c00Smrg	func_stripname ' ' '' "$arg"
473385ee4c00Smrg	arg=$func_stripname_result
473485ee4c00Smrg	;;
4735692f60a7Smrg
473685ee4c00Smrg      -Xcompiler)
473785ee4c00Smrg	prev=xcompiler
473885ee4c00Smrg	continue
473985ee4c00Smrg	;;
4740692f60a7Smrg
474185ee4c00Smrg      -Xlinker)
474285ee4c00Smrg	prev=xlinker
474385ee4c00Smrg	continue
474485ee4c00Smrg	;;
4745692f60a7Smrg
474685ee4c00Smrg      -XCClinker)
474785ee4c00Smrg	prev=xcclinker
474885ee4c00Smrg	continue
474985ee4c00Smrg	;;
4750692f60a7Smrg
475185ee4c00Smrg      # -msg_* for osf cc
475285ee4c00Smrg      -msg_*)
475385ee4c00Smrg	func_quote_for_eval "$arg"
475485ee4c00Smrg	arg="$func_quote_for_eval_result"
475585ee4c00Smrg	;;
4756692f60a7Smrg
475785ee4c00Smrg      # -64, -mips[0-9] enable 64-bit mode on the SGI compiler
475885ee4c00Smrg      # -r[0-9][0-9]* specifies the processor on the SGI compiler
475985ee4c00Smrg      # -xarch=*, -xtarget=* enable 64-bit mode on the Sun compiler
476085ee4c00Smrg      # +DA*, +DD* enable 64-bit mode on the HP compiler
476185ee4c00Smrg      # -q* pass through compiler args for the IBM compiler
476285ee4c00Smrg      # -m*, -t[45]*, -txscale* pass through architecture-specific
476385ee4c00Smrg      # compiler args for GCC
476485ee4c00Smrg      # -F/path gives path to uninstalled frameworks, gcc on darwin
476585ee4c00Smrg      # -p, -pg, --coverage, -fprofile-* pass through profiling flag for GCC
476685ee4c00Smrg      # @file GCC response files
476785ee4c00Smrg      -64|-mips[0-9]|-r[0-9][0-9]*|-xarch=*|-xtarget=*|+DA*|+DD*|-q*|-m*| \
476885ee4c00Smrg      -t[45]*|-txscale*|-p|-pg|--coverage|-fprofile-*|-F*|@*)
476985ee4c00Smrg        func_quote_for_eval "$arg"
477085ee4c00Smrg	arg="$func_quote_for_eval_result"
477185ee4c00Smrg        func_append compile_command " $arg"
477285ee4c00Smrg        func_append finalize_command " $arg"
477385ee4c00Smrg        compiler_flags="$compiler_flags $arg"
477485ee4c00Smrg        continue
477585ee4c00Smrg        ;;
4776692f60a7Smrg
477785ee4c00Smrg      # Some other compiler flag.
477885ee4c00Smrg      -* | +*)
477985ee4c00Smrg        func_quote_for_eval "$arg"
478085ee4c00Smrg	arg="$func_quote_for_eval_result"
478185ee4c00Smrg	;;
4782692f60a7Smrg
478385ee4c00Smrg      *.$objext)
478485ee4c00Smrg	# A standard object.
478585ee4c00Smrg	objs="$objs $arg"
478685ee4c00Smrg	;;
4787692f60a7Smrg
478885ee4c00Smrg      *.lo)
478985ee4c00Smrg	# A libtool-controlled object.
4790692f60a7Smrg
479185ee4c00Smrg	# Check to see that this really is a libtool object.
479285ee4c00Smrg	if func_lalib_unsafe_p "$arg"; then
479385ee4c00Smrg	  pic_object=
479485ee4c00Smrg	  non_pic_object=
4795692f60a7Smrg
479685ee4c00Smrg	  # Read the .lo file
479785ee4c00Smrg	  func_source "$arg"
4798692f60a7Smrg
479985ee4c00Smrg	  if test -z "$pic_object" ||
480085ee4c00Smrg	     test -z "$non_pic_object" ||
480185ee4c00Smrg	     test "$pic_object" = none &&
480285ee4c00Smrg	     test "$non_pic_object" = none; then
480385ee4c00Smrg	    func_fatal_error "cannot find name of object for \`$arg'"
480485ee4c00Smrg	  fi
4805692f60a7Smrg
480685ee4c00Smrg	  # Extract subdirectory from the argument.
480785ee4c00Smrg	  func_dirname "$arg" "/" ""
480885ee4c00Smrg	  xdir="$func_dirname_result"
480954569438Smrg
481085ee4c00Smrg	  if test "$pic_object" != none; then
481185ee4c00Smrg	    # Prepend the subdirectory the object is found in.
481285ee4c00Smrg	    pic_object="$xdir$pic_object"
4813692f60a7Smrg
481485ee4c00Smrg	    if test "$prev" = dlfiles; then
481585ee4c00Smrg	      if test "$build_libtool_libs" = yes && test "$dlopen_support" = yes; then
481685ee4c00Smrg		dlfiles="$dlfiles $pic_object"
481785ee4c00Smrg		prev=
481885ee4c00Smrg		continue
481985ee4c00Smrg	      else
482085ee4c00Smrg		# If libtool objects are unsupported, then we need to preload.
482185ee4c00Smrg		prev=dlprefiles
482285ee4c00Smrg	      fi
482385ee4c00Smrg	    fi
4824692f60a7Smrg
482585ee4c00Smrg	    # CHECK ME:  I think I busted this.  -Ossama
482685ee4c00Smrg	    if test "$prev" = dlprefiles; then
482785ee4c00Smrg	      # Preload the old-style object.
482885ee4c00Smrg	      dlprefiles="$dlprefiles $pic_object"
482985ee4c00Smrg	      prev=
483085ee4c00Smrg	    fi
4831692f60a7Smrg
483285ee4c00Smrg	    # A PIC object.
483385ee4c00Smrg	    func_append libobjs " $pic_object"
483485ee4c00Smrg	    arg="$pic_object"
483585ee4c00Smrg	  fi
4836692f60a7Smrg
483785ee4c00Smrg	  # Non-PIC object.
483885ee4c00Smrg	  if test "$non_pic_object" != none; then
483985ee4c00Smrg	    # Prepend the subdirectory the object is found in.
484085ee4c00Smrg	    non_pic_object="$xdir$non_pic_object"
4841692f60a7Smrg
484285ee4c00Smrg	    # A standard non-PIC object
484385ee4c00Smrg	    func_append non_pic_objects " $non_pic_object"
484485ee4c00Smrg	    if test -z "$pic_object" || test "$pic_object" = none ; then
484585ee4c00Smrg	      arg="$non_pic_object"
484685ee4c00Smrg	    fi
484785ee4c00Smrg	  else
484885ee4c00Smrg	    # If the PIC object exists, use it instead.
484985ee4c00Smrg	    # $xdir was prepended to $pic_object above.
485085ee4c00Smrg	    non_pic_object="$pic_object"
485185ee4c00Smrg	    func_append non_pic_objects " $non_pic_object"
485285ee4c00Smrg	  fi
485385ee4c00Smrg	else
485485ee4c00Smrg	  # Only an error if not doing a dry-run.
485585ee4c00Smrg	  if $opt_dry_run; then
485685ee4c00Smrg	    # Extract subdirectory from the argument.
485785ee4c00Smrg	    func_dirname "$arg" "/" ""
485885ee4c00Smrg	    xdir="$func_dirname_result"
485985ee4c00Smrg
486085ee4c00Smrg	    func_lo2o "$arg"
486185ee4c00Smrg	    pic_object=$xdir$objdir/$func_lo2o_result
486285ee4c00Smrg	    non_pic_object=$xdir$func_lo2o_result
486385ee4c00Smrg	    func_append libobjs " $pic_object"
486485ee4c00Smrg	    func_append non_pic_objects " $non_pic_object"
486585ee4c00Smrg	  else
486685ee4c00Smrg	    func_fatal_error "\`$arg' is not a valid libtool object"
486785ee4c00Smrg	  fi
486885ee4c00Smrg	fi
486985ee4c00Smrg	;;
4870692f60a7Smrg
487185ee4c00Smrg      *.$libext)
487285ee4c00Smrg	# An archive.
487385ee4c00Smrg	deplibs="$deplibs $arg"
487485ee4c00Smrg	old_deplibs="$old_deplibs $arg"
487585ee4c00Smrg	continue
487685ee4c00Smrg	;;
487785ee4c00Smrg
487885ee4c00Smrg      *.la)
487985ee4c00Smrg	# A libtool-controlled library.
488085ee4c00Smrg
488185ee4c00Smrg	if test "$prev" = dlfiles; then
488285ee4c00Smrg	  # This library was specified with -dlopen.
488385ee4c00Smrg	  dlfiles="$dlfiles $arg"
488485ee4c00Smrg	  prev=
488585ee4c00Smrg	elif test "$prev" = dlprefiles; then
488685ee4c00Smrg	  # The library was specified with -dlpreopen.
488785ee4c00Smrg	  dlprefiles="$dlprefiles $arg"
488885ee4c00Smrg	  prev=
488985ee4c00Smrg	else
489085ee4c00Smrg	  deplibs="$deplibs $arg"
489185ee4c00Smrg	fi
489285ee4c00Smrg	continue
489385ee4c00Smrg	;;
489485ee4c00Smrg
489585ee4c00Smrg      # Some other compiler argument.
489685ee4c00Smrg      *)
489785ee4c00Smrg	# Unknown arguments in both finalize_command and compile_command need
489885ee4c00Smrg	# to be aesthetically quoted because they are evaled later.
489985ee4c00Smrg	func_quote_for_eval "$arg"
490085ee4c00Smrg	arg="$func_quote_for_eval_result"
490185ee4c00Smrg	;;
490285ee4c00Smrg      esac # arg
490385ee4c00Smrg
490485ee4c00Smrg      # Now actually substitute the argument into the commands.
490585ee4c00Smrg      if test -n "$arg"; then
490685ee4c00Smrg	func_append compile_command " $arg"
490785ee4c00Smrg	func_append finalize_command " $arg"
490885ee4c00Smrg      fi
490985ee4c00Smrg    done # argument parsing loop
491085ee4c00Smrg
491185ee4c00Smrg    test -n "$prev" && \
491285ee4c00Smrg      func_fatal_help "the \`$prevarg' option requires an argument"
491385ee4c00Smrg
491485ee4c00Smrg    if test "$export_dynamic" = yes && test -n "$export_dynamic_flag_spec"; then
491585ee4c00Smrg      eval arg=\"$export_dynamic_flag_spec\"
491685ee4c00Smrg      func_append compile_command " $arg"
491785ee4c00Smrg      func_append finalize_command " $arg"
491885ee4c00Smrg    fi
491985ee4c00Smrg
492085ee4c00Smrg    oldlibs=
492185ee4c00Smrg    # calculate the name of the file, without its directory
492285ee4c00Smrg    func_basename "$output"
492385ee4c00Smrg    outputname="$func_basename_result"
492485ee4c00Smrg    libobjs_save="$libobjs"
492585ee4c00Smrg
492685ee4c00Smrg    if test -n "$shlibpath_var"; then
492785ee4c00Smrg      # get the directories listed in $shlibpath_var
492885ee4c00Smrg      eval shlib_search_path=\`\$ECHO \"X\${$shlibpath_var}\" \| \$Xsed -e \'s/:/ /g\'\`
492985ee4c00Smrg    else
493085ee4c00Smrg      shlib_search_path=
493185ee4c00Smrg    fi
493285ee4c00Smrg    eval sys_lib_search_path=\"$sys_lib_search_path_spec\"
493385ee4c00Smrg    eval sys_lib_dlsearch_path=\"$sys_lib_dlsearch_path_spec\"
493485ee4c00Smrg
493585ee4c00Smrg    func_dirname "$output" "/" ""
493685ee4c00Smrg    output_objdir="$func_dirname_result$objdir"
493785ee4c00Smrg    # Create the object directory.
493885ee4c00Smrg    func_mkdir_p "$output_objdir"
493985ee4c00Smrg
494085ee4c00Smrg    # Determine the type of output
494185ee4c00Smrg    case $output in
494285ee4c00Smrg    "")
494385ee4c00Smrg      func_fatal_help "you must specify an output file"
494485ee4c00Smrg      ;;
494585ee4c00Smrg    *.$libext) linkmode=oldlib ;;
494685ee4c00Smrg    *.lo | *.$objext) linkmode=obj ;;
494785ee4c00Smrg    *.la) linkmode=lib ;;
494885ee4c00Smrg    *) linkmode=prog ;; # Anything else should be a program.
494985ee4c00Smrg    esac
495085ee4c00Smrg
495185ee4c00Smrg    specialdeplibs=
495285ee4c00Smrg
495385ee4c00Smrg    libs=
495485ee4c00Smrg    # Find all interdependent deplibs by searching for libraries
495585ee4c00Smrg    # that are linked more than once (e.g. -la -lb -la)
495685ee4c00Smrg    for deplib in $deplibs; do
495785ee4c00Smrg      if $opt_duplicate_deps ; then
495885ee4c00Smrg	case "$libs " in
495985ee4c00Smrg	*" $deplib "*) specialdeplibs="$specialdeplibs $deplib" ;;
496085ee4c00Smrg	esac
496185ee4c00Smrg      fi
496285ee4c00Smrg      libs="$libs $deplib"
496385ee4c00Smrg    done
496485ee4c00Smrg
496585ee4c00Smrg    if test "$linkmode" = lib; then
496685ee4c00Smrg      libs="$predeps $libs $compiler_lib_search_path $postdeps"
496785ee4c00Smrg
496885ee4c00Smrg      # Compute libraries that are listed more than once in $predeps
496985ee4c00Smrg      # $postdeps and mark them as special (i.e., whose duplicates are
497085ee4c00Smrg      # not to be eliminated).
497185ee4c00Smrg      pre_post_deps=
497285ee4c00Smrg      if $opt_duplicate_compiler_generated_deps; then
497385ee4c00Smrg	for pre_post_dep in $predeps $postdeps; do
497485ee4c00Smrg	  case "$pre_post_deps " in
497585ee4c00Smrg	  *" $pre_post_dep "*) specialdeplibs="$specialdeplibs $pre_post_deps" ;;
497685ee4c00Smrg	  esac
497785ee4c00Smrg	  pre_post_deps="$pre_post_deps $pre_post_dep"
497885ee4c00Smrg	done
497985ee4c00Smrg      fi
498085ee4c00Smrg      pre_post_deps=
498185ee4c00Smrg    fi
498285ee4c00Smrg
498385ee4c00Smrg    deplibs=
498485ee4c00Smrg    newdependency_libs=
498585ee4c00Smrg    newlib_search_path=
498685ee4c00Smrg    need_relink=no # whether we're linking any uninstalled libtool libraries
498785ee4c00Smrg    notinst_deplibs= # not-installed libtool libraries
498885ee4c00Smrg    notinst_path= # paths that contain not-installed libtool libraries
498985ee4c00Smrg
499085ee4c00Smrg    case $linkmode in
499185ee4c00Smrg    lib)
499285ee4c00Smrg	passes="conv dlpreopen link"
499385ee4c00Smrg	for file in $dlfiles $dlprefiles; do
499485ee4c00Smrg	  case $file in
499585ee4c00Smrg	  *.la) ;;
499685ee4c00Smrg	  *)
499785ee4c00Smrg	    func_fatal_help "libraries can \`-dlopen' only libtool libraries: $file"
499885ee4c00Smrg	    ;;
499985ee4c00Smrg	  esac
500085ee4c00Smrg	done
500185ee4c00Smrg	;;
500285ee4c00Smrg    prog)
500385ee4c00Smrg	compile_deplibs=
500485ee4c00Smrg	finalize_deplibs=
500585ee4c00Smrg	alldeplibs=no
500685ee4c00Smrg	newdlfiles=
500785ee4c00Smrg	newdlprefiles=
500885ee4c00Smrg	passes="conv scan dlopen dlpreopen link"
500985ee4c00Smrg	;;
501085ee4c00Smrg    *)  passes="conv"
501185ee4c00Smrg	;;
501285ee4c00Smrg    esac
501385ee4c00Smrg
501485ee4c00Smrg    for pass in $passes; do
501585ee4c00Smrg      # The preopen pass in lib mode reverses $deplibs; put it back here
501685ee4c00Smrg      # so that -L comes before libs that need it for instance...
501785ee4c00Smrg      if test "$linkmode,$pass" = "lib,link"; then
501885ee4c00Smrg	## FIXME: Find the place where the list is rebuilt in the wrong
501985ee4c00Smrg	##        order, and fix it there properly
502085ee4c00Smrg        tmp_deplibs=
502185ee4c00Smrg	for deplib in $deplibs; do
502285ee4c00Smrg	  tmp_deplibs="$deplib $tmp_deplibs"
502385ee4c00Smrg	done
502485ee4c00Smrg	deplibs="$tmp_deplibs"
502585ee4c00Smrg      fi
502685ee4c00Smrg
502785ee4c00Smrg      if test "$linkmode,$pass" = "lib,link" ||
502885ee4c00Smrg	 test "$linkmode,$pass" = "prog,scan"; then
502985ee4c00Smrg	libs="$deplibs"
503085ee4c00Smrg	deplibs=
503185ee4c00Smrg      fi
503285ee4c00Smrg      if test "$linkmode" = prog; then
503385ee4c00Smrg	case $pass in
503485ee4c00Smrg	dlopen) libs="$dlfiles" ;;
503585ee4c00Smrg	dlpreopen) libs="$dlprefiles" ;;
503685ee4c00Smrg	link) libs="$deplibs %DEPLIBS% $dependency_libs" ;;
503785ee4c00Smrg	esac
503885ee4c00Smrg      fi
503985ee4c00Smrg      if test "$linkmode,$pass" = "lib,dlpreopen"; then
504085ee4c00Smrg	# Collect and forward deplibs of preopened libtool libs
504185ee4c00Smrg	for lib in $dlprefiles; do
504285ee4c00Smrg	  # Ignore non-libtool-libs
504385ee4c00Smrg	  dependency_libs=
504485ee4c00Smrg	  case $lib in
504585ee4c00Smrg	  *.la)	func_source "$lib" ;;
504685ee4c00Smrg	  esac
504785ee4c00Smrg
504885ee4c00Smrg	  # Collect preopened libtool deplibs, except any this library
504985ee4c00Smrg	  # has declared as weak libs
505085ee4c00Smrg	  for deplib in $dependency_libs; do
505185ee4c00Smrg            deplib_base=`$ECHO "X$deplib" | $Xsed -e "$basename"`
505285ee4c00Smrg	    case " $weak_libs " in
505385ee4c00Smrg	    *" $deplib_base "*) ;;
505485ee4c00Smrg	    *) deplibs="$deplibs $deplib" ;;
505585ee4c00Smrg	    esac
505685ee4c00Smrg	  done
505785ee4c00Smrg	done
505885ee4c00Smrg	libs="$dlprefiles"
505985ee4c00Smrg      fi
506085ee4c00Smrg      if test "$pass" = dlopen; then
506185ee4c00Smrg	# Collect dlpreopened libraries
506285ee4c00Smrg	save_deplibs="$deplibs"
506385ee4c00Smrg	deplibs=
506485ee4c00Smrg      fi
506585ee4c00Smrg
506685ee4c00Smrg      for deplib in $libs; do
506785ee4c00Smrg	lib=
506885ee4c00Smrg	found=no
506985ee4c00Smrg	case $deplib in
507085ee4c00Smrg	-mt|-mthreads|-kthread|-Kthread|-pthread|-pthreads|--thread-safe|-threads)
507185ee4c00Smrg	  if test "$linkmode,$pass" = "prog,link"; then
507285ee4c00Smrg	    compile_deplibs="$deplib $compile_deplibs"
507385ee4c00Smrg	    finalize_deplibs="$deplib $finalize_deplibs"
507485ee4c00Smrg	  else
507585ee4c00Smrg	    compiler_flags="$compiler_flags $deplib"
507685ee4c00Smrg	    if test "$linkmode" = lib ; then
507785ee4c00Smrg		case "$new_inherited_linker_flags " in
507885ee4c00Smrg		    *" $deplib "*) ;;
507985ee4c00Smrg		    * ) new_inherited_linker_flags="$new_inherited_linker_flags $deplib" ;;
508085ee4c00Smrg		esac
508185ee4c00Smrg	    fi
508285ee4c00Smrg	  fi
508385ee4c00Smrg	  continue
508485ee4c00Smrg	  ;;
508585ee4c00Smrg	-l*)
508685ee4c00Smrg	  if test "$linkmode" != lib && test "$linkmode" != prog; then
508785ee4c00Smrg	    func_warning "\`-l' is ignored for archives/objects"
508885ee4c00Smrg	    continue
508985ee4c00Smrg	  fi
509085ee4c00Smrg	  func_stripname '-l' '' "$deplib"
509185ee4c00Smrg	  name=$func_stripname_result
509285ee4c00Smrg	  if test "$linkmode" = lib; then
509385ee4c00Smrg	    searchdirs="$newlib_search_path $lib_search_path $compiler_lib_search_dirs $sys_lib_search_path $shlib_search_path"
509485ee4c00Smrg	  else
509585ee4c00Smrg	    searchdirs="$newlib_search_path $lib_search_path $sys_lib_search_path $shlib_search_path"
509685ee4c00Smrg	  fi
509785ee4c00Smrg	  for searchdir in $searchdirs; do
509885ee4c00Smrg	    for search_ext in .la $std_shrext .so .a; do
509985ee4c00Smrg	      # Search the libtool library
510085ee4c00Smrg	      lib="$searchdir/lib${name}${search_ext}"
510185ee4c00Smrg	      if test -f "$lib"; then
510285ee4c00Smrg		if test "$search_ext" = ".la"; then
510385ee4c00Smrg		  found=yes
510485ee4c00Smrg		else
510585ee4c00Smrg		  found=no
510685ee4c00Smrg		fi
510785ee4c00Smrg		break 2
510885ee4c00Smrg	      fi
510985ee4c00Smrg	    done
511085ee4c00Smrg	  done
511185ee4c00Smrg	  if test "$found" != yes; then
511285ee4c00Smrg	    # deplib doesn't seem to be a libtool library
511385ee4c00Smrg	    if test "$linkmode,$pass" = "prog,link"; then
511485ee4c00Smrg	      compile_deplibs="$deplib $compile_deplibs"
511585ee4c00Smrg	      finalize_deplibs="$deplib $finalize_deplibs"
511685ee4c00Smrg	    else
511785ee4c00Smrg	      deplibs="$deplib $deplibs"
511885ee4c00Smrg	      test "$linkmode" = lib && newdependency_libs="$deplib $newdependency_libs"
511985ee4c00Smrg	    fi
512085ee4c00Smrg	    continue
512185ee4c00Smrg	  else # deplib is a libtool library
512285ee4c00Smrg	    # If $allow_libtool_libs_with_static_runtimes && $deplib is a stdlib,
512385ee4c00Smrg	    # We need to do some special things here, and not later.
512485ee4c00Smrg	    if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then
512585ee4c00Smrg	      case " $predeps $postdeps " in
512685ee4c00Smrg	      *" $deplib "*)
512785ee4c00Smrg		if func_lalib_p "$lib"; then
512885ee4c00Smrg		  library_names=
512985ee4c00Smrg		  old_library=
513085ee4c00Smrg		  func_source "$lib"
513185ee4c00Smrg		  for l in $old_library $library_names; do
513285ee4c00Smrg		    ll="$l"
513385ee4c00Smrg		  done
513485ee4c00Smrg		  if test "X$ll" = "X$old_library" ; then # only static version available
513585ee4c00Smrg		    found=no
513685ee4c00Smrg		    func_dirname "$lib" "" "."
513785ee4c00Smrg		    ladir="$func_dirname_result"
513885ee4c00Smrg		    lib=$ladir/$old_library
513985ee4c00Smrg		    if test "$linkmode,$pass" = "prog,link"; then
514085ee4c00Smrg		      compile_deplibs="$deplib $compile_deplibs"
514185ee4c00Smrg		      finalize_deplibs="$deplib $finalize_deplibs"
514285ee4c00Smrg		    else
514385ee4c00Smrg		      deplibs="$deplib $deplibs"
514485ee4c00Smrg		      test "$linkmode" = lib && newdependency_libs="$deplib $newdependency_libs"
514585ee4c00Smrg		    fi
514685ee4c00Smrg		    continue
514785ee4c00Smrg		  fi
514885ee4c00Smrg		fi
514985ee4c00Smrg		;;
515085ee4c00Smrg	      *) ;;
515185ee4c00Smrg	      esac
515285ee4c00Smrg	    fi
515385ee4c00Smrg	  fi
515485ee4c00Smrg	  ;; # -l
515585ee4c00Smrg	*.ltframework)
515685ee4c00Smrg	  if test "$linkmode,$pass" = "prog,link"; then
515785ee4c00Smrg	    compile_deplibs="$deplib $compile_deplibs"
515885ee4c00Smrg	    finalize_deplibs="$deplib $finalize_deplibs"
515985ee4c00Smrg	  else
516085ee4c00Smrg	    deplibs="$deplib $deplibs"
516185ee4c00Smrg	    if test "$linkmode" = lib ; then
516285ee4c00Smrg		case "$new_inherited_linker_flags " in
516385ee4c00Smrg		    *" $deplib "*) ;;
516485ee4c00Smrg		    * ) new_inherited_linker_flags="$new_inherited_linker_flags $deplib" ;;
516585ee4c00Smrg		esac
516685ee4c00Smrg	    fi
516785ee4c00Smrg	  fi
516885ee4c00Smrg	  continue
516985ee4c00Smrg	  ;;
517085ee4c00Smrg	-L*)
517185ee4c00Smrg	  case $linkmode in
517285ee4c00Smrg	  lib)
517385ee4c00Smrg	    deplibs="$deplib $deplibs"
517485ee4c00Smrg	    test "$pass" = conv && continue
517585ee4c00Smrg	    newdependency_libs="$deplib $newdependency_libs"
517685ee4c00Smrg	    func_stripname '-L' '' "$deplib"
517785ee4c00Smrg	    newlib_search_path="$newlib_search_path $func_stripname_result"
517885ee4c00Smrg	    ;;
517985ee4c00Smrg	  prog)
518085ee4c00Smrg	    if test "$pass" = conv; then
518185ee4c00Smrg	      deplibs="$deplib $deplibs"
518285ee4c00Smrg	      continue
518385ee4c00Smrg	    fi
518485ee4c00Smrg	    if test "$pass" = scan; then
518585ee4c00Smrg	      deplibs="$deplib $deplibs"
518685ee4c00Smrg	    else
518785ee4c00Smrg	      compile_deplibs="$deplib $compile_deplibs"
518885ee4c00Smrg	      finalize_deplibs="$deplib $finalize_deplibs"
518985ee4c00Smrg	    fi
519085ee4c00Smrg	    func_stripname '-L' '' "$deplib"
519185ee4c00Smrg	    newlib_search_path="$newlib_search_path $func_stripname_result"
519285ee4c00Smrg	    ;;
519385ee4c00Smrg	  *)
519485ee4c00Smrg	    func_warning "\`-L' is ignored for archives/objects"
519585ee4c00Smrg	    ;;
519685ee4c00Smrg	  esac # linkmode
519785ee4c00Smrg	  continue
519885ee4c00Smrg	  ;; # -L
519985ee4c00Smrg	-R*)
520085ee4c00Smrg	  if test "$pass" = link; then
520185ee4c00Smrg	    func_stripname '-R' '' "$deplib"
520285ee4c00Smrg	    dir=$func_stripname_result
520385ee4c00Smrg	    # Make sure the xrpath contains only unique directories.
520485ee4c00Smrg	    case "$xrpath " in
520585ee4c00Smrg	    *" $dir "*) ;;
520685ee4c00Smrg	    *) xrpath="$xrpath $dir" ;;
520785ee4c00Smrg	    esac
520885ee4c00Smrg	  fi
520985ee4c00Smrg	  deplibs="$deplib $deplibs"
521085ee4c00Smrg	  continue
521185ee4c00Smrg	  ;;
521285ee4c00Smrg	*.la) lib="$deplib" ;;
521385ee4c00Smrg	*.$libext)
521485ee4c00Smrg	  if test "$pass" = conv; then
521585ee4c00Smrg	    deplibs="$deplib $deplibs"
521685ee4c00Smrg	    continue
521785ee4c00Smrg	  fi
521885ee4c00Smrg	  case $linkmode in
521985ee4c00Smrg	  lib)
522085ee4c00Smrg	    # Linking convenience modules into shared libraries is allowed,
522185ee4c00Smrg	    # but linking other static libraries is non-portable.
522285ee4c00Smrg	    case " $dlpreconveniencelibs " in
522385ee4c00Smrg	    *" $deplib "*) ;;
522485ee4c00Smrg	    *)
522585ee4c00Smrg	      valid_a_lib=no
522685ee4c00Smrg	      case $deplibs_check_method in
522785ee4c00Smrg		match_pattern*)
522885ee4c00Smrg		  set dummy $deplibs_check_method; shift
522985ee4c00Smrg		  match_pattern_regex=`expr "$deplibs_check_method" : "$1 \(.*\)"`
523085ee4c00Smrg		  if eval "\$ECHO \"X$deplib\"" 2>/dev/null | $Xsed -e 10q \
523185ee4c00Smrg		    | $EGREP "$match_pattern_regex" > /dev/null; then
523285ee4c00Smrg		    valid_a_lib=yes
523385ee4c00Smrg		  fi
523485ee4c00Smrg		;;
523585ee4c00Smrg		pass_all)
523685ee4c00Smrg		  valid_a_lib=yes
523785ee4c00Smrg		;;
523885ee4c00Smrg	      esac
523985ee4c00Smrg	      if test "$valid_a_lib" != yes; then
524085ee4c00Smrg		$ECHO
524185ee4c00Smrg		$ECHO "*** Warning: Trying to link with static lib archive $deplib."
524285ee4c00Smrg		$ECHO "*** I have the capability to make that library automatically link in when"
524385ee4c00Smrg		$ECHO "*** you link to this library.  But I can only do this if you have a"
524485ee4c00Smrg		$ECHO "*** shared version of the library, which you do not appear to have"
524585ee4c00Smrg		$ECHO "*** because the file extensions .$libext of this argument makes me believe"
524685ee4c00Smrg		$ECHO "*** that it is just a static archive that I should not use here."
524785ee4c00Smrg	      else
524885ee4c00Smrg		$ECHO
524985ee4c00Smrg		$ECHO "*** Warning: Linking the shared library $output against the"
525085ee4c00Smrg		$ECHO "*** static library $deplib is not portable!"
525185ee4c00Smrg		deplibs="$deplib $deplibs"
525285ee4c00Smrg	      fi
525385ee4c00Smrg	      ;;
525485ee4c00Smrg	    esac
525585ee4c00Smrg	    continue
525685ee4c00Smrg	    ;;
525785ee4c00Smrg	  prog)
525885ee4c00Smrg	    if test "$pass" != link; then
525985ee4c00Smrg	      deplibs="$deplib $deplibs"
526085ee4c00Smrg	    else
526185ee4c00Smrg	      compile_deplibs="$deplib $compile_deplibs"
526285ee4c00Smrg	      finalize_deplibs="$deplib $finalize_deplibs"
526385ee4c00Smrg	    fi
526485ee4c00Smrg	    continue
526585ee4c00Smrg	    ;;
526685ee4c00Smrg	  esac # linkmode
526785ee4c00Smrg	  ;; # *.$libext
526885ee4c00Smrg	*.lo | *.$objext)
526985ee4c00Smrg	  if test "$pass" = conv; then
527085ee4c00Smrg	    deplibs="$deplib $deplibs"
527185ee4c00Smrg	  elif test "$linkmode" = prog; then
527285ee4c00Smrg	    if test "$pass" = dlpreopen || test "$dlopen_support" != yes || test "$build_libtool_libs" = no; then
527385ee4c00Smrg	      # If there is no dlopen support or we're linking statically,
527485ee4c00Smrg	      # we need to preload.
527585ee4c00Smrg	      newdlprefiles="$newdlprefiles $deplib"
527685ee4c00Smrg	      compile_deplibs="$deplib $compile_deplibs"
527785ee4c00Smrg	      finalize_deplibs="$deplib $finalize_deplibs"
527885ee4c00Smrg	    else
527985ee4c00Smrg	      newdlfiles="$newdlfiles $deplib"
528085ee4c00Smrg	    fi
528185ee4c00Smrg	  fi
528285ee4c00Smrg	  continue
528385ee4c00Smrg	  ;;
528485ee4c00Smrg	%DEPLIBS%)
528585ee4c00Smrg	  alldeplibs=yes
528685ee4c00Smrg	  continue
528785ee4c00Smrg	  ;;
528885ee4c00Smrg	esac # case $deplib
528985ee4c00Smrg
529085ee4c00Smrg	if test "$found" = yes || test -f "$lib"; then :
529185ee4c00Smrg	else
529285ee4c00Smrg	  func_fatal_error "cannot find the library \`$lib' or unhandled argument \`$deplib'"
529385ee4c00Smrg	fi
529485ee4c00Smrg
529585ee4c00Smrg	# Check to see that this really is a libtool archive.
529685ee4c00Smrg	func_lalib_unsafe_p "$lib" \
529785ee4c00Smrg	  || func_fatal_error "\`$lib' is not a valid libtool archive"
529885ee4c00Smrg
529985ee4c00Smrg	func_dirname "$lib" "" "."
530085ee4c00Smrg	ladir="$func_dirname_result"
530185ee4c00Smrg
530285ee4c00Smrg	dlname=
530385ee4c00Smrg	dlopen=
530485ee4c00Smrg	dlpreopen=
530585ee4c00Smrg	libdir=
530685ee4c00Smrg	library_names=
530785ee4c00Smrg	old_library=
530885ee4c00Smrg	inherited_linker_flags=
530985ee4c00Smrg	# If the library was installed with an old release of libtool,
531085ee4c00Smrg	# it will not redefine variables installed, or shouldnotlink
531185ee4c00Smrg	installed=yes
531285ee4c00Smrg	shouldnotlink=no
531385ee4c00Smrg	avoidtemprpath=
531485ee4c00Smrg
531585ee4c00Smrg
531685ee4c00Smrg	# Read the .la file
531785ee4c00Smrg	func_source "$lib"
531885ee4c00Smrg
531985ee4c00Smrg	# Convert "-framework foo" to "foo.ltframework"
532085ee4c00Smrg	if test -n "$inherited_linker_flags"; then
532185ee4c00Smrg	  tmp_inherited_linker_flags=`$ECHO "X$inherited_linker_flags" | $Xsed -e 's/-framework \([^ $]*\)/\1.ltframework/g'`
532285ee4c00Smrg	  for tmp_inherited_linker_flag in $tmp_inherited_linker_flags; do
532385ee4c00Smrg	    case " $new_inherited_linker_flags " in
532485ee4c00Smrg	      *" $tmp_inherited_linker_flag "*) ;;
532585ee4c00Smrg	      *) new_inherited_linker_flags="$new_inherited_linker_flags $tmp_inherited_linker_flag";;
532685ee4c00Smrg	    esac
532785ee4c00Smrg	  done
532885ee4c00Smrg	fi
532985ee4c00Smrg	dependency_libs=`$ECHO "X $dependency_libs" | $Xsed -e 's% \([^ $]*\).ltframework% -framework \1%g'`
533085ee4c00Smrg	if test "$linkmode,$pass" = "lib,link" ||
533185ee4c00Smrg	   test "$linkmode,$pass" = "prog,scan" ||
533285ee4c00Smrg	   { test "$linkmode" != prog && test "$linkmode" != lib; }; then
533385ee4c00Smrg	  test -n "$dlopen" && dlfiles="$dlfiles $dlopen"
533485ee4c00Smrg	  test -n "$dlpreopen" && dlprefiles="$dlprefiles $dlpreopen"
533585ee4c00Smrg	fi
533685ee4c00Smrg
533785ee4c00Smrg	if test "$pass" = conv; then
533885ee4c00Smrg	  # Only check for convenience libraries
533985ee4c00Smrg	  deplibs="$lib $deplibs"
534085ee4c00Smrg	  if test -z "$libdir"; then
534185ee4c00Smrg	    if test -z "$old_library"; then
534285ee4c00Smrg	      func_fatal_error "cannot find name of link library for \`$lib'"
534385ee4c00Smrg	    fi
534485ee4c00Smrg	    # It is a libtool convenience library, so add in its objects.
534585ee4c00Smrg	    convenience="$convenience $ladir/$objdir/$old_library"
534685ee4c00Smrg	    old_convenience="$old_convenience $ladir/$objdir/$old_library"
534785ee4c00Smrg	  elif test "$linkmode" != prog && test "$linkmode" != lib; then
534885ee4c00Smrg	    func_fatal_error "\`$lib' is not a convenience library"
534985ee4c00Smrg	  fi
535085ee4c00Smrg	  tmp_libs=
535185ee4c00Smrg	  for deplib in $dependency_libs; do
535285ee4c00Smrg	    deplibs="$deplib $deplibs"
535385ee4c00Smrg	    if $opt_duplicate_deps ; then
535485ee4c00Smrg	      case "$tmp_libs " in
535585ee4c00Smrg	      *" $deplib "*) specialdeplibs="$specialdeplibs $deplib" ;;
535685ee4c00Smrg	      esac
535785ee4c00Smrg	    fi
535885ee4c00Smrg	    tmp_libs="$tmp_libs $deplib"
535985ee4c00Smrg	  done
536085ee4c00Smrg	  continue
536185ee4c00Smrg	fi # $pass = conv
536285ee4c00Smrg
536385ee4c00Smrg
536485ee4c00Smrg	# Get the name of the library we link against.
536585ee4c00Smrg	linklib=
536685ee4c00Smrg	for l in $old_library $library_names; do
536785ee4c00Smrg	  linklib="$l"
536885ee4c00Smrg	done
536985ee4c00Smrg	if test -z "$linklib"; then
537085ee4c00Smrg	  func_fatal_error "cannot find name of link library for \`$lib'"
537185ee4c00Smrg	fi
537285ee4c00Smrg
537385ee4c00Smrg	# This library was specified with -dlopen.
537485ee4c00Smrg	if test "$pass" = dlopen; then
537585ee4c00Smrg	  if test -z "$libdir"; then
537685ee4c00Smrg	    func_fatal_error "cannot -dlopen a convenience library: \`$lib'"
537785ee4c00Smrg	  fi
537885ee4c00Smrg	  if test -z "$dlname" ||
537985ee4c00Smrg	     test "$dlopen_support" != yes ||
538085ee4c00Smrg	     test "$build_libtool_libs" = no; then
538185ee4c00Smrg	    # If there is no dlname, no dlopen support or we're linking
538285ee4c00Smrg	    # statically, we need to preload.  We also need to preload any
538385ee4c00Smrg	    # dependent libraries so libltdl's deplib preloader doesn't
538485ee4c00Smrg	    # bomb out in the load deplibs phase.
538585ee4c00Smrg	    dlprefiles="$dlprefiles $lib $dependency_libs"
538685ee4c00Smrg	  else
538785ee4c00Smrg	    newdlfiles="$newdlfiles $lib"
538885ee4c00Smrg	  fi
538985ee4c00Smrg	  continue
539085ee4c00Smrg	fi # $pass = dlopen
539185ee4c00Smrg
539285ee4c00Smrg	# We need an absolute path.
539385ee4c00Smrg	case $ladir in
539485ee4c00Smrg	[\\/]* | [A-Za-z]:[\\/]*) abs_ladir="$ladir" ;;
539585ee4c00Smrg	*)
539685ee4c00Smrg	  abs_ladir=`cd "$ladir" && pwd`
539785ee4c00Smrg	  if test -z "$abs_ladir"; then
539885ee4c00Smrg	    func_warning "cannot determine absolute directory name of \`$ladir'"
539985ee4c00Smrg	    func_warning "passing it literally to the linker, although it might fail"
540085ee4c00Smrg	    abs_ladir="$ladir"
540185ee4c00Smrg	  fi
540285ee4c00Smrg	  ;;
540385ee4c00Smrg	esac
540485ee4c00Smrg	func_basename "$lib"
540585ee4c00Smrg	laname="$func_basename_result"
540685ee4c00Smrg
540785ee4c00Smrg	# Find the relevant object directory and library name.
540885ee4c00Smrg	if test "X$installed" = Xyes; then
540985ee4c00Smrg	  if test ! -f "$libdir/$linklib" && test -f "$abs_ladir/$linklib"; then
541085ee4c00Smrg	    func_warning "library \`$lib' was moved."
541185ee4c00Smrg	    dir="$ladir"
541285ee4c00Smrg	    absdir="$abs_ladir"
541385ee4c00Smrg	    libdir="$abs_ladir"
541485ee4c00Smrg	  else
541585ee4c00Smrg	    dir="$libdir"
541685ee4c00Smrg	    absdir="$libdir"
541785ee4c00Smrg	  fi
541885ee4c00Smrg	  test "X$hardcode_automatic" = Xyes && avoidtemprpath=yes
541985ee4c00Smrg	else
542085ee4c00Smrg	  if test ! -f "$ladir/$objdir/$linklib" && test -f "$abs_ladir/$linklib"; then
542185ee4c00Smrg	    dir="$ladir"
542285ee4c00Smrg	    absdir="$abs_ladir"
542385ee4c00Smrg	    # Remove this search path later
542485ee4c00Smrg	    notinst_path="$notinst_path $abs_ladir"
542585ee4c00Smrg	  else
542685ee4c00Smrg	    dir="$ladir/$objdir"
542785ee4c00Smrg	    absdir="$abs_ladir/$objdir"
542885ee4c00Smrg	    # Remove this search path later
542985ee4c00Smrg	    notinst_path="$notinst_path $abs_ladir"
543085ee4c00Smrg	  fi
543185ee4c00Smrg	fi # $installed = yes
543285ee4c00Smrg	func_stripname 'lib' '.la' "$laname"
543385ee4c00Smrg	name=$func_stripname_result
543485ee4c00Smrg
543585ee4c00Smrg	# This library was specified with -dlpreopen.
543685ee4c00Smrg	if test "$pass" = dlpreopen; then
543785ee4c00Smrg	  if test -z "$libdir" && test "$linkmode" = prog; then
543885ee4c00Smrg	    func_fatal_error "only libraries may -dlpreopen a convenience library: \`$lib'"
543985ee4c00Smrg	  fi
544085ee4c00Smrg	  # Prefer using a static library (so that no silly _DYNAMIC symbols
544185ee4c00Smrg	  # are required to link).
544285ee4c00Smrg	  if test -n "$old_library"; then
544385ee4c00Smrg	    newdlprefiles="$newdlprefiles $dir/$old_library"
544485ee4c00Smrg	    # Keep a list of preopened convenience libraries to check
544585ee4c00Smrg	    # that they are being used correctly in the link pass.
544685ee4c00Smrg	    test -z "$libdir" && \
544785ee4c00Smrg		dlpreconveniencelibs="$dlpreconveniencelibs $dir/$old_library"
544885ee4c00Smrg	  # Otherwise, use the dlname, so that lt_dlopen finds it.
544985ee4c00Smrg	  elif test -n "$dlname"; then
545085ee4c00Smrg	    newdlprefiles="$newdlprefiles $dir/$dlname"
545185ee4c00Smrg	  else
545285ee4c00Smrg	    newdlprefiles="$newdlprefiles $dir/$linklib"
545385ee4c00Smrg	  fi
545485ee4c00Smrg	fi # $pass = dlpreopen
545585ee4c00Smrg
545685ee4c00Smrg	if test -z "$libdir"; then
545785ee4c00Smrg	  # Link the convenience library
545885ee4c00Smrg	  if test "$linkmode" = lib; then
545985ee4c00Smrg	    deplibs="$dir/$old_library $deplibs"
546085ee4c00Smrg	  elif test "$linkmode,$pass" = "prog,link"; then
546185ee4c00Smrg	    compile_deplibs="$dir/$old_library $compile_deplibs"
546285ee4c00Smrg	    finalize_deplibs="$dir/$old_library $finalize_deplibs"
546385ee4c00Smrg	  else
546485ee4c00Smrg	    deplibs="$lib $deplibs" # used for prog,scan pass
546585ee4c00Smrg	  fi
546685ee4c00Smrg	  continue
546785ee4c00Smrg	fi
546885ee4c00Smrg
546985ee4c00Smrg
547085ee4c00Smrg	if test "$linkmode" = prog && test "$pass" != link; then
547185ee4c00Smrg	  newlib_search_path="$newlib_search_path $ladir"
547285ee4c00Smrg	  deplibs="$lib $deplibs"
547385ee4c00Smrg
547485ee4c00Smrg	  linkalldeplibs=no
547585ee4c00Smrg	  if test "$link_all_deplibs" != no || test -z "$library_names" ||
547685ee4c00Smrg	     test "$build_libtool_libs" = no; then
547785ee4c00Smrg	    linkalldeplibs=yes
547885ee4c00Smrg	  fi
547985ee4c00Smrg
548085ee4c00Smrg	  tmp_libs=
548185ee4c00Smrg	  for deplib in $dependency_libs; do
548285ee4c00Smrg	    case $deplib in
548385ee4c00Smrg	    -L*) func_stripname '-L' '' "$deplib"
548485ee4c00Smrg	         newlib_search_path="$newlib_search_path $func_stripname_result"
548585ee4c00Smrg		 ;;
548685ee4c00Smrg	    esac
548785ee4c00Smrg	    # Need to link against all dependency_libs?
548885ee4c00Smrg	    if test "$linkalldeplibs" = yes; then
548985ee4c00Smrg	      deplibs="$deplib $deplibs"
549085ee4c00Smrg	    else
549185ee4c00Smrg	      # Need to hardcode shared library paths
549285ee4c00Smrg	      # or/and link against static libraries
549385ee4c00Smrg	      newdependency_libs="$deplib $newdependency_libs"
549485ee4c00Smrg	    fi
549585ee4c00Smrg	    if $opt_duplicate_deps ; then
549685ee4c00Smrg	      case "$tmp_libs " in
549785ee4c00Smrg	      *" $deplib "*) specialdeplibs="$specialdeplibs $deplib" ;;
549885ee4c00Smrg	      esac
549985ee4c00Smrg	    fi
550085ee4c00Smrg	    tmp_libs="$tmp_libs $deplib"
550185ee4c00Smrg	  done # for deplib
550285ee4c00Smrg	  continue
550385ee4c00Smrg	fi # $linkmode = prog...
550485ee4c00Smrg
550585ee4c00Smrg	if test "$linkmode,$pass" = "prog,link"; then
550685ee4c00Smrg	  if test -n "$library_names" &&
550785ee4c00Smrg	     { { test "$prefer_static_libs" = no ||
550885ee4c00Smrg	         test "$prefer_static_libs,$installed" = "built,yes"; } ||
550985ee4c00Smrg	       test -z "$old_library"; }; then
551085ee4c00Smrg	    # We need to hardcode the library path
551185ee4c00Smrg	    if test -n "$shlibpath_var" && test -z "$avoidtemprpath" ; then
551285ee4c00Smrg	      # Make sure the rpath contains only unique directories.
551385ee4c00Smrg	      case "$temp_rpath:" in
551485ee4c00Smrg	      *"$absdir:"*) ;;
551585ee4c00Smrg	      *) temp_rpath="$temp_rpath$absdir:" ;;
551685ee4c00Smrg	      esac
551785ee4c00Smrg	    fi
551885ee4c00Smrg
551985ee4c00Smrg	    # Hardcode the library path.
552085ee4c00Smrg	    # Skip directories that are in the system default run-time
552185ee4c00Smrg	    # search path.
552285ee4c00Smrg	    case " $sys_lib_dlsearch_path " in
552385ee4c00Smrg	    *" $absdir "*) ;;
552485ee4c00Smrg	    *)
552585ee4c00Smrg	      case "$compile_rpath " in
552685ee4c00Smrg	      *" $absdir "*) ;;
552785ee4c00Smrg	      *) compile_rpath="$compile_rpath $absdir"
552885ee4c00Smrg	      esac
552985ee4c00Smrg	      ;;
553085ee4c00Smrg	    esac
553185ee4c00Smrg	    case " $sys_lib_dlsearch_path " in
553285ee4c00Smrg	    *" $libdir "*) ;;
553385ee4c00Smrg	    *)
553485ee4c00Smrg	      case "$finalize_rpath " in
553585ee4c00Smrg	      *" $libdir "*) ;;
553685ee4c00Smrg	      *) finalize_rpath="$finalize_rpath $libdir"
553785ee4c00Smrg	      esac
553885ee4c00Smrg	      ;;
553985ee4c00Smrg	    esac
554085ee4c00Smrg	  fi # $linkmode,$pass = prog,link...
554185ee4c00Smrg
554285ee4c00Smrg	  if test "$alldeplibs" = yes &&
554385ee4c00Smrg	     { test "$deplibs_check_method" = pass_all ||
554485ee4c00Smrg	       { test "$build_libtool_libs" = yes &&
554585ee4c00Smrg		 test -n "$library_names"; }; }; then
554685ee4c00Smrg	    # We only need to search for static libraries
554785ee4c00Smrg	    continue
554885ee4c00Smrg	  fi
554985ee4c00Smrg	fi
555085ee4c00Smrg
555185ee4c00Smrg	link_static=no # Whether the deplib will be linked statically
555285ee4c00Smrg	use_static_libs=$prefer_static_libs
555385ee4c00Smrg	if test "$use_static_libs" = built && test "$installed" = yes; then
555485ee4c00Smrg	  use_static_libs=no
555585ee4c00Smrg	fi
555685ee4c00Smrg	if test -n "$library_names" &&
555785ee4c00Smrg	   { test "$use_static_libs" = no || test -z "$old_library"; }; then
555885ee4c00Smrg	  case $host in
555985ee4c00Smrg	  *cygwin* | *mingw* | *cegcc*)
556085ee4c00Smrg	      # No point in relinking DLLs because paths are not encoded
556185ee4c00Smrg	      notinst_deplibs="$notinst_deplibs $lib"
556285ee4c00Smrg	      need_relink=no
556385ee4c00Smrg	    ;;
556485ee4c00Smrg	  *)
556585ee4c00Smrg	    if test "$installed" = no; then
556685ee4c00Smrg	      notinst_deplibs="$notinst_deplibs $lib"
556785ee4c00Smrg	      need_relink=yes
556885ee4c00Smrg	    fi
556985ee4c00Smrg	    ;;
557085ee4c00Smrg	  esac
557185ee4c00Smrg	  # This is a shared library
557285ee4c00Smrg
557385ee4c00Smrg	  # Warn about portability, can't link against -module's on some
557485ee4c00Smrg	  # systems (darwin).  Don't bleat about dlopened modules though!
557585ee4c00Smrg	  dlopenmodule=""
557685ee4c00Smrg	  for dlpremoduletest in $dlprefiles; do
557785ee4c00Smrg	    if test "X$dlpremoduletest" = "X$lib"; then
557885ee4c00Smrg	      dlopenmodule="$dlpremoduletest"
557985ee4c00Smrg	      break
558085ee4c00Smrg	    fi
558185ee4c00Smrg	  done
558285ee4c00Smrg	  if test -z "$dlopenmodule" && test "$shouldnotlink" = yes && test "$pass" = link; then
558385ee4c00Smrg	    $ECHO
558485ee4c00Smrg	    if test "$linkmode" = prog; then
558585ee4c00Smrg	      $ECHO "*** Warning: Linking the executable $output against the loadable module"
558685ee4c00Smrg	    else
558785ee4c00Smrg	      $ECHO "*** Warning: Linking the shared library $output against the loadable module"
558885ee4c00Smrg	    fi
558985ee4c00Smrg	    $ECHO "*** $linklib is not portable!"
559085ee4c00Smrg	  fi
559185ee4c00Smrg	  if test "$linkmode" = lib &&
559285ee4c00Smrg	     test "$hardcode_into_libs" = yes; then
559385ee4c00Smrg	    # Hardcode the library path.
559485ee4c00Smrg	    # Skip directories that are in the system default run-time
559585ee4c00Smrg	    # search path.
559685ee4c00Smrg	    case " $sys_lib_dlsearch_path " in
559785ee4c00Smrg	    *" $absdir "*) ;;
559885ee4c00Smrg	    *)
559985ee4c00Smrg	      case "$compile_rpath " in
560085ee4c00Smrg	      *" $absdir "*) ;;
560185ee4c00Smrg	      *) compile_rpath="$compile_rpath $absdir"
560285ee4c00Smrg	      esac
560385ee4c00Smrg	      ;;
560485ee4c00Smrg	    esac
560585ee4c00Smrg	    case " $sys_lib_dlsearch_path " in
560685ee4c00Smrg	    *" $libdir "*) ;;
560785ee4c00Smrg	    *)
560885ee4c00Smrg	      case "$finalize_rpath " in
560985ee4c00Smrg	      *" $libdir "*) ;;
561085ee4c00Smrg	      *) finalize_rpath="$finalize_rpath $libdir"
561185ee4c00Smrg	      esac
561285ee4c00Smrg	      ;;
561385ee4c00Smrg	    esac
561485ee4c00Smrg	  fi
561585ee4c00Smrg
561685ee4c00Smrg	  if test -n "$old_archive_from_expsyms_cmds"; then
561785ee4c00Smrg	    # figure out the soname
561885ee4c00Smrg	    set dummy $library_names
561985ee4c00Smrg	    shift
562085ee4c00Smrg	    realname="$1"
562185ee4c00Smrg	    shift
562285ee4c00Smrg	    libname=`eval "\\$ECHO \"$libname_spec\""`
562385ee4c00Smrg	    # use dlname if we got it. it's perfectly good, no?
562485ee4c00Smrg	    if test -n "$dlname"; then
562585ee4c00Smrg	      soname="$dlname"
562685ee4c00Smrg	    elif test -n "$soname_spec"; then
562785ee4c00Smrg	      # bleh windows
562885ee4c00Smrg	      case $host in
562985ee4c00Smrg	      *cygwin* | mingw* | *cegcc*)
563085ee4c00Smrg	        func_arith $current - $age
563185ee4c00Smrg		major=$func_arith_result
563285ee4c00Smrg		versuffix="-$major"
563385ee4c00Smrg		;;
563485ee4c00Smrg	      esac
563585ee4c00Smrg	      eval soname=\"$soname_spec\"
563685ee4c00Smrg	    else
563785ee4c00Smrg	      soname="$realname"
563885ee4c00Smrg	    fi
563985ee4c00Smrg
564085ee4c00Smrg	    # Make a new name for the extract_expsyms_cmds to use
564185ee4c00Smrg	    soroot="$soname"
564285ee4c00Smrg	    func_basename "$soroot"
564385ee4c00Smrg	    soname="$func_basename_result"
564485ee4c00Smrg	    func_stripname 'lib' '.dll' "$soname"
564585ee4c00Smrg	    newlib=libimp-$func_stripname_result.a
564685ee4c00Smrg
564785ee4c00Smrg	    # If the library has no export list, then create one now
564885ee4c00Smrg	    if test -f "$output_objdir/$soname-def"; then :
564985ee4c00Smrg	    else
565085ee4c00Smrg	      func_verbose "extracting exported symbol list from \`$soname'"
565185ee4c00Smrg	      func_execute_cmds "$extract_expsyms_cmds" 'exit $?'
565285ee4c00Smrg	    fi
565385ee4c00Smrg
565485ee4c00Smrg	    # Create $newlib
565585ee4c00Smrg	    if test -f "$output_objdir/$newlib"; then :; else
565685ee4c00Smrg	      func_verbose "generating import library for \`$soname'"
565785ee4c00Smrg	      func_execute_cmds "$old_archive_from_expsyms_cmds" 'exit $?'
565885ee4c00Smrg	    fi
565985ee4c00Smrg	    # make sure the library variables are pointing to the new library
566085ee4c00Smrg	    dir=$output_objdir
566185ee4c00Smrg	    linklib=$newlib
566285ee4c00Smrg	  fi # test -n "$old_archive_from_expsyms_cmds"
566385ee4c00Smrg
566485ee4c00Smrg	  if test "$linkmode" = prog || test "$mode" != relink; then
566585ee4c00Smrg	    add_shlibpath=
566685ee4c00Smrg	    add_dir=
566785ee4c00Smrg	    add=
566885ee4c00Smrg	    lib_linked=yes
566985ee4c00Smrg	    case $hardcode_action in
567085ee4c00Smrg	    immediate | unsupported)
567185ee4c00Smrg	      if test "$hardcode_direct" = no; then
567285ee4c00Smrg		add="$dir/$linklib"
567385ee4c00Smrg		case $host in
567485ee4c00Smrg		  *-*-sco3.2v5.0.[024]*) add_dir="-L$dir" ;;
567585ee4c00Smrg		  *-*-sysv4*uw2*) add_dir="-L$dir" ;;
567685ee4c00Smrg		  *-*-sysv5OpenUNIX* | *-*-sysv5UnixWare7.[01].[10]* | \
567785ee4c00Smrg		    *-*-unixware7*) add_dir="-L$dir" ;;
567885ee4c00Smrg		  *-*-darwin* )
567985ee4c00Smrg		    # if the lib is a (non-dlopened) module then we can not
568085ee4c00Smrg		    # link against it, someone is ignoring the earlier warnings
568185ee4c00Smrg		    if /usr/bin/file -L $add 2> /dev/null |
568285ee4c00Smrg			 $GREP ": [^:]* bundle" >/dev/null ; then
568385ee4c00Smrg		      if test "X$dlopenmodule" != "X$lib"; then
568485ee4c00Smrg			$ECHO "*** Warning: lib $linklib is a module, not a shared library"
568585ee4c00Smrg			if test -z "$old_library" ; then
568685ee4c00Smrg			  $ECHO
568785ee4c00Smrg			  $ECHO "*** And there doesn't seem to be a static archive available"
568885ee4c00Smrg			  $ECHO "*** The link will probably fail, sorry"
568985ee4c00Smrg			else
569085ee4c00Smrg			  add="$dir/$old_library"
569185ee4c00Smrg			fi
569285ee4c00Smrg		      elif test -n "$old_library"; then
569385ee4c00Smrg			add="$dir/$old_library"
569485ee4c00Smrg		      fi
569585ee4c00Smrg		    fi
569685ee4c00Smrg		esac
569785ee4c00Smrg	      elif test "$hardcode_minus_L" = no; then
569885ee4c00Smrg		case $host in
569985ee4c00Smrg		*-*-sunos*) add_shlibpath="$dir" ;;
570085ee4c00Smrg		esac
570185ee4c00Smrg		add_dir="-L$dir"
570285ee4c00Smrg		add="-l$name"
570385ee4c00Smrg	      elif test "$hardcode_shlibpath_var" = no; then
570485ee4c00Smrg		add_shlibpath="$dir"
570585ee4c00Smrg		add="-l$name"
570685ee4c00Smrg	      else
570785ee4c00Smrg		lib_linked=no
570885ee4c00Smrg	      fi
570985ee4c00Smrg	      ;;
571085ee4c00Smrg	    relink)
571185ee4c00Smrg	      if test "$hardcode_direct" = yes &&
571285ee4c00Smrg	         test "$hardcode_direct_absolute" = no; then
571385ee4c00Smrg		add="$dir/$linklib"
571485ee4c00Smrg	      elif test "$hardcode_minus_L" = yes; then
571585ee4c00Smrg		add_dir="-L$dir"
571685ee4c00Smrg		# Try looking first in the location we're being installed to.
571785ee4c00Smrg		if test -n "$inst_prefix_dir"; then
571885ee4c00Smrg		  case $libdir in
571985ee4c00Smrg		    [\\/]*)
572085ee4c00Smrg		      add_dir="$add_dir -L$inst_prefix_dir$libdir"
572185ee4c00Smrg		      ;;
572285ee4c00Smrg		  esac
572385ee4c00Smrg		fi
572485ee4c00Smrg		add="-l$name"
572585ee4c00Smrg	      elif test "$hardcode_shlibpath_var" = yes; then
572685ee4c00Smrg		add_shlibpath="$dir"
572785ee4c00Smrg		add="-l$name"
572885ee4c00Smrg	      else
572985ee4c00Smrg		lib_linked=no
573085ee4c00Smrg	      fi
573185ee4c00Smrg	      ;;
573285ee4c00Smrg	    *) lib_linked=no ;;
573385ee4c00Smrg	    esac
573485ee4c00Smrg
573585ee4c00Smrg	    if test "$lib_linked" != yes; then
573685ee4c00Smrg	      func_fatal_configuration "unsupported hardcode properties"
573785ee4c00Smrg	    fi
573885ee4c00Smrg
573985ee4c00Smrg	    if test -n "$add_shlibpath"; then
574085ee4c00Smrg	      case :$compile_shlibpath: in
574185ee4c00Smrg	      *":$add_shlibpath:"*) ;;
574285ee4c00Smrg	      *) compile_shlibpath="$compile_shlibpath$add_shlibpath:" ;;
574385ee4c00Smrg	      esac
574485ee4c00Smrg	    fi
574585ee4c00Smrg	    if test "$linkmode" = prog; then
574685ee4c00Smrg	      test -n "$add_dir" && compile_deplibs="$add_dir $compile_deplibs"
574785ee4c00Smrg	      test -n "$add" && compile_deplibs="$add $compile_deplibs"
574885ee4c00Smrg	    else
574985ee4c00Smrg	      test -n "$add_dir" && deplibs="$add_dir $deplibs"
575085ee4c00Smrg	      test -n "$add" && deplibs="$add $deplibs"
575185ee4c00Smrg	      if test "$hardcode_direct" != yes &&
575285ee4c00Smrg		 test "$hardcode_minus_L" != yes &&
575385ee4c00Smrg		 test "$hardcode_shlibpath_var" = yes; then
575485ee4c00Smrg		case :$finalize_shlibpath: in
575585ee4c00Smrg		*":$libdir:"*) ;;
575685ee4c00Smrg		*) finalize_shlibpath="$finalize_shlibpath$libdir:" ;;
575785ee4c00Smrg		esac
575885ee4c00Smrg	      fi
575985ee4c00Smrg	    fi
576085ee4c00Smrg	  fi
576185ee4c00Smrg
576285ee4c00Smrg	  if test "$linkmode" = prog || test "$mode" = relink; then
576385ee4c00Smrg	    add_shlibpath=
576485ee4c00Smrg	    add_dir=
576585ee4c00Smrg	    add=
576685ee4c00Smrg	    # Finalize command for both is simple: just hardcode it.
576785ee4c00Smrg	    if test "$hardcode_direct" = yes &&
576885ee4c00Smrg	       test "$hardcode_direct_absolute" = no; then
576985ee4c00Smrg	      add="$libdir/$linklib"
577085ee4c00Smrg	    elif test "$hardcode_minus_L" = yes; then
577185ee4c00Smrg	      add_dir="-L$libdir"
577285ee4c00Smrg	      add="-l$name"
577385ee4c00Smrg	    elif test "$hardcode_shlibpath_var" = yes; then
577485ee4c00Smrg	      case :$finalize_shlibpath: in
577585ee4c00Smrg	      *":$libdir:"*) ;;
577685ee4c00Smrg	      *) finalize_shlibpath="$finalize_shlibpath$libdir:" ;;
577785ee4c00Smrg	      esac
577885ee4c00Smrg	      add="-l$name"
577985ee4c00Smrg	    elif test "$hardcode_automatic" = yes; then
578085ee4c00Smrg	      if test -n "$inst_prefix_dir" &&
578185ee4c00Smrg		 test -f "$inst_prefix_dir$libdir/$linklib" ; then
578285ee4c00Smrg		add="$inst_prefix_dir$libdir/$linklib"
578385ee4c00Smrg	      else
578485ee4c00Smrg		add="$libdir/$linklib"
578585ee4c00Smrg	      fi
578685ee4c00Smrg	    else
578785ee4c00Smrg	      # We cannot seem to hardcode it, guess we'll fake it.
578885ee4c00Smrg	      add_dir="-L$libdir"
578985ee4c00Smrg	      # Try looking first in the location we're being installed to.
579085ee4c00Smrg	      if test -n "$inst_prefix_dir"; then
579185ee4c00Smrg		case $libdir in
579285ee4c00Smrg		  [\\/]*)
579385ee4c00Smrg		    add_dir="$add_dir -L$inst_prefix_dir$libdir"
579485ee4c00Smrg		    ;;
579585ee4c00Smrg		esac
579685ee4c00Smrg	      fi
579785ee4c00Smrg	      add="-l$name"
579885ee4c00Smrg	    fi
579985ee4c00Smrg
580085ee4c00Smrg	    if test "$linkmode" = prog; then
580185ee4c00Smrg	      test -n "$add_dir" && finalize_deplibs="$add_dir $finalize_deplibs"
580285ee4c00Smrg	      test -n "$add" && finalize_deplibs="$add $finalize_deplibs"
580385ee4c00Smrg	    else
580485ee4c00Smrg	      test -n "$add_dir" && deplibs="$add_dir $deplibs"
580585ee4c00Smrg	      test -n "$add" && deplibs="$add $deplibs"
580685ee4c00Smrg	    fi
580785ee4c00Smrg	  fi
580885ee4c00Smrg	elif test "$linkmode" = prog; then
580985ee4c00Smrg	  # Here we assume that one of hardcode_direct or hardcode_minus_L
581085ee4c00Smrg	  # is not unsupported.  This is valid on all known static and
581185ee4c00Smrg	  # shared platforms.
581285ee4c00Smrg	  if test "$hardcode_direct" != unsupported; then
581385ee4c00Smrg	    test -n "$old_library" && linklib="$old_library"
581485ee4c00Smrg	    compile_deplibs="$dir/$linklib $compile_deplibs"
581585ee4c00Smrg	    finalize_deplibs="$dir/$linklib $finalize_deplibs"
581685ee4c00Smrg	  else
581785ee4c00Smrg	    compile_deplibs="-l$name -L$dir $compile_deplibs"
581885ee4c00Smrg	    finalize_deplibs="-l$name -L$dir $finalize_deplibs"
581985ee4c00Smrg	  fi
582085ee4c00Smrg	elif test "$build_libtool_libs" = yes; then
582185ee4c00Smrg	  # Not a shared library
582285ee4c00Smrg	  if test "$deplibs_check_method" != pass_all; then
582385ee4c00Smrg	    # We're trying link a shared library against a static one
582485ee4c00Smrg	    # but the system doesn't support it.
582585ee4c00Smrg
582685ee4c00Smrg	    # Just print a warning and add the library to dependency_libs so
582785ee4c00Smrg	    # that the program can be linked against the static library.
582885ee4c00Smrg	    $ECHO
582985ee4c00Smrg	    $ECHO "*** Warning: This system can not link to static lib archive $lib."
583085ee4c00Smrg	    $ECHO "*** I have the capability to make that library automatically link in when"
583185ee4c00Smrg	    $ECHO "*** you link to this library.  But I can only do this if you have a"
583285ee4c00Smrg	    $ECHO "*** shared version of the library, which you do not appear to have."
583385ee4c00Smrg	    if test "$module" = yes; then
583485ee4c00Smrg	      $ECHO "*** But as you try to build a module library, libtool will still create "
583585ee4c00Smrg	      $ECHO "*** a static module, that should work as long as the dlopening application"
583685ee4c00Smrg	      $ECHO "*** is linked with the -dlopen flag to resolve symbols at runtime."
583785ee4c00Smrg	      if test -z "$global_symbol_pipe"; then
583885ee4c00Smrg		$ECHO
583985ee4c00Smrg		$ECHO "*** However, this would only work if libtool was able to extract symbol"
584085ee4c00Smrg		$ECHO "*** lists from a program, using \`nm' or equivalent, but libtool could"
584185ee4c00Smrg		$ECHO "*** not find such a program.  So, this module is probably useless."
584285ee4c00Smrg		$ECHO "*** \`nm' from GNU binutils and a full rebuild may help."
584385ee4c00Smrg	      fi
584485ee4c00Smrg	      if test "$build_old_libs" = no; then
584585ee4c00Smrg		build_libtool_libs=module
584685ee4c00Smrg		build_old_libs=yes
584785ee4c00Smrg	      else
584885ee4c00Smrg		build_libtool_libs=no
584985ee4c00Smrg	      fi
585085ee4c00Smrg	    fi
585185ee4c00Smrg	  else
585285ee4c00Smrg	    deplibs="$dir/$old_library $deplibs"
585385ee4c00Smrg	    link_static=yes
585485ee4c00Smrg	  fi
585585ee4c00Smrg	fi # link shared/static library?
585685ee4c00Smrg
585785ee4c00Smrg	if test "$linkmode" = lib; then
585885ee4c00Smrg	  if test -n "$dependency_libs" &&
585985ee4c00Smrg	     { test "$hardcode_into_libs" != yes ||
586085ee4c00Smrg	       test "$build_old_libs" = yes ||
586185ee4c00Smrg	       test "$link_static" = yes; }; then
586285ee4c00Smrg	    # Extract -R from dependency_libs
586385ee4c00Smrg	    temp_deplibs=
586485ee4c00Smrg	    for libdir in $dependency_libs; do
586585ee4c00Smrg	      case $libdir in
586685ee4c00Smrg	      -R*) func_stripname '-R' '' "$libdir"
586785ee4c00Smrg	           temp_xrpath=$func_stripname_result
586885ee4c00Smrg		   case " $xrpath " in
586985ee4c00Smrg		   *" $temp_xrpath "*) ;;
587085ee4c00Smrg		   *) xrpath="$xrpath $temp_xrpath";;
587185ee4c00Smrg		   esac;;
587285ee4c00Smrg	      *) temp_deplibs="$temp_deplibs $libdir";;
587385ee4c00Smrg	      esac
587485ee4c00Smrg	    done
587585ee4c00Smrg	    dependency_libs="$temp_deplibs"
587685ee4c00Smrg	  fi
587785ee4c00Smrg
587885ee4c00Smrg	  newlib_search_path="$newlib_search_path $absdir"
587985ee4c00Smrg	  # Link against this library
588085ee4c00Smrg	  test "$link_static" = no && newdependency_libs="$abs_ladir/$laname $newdependency_libs"
588185ee4c00Smrg	  # ... and its dependency_libs
588285ee4c00Smrg	  tmp_libs=
588385ee4c00Smrg	  for deplib in $dependency_libs; do
588485ee4c00Smrg	    newdependency_libs="$deplib $newdependency_libs"
588585ee4c00Smrg	    if $opt_duplicate_deps ; then
588685ee4c00Smrg	      case "$tmp_libs " in
588785ee4c00Smrg	      *" $deplib "*) specialdeplibs="$specialdeplibs $deplib" ;;
588885ee4c00Smrg	      esac
588985ee4c00Smrg	    fi
589085ee4c00Smrg	    tmp_libs="$tmp_libs $deplib"
589185ee4c00Smrg	  done
589285ee4c00Smrg
589385ee4c00Smrg	  if test "$link_all_deplibs" != no; then
589485ee4c00Smrg	    # Add the search paths of all dependency libraries
589585ee4c00Smrg	    for deplib in $dependency_libs; do
589685ee4c00Smrg	      case $deplib in
589785ee4c00Smrg	      -L*) path="$deplib" ;;
589885ee4c00Smrg	      *.la)
589985ee4c00Smrg	        func_dirname "$deplib" "" "."
590085ee4c00Smrg		dir="$func_dirname_result"
590185ee4c00Smrg		# We need an absolute path.
590285ee4c00Smrg		case $dir in
590385ee4c00Smrg		[\\/]* | [A-Za-z]:[\\/]*) absdir="$dir" ;;
590485ee4c00Smrg		*)
590585ee4c00Smrg		  absdir=`cd "$dir" && pwd`
590685ee4c00Smrg		  if test -z "$absdir"; then
590785ee4c00Smrg		    func_warning "cannot determine absolute directory name of \`$dir'"
590885ee4c00Smrg		    absdir="$dir"
590985ee4c00Smrg		  fi
591085ee4c00Smrg		  ;;
591185ee4c00Smrg		esac
591285ee4c00Smrg		if $GREP "^installed=no" $deplib > /dev/null; then
591385ee4c00Smrg		case $host in
591485ee4c00Smrg		*-*-darwin*)
591585ee4c00Smrg		  depdepl=
591685ee4c00Smrg		  eval deplibrary_names=`${SED} -n -e 's/^library_names=\(.*\)$/\1/p' $deplib`
591785ee4c00Smrg		  if test -n "$deplibrary_names" ; then
591885ee4c00Smrg		    for tmp in $deplibrary_names ; do
591985ee4c00Smrg		      depdepl=$tmp
592085ee4c00Smrg		    done
592185ee4c00Smrg		    if test -f "$absdir/$objdir/$depdepl" ; then
592285ee4c00Smrg		      depdepl="$absdir/$objdir/$depdepl"
592385ee4c00Smrg		      darwin_install_name=`${OTOOL} -L $depdepl | awk '{if (NR == 2) {print $1;exit}}'`
592485ee4c00Smrg                      if test -z "$darwin_install_name"; then
592585ee4c00Smrg                          darwin_install_name=`${OTOOL64} -L $depdepl  | awk '{if (NR == 2) {print $1;exit}}'`
592685ee4c00Smrg                      fi
592785ee4c00Smrg		      compiler_flags="$compiler_flags ${wl}-dylib_file ${wl}${darwin_install_name}:${depdepl}"
592885ee4c00Smrg		      linker_flags="$linker_flags -dylib_file ${darwin_install_name}:${depdepl}"
592985ee4c00Smrg		      path=
593085ee4c00Smrg		    fi
593185ee4c00Smrg		  fi
593285ee4c00Smrg		  ;;
593385ee4c00Smrg		*)
593485ee4c00Smrg		  path="-L$absdir/$objdir"
593585ee4c00Smrg		  ;;
593685ee4c00Smrg		esac
593785ee4c00Smrg		else
593885ee4c00Smrg		  eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $deplib`
593985ee4c00Smrg		  test -z "$libdir" && \
594085ee4c00Smrg		    func_fatal_error "\`$deplib' is not a valid libtool archive"
594185ee4c00Smrg		  test "$absdir" != "$libdir" && \
594285ee4c00Smrg		    func_warning "\`$deplib' seems to be moved"
594385ee4c00Smrg
594485ee4c00Smrg		  path="-L$absdir"
594585ee4c00Smrg		fi
594685ee4c00Smrg		;;
594785ee4c00Smrg	      esac
594885ee4c00Smrg	      case " $deplibs " in
594985ee4c00Smrg	      *" $path "*) ;;
595085ee4c00Smrg	      *) deplibs="$path $deplibs" ;;
595185ee4c00Smrg	      esac
595285ee4c00Smrg	    done
595385ee4c00Smrg	  fi # link_all_deplibs != no
595485ee4c00Smrg	fi # linkmode = lib
595585ee4c00Smrg      done # for deplib in $libs
595685ee4c00Smrg      if test "$pass" = link; then
595785ee4c00Smrg	if test "$linkmode" = "prog"; then
595885ee4c00Smrg	  compile_deplibs="$new_inherited_linker_flags $compile_deplibs"
595985ee4c00Smrg	  finalize_deplibs="$new_inherited_linker_flags $finalize_deplibs"
596085ee4c00Smrg	else
596185ee4c00Smrg	  compiler_flags="$compiler_flags "`$ECHO "X $new_inherited_linker_flags" | $Xsed -e 's% \([^ $]*\).ltframework% -framework \1%g'`
596285ee4c00Smrg	fi
596385ee4c00Smrg      fi
596485ee4c00Smrg      dependency_libs="$newdependency_libs"
596585ee4c00Smrg      if test "$pass" = dlpreopen; then
596685ee4c00Smrg	# Link the dlpreopened libraries before other libraries
596785ee4c00Smrg	for deplib in $save_deplibs; do
596885ee4c00Smrg	  deplibs="$deplib $deplibs"
596985ee4c00Smrg	done
597085ee4c00Smrg      fi
597185ee4c00Smrg      if test "$pass" != dlopen; then
597285ee4c00Smrg	if test "$pass" != conv; then
597385ee4c00Smrg	  # Make sure lib_search_path contains only unique directories.
597485ee4c00Smrg	  lib_search_path=
597585ee4c00Smrg	  for dir in $newlib_search_path; do
597685ee4c00Smrg	    case "$lib_search_path " in
597785ee4c00Smrg	    *" $dir "*) ;;
597885ee4c00Smrg	    *) lib_search_path="$lib_search_path $dir" ;;
597985ee4c00Smrg	    esac
598085ee4c00Smrg	  done
598185ee4c00Smrg	  newlib_search_path=
598285ee4c00Smrg	fi
598385ee4c00Smrg
598485ee4c00Smrg	if test "$linkmode,$pass" != "prog,link"; then
598585ee4c00Smrg	  vars="deplibs"
598685ee4c00Smrg	else
598785ee4c00Smrg	  vars="compile_deplibs finalize_deplibs"
598885ee4c00Smrg	fi
598985ee4c00Smrg	for var in $vars dependency_libs; do
599085ee4c00Smrg	  # Add libraries to $var in reverse order
599185ee4c00Smrg	  eval tmp_libs=\"\$$var\"
599285ee4c00Smrg	  new_libs=
599385ee4c00Smrg	  for deplib in $tmp_libs; do
599485ee4c00Smrg	    # FIXME: Pedantically, this is the right thing to do, so
599585ee4c00Smrg	    #        that some nasty dependency loop isn't accidentally
599685ee4c00Smrg	    #        broken:
599785ee4c00Smrg	    #new_libs="$deplib $new_libs"
599885ee4c00Smrg	    # Pragmatically, this seems to cause very few problems in
599985ee4c00Smrg	    # practice:
600085ee4c00Smrg	    case $deplib in
600185ee4c00Smrg	    -L*) new_libs="$deplib $new_libs" ;;
600285ee4c00Smrg	    -R*) ;;
600385ee4c00Smrg	    *)
600485ee4c00Smrg	      # And here is the reason: when a library appears more
600585ee4c00Smrg	      # than once as an explicit dependence of a library, or
600685ee4c00Smrg	      # is implicitly linked in more than once by the
600785ee4c00Smrg	      # compiler, it is considered special, and multiple
600885ee4c00Smrg	      # occurrences thereof are not removed.  Compare this
600985ee4c00Smrg	      # with having the same library being listed as a
601085ee4c00Smrg	      # dependency of multiple other libraries: in this case,
601185ee4c00Smrg	      # we know (pedantically, we assume) the library does not
601285ee4c00Smrg	      # need to be listed more than once, so we keep only the
601385ee4c00Smrg	      # last copy.  This is not always right, but it is rare
601485ee4c00Smrg	      # enough that we require users that really mean to play
601585ee4c00Smrg	      # such unportable linking tricks to link the library
601685ee4c00Smrg	      # using -Wl,-lname, so that libtool does not consider it
601785ee4c00Smrg	      # for duplicate removal.
601885ee4c00Smrg	      case " $specialdeplibs " in
601985ee4c00Smrg	      *" $deplib "*) new_libs="$deplib $new_libs" ;;
602085ee4c00Smrg	      *)
602185ee4c00Smrg		case " $new_libs " in
602285ee4c00Smrg		*" $deplib "*) ;;
602385ee4c00Smrg		*) new_libs="$deplib $new_libs" ;;
602485ee4c00Smrg		esac
602585ee4c00Smrg		;;
602685ee4c00Smrg	      esac
602785ee4c00Smrg	      ;;
602885ee4c00Smrg	    esac
602985ee4c00Smrg	  done
603085ee4c00Smrg	  tmp_libs=
603185ee4c00Smrg	  for deplib in $new_libs; do
603285ee4c00Smrg	    case $deplib in
603385ee4c00Smrg	    -L*)
603485ee4c00Smrg	      case " $tmp_libs " in
603585ee4c00Smrg	      *" $deplib "*) ;;
603685ee4c00Smrg	      *) tmp_libs="$tmp_libs $deplib" ;;
603785ee4c00Smrg	      esac
603885ee4c00Smrg	      ;;
603985ee4c00Smrg	    *) tmp_libs="$tmp_libs $deplib" ;;
604085ee4c00Smrg	    esac
604185ee4c00Smrg	  done
604285ee4c00Smrg	  eval $var=\"$tmp_libs\"
604385ee4c00Smrg	done # for var
604485ee4c00Smrg      fi
604585ee4c00Smrg      # Last step: remove runtime libs from dependency_libs
604685ee4c00Smrg      # (they stay in deplibs)
604785ee4c00Smrg      tmp_libs=
604885ee4c00Smrg      for i in $dependency_libs ; do
604985ee4c00Smrg	case " $predeps $postdeps $compiler_lib_search_path " in
605085ee4c00Smrg	*" $i "*)
605185ee4c00Smrg	  i=""
605285ee4c00Smrg	  ;;
605385ee4c00Smrg	esac
605485ee4c00Smrg	if test -n "$i" ; then
605585ee4c00Smrg	  tmp_libs="$tmp_libs $i"
605685ee4c00Smrg	fi
605785ee4c00Smrg      done
605885ee4c00Smrg      dependency_libs=$tmp_libs
605985ee4c00Smrg    done # for pass
606085ee4c00Smrg    if test "$linkmode" = prog; then
606185ee4c00Smrg      dlfiles="$newdlfiles"
606285ee4c00Smrg    fi
606385ee4c00Smrg    if test "$linkmode" = prog || test "$linkmode" = lib; then
606485ee4c00Smrg      dlprefiles="$newdlprefiles"
606585ee4c00Smrg    fi
606685ee4c00Smrg
606785ee4c00Smrg    case $linkmode in
606885ee4c00Smrg    oldlib)
606985ee4c00Smrg      if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then
607085ee4c00Smrg	func_warning "\`-dlopen' is ignored for archives"
607185ee4c00Smrg      fi
607285ee4c00Smrg
607385ee4c00Smrg      case " $deplibs" in
607485ee4c00Smrg      *\ -l* | *\ -L*)
607585ee4c00Smrg	func_warning "\`-l' and \`-L' are ignored for archives" ;;
607685ee4c00Smrg      esac
607785ee4c00Smrg
607885ee4c00Smrg      test -n "$rpath" && \
607985ee4c00Smrg	func_warning "\`-rpath' is ignored for archives"
608085ee4c00Smrg
608185ee4c00Smrg      test -n "$xrpath" && \
608285ee4c00Smrg	func_warning "\`-R' is ignored for archives"
608385ee4c00Smrg
608485ee4c00Smrg      test -n "$vinfo" && \
608585ee4c00Smrg	func_warning "\`-version-info/-version-number' is ignored for archives"
608685ee4c00Smrg
608785ee4c00Smrg      test -n "$release" && \
608885ee4c00Smrg	func_warning "\`-release' is ignored for archives"
608985ee4c00Smrg
609085ee4c00Smrg      test -n "$export_symbols$export_symbols_regex" && \
609185ee4c00Smrg	func_warning "\`-export-symbols' is ignored for archives"
609285ee4c00Smrg
609385ee4c00Smrg      # Now set the variables for building old libraries.
609485ee4c00Smrg      build_libtool_libs=no
609585ee4c00Smrg      oldlibs="$output"
609685ee4c00Smrg      objs="$objs$old_deplibs"
609785ee4c00Smrg      ;;
609885ee4c00Smrg
609985ee4c00Smrg    lib)
610085ee4c00Smrg      # Make sure we only generate libraries of the form `libNAME.la'.
610185ee4c00Smrg      case $outputname in
610285ee4c00Smrg      lib*)
610385ee4c00Smrg	func_stripname 'lib' '.la' "$outputname"
610485ee4c00Smrg	name=$func_stripname_result
610585ee4c00Smrg	eval shared_ext=\"$shrext_cmds\"
610685ee4c00Smrg	eval libname=\"$libname_spec\"
610785ee4c00Smrg	;;
610885ee4c00Smrg      *)
610985ee4c00Smrg	test "$module" = no && \
611085ee4c00Smrg	  func_fatal_help "libtool library \`$output' must begin with \`lib'"
611185ee4c00Smrg
611285ee4c00Smrg	if test "$need_lib_prefix" != no; then
611385ee4c00Smrg	  # Add the "lib" prefix for modules if required
611485ee4c00Smrg	  func_stripname '' '.la' "$outputname"
611585ee4c00Smrg	  name=$func_stripname_result
611685ee4c00Smrg	  eval shared_ext=\"$shrext_cmds\"
611785ee4c00Smrg	  eval libname=\"$libname_spec\"
611885ee4c00Smrg	else
611985ee4c00Smrg	  func_stripname '' '.la' "$outputname"
612085ee4c00Smrg	  libname=$func_stripname_result
612185ee4c00Smrg	fi
612285ee4c00Smrg	;;
612385ee4c00Smrg      esac
612485ee4c00Smrg
612585ee4c00Smrg      if test -n "$objs"; then
612685ee4c00Smrg	if test "$deplibs_check_method" != pass_all; then
612785ee4c00Smrg	  func_fatal_error "cannot build libtool library \`$output' from non-libtool objects on this host:$objs"
612885ee4c00Smrg	else
612985ee4c00Smrg	  $ECHO
613085ee4c00Smrg	  $ECHO "*** Warning: Linking the shared library $output against the non-libtool"
613185ee4c00Smrg	  $ECHO "*** objects $objs is not portable!"
613285ee4c00Smrg	  libobjs="$libobjs $objs"
613385ee4c00Smrg	fi
613485ee4c00Smrg      fi
613585ee4c00Smrg
613685ee4c00Smrg      test "$dlself" != no && \
613785ee4c00Smrg	func_warning "\`-dlopen self' is ignored for libtool libraries"
613885ee4c00Smrg
613985ee4c00Smrg      set dummy $rpath
614085ee4c00Smrg      shift
614185ee4c00Smrg      test "$#" -gt 1 && \
614285ee4c00Smrg	func_warning "ignoring multiple \`-rpath's for a libtool library"
614385ee4c00Smrg
614485ee4c00Smrg      install_libdir="$1"
614585ee4c00Smrg
614685ee4c00Smrg      oldlibs=
614785ee4c00Smrg      if test -z "$rpath"; then
614885ee4c00Smrg	if test "$build_libtool_libs" = yes; then
614985ee4c00Smrg	  # Building a libtool convenience library.
615085ee4c00Smrg	  # Some compilers have problems with a `.al' extension so
615185ee4c00Smrg	  # convenience libraries should have the same extension an
615285ee4c00Smrg	  # archive normally would.
615385ee4c00Smrg	  oldlibs="$output_objdir/$libname.$libext $oldlibs"
615485ee4c00Smrg	  build_libtool_libs=convenience
615585ee4c00Smrg	  build_old_libs=yes
615685ee4c00Smrg	fi
615785ee4c00Smrg
615885ee4c00Smrg	test -n "$vinfo" && \
615985ee4c00Smrg	  func_warning "\`-version-info/-version-number' is ignored for convenience libraries"
616085ee4c00Smrg
616185ee4c00Smrg	test -n "$release" && \
616285ee4c00Smrg	  func_warning "\`-release' is ignored for convenience libraries"
616385ee4c00Smrg      else
616485ee4c00Smrg
616585ee4c00Smrg	# Parse the version information argument.
616685ee4c00Smrg	save_ifs="$IFS"; IFS=':'
616785ee4c00Smrg	set dummy $vinfo 0 0 0
616885ee4c00Smrg	shift
616985ee4c00Smrg	IFS="$save_ifs"
617085ee4c00Smrg
617185ee4c00Smrg	test -n "$7" && \
617285ee4c00Smrg	  func_fatal_help "too many parameters to \`-version-info'"
617385ee4c00Smrg
617485ee4c00Smrg	# convert absolute version numbers to libtool ages
617585ee4c00Smrg	# this retains compatibility with .la files and attempts
617685ee4c00Smrg	# to make the code below a bit more comprehensible
617785ee4c00Smrg
617885ee4c00Smrg	case $vinfo_number in
617985ee4c00Smrg	yes)
618085ee4c00Smrg	  number_major="$1"
618185ee4c00Smrg	  number_minor="$2"
618285ee4c00Smrg	  number_revision="$3"
618385ee4c00Smrg	  #
618485ee4c00Smrg	  # There are really only two kinds -- those that
618585ee4c00Smrg	  # use the current revision as the major version
618685ee4c00Smrg	  # and those that subtract age and use age as
618785ee4c00Smrg	  # a minor version.  But, then there is irix
618885ee4c00Smrg	  # which has an extra 1 added just for fun
618985ee4c00Smrg	  #
619085ee4c00Smrg	  case $version_type in
619185ee4c00Smrg	  darwin|linux|osf|windows|none)
619285ee4c00Smrg	    func_arith $number_major + $number_minor
619385ee4c00Smrg	    current=$func_arith_result
619485ee4c00Smrg	    age="$number_minor"
619585ee4c00Smrg	    revision="$number_revision"
619685ee4c00Smrg	    ;;
619785ee4c00Smrg	  freebsd-aout|freebsd-elf|sunos)
619885ee4c00Smrg	    current="$number_major"
619985ee4c00Smrg	    revision="$number_minor"
620085ee4c00Smrg	    age="0"
620185ee4c00Smrg	    ;;
620285ee4c00Smrg	  irix|nonstopux)
620385ee4c00Smrg	    func_arith $number_major + $number_minor
620485ee4c00Smrg	    current=$func_arith_result
620585ee4c00Smrg	    age="$number_minor"
620685ee4c00Smrg	    revision="$number_minor"
620785ee4c00Smrg	    lt_irix_increment=no
620885ee4c00Smrg	    ;;
620985ee4c00Smrg	  esac
621085ee4c00Smrg	  ;;
621185ee4c00Smrg	no)
621285ee4c00Smrg	  current="$1"
621385ee4c00Smrg	  revision="$2"
621485ee4c00Smrg	  age="$3"
621585ee4c00Smrg	  ;;
621685ee4c00Smrg	esac
621785ee4c00Smrg
621885ee4c00Smrg	# Check that each of the things are valid numbers.
621985ee4c00Smrg	case $current in
622085ee4c00Smrg	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]) ;;
622185ee4c00Smrg	*)
622285ee4c00Smrg	  func_error "CURRENT \`$current' must be a nonnegative integer"
622385ee4c00Smrg	  func_fatal_error "\`$vinfo' is not valid version information"
622485ee4c00Smrg	  ;;
622585ee4c00Smrg	esac
622685ee4c00Smrg
622785ee4c00Smrg	case $revision in
622885ee4c00Smrg	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]) ;;
622985ee4c00Smrg	*)
623085ee4c00Smrg	  func_error "REVISION \`$revision' must be a nonnegative integer"
623185ee4c00Smrg	  func_fatal_error "\`$vinfo' is not valid version information"
623285ee4c00Smrg	  ;;
623385ee4c00Smrg	esac
623485ee4c00Smrg
623585ee4c00Smrg	case $age in
623685ee4c00Smrg	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]) ;;
623785ee4c00Smrg	*)
623885ee4c00Smrg	  func_error "AGE \`$age' must be a nonnegative integer"
623985ee4c00Smrg	  func_fatal_error "\`$vinfo' is not valid version information"
624085ee4c00Smrg	  ;;
624185ee4c00Smrg	esac
624285ee4c00Smrg
624385ee4c00Smrg	if test "$age" -gt "$current"; then
624485ee4c00Smrg	  func_error "AGE \`$age' is greater than the current interface number \`$current'"
624585ee4c00Smrg	  func_fatal_error "\`$vinfo' is not valid version information"
624685ee4c00Smrg	fi
624785ee4c00Smrg
624885ee4c00Smrg	# Calculate the version variables.
624985ee4c00Smrg	major=
625085ee4c00Smrg	versuffix=
625185ee4c00Smrg	verstring=
625285ee4c00Smrg	case $version_type in
625385ee4c00Smrg	none) ;;
625485ee4c00Smrg
625585ee4c00Smrg	darwin)
625685ee4c00Smrg	  # Like Linux, but with the current version available in
625785ee4c00Smrg	  # verstring for coding it into the library header
625885ee4c00Smrg	  func_arith $current - $age
625985ee4c00Smrg	  major=.$func_arith_result
626085ee4c00Smrg	  versuffix="$major.$age.$revision"
626185ee4c00Smrg	  # Darwin ld doesn't like 0 for these options...
626285ee4c00Smrg	  func_arith $current + 1
626385ee4c00Smrg	  minor_current=$func_arith_result
626485ee4c00Smrg	  xlcverstring="${wl}-compatibility_version ${wl}$minor_current ${wl}-current_version ${wl}$minor_current.$revision"
626585ee4c00Smrg	  verstring="-compatibility_version $minor_current -current_version $minor_current.$revision"
626685ee4c00Smrg	  ;;
626785ee4c00Smrg
626885ee4c00Smrg	freebsd-aout)
626985ee4c00Smrg	  major=".$current"
627085ee4c00Smrg	  versuffix=".$current.$revision";
627185ee4c00Smrg	  ;;
627285ee4c00Smrg
627385ee4c00Smrg	freebsd-elf)
627485ee4c00Smrg	  major=".$current"
627585ee4c00Smrg	  versuffix=".$current"
627685ee4c00Smrg	  ;;
627785ee4c00Smrg
627885ee4c00Smrg	irix | nonstopux)
627985ee4c00Smrg	  if test "X$lt_irix_increment" = "Xno"; then
628085ee4c00Smrg	    func_arith $current - $age
628185ee4c00Smrg	  else
628285ee4c00Smrg	    func_arith $current - $age + 1
628385ee4c00Smrg	  fi
628485ee4c00Smrg	  major=$func_arith_result
628585ee4c00Smrg
628685ee4c00Smrg	  case $version_type in
628785ee4c00Smrg	    nonstopux) verstring_prefix=nonstopux ;;
628885ee4c00Smrg	    *)         verstring_prefix=sgi ;;
628985ee4c00Smrg	  esac
629085ee4c00Smrg	  verstring="$verstring_prefix$major.$revision"
629185ee4c00Smrg
629285ee4c00Smrg	  # Add in all the interfaces that we are compatible with.
629385ee4c00Smrg	  loop=$revision
629485ee4c00Smrg	  while test "$loop" -ne 0; do
629585ee4c00Smrg	    func_arith $revision - $loop
629685ee4c00Smrg	    iface=$func_arith_result
629785ee4c00Smrg	    func_arith $loop - 1
629885ee4c00Smrg	    loop=$func_arith_result
629985ee4c00Smrg	    verstring="$verstring_prefix$major.$iface:$verstring"
630085ee4c00Smrg	  done
630185ee4c00Smrg
630285ee4c00Smrg	  # Before this point, $major must not contain `.'.
630385ee4c00Smrg	  major=.$major
630485ee4c00Smrg	  versuffix="$major.$revision"
630585ee4c00Smrg	  ;;
630685ee4c00Smrg
630785ee4c00Smrg	linux)
630885ee4c00Smrg	  func_arith $current - $age
630985ee4c00Smrg	  major=.$func_arith_result
631085ee4c00Smrg	  versuffix="$major.$age.$revision"
631185ee4c00Smrg	  ;;
631285ee4c00Smrg
631385ee4c00Smrg	osf)
631485ee4c00Smrg	  func_arith $current - $age
631585ee4c00Smrg	  major=.$func_arith_result
631685ee4c00Smrg	  versuffix=".$current.$age.$revision"
631785ee4c00Smrg	  verstring="$current.$age.$revision"
631885ee4c00Smrg
631985ee4c00Smrg	  # Add in all the interfaces that we are compatible with.
632085ee4c00Smrg	  loop=$age
632185ee4c00Smrg	  while test "$loop" -ne 0; do
632285ee4c00Smrg	    func_arith $current - $loop
632385ee4c00Smrg	    iface=$func_arith_result
632485ee4c00Smrg	    func_arith $loop - 1
632585ee4c00Smrg	    loop=$func_arith_result
632685ee4c00Smrg	    verstring="$verstring:${iface}.0"
632785ee4c00Smrg	  done
632885ee4c00Smrg
632985ee4c00Smrg	  # Make executables depend on our current version.
633085ee4c00Smrg	  verstring="$verstring:${current}.0"
633185ee4c00Smrg	  ;;
633285ee4c00Smrg
633385ee4c00Smrg	qnx)
633485ee4c00Smrg	  major=".$current"
633585ee4c00Smrg	  versuffix=".$current"
633685ee4c00Smrg	  ;;
633785ee4c00Smrg
633885ee4c00Smrg	sunos)
633985ee4c00Smrg	  major=".$current"
634085ee4c00Smrg	  versuffix=".$current.$revision"
634185ee4c00Smrg	  ;;
634285ee4c00Smrg
634385ee4c00Smrg	windows)
634485ee4c00Smrg	  # Use '-' rather than '.', since we only want one
634585ee4c00Smrg	  # extension on DOS 8.3 filesystems.
634685ee4c00Smrg	  func_arith $current - $age
634785ee4c00Smrg	  major=$func_arith_result
634885ee4c00Smrg	  versuffix="-$major"
634985ee4c00Smrg	  ;;
635085ee4c00Smrg
635185ee4c00Smrg	*)
635285ee4c00Smrg	  func_fatal_configuration "unknown library version type \`$version_type'"
635385ee4c00Smrg	  ;;
635485ee4c00Smrg	esac
635585ee4c00Smrg
635685ee4c00Smrg	# Clear the version info if we defaulted, and they specified a release.
635785ee4c00Smrg	if test -z "$vinfo" && test -n "$release"; then
635885ee4c00Smrg	  major=
635985ee4c00Smrg	  case $version_type in
636085ee4c00Smrg	  darwin)
636185ee4c00Smrg	    # we can't check for "0.0" in archive_cmds due to quoting
636285ee4c00Smrg	    # problems, so we reset it completely
636385ee4c00Smrg	    verstring=
636485ee4c00Smrg	    ;;
636585ee4c00Smrg	  *)
636685ee4c00Smrg	    verstring="0.0"
636785ee4c00Smrg	    ;;
636885ee4c00Smrg	  esac
636985ee4c00Smrg	  if test "$need_version" = no; then
637085ee4c00Smrg	    versuffix=
637185ee4c00Smrg	  else
637285ee4c00Smrg	    versuffix=".0.0"
637385ee4c00Smrg	  fi
637485ee4c00Smrg	fi
637585ee4c00Smrg
637685ee4c00Smrg	# Remove version info from name if versioning should be avoided
637785ee4c00Smrg	if test "$avoid_version" = yes && test "$need_version" = no; then
637885ee4c00Smrg	  major=
637985ee4c00Smrg	  versuffix=
638085ee4c00Smrg	  verstring=""
638185ee4c00Smrg	fi
638285ee4c00Smrg
638385ee4c00Smrg	# Check to see if the archive will have undefined symbols.
638485ee4c00Smrg	if test "$allow_undefined" = yes; then
638585ee4c00Smrg	  if test "$allow_undefined_flag" = unsupported; then
638685ee4c00Smrg	    func_warning "undefined symbols not allowed in $host shared libraries"
638785ee4c00Smrg	    build_libtool_libs=no
638885ee4c00Smrg	    build_old_libs=yes
638985ee4c00Smrg	  fi
639085ee4c00Smrg	else
639185ee4c00Smrg	  # Don't allow undefined symbols.
639285ee4c00Smrg	  allow_undefined_flag="$no_undefined_flag"
639385ee4c00Smrg	fi
639485ee4c00Smrg
639585ee4c00Smrg      fi
639685ee4c00Smrg
639785ee4c00Smrg      func_generate_dlsyms "$libname" "$libname" "yes"
639885ee4c00Smrg      libobjs="$libobjs $symfileobj"
639985ee4c00Smrg      test "X$libobjs" = "X " && libobjs=
640085ee4c00Smrg
640185ee4c00Smrg      if test "$mode" != relink; then
640285ee4c00Smrg	# Remove our outputs, but don't remove object files since they
640385ee4c00Smrg	# may have been created when compiling PIC objects.
640485ee4c00Smrg	removelist=
640585ee4c00Smrg	tempremovelist=`$ECHO "$output_objdir/*"`
640685ee4c00Smrg	for p in $tempremovelist; do
640785ee4c00Smrg	  case $p in
640885ee4c00Smrg	    *.$objext | *.gcno)
640985ee4c00Smrg	       ;;
641085ee4c00Smrg	    $output_objdir/$outputname | $output_objdir/$libname.* | $output_objdir/${libname}${release}.*)
641185ee4c00Smrg	       if test "X$precious_files_regex" != "X"; then
641285ee4c00Smrg		 if $ECHO "$p" | $EGREP -e "$precious_files_regex" >/dev/null 2>&1
641385ee4c00Smrg		 then
641485ee4c00Smrg		   continue
641585ee4c00Smrg		 fi
641685ee4c00Smrg	       fi
641785ee4c00Smrg	       removelist="$removelist $p"
641885ee4c00Smrg	       ;;
641985ee4c00Smrg	    *) ;;
642085ee4c00Smrg	  esac
642185ee4c00Smrg	done
642285ee4c00Smrg	test -n "$removelist" && \
642385ee4c00Smrg	  func_show_eval "${RM}r \$removelist"
642485ee4c00Smrg      fi
642585ee4c00Smrg
642685ee4c00Smrg      # Now set the variables for building old libraries.
642785ee4c00Smrg      if test "$build_old_libs" = yes && test "$build_libtool_libs" != convenience ; then
642885ee4c00Smrg	oldlibs="$oldlibs $output_objdir/$libname.$libext"
642985ee4c00Smrg
643085ee4c00Smrg	# Transform .lo files to .o files.
643185ee4c00Smrg	oldobjs="$objs "`$ECHO "X$libobjs" | $SP2NL | $Xsed -e '/\.'${libext}'$/d' -e "$lo2o" | $NL2SP`
643285ee4c00Smrg      fi
643385ee4c00Smrg
643485ee4c00Smrg      # Eliminate all temporary directories.
643585ee4c00Smrg      #for path in $notinst_path; do
643685ee4c00Smrg      #	lib_search_path=`$ECHO "X$lib_search_path " | $Xsed -e "s% $path % %g"`
643785ee4c00Smrg      #	deplibs=`$ECHO "X$deplibs " | $Xsed -e "s% -L$path % %g"`
643885ee4c00Smrg      #	dependency_libs=`$ECHO "X$dependency_libs " | $Xsed -e "s% -L$path % %g"`
643985ee4c00Smrg      #done
644085ee4c00Smrg
644185ee4c00Smrg      if test -n "$xrpath"; then
644285ee4c00Smrg	# If the user specified any rpath flags, then add them.
644385ee4c00Smrg	temp_xrpath=
644485ee4c00Smrg	for libdir in $xrpath; do
644585ee4c00Smrg	  temp_xrpath="$temp_xrpath -R$libdir"
644685ee4c00Smrg	  case "$finalize_rpath " in
644785ee4c00Smrg	  *" $libdir "*) ;;
644885ee4c00Smrg	  *) finalize_rpath="$finalize_rpath $libdir" ;;
644985ee4c00Smrg	  esac
645085ee4c00Smrg	done
645185ee4c00Smrg	if test "$hardcode_into_libs" != yes || test "$build_old_libs" = yes; then
645285ee4c00Smrg	  dependency_libs="$temp_xrpath $dependency_libs"
645385ee4c00Smrg	fi
645485ee4c00Smrg      fi
645585ee4c00Smrg
645685ee4c00Smrg      # Make sure dlfiles contains only unique files that won't be dlpreopened
645785ee4c00Smrg      old_dlfiles="$dlfiles"
645885ee4c00Smrg      dlfiles=
645985ee4c00Smrg      for lib in $old_dlfiles; do
646085ee4c00Smrg	case " $dlprefiles $dlfiles " in
646185ee4c00Smrg	*" $lib "*) ;;
646285ee4c00Smrg	*) dlfiles="$dlfiles $lib" ;;
646385ee4c00Smrg	esac
646485ee4c00Smrg      done
646585ee4c00Smrg
646685ee4c00Smrg      # Make sure dlprefiles contains only unique files
646785ee4c00Smrg      old_dlprefiles="$dlprefiles"
646885ee4c00Smrg      dlprefiles=
646985ee4c00Smrg      for lib in $old_dlprefiles; do
647085ee4c00Smrg	case "$dlprefiles " in
647185ee4c00Smrg	*" $lib "*) ;;
647285ee4c00Smrg	*) dlprefiles="$dlprefiles $lib" ;;
647385ee4c00Smrg	esac
647485ee4c00Smrg      done
647585ee4c00Smrg
647685ee4c00Smrg      if test "$build_libtool_libs" = yes; then
647785ee4c00Smrg	if test -n "$rpath"; then
647885ee4c00Smrg	  case $host in
647985ee4c00Smrg	  *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-*-beos* | *-cegcc*)
648085ee4c00Smrg	    # these systems don't actually have a c library (as such)!
648185ee4c00Smrg	    ;;
648285ee4c00Smrg	  *-*-rhapsody* | *-*-darwin1.[012])
648385ee4c00Smrg	    # Rhapsody C library is in the System framework
648485ee4c00Smrg	    deplibs="$deplibs System.ltframework"
648585ee4c00Smrg	    ;;
648685ee4c00Smrg	  *-*-netbsd*)
648785ee4c00Smrg	    # Don't link with libc until the a.out ld.so is fixed.
648885ee4c00Smrg	    ;;
648985ee4c00Smrg	  *-*-openbsd* | *-*-freebsd* | *-*-dragonfly*)
649085ee4c00Smrg	    # Do not include libc due to us having libc/libc_r.
649185ee4c00Smrg	    ;;
649285ee4c00Smrg	  *-*-sco3.2v5* | *-*-sco5v6*)
649385ee4c00Smrg	    # Causes problems with __ctype
649485ee4c00Smrg	    ;;
649585ee4c00Smrg	  *-*-sysv4.2uw2* | *-*-sysv5* | *-*-unixware* | *-*-OpenUNIX*)
649685ee4c00Smrg	    # Compiler inserts libc in the correct place for threads to work
649785ee4c00Smrg	    ;;
649885ee4c00Smrg	  *)
649985ee4c00Smrg	    # Add libc to deplibs on all other systems if necessary.
650085ee4c00Smrg	    if test "$build_libtool_need_lc" = "yes"; then
650185ee4c00Smrg	      deplibs="$deplibs -lc"
650285ee4c00Smrg	    fi
650385ee4c00Smrg	    ;;
650485ee4c00Smrg	  esac
650585ee4c00Smrg	fi
650685ee4c00Smrg
650785ee4c00Smrg	# Transform deplibs into only deplibs that can be linked in shared.
650885ee4c00Smrg	name_save=$name
650985ee4c00Smrg	libname_save=$libname
651085ee4c00Smrg	release_save=$release
651185ee4c00Smrg	versuffix_save=$versuffix
651285ee4c00Smrg	major_save=$major
651385ee4c00Smrg	# I'm not sure if I'm treating the release correctly.  I think
651485ee4c00Smrg	# release should show up in the -l (ie -lgmp5) so we don't want to
651585ee4c00Smrg	# add it in twice.  Is that correct?
651685ee4c00Smrg	release=""
651785ee4c00Smrg	versuffix=""
651885ee4c00Smrg	major=""
651985ee4c00Smrg	newdeplibs=
652085ee4c00Smrg	droppeddeps=no
652185ee4c00Smrg	case $deplibs_check_method in
652285ee4c00Smrg	pass_all)
652385ee4c00Smrg	  # Don't check for shared/static.  Everything works.
652485ee4c00Smrg	  # This might be a little naive.  We might want to check
652585ee4c00Smrg	  # whether the library exists or not.  But this is on
652685ee4c00Smrg	  # osf3 & osf4 and I'm not really sure... Just
652785ee4c00Smrg	  # implementing what was already the behavior.
652885ee4c00Smrg	  newdeplibs=$deplibs
652985ee4c00Smrg	  ;;
653085ee4c00Smrg	test_compile)
653185ee4c00Smrg	  # This code stresses the "libraries are programs" paradigm to its
653285ee4c00Smrg	  # limits. Maybe even breaks it.  We compile a program, linking it
653385ee4c00Smrg	  # against the deplibs as a proxy for the library.  Then we can check
653485ee4c00Smrg	  # whether they linked in statically or dynamically with ldd.
653585ee4c00Smrg	  $opt_dry_run || $RM conftest.c
653685ee4c00Smrg	  cat > conftest.c <<EOF
653785ee4c00Smrg	  int main() { return 0; }
653885ee4c00SmrgEOF
653985ee4c00Smrg	  $opt_dry_run || $RM conftest
654085ee4c00Smrg	  if $LTCC $LTCFLAGS -o conftest conftest.c $deplibs; then
654185ee4c00Smrg	    ldd_output=`ldd conftest`
654285ee4c00Smrg	    for i in $deplibs; do
654385ee4c00Smrg	      case $i in
654485ee4c00Smrg	      -l*)
654585ee4c00Smrg		func_stripname -l '' "$i"
654685ee4c00Smrg		name=$func_stripname_result
654785ee4c00Smrg		if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then
654885ee4c00Smrg		  case " $predeps $postdeps " in
654985ee4c00Smrg		  *" $i "*)
655085ee4c00Smrg		    newdeplibs="$newdeplibs $i"
655185ee4c00Smrg		    i=""
655285ee4c00Smrg		    ;;
655385ee4c00Smrg		  esac
655485ee4c00Smrg		fi
655585ee4c00Smrg		if test -n "$i" ; then
655685ee4c00Smrg		  libname=`eval "\\$ECHO \"$libname_spec\""`
655785ee4c00Smrg		  deplib_matches=`eval "\\$ECHO \"$library_names_spec\""`
655885ee4c00Smrg		  set dummy $deplib_matches; shift
655985ee4c00Smrg		  deplib_match=$1
656085ee4c00Smrg		  if test `expr "$ldd_output" : ".*$deplib_match"` -ne 0 ; then
656185ee4c00Smrg		    newdeplibs="$newdeplibs $i"
656285ee4c00Smrg		  else
656385ee4c00Smrg		    droppeddeps=yes
656485ee4c00Smrg		    $ECHO
656585ee4c00Smrg		    $ECHO "*** Warning: dynamic linker does not accept needed library $i."
656685ee4c00Smrg		    $ECHO "*** I have the capability to make that library automatically link in when"
656785ee4c00Smrg		    $ECHO "*** you link to this library.  But I can only do this if you have a"
656885ee4c00Smrg		    $ECHO "*** shared version of the library, which I believe you do not have"
656985ee4c00Smrg		    $ECHO "*** because a test_compile did reveal that the linker did not use it for"
657085ee4c00Smrg		    $ECHO "*** its dynamic dependency list that programs get resolved with at runtime."
657185ee4c00Smrg		  fi
657285ee4c00Smrg		fi
657385ee4c00Smrg		;;
657485ee4c00Smrg	      *)
657585ee4c00Smrg		newdeplibs="$newdeplibs $i"
657685ee4c00Smrg		;;
657785ee4c00Smrg	      esac
657885ee4c00Smrg	    done
657985ee4c00Smrg	  else
658085ee4c00Smrg	    # Error occurred in the first compile.  Let's try to salvage
658185ee4c00Smrg	    # the situation: Compile a separate program for each library.
658285ee4c00Smrg	    for i in $deplibs; do
658385ee4c00Smrg	      case $i in
658485ee4c00Smrg	      -l*)
658585ee4c00Smrg		func_stripname -l '' "$i"
658685ee4c00Smrg		name=$func_stripname_result
658785ee4c00Smrg		$opt_dry_run || $RM conftest
658885ee4c00Smrg		if $LTCC $LTCFLAGS -o conftest conftest.c $i; then
658985ee4c00Smrg		  ldd_output=`ldd conftest`
659085ee4c00Smrg		  if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then
659185ee4c00Smrg		    case " $predeps $postdeps " in
659285ee4c00Smrg		    *" $i "*)
659385ee4c00Smrg		      newdeplibs="$newdeplibs $i"
659485ee4c00Smrg		      i=""
659585ee4c00Smrg		      ;;
659685ee4c00Smrg		    esac
659785ee4c00Smrg		  fi
659885ee4c00Smrg		  if test -n "$i" ; then
659985ee4c00Smrg		    libname=`eval "\\$ECHO \"$libname_spec\""`
660085ee4c00Smrg		    deplib_matches=`eval "\\$ECHO \"$library_names_spec\""`
660185ee4c00Smrg		    set dummy $deplib_matches; shift
660285ee4c00Smrg		    deplib_match=$1
660385ee4c00Smrg		    if test `expr "$ldd_output" : ".*$deplib_match"` -ne 0 ; then
660485ee4c00Smrg		      newdeplibs="$newdeplibs $i"
660585ee4c00Smrg		    else
660685ee4c00Smrg		      droppeddeps=yes
660785ee4c00Smrg		      $ECHO
660885ee4c00Smrg		      $ECHO "*** Warning: dynamic linker does not accept needed library $i."
660985ee4c00Smrg		      $ECHO "*** I have the capability to make that library automatically link in when"
661085ee4c00Smrg		      $ECHO "*** you link to this library.  But I can only do this if you have a"
661185ee4c00Smrg		      $ECHO "*** shared version of the library, which you do not appear to have"
661285ee4c00Smrg		      $ECHO "*** because a test_compile did reveal that the linker did not use this one"
661385ee4c00Smrg		      $ECHO "*** as a dynamic dependency that programs can get resolved with at runtime."
661485ee4c00Smrg		    fi
661585ee4c00Smrg		  fi
661685ee4c00Smrg		else
661785ee4c00Smrg		  droppeddeps=yes
661885ee4c00Smrg		  $ECHO
661985ee4c00Smrg		  $ECHO "*** Warning!  Library $i is needed by this library but I was not able to"
662085ee4c00Smrg		  $ECHO "*** make it link in!  You will probably need to install it or some"
662185ee4c00Smrg		  $ECHO "*** library that it depends on before this library will be fully"
662285ee4c00Smrg		  $ECHO "*** functional.  Installing it before continuing would be even better."
662385ee4c00Smrg		fi
662485ee4c00Smrg		;;
662585ee4c00Smrg	      *)
662685ee4c00Smrg		newdeplibs="$newdeplibs $i"
662785ee4c00Smrg		;;
662885ee4c00Smrg	      esac
662985ee4c00Smrg	    done
663085ee4c00Smrg	  fi
663185ee4c00Smrg	  ;;
663285ee4c00Smrg	file_magic*)
663385ee4c00Smrg	  set dummy $deplibs_check_method; shift
663485ee4c00Smrg	  file_magic_regex=`expr "$deplibs_check_method" : "$1 \(.*\)"`
663585ee4c00Smrg	  for a_deplib in $deplibs; do
663685ee4c00Smrg	    case $a_deplib in
663785ee4c00Smrg	    -l*)
663885ee4c00Smrg	      func_stripname -l '' "$a_deplib"
663985ee4c00Smrg	      name=$func_stripname_result
664085ee4c00Smrg	      if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then
664185ee4c00Smrg		case " $predeps $postdeps " in
664285ee4c00Smrg		*" $a_deplib "*)
664385ee4c00Smrg		  newdeplibs="$newdeplibs $a_deplib"
664485ee4c00Smrg		  a_deplib=""
664585ee4c00Smrg		  ;;
664685ee4c00Smrg		esac
664785ee4c00Smrg	      fi
664885ee4c00Smrg	      if test -n "$a_deplib" ; then
664985ee4c00Smrg		libname=`eval "\\$ECHO \"$libname_spec\""`
665085ee4c00Smrg		for i in $lib_search_path $sys_lib_search_path $shlib_search_path; do
665185ee4c00Smrg		  potential_libs=`ls $i/$libname[.-]* 2>/dev/null`
665285ee4c00Smrg		  for potent_lib in $potential_libs; do
665385ee4c00Smrg		      # Follow soft links.
665485ee4c00Smrg		      if ls -lLd "$potent_lib" 2>/dev/null |
665585ee4c00Smrg			 $GREP " -> " >/dev/null; then
665685ee4c00Smrg			continue
665785ee4c00Smrg		      fi
665885ee4c00Smrg		      # The statement above tries to avoid entering an
665985ee4c00Smrg		      # endless loop below, in case of cyclic links.
666085ee4c00Smrg		      # We might still enter an endless loop, since a link
666185ee4c00Smrg		      # loop can be closed while we follow links,
666285ee4c00Smrg		      # but so what?
666385ee4c00Smrg		      potlib="$potent_lib"
666485ee4c00Smrg		      while test -h "$potlib" 2>/dev/null; do
666585ee4c00Smrg			potliblink=`ls -ld $potlib | ${SED} 's/.* -> //'`
666685ee4c00Smrg			case $potliblink in
666785ee4c00Smrg			[\\/]* | [A-Za-z]:[\\/]*) potlib="$potliblink";;
666885ee4c00Smrg			*) potlib=`$ECHO "X$potlib" | $Xsed -e 's,[^/]*$,,'`"$potliblink";;
666985ee4c00Smrg			esac
667085ee4c00Smrg		      done
667185ee4c00Smrg		      if eval $file_magic_cmd \"\$potlib\" 2>/dev/null |
667285ee4c00Smrg			 $SED -e 10q |
667385ee4c00Smrg			 $EGREP "$file_magic_regex" > /dev/null; then
667485ee4c00Smrg			newdeplibs="$newdeplibs $a_deplib"
667585ee4c00Smrg			a_deplib=""
667685ee4c00Smrg			break 2
667785ee4c00Smrg		      fi
667885ee4c00Smrg		  done
667985ee4c00Smrg		done
668085ee4c00Smrg	      fi
668185ee4c00Smrg	      if test -n "$a_deplib" ; then
668285ee4c00Smrg		droppeddeps=yes
668385ee4c00Smrg		$ECHO
668485ee4c00Smrg		$ECHO "*** Warning: linker path does not have real file for library $a_deplib."
668585ee4c00Smrg		$ECHO "*** I have the capability to make that library automatically link in when"
668685ee4c00Smrg		$ECHO "*** you link to this library.  But I can only do this if you have a"
668785ee4c00Smrg		$ECHO "*** shared version of the library, which you do not appear to have"
668885ee4c00Smrg		$ECHO "*** because I did check the linker path looking for a file starting"
668985ee4c00Smrg		if test -z "$potlib" ; then
669085ee4c00Smrg		  $ECHO "*** with $libname but no candidates were found. (...for file magic test)"
669185ee4c00Smrg		else
669285ee4c00Smrg		  $ECHO "*** with $libname and none of the candidates passed a file format test"
669385ee4c00Smrg		  $ECHO "*** using a file magic. Last file checked: $potlib"
669485ee4c00Smrg		fi
669585ee4c00Smrg	      fi
669685ee4c00Smrg	      ;;
669785ee4c00Smrg	    *)
669885ee4c00Smrg	      # Add a -L argument.
669985ee4c00Smrg	      newdeplibs="$newdeplibs $a_deplib"
670085ee4c00Smrg	      ;;
670185ee4c00Smrg	    esac
670285ee4c00Smrg	  done # Gone through all deplibs.
670385ee4c00Smrg	  ;;
670485ee4c00Smrg	match_pattern*)
670585ee4c00Smrg	  set dummy $deplibs_check_method; shift
670685ee4c00Smrg	  match_pattern_regex=`expr "$deplibs_check_method" : "$1 \(.*\)"`
670785ee4c00Smrg	  for a_deplib in $deplibs; do
670885ee4c00Smrg	    case $a_deplib in
670985ee4c00Smrg	    -l*)
671085ee4c00Smrg	      func_stripname -l '' "$a_deplib"
671185ee4c00Smrg	      name=$func_stripname_result
671285ee4c00Smrg	      if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then
671385ee4c00Smrg		case " $predeps $postdeps " in
671485ee4c00Smrg		*" $a_deplib "*)
671585ee4c00Smrg		  newdeplibs="$newdeplibs $a_deplib"
671685ee4c00Smrg		  a_deplib=""
671785ee4c00Smrg		  ;;
671885ee4c00Smrg		esac
671985ee4c00Smrg	      fi
672085ee4c00Smrg	      if test -n "$a_deplib" ; then
672185ee4c00Smrg		libname=`eval "\\$ECHO \"$libname_spec\""`
672285ee4c00Smrg		for i in $lib_search_path $sys_lib_search_path $shlib_search_path; do
672385ee4c00Smrg		  potential_libs=`ls $i/$libname[.-]* 2>/dev/null`
672485ee4c00Smrg		  for potent_lib in $potential_libs; do
672585ee4c00Smrg		    potlib="$potent_lib" # see symlink-check above in file_magic test
672685ee4c00Smrg		    if eval "\$ECHO \"X$potent_lib\"" 2>/dev/null | $Xsed -e 10q | \
672785ee4c00Smrg		       $EGREP "$match_pattern_regex" > /dev/null; then
672885ee4c00Smrg		      newdeplibs="$newdeplibs $a_deplib"
672985ee4c00Smrg		      a_deplib=""
673085ee4c00Smrg		      break 2
673185ee4c00Smrg		    fi
673285ee4c00Smrg		  done
673385ee4c00Smrg		done
673485ee4c00Smrg	      fi
673585ee4c00Smrg	      if test -n "$a_deplib" ; then
673685ee4c00Smrg		droppeddeps=yes
673785ee4c00Smrg		$ECHO
673885ee4c00Smrg		$ECHO "*** Warning: linker path does not have real file for library $a_deplib."
673985ee4c00Smrg		$ECHO "*** I have the capability to make that library automatically link in when"
674085ee4c00Smrg		$ECHO "*** you link to this library.  But I can only do this if you have a"
674185ee4c00Smrg		$ECHO "*** shared version of the library, which you do not appear to have"
674285ee4c00Smrg		$ECHO "*** because I did check the linker path looking for a file starting"
674385ee4c00Smrg		if test -z "$potlib" ; then
674485ee4c00Smrg		  $ECHO "*** with $libname but no candidates were found. (...for regex pattern test)"
674585ee4c00Smrg		else
674685ee4c00Smrg		  $ECHO "*** with $libname and none of the candidates passed a file format test"
674785ee4c00Smrg		  $ECHO "*** using a regex pattern. Last file checked: $potlib"
674885ee4c00Smrg		fi
674985ee4c00Smrg	      fi
675085ee4c00Smrg	      ;;
675185ee4c00Smrg	    *)
675285ee4c00Smrg	      # Add a -L argument.
675385ee4c00Smrg	      newdeplibs="$newdeplibs $a_deplib"
675485ee4c00Smrg	      ;;
675585ee4c00Smrg	    esac
675685ee4c00Smrg	  done # Gone through all deplibs.
675785ee4c00Smrg	  ;;
675885ee4c00Smrg	none | unknown | *)
675985ee4c00Smrg	  newdeplibs=""
676085ee4c00Smrg	  tmp_deplibs=`$ECHO "X $deplibs" | $Xsed \
676185ee4c00Smrg	      -e 's/ -lc$//' -e 's/ -[LR][^ ]*//g'`
676285ee4c00Smrg	  if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then
676385ee4c00Smrg	    for i in $predeps $postdeps ; do
676485ee4c00Smrg	      # can't use Xsed below, because $i might contain '/'
676585ee4c00Smrg	      tmp_deplibs=`$ECHO "X $tmp_deplibs" | $Xsed -e "s,$i,,"`
676685ee4c00Smrg	    done
676785ee4c00Smrg	  fi
676885ee4c00Smrg	  if $ECHO "X $tmp_deplibs" | $Xsed -e 's/[	 ]//g' |
676985ee4c00Smrg	     $GREP . >/dev/null; then
677085ee4c00Smrg	    $ECHO
677185ee4c00Smrg	    if test "X$deplibs_check_method" = "Xnone"; then
677285ee4c00Smrg	      $ECHO "*** Warning: inter-library dependencies are not supported in this platform."
677385ee4c00Smrg	    else
677485ee4c00Smrg	      $ECHO "*** Warning: inter-library dependencies are not known to be supported."
677585ee4c00Smrg	    fi
677685ee4c00Smrg	    $ECHO "*** All declared inter-library dependencies are being dropped."
677785ee4c00Smrg	    droppeddeps=yes
677885ee4c00Smrg	  fi
677985ee4c00Smrg	  ;;
678085ee4c00Smrg	esac
678185ee4c00Smrg	versuffix=$versuffix_save
678285ee4c00Smrg	major=$major_save
678385ee4c00Smrg	release=$release_save
678485ee4c00Smrg	libname=$libname_save
678585ee4c00Smrg	name=$name_save
678685ee4c00Smrg
678785ee4c00Smrg	case $host in
678885ee4c00Smrg	*-*-rhapsody* | *-*-darwin1.[012])
678985ee4c00Smrg	  # On Rhapsody replace the C library with the System framework
679085ee4c00Smrg	  newdeplibs=`$ECHO "X $newdeplibs" | $Xsed -e 's/ -lc / System.ltframework /'`
679185ee4c00Smrg	  ;;
679285ee4c00Smrg	esac
679385ee4c00Smrg
679485ee4c00Smrg	if test "$droppeddeps" = yes; then
679585ee4c00Smrg	  if test "$module" = yes; then
679685ee4c00Smrg	    $ECHO
679785ee4c00Smrg	    $ECHO "*** Warning: libtool could not satisfy all declared inter-library"
679885ee4c00Smrg	    $ECHO "*** dependencies of module $libname.  Therefore, libtool will create"
679985ee4c00Smrg	    $ECHO "*** a static module, that should work as long as the dlopening"
680085ee4c00Smrg	    $ECHO "*** application is linked with the -dlopen flag."
680185ee4c00Smrg	    if test -z "$global_symbol_pipe"; then
680285ee4c00Smrg	      $ECHO
680385ee4c00Smrg	      $ECHO "*** However, this would only work if libtool was able to extract symbol"
680485ee4c00Smrg	      $ECHO "*** lists from a program, using \`nm' or equivalent, but libtool could"
680585ee4c00Smrg	      $ECHO "*** not find such a program.  So, this module is probably useless."
680685ee4c00Smrg	      $ECHO "*** \`nm' from GNU binutils and a full rebuild may help."
680785ee4c00Smrg	    fi
680885ee4c00Smrg	    if test "$build_old_libs" = no; then
680985ee4c00Smrg	      oldlibs="$output_objdir/$libname.$libext"
681085ee4c00Smrg	      build_libtool_libs=module
681185ee4c00Smrg	      build_old_libs=yes
681285ee4c00Smrg	    else
681385ee4c00Smrg	      build_libtool_libs=no
681485ee4c00Smrg	    fi
681585ee4c00Smrg	  else
681685ee4c00Smrg	    $ECHO "*** The inter-library dependencies that have been dropped here will be"
681785ee4c00Smrg	    $ECHO "*** automatically added whenever a program is linked with this library"
681885ee4c00Smrg	    $ECHO "*** or is declared to -dlopen it."
681985ee4c00Smrg
682085ee4c00Smrg	    if test "$allow_undefined" = no; then
682185ee4c00Smrg	      $ECHO
682285ee4c00Smrg	      $ECHO "*** Since this library must not contain undefined symbols,"
682385ee4c00Smrg	      $ECHO "*** because either the platform does not support them or"
682485ee4c00Smrg	      $ECHO "*** it was explicitly requested with -no-undefined,"
682585ee4c00Smrg	      $ECHO "*** libtool will only create a static version of it."
682685ee4c00Smrg	      if test "$build_old_libs" = no; then
682785ee4c00Smrg		oldlibs="$output_objdir/$libname.$libext"
682885ee4c00Smrg		build_libtool_libs=module
682985ee4c00Smrg		build_old_libs=yes
683085ee4c00Smrg	      else
683185ee4c00Smrg		build_libtool_libs=no
683285ee4c00Smrg	      fi
683385ee4c00Smrg	    fi
683485ee4c00Smrg	  fi
683585ee4c00Smrg	fi
683685ee4c00Smrg	# Done checking deplibs!
683785ee4c00Smrg	deplibs=$newdeplibs
683885ee4c00Smrg      fi
683985ee4c00Smrg      # Time to change all our "foo.ltframework" stuff back to "-framework foo"
684085ee4c00Smrg      case $host in
684185ee4c00Smrg	*-*-darwin*)
684285ee4c00Smrg	  newdeplibs=`$ECHO "X $newdeplibs" | $Xsed -e 's% \([^ $]*\).ltframework% -framework \1%g'`
684385ee4c00Smrg	  new_inherited_linker_flags=`$ECHO "X $new_inherited_linker_flags" | $Xsed -e 's% \([^ $]*\).ltframework% -framework \1%g'`
684485ee4c00Smrg	  deplibs=`$ECHO "X $deplibs" | $Xsed -e 's% \([^ $]*\).ltframework% -framework \1%g'`
684585ee4c00Smrg	  ;;
684685ee4c00Smrg      esac
684785ee4c00Smrg
684885ee4c00Smrg      # move library search paths that coincide with paths to not yet
684985ee4c00Smrg      # installed libraries to the beginning of the library search list
685085ee4c00Smrg      new_libs=
685185ee4c00Smrg      for path in $notinst_path; do
685285ee4c00Smrg	case " $new_libs " in
685385ee4c00Smrg	*" -L$path/$objdir "*) ;;
685485ee4c00Smrg	*)
685585ee4c00Smrg	  case " $deplibs " in
685685ee4c00Smrg	  *" -L$path/$objdir "*)
685785ee4c00Smrg	    new_libs="$new_libs -L$path/$objdir" ;;
685885ee4c00Smrg	  esac
685985ee4c00Smrg	  ;;
686085ee4c00Smrg	esac
686185ee4c00Smrg      done
686285ee4c00Smrg      for deplib in $deplibs; do
686385ee4c00Smrg	case $deplib in
686485ee4c00Smrg	-L*)
686585ee4c00Smrg	  case " $new_libs " in
686685ee4c00Smrg	  *" $deplib "*) ;;
686785ee4c00Smrg	  *) new_libs="$new_libs $deplib" ;;
686885ee4c00Smrg	  esac
686985ee4c00Smrg	  ;;
687085ee4c00Smrg	*) new_libs="$new_libs $deplib" ;;
687185ee4c00Smrg	esac
687285ee4c00Smrg      done
687385ee4c00Smrg      deplibs="$new_libs"
687485ee4c00Smrg
687585ee4c00Smrg      # All the library-specific variables (install_libdir is set above).
687685ee4c00Smrg      library_names=
687785ee4c00Smrg      old_library=
687885ee4c00Smrg      dlname=
687985ee4c00Smrg
688085ee4c00Smrg      # Test again, we may have decided not to build it any more
688185ee4c00Smrg      if test "$build_libtool_libs" = yes; then
688285ee4c00Smrg	if test "$hardcode_into_libs" = yes; then
688385ee4c00Smrg	  # Hardcode the library paths
688485ee4c00Smrg	  hardcode_libdirs=
688585ee4c00Smrg	  dep_rpath=
688685ee4c00Smrg	  rpath="$finalize_rpath"
688785ee4c00Smrg	  test "$mode" != relink && rpath="$compile_rpath$rpath"
688885ee4c00Smrg	  for libdir in $rpath; do
688985ee4c00Smrg	    if test -n "$hardcode_libdir_flag_spec"; then
689085ee4c00Smrg	      if test -n "$hardcode_libdir_separator"; then
689185ee4c00Smrg		if test -z "$hardcode_libdirs"; then
689285ee4c00Smrg		  hardcode_libdirs="$libdir"
689385ee4c00Smrg		else
689485ee4c00Smrg		  # Just accumulate the unique libdirs.
689585ee4c00Smrg		  case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in
689685ee4c00Smrg		  *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*)
689785ee4c00Smrg		    ;;
689885ee4c00Smrg		  *)
689985ee4c00Smrg		    hardcode_libdirs="$hardcode_libdirs$hardcode_libdir_separator$libdir"
690085ee4c00Smrg		    ;;
690185ee4c00Smrg		  esac
690285ee4c00Smrg		fi
690385ee4c00Smrg	      else
690485ee4c00Smrg		eval flag=\"$hardcode_libdir_flag_spec\"
690585ee4c00Smrg		dep_rpath="$dep_rpath $flag"
690685ee4c00Smrg	      fi
690785ee4c00Smrg	    elif test -n "$runpath_var"; then
690885ee4c00Smrg	      case "$perm_rpath " in
690985ee4c00Smrg	      *" $libdir "*) ;;
691085ee4c00Smrg	      *) perm_rpath="$perm_rpath $libdir" ;;
691185ee4c00Smrg	      esac
691285ee4c00Smrg	    fi
691385ee4c00Smrg	  done
691485ee4c00Smrg	  # Substitute the hardcoded libdirs into the rpath.
691585ee4c00Smrg	  if test -n "$hardcode_libdir_separator" &&
691685ee4c00Smrg	     test -n "$hardcode_libdirs"; then
691785ee4c00Smrg	    libdir="$hardcode_libdirs"
691885ee4c00Smrg	    if test -n "$hardcode_libdir_flag_spec_ld"; then
691985ee4c00Smrg	      eval dep_rpath=\"$hardcode_libdir_flag_spec_ld\"
692085ee4c00Smrg	    else
692185ee4c00Smrg	      eval dep_rpath=\"$hardcode_libdir_flag_spec\"
692285ee4c00Smrg	    fi
692385ee4c00Smrg	  fi
692485ee4c00Smrg	  if test -n "$runpath_var" && test -n "$perm_rpath"; then
692585ee4c00Smrg	    # We should set the runpath_var.
692685ee4c00Smrg	    rpath=
692785ee4c00Smrg	    for dir in $perm_rpath; do
692885ee4c00Smrg	      rpath="$rpath$dir:"
692985ee4c00Smrg	    done
693085ee4c00Smrg	    eval "$runpath_var='$rpath\$$runpath_var'; export $runpath_var"
693185ee4c00Smrg	  fi
693285ee4c00Smrg	  test -n "$dep_rpath" && deplibs="$dep_rpath $deplibs"
693385ee4c00Smrg	fi
6934692f60a7Smrg
693585ee4c00Smrg	shlibpath="$finalize_shlibpath"
693685ee4c00Smrg	test "$mode" != relink && shlibpath="$compile_shlibpath$shlibpath"
693785ee4c00Smrg	if test -n "$shlibpath"; then
693885ee4c00Smrg	  eval "$shlibpath_var='$shlibpath\$$shlibpath_var'; export $shlibpath_var"
693985ee4c00Smrg	fi
6940692f60a7Smrg
694185ee4c00Smrg	# Get the real and link names of the library.
694285ee4c00Smrg	eval shared_ext=\"$shrext_cmds\"
694385ee4c00Smrg	eval library_names=\"$library_names_spec\"
694485ee4c00Smrg	set dummy $library_names
694585ee4c00Smrg	shift
694685ee4c00Smrg	realname="$1"
694785ee4c00Smrg	shift
6948692f60a7Smrg
694985ee4c00Smrg	if test -n "$soname_spec"; then
695085ee4c00Smrg	  eval soname=\"$soname_spec\"
695185ee4c00Smrg	else
695285ee4c00Smrg	  soname="$realname"
695385ee4c00Smrg	fi
695485ee4c00Smrg	if test -z "$dlname"; then
695585ee4c00Smrg	  dlname=$soname
695685ee4c00Smrg	fi
6957692f60a7Smrg
695885ee4c00Smrg	lib="$output_objdir/$realname"
695985ee4c00Smrg	linknames=
696085ee4c00Smrg	for link
696185ee4c00Smrg	do
696285ee4c00Smrg	  linknames="$linknames $link"
696385ee4c00Smrg	done
6964692f60a7Smrg
696585ee4c00Smrg	# Use standard objects if they are pic
696685ee4c00Smrg	test -z "$pic_flag" && libobjs=`$ECHO "X$libobjs" | $SP2NL | $Xsed -e "$lo2o" | $NL2SP`
696785ee4c00Smrg	test "X$libobjs" = "X " && libobjs=
6968692f60a7Smrg
696985ee4c00Smrg	delfiles=
697085ee4c00Smrg	if test -n "$export_symbols" && test -n "$include_expsyms"; then
697185ee4c00Smrg	  $opt_dry_run || cp "$export_symbols" "$output_objdir/$libname.uexp"
697285ee4c00Smrg	  export_symbols="$output_objdir/$libname.uexp"
697385ee4c00Smrg	  delfiles="$delfiles $export_symbols"
697485ee4c00Smrg	fi
6975692f60a7Smrg
697685ee4c00Smrg	orig_export_symbols=
697785ee4c00Smrg	case $host_os in
697885ee4c00Smrg	cygwin* | mingw* | cegcc*)
697985ee4c00Smrg	  if test -n "$export_symbols" && test -z "$export_symbols_regex"; then
698085ee4c00Smrg	    # exporting using user supplied symfile
698185ee4c00Smrg	    if test "x`$SED 1q $export_symbols`" != xEXPORTS; then
698285ee4c00Smrg	      # and it's NOT already a .def file. Must figure out
698385ee4c00Smrg	      # which of the given symbols are data symbols and tag
698485ee4c00Smrg	      # them as such. So, trigger use of export_symbols_cmds.
698585ee4c00Smrg	      # export_symbols gets reassigned inside the "prepare
698685ee4c00Smrg	      # the list of exported symbols" if statement, so the
698785ee4c00Smrg	      # include_expsyms logic still works.
698885ee4c00Smrg	      orig_export_symbols="$export_symbols"
698985ee4c00Smrg	      export_symbols=
699085ee4c00Smrg	      always_export_symbols=yes
699185ee4c00Smrg	    fi
699285ee4c00Smrg	  fi
699385ee4c00Smrg	  ;;
699485ee4c00Smrg	esac
6995692f60a7Smrg
699685ee4c00Smrg	# Prepare the list of exported symbols
699785ee4c00Smrg	if test -z "$export_symbols"; then
699885ee4c00Smrg	  if test "$always_export_symbols" = yes || test -n "$export_symbols_regex"; then
699985ee4c00Smrg	    func_verbose "generating symbol list for \`$libname.la'"
700085ee4c00Smrg	    export_symbols="$output_objdir/$libname.exp"
700185ee4c00Smrg	    $opt_dry_run || $RM $export_symbols
700285ee4c00Smrg	    cmds=$export_symbols_cmds
700385ee4c00Smrg	    save_ifs="$IFS"; IFS='~'
700485ee4c00Smrg	    for cmd in $cmds; do
700585ee4c00Smrg	      IFS="$save_ifs"
700685ee4c00Smrg	      eval cmd=\"$cmd\"
700785ee4c00Smrg	      func_len " $cmd"
700885ee4c00Smrg	      len=$func_len_result
700985ee4c00Smrg	      if test "$len" -lt "$max_cmd_len" || test "$max_cmd_len" -le -1; then
701085ee4c00Smrg		func_show_eval "$cmd" 'exit $?'
701185ee4c00Smrg		skipped_export=false
701285ee4c00Smrg	      else
701385ee4c00Smrg		# The command line is too long to execute in one step.
701485ee4c00Smrg		func_verbose "using reloadable object file for export list..."
701585ee4c00Smrg		skipped_export=:
701685ee4c00Smrg		# Break out early, otherwise skipped_export may be
701785ee4c00Smrg		# set to false by a later but shorter cmd.
701885ee4c00Smrg		break
701985ee4c00Smrg	      fi
702085ee4c00Smrg	    done
702185ee4c00Smrg	    IFS="$save_ifs"
702285ee4c00Smrg	    if test -n "$export_symbols_regex" && test "X$skipped_export" != "X:"; then
702385ee4c00Smrg	      func_show_eval '$EGREP -e "$export_symbols_regex" "$export_symbols" > "${export_symbols}T"'
702485ee4c00Smrg	      func_show_eval '$MV "${export_symbols}T" "$export_symbols"'
702585ee4c00Smrg	    fi
702685ee4c00Smrg	  fi
7027692f60a7Smrg	fi
7028692f60a7Smrg
702985ee4c00Smrg	if test -n "$export_symbols" && test -n "$include_expsyms"; then
703085ee4c00Smrg	  tmp_export_symbols="$export_symbols"
703185ee4c00Smrg	  test -n "$orig_export_symbols" && tmp_export_symbols="$orig_export_symbols"
703285ee4c00Smrg	  $opt_dry_run || eval '$ECHO "X$include_expsyms" | $Xsed | $SP2NL >> "$tmp_export_symbols"'
703385ee4c00Smrg	fi
7034692f60a7Smrg
703585ee4c00Smrg	if test "X$skipped_export" != "X:" && test -n "$orig_export_symbols"; then
703685ee4c00Smrg	  # The given exports_symbols file has to be filtered, so filter it.
703785ee4c00Smrg	  func_verbose "filter symbol list for \`$libname.la' to tag DATA exports"
703885ee4c00Smrg	  # FIXME: $output_objdir/$libname.filter potentially contains lots of
703985ee4c00Smrg	  # 's' commands which not all seds can handle. GNU sed should be fine
704085ee4c00Smrg	  # though. Also, the filter scales superlinearly with the number of
704185ee4c00Smrg	  # global variables. join(1) would be nice here, but unfortunately
704285ee4c00Smrg	  # isn't a blessed tool.
704385ee4c00Smrg	  $opt_dry_run || $SED -e '/[ ,]DATA/!d;s,\(.*\)\([ \,].*\),s|^\1$|\1\2|,' < $export_symbols > $output_objdir/$libname.filter
704485ee4c00Smrg	  delfiles="$delfiles $export_symbols $output_objdir/$libname.filter"
704585ee4c00Smrg	  export_symbols=$output_objdir/$libname.def
704685ee4c00Smrg	  $opt_dry_run || $SED -f $output_objdir/$libname.filter < $orig_export_symbols > $export_symbols
704785ee4c00Smrg	fi
7048692f60a7Smrg
704985ee4c00Smrg	tmp_deplibs=
705085ee4c00Smrg	for test_deplib in $deplibs; do
705185ee4c00Smrg	  case " $convenience " in
705285ee4c00Smrg	  *" $test_deplib "*) ;;
705385ee4c00Smrg	  *)
705485ee4c00Smrg	    tmp_deplibs="$tmp_deplibs $test_deplib"
705585ee4c00Smrg	    ;;
705685ee4c00Smrg	  esac
705785ee4c00Smrg	done
705885ee4c00Smrg	deplibs="$tmp_deplibs"
7059692f60a7Smrg
706085ee4c00Smrg	if test -n "$convenience"; then
706185ee4c00Smrg	  if test -n "$whole_archive_flag_spec" &&
706285ee4c00Smrg	    test "$compiler_needs_object" = yes &&
706385ee4c00Smrg	    test -z "$libobjs"; then
706485ee4c00Smrg	    # extract the archives, so we have objects to list.
706585ee4c00Smrg	    # TODO: could optimize this to just extract one archive.
706685ee4c00Smrg	    whole_archive_flag_spec=
706785ee4c00Smrg	  fi
706885ee4c00Smrg	  if test -n "$whole_archive_flag_spec"; then
706985ee4c00Smrg	    save_libobjs=$libobjs
707085ee4c00Smrg	    eval libobjs=\"\$libobjs $whole_archive_flag_spec\"
707185ee4c00Smrg	    test "X$libobjs" = "X " && libobjs=
707285ee4c00Smrg	  else
707385ee4c00Smrg	    gentop="$output_objdir/${outputname}x"
707485ee4c00Smrg	    generated="$generated $gentop"
7075692f60a7Smrg
707685ee4c00Smrg	    func_extract_archives $gentop $convenience
707785ee4c00Smrg	    libobjs="$libobjs $func_extract_archives_result"
707885ee4c00Smrg	    test "X$libobjs" = "X " && libobjs=
707985ee4c00Smrg	  fi
7080692f60a7Smrg	fi
7081692f60a7Smrg
708285ee4c00Smrg	if test "$thread_safe" = yes && test -n "$thread_safe_flag_spec"; then
708385ee4c00Smrg	  eval flag=\"$thread_safe_flag_spec\"
708485ee4c00Smrg	  linker_flags="$linker_flags $flag"
7085692f60a7Smrg	fi
7086692f60a7Smrg
708785ee4c00Smrg	# Make a backup of the uninstalled library when relinking
708885ee4c00Smrg	if test "$mode" = relink; then
708985ee4c00Smrg	  $opt_dry_run || eval '(cd $output_objdir && $RM ${realname}U && $MV $realname ${realname}U)' || exit $?
709085ee4c00Smrg	fi
7091692f60a7Smrg
709285ee4c00Smrg	# Do each of the archive commands.
709385ee4c00Smrg	if test "$module" = yes && test -n "$module_cmds" ; then
709485ee4c00Smrg	  if test -n "$export_symbols" && test -n "$module_expsym_cmds"; then
709585ee4c00Smrg	    eval test_cmds=\"$module_expsym_cmds\"
709685ee4c00Smrg	    cmds=$module_expsym_cmds
709785ee4c00Smrg	  else
709885ee4c00Smrg	    eval test_cmds=\"$module_cmds\"
709985ee4c00Smrg	    cmds=$module_cmds
710085ee4c00Smrg	  fi
7101692f60a7Smrg	else
710285ee4c00Smrg	  if test -n "$export_symbols" && test -n "$archive_expsym_cmds"; then
710385ee4c00Smrg	    eval test_cmds=\"$archive_expsym_cmds\"
710485ee4c00Smrg	    cmds=$archive_expsym_cmds
710585ee4c00Smrg	  else
710685ee4c00Smrg	    eval test_cmds=\"$archive_cmds\"
710785ee4c00Smrg	    cmds=$archive_cmds
710885ee4c00Smrg	  fi
7109692f60a7Smrg	fi
7110692f60a7Smrg
711185ee4c00Smrg	if test "X$skipped_export" != "X:" &&
711285ee4c00Smrg	   func_len " $test_cmds" &&
711385ee4c00Smrg	   len=$func_len_result &&
711485ee4c00Smrg	   test "$len" -lt "$max_cmd_len" || test "$max_cmd_len" -le -1; then
711585ee4c00Smrg	  :
711685ee4c00Smrg	else
711785ee4c00Smrg	  # The command line is too long to link in one step, link piecewise
711885ee4c00Smrg	  # or, if using GNU ld and skipped_export is not :, use a linker
711985ee4c00Smrg	  # script.
7120692f60a7Smrg
712185ee4c00Smrg	  # Save the value of $output and $libobjs because we want to
712285ee4c00Smrg	  # use them later.  If we have whole_archive_flag_spec, we
712385ee4c00Smrg	  # want to use save_libobjs as it was before
712485ee4c00Smrg	  # whole_archive_flag_spec was expanded, because we can't
712585ee4c00Smrg	  # assume the linker understands whole_archive_flag_spec.
712685ee4c00Smrg	  # This may have to be revisited, in case too many
712785ee4c00Smrg	  # convenience libraries get linked in and end up exceeding
712885ee4c00Smrg	  # the spec.
712985ee4c00Smrg	  if test -z "$convenience" || test -z "$whole_archive_flag_spec"; then
713085ee4c00Smrg	    save_libobjs=$libobjs
713185ee4c00Smrg	  fi
713285ee4c00Smrg	  save_output=$output
713385ee4c00Smrg	  output_la=`$ECHO "X$output" | $Xsed -e "$basename"`
7134692f60a7Smrg
713585ee4c00Smrg	  # Clear the reloadable object creation command queue and
713685ee4c00Smrg	  # initialize k to one.
713785ee4c00Smrg	  test_cmds=
713885ee4c00Smrg	  concat_cmds=
713985ee4c00Smrg	  objlist=
714085ee4c00Smrg	  last_robj=
714185ee4c00Smrg	  k=1
714285ee4c00Smrg
714385ee4c00Smrg	  if test -n "$save_libobjs" && test "X$skipped_export" != "X:" && test "$with_gnu_ld" = yes; then
714485ee4c00Smrg	    output=${output_objdir}/${output_la}.lnkscript
714585ee4c00Smrg	    func_verbose "creating GNU ld script: $output"
714685ee4c00Smrg	    $ECHO 'INPUT (' > $output
714785ee4c00Smrg	    for obj in $save_libobjs
7148692f60a7Smrg	    do
714985ee4c00Smrg	      $ECHO "$obj" >> $output
715085ee4c00Smrg	    done
715185ee4c00Smrg	    $ECHO ')' >> $output
715285ee4c00Smrg	    delfiles="$delfiles $output"
715385ee4c00Smrg	  elif test -n "$save_libobjs" && test "X$skipped_export" != "X:" && test "X$file_list_spec" != X; then
715485ee4c00Smrg	    output=${output_objdir}/${output_la}.lnk
715585ee4c00Smrg	    func_verbose "creating linker input file list: $output"
715685ee4c00Smrg	    : > $output
715785ee4c00Smrg	    set x $save_libobjs
715885ee4c00Smrg	    shift
715985ee4c00Smrg	    firstobj=
716085ee4c00Smrg	    if test "$compiler_needs_object" = yes; then
716185ee4c00Smrg	      firstobj="$1 "
716285ee4c00Smrg	      shift
716385ee4c00Smrg	    fi
716485ee4c00Smrg	    for obj
716585ee4c00Smrg	    do
716685ee4c00Smrg	      $ECHO "$obj" >> $output
716785ee4c00Smrg	    done
716885ee4c00Smrg	    delfiles="$delfiles $output"
716985ee4c00Smrg	    output=$firstobj\"$file_list_spec$output\"
717085ee4c00Smrg	  else
717185ee4c00Smrg	    if test -n "$save_libobjs"; then
717285ee4c00Smrg	      func_verbose "creating reloadable object files..."
717385ee4c00Smrg	      output=$output_objdir/$output_la-${k}.$objext
717485ee4c00Smrg	      eval test_cmds=\"$reload_cmds\"
717585ee4c00Smrg	      func_len " $test_cmds"
717685ee4c00Smrg	      len0=$func_len_result
717785ee4c00Smrg	      len=$len0
717885ee4c00Smrg
717985ee4c00Smrg	      # Loop over the list of objects to be linked.
718085ee4c00Smrg	      for obj in $save_libobjs
718185ee4c00Smrg	      do
718285ee4c00Smrg		func_len " $obj"
718385ee4c00Smrg		func_arith $len + $func_len_result
718485ee4c00Smrg		len=$func_arith_result
718585ee4c00Smrg		if test "X$objlist" = X ||
718685ee4c00Smrg		   test "$len" -lt "$max_cmd_len"; then
718785ee4c00Smrg		  func_append objlist " $obj"
718885ee4c00Smrg		else
718985ee4c00Smrg		  # The command $test_cmds is almost too long, add a
719085ee4c00Smrg		  # command to the queue.
719185ee4c00Smrg		  if test "$k" -eq 1 ; then
719285ee4c00Smrg		    # The first file doesn't have a previous command to add.
719385ee4c00Smrg		    eval concat_cmds=\"$reload_cmds $objlist $last_robj\"
719485ee4c00Smrg		  else
719585ee4c00Smrg		    # All subsequent reloadable object files will link in
719685ee4c00Smrg		    # the last one created.
719785ee4c00Smrg		    eval concat_cmds=\"\$concat_cmds~$reload_cmds $objlist $last_robj~\$RM $last_robj\"
719885ee4c00Smrg		  fi
719985ee4c00Smrg		  last_robj=$output_objdir/$output_la-${k}.$objext
720085ee4c00Smrg		  func_arith $k + 1
720185ee4c00Smrg		  k=$func_arith_result
720285ee4c00Smrg		  output=$output_objdir/$output_la-${k}.$objext
720385ee4c00Smrg		  objlist=$obj
720485ee4c00Smrg		  func_len " $last_robj"
720585ee4c00Smrg		  func_arith $len0 + $func_len_result
720685ee4c00Smrg		  len=$func_arith_result
720785ee4c00Smrg		fi
720885ee4c00Smrg	      done
720985ee4c00Smrg	      # Handle the remaining objects by creating one last
721085ee4c00Smrg	      # reloadable object file.  All subsequent reloadable object
721185ee4c00Smrg	      # files will link in the last one created.
721285ee4c00Smrg	      test -z "$concat_cmds" || concat_cmds=$concat_cmds~
721385ee4c00Smrg	      eval concat_cmds=\"\${concat_cmds}$reload_cmds $objlist $last_robj\"
721485ee4c00Smrg	      if test -n "$last_robj"; then
721585ee4c00Smrg	        eval concat_cmds=\"\${concat_cmds}~\$RM $last_robj\"
721685ee4c00Smrg	      fi
721785ee4c00Smrg	      delfiles="$delfiles $output"
7218692f60a7Smrg
721985ee4c00Smrg	    else
722085ee4c00Smrg	      output=
722185ee4c00Smrg	    fi
7222692f60a7Smrg
722385ee4c00Smrg	    if ${skipped_export-false}; then
722485ee4c00Smrg	      func_verbose "generating symbol list for \`$libname.la'"
722585ee4c00Smrg	      export_symbols="$output_objdir/$libname.exp"
722685ee4c00Smrg	      $opt_dry_run || $RM $export_symbols
722785ee4c00Smrg	      libobjs=$output
722885ee4c00Smrg	      # Append the command to create the export file.
722985ee4c00Smrg	      test -z "$concat_cmds" || concat_cmds=$concat_cmds~
723085ee4c00Smrg	      eval concat_cmds=\"\$concat_cmds$export_symbols_cmds\"
723185ee4c00Smrg	      if test -n "$last_robj"; then
723285ee4c00Smrg		eval concat_cmds=\"\$concat_cmds~\$RM $last_robj\"
723385ee4c00Smrg	      fi
7234692f60a7Smrg	    fi
7235692f60a7Smrg
723685ee4c00Smrg	    test -n "$save_libobjs" &&
723785ee4c00Smrg	      func_verbose "creating a temporary reloadable object file: $output"
7238692f60a7Smrg
723985ee4c00Smrg	    # Loop through the commands generated above and execute them.
724085ee4c00Smrg	    save_ifs="$IFS"; IFS='~'
724185ee4c00Smrg	    for cmd in $concat_cmds; do
724285ee4c00Smrg	      IFS="$save_ifs"
724385ee4c00Smrg	      $opt_silent || {
724485ee4c00Smrg		  func_quote_for_expand "$cmd"
724585ee4c00Smrg		  eval "func_echo $func_quote_for_expand_result"
724685ee4c00Smrg	      }
724785ee4c00Smrg	      $opt_dry_run || eval "$cmd" || {
724885ee4c00Smrg		lt_exit=$?
724985ee4c00Smrg
725085ee4c00Smrg		# Restore the uninstalled library and exit
725185ee4c00Smrg		if test "$mode" = relink; then
725285ee4c00Smrg		  ( cd "$output_objdir" && \
725385ee4c00Smrg		    $RM "${realname}T" && \
725485ee4c00Smrg		    $MV "${realname}U" "$realname" )
725585ee4c00Smrg		fi
7256692f60a7Smrg
725785ee4c00Smrg		exit $lt_exit
725885ee4c00Smrg	      }
725985ee4c00Smrg	    done
726085ee4c00Smrg	    IFS="$save_ifs"
7261692f60a7Smrg
726285ee4c00Smrg	    if test -n "$export_symbols_regex" && ${skipped_export-false}; then
726385ee4c00Smrg	      func_show_eval '$EGREP -e "$export_symbols_regex" "$export_symbols" > "${export_symbols}T"'
726485ee4c00Smrg	      func_show_eval '$MV "${export_symbols}T" "$export_symbols"'
7265692f60a7Smrg	    fi
7266692f60a7Smrg	  fi
7267692f60a7Smrg
726885ee4c00Smrg          if ${skipped_export-false}; then
726985ee4c00Smrg	    if test -n "$export_symbols" && test -n "$include_expsyms"; then
727085ee4c00Smrg	      tmp_export_symbols="$export_symbols"
727185ee4c00Smrg	      test -n "$orig_export_symbols" && tmp_export_symbols="$orig_export_symbols"
727285ee4c00Smrg	      $opt_dry_run || eval '$ECHO "X$include_expsyms" | $Xsed | $SP2NL >> "$tmp_export_symbols"'
727385ee4c00Smrg	    fi
7274692f60a7Smrg
727585ee4c00Smrg	    if test -n "$orig_export_symbols"; then
727685ee4c00Smrg	      # The given exports_symbols file has to be filtered, so filter it.
727785ee4c00Smrg	      func_verbose "filter symbol list for \`$libname.la' to tag DATA exports"
727885ee4c00Smrg	      # FIXME: $output_objdir/$libname.filter potentially contains lots of
727985ee4c00Smrg	      # 's' commands which not all seds can handle. GNU sed should be fine
728085ee4c00Smrg	      # though. Also, the filter scales superlinearly with the number of
728185ee4c00Smrg	      # global variables. join(1) would be nice here, but unfortunately
728285ee4c00Smrg	      # isn't a blessed tool.
728385ee4c00Smrg	      $opt_dry_run || $SED -e '/[ ,]DATA/!d;s,\(.*\)\([ \,].*\),s|^\1$|\1\2|,' < $export_symbols > $output_objdir/$libname.filter
728485ee4c00Smrg	      delfiles="$delfiles $export_symbols $output_objdir/$libname.filter"
728585ee4c00Smrg	      export_symbols=$output_objdir/$libname.def
728685ee4c00Smrg	      $opt_dry_run || $SED -f $output_objdir/$libname.filter < $orig_export_symbols > $export_symbols
728785ee4c00Smrg	    fi
728885ee4c00Smrg	  fi
7289692f60a7Smrg
729085ee4c00Smrg	  libobjs=$output
729185ee4c00Smrg	  # Restore the value of output.
729285ee4c00Smrg	  output=$save_output
7293692f60a7Smrg
729485ee4c00Smrg	  if test -n "$convenience" && test -n "$whole_archive_flag_spec"; then
729585ee4c00Smrg	    eval libobjs=\"\$libobjs $whole_archive_flag_spec\"
729685ee4c00Smrg	    test "X$libobjs" = "X " && libobjs=
729785ee4c00Smrg	  fi
729885ee4c00Smrg	  # Expand the library linking commands again to reset the
729985ee4c00Smrg	  # value of $libobjs for piecewise linking.
7300692f60a7Smrg
730185ee4c00Smrg	  # Do each of the archive commands.
730285ee4c00Smrg	  if test "$module" = yes && test -n "$module_cmds" ; then
730385ee4c00Smrg	    if test -n "$export_symbols" && test -n "$module_expsym_cmds"; then
730485ee4c00Smrg	      cmds=$module_expsym_cmds
730585ee4c00Smrg	    else
730685ee4c00Smrg	      cmds=$module_cmds
7307692f60a7Smrg	    fi
7308692f60a7Smrg	  else
730985ee4c00Smrg	    if test -n "$export_symbols" && test -n "$archive_expsym_cmds"; then
731085ee4c00Smrg	      cmds=$archive_expsym_cmds
731185ee4c00Smrg	    else
731285ee4c00Smrg	      cmds=$archive_cmds
731385ee4c00Smrg	    fi
7314692f60a7Smrg	  fi
731585ee4c00Smrg	fi
7316692f60a7Smrg
731785ee4c00Smrg	if test -n "$delfiles"; then
731885ee4c00Smrg	  # Append the command to remove temporary files to $cmds.
731985ee4c00Smrg	  eval cmds=\"\$cmds~\$RM $delfiles\"
732085ee4c00Smrg	fi
7321692f60a7Smrg
732285ee4c00Smrg	# Add any objects from preloaded convenience libraries
732385ee4c00Smrg	if test -n "$dlprefiles"; then
732485ee4c00Smrg	  gentop="$output_objdir/${outputname}x"
732585ee4c00Smrg	  generated="$generated $gentop"
7326692f60a7Smrg
732785ee4c00Smrg	  func_extract_archives $gentop $dlprefiles
732885ee4c00Smrg	  libobjs="$libobjs $func_extract_archives_result"
732985ee4c00Smrg	  test "X$libobjs" = "X " && libobjs=
733085ee4c00Smrg	fi
7331692f60a7Smrg
733285ee4c00Smrg	save_ifs="$IFS"; IFS='~'
733385ee4c00Smrg	for cmd in $cmds; do
733485ee4c00Smrg	  IFS="$save_ifs"
733585ee4c00Smrg	  eval cmd=\"$cmd\"
733685ee4c00Smrg	  $opt_silent || {
733785ee4c00Smrg	    func_quote_for_expand "$cmd"
733885ee4c00Smrg	    eval "func_echo $func_quote_for_expand_result"
733985ee4c00Smrg	  }
734085ee4c00Smrg	  $opt_dry_run || eval "$cmd" || {
734185ee4c00Smrg	    lt_exit=$?
7342692f60a7Smrg
734385ee4c00Smrg	    # Restore the uninstalled library and exit
734485ee4c00Smrg	    if test "$mode" = relink; then
734585ee4c00Smrg	      ( cd "$output_objdir" && \
734685ee4c00Smrg	        $RM "${realname}T" && \
734785ee4c00Smrg		$MV "${realname}U" "$realname" )
734885ee4c00Smrg	    fi
7349692f60a7Smrg
735085ee4c00Smrg	    exit $lt_exit
735185ee4c00Smrg	  }
735285ee4c00Smrg	done
735385ee4c00Smrg	IFS="$save_ifs"
7354692f60a7Smrg
735585ee4c00Smrg	# Restore the uninstalled library and exit
735685ee4c00Smrg	if test "$mode" = relink; then
735785ee4c00Smrg	  $opt_dry_run || eval '(cd $output_objdir && $RM ${realname}T && $MV $realname ${realname}T && $MV ${realname}U $realname)' || exit $?
7358692f60a7Smrg
735985ee4c00Smrg	  if test -n "$convenience"; then
736085ee4c00Smrg	    if test -z "$whole_archive_flag_spec"; then
736185ee4c00Smrg	      func_show_eval '${RM}r "$gentop"'
736285ee4c00Smrg	    fi
736385ee4c00Smrg	  fi
7364692f60a7Smrg
736585ee4c00Smrg	  exit $EXIT_SUCCESS
736685ee4c00Smrg	fi
736785ee4c00Smrg
736885ee4c00Smrg	# Create links to the real library.
736985ee4c00Smrg	for linkname in $linknames; do
737085ee4c00Smrg	  if test "$realname" != "$linkname"; then
737185ee4c00Smrg	    func_show_eval '(cd "$output_objdir" && $RM "$linkname" && $LN_S "$realname" "$linkname")' 'exit $?'
7372692f60a7Smrg	  fi
7373692f60a7Smrg	done
7374692f60a7Smrg
737585ee4c00Smrg	# If -module or -export-dynamic was specified, set the dlname.
737685ee4c00Smrg	if test "$module" = yes || test "$export_dynamic" = yes; then
737785ee4c00Smrg	  # On all known operating systems, these are identical.
737885ee4c00Smrg	  dlname="$soname"
737985ee4c00Smrg	fi
738085ee4c00Smrg      fi
7381692f60a7Smrg      ;;
7382692f60a7Smrg
738385ee4c00Smrg    obj)
738485ee4c00Smrg      if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then
738585ee4c00Smrg	func_warning "\`-dlopen' is ignored for objects"
738685ee4c00Smrg      fi
7387692f60a7Smrg
738885ee4c00Smrg      case " $deplibs" in
738985ee4c00Smrg      *\ -l* | *\ -L*)
739085ee4c00Smrg	func_warning "\`-l' and \`-L' are ignored for objects" ;;
7391692f60a7Smrg      esac
7392692f60a7Smrg
739385ee4c00Smrg      test -n "$rpath" && \
739485ee4c00Smrg	func_warning "\`-rpath' is ignored for objects"
739585ee4c00Smrg
739685ee4c00Smrg      test -n "$xrpath" && \
739785ee4c00Smrg	func_warning "\`-R' is ignored for objects"
7398692f60a7Smrg
739985ee4c00Smrg      test -n "$vinfo" && \
740085ee4c00Smrg	func_warning "\`-version-info' is ignored for objects"
7401692f60a7Smrg
740285ee4c00Smrg      test -n "$release" && \
740385ee4c00Smrg	func_warning "\`-release' is ignored for objects"
740485ee4c00Smrg
740585ee4c00Smrg      case $output in
740685ee4c00Smrg      *.lo)
740785ee4c00Smrg	test -n "$objs$old_deplibs" && \
740885ee4c00Smrg	  func_fatal_error "cannot build library object \`$output' from non-libtool objects"
740985ee4c00Smrg
741085ee4c00Smrg	libobj=$output
741185ee4c00Smrg	func_lo2o "$libobj"
741285ee4c00Smrg	obj=$func_lo2o_result
7413692f60a7Smrg	;;
7414692f60a7Smrg      *)
741585ee4c00Smrg	libobj=
741685ee4c00Smrg	obj="$output"
7417692f60a7Smrg	;;
7418692f60a7Smrg      esac
7419692f60a7Smrg
742085ee4c00Smrg      # Delete the old objects.
742185ee4c00Smrg      $opt_dry_run || $RM $obj $libobj
7422692f60a7Smrg
742385ee4c00Smrg      # Objects from convenience libraries.  This assumes
742485ee4c00Smrg      # single-version convenience libraries.  Whenever we create
742585ee4c00Smrg      # different ones for PIC/non-PIC, this we'll have to duplicate
742685ee4c00Smrg      # the extraction.
742785ee4c00Smrg      reload_conv_objs=
742885ee4c00Smrg      gentop=
742985ee4c00Smrg      # reload_cmds runs $LD directly, so let us get rid of
743085ee4c00Smrg      # -Wl from whole_archive_flag_spec and hope we can get by with
743185ee4c00Smrg      # turning comma into space..
743285ee4c00Smrg      wl=
7433692f60a7Smrg
743485ee4c00Smrg      if test -n "$convenience"; then
743585ee4c00Smrg	if test -n "$whole_archive_flag_spec"; then
743685ee4c00Smrg	  eval tmp_whole_archive_flags=\"$whole_archive_flag_spec\"
743785ee4c00Smrg	  reload_conv_objs=$reload_objs\ `$ECHO "X$tmp_whole_archive_flags" | $Xsed -e 's|,| |g'`
743885ee4c00Smrg	else
743985ee4c00Smrg	  gentop="$output_objdir/${obj}x"
744085ee4c00Smrg	  generated="$generated $gentop"
7441692f60a7Smrg
744285ee4c00Smrg	  func_extract_archives $gentop $convenience
744385ee4c00Smrg	  reload_conv_objs="$reload_objs $func_extract_archives_result"
744485ee4c00Smrg	fi
7445692f60a7Smrg      fi
7446692f60a7Smrg
744785ee4c00Smrg      # Create the old-style object.
744885ee4c00Smrg      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
7449692f60a7Smrg
745085ee4c00Smrg      output="$obj"
745185ee4c00Smrg      func_execute_cmds "$reload_cmds" 'exit $?'
7452692f60a7Smrg
745385ee4c00Smrg      # Exit if we aren't doing a library object file.
745485ee4c00Smrg      if test -z "$libobj"; then
745585ee4c00Smrg	if test -n "$gentop"; then
745685ee4c00Smrg	  func_show_eval '${RM}r "$gentop"'
745785ee4c00Smrg	fi
745885ee4c00Smrg
745985ee4c00Smrg	exit $EXIT_SUCCESS
7460692f60a7Smrg      fi
746185ee4c00Smrg
746285ee4c00Smrg      if test "$build_libtool_libs" != yes; then
746385ee4c00Smrg	if test -n "$gentop"; then
746485ee4c00Smrg	  func_show_eval '${RM}r "$gentop"'
746585ee4c00Smrg	fi
746685ee4c00Smrg
746785ee4c00Smrg	# Create an invalid libtool object if no PIC, so that we don't
746885ee4c00Smrg	# accidentally link it into a program.
746985ee4c00Smrg	# $show "echo timestamp > $libobj"
747085ee4c00Smrg	# $opt_dry_run || eval "echo timestamp > $libobj" || exit $?
747185ee4c00Smrg	exit $EXIT_SUCCESS
747285ee4c00Smrg      fi
747385ee4c00Smrg
747485ee4c00Smrg      if test -n "$pic_flag" || test "$pic_mode" != default; then
747585ee4c00Smrg	# Only do commands if we really have different PIC objects.
747685ee4c00Smrg	reload_objs="$libobjs $reload_conv_objs"
747785ee4c00Smrg	output="$libobj"
747885ee4c00Smrg	func_execute_cmds "$reload_cmds" 'exit $?'
747985ee4c00Smrg      fi
748085ee4c00Smrg
748185ee4c00Smrg      if test -n "$gentop"; then
748285ee4c00Smrg	func_show_eval '${RM}r "$gentop"'
748385ee4c00Smrg      fi
748485ee4c00Smrg
748585ee4c00Smrg      exit $EXIT_SUCCESS
7486692f60a7Smrg      ;;
7487692f60a7Smrg
748885ee4c00Smrg    prog)
748985ee4c00Smrg      case $host in
749085ee4c00Smrg	*cygwin*) func_stripname '' '.exe' "$output"
749185ee4c00Smrg	          output=$func_stripname_result.exe;;
749285ee4c00Smrg      esac
749385ee4c00Smrg      test -n "$vinfo" && \
749485ee4c00Smrg	func_warning "\`-version-info' is ignored for programs"
7495692f60a7Smrg
749685ee4c00Smrg      test -n "$release" && \
749785ee4c00Smrg	func_warning "\`-release' is ignored for programs"
7498692f60a7Smrg
749985ee4c00Smrg      test "$preload" = yes \
750085ee4c00Smrg        && test "$dlopen_support" = unknown \
750185ee4c00Smrg	&& test "$dlopen_self" = unknown \
750285ee4c00Smrg	&& test "$dlopen_self_static" = unknown && \
750385ee4c00Smrg	  func_warning "\`LT_INIT([dlopen])' not used. Assuming no dlopen support."
750485ee4c00Smrg
750585ee4c00Smrg      case $host in
750685ee4c00Smrg      *-*-rhapsody* | *-*-darwin1.[012])
750785ee4c00Smrg	# On Rhapsody replace the C library is the System framework
750885ee4c00Smrg	compile_deplibs=`$ECHO "X $compile_deplibs" | $Xsed -e 's/ -lc / System.ltframework /'`
750985ee4c00Smrg	finalize_deplibs=`$ECHO "X $finalize_deplibs" | $Xsed -e 's/ -lc / System.ltframework /'`
7510692f60a7Smrg	;;
751185ee4c00Smrg      esac
7512692f60a7Smrg
751385ee4c00Smrg      case $host in
751485ee4c00Smrg      *-*-darwin*)
751585ee4c00Smrg	# Don't allow lazy linking, it breaks C++ global constructors
751685ee4c00Smrg	# But is supposedly fixed on 10.4 or later (yay!).
751785ee4c00Smrg	if test "$tagname" = CXX ; then
751885ee4c00Smrg	  case ${MACOSX_DEPLOYMENT_TARGET-10.0} in
751985ee4c00Smrg	    10.[0123])
752085ee4c00Smrg	      compile_command="$compile_command ${wl}-bind_at_load"
752185ee4c00Smrg	      finalize_command="$finalize_command ${wl}-bind_at_load"
752285ee4c00Smrg	    ;;
752385ee4c00Smrg	  esac
7524692f60a7Smrg	fi
752585ee4c00Smrg	# Time to change all our "foo.ltframework" stuff back to "-framework foo"
752685ee4c00Smrg	compile_deplibs=`$ECHO "X $compile_deplibs" | $Xsed -e 's% \([^ $]*\).ltframework% -framework \1%g'`
752785ee4c00Smrg	finalize_deplibs=`$ECHO "X $finalize_deplibs" | $Xsed -e 's% \([^ $]*\).ltframework% -framework \1%g'`
752885ee4c00Smrg	;;
752985ee4c00Smrg      esac
7530692f60a7Smrg
7531692f60a7Smrg
753285ee4c00Smrg      # move library search paths that coincide with paths to not yet
753385ee4c00Smrg      # installed libraries to the beginning of the library search list
753485ee4c00Smrg      new_libs=
753585ee4c00Smrg      for path in $notinst_path; do
753685ee4c00Smrg	case " $new_libs " in
753785ee4c00Smrg	*" -L$path/$objdir "*) ;;
753885ee4c00Smrg	*)
753985ee4c00Smrg	  case " $compile_deplibs " in
754085ee4c00Smrg	  *" -L$path/$objdir "*)
754185ee4c00Smrg	    new_libs="$new_libs -L$path/$objdir" ;;
7542692f60a7Smrg	  esac
754385ee4c00Smrg	  ;;
754485ee4c00Smrg	esac
754585ee4c00Smrg      done
754685ee4c00Smrg      for deplib in $compile_deplibs; do
754785ee4c00Smrg	case $deplib in
754885ee4c00Smrg	-L*)
754985ee4c00Smrg	  case " $new_libs " in
755085ee4c00Smrg	  *" $deplib "*) ;;
755185ee4c00Smrg	  *) new_libs="$new_libs $deplib" ;;
7552692f60a7Smrg	  esac
755385ee4c00Smrg	  ;;
755485ee4c00Smrg	*) new_libs="$new_libs $deplib" ;;
755585ee4c00Smrg	esac
755685ee4c00Smrg      done
755785ee4c00Smrg      compile_deplibs="$new_libs"
7558692f60a7Smrg
7559692f60a7Smrg
756085ee4c00Smrg      compile_command="$compile_command $compile_deplibs"
756185ee4c00Smrg      finalize_command="$finalize_command $finalize_deplibs"
7562692f60a7Smrg
756385ee4c00Smrg      if test -n "$rpath$xrpath"; then
756485ee4c00Smrg	# If the user specified any rpath flags, then add them.
756585ee4c00Smrg	for libdir in $rpath $xrpath; do
756685ee4c00Smrg	  # This is the magic to use -rpath.
756785ee4c00Smrg	  case "$finalize_rpath " in
756885ee4c00Smrg	  *" $libdir "*) ;;
756985ee4c00Smrg	  *) finalize_rpath="$finalize_rpath $libdir" ;;
757085ee4c00Smrg	  esac
757185ee4c00Smrg	done
757285ee4c00Smrg      fi
7573692f60a7Smrg
757485ee4c00Smrg      # Now hardcode the library paths
757585ee4c00Smrg      rpath=
757685ee4c00Smrg      hardcode_libdirs=
757785ee4c00Smrg      for libdir in $compile_rpath $finalize_rpath; do
757885ee4c00Smrg	if test -n "$hardcode_libdir_flag_spec"; then
757985ee4c00Smrg	  if test -n "$hardcode_libdir_separator"; then
758085ee4c00Smrg	    if test -z "$hardcode_libdirs"; then
758185ee4c00Smrg	      hardcode_libdirs="$libdir"
758285ee4c00Smrg	    else
758385ee4c00Smrg	      # Just accumulate the unique libdirs.
758485ee4c00Smrg	      case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in
758585ee4c00Smrg	      *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*)
758685ee4c00Smrg		;;
758785ee4c00Smrg	      *)
758885ee4c00Smrg		hardcode_libdirs="$hardcode_libdirs$hardcode_libdir_separator$libdir"
758985ee4c00Smrg		;;
759085ee4c00Smrg	      esac
759185ee4c00Smrg	    fi
7592692f60a7Smrg	  else
759385ee4c00Smrg	    eval flag=\"$hardcode_libdir_flag_spec\"
759485ee4c00Smrg	    rpath="$rpath $flag"
7595692f60a7Smrg	  fi
759685ee4c00Smrg	elif test -n "$runpath_var"; then
759785ee4c00Smrg	  case "$perm_rpath " in
759885ee4c00Smrg	  *" $libdir "*) ;;
759985ee4c00Smrg	  *) perm_rpath="$perm_rpath $libdir" ;;
760085ee4c00Smrg	  esac
760185ee4c00Smrg	fi
760285ee4c00Smrg	case $host in
760385ee4c00Smrg	*-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-cegcc*)
760485ee4c00Smrg	  testbindir=`${ECHO} "$libdir" | ${SED} -e 's*/lib$*/bin*'`
760585ee4c00Smrg	  case :$dllsearchpath: in
760685ee4c00Smrg	  *":$libdir:"*) ;;
760785ee4c00Smrg	  ::) dllsearchpath=$libdir;;
760885ee4c00Smrg	  *) dllsearchpath="$dllsearchpath:$libdir";;
760985ee4c00Smrg	  esac
761085ee4c00Smrg	  case :$dllsearchpath: in
761185ee4c00Smrg	  *":$testbindir:"*) ;;
761285ee4c00Smrg	  ::) dllsearchpath=$testbindir;;
761385ee4c00Smrg	  *) dllsearchpath="$dllsearchpath:$testbindir";;
761485ee4c00Smrg	  esac
761585ee4c00Smrg	  ;;
761685ee4c00Smrg	esac
761785ee4c00Smrg      done
761885ee4c00Smrg      # Substitute the hardcoded libdirs into the rpath.
761985ee4c00Smrg      if test -n "$hardcode_libdir_separator" &&
762085ee4c00Smrg	 test -n "$hardcode_libdirs"; then
762185ee4c00Smrg	libdir="$hardcode_libdirs"
762285ee4c00Smrg	eval rpath=\" $hardcode_libdir_flag_spec\"
762385ee4c00Smrg      fi
762485ee4c00Smrg      compile_rpath="$rpath"
7625692f60a7Smrg
762685ee4c00Smrg      rpath=
762785ee4c00Smrg      hardcode_libdirs=
762885ee4c00Smrg      for libdir in $finalize_rpath; do
762985ee4c00Smrg	if test -n "$hardcode_libdir_flag_spec"; then
763085ee4c00Smrg	  if test -n "$hardcode_libdir_separator"; then
763185ee4c00Smrg	    if test -z "$hardcode_libdirs"; then
763285ee4c00Smrg	      hardcode_libdirs="$libdir"
763385ee4c00Smrg	    else
763485ee4c00Smrg	      # Just accumulate the unique libdirs.
763585ee4c00Smrg	      case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in
763685ee4c00Smrg	      *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*)
763785ee4c00Smrg		;;
763885ee4c00Smrg	      *)
763985ee4c00Smrg		hardcode_libdirs="$hardcode_libdirs$hardcode_libdir_separator$libdir"
764085ee4c00Smrg		;;
764185ee4c00Smrg	      esac
764285ee4c00Smrg	    fi
7643692f60a7Smrg	  else
764485ee4c00Smrg	    eval flag=\"$hardcode_libdir_flag_spec\"
764585ee4c00Smrg	    rpath="$rpath $flag"
7646692f60a7Smrg	  fi
764785ee4c00Smrg	elif test -n "$runpath_var"; then
764885ee4c00Smrg	  case "$finalize_perm_rpath " in
764985ee4c00Smrg	  *" $libdir "*) ;;
765085ee4c00Smrg	  *) finalize_perm_rpath="$finalize_perm_rpath $libdir" ;;
765185ee4c00Smrg	  esac
7652692f60a7Smrg	fi
765385ee4c00Smrg      done
765485ee4c00Smrg      # Substitute the hardcoded libdirs into the rpath.
765585ee4c00Smrg      if test -n "$hardcode_libdir_separator" &&
765685ee4c00Smrg	 test -n "$hardcode_libdirs"; then
765785ee4c00Smrg	libdir="$hardcode_libdirs"
765885ee4c00Smrg	eval rpath=\" $hardcode_libdir_flag_spec\"
765985ee4c00Smrg      fi
766085ee4c00Smrg      finalize_rpath="$rpath"
7661692f60a7Smrg
766285ee4c00Smrg      if test -n "$libobjs" && test "$build_old_libs" = yes; then
766385ee4c00Smrg	# Transform all the library objects into standard objects.
766485ee4c00Smrg	compile_command=`$ECHO "X$compile_command" | $SP2NL | $Xsed -e "$lo2o" | $NL2SP`
766585ee4c00Smrg	finalize_command=`$ECHO "X$finalize_command" | $SP2NL | $Xsed -e "$lo2o" | $NL2SP`
766685ee4c00Smrg      fi
7667692f60a7Smrg
766885ee4c00Smrg      func_generate_dlsyms "$outputname" "@PROGRAM@" "no"
7669692f60a7Smrg
767085ee4c00Smrg      # template prelinking step
767185ee4c00Smrg      if test -n "$prelink_cmds"; then
767285ee4c00Smrg	func_execute_cmds "$prelink_cmds" 'exit $?'
767385ee4c00Smrg      fi
7674692f60a7Smrg
767585ee4c00Smrg      wrappers_required=yes
767685ee4c00Smrg      case $host in
767785ee4c00Smrg      *cygwin* | *mingw* )
767885ee4c00Smrg        if test "$build_libtool_libs" != yes; then
767985ee4c00Smrg          wrappers_required=no
768085ee4c00Smrg        fi
768185ee4c00Smrg        ;;
768285ee4c00Smrg      *cegcc)
768385ee4c00Smrg        # Disable wrappers for cegcc, we are cross compiling anyway.
768485ee4c00Smrg        wrappers_required=no
768585ee4c00Smrg        ;;
768685ee4c00Smrg      *)
768785ee4c00Smrg        if test "$need_relink" = no || test "$build_libtool_libs" != yes; then
768885ee4c00Smrg          wrappers_required=no
768985ee4c00Smrg        fi
769085ee4c00Smrg        ;;
769185ee4c00Smrg      esac
769285ee4c00Smrg      if test "$wrappers_required" = no; then
769385ee4c00Smrg	# Replace the output file specification.
769485ee4c00Smrg	compile_command=`$ECHO "X$compile_command" | $Xsed -e 's%@OUTPUT@%'"$output"'%g'`
769585ee4c00Smrg	link_command="$compile_command$compile_rpath"
7696692f60a7Smrg
769785ee4c00Smrg	# We have no uninstalled library dependencies, so finalize right now.
769885ee4c00Smrg	exit_status=0
769985ee4c00Smrg	func_show_eval "$link_command" 'exit_status=$?'
7700692f60a7Smrg
770185ee4c00Smrg	# Delete the generated files.
770285ee4c00Smrg	if test -f "$output_objdir/${outputname}S.${objext}"; then
770385ee4c00Smrg	  func_show_eval '$RM "$output_objdir/${outputname}S.${objext}"'
7704692f60a7Smrg	fi
7705692f60a7Smrg
770685ee4c00Smrg	exit $exit_status
770785ee4c00Smrg      fi
7708692f60a7Smrg
770985ee4c00Smrg      if test -n "$compile_shlibpath$finalize_shlibpath"; then
771085ee4c00Smrg	compile_command="$shlibpath_var=\"$compile_shlibpath$finalize_shlibpath\$$shlibpath_var\" $compile_command"
771185ee4c00Smrg      fi
771285ee4c00Smrg      if test -n "$finalize_shlibpath"; then
771385ee4c00Smrg	finalize_command="$shlibpath_var=\"$finalize_shlibpath\$$shlibpath_var\" $finalize_command"
771485ee4c00Smrg      fi
7715692f60a7Smrg
771685ee4c00Smrg      compile_var=
771785ee4c00Smrg      finalize_var=
771885ee4c00Smrg      if test -n "$runpath_var"; then
771985ee4c00Smrg	if test -n "$perm_rpath"; then
772085ee4c00Smrg	  # We should set the runpath_var.
772185ee4c00Smrg	  rpath=
772285ee4c00Smrg	  for dir in $perm_rpath; do
772385ee4c00Smrg	    rpath="$rpath$dir:"
772485ee4c00Smrg	  done
772585ee4c00Smrg	  compile_var="$runpath_var=\"$rpath\$$runpath_var\" "
7726692f60a7Smrg	fi
772785ee4c00Smrg	if test -n "$finalize_perm_rpath"; then
772885ee4c00Smrg	  # We should set the runpath_var.
772985ee4c00Smrg	  rpath=
773085ee4c00Smrg	  for dir in $finalize_perm_rpath; do
773185ee4c00Smrg	    rpath="$rpath$dir:"
773285ee4c00Smrg	  done
773385ee4c00Smrg	  finalize_var="$runpath_var=\"$rpath\$$runpath_var\" "
7734692f60a7Smrg	fi
773585ee4c00Smrg      fi
7736692f60a7Smrg
773785ee4c00Smrg      if test "$no_install" = yes; then
773885ee4c00Smrg	# We don't need to create a wrapper script.
773985ee4c00Smrg	link_command="$compile_var$compile_command$compile_rpath"
774085ee4c00Smrg	# Replace the output file specification.
774185ee4c00Smrg	link_command=`$ECHO "X$link_command" | $Xsed -e 's%@OUTPUT@%'"$output"'%g'`
774285ee4c00Smrg	# Delete the old output file.
774385ee4c00Smrg	$opt_dry_run || $RM $output
774485ee4c00Smrg	# Link the executable and exit
774585ee4c00Smrg	func_show_eval "$link_command" 'exit $?'
7746692f60a7Smrg	exit $EXIT_SUCCESS
774785ee4c00Smrg      fi
7748692f60a7Smrg
774985ee4c00Smrg      if test "$hardcode_action" = relink; then
775085ee4c00Smrg	# Fast installation is not supported
775185ee4c00Smrg	link_command="$compile_var$compile_command$compile_rpath"
775285ee4c00Smrg	relink_command="$finalize_var$finalize_command$finalize_rpath"
775385ee4c00Smrg
775485ee4c00Smrg	func_warning "this platform does not like uninstalled shared libraries"
775585ee4c00Smrg	func_warning "\`$output' will be relinked during installation"
775685ee4c00Smrg      else
775785ee4c00Smrg	if test "$fast_install" != no; then
775885ee4c00Smrg	  link_command="$finalize_var$compile_command$finalize_rpath"
775985ee4c00Smrg	  if test "$fast_install" = yes; then
776085ee4c00Smrg	    relink_command=`$ECHO "X$compile_var$compile_command$compile_rpath" | $Xsed -e 's%@OUTPUT@%\$progdir/\$file%g'`
776185ee4c00Smrg	  else
776285ee4c00Smrg	    # fast_install is set to needless
776385ee4c00Smrg	    relink_command=
776485ee4c00Smrg	  fi
7765692f60a7Smrg	else
776685ee4c00Smrg	  link_command="$compile_var$compile_command$compile_rpath"
776785ee4c00Smrg	  relink_command="$finalize_var$finalize_command$finalize_rpath"
7768692f60a7Smrg	fi
776985ee4c00Smrg      fi
7770692f60a7Smrg
777185ee4c00Smrg      # Replace the output file specification.
777285ee4c00Smrg      link_command=`$ECHO "X$link_command" | $Xsed -e 's%@OUTPUT@%'"$output_objdir/$outputname"'%g'`
7773692f60a7Smrg
777485ee4c00Smrg      # Delete the old output files.
777585ee4c00Smrg      $opt_dry_run || $RM $output $output_objdir/$outputname $output_objdir/lt-$outputname
7776692f60a7Smrg
777785ee4c00Smrg      func_show_eval "$link_command" 'exit $?'
7778692f60a7Smrg
777985ee4c00Smrg      # Now create the wrapper script.
778085ee4c00Smrg      func_verbose "creating $output"
7781692f60a7Smrg
778285ee4c00Smrg      # Quote the relink command for shipping.
778385ee4c00Smrg      if test -n "$relink_command"; then
778485ee4c00Smrg	# Preserve any variables that may affect compiler behavior
778585ee4c00Smrg	for var in $variables_saved_for_relink; do
778685ee4c00Smrg	  if eval test -z \"\${$var+set}\"; then
778785ee4c00Smrg	    relink_command="{ test -z \"\${$var+set}\" || $lt_unset $var || { $var=; export $var; }; }; $relink_command"
778885ee4c00Smrg	  elif eval var_value=\$$var; test -z "$var_value"; then
778985ee4c00Smrg	    relink_command="$var=; export $var; $relink_command"
7790692f60a7Smrg	  else
779185ee4c00Smrg	    func_quote_for_eval "$var_value"
779285ee4c00Smrg	    relink_command="$var=$func_quote_for_eval_result; export $var; $relink_command"
7793692f60a7Smrg	  fi
779485ee4c00Smrg	done
779585ee4c00Smrg	relink_command="(cd `pwd`; $relink_command)"
779685ee4c00Smrg	relink_command=`$ECHO "X$relink_command" | $Xsed -e "$sed_quote_subst"`
779785ee4c00Smrg      fi
7798692f60a7Smrg
779985ee4c00Smrg      # Quote $ECHO for shipping.
780085ee4c00Smrg      if test "X$ECHO" = "X$SHELL $progpath --fallback-echo"; then
780185ee4c00Smrg	case $progpath in
780285ee4c00Smrg	[\\/]* | [A-Za-z]:[\\/]*) qecho="$SHELL $progpath --fallback-echo";;
780385ee4c00Smrg	*) qecho="$SHELL `pwd`/$progpath --fallback-echo";;
780485ee4c00Smrg	esac
780585ee4c00Smrg	qecho=`$ECHO "X$qecho" | $Xsed -e "$sed_quote_subst"`
780685ee4c00Smrg      else
780785ee4c00Smrg	qecho=`$ECHO "X$ECHO" | $Xsed -e "$sed_quote_subst"`
780885ee4c00Smrg      fi
780985ee4c00Smrg
781085ee4c00Smrg      # Only actually do things if not in dry run mode.
781185ee4c00Smrg      $opt_dry_run || {
781285ee4c00Smrg	# win32 will think the script is a binary if it has
781385ee4c00Smrg	# a .exe suffix, so we strip it off here.
781485ee4c00Smrg	case $output in
781585ee4c00Smrg	  *.exe) func_stripname '' '.exe' "$output"
781685ee4c00Smrg	         output=$func_stripname_result ;;
781785ee4c00Smrg	esac
781885ee4c00Smrg	# test for cygwin because mv fails w/o .exe extensions
781985ee4c00Smrg	case $host in
782085ee4c00Smrg	  *cygwin*)
782185ee4c00Smrg	    exeext=.exe
782285ee4c00Smrg	    func_stripname '' '.exe' "$outputname"
782385ee4c00Smrg	    outputname=$func_stripname_result ;;
782485ee4c00Smrg	  *) exeext= ;;
7825692f60a7Smrg	esac
782685ee4c00Smrg	case $host in
782785ee4c00Smrg	  *cygwin* | *mingw* )
782885ee4c00Smrg	    func_dirname_and_basename "$output" "" "."
782985ee4c00Smrg	    output_name=$func_basename_result
783085ee4c00Smrg	    output_path=$func_dirname_result
783185ee4c00Smrg	    cwrappersource="$output_path/$objdir/lt-$output_name.c"
783285ee4c00Smrg	    cwrapper="$output_path/$output_name.exe"
783385ee4c00Smrg	    $RM $cwrappersource $cwrapper
783485ee4c00Smrg	    trap "$RM $cwrappersource $cwrapper; exit $EXIT_FAILURE" 1 2 15
783585ee4c00Smrg
783685ee4c00Smrg	    func_emit_cwrapperexe_src > $cwrappersource
783785ee4c00Smrg
783885ee4c00Smrg	    # The wrapper executable is built using the $host compiler,
783985ee4c00Smrg	    # because it contains $host paths and files. If cross-
784085ee4c00Smrg	    # compiling, it, like the target executable, must be
784185ee4c00Smrg	    # executed on the $host or under an emulation environment.
784285ee4c00Smrg	    $opt_dry_run || {
784385ee4c00Smrg	      $LTCC $LTCFLAGS -o $cwrapper $cwrappersource
784485ee4c00Smrg	      $STRIP $cwrapper
784585ee4c00Smrg	    }
7846692f60a7Smrg
784785ee4c00Smrg	    # Now, create the wrapper script for func_source use:
784885ee4c00Smrg	    func_ltwrapper_scriptname $cwrapper
784985ee4c00Smrg	    $RM $func_ltwrapper_scriptname_result
785085ee4c00Smrg	    trap "$RM $func_ltwrapper_scriptname_result; exit $EXIT_FAILURE" 1 2 15
785185ee4c00Smrg	    $opt_dry_run || {
785285ee4c00Smrg	      # note: this script will not be executed, so do not chmod.
785385ee4c00Smrg	      if test "x$build" = "x$host" ; then
785485ee4c00Smrg		$cwrapper --lt-dump-script > $func_ltwrapper_scriptname_result
785585ee4c00Smrg	      else
785685ee4c00Smrg		func_emit_wrapper no > $func_ltwrapper_scriptname_result
785785ee4c00Smrg	      fi
785885ee4c00Smrg	    }
785985ee4c00Smrg	  ;;
786085ee4c00Smrg	  * )
786185ee4c00Smrg	    $RM $output
786285ee4c00Smrg	    trap "$RM $output; exit $EXIT_FAILURE" 1 2 15
7863692f60a7Smrg
786485ee4c00Smrg	    func_emit_wrapper no > $output
786585ee4c00Smrg	    chmod +x $output
786685ee4c00Smrg	  ;;
786785ee4c00Smrg	esac
786885ee4c00Smrg      }
786985ee4c00Smrg      exit $EXIT_SUCCESS
787085ee4c00Smrg      ;;
787185ee4c00Smrg    esac
7872692f60a7Smrg
787385ee4c00Smrg    # See if we need to build an old-fashioned archive.
787485ee4c00Smrg    for oldlib in $oldlibs; do
7875692f60a7Smrg
787685ee4c00Smrg      if test "$build_libtool_libs" = convenience; then
787785ee4c00Smrg	oldobjs="$libobjs_save $symfileobj"
787885ee4c00Smrg	addlibs="$convenience"
787985ee4c00Smrg	build_libtool_libs=no
788085ee4c00Smrg      else
788185ee4c00Smrg	if test "$build_libtool_libs" = module; then
788285ee4c00Smrg	  oldobjs="$libobjs_save"
788385ee4c00Smrg	  build_libtool_libs=no
788485ee4c00Smrg	else
788585ee4c00Smrg	  oldobjs="$old_deplibs $non_pic_objects"
788685ee4c00Smrg	  if test "$preload" = yes && test -f "$symfileobj"; then
788785ee4c00Smrg	    oldobjs="$oldobjs $symfileobj"
788885ee4c00Smrg	  fi
788985ee4c00Smrg	fi
789085ee4c00Smrg	addlibs="$old_convenience"
7891692f60a7Smrg      fi
7892692f60a7Smrg
789385ee4c00Smrg      if test -n "$addlibs"; then
789485ee4c00Smrg	gentop="$output_objdir/${outputname}x"
789585ee4c00Smrg	generated="$generated $gentop"
7896692f60a7Smrg
789785ee4c00Smrg	func_extract_archives $gentop $addlibs
789885ee4c00Smrg	oldobjs="$oldobjs $func_extract_archives_result"
789985ee4c00Smrg      fi
7900692f60a7Smrg
790185ee4c00Smrg      # Do each command in the archive commands.
790285ee4c00Smrg      if test -n "$old_archive_from_new_cmds" && test "$build_libtool_libs" = yes; then
790385ee4c00Smrg	cmds=$old_archive_from_new_cmds
790485ee4c00Smrg      else
7905692f60a7Smrg
790685ee4c00Smrg	# Add any objects from preloaded convenience libraries
790785ee4c00Smrg	if test -n "$dlprefiles"; then
790885ee4c00Smrg	  gentop="$output_objdir/${outputname}x"
790985ee4c00Smrg	  generated="$generated $gentop"
7910692f60a7Smrg
791185ee4c00Smrg	  func_extract_archives $gentop $dlprefiles
791285ee4c00Smrg	  oldobjs="$oldobjs $func_extract_archives_result"
791385ee4c00Smrg	fi
7914692f60a7Smrg
791585ee4c00Smrg	# POSIX demands no paths to be encoded in archives.  We have
791685ee4c00Smrg	# to avoid creating archives with duplicate basenames if we
791785ee4c00Smrg	# might have to extract them afterwards, e.g., when creating a
791885ee4c00Smrg	# static archive out of a convenience library, or when linking
791985ee4c00Smrg	# the entirety of a libtool archive into another (currently
792085ee4c00Smrg	# not supported by libtool).
792185ee4c00Smrg	if (for obj in $oldobjs
792285ee4c00Smrg	    do
792385ee4c00Smrg	      func_basename "$obj"
792485ee4c00Smrg	      $ECHO "$func_basename_result"
792585ee4c00Smrg	    done | sort | sort -uc >/dev/null 2>&1); then
792685ee4c00Smrg	  :
792785ee4c00Smrg	else
792885ee4c00Smrg	  $ECHO "copying selected object files to avoid basename conflicts..."
792985ee4c00Smrg	  gentop="$output_objdir/${outputname}x"
793085ee4c00Smrg	  generated="$generated $gentop"
793185ee4c00Smrg	  func_mkdir_p "$gentop"
793285ee4c00Smrg	  save_oldobjs=$oldobjs
793385ee4c00Smrg	  oldobjs=
793485ee4c00Smrg	  counter=1
793585ee4c00Smrg	  for obj in $save_oldobjs
793685ee4c00Smrg	  do
793785ee4c00Smrg	    func_basename "$obj"
793885ee4c00Smrg	    objbase="$func_basename_result"
793985ee4c00Smrg	    case " $oldobjs " in
794085ee4c00Smrg	    " ") oldobjs=$obj ;;
794185ee4c00Smrg	    *[\ /]"$objbase "*)
794285ee4c00Smrg	      while :; do
794385ee4c00Smrg		# Make sure we don't pick an alternate name that also
794485ee4c00Smrg		# overlaps.
794585ee4c00Smrg		newobj=lt$counter-$objbase
794685ee4c00Smrg		func_arith $counter + 1
794785ee4c00Smrg		counter=$func_arith_result
794885ee4c00Smrg		case " $oldobjs " in
794985ee4c00Smrg		*[\ /]"$newobj "*) ;;
795085ee4c00Smrg		*) if test ! -f "$gentop/$newobj"; then break; fi ;;
795185ee4c00Smrg		esac
795285ee4c00Smrg	      done
795385ee4c00Smrg	      func_show_eval "ln $obj $gentop/$newobj || cp $obj $gentop/$newobj"
795485ee4c00Smrg	      oldobjs="$oldobjs $gentop/$newobj"
795585ee4c00Smrg	      ;;
795685ee4c00Smrg	    *) oldobjs="$oldobjs $obj" ;;
795785ee4c00Smrg	    esac
7958692f60a7Smrg	  done
7959692f60a7Smrg	fi
796085ee4c00Smrg	eval cmds=\"$old_archive_cmds\"
7961692f60a7Smrg
796285ee4c00Smrg	func_len " $cmds"
796385ee4c00Smrg	len=$func_len_result
796485ee4c00Smrg	if test "$len" -lt "$max_cmd_len" || test "$max_cmd_len" -le -1; then
796585ee4c00Smrg	  cmds=$old_archive_cmds
796685ee4c00Smrg	else
796785ee4c00Smrg	  # the command line is too long to link in one step, link in parts
796885ee4c00Smrg	  func_verbose "using piecewise archive linking..."
796985ee4c00Smrg	  save_RANLIB=$RANLIB
797085ee4c00Smrg	  RANLIB=:
797185ee4c00Smrg	  objlist=
797285ee4c00Smrg	  concat_cmds=
797385ee4c00Smrg	  save_oldobjs=$oldobjs
797485ee4c00Smrg	  oldobjs=
797585ee4c00Smrg	  # Is there a better way of finding the last object in the list?
797685ee4c00Smrg	  for obj in $save_oldobjs
797785ee4c00Smrg	  do
797885ee4c00Smrg	    last_oldobj=$obj
797985ee4c00Smrg	  done
798085ee4c00Smrg	  eval test_cmds=\"$old_archive_cmds\"
798185ee4c00Smrg	  func_len " $test_cmds"
798285ee4c00Smrg	  len0=$func_len_result
798385ee4c00Smrg	  len=$len0
798485ee4c00Smrg	  for obj in $save_oldobjs
798585ee4c00Smrg	  do
798685ee4c00Smrg	    func_len " $obj"
798785ee4c00Smrg	    func_arith $len + $func_len_result
798885ee4c00Smrg	    len=$func_arith_result
798985ee4c00Smrg	    func_append objlist " $obj"
799085ee4c00Smrg	    if test "$len" -lt "$max_cmd_len"; then
799185ee4c00Smrg	      :
799285ee4c00Smrg	    else
799385ee4c00Smrg	      # the above command should be used before it gets too long
799485ee4c00Smrg	      oldobjs=$objlist
799585ee4c00Smrg	      if test "$obj" = "$last_oldobj" ; then
799685ee4c00Smrg		RANLIB=$save_RANLIB
799785ee4c00Smrg	      fi
799885ee4c00Smrg	      test -z "$concat_cmds" || concat_cmds=$concat_cmds~
799985ee4c00Smrg	      eval concat_cmds=\"\${concat_cmds}$old_archive_cmds\"
800085ee4c00Smrg	      objlist=
800185ee4c00Smrg	      len=$len0
800285ee4c00Smrg	    fi
800385ee4c00Smrg	  done
800485ee4c00Smrg	  RANLIB=$save_RANLIB
800585ee4c00Smrg	  oldobjs=$objlist
800685ee4c00Smrg	  if test "X$oldobjs" = "X" ; then
800785ee4c00Smrg	    eval cmds=\"\$concat_cmds\"
800885ee4c00Smrg	  else
800985ee4c00Smrg	    eval cmds=\"\$concat_cmds~\$old_archive_cmds\"
801085ee4c00Smrg	  fi
801185ee4c00Smrg	fi
801285ee4c00Smrg      fi
801385ee4c00Smrg      func_execute_cmds "$cmds" 'exit $?'
8014692f60a7Smrg    done
8015692f60a7Smrg
801685ee4c00Smrg    test -n "$generated" && \
801785ee4c00Smrg      func_show_eval "${RM}r$generated"
8018692f60a7Smrg
801985ee4c00Smrg    # Now create the libtool archive.
802085ee4c00Smrg    case $output in
802185ee4c00Smrg    *.la)
802285ee4c00Smrg      old_library=
802385ee4c00Smrg      test "$build_old_libs" = yes && old_library="$libname.$libext"
802485ee4c00Smrg      func_verbose "creating $output"
8025692f60a7Smrg
802685ee4c00Smrg      # Preserve any variables that may affect compiler behavior
802785ee4c00Smrg      for var in $variables_saved_for_relink; do
802885ee4c00Smrg	if eval test -z \"\${$var+set}\"; then
802985ee4c00Smrg	  relink_command="{ test -z \"\${$var+set}\" || $lt_unset $var || { $var=; export $var; }; }; $relink_command"
803085ee4c00Smrg	elif eval var_value=\$$var; test -z "$var_value"; then
803185ee4c00Smrg	  relink_command="$var=; export $var; $relink_command"
8032692f60a7Smrg	else
803385ee4c00Smrg	  func_quote_for_eval "$var_value"
803485ee4c00Smrg	  relink_command="$var=$func_quote_for_eval_result; export $var; $relink_command"
8035692f60a7Smrg	fi
803685ee4c00Smrg      done
803785ee4c00Smrg      # Quote the link command for shipping.
803885ee4c00Smrg      relink_command="(cd `pwd`; $SHELL $progpath $preserve_args --mode=relink $libtool_args @inst_prefix_dir@)"
803985ee4c00Smrg      relink_command=`$ECHO "X$relink_command" | $Xsed -e "$sed_quote_subst"`
804085ee4c00Smrg      if test "$hardcode_automatic" = yes ; then
804185ee4c00Smrg	relink_command=
804285ee4c00Smrg      fi
8043692f60a7Smrg
804485ee4c00Smrg      # Only create the output if not a dry run.
804585ee4c00Smrg      $opt_dry_run || {
804685ee4c00Smrg	for installed in no yes; do
804785ee4c00Smrg	  if test "$installed" = yes; then
804885ee4c00Smrg	    if test -z "$install_libdir"; then
804985ee4c00Smrg	      break
805085ee4c00Smrg	    fi
805185ee4c00Smrg	    output="$output_objdir/$outputname"i
805285ee4c00Smrg	    # Replace all uninstalled libtool libraries with the installed ones
805385ee4c00Smrg	    newdependency_libs=
805485ee4c00Smrg	    for deplib in $dependency_libs; do
805585ee4c00Smrg	      case $deplib in
805685ee4c00Smrg	      *.la)
805785ee4c00Smrg		func_basename "$deplib"
805885ee4c00Smrg		name="$func_basename_result"
805985ee4c00Smrg		eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $deplib`
806085ee4c00Smrg		test -z "$libdir" && \
806185ee4c00Smrg		  func_fatal_error "\`$deplib' is not a valid libtool archive"
806285ee4c00Smrg		newdependency_libs="$newdependency_libs $libdir/$name"
806385ee4c00Smrg		;;
806485ee4c00Smrg	      *) newdependency_libs="$newdependency_libs $deplib" ;;
806585ee4c00Smrg	      esac
806685ee4c00Smrg	    done
806785ee4c00Smrg	    dependency_libs="$newdependency_libs"
806885ee4c00Smrg	    newdlfiles=
806985ee4c00Smrg
807085ee4c00Smrg	    for lib in $dlfiles; do
807185ee4c00Smrg	      case $lib in
807285ee4c00Smrg	      *.la)
807385ee4c00Smrg	        func_basename "$lib"
807485ee4c00Smrg		name="$func_basename_result"
807585ee4c00Smrg		eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $lib`
807685ee4c00Smrg		test -z "$libdir" && \
807785ee4c00Smrg		  func_fatal_error "\`$lib' is not a valid libtool archive"
807885ee4c00Smrg		newdlfiles="$newdlfiles $libdir/$name"
807985ee4c00Smrg		;;
808085ee4c00Smrg	      *) newdlfiles="$newdlfiles $lib" ;;
808185ee4c00Smrg	      esac
808285ee4c00Smrg	    done
808385ee4c00Smrg	    dlfiles="$newdlfiles"
808485ee4c00Smrg	    newdlprefiles=
808585ee4c00Smrg	    for lib in $dlprefiles; do
808685ee4c00Smrg	      case $lib in
808785ee4c00Smrg	      *.la)
808885ee4c00Smrg		# Only pass preopened files to the pseudo-archive (for
808985ee4c00Smrg		# eventual linking with the app. that links it) if we
809085ee4c00Smrg		# didn't already link the preopened objects directly into
809185ee4c00Smrg		# the library:
809285ee4c00Smrg		func_basename "$lib"
809385ee4c00Smrg		name="$func_basename_result"
809485ee4c00Smrg		eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $lib`
809585ee4c00Smrg		test -z "$libdir" && \
809685ee4c00Smrg		  func_fatal_error "\`$lib' is not a valid libtool archive"
809785ee4c00Smrg		newdlprefiles="$newdlprefiles $libdir/$name"
809885ee4c00Smrg		;;
809985ee4c00Smrg	      esac
810085ee4c00Smrg	    done
810185ee4c00Smrg	    dlprefiles="$newdlprefiles"
810285ee4c00Smrg	  else
810385ee4c00Smrg	    newdlfiles=
810485ee4c00Smrg	    for lib in $dlfiles; do
810585ee4c00Smrg	      case $lib in
810685ee4c00Smrg		[\\/]* | [A-Za-z]:[\\/]*) abs="$lib" ;;
810785ee4c00Smrg		*) abs=`pwd`"/$lib" ;;
810885ee4c00Smrg	      esac
810985ee4c00Smrg	      newdlfiles="$newdlfiles $abs"
811085ee4c00Smrg	    done
811185ee4c00Smrg	    dlfiles="$newdlfiles"
811285ee4c00Smrg	    newdlprefiles=
811385ee4c00Smrg	    for lib in $dlprefiles; do
811485ee4c00Smrg	      case $lib in
811585ee4c00Smrg		[\\/]* | [A-Za-z]:[\\/]*) abs="$lib" ;;
811685ee4c00Smrg		*) abs=`pwd`"/$lib" ;;
811785ee4c00Smrg	      esac
811885ee4c00Smrg	      newdlprefiles="$newdlprefiles $abs"
811985ee4c00Smrg	    done
812085ee4c00Smrg	    dlprefiles="$newdlprefiles"
812185ee4c00Smrg	  fi
812285ee4c00Smrg	  $RM $output
812385ee4c00Smrg	  # place dlname in correct position for cygwin
812485ee4c00Smrg	  tdlname=$dlname
812585ee4c00Smrg	  case $host,$output,$installed,$module,$dlname in
812685ee4c00Smrg	    *cygwin*,*lai,yes,no,*.dll | *mingw*,*lai,yes,no,*.dll | *cegcc*,*lai,yes,no,*.dll) tdlname=../bin/$dlname ;;
812785ee4c00Smrg	  esac
812885ee4c00Smrg	  $ECHO > $output "\
812985ee4c00Smrg# $outputname - a libtool library file
813085ee4c00Smrg# Generated by $PROGRAM (GNU $PACKAGE$TIMESTAMP) $VERSION
813185ee4c00Smrg#
813285ee4c00Smrg# Please DO NOT delete this file!
813385ee4c00Smrg# It is necessary for linking the library.
8134692f60a7Smrg
813585ee4c00Smrg# The name that we can dlopen(3).
813685ee4c00Smrgdlname='$tdlname'
8137692f60a7Smrg
813885ee4c00Smrg# Names of this library.
813985ee4c00Smrglibrary_names='$library_names'
8140692f60a7Smrg
814185ee4c00Smrg# The name of the static archive.
814285ee4c00Smrgold_library='$old_library'
8143692f60a7Smrg
814485ee4c00Smrg# Linker flags that can not go in dependency_libs.
814585ee4c00Smrginherited_linker_flags='$new_inherited_linker_flags'
8146692f60a7Smrg
814785ee4c00Smrg# Libraries that this one depends upon.
814885ee4c00Smrgdependency_libs='$dependency_libs'
8149692f60a7Smrg
815085ee4c00Smrg# Names of additional weak libraries provided by this library
815185ee4c00Smrgweak_library_names='$weak_libs'
8152692f60a7Smrg
815385ee4c00Smrg# Version information for $libname.
815485ee4c00Smrgcurrent=$current
815585ee4c00Smrgage=$age
815685ee4c00Smrgrevision=$revision
8157692f60a7Smrg
815885ee4c00Smrg# Is this an already installed library?
815985ee4c00Smrginstalled=$installed
8160692f60a7Smrg
816185ee4c00Smrg# Should we warn about portability when linking against -modules?
816285ee4c00Smrgshouldnotlink=$module
8163692f60a7Smrg
816485ee4c00Smrg# Files to dlopen/dlpreopen
816585ee4c00Smrgdlopen='$dlfiles'
816685ee4c00Smrgdlpreopen='$dlprefiles'
8167692f60a7Smrg
816885ee4c00Smrg# Directory that this library needs to be installed in:
816985ee4c00Smrglibdir='$install_libdir'"
817085ee4c00Smrg	  if test "$installed" = no && test "$need_relink" = yes; then
817185ee4c00Smrg	    $ECHO >> $output "\
817285ee4c00Smrgrelink_command=\"$relink_command\""
817385ee4c00Smrg	  fi
817485ee4c00Smrg	done
817585ee4c00Smrg      }
8176692f60a7Smrg
817785ee4c00Smrg      # Do a symbolic link so that the libtool archive can be found in
817885ee4c00Smrg      # LD_LIBRARY_PATH before the program is installed.
817985ee4c00Smrg      func_show_eval '( cd "$output_objdir" && $RM "$outputname" && $LN_S "../$outputname" "$outputname" )' 'exit $?'
818085ee4c00Smrg      ;;
818185ee4c00Smrg    esac
818285ee4c00Smrg    exit $EXIT_SUCCESS
818385ee4c00Smrg}
8184692f60a7Smrg
818585ee4c00Smrg{ test "$mode" = link || test "$mode" = relink; } &&
818685ee4c00Smrg    func_mode_link ${1+"$@"}
8187692f60a7Smrg
8188692f60a7Smrg
818985ee4c00Smrg# func_mode_uninstall arg...
819085ee4c00Smrgfunc_mode_uninstall ()
819185ee4c00Smrg{
819285ee4c00Smrg    $opt_debug
819385ee4c00Smrg    RM="$nonopt"
8194692f60a7Smrg    files=
8195692f60a7Smrg    rmforce=
8196692f60a7Smrg    exit_status=0
8197692f60a7Smrg
8198692f60a7Smrg    # This variable tells wrapper scripts just to set variables rather
8199692f60a7Smrg    # than running their programs.
8200692f60a7Smrg    libtool_install_magic="$magic"
8201692f60a7Smrg
8202692f60a7Smrg    for arg
8203692f60a7Smrg    do
8204692f60a7Smrg      case $arg in
820585ee4c00Smrg      -f) RM="$RM $arg"; rmforce=yes ;;
820685ee4c00Smrg      -*) RM="$RM $arg" ;;
8207692f60a7Smrg      *) files="$files $arg" ;;
8208692f60a7Smrg      esac
8209692f60a7Smrg    done
8210692f60a7Smrg
821185ee4c00Smrg    test -z "$RM" && \
821285ee4c00Smrg      func_fatal_help "you must specify an RM program"
8213692f60a7Smrg
8214692f60a7Smrg    rmdirs=
8215692f60a7Smrg
8216692f60a7Smrg    origobjdir="$objdir"
8217692f60a7Smrg    for file in $files; do
821885ee4c00Smrg      func_dirname "$file" "" "."
821985ee4c00Smrg      dir="$func_dirname_result"
822085ee4c00Smrg      if test "X$dir" = X.; then
8221692f60a7Smrg	objdir="$origobjdir"
8222692f60a7Smrg      else
8223692f60a7Smrg	objdir="$dir/$origobjdir"
8224692f60a7Smrg      fi
822585ee4c00Smrg      func_basename "$file"
822685ee4c00Smrg      name="$func_basename_result"
8227692f60a7Smrg      test "$mode" = uninstall && objdir="$dir"
8228692f60a7Smrg
8229692f60a7Smrg      # Remember objdir for removal later, being careful to avoid duplicates
8230692f60a7Smrg      if test "$mode" = clean; then
8231692f60a7Smrg	case " $rmdirs " in
8232692f60a7Smrg	  *" $objdir "*) ;;
8233692f60a7Smrg	  *) rmdirs="$rmdirs $objdir" ;;
8234692f60a7Smrg	esac
8235692f60a7Smrg      fi
8236692f60a7Smrg
8237692f60a7Smrg      # Don't error if the file doesn't exist and rm -f was used.
823885ee4c00Smrg      if { test -L "$file"; } >/dev/null 2>&1 ||
823985ee4c00Smrg	 { test -h "$file"; } >/dev/null 2>&1 ||
824085ee4c00Smrg	 test -f "$file"; then
8241692f60a7Smrg	:
8242692f60a7Smrg      elif test -d "$file"; then
8243692f60a7Smrg	exit_status=1
8244692f60a7Smrg	continue
8245692f60a7Smrg      elif test "$rmforce" = yes; then
8246692f60a7Smrg	continue
8247692f60a7Smrg      fi
8248692f60a7Smrg
8249692f60a7Smrg      rmfiles="$file"
8250692f60a7Smrg
8251692f60a7Smrg      case $name in
8252692f60a7Smrg      *.la)
8253692f60a7Smrg	# Possibly a libtool archive, so verify it.
825485ee4c00Smrg	if func_lalib_p "$file"; then
825585ee4c00Smrg	  func_source $dir/$name
8256692f60a7Smrg
8257692f60a7Smrg	  # Delete the libtool libraries and symlinks.
8258692f60a7Smrg	  for n in $library_names; do
8259692f60a7Smrg	    rmfiles="$rmfiles $objdir/$n"
8260692f60a7Smrg	  done
8261692f60a7Smrg	  test -n "$old_library" && rmfiles="$rmfiles $objdir/$old_library"
8262692f60a7Smrg
8263692f60a7Smrg	  case "$mode" in
8264692f60a7Smrg	  clean)
8265692f60a7Smrg	    case "  $library_names " in
8266692f60a7Smrg	    # "  " in the beginning catches empty $dlname
8267692f60a7Smrg	    *" $dlname "*) ;;
8268692f60a7Smrg	    *) rmfiles="$rmfiles $objdir/$dlname" ;;
8269692f60a7Smrg	    esac
827085ee4c00Smrg	    test -n "$libdir" && rmfiles="$rmfiles $objdir/$name $objdir/${name}i"
8271692f60a7Smrg	    ;;
8272692f60a7Smrg	  uninstall)
8273692f60a7Smrg	    if test -n "$library_names"; then
8274692f60a7Smrg	      # Do each command in the postuninstall commands.
827585ee4c00Smrg	      func_execute_cmds "$postuninstall_cmds" 'test "$rmforce" = yes || exit_status=1'
8276692f60a7Smrg	    fi
8277692f60a7Smrg
8278692f60a7Smrg	    if test -n "$old_library"; then
8279692f60a7Smrg	      # Do each command in the old_postuninstall commands.
828085ee4c00Smrg	      func_execute_cmds "$old_postuninstall_cmds" 'test "$rmforce" = yes || exit_status=1'
8281692f60a7Smrg	    fi
8282692f60a7Smrg	    # FIXME: should reinstall the best remaining shared library.
8283692f60a7Smrg	    ;;
8284692f60a7Smrg	  esac
8285692f60a7Smrg	fi
8286692f60a7Smrg	;;
8287692f60a7Smrg
8288692f60a7Smrg      *.lo)
8289692f60a7Smrg	# Possibly a libtool object, so verify it.
829085ee4c00Smrg	if func_lalib_p "$file"; then
8291692f60a7Smrg
8292692f60a7Smrg	  # Read the .lo file
829385ee4c00Smrg	  func_source $dir/$name
8294692f60a7Smrg
8295692f60a7Smrg	  # Add PIC object to the list of files to remove.
829685ee4c00Smrg	  if test -n "$pic_object" &&
829785ee4c00Smrg	     test "$pic_object" != none; then
8298692f60a7Smrg	    rmfiles="$rmfiles $dir/$pic_object"
8299692f60a7Smrg	  fi
8300692f60a7Smrg
8301692f60a7Smrg	  # Add non-PIC object to the list of files to remove.
830285ee4c00Smrg	  if test -n "$non_pic_object" &&
830385ee4c00Smrg	     test "$non_pic_object" != none; then
8304692f60a7Smrg	    rmfiles="$rmfiles $dir/$non_pic_object"
8305692f60a7Smrg	  fi
8306692f60a7Smrg	fi
8307692f60a7Smrg	;;
8308692f60a7Smrg
8309692f60a7Smrg      *)
8310692f60a7Smrg	if test "$mode" = clean ; then
8311692f60a7Smrg	  noexename=$name
8312692f60a7Smrg	  case $file in
8313692f60a7Smrg	  *.exe)
831485ee4c00Smrg	    func_stripname '' '.exe' "$file"
831585ee4c00Smrg	    file=$func_stripname_result
831685ee4c00Smrg	    func_stripname '' '.exe' "$name"
831785ee4c00Smrg	    noexename=$func_stripname_result
8318692f60a7Smrg	    # $file with .exe has already been added to rmfiles,
8319692f60a7Smrg	    # add $file without .exe
8320692f60a7Smrg	    rmfiles="$rmfiles $file"
8321692f60a7Smrg	    ;;
8322692f60a7Smrg	  esac
8323692f60a7Smrg	  # Do a test to see if this is a libtool program.
832485ee4c00Smrg	  if func_ltwrapper_p "$file"; then
832585ee4c00Smrg	    if func_ltwrapper_executable_p "$file"; then
832685ee4c00Smrg	      func_ltwrapper_scriptname "$file"
832785ee4c00Smrg	      relink_command=
832885ee4c00Smrg	      func_source $func_ltwrapper_scriptname_result
832985ee4c00Smrg	      rmfiles="$rmfiles $func_ltwrapper_scriptname_result"
833085ee4c00Smrg	    else
833185ee4c00Smrg	      relink_command=
833285ee4c00Smrg	      func_source $dir/$noexename
833385ee4c00Smrg	    fi
8334692f60a7Smrg
8335692f60a7Smrg	    # note $name still contains .exe if it was in $file originally
8336692f60a7Smrg	    # as does the version of $file that was added into $rmfiles
8337692f60a7Smrg	    rmfiles="$rmfiles $objdir/$name $objdir/${name}S.${objext}"
8338692f60a7Smrg	    if test "$fast_install" = yes && test -n "$relink_command"; then
8339692f60a7Smrg	      rmfiles="$rmfiles $objdir/lt-$name"
8340692f60a7Smrg	    fi
8341692f60a7Smrg	    if test "X$noexename" != "X$name" ; then
8342692f60a7Smrg	      rmfiles="$rmfiles $objdir/lt-${noexename}.c"
8343692f60a7Smrg	    fi
8344692f60a7Smrg	  fi
8345692f60a7Smrg	fi
8346692f60a7Smrg	;;
8347692f60a7Smrg      esac
834885ee4c00Smrg      func_show_eval "$RM $rmfiles" 'exit_status=1'
8349692f60a7Smrg    done
8350692f60a7Smrg    objdir="$origobjdir"
8351692f60a7Smrg
8352692f60a7Smrg    # Try to remove the ${objdir}s in the directories where we deleted files
8353692f60a7Smrg    for dir in $rmdirs; do
8354692f60a7Smrg      if test -d "$dir"; then
835585ee4c00Smrg	func_show_eval "rmdir $dir >/dev/null 2>&1"
8356692f60a7Smrg      fi
8357692f60a7Smrg    done
8358692f60a7Smrg
8359692f60a7Smrg    exit $exit_status
836085ee4c00Smrg}
8361692f60a7Smrg
836285ee4c00Smrg{ test "$mode" = uninstall || test "$mode" = clean; } &&
836385ee4c00Smrg    func_mode_uninstall ${1+"$@"}
8364692f60a7Smrg
836585ee4c00Smrgtest -z "$mode" && {
836685ee4c00Smrg  help="$generic_help"
836785ee4c00Smrg  func_fatal_help "you must specify a MODE"
836885ee4c00Smrg}
836985ee4c00Smrg
837085ee4c00Smrgtest -z "$exec_cmd" && \
837185ee4c00Smrg  func_fatal_help "invalid operation mode \`$mode'"
8372692f60a7Smrg
8373692f60a7Smrgif test -n "$exec_cmd"; then
837485ee4c00Smrg  eval exec "$exec_cmd"
8375692f60a7Smrg  exit $EXIT_FAILURE
8376692f60a7Smrgfi
8377692f60a7Smrg
837885ee4c00Smrgexit $exit_status
8379692f60a7Smrg
8380692f60a7Smrg
8381692f60a7Smrg# The TAGs below are defined such that we never get into a situation
8382692f60a7Smrg# in which we disable both kinds of libraries.  Given conflicting
8383692f60a7Smrg# choices, we go for a static library, that is the most portable,
8384692f60a7Smrg# since we can't tell whether shared libraries were disabled because
8385692f60a7Smrg# the user asked for that or because the platform doesn't support
8386692f60a7Smrg# them.  This is particularly important on AIX, because we don't
8387692f60a7Smrg# support having both static and shared libraries enabled at the same
8388692f60a7Smrg# time on that platform, so we default to a shared-only configuration.
8389692f60a7Smrg# If a disable-shared tag is given, we'll fallback to a static-only
8390692f60a7Smrg# configuration.  But we'll never go from static-only to shared-only.
8391692f60a7Smrg
8392692f60a7Smrg# ### BEGIN LIBTOOL TAG CONFIG: disable-shared
839385ee4c00Smrgbuild_libtool_libs=no
839485ee4c00Smrgbuild_old_libs=yes
8395692f60a7Smrg# ### END LIBTOOL TAG CONFIG: disable-shared
8396692f60a7Smrg
8397692f60a7Smrg# ### BEGIN LIBTOOL TAG CONFIG: disable-static
839885ee4c00Smrgbuild_old_libs=`case $build_libtool_libs in yes) echo no;; *) echo yes;; esac`
8399692f60a7Smrg# ### END LIBTOOL TAG CONFIG: disable-static
8400692f60a7Smrg
8401692f60a7Smrg# Local Variables:
8402692f60a7Smrg# mode:shell-script
8403692f60a7Smrg# sh-indentation:2
8404692f60a7Smrg# End:
840585ee4c00Smrg# vi:sw=2
840685ee4c00Smrg
8407