ltmain.sh revision 7aa89044
149dc963fSmrg# Generated from ltmain.m4sh.
249dc963fSmrg
37aa89044Smrg# libtool (GNU libtool) 2.2.10
449dc963fSmrg# Written by Gordon Matzigkeit <gord@gnu.ai.mit.edu>, 1996
549dc963fSmrg
67aa89044Smrg# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005, 2006,
77aa89044Smrg# 2007, 2008, 2009, 2010 Free Software Foundation, Inc.
849dc963fSmrg# This is free software; see the source for copying conditions.  There is NO
949dc963fSmrg# warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
1049dc963fSmrg
1149dc963fSmrg# GNU Libtool is free software; you can redistribute it and/or modify
124b0ead49Smrg# it under the terms of the GNU General Public License as published by
134b0ead49Smrg# the Free Software Foundation; either version 2 of the License, or
144b0ead49Smrg# (at your option) any later version.
154b0ead49Smrg#
1649dc963fSmrg# As a special exception to the GNU General Public License,
1749dc963fSmrg# if you distribute this file as part of a program or library that
1849dc963fSmrg# is built using GNU Libtool, you may include this file under the
1949dc963fSmrg# same distribution terms that you use for the rest of that program.
2049dc963fSmrg#
2149dc963fSmrg# GNU Libtool is distributed in the hope that it will be useful, but
224b0ead49Smrg# WITHOUT ANY WARRANTY; without even the implied warranty of
234b0ead49Smrg# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
244b0ead49Smrg# General Public License for more details.
254b0ead49Smrg#
264b0ead49Smrg# You should have received a copy of the GNU General Public License
2749dc963fSmrg# along with GNU Libtool; see the file COPYING.  If not, a copy
2849dc963fSmrg# can be downloaded from http://www.gnu.org/licenses/gpl.html,
2949dc963fSmrg# or obtained by writing to the Free Software Foundation, Inc.,
3049dc963fSmrg# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
314b0ead49Smrg
3249dc963fSmrg# Usage: $progname [OPTION]... [MODE-ARG]...
3349dc963fSmrg#
3449dc963fSmrg# Provide generalized library-building support services.
3549dc963fSmrg#
367aa89044Smrg#       --config             show all configuration variables
377aa89044Smrg#       --debug              enable verbose shell tracing
387aa89044Smrg#   -n, --dry-run            display commands without modifying any files
397aa89044Smrg#       --features           display basic configuration information and exit
407aa89044Smrg#       --mode=MODE          use operation mode MODE
417aa89044Smrg#       --preserve-dup-deps  don't remove duplicate dependency libraries
427aa89044Smrg#       --quiet, --silent    don't print informational messages
437aa89044Smrg#       --no-quiet, --no-silent
447aa89044Smrg#                            print informational messages (default)
457aa89044Smrg#       --tag=TAG            use configuration variables from tag TAG
467aa89044Smrg#   -v, --verbose            print more informational messages than default
477aa89044Smrg#       --no-verbose         don't print the extra informational messages
487aa89044Smrg#       --version            print version information
497aa89044Smrg#   -h, --help, --help-all   print short, long, or detailed help message
5049dc963fSmrg#
5149dc963fSmrg# MODE must be one of the following:
5249dc963fSmrg#
537aa89044Smrg#         clean              remove files from the build directory
547aa89044Smrg#         compile            compile a source file into a libtool object
557aa89044Smrg#         execute            automatically set library path, then run a program
567aa89044Smrg#         finish             complete the installation of libtool libraries
577aa89044Smrg#         install            install libraries or executables
587aa89044Smrg#         link               create a library or an executable
597aa89044Smrg#         uninstall          remove libraries from an installed directory
6049dc963fSmrg#
617aa89044Smrg# MODE-ARGS vary depending on the MODE.  When passed as first option,
627aa89044Smrg# `--mode=MODE' may be abbreviated as `MODE' or a unique abbreviation of that.
6349dc963fSmrg# Try `$progname --help --mode=MODE' for a more detailed description of MODE.
6449dc963fSmrg#
6549dc963fSmrg# When reporting a bug, please describe a test case to reproduce it and
6649dc963fSmrg# include the following information:
6749dc963fSmrg#
687aa89044Smrg#         host-triplet:	$host
697aa89044Smrg#         shell:		$SHELL
707aa89044Smrg#         compiler:		$LTCC
717aa89044Smrg#         compiler flags:		$LTCFLAGS
727aa89044Smrg#         linker:		$LD (gnu? $with_gnu_ld)
737aa89044Smrg#         $progname:	(GNU libtool) 2.2.10
747aa89044Smrg#         automake:	$automake_version
757aa89044Smrg#         autoconf:	$autoconf_version
7649dc963fSmrg#
7749dc963fSmrg# Report bugs to <bug-libtool@gnu.org>.
784b0ead49Smrg
797aa89044SmrgPROGRAM=libtool
804b0ead49SmrgPACKAGE=libtool
817aa89044SmrgVERSION=2.2.10
8249dc963fSmrgTIMESTAMP=""
837aa89044Smrgpackage_revision=1.3175
8452b01e16Smrg
8549dc963fSmrg# Be Bourne compatible
8652b01e16Smrgif test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then
8752b01e16Smrg  emulate sh
8852b01e16Smrg  NULLCMD=:
8952b01e16Smrg  # Zsh 3.x and 4.x performs word splitting on ${1+"$@"}, which
9052b01e16Smrg  # is contrary to our usage.  Disable this feature.
9152b01e16Smrg  alias -g '${1+"$@"}'='"$@"'
924b0ead49Smrg  setopt NO_GLOB_SUBST
9352b01e16Smrgelse
9452b01e16Smrg  case `(set -o) 2>/dev/null` in *posix*) set -o posix;; esac
954b0ead49Smrgfi
9652b01e16SmrgBIN_SH=xpg4; export BIN_SH # for Tru64
9752b01e16SmrgDUALCASE=1; export DUALCASE # for MKS sh
984b0ead49Smrg
997aa89044Smrg# A function that is used when there is no print builtin or printf.
1007aa89044Smrgfunc_fallback_echo ()
1017aa89044Smrg{
1027aa89044Smrg  eval 'cat <<_LTECHO_EOF
1037aa89044Smrg$1
1047aa89044Smrg_LTECHO_EOF'
1057aa89044Smrg}
1067aa89044Smrg
10749dc963fSmrg# NLS nuisances: We save the old values to restore during execute mode.
10849dc963fSmrglt_user_locale=
10949dc963fSmrglt_safe_locale=
11052b01e16Smrgfor lt_var in LANG LANGUAGE LC_ALL LC_CTYPE LC_COLLATE LC_MESSAGES
11152b01e16Smrgdo
11252b01e16Smrg  eval "if test \"\${$lt_var+set}\" = set; then
11349dc963fSmrg          save_$lt_var=\$$lt_var
11449dc963fSmrg          $lt_var=C
11552b01e16Smrg	  export $lt_var
11649dc963fSmrg	  lt_user_locale=\"$lt_var=\\\$save_\$lt_var; \$lt_user_locale\"
11749dc963fSmrg	  lt_safe_locale=\"$lt_var=C; \$lt_safe_locale\"
11852b01e16Smrg	fi"
11952b01e16Smrgdone
1207aa89044SmrgLC_ALL=C
1217aa89044SmrgLANGUAGE=C
1227aa89044Smrgexport LANGUAGE LC_ALL
12352b01e16Smrg
12449dc963fSmrg$lt_unset CDPATH
12549dc963fSmrg
12649dc963fSmrg
1277aa89044Smrg# Work around backward compatibility issue on IRIX 6.5. On IRIX 6.4+, sh
1287aa89044Smrg# is ksh but when the shell is invoked as "sh" and the current value of
1297aa89044Smrg# the _XPG environment variable is not equal to 1 (one), the special
1307aa89044Smrg# positional parameter $0, within a function call, is the name of the
1317aa89044Smrg# function.
1327aa89044Smrgprogpath="$0"
13349dc963fSmrg
13449dc963fSmrg
13549dc963fSmrg
13649dc963fSmrg: ${CP="cp -f"}
1377aa89044Smrgtest "${ECHO+set}" = set || ECHO=${as_echo-'printf %s\n'}
1387aa89044Smrg: ${EGREP="grep -E"}
1397aa89044Smrg: ${FGREP="grep -F"}
1407aa89044Smrg: ${GREP="grep"}
14149dc963fSmrg: ${LN_S="ln -s"}
14249dc963fSmrg: ${MAKE="make"}
14349dc963fSmrg: ${MKDIR="mkdir"}
14449dc963fSmrg: ${MV="mv -f"}
14549dc963fSmrg: ${RM="rm -f"}
1467aa89044Smrg: ${SED="sed"}
14749dc963fSmrg: ${SHELL="${CONFIG_SHELL-/bin/sh}"}
14849dc963fSmrg: ${Xsed="$SED -e 1s/^X//"}
14949dc963fSmrg
15049dc963fSmrg# Global variables:
15149dc963fSmrgEXIT_SUCCESS=0
15249dc963fSmrgEXIT_FAILURE=1
15349dc963fSmrgEXIT_MISMATCH=63  # $? = 63 is used to indicate version mismatch to missing.
15449dc963fSmrgEXIT_SKIP=77	  # $? = 77 is used to indicate a skipped test to automake.
15549dc963fSmrg
15649dc963fSmrgexit_status=$EXIT_SUCCESS
1574b0ead49Smrg
1584b0ead49Smrg# Make sure IFS has a sensible default
1594b0ead49Smrglt_nl='
1604b0ead49Smrg'
1614b0ead49SmrgIFS=" 	$lt_nl"
1624b0ead49Smrg
16349dc963fSmrgdirname="s,/[^/]*$,,"
16449dc963fSmrgbasename="s,^.*/,,"
16549dc963fSmrg
16649dc963fSmrg# func_dirname_and_basename file append nondir_replacement
16749dc963fSmrg# perform func_basename and func_dirname in a single function
16849dc963fSmrg# call:
16949dc963fSmrg#   dirname:  Compute the dirname of FILE.  If nonempty,
17049dc963fSmrg#             add APPEND to the result, otherwise set result
17149dc963fSmrg#             to NONDIR_REPLACEMENT.
17249dc963fSmrg#             value returned in "$func_dirname_result"
17349dc963fSmrg#   basename: Compute filename of FILE.
17449dc963fSmrg#             value retuned in "$func_basename_result"
17549dc963fSmrg# Implementation must be kept synchronized with func_dirname
17649dc963fSmrg# and func_basename. For efficiency, we do not delegate to
17749dc963fSmrg# those functions but instead duplicate the functionality here.
17849dc963fSmrgfunc_dirname_and_basename ()
17949dc963fSmrg{
18049dc963fSmrg  # Extract subdirectory from the argument.
1817aa89044Smrg  func_dirname_result=`$ECHO "${1}" | $SED -e "$dirname"`
18249dc963fSmrg  if test "X$func_dirname_result" = "X${1}"; then
18349dc963fSmrg    func_dirname_result="${3}"
18449dc963fSmrg  else
18549dc963fSmrg    func_dirname_result="$func_dirname_result${2}"
18649dc963fSmrg  fi
1877aa89044Smrg  func_basename_result=`$ECHO "${1}" | $SED -e "$basename"`
18849dc963fSmrg}
1894b0ead49Smrg
19049dc963fSmrg# Generated shell functions inserted here.
19149dc963fSmrg
1927aa89044Smrg# These SED scripts presuppose an absolute path with a trailing slash.
1937aa89044Smrgpathcar='s,^/\([^/]*\).*$,\1,'
1947aa89044Smrgpathcdr='s,^/[^/]*,,'
1957aa89044Smrgremovedotparts=':dotsl
1967aa89044Smrg		s@/\./@/@g
1977aa89044Smrg		t dotsl
1987aa89044Smrg		s,/\.$,/,'
1997aa89044Smrgcollapseslashes='s@/\{1,\}@/@g'
2007aa89044Smrgfinalslash='s,/*$,/,'
2017aa89044Smrg
2027aa89044Smrg# func_normal_abspath PATH
2037aa89044Smrg# Remove doubled-up and trailing slashes, "." path components,
2047aa89044Smrg# and cancel out any ".." path components in PATH after making
2057aa89044Smrg# it an absolute path.
2067aa89044Smrg#             value returned in "$func_normal_abspath_result"
2077aa89044Smrgfunc_normal_abspath ()
2087aa89044Smrg{
2097aa89044Smrg  # Start from root dir and reassemble the path.
2107aa89044Smrg  func_normal_abspath_result=
2117aa89044Smrg  func_normal_abspath_tpath=$1
2127aa89044Smrg  func_normal_abspath_altnamespace=
2137aa89044Smrg  case $func_normal_abspath_tpath in
2147aa89044Smrg    "")
2157aa89044Smrg      # Empty path, that just means $cwd.
2167aa89044Smrg      func_stripname '' '/' "`pwd`"
2177aa89044Smrg      func_normal_abspath_result=$func_stripname_result
2187aa89044Smrg      return
2197aa89044Smrg    ;;
2207aa89044Smrg    # The next three entries are used to spot a run of precisely
2217aa89044Smrg    # two leading slashes without using negated character classes;
2227aa89044Smrg    # we take advantage of case's first-match behaviour.
2237aa89044Smrg    ///*)
2247aa89044Smrg      # Unusual form of absolute path, do nothing.
2257aa89044Smrg    ;;
2267aa89044Smrg    //*)
2277aa89044Smrg      # Not necessarily an ordinary path; POSIX reserves leading '//'
2287aa89044Smrg      # and for example Cygwin uses it to access remote file shares
2297aa89044Smrg      # over CIFS/SMB, so we conserve a leading double slash if found.
2307aa89044Smrg      func_normal_abspath_altnamespace=/
2317aa89044Smrg    ;;
2327aa89044Smrg    /*)
2337aa89044Smrg      # Absolute path, do nothing.
2347aa89044Smrg    ;;
2357aa89044Smrg    *)
2367aa89044Smrg      # Relative path, prepend $cwd.
2377aa89044Smrg      func_normal_abspath_tpath=`pwd`/$func_normal_abspath_tpath
2387aa89044Smrg    ;;
2397aa89044Smrg  esac
2407aa89044Smrg  # Cancel out all the simple stuff to save iterations.  We also want
2417aa89044Smrg  # the path to end with a slash for ease of parsing, so make sure
2427aa89044Smrg  # there is one (and only one) here.
2437aa89044Smrg  func_normal_abspath_tpath=`$ECHO "$func_normal_abspath_tpath" | $SED \
2447aa89044Smrg        -e "$removedotparts" -e "$collapseslashes" -e "$finalslash"`
2457aa89044Smrg  while :; do
2467aa89044Smrg    # Processed it all yet?
2477aa89044Smrg    if test "$func_normal_abspath_tpath" = / ; then
2487aa89044Smrg      # If we ascended to the root using ".." the result may be empty now.
2497aa89044Smrg      if test -z "$func_normal_abspath_result" ; then
2507aa89044Smrg        func_normal_abspath_result=/
2517aa89044Smrg      fi
2527aa89044Smrg      break
2537aa89044Smrg    fi
2547aa89044Smrg    func_normal_abspath_tcomponent=`$ECHO "$func_normal_abspath_tpath" | $SED \
2557aa89044Smrg        -e "$pathcar"`
2567aa89044Smrg    func_normal_abspath_tpath=`$ECHO "$func_normal_abspath_tpath" | $SED \
2577aa89044Smrg        -e "$pathcdr"`
2587aa89044Smrg    # Figure out what to do with it
2597aa89044Smrg    case $func_normal_abspath_tcomponent in
2607aa89044Smrg      "")
2617aa89044Smrg        # Trailing empty path component, ignore it.
2627aa89044Smrg      ;;
2637aa89044Smrg      ..)
2647aa89044Smrg        # Parent dir; strip last assembled component from result.
2657aa89044Smrg        func_dirname "$func_normal_abspath_result"
2667aa89044Smrg        func_normal_abspath_result=$func_dirname_result
2677aa89044Smrg      ;;
2687aa89044Smrg      *)
2697aa89044Smrg        # Actual path component, append it.
2707aa89044Smrg        func_normal_abspath_result=$func_normal_abspath_result/$func_normal_abspath_tcomponent
2717aa89044Smrg      ;;
2727aa89044Smrg    esac
2737aa89044Smrg  done
2747aa89044Smrg  # Restore leading double-slash if one was found on entry.
2757aa89044Smrg  func_normal_abspath_result=$func_normal_abspath_altnamespace$func_normal_abspath_result
2767aa89044Smrg}
2777aa89044Smrg
2787aa89044Smrg# func_relative_path SRCDIR DSTDIR
2797aa89044Smrg# generates a relative path from SRCDIR to DSTDIR, with a trailing
2807aa89044Smrg# slash if non-empty, suitable for immediately appending a filename
2817aa89044Smrg# without needing to append a separator.
2827aa89044Smrg#             value returned in "$func_relative_path_result"
2837aa89044Smrgfunc_relative_path ()
2847aa89044Smrg{
2857aa89044Smrg  func_relative_path_result=
2867aa89044Smrg  func_normal_abspath "$1"
2877aa89044Smrg  func_relative_path_tlibdir=$func_normal_abspath_result
2887aa89044Smrg  func_normal_abspath "$2"
2897aa89044Smrg  func_relative_path_tbindir=$func_normal_abspath_result
2907aa89044Smrg
2917aa89044Smrg  # Ascend the tree starting from libdir
2927aa89044Smrg  while :; do
2937aa89044Smrg    # check if we have found a prefix of bindir
2947aa89044Smrg    case $func_relative_path_tbindir in
2957aa89044Smrg      $func_relative_path_tlibdir)
2967aa89044Smrg        # found an exact match
2977aa89044Smrg        func_relative_path_tcancelled=
2987aa89044Smrg        break
2997aa89044Smrg        ;;
3007aa89044Smrg      $func_relative_path_tlibdir*)
3017aa89044Smrg        # found a matching prefix
3027aa89044Smrg        func_stripname "$func_relative_path_tlibdir" '' "$func_relative_path_tbindir"
3037aa89044Smrg        func_relative_path_tcancelled=$func_stripname_result
3047aa89044Smrg        if test -z "$func_relative_path_result"; then
3057aa89044Smrg          func_relative_path_result=.
3067aa89044Smrg        fi
3077aa89044Smrg        break
3087aa89044Smrg        ;;
3097aa89044Smrg      *)
3107aa89044Smrg        func_dirname $func_relative_path_tlibdir
3117aa89044Smrg        func_relative_path_tlibdir=${func_dirname_result}
3127aa89044Smrg        if test "x$func_relative_path_tlibdir" = x ; then
3137aa89044Smrg          # Have to descend all the way to the root!
3147aa89044Smrg          func_relative_path_result=../$func_relative_path_result
3157aa89044Smrg          func_relative_path_tcancelled=$func_relative_path_tbindir
3167aa89044Smrg          break
3177aa89044Smrg        fi
3187aa89044Smrg        func_relative_path_result=../$func_relative_path_result
3197aa89044Smrg        ;;
3207aa89044Smrg    esac
3217aa89044Smrg  done
3227aa89044Smrg
3237aa89044Smrg  # Now calculate path; take care to avoid doubling-up slashes.
3247aa89044Smrg  func_stripname '' '/' "$func_relative_path_result"
3257aa89044Smrg  func_relative_path_result=$func_stripname_result
3267aa89044Smrg  func_stripname '/' '/' "$func_relative_path_tcancelled"
3277aa89044Smrg  if test "x$func_stripname_result" != x ; then
3287aa89044Smrg    func_relative_path_result=${func_relative_path_result}/${func_stripname_result}
3297aa89044Smrg  fi
3307aa89044Smrg
3317aa89044Smrg  # Normalisation. If bindir is libdir, return empty string,
3327aa89044Smrg  # else relative path ending with a slash; either way, target
3337aa89044Smrg  # file name can be directly appended.
3347aa89044Smrg  if test ! -z "$func_relative_path_result"; then
3357aa89044Smrg    func_stripname './' '' "$func_relative_path_result/"
3367aa89044Smrg    func_relative_path_result=$func_stripname_result
3377aa89044Smrg  fi
3387aa89044Smrg}
33949dc963fSmrg
34049dc963fSmrg# The name of this program:
34149dc963fSmrgfunc_dirname_and_basename "$progpath"
34249dc963fSmrgprogname=$func_basename_result
34349dc963fSmrg
34449dc963fSmrg# Make sure we have an absolute path for reexecution:
34549dc963fSmrgcase $progpath in
34649dc963fSmrg  [\\/]*|[A-Za-z]:\\*) ;;
34749dc963fSmrg  *[\\/]*)
34849dc963fSmrg     progdir=$func_dirname_result
34949dc963fSmrg     progdir=`cd "$progdir" && pwd`
35049dc963fSmrg     progpath="$progdir/$progname"
35149dc963fSmrg     ;;
35249dc963fSmrg  *)
35349dc963fSmrg     save_IFS="$IFS"
35449dc963fSmrg     IFS=:
35549dc963fSmrg     for progdir in $PATH; do
35649dc963fSmrg       IFS="$save_IFS"
35749dc963fSmrg       test -x "$progdir/$progname" && break
35849dc963fSmrg     done
35949dc963fSmrg     IFS="$save_IFS"
36049dc963fSmrg     test -n "$progdir" || progdir=`pwd`
36149dc963fSmrg     progpath="$progdir/$progname"
36249dc963fSmrg     ;;
36349dc963fSmrgesac
36449dc963fSmrg
36549dc963fSmrg# Sed substitution that helps us do robust quoting.  It backslashifies
36649dc963fSmrg# metacharacters that are still active within double-quoted strings.
36749dc963fSmrgXsed="${SED}"' -e 1s/^X//'
36849dc963fSmrgsed_quote_subst='s/\([`"$\\]\)/\\\1/g'
36949dc963fSmrg
37049dc963fSmrg# Same as above, but do not quote variable references.
37149dc963fSmrgdouble_quote_subst='s/\(["`\\]\)/\\\1/g'
37249dc963fSmrg
37349dc963fSmrg# Re-`\' parameter expansions in output of double_quote_subst that were
37449dc963fSmrg# `\'-ed in input to the same.  If an odd number of `\' preceded a '$'
37549dc963fSmrg# in input to double_quote_subst, that '$' was protected from expansion.
37649dc963fSmrg# Since each input `\' is now two `\'s, look for any number of runs of
37749dc963fSmrg# four `\'s followed by two `\'s and then a '$'.  `\' that '$'.
37849dc963fSmrgbs='\\'
37949dc963fSmrgbs2='\\\\'
38049dc963fSmrgbs4='\\\\\\\\'
38149dc963fSmrgdollar='\$'
38249dc963fSmrgsed_double_backslash="\
38349dc963fSmrg  s/$bs4/&\\
38449dc963fSmrg/g
38549dc963fSmrg  s/^$bs2$dollar/$bs&/
38649dc963fSmrg  s/\\([^$bs]\\)$bs2$dollar/\\1$bs2$bs$dollar/g
38749dc963fSmrg  s/\n//g"
38849dc963fSmrg
38949dc963fSmrg# Standard options:
39049dc963fSmrgopt_dry_run=false
39149dc963fSmrgopt_help=false
39249dc963fSmrgopt_quiet=false
39349dc963fSmrgopt_verbose=false
39449dc963fSmrgopt_warning=:
39549dc963fSmrg
39649dc963fSmrg# func_echo arg...
39749dc963fSmrg# Echo program name prefixed message, along with the current mode
39849dc963fSmrg# name if it has been set yet.
39949dc963fSmrgfunc_echo ()
40049dc963fSmrg{
40149dc963fSmrg    $ECHO "$progname${mode+: }$mode: $*"
40249dc963fSmrg}
40349dc963fSmrg
40449dc963fSmrg# func_verbose arg...
40549dc963fSmrg# Echo program name prefixed message in verbose mode only.
40649dc963fSmrgfunc_verbose ()
40749dc963fSmrg{
40849dc963fSmrg    $opt_verbose && func_echo ${1+"$@"}
40949dc963fSmrg
41049dc963fSmrg    # A bug in bash halts the script if the last line of a function
41149dc963fSmrg    # fails when set -e is in force, so we need another command to
41249dc963fSmrg    # work around that:
41349dc963fSmrg    :
41449dc963fSmrg}
41549dc963fSmrg
4167aa89044Smrg# func_echo_all arg...
4177aa89044Smrg# Invoke $ECHO with all args, space-separated.
4187aa89044Smrgfunc_echo_all ()
4197aa89044Smrg{
4207aa89044Smrg    $ECHO "$*"
4217aa89044Smrg}
4227aa89044Smrg
42349dc963fSmrg# func_error arg...
42449dc963fSmrg# Echo program name prefixed message to standard error.
42549dc963fSmrgfunc_error ()
42649dc963fSmrg{
42749dc963fSmrg    $ECHO "$progname${mode+: }$mode: "${1+"$@"} 1>&2
42849dc963fSmrg}
42949dc963fSmrg
43049dc963fSmrg# func_warning arg...
43149dc963fSmrg# Echo program name prefixed warning message to standard error.
43249dc963fSmrgfunc_warning ()
43349dc963fSmrg{
43449dc963fSmrg    $opt_warning && $ECHO "$progname${mode+: }$mode: warning: "${1+"$@"} 1>&2
43549dc963fSmrg
43649dc963fSmrg    # bash bug again:
43749dc963fSmrg    :
43849dc963fSmrg}
43949dc963fSmrg
44049dc963fSmrg# func_fatal_error arg...
44149dc963fSmrg# Echo program name prefixed message to standard error, and exit.
44249dc963fSmrgfunc_fatal_error ()
44349dc963fSmrg{
44449dc963fSmrg    func_error ${1+"$@"}
44549dc963fSmrg    exit $EXIT_FAILURE
44649dc963fSmrg}
44749dc963fSmrg
44849dc963fSmrg# func_fatal_help arg...
44949dc963fSmrg# Echo program name prefixed message to standard error, followed by
45049dc963fSmrg# a help hint, and exit.
45149dc963fSmrgfunc_fatal_help ()
45249dc963fSmrg{
45349dc963fSmrg    func_error ${1+"$@"}
45449dc963fSmrg    func_fatal_error "$help"
45549dc963fSmrg}
45649dc963fSmrghelp="Try \`$progname --help' for more information."  ## default
45749dc963fSmrg
45849dc963fSmrg
45949dc963fSmrg# func_grep expression filename
46049dc963fSmrg# Check whether EXPRESSION matches any line of FILENAME, without output.
46149dc963fSmrgfunc_grep ()
46249dc963fSmrg{
46349dc963fSmrg    $GREP "$1" "$2" >/dev/null 2>&1
46449dc963fSmrg}
46549dc963fSmrg
46649dc963fSmrg
46749dc963fSmrg# func_mkdir_p directory-path
46849dc963fSmrg# Make sure the entire path to DIRECTORY-PATH is available.
46949dc963fSmrgfunc_mkdir_p ()
47049dc963fSmrg{
47149dc963fSmrg    my_directory_path="$1"
47249dc963fSmrg    my_dir_list=
47349dc963fSmrg
47449dc963fSmrg    if test -n "$my_directory_path" && test "$opt_dry_run" != ":"; then
47549dc963fSmrg
47649dc963fSmrg      # Protect directory names starting with `-'
47749dc963fSmrg      case $my_directory_path in
47849dc963fSmrg        -*) my_directory_path="./$my_directory_path" ;;
47949dc963fSmrg      esac
48049dc963fSmrg
48149dc963fSmrg      # While some portion of DIR does not yet exist...
48249dc963fSmrg      while test ! -d "$my_directory_path"; do
48349dc963fSmrg        # ...make a list in topmost first order.  Use a colon delimited
48449dc963fSmrg	# list incase some portion of path contains whitespace.
48549dc963fSmrg        my_dir_list="$my_directory_path:$my_dir_list"
48649dc963fSmrg
48749dc963fSmrg        # If the last portion added has no slash in it, the list is done
48849dc963fSmrg        case $my_directory_path in */*) ;; *) break ;; esac
48949dc963fSmrg
49049dc963fSmrg        # ...otherwise throw away the child directory and loop
4917aa89044Smrg        my_directory_path=`$ECHO "$my_directory_path" | $SED -e "$dirname"`
49249dc963fSmrg      done
4937aa89044Smrg      my_dir_list=`$ECHO "$my_dir_list" | $SED 's,:*$,,'`
49449dc963fSmrg
49549dc963fSmrg      save_mkdir_p_IFS="$IFS"; IFS=':'
49649dc963fSmrg      for my_dir in $my_dir_list; do
49749dc963fSmrg	IFS="$save_mkdir_p_IFS"
49849dc963fSmrg        # mkdir can fail with a `File exist' error if two processes
49949dc963fSmrg        # try to create one of the directories concurrently.  Don't
50049dc963fSmrg        # stop in that case!
50149dc963fSmrg        $MKDIR "$my_dir" 2>/dev/null || :
50249dc963fSmrg      done
50349dc963fSmrg      IFS="$save_mkdir_p_IFS"
50449dc963fSmrg
50549dc963fSmrg      # Bail out if we (or some other process) failed to create a directory.
50649dc963fSmrg      test -d "$my_directory_path" || \
50749dc963fSmrg        func_fatal_error "Failed to create \`$1'"
50849dc963fSmrg    fi
50949dc963fSmrg}
5104b0ead49Smrg
5114b0ead49Smrg
5124b0ead49Smrg# func_mktempdir [string]
5134b0ead49Smrg# Make a temporary directory that won't clash with other running
5144b0ead49Smrg# libtool processes, and avoids race conditions if possible.  If
5154b0ead49Smrg# given, STRING is the basename for that directory.
5164b0ead49Smrgfunc_mktempdir ()
5174b0ead49Smrg{
5184b0ead49Smrg    my_template="${TMPDIR-/tmp}/${1-$progname}"
5194b0ead49Smrg
52049dc963fSmrg    if test "$opt_dry_run" = ":"; then
5214b0ead49Smrg      # Return a directory name, but don't create it in dry-run mode
5224b0ead49Smrg      my_tmpdir="${my_template}-$$"
5234b0ead49Smrg    else
5244b0ead49Smrg
5254b0ead49Smrg      # If mktemp works, use that first and foremost
5264b0ead49Smrg      my_tmpdir=`mktemp -d "${my_template}-XXXXXXXX" 2>/dev/null`
5274b0ead49Smrg
5284b0ead49Smrg      if test ! -d "$my_tmpdir"; then
52949dc963fSmrg        # Failing that, at least try and use $RANDOM to avoid a race
53049dc963fSmrg        my_tmpdir="${my_template}-${RANDOM-0}$$"
5314b0ead49Smrg
53249dc963fSmrg        save_mktempdir_umask=`umask`
53349dc963fSmrg        umask 0077
53449dc963fSmrg        $MKDIR "$my_tmpdir"
53549dc963fSmrg        umask $save_mktempdir_umask
5364b0ead49Smrg      fi
5374b0ead49Smrg
5384b0ead49Smrg      # If we're not in dry-run mode, bomb out on failure
53949dc963fSmrg      test -d "$my_tmpdir" || \
54049dc963fSmrg        func_fatal_error "cannot create temporary directory \`$my_tmpdir'"
5414b0ead49Smrg    fi
5424b0ead49Smrg
5437aa89044Smrg    $ECHO "$my_tmpdir"
5444b0ead49Smrg}
5454b0ead49Smrg
5464b0ead49Smrg
54749dc963fSmrg# func_quote_for_eval arg
54849dc963fSmrg# Aesthetically quote ARG to be evaled later.
54949dc963fSmrg# This function returns two values: FUNC_QUOTE_FOR_EVAL_RESULT
55049dc963fSmrg# is double-quoted, suitable for a subsequent eval, whereas
55149dc963fSmrg# FUNC_QUOTE_FOR_EVAL_UNQUOTED_RESULT has merely all characters
55249dc963fSmrg# which are still active within double quotes backslashified.
55349dc963fSmrgfunc_quote_for_eval ()
5544b0ead49Smrg{
55549dc963fSmrg    case $1 in
55649dc963fSmrg      *[\\\`\"\$]*)
5577aa89044Smrg	func_quote_for_eval_unquoted_result=`$ECHO "$1" | $SED "$sed_quote_subst"` ;;
55849dc963fSmrg      *)
55949dc963fSmrg        func_quote_for_eval_unquoted_result="$1" ;;
56049dc963fSmrg    esac
56149dc963fSmrg
56249dc963fSmrg    case $func_quote_for_eval_unquoted_result in
56349dc963fSmrg      # Double-quote args containing shell metacharacters to delay
56449dc963fSmrg      # word splitting, command substitution and and variable
56549dc963fSmrg      # expansion for a subsequent eval.
56649dc963fSmrg      # Many Bourne shells cannot handle close brackets correctly
56749dc963fSmrg      # in scan sets, so we specify it separately.
56849dc963fSmrg      *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \	]*|*]*|"")
56949dc963fSmrg        func_quote_for_eval_result="\"$func_quote_for_eval_unquoted_result\""
57049dc963fSmrg        ;;
57149dc963fSmrg      *)
57249dc963fSmrg        func_quote_for_eval_result="$func_quote_for_eval_unquoted_result"
5734b0ead49Smrg    esac
5744b0ead49Smrg}
5754b0ead49Smrg
5764b0ead49Smrg
57749dc963fSmrg# func_quote_for_expand arg
57849dc963fSmrg# Aesthetically quote ARG to be evaled later; same as above,
57949dc963fSmrg# but do not quote variable references.
58049dc963fSmrgfunc_quote_for_expand ()
5814b0ead49Smrg{
58249dc963fSmrg    case $1 in
58349dc963fSmrg      *[\\\`\"]*)
5847aa89044Smrg	my_arg=`$ECHO "$1" | $SED \
58549dc963fSmrg	    -e "$double_quote_subst" -e "$sed_double_backslash"` ;;
5864b0ead49Smrg      *)
58749dc963fSmrg        my_arg="$1" ;;
58849dc963fSmrg    esac
58949dc963fSmrg
59049dc963fSmrg    case $my_arg in
59149dc963fSmrg      # Double-quote args containing shell metacharacters to delay
59249dc963fSmrg      # word splitting and command substitution for a subsequent eval.
59349dc963fSmrg      # Many Bourne shells cannot handle close brackets correctly
59449dc963fSmrg      # in scan sets, so we specify it separately.
59549dc963fSmrg      *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \	]*|*]*|"")
59649dc963fSmrg        my_arg="\"$my_arg\""
59749dc963fSmrg        ;;
59849dc963fSmrg    esac
59949dc963fSmrg
60049dc963fSmrg    func_quote_for_expand_result="$my_arg"
6014b0ead49Smrg}
6024b0ead49Smrg
6034b0ead49Smrg
60449dc963fSmrg# func_show_eval cmd [fail_exp]
60549dc963fSmrg# Unless opt_silent is true, then output CMD.  Then, if opt_dryrun is
60649dc963fSmrg# not true, evaluate CMD.  If the evaluation of CMD fails, and FAIL_EXP
60749dc963fSmrg# is given, then evaluate it.
60849dc963fSmrgfunc_show_eval ()
6094b0ead49Smrg{
61049dc963fSmrg    my_cmd="$1"
61149dc963fSmrg    my_fail_exp="${2-:}"
6124b0ead49Smrg
61349dc963fSmrg    ${opt_silent-false} || {
61449dc963fSmrg      func_quote_for_expand "$my_cmd"
61549dc963fSmrg      eval "func_echo $func_quote_for_expand_result"
61649dc963fSmrg    }
61749dc963fSmrg
61849dc963fSmrg    if ${opt_dry_run-false}; then :; else
61949dc963fSmrg      eval "$my_cmd"
62049dc963fSmrg      my_status=$?
62149dc963fSmrg      if test "$my_status" -eq 0; then :; else
62249dc963fSmrg	eval "(exit $my_status); $my_fail_exp"
62349dc963fSmrg      fi
6244b0ead49Smrg    fi
6254b0ead49Smrg}
6264b0ead49Smrg
62749dc963fSmrg
62849dc963fSmrg# func_show_eval_locale cmd [fail_exp]
62949dc963fSmrg# Unless opt_silent is true, then output CMD.  Then, if opt_dryrun is
63049dc963fSmrg# not true, evaluate CMD.  If the evaluation of CMD fails, and FAIL_EXP
63149dc963fSmrg# is given, then evaluate it.  Use the saved locale for evaluation.
63249dc963fSmrgfunc_show_eval_locale ()
6334b0ead49Smrg{
63449dc963fSmrg    my_cmd="$1"
63549dc963fSmrg    my_fail_exp="${2-:}"
63649dc963fSmrg
63749dc963fSmrg    ${opt_silent-false} || {
63849dc963fSmrg      func_quote_for_expand "$my_cmd"
63949dc963fSmrg      eval "func_echo $func_quote_for_expand_result"
64049dc963fSmrg    }
64149dc963fSmrg
64249dc963fSmrg    if ${opt_dry_run-false}; then :; else
64349dc963fSmrg      eval "$lt_user_locale
64449dc963fSmrg	    $my_cmd"
64549dc963fSmrg      my_status=$?
64649dc963fSmrg      eval "$lt_safe_locale"
64749dc963fSmrg      if test "$my_status" -eq 0; then :; else
64849dc963fSmrg	eval "(exit $my_status); $my_fail_exp"
64949dc963fSmrg      fi
6504b0ead49Smrg    fi
65149dc963fSmrg}
6524b0ead49Smrg
6534b0ead49Smrg
65449dc963fSmrg# func_version
65549dc963fSmrg# Echo version message to standard output and exit.
65649dc963fSmrgfunc_version ()
65749dc963fSmrg{
6587aa89044Smrg    $SED -n '/(C)/!b go
6597aa89044Smrg	:more
6607aa89044Smrg	/\./!{
6617aa89044Smrg	  N
6627aa89044Smrg	  s/\n# / /
6637aa89044Smrg	  b more
6647aa89044Smrg	}
6657aa89044Smrg	:go
6667aa89044Smrg	/^# '$PROGRAM' (GNU /,/# warranty; / {
66749dc963fSmrg        s/^# //
66849dc963fSmrg	s/^# *$//
66949dc963fSmrg        s/\((C)\)[ 0-9,-]*\( [1-9][0-9]*\)/\1\2/
67049dc963fSmrg        p
67149dc963fSmrg     }' < "$progpath"
67249dc963fSmrg     exit $?
67349dc963fSmrg}
67449dc963fSmrg
67549dc963fSmrg# func_usage
67649dc963fSmrg# Echo short help message to standard output and exit.
67749dc963fSmrgfunc_usage ()
67849dc963fSmrg{
6797aa89044Smrg    $SED -n '/^# Usage:/,/^#  *.*--help/ {
68049dc963fSmrg        s/^# //
68149dc963fSmrg	s/^# *$//
68249dc963fSmrg	s/\$progname/'$progname'/
68349dc963fSmrg	p
68449dc963fSmrg    }' < "$progpath"
6857aa89044Smrg    echo
68649dc963fSmrg    $ECHO "run \`$progname --help | more' for full usage"
68749dc963fSmrg    exit $?
68849dc963fSmrg}
68949dc963fSmrg
6907aa89044Smrg# func_help [NOEXIT]
6917aa89044Smrg# Echo long help message to standard output and exit,
6927aa89044Smrg# unless 'noexit' is passed as argument.
69349dc963fSmrgfunc_help ()
69449dc963fSmrg{
69549dc963fSmrg    $SED -n '/^# Usage:/,/# Report bugs to/ {
69649dc963fSmrg        s/^# //
69749dc963fSmrg	s/^# *$//
69849dc963fSmrg	s*\$progname*'$progname'*
69949dc963fSmrg	s*\$host*'"$host"'*
70049dc963fSmrg	s*\$SHELL*'"$SHELL"'*
70149dc963fSmrg	s*\$LTCC*'"$LTCC"'*
70249dc963fSmrg	s*\$LTCFLAGS*'"$LTCFLAGS"'*
70349dc963fSmrg	s*\$LD*'"$LD"'*
70449dc963fSmrg	s/\$with_gnu_ld/'"$with_gnu_ld"'/
70549dc963fSmrg	s/\$automake_version/'"`(automake --version) 2>/dev/null |$SED 1q`"'/
70649dc963fSmrg	s/\$autoconf_version/'"`(autoconf --version) 2>/dev/null |$SED 1q`"'/
70749dc963fSmrg	p
70849dc963fSmrg     }' < "$progpath"
7097aa89044Smrg    ret=$?
7107aa89044Smrg    if test -z "$1"; then
7117aa89044Smrg      exit $ret
7127aa89044Smrg    fi
71349dc963fSmrg}
71449dc963fSmrg
71549dc963fSmrg# func_missing_arg argname
71649dc963fSmrg# Echo program name prefixed message to standard error and set global
71749dc963fSmrg# exit_cmd.
71849dc963fSmrgfunc_missing_arg ()
71949dc963fSmrg{
7207aa89044Smrg    func_error "missing argument for $1."
72149dc963fSmrg    exit_cmd=exit
7224b0ead49Smrg}
7234b0ead49Smrg
72449dc963fSmrgexit_cmd=:
7254b0ead49Smrg
7264b0ead49Smrg
72749dc963fSmrg
72849dc963fSmrg
72949dc963fSmrg
7304b0ead49Smrg
73149dc963fSmrgmagic="%%%MAGIC variable%%%"
73249dc963fSmrgmagic_exe="%%%MAGIC EXE variable%%%"
7334b0ead49Smrg
73449dc963fSmrg# Global variables.
73549dc963fSmrg# $mode is unset
73649dc963fSmrgnonopt=
73749dc963fSmrgexecute_dlfiles=
73849dc963fSmrgpreserve_args=
73949dc963fSmrglo2o="s/\\.lo\$/.${objext}/"
74049dc963fSmrgo2lo="s/\\.${objext}\$/.lo/"
74149dc963fSmrgextracted_archives=
74249dc963fSmrgextracted_serial=0
7434b0ead49Smrg
74449dc963fSmrgopt_dry_run=false
74549dc963fSmrgopt_duplicate_deps=false
74649dc963fSmrgopt_silent=false
74749dc963fSmrgopt_debug=:
7484b0ead49Smrg
74949dc963fSmrg# If this variable is set in any of the actions, the command in it
75049dc963fSmrg# will be execed at the end.  This prevents here-documents from being
75149dc963fSmrg# left over by shells.
75249dc963fSmrgexec_cmd=
75349dc963fSmrg
75449dc963fSmrg# func_fatal_configuration arg...
75549dc963fSmrg# Echo program name prefixed message to standard error, followed by
75649dc963fSmrg# a configuration failure hint, and exit.
75749dc963fSmrgfunc_fatal_configuration ()
75849dc963fSmrg{
75949dc963fSmrg    func_error ${1+"$@"}
76049dc963fSmrg    func_error "See the $PACKAGE documentation for more information."
76149dc963fSmrg    func_fatal_error "Fatal configuration error."
76249dc963fSmrg}
7634b0ead49Smrg
76452b01e16Smrg
76549dc963fSmrg# func_config
76649dc963fSmrg# Display the configuration for all the tags in this script.
76749dc963fSmrgfunc_config ()
76849dc963fSmrg{
76949dc963fSmrg    re_begincf='^# ### BEGIN LIBTOOL'
77049dc963fSmrg    re_endcf='^# ### END LIBTOOL'
77149dc963fSmrg
77249dc963fSmrg    # Default configuration.
77349dc963fSmrg    $SED "1,/$re_begincf CONFIG/d;/$re_endcf CONFIG/,\$d" < "$progpath"
7744b0ead49Smrg
7754b0ead49Smrg    # Now print the configurations for the tags.
7764b0ead49Smrg    for tagname in $taglist; do
77749dc963fSmrg      $SED -n "/$re_begincf TAG CONFIG: $tagname\$/,/$re_endcf TAG CONFIG: $tagname\$/p" < "$progpath"
7784b0ead49Smrg    done
7794b0ead49Smrg
78049dc963fSmrg    exit $?
78149dc963fSmrg}
7824b0ead49Smrg
78349dc963fSmrg# func_features
78449dc963fSmrg# Display the features supported by this script.
78549dc963fSmrgfunc_features ()
78649dc963fSmrg{
7877aa89044Smrg    echo "host: $host"
7884b0ead49Smrg    if test "$build_libtool_libs" = yes; then
7897aa89044Smrg      echo "enable shared libraries"
7904b0ead49Smrg    else
7917aa89044Smrg      echo "disable shared libraries"
7924b0ead49Smrg    fi
7934b0ead49Smrg    if test "$build_old_libs" = yes; then
7947aa89044Smrg      echo "enable static libraries"
7954b0ead49Smrg    else
7967aa89044Smrg      echo "disable static libraries"
7974b0ead49Smrg    fi
79849dc963fSmrg
7994b0ead49Smrg    exit $?
80049dc963fSmrg}
8014b0ead49Smrg
80249dc963fSmrg# func_enable_tag tagname
80349dc963fSmrg# Verify that TAGNAME is valid, and either flag an error and exit, or
80449dc963fSmrg# enable the TAGNAME tag.  We also add TAGNAME to the global $taglist
80549dc963fSmrg# variable here.
80649dc963fSmrgfunc_enable_tag ()
80749dc963fSmrg{
80849dc963fSmrg  # Global variable:
80949dc963fSmrg  tagname="$1"
8104b0ead49Smrg
81149dc963fSmrg  re_begincf="^# ### BEGIN LIBTOOL TAG CONFIG: $tagname\$"
81249dc963fSmrg  re_endcf="^# ### END LIBTOOL TAG CONFIG: $tagname\$"
81349dc963fSmrg  sed_extractcf="/$re_begincf/,/$re_endcf/p"
8144b0ead49Smrg
81549dc963fSmrg  # Validate tagname.
81649dc963fSmrg  case $tagname in
81749dc963fSmrg    *[!-_A-Za-z0-9,/]*)
81849dc963fSmrg      func_fatal_error "invalid tag name: $tagname"
81949dc963fSmrg      ;;
82049dc963fSmrg  esac
8214b0ead49Smrg
82249dc963fSmrg  # Don't test for the "default" C tag, as we know it's
82349dc963fSmrg  # there but not specially marked.
82449dc963fSmrg  case $tagname in
82549dc963fSmrg    CC) ;;
82649dc963fSmrg    *)
82749dc963fSmrg      if $GREP "$re_begincf" "$progpath" >/dev/null 2>&1; then
82849dc963fSmrg	taglist="$taglist $tagname"
82949dc963fSmrg
83049dc963fSmrg	# Evaluate the configuration.  Be careful to quote the path
83149dc963fSmrg	# and the sed script, to avoid splitting on whitespace, but
83249dc963fSmrg	# also don't use non-portable quotes within backquotes within
83349dc963fSmrg	# quotes we have to do it in 2 steps:
83449dc963fSmrg	extractedcf=`$SED -n -e "$sed_extractcf" < "$progpath"`
83549dc963fSmrg	eval "$extractedcf"
83649dc963fSmrg      else
83749dc963fSmrg	func_error "ignoring unknown tag $tagname"
83849dc963fSmrg      fi
83949dc963fSmrg      ;;
84049dc963fSmrg  esac
84149dc963fSmrg}
84249dc963fSmrg
84349dc963fSmrg# Parse options once, thoroughly.  This comes as soon as possible in
84449dc963fSmrg# the script to make things like `libtool --version' happen quickly.
84549dc963fSmrg{
8464b0ead49Smrg
84749dc963fSmrg  # Shorthand for --mode=foo, only valid as the first argument
84849dc963fSmrg  case $1 in
84949dc963fSmrg  clean|clea|cle|cl)
85049dc963fSmrg    shift; set dummy --mode clean ${1+"$@"}; shift
8514b0ead49Smrg    ;;
85249dc963fSmrg  compile|compil|compi|comp|com|co|c)
85349dc963fSmrg    shift; set dummy --mode compile ${1+"$@"}; shift
8544b0ead49Smrg    ;;
85549dc963fSmrg  execute|execut|execu|exec|exe|ex|e)
85649dc963fSmrg    shift; set dummy --mode execute ${1+"$@"}; shift
8574b0ead49Smrg    ;;
85849dc963fSmrg  finish|finis|fini|fin|fi|f)
85949dc963fSmrg    shift; set dummy --mode finish ${1+"$@"}; shift
8604b0ead49Smrg    ;;
86149dc963fSmrg  install|instal|insta|inst|ins|in|i)
86249dc963fSmrg    shift; set dummy --mode install ${1+"$@"}; shift
86349dc963fSmrg    ;;
86449dc963fSmrg  link|lin|li|l)
86549dc963fSmrg    shift; set dummy --mode link ${1+"$@"}; shift
86649dc963fSmrg    ;;
86749dc963fSmrg  uninstall|uninstal|uninsta|uninst|unins|unin|uni|un|u)
86849dc963fSmrg    shift; set dummy --mode uninstall ${1+"$@"}; shift
8694b0ead49Smrg    ;;
8704b0ead49Smrg  esac
8714b0ead49Smrg
87249dc963fSmrg  # Parse non-mode specific arguments:
87349dc963fSmrg  while test "$#" -gt 0; do
87449dc963fSmrg    opt="$1"
87549dc963fSmrg    shift
8764b0ead49Smrg
87749dc963fSmrg    case $opt in
87849dc963fSmrg      --config)		func_config					;;
8794b0ead49Smrg
88049dc963fSmrg      --debug)		preserve_args="$preserve_args $opt"
88149dc963fSmrg			func_echo "enabling shell trace mode"
88249dc963fSmrg			opt_debug='set -x'
88349dc963fSmrg			$opt_debug
88449dc963fSmrg			;;
8854b0ead49Smrg
88649dc963fSmrg      -dlopen)		test "$#" -eq 0 && func_missing_arg "$opt" && break
88749dc963fSmrg			execute_dlfiles="$execute_dlfiles $1"
88849dc963fSmrg			shift
88949dc963fSmrg			;;
8904b0ead49Smrg
89149dc963fSmrg      --dry-run | -n)	opt_dry_run=:					;;
89249dc963fSmrg      --features)       func_features					;;
89349dc963fSmrg      --finish)		mode="finish"					;;
89449dc963fSmrg
89549dc963fSmrg      --mode)		test "$#" -eq 0 && func_missing_arg "$opt" && break
89649dc963fSmrg			case $1 in
89749dc963fSmrg			  # Valid mode arguments:
89849dc963fSmrg			  clean)	;;
89949dc963fSmrg			  compile)	;;
90049dc963fSmrg			  execute)	;;
90149dc963fSmrg			  finish)	;;
90249dc963fSmrg			  install)	;;
90349dc963fSmrg			  link)		;;
90449dc963fSmrg			  relink)	;;
90549dc963fSmrg			  uninstall)	;;
90649dc963fSmrg
90749dc963fSmrg			  # Catch anything else as an error
90849dc963fSmrg			  *) func_error "invalid argument for $opt"
90949dc963fSmrg			     exit_cmd=exit
91049dc963fSmrg			     break
91149dc963fSmrg			     ;;
91249dc963fSmrg		        esac
91349dc963fSmrg
91449dc963fSmrg			mode="$1"
91549dc963fSmrg			shift
91649dc963fSmrg			;;
91749dc963fSmrg
91849dc963fSmrg      --preserve-dup-deps)
91949dc963fSmrg			opt_duplicate_deps=:				;;
92049dc963fSmrg
92149dc963fSmrg      --quiet|--silent)	preserve_args="$preserve_args $opt"
92249dc963fSmrg			opt_silent=:
9237aa89044Smrg			opt_verbose=false
9247aa89044Smrg			;;
9257aa89044Smrg
9267aa89044Smrg      --no-quiet|--no-silent)
9277aa89044Smrg			preserve_args="$preserve_args $opt"
9287aa89044Smrg			opt_silent=false
92949dc963fSmrg			;;
93049dc963fSmrg
93149dc963fSmrg      --verbose| -v)	preserve_args="$preserve_args $opt"
93249dc963fSmrg			opt_silent=false
9337aa89044Smrg			opt_verbose=:
9347aa89044Smrg			;;
9357aa89044Smrg
9367aa89044Smrg      --no-verbose)	preserve_args="$preserve_args $opt"
9377aa89044Smrg			opt_verbose=false
93849dc963fSmrg			;;
93949dc963fSmrg
94049dc963fSmrg      --tag)		test "$#" -eq 0 && func_missing_arg "$opt" && break
94149dc963fSmrg			preserve_args="$preserve_args $opt $1"
94249dc963fSmrg			func_enable_tag "$1"	# tagname is set here
94349dc963fSmrg			shift
94449dc963fSmrg			;;
94549dc963fSmrg
94649dc963fSmrg      # Separate optargs to long options:
94749dc963fSmrg      -dlopen=*|--mode=*|--tag=*)
94849dc963fSmrg			func_opt_split "$opt"
94949dc963fSmrg			set dummy "$func_opt_split_opt" "$func_opt_split_arg" ${1+"$@"}
95049dc963fSmrg			shift
95149dc963fSmrg			;;
95249dc963fSmrg
95349dc963fSmrg      -\?|-h)		func_usage					;;
95449dc963fSmrg      --help)		opt_help=:					;;
9557aa89044Smrg      --help-all)	opt_help=': help-all'				;;
95649dc963fSmrg      --version)	func_version					;;
95749dc963fSmrg
95849dc963fSmrg      -*)		func_fatal_help "unrecognized option \`$opt'"	;;
95949dc963fSmrg
96049dc963fSmrg      *)		nonopt="$opt"
96149dc963fSmrg			break
96249dc963fSmrg			;;
96349dc963fSmrg    esac
96449dc963fSmrg  done
96549dc963fSmrg
96649dc963fSmrg
96749dc963fSmrg  case $host in
96849dc963fSmrg    *cygwin* | *mingw* | *pw32* | *cegcc*)
96949dc963fSmrg      # don't eliminate duplications in $postdeps and $predeps
97049dc963fSmrg      opt_duplicate_compiler_generated_deps=:
9714b0ead49Smrg      ;;
9724b0ead49Smrg    *)
97349dc963fSmrg      opt_duplicate_compiler_generated_deps=$opt_duplicate_deps
97449dc963fSmrg      ;;
97549dc963fSmrg  esac
9764b0ead49Smrg
97749dc963fSmrg  # Having warned about all mis-specified options, bail out if
97849dc963fSmrg  # anything was wrong.
97949dc963fSmrg  $exit_cmd $EXIT_FAILURE
98049dc963fSmrg}
98149dc963fSmrg
98249dc963fSmrg# func_check_version_match
98349dc963fSmrg# Ensure that we are using m4 macros, and libtool script from the same
98449dc963fSmrg# release of libtool.
98549dc963fSmrgfunc_check_version_match ()
98649dc963fSmrg{
98749dc963fSmrg  if test "$package_revision" != "$macro_revision"; then
98849dc963fSmrg    if test "$VERSION" != "$macro_version"; then
98949dc963fSmrg      if test -z "$macro_version"; then
99049dc963fSmrg        cat >&2 <<_LT_EOF
99149dc963fSmrg$progname: Version mismatch error.  This is $PACKAGE $VERSION, but the
99249dc963fSmrg$progname: definition of this LT_INIT comes from an older release.
99349dc963fSmrg$progname: You should recreate aclocal.m4 with macros from $PACKAGE $VERSION
99449dc963fSmrg$progname: and run autoconf again.
99549dc963fSmrg_LT_EOF
99649dc963fSmrg      else
99749dc963fSmrg        cat >&2 <<_LT_EOF
99849dc963fSmrg$progname: Version mismatch error.  This is $PACKAGE $VERSION, but the
99949dc963fSmrg$progname: definition of this LT_INIT comes from $PACKAGE $macro_version.
100049dc963fSmrg$progname: You should recreate aclocal.m4 with macros from $PACKAGE $VERSION
100149dc963fSmrg$progname: and run autoconf again.
100249dc963fSmrg_LT_EOF
10034b0ead49Smrg      fi
100449dc963fSmrg    else
100549dc963fSmrg      cat >&2 <<_LT_EOF
100649dc963fSmrg$progname: Version mismatch error.  This is $PACKAGE $VERSION, revision $package_revision,
100749dc963fSmrg$progname: but the definition of this LT_INIT comes from revision $macro_revision.
100849dc963fSmrg$progname: You should recreate aclocal.m4 with macros from revision $package_revision
100949dc963fSmrg$progname: of $PACKAGE $VERSION and run autoconf again.
101049dc963fSmrg_LT_EOF
101149dc963fSmrg    fi
101249dc963fSmrg
101349dc963fSmrg    exit $EXIT_MISMATCH
101449dc963fSmrg  fi
101549dc963fSmrg}
101649dc963fSmrg
101749dc963fSmrg
101849dc963fSmrg## ----------- ##
101949dc963fSmrg##    Main.    ##
102049dc963fSmrg## ----------- ##
102149dc963fSmrg
102249dc963fSmrg$opt_help || {
102349dc963fSmrg  # Sanity checks first:
102449dc963fSmrg  func_check_version_match
102549dc963fSmrg
102649dc963fSmrg  if test "$build_libtool_libs" != yes && test "$build_old_libs" != yes; then
102749dc963fSmrg    func_fatal_configuration "not configured to build any kind of library"
10284b0ead49Smrg  fi
10294b0ead49Smrg
103049dc963fSmrg  test -z "$mode" && func_fatal_error "error: you must specify a MODE."
103149dc963fSmrg
103249dc963fSmrg
103349dc963fSmrg  # Darwin sucks
103449dc963fSmrg  eval std_shrext=\"$shrext_cmds\"
103549dc963fSmrg
103649dc963fSmrg
10374b0ead49Smrg  # Only execute mode is allowed to have -dlopen flags.
10384b0ead49Smrg  if test -n "$execute_dlfiles" && test "$mode" != execute; then
103949dc963fSmrg    func_error "unrecognized option \`-dlopen'"
104049dc963fSmrg    $ECHO "$help" 1>&2
10414b0ead49Smrg    exit $EXIT_FAILURE
10424b0ead49Smrg  fi
10434b0ead49Smrg
10444b0ead49Smrg  # Change the help message to a mode-specific one.
10454b0ead49Smrg  generic_help="$help"
104649dc963fSmrg  help="Try \`$progname --help --mode=$mode' for more information."
104749dc963fSmrg}
10484b0ead49Smrg
10494b0ead49Smrg
105049dc963fSmrg# func_lalib_p file
105149dc963fSmrg# True iff FILE is a libtool `.la' library or `.lo' object file.
105249dc963fSmrg# This function is only a basic sanity check; it will hardly flush out
105349dc963fSmrg# determined imposters.
105449dc963fSmrgfunc_lalib_p ()
105549dc963fSmrg{
105649dc963fSmrg    test -f "$1" &&
105749dc963fSmrg      $SED -e 4q "$1" 2>/dev/null \
105849dc963fSmrg        | $GREP "^# Generated by .*$PACKAGE" > /dev/null 2>&1
105949dc963fSmrg}
10604b0ead49Smrg
106149dc963fSmrg# func_lalib_unsafe_p file
106249dc963fSmrg# True iff FILE is a libtool `.la' library or `.lo' object file.
106349dc963fSmrg# This function implements the same check as func_lalib_p without
106449dc963fSmrg# resorting to external programs.  To this end, it redirects stdin and
106549dc963fSmrg# closes it afterwards, without saving the original file descriptor.
106649dc963fSmrg# As a safety measure, use it only where a negative result would be
106749dc963fSmrg# fatal anyway.  Works if `file' does not exist.
106849dc963fSmrgfunc_lalib_unsafe_p ()
106949dc963fSmrg{
107049dc963fSmrg    lalib_p=no
107149dc963fSmrg    if test -f "$1" && test -r "$1" && exec 5<&0 <"$1"; then
107249dc963fSmrg	for lalib_p_l in 1 2 3 4
107349dc963fSmrg	do
107449dc963fSmrg	    read lalib_p_line
107549dc963fSmrg	    case "$lalib_p_line" in
107649dc963fSmrg		\#\ Generated\ by\ *$PACKAGE* ) lalib_p=yes; break;;
107749dc963fSmrg	    esac
107849dc963fSmrg	done
107949dc963fSmrg	exec 0<&5 5<&-
108049dc963fSmrg    fi
108149dc963fSmrg    test "$lalib_p" = yes
108249dc963fSmrg}
10834b0ead49Smrg
108449dc963fSmrg# func_ltwrapper_script_p file
108549dc963fSmrg# True iff FILE is a libtool wrapper script
108649dc963fSmrg# This function is only a basic sanity check; it will hardly flush out
108749dc963fSmrg# determined imposters.
108849dc963fSmrgfunc_ltwrapper_script_p ()
108949dc963fSmrg{
109049dc963fSmrg    func_lalib_p "$1"
109149dc963fSmrg}
10924b0ead49Smrg
109349dc963fSmrg# func_ltwrapper_executable_p file
109449dc963fSmrg# True iff FILE is a libtool wrapper executable
109549dc963fSmrg# This function is only a basic sanity check; it will hardly flush out
109649dc963fSmrg# determined imposters.
109749dc963fSmrgfunc_ltwrapper_executable_p ()
109849dc963fSmrg{
109949dc963fSmrg    func_ltwrapper_exec_suffix=
110049dc963fSmrg    case $1 in
110149dc963fSmrg    *.exe) ;;
110249dc963fSmrg    *) func_ltwrapper_exec_suffix=.exe ;;
110349dc963fSmrg    esac
110449dc963fSmrg    $GREP "$magic_exe" "$1$func_ltwrapper_exec_suffix" >/dev/null 2>&1
110549dc963fSmrg}
11064b0ead49Smrg
110749dc963fSmrg# func_ltwrapper_scriptname file
110849dc963fSmrg# Assumes file is an ltwrapper_executable
110949dc963fSmrg# uses $file to determine the appropriate filename for a
111049dc963fSmrg# temporary ltwrapper_script.
111149dc963fSmrgfunc_ltwrapper_scriptname ()
111249dc963fSmrg{
111349dc963fSmrg    func_ltwrapper_scriptname_result=""
111449dc963fSmrg    if func_ltwrapper_executable_p "$1"; then
111549dc963fSmrg	func_dirname_and_basename "$1" "" "."
111649dc963fSmrg	func_stripname '' '.exe' "$func_basename_result"
111749dc963fSmrg	func_ltwrapper_scriptname_result="$func_dirname_result/$objdir/${func_stripname_result}_ltshwrapper"
111849dc963fSmrg    fi
111949dc963fSmrg}
112049dc963fSmrg
112149dc963fSmrg# func_ltwrapper_p file
112249dc963fSmrg# True iff FILE is a libtool wrapper script or wrapper executable
112349dc963fSmrg# This function is only a basic sanity check; it will hardly flush out
112449dc963fSmrg# determined imposters.
112549dc963fSmrgfunc_ltwrapper_p ()
112649dc963fSmrg{
112749dc963fSmrg    func_ltwrapper_script_p "$1" || func_ltwrapper_executable_p "$1"
112849dc963fSmrg}
112949dc963fSmrg
113049dc963fSmrg
113149dc963fSmrg# func_execute_cmds commands fail_cmd
113249dc963fSmrg# Execute tilde-delimited COMMANDS.
113349dc963fSmrg# If FAIL_CMD is given, eval that upon failure.
113449dc963fSmrg# FAIL_CMD may read-access the current command in variable CMD!
113549dc963fSmrgfunc_execute_cmds ()
113649dc963fSmrg{
113749dc963fSmrg    $opt_debug
113849dc963fSmrg    save_ifs=$IFS; IFS='~'
113949dc963fSmrg    for cmd in $1; do
114049dc963fSmrg      IFS=$save_ifs
114149dc963fSmrg      eval cmd=\"$cmd\"
114249dc963fSmrg      func_show_eval "$cmd" "${2-:}"
114349dc963fSmrg    done
114449dc963fSmrg    IFS=$save_ifs
114549dc963fSmrg}
114649dc963fSmrg
114749dc963fSmrg
114849dc963fSmrg# func_source file
114949dc963fSmrg# Source FILE, adding directory component if necessary.
115049dc963fSmrg# Note that it is not necessary on cygwin/mingw to append a dot to
115149dc963fSmrg# FILE even if both FILE and FILE.exe exist: automatic-append-.exe
115249dc963fSmrg# behavior happens only for exec(3), not for open(2)!  Also, sourcing
115349dc963fSmrg# `FILE.' does not work on cygwin managed mounts.
115449dc963fSmrgfunc_source ()
115549dc963fSmrg{
115649dc963fSmrg    $opt_debug
115749dc963fSmrg    case $1 in
115849dc963fSmrg    */* | *\\*)	. "$1" ;;
115949dc963fSmrg    *)		. "./$1" ;;
116049dc963fSmrg    esac
116149dc963fSmrg}
116249dc963fSmrg
116349dc963fSmrg
116449dc963fSmrg# func_infer_tag arg
116549dc963fSmrg# Infer tagged configuration to use if any are available and
116649dc963fSmrg# if one wasn't chosen via the "--tag" command line option.
116749dc963fSmrg# Only attempt this if the compiler in the base compile
116849dc963fSmrg# command doesn't match the default compiler.
116949dc963fSmrg# arg is usually of the form 'gcc ...'
117049dc963fSmrgfunc_infer_tag ()
117149dc963fSmrg{
117249dc963fSmrg    $opt_debug
117349dc963fSmrg    if test -n "$available_tags" && test -z "$tagname"; then
117449dc963fSmrg      CC_quoted=
117549dc963fSmrg      for arg in $CC; do
117649dc963fSmrg        func_quote_for_eval "$arg"
117749dc963fSmrg	CC_quoted="$CC_quoted $func_quote_for_eval_result"
117849dc963fSmrg      done
11797aa89044Smrg      CC_expanded=`func_echo_all $CC`
11807aa89044Smrg      CC_quoted_expanded=`func_echo_all $CC_quoted`
118149dc963fSmrg      case $@ in
118249dc963fSmrg      # Blanks in the command may have been stripped by the calling shell,
118349dc963fSmrg      # but not from the CC environment variable when configure was run.
11847aa89044Smrg      " $CC "* | "$CC "* | " $CC_expanded "* | "$CC_expanded "* | \
11857aa89044Smrg      " $CC_quoted"* | "$CC_quoted "* | " $CC_quoted_expanded "* | "$CC_quoted_expanded "*) ;;
118649dc963fSmrg      # Blanks at the start of $base_compile will cause this to fail
118749dc963fSmrg      # if we don't check for them as well.
118849dc963fSmrg      *)
118949dc963fSmrg	for z in $available_tags; do
119049dc963fSmrg	  if $GREP "^# ### BEGIN LIBTOOL TAG CONFIG: $z$" < "$progpath" > /dev/null; then
119149dc963fSmrg	    # Evaluate the configuration.
119249dc963fSmrg	    eval "`${SED} -n -e '/^# ### BEGIN LIBTOOL TAG CONFIG: '$z'$/,/^# ### END LIBTOOL TAG CONFIG: '$z'$/p' < $progpath`"
119349dc963fSmrg	    CC_quoted=
119449dc963fSmrg	    for arg in $CC; do
119549dc963fSmrg	      # Double-quote args containing other shell metacharacters.
119649dc963fSmrg	      func_quote_for_eval "$arg"
119749dc963fSmrg	      CC_quoted="$CC_quoted $func_quote_for_eval_result"
119849dc963fSmrg	    done
11997aa89044Smrg	    CC_expanded=`func_echo_all $CC`
12007aa89044Smrg	    CC_quoted_expanded=`func_echo_all $CC_quoted`
120149dc963fSmrg	    case "$@ " in
12027aa89044Smrg	    " $CC "* | "$CC "* | " $CC_expanded "* | "$CC_expanded "* | \
12037aa89044Smrg	    " $CC_quoted"* | "$CC_quoted "* | " $CC_quoted_expanded "* | "$CC_quoted_expanded "*)
120449dc963fSmrg	      # The compiler in the base compile command matches
120549dc963fSmrg	      # the one in the tagged configuration.
120649dc963fSmrg	      # Assume this is the tagged configuration we want.
120749dc963fSmrg	      tagname=$z
120849dc963fSmrg	      break
120949dc963fSmrg	      ;;
121049dc963fSmrg	    esac
121149dc963fSmrg	  fi
121249dc963fSmrg	done
121349dc963fSmrg	# If $tagname still isn't set, then no tagged configuration
121449dc963fSmrg	# was found and let the user know that the "--tag" command
121549dc963fSmrg	# line option must be used.
121649dc963fSmrg	if test -z "$tagname"; then
121749dc963fSmrg	  func_echo "unable to infer tagged configuration"
121849dc963fSmrg	  func_fatal_error "specify a tag with \`--tag'"
121949dc963fSmrg#	else
122049dc963fSmrg#	  func_verbose "using $tagname tagged configuration"
122149dc963fSmrg	fi
122249dc963fSmrg	;;
122349dc963fSmrg      esac
122449dc963fSmrg    fi
122549dc963fSmrg}
122649dc963fSmrg
122749dc963fSmrg
122849dc963fSmrg
122949dc963fSmrg# func_write_libtool_object output_name pic_name nonpic_name
123049dc963fSmrg# Create a libtool object file (analogous to a ".la" file),
123149dc963fSmrg# but don't create it if we're doing a dry run.
123249dc963fSmrgfunc_write_libtool_object ()
123349dc963fSmrg{
123449dc963fSmrg    write_libobj=${1}
123549dc963fSmrg    if test "$build_libtool_libs" = yes; then
123649dc963fSmrg      write_lobj=\'${2}\'
123749dc963fSmrg    else
123849dc963fSmrg      write_lobj=none
123949dc963fSmrg    fi
124049dc963fSmrg
124149dc963fSmrg    if test "$build_old_libs" = yes; then
124249dc963fSmrg      write_oldobj=\'${3}\'
124349dc963fSmrg    else
124449dc963fSmrg      write_oldobj=none
124549dc963fSmrg    fi
124649dc963fSmrg
124749dc963fSmrg    $opt_dry_run || {
124849dc963fSmrg      cat >${write_libobj}T <<EOF
124949dc963fSmrg# $write_libobj - a libtool object file
125049dc963fSmrg# Generated by $PROGRAM (GNU $PACKAGE$TIMESTAMP) $VERSION
125149dc963fSmrg#
125249dc963fSmrg# Please DO NOT delete this file!
125349dc963fSmrg# It is necessary for linking the library.
125449dc963fSmrg
125549dc963fSmrg# Name of the PIC object.
125649dc963fSmrgpic_object=$write_lobj
125749dc963fSmrg
125849dc963fSmrg# Name of the non-PIC object
125949dc963fSmrgnon_pic_object=$write_oldobj
126049dc963fSmrg
126149dc963fSmrgEOF
126249dc963fSmrg      $MV "${write_libobj}T" "${write_libobj}"
126349dc963fSmrg    }
126449dc963fSmrg}
126549dc963fSmrg
126649dc963fSmrg# func_mode_compile arg...
126749dc963fSmrgfunc_mode_compile ()
126849dc963fSmrg{
126949dc963fSmrg    $opt_debug
127049dc963fSmrg    # Get the compilation command and the source file.
127149dc963fSmrg    base_compile=
127249dc963fSmrg    srcfile="$nonopt"  #  always keep a non-empty value in "srcfile"
127349dc963fSmrg    suppress_opt=yes
127449dc963fSmrg    suppress_output=
127549dc963fSmrg    arg_mode=normal
127649dc963fSmrg    libobj=
127749dc963fSmrg    later=
127849dc963fSmrg    pie_flag=
127949dc963fSmrg
128049dc963fSmrg    for arg
128149dc963fSmrg    do
128249dc963fSmrg      case $arg_mode in
128349dc963fSmrg      arg  )
128449dc963fSmrg	# do not "continue".  Instead, add this to base_compile
128549dc963fSmrg	lastarg="$arg"
128649dc963fSmrg	arg_mode=normal
128749dc963fSmrg	;;
128849dc963fSmrg
128949dc963fSmrg      target )
129049dc963fSmrg	libobj="$arg"
129149dc963fSmrg	arg_mode=normal
129249dc963fSmrg	continue
129349dc963fSmrg	;;
129449dc963fSmrg
129549dc963fSmrg      normal )
129649dc963fSmrg	# Accept any command-line options.
129749dc963fSmrg	case $arg in
129849dc963fSmrg	-o)
129949dc963fSmrg	  test -n "$libobj" && \
130049dc963fSmrg	    func_fatal_error "you cannot specify \`-o' more than once"
130149dc963fSmrg	  arg_mode=target
130249dc963fSmrg	  continue
130349dc963fSmrg	  ;;
130449dc963fSmrg
130549dc963fSmrg	-pie | -fpie | -fPIE)
130649dc963fSmrg          pie_flag="$pie_flag $arg"
130749dc963fSmrg	  continue
130849dc963fSmrg	  ;;
130949dc963fSmrg
131049dc963fSmrg	-shared | -static | -prefer-pic | -prefer-non-pic)
131149dc963fSmrg	  later="$later $arg"
131249dc963fSmrg	  continue
131349dc963fSmrg	  ;;
131449dc963fSmrg
131549dc963fSmrg	-no-suppress)
13164b0ead49Smrg	  suppress_opt=no
13174b0ead49Smrg	  continue
13184b0ead49Smrg	  ;;
13194b0ead49Smrg
13204b0ead49Smrg	-Xcompiler)
13214b0ead49Smrg	  arg_mode=arg  #  the next one goes into the "base_compile" arg list
13224b0ead49Smrg	  continue      #  The current "srcfile" will either be retained or
13234b0ead49Smrg	  ;;            #  replaced later.  I would guess that would be a bug.
13244b0ead49Smrg
13254b0ead49Smrg	-Wc,*)
132649dc963fSmrg	  func_stripname '-Wc,' '' "$arg"
132749dc963fSmrg	  args=$func_stripname_result
13284b0ead49Smrg	  lastarg=
13294b0ead49Smrg	  save_ifs="$IFS"; IFS=','
133049dc963fSmrg	  for arg in $args; do
13314b0ead49Smrg	    IFS="$save_ifs"
133249dc963fSmrg	    func_quote_for_eval "$arg"
133349dc963fSmrg	    lastarg="$lastarg $func_quote_for_eval_result"
13344b0ead49Smrg	  done
13354b0ead49Smrg	  IFS="$save_ifs"
133649dc963fSmrg	  func_stripname ' ' '' "$lastarg"
133749dc963fSmrg	  lastarg=$func_stripname_result
13384b0ead49Smrg
13394b0ead49Smrg	  # Add the arguments to base_compile.
13404b0ead49Smrg	  base_compile="$base_compile $lastarg"
13414b0ead49Smrg	  continue
13424b0ead49Smrg	  ;;
13434b0ead49Smrg
134449dc963fSmrg	*)
13454b0ead49Smrg	  # Accept the current argument as the source file.
13464b0ead49Smrg	  # The previous "srcfile" becomes the current argument.
13474b0ead49Smrg	  #
13484b0ead49Smrg	  lastarg="$srcfile"
13494b0ead49Smrg	  srcfile="$arg"
13504b0ead49Smrg	  ;;
13514b0ead49Smrg	esac  #  case $arg
13524b0ead49Smrg	;;
13534b0ead49Smrg      esac    #  case $arg_mode
13544b0ead49Smrg
13554b0ead49Smrg      # Aesthetically quote the previous argument.
135649dc963fSmrg      func_quote_for_eval "$lastarg"
135749dc963fSmrg      base_compile="$base_compile $func_quote_for_eval_result"
13584b0ead49Smrg    done # for arg
13594b0ead49Smrg
13604b0ead49Smrg    case $arg_mode in
13614b0ead49Smrg    arg)
136249dc963fSmrg      func_fatal_error "you must specify an argument for -Xcompile"
13634b0ead49Smrg      ;;
13644b0ead49Smrg    target)
136549dc963fSmrg      func_fatal_error "you must specify a target with \`-o'"
13664b0ead49Smrg      ;;
13674b0ead49Smrg    *)
13684b0ead49Smrg      # Get the name of the library object.
136949dc963fSmrg      test -z "$libobj" && {
137049dc963fSmrg	func_basename "$srcfile"
137149dc963fSmrg	libobj="$func_basename_result"
137249dc963fSmrg      }
13734b0ead49Smrg      ;;
13744b0ead49Smrg    esac
13754b0ead49Smrg
13764b0ead49Smrg    # Recognize several different file suffixes.
13774b0ead49Smrg    # If the user specifies -o file.o, it is replaced with file.lo
13784b0ead49Smrg    case $libobj in
137949dc963fSmrg    *.[cCFSifmso] | \
138049dc963fSmrg    *.ada | *.adb | *.ads | *.asm | \
138149dc963fSmrg    *.c++ | *.cc | *.ii | *.class | *.cpp | *.cxx | \
13827aa89044Smrg    *.[fF][09]? | *.for | *.java | *.obj | *.sx | *.cu | *.cup)
138349dc963fSmrg      func_xform "$libobj"
138449dc963fSmrg      libobj=$func_xform_result
138549dc963fSmrg      ;;
13864b0ead49Smrg    esac
13874b0ead49Smrg
13884b0ead49Smrg    case $libobj in
138949dc963fSmrg    *.lo) func_lo2o "$libobj"; obj=$func_lo2o_result ;;
13904b0ead49Smrg    *)
139149dc963fSmrg      func_fatal_error "cannot determine name of library object from \`$libobj'"
13924b0ead49Smrg      ;;
13934b0ead49Smrg    esac
13944b0ead49Smrg
13954b0ead49Smrg    func_infer_tag $base_compile
13964b0ead49Smrg
13974b0ead49Smrg    for arg in $later; do
13984b0ead49Smrg      case $arg in
139949dc963fSmrg      -shared)
140049dc963fSmrg	test "$build_libtool_libs" != yes && \
140149dc963fSmrg	  func_fatal_configuration "can not build a shared library"
140249dc963fSmrg	build_old_libs=no
140349dc963fSmrg	continue
140449dc963fSmrg	;;
140549dc963fSmrg
14064b0ead49Smrg      -static)
140749dc963fSmrg	build_libtool_libs=no
14084b0ead49Smrg	build_old_libs=yes
14094b0ead49Smrg	continue
14104b0ead49Smrg	;;
14114b0ead49Smrg
14124b0ead49Smrg      -prefer-pic)
14134b0ead49Smrg	pic_mode=yes
14144b0ead49Smrg	continue
14154b0ead49Smrg	;;
14164b0ead49Smrg
14174b0ead49Smrg      -prefer-non-pic)
14184b0ead49Smrg	pic_mode=no
14194b0ead49Smrg	continue
14204b0ead49Smrg	;;
14214b0ead49Smrg      esac
14224b0ead49Smrg    done
14234b0ead49Smrg
142449dc963fSmrg    func_quote_for_eval "$libobj"
142549dc963fSmrg    test "X$libobj" != "X$func_quote_for_eval_result" \
142649dc963fSmrg      && $ECHO "X$libobj" | $GREP '[]~#^*{};<>?"'"'"'	 &()|`$[]' \
142749dc963fSmrg      && func_warning "libobj name \`$libobj' may not contain shell special characters."
142849dc963fSmrg    func_dirname_and_basename "$obj" "/" ""
142949dc963fSmrg    objname="$func_basename_result"
143049dc963fSmrg    xdir="$func_dirname_result"
14314b0ead49Smrg    lobj=${xdir}$objdir/$objname
14324b0ead49Smrg
143349dc963fSmrg    test -z "$base_compile" && \
143449dc963fSmrg      func_fatal_help "you must specify a compilation command"
14354b0ead49Smrg
14364b0ead49Smrg    # Delete any leftover library objects.
14374b0ead49Smrg    if test "$build_old_libs" = yes; then
14384b0ead49Smrg      removelist="$obj $lobj $libobj ${libobj}T"
14394b0ead49Smrg    else
14404b0ead49Smrg      removelist="$lobj $libobj ${libobj}T"
14414b0ead49Smrg    fi
14424b0ead49Smrg
14434b0ead49Smrg    # On Cygwin there's no "real" PIC flag so we must build both object types
14444b0ead49Smrg    case $host_os in
144549dc963fSmrg    cygwin* | mingw* | pw32* | os2* | cegcc*)
14464b0ead49Smrg      pic_mode=default
14474b0ead49Smrg      ;;
14484b0ead49Smrg    esac
14494b0ead49Smrg    if test "$pic_mode" = no && test "$deplibs_check_method" != pass_all; then
14504b0ead49Smrg      # non-PIC code in shared libraries is not supported
14514b0ead49Smrg      pic_mode=default
14524b0ead49Smrg    fi
14534b0ead49Smrg
14544b0ead49Smrg    # Calculate the filename of the output object if compiler does
14554b0ead49Smrg    # not support -o with -c
14564b0ead49Smrg    if test "$compiler_c_o" = no; then
14577aa89044Smrg      output_obj=`$ECHO "$srcfile" | $SED 's%^.*/%%; s%\.[^.]*$%%'`.${objext}
14584b0ead49Smrg      lockfile="$output_obj.lock"
14594b0ead49Smrg    else
14604b0ead49Smrg      output_obj=
14614b0ead49Smrg      need_locks=no
14624b0ead49Smrg      lockfile=
14634b0ead49Smrg    fi
14644b0ead49Smrg
14654b0ead49Smrg    # Lock this critical section if it is needed
14664b0ead49Smrg    # We use this script file to make the link, it avoids creating a new file
14674b0ead49Smrg    if test "$need_locks" = yes; then
146849dc963fSmrg      until $opt_dry_run || ln "$progpath" "$lockfile" 2>/dev/null; do
146949dc963fSmrg	func_echo "Waiting for $lockfile to be removed"
14704b0ead49Smrg	sleep 2
14714b0ead49Smrg      done
14724b0ead49Smrg    elif test "$need_locks" = warn; then
14734b0ead49Smrg      if test -f "$lockfile"; then
147449dc963fSmrg	$ECHO "\
14754b0ead49Smrg*** ERROR, $lockfile exists and contains:
14764b0ead49Smrg`cat $lockfile 2>/dev/null`
14774b0ead49Smrg
14784b0ead49SmrgThis indicates that another process is trying to use the same
14794b0ead49Smrgtemporary object file, and libtool could not work around it because
14804b0ead49Smrgyour compiler does not support \`-c' and \`-o' together.  If you
14814b0ead49Smrgrepeat this compilation, it may succeed, by chance, but you had better
14824b0ead49Smrgavoid parallel builds (make -j) in this platform, or get a better
14834b0ead49Smrgcompiler."
14844b0ead49Smrg
148549dc963fSmrg	$opt_dry_run || $RM $removelist
14864b0ead49Smrg	exit $EXIT_FAILURE
14874b0ead49Smrg      fi
148849dc963fSmrg      removelist="$removelist $output_obj"
148949dc963fSmrg      $ECHO "$srcfile" > "$lockfile"
14904b0ead49Smrg    fi
14914b0ead49Smrg
149249dc963fSmrg    $opt_dry_run || $RM $removelist
149349dc963fSmrg    removelist="$removelist $lockfile"
149449dc963fSmrg    trap '$opt_dry_run || $RM $removelist; exit $EXIT_FAILURE' 1 2 15
149549dc963fSmrg
14964b0ead49Smrg    if test -n "$fix_srcfile_path"; then
14974b0ead49Smrg      eval srcfile=\"$fix_srcfile_path\"
14984b0ead49Smrg    fi
149949dc963fSmrg    func_quote_for_eval "$srcfile"
150049dc963fSmrg    qsrcfile=$func_quote_for_eval_result
15014b0ead49Smrg
15024b0ead49Smrg    # Only build a PIC object if we are building libtool libraries.
15034b0ead49Smrg    if test "$build_libtool_libs" = yes; then
15044b0ead49Smrg      # Without this assignment, base_compile gets emptied.
15054b0ead49Smrg      fbsd_hideous_sh_bug=$base_compile
15064b0ead49Smrg
15074b0ead49Smrg      if test "$pic_mode" != no; then
15084b0ead49Smrg	command="$base_compile $qsrcfile $pic_flag"
15094b0ead49Smrg      else
15104b0ead49Smrg	# Don't build PIC code
15114b0ead49Smrg	command="$base_compile $qsrcfile"
15124b0ead49Smrg      fi
15134b0ead49Smrg
151449dc963fSmrg      func_mkdir_p "$xdir$objdir"
15154b0ead49Smrg
15164b0ead49Smrg      if test -z "$output_obj"; then
15174b0ead49Smrg	# Place PIC objects in $objdir
15184b0ead49Smrg	command="$command -o $lobj"
15194b0ead49Smrg      fi
15204b0ead49Smrg
152149dc963fSmrg      func_show_eval_locale "$command"	\
152249dc963fSmrg          'test -n "$output_obj" && $RM $removelist; exit $EXIT_FAILURE'
15234b0ead49Smrg
15244b0ead49Smrg      if test "$need_locks" = warn &&
15254b0ead49Smrg	 test "X`cat $lockfile 2>/dev/null`" != "X$srcfile"; then
152649dc963fSmrg	$ECHO "\
15274b0ead49Smrg*** ERROR, $lockfile contains:
15284b0ead49Smrg`cat $lockfile 2>/dev/null`
15294b0ead49Smrg
15304b0ead49Smrgbut it should contain:
15314b0ead49Smrg$srcfile
15324b0ead49Smrg
15334b0ead49SmrgThis indicates that another process is trying to use the same
15344b0ead49Smrgtemporary object file, and libtool could not work around it because
15354b0ead49Smrgyour compiler does not support \`-c' and \`-o' together.  If you
15364b0ead49Smrgrepeat this compilation, it may succeed, by chance, but you had better
15374b0ead49Smrgavoid parallel builds (make -j) in this platform, or get a better
15384b0ead49Smrgcompiler."
15394b0ead49Smrg
154049dc963fSmrg	$opt_dry_run || $RM $removelist
15414b0ead49Smrg	exit $EXIT_FAILURE
15424b0ead49Smrg      fi
15434b0ead49Smrg
15444b0ead49Smrg      # Just move the object if needed, then go on to compile the next one
15454b0ead49Smrg      if test -n "$output_obj" && test "X$output_obj" != "X$lobj"; then
154649dc963fSmrg	func_show_eval '$MV "$output_obj" "$lobj"' \
154749dc963fSmrg	  'error=$?; $opt_dry_run || $RM $removelist; exit $error'
15484b0ead49Smrg      fi
15494b0ead49Smrg
15504b0ead49Smrg      # Allow error messages only from the first compilation.
15514b0ead49Smrg      if test "$suppress_opt" = yes; then
155249dc963fSmrg	suppress_output=' >/dev/null 2>&1'
15534b0ead49Smrg      fi
15544b0ead49Smrg    fi
15554b0ead49Smrg
15564b0ead49Smrg    # Only build a position-dependent object if we build old libraries.
15574b0ead49Smrg    if test "$build_old_libs" = yes; then
15584b0ead49Smrg      if test "$pic_mode" != yes; then
15594b0ead49Smrg	# Don't build PIC code
156049dc963fSmrg	command="$base_compile $qsrcfile$pie_flag"
15614b0ead49Smrg      else
15624b0ead49Smrg	command="$base_compile $qsrcfile $pic_flag"
15634b0ead49Smrg      fi
15644b0ead49Smrg      if test "$compiler_c_o" = yes; then
15654b0ead49Smrg	command="$command -o $obj"
15664b0ead49Smrg      fi
15674b0ead49Smrg
15684b0ead49Smrg      # Suppress compiler output if we already did a PIC compilation.
15694b0ead49Smrg      command="$command$suppress_output"
157049dc963fSmrg      func_show_eval_locale "$command" \
157149dc963fSmrg        '$opt_dry_run || $RM $removelist; exit $EXIT_FAILURE'
15724b0ead49Smrg
15734b0ead49Smrg      if test "$need_locks" = warn &&
15744b0ead49Smrg	 test "X`cat $lockfile 2>/dev/null`" != "X$srcfile"; then
157549dc963fSmrg	$ECHO "\
15764b0ead49Smrg*** ERROR, $lockfile contains:
15774b0ead49Smrg`cat $lockfile 2>/dev/null`
15784b0ead49Smrg
15794b0ead49Smrgbut it should contain:
15804b0ead49Smrg$srcfile
15814b0ead49Smrg
15824b0ead49SmrgThis indicates that another process is trying to use the same
15834b0ead49Smrgtemporary object file, and libtool could not work around it because
15844b0ead49Smrgyour compiler does not support \`-c' and \`-o' together.  If you
15854b0ead49Smrgrepeat this compilation, it may succeed, by chance, but you had better
15864b0ead49Smrgavoid parallel builds (make -j) in this platform, or get a better
15874b0ead49Smrgcompiler."
15884b0ead49Smrg
158949dc963fSmrg	$opt_dry_run || $RM $removelist
15904b0ead49Smrg	exit $EXIT_FAILURE
15914b0ead49Smrg      fi
15924b0ead49Smrg
15934b0ead49Smrg      # Just move the object if needed
15944b0ead49Smrg      if test -n "$output_obj" && test "X$output_obj" != "X$obj"; then
159549dc963fSmrg	func_show_eval '$MV "$output_obj" "$obj"' \
159649dc963fSmrg	  'error=$?; $opt_dry_run || $RM $removelist; exit $error'
15974b0ead49Smrg      fi
15984b0ead49Smrg    fi
15994b0ead49Smrg
160049dc963fSmrg    $opt_dry_run || {
160149dc963fSmrg      func_write_libtool_object "$libobj" "$objdir/$objname" "$objname"
16024b0ead49Smrg
160349dc963fSmrg      # Unlock the critical section if it was locked
160449dc963fSmrg      if test "$need_locks" != no; then
160549dc963fSmrg	removelist=$lockfile
160649dc963fSmrg        $RM "$lockfile"
160749dc963fSmrg      fi
160849dc963fSmrg    }
16094b0ead49Smrg
16104b0ead49Smrg    exit $EXIT_SUCCESS
161149dc963fSmrg}
16124b0ead49Smrg
161349dc963fSmrg$opt_help || {
16147aa89044Smrg  test "$mode" = compile && func_mode_compile ${1+"$@"}
161549dc963fSmrg}
16164b0ead49Smrg
161749dc963fSmrgfunc_mode_help ()
161849dc963fSmrg{
161949dc963fSmrg    # We need to display help for each of the modes.
162049dc963fSmrg    case $mode in
162149dc963fSmrg      "")
162249dc963fSmrg        # Generic help is extracted from the usage comments
162349dc963fSmrg        # at the start of this file.
162449dc963fSmrg        func_help
162549dc963fSmrg        ;;
16264b0ead49Smrg
162749dc963fSmrg      clean)
162849dc963fSmrg        $ECHO \
162949dc963fSmrg"Usage: $progname [OPTION]... --mode=clean RM [RM-OPTION]... FILE...
16304b0ead49Smrg
163149dc963fSmrgRemove files from the build directory.
16324b0ead49Smrg
163349dc963fSmrgRM is the name of the program to use to delete files associated with each FILE
163449dc963fSmrg(typically \`/bin/rm').  RM-OPTIONS are options (such as \`-f') to be passed
163549dc963fSmrgto RM.
16364b0ead49Smrg
163749dc963fSmrgIf FILE is a libtool library, object or program, all the files associated
163849dc963fSmrgwith it are deleted. Otherwise, only FILE itself is deleted using RM."
163949dc963fSmrg        ;;
16404b0ead49Smrg
164149dc963fSmrg      compile)
164249dc963fSmrg      $ECHO \
164349dc963fSmrg"Usage: $progname [OPTION]... --mode=compile COMPILE-COMMAND... SOURCEFILE
16444b0ead49Smrg
164549dc963fSmrgCompile a source file into a libtool library object.
16464b0ead49Smrg
164749dc963fSmrgThis mode accepts the following additional options:
16484b0ead49Smrg
164949dc963fSmrg  -o OUTPUT-FILE    set the output file name to OUTPUT-FILE
165049dc963fSmrg  -no-suppress      do not suppress compiler output for multiple passes
16517aa89044Smrg  -prefer-pic       try to build PIC objects only
16527aa89044Smrg  -prefer-non-pic   try to build non-PIC objects only
165349dc963fSmrg  -shared           do not build a \`.o' file suitable for static linking
165449dc963fSmrg  -static           only build a \`.o' file suitable for static linking
16557aa89044Smrg  -Wc,FLAG          pass FLAG directly to the compiler
16564b0ead49Smrg
165749dc963fSmrgCOMPILE-COMMAND is a command to be used in creating a \`standard' object file
165849dc963fSmrgfrom the given SOURCEFILE.
16594b0ead49Smrg
166049dc963fSmrgThe output file name is determined by removing the directory component from
166149dc963fSmrgSOURCEFILE, then substituting the C source code suffix \`.c' with the
166249dc963fSmrglibrary object suffix, \`.lo'."
166349dc963fSmrg        ;;
16644b0ead49Smrg
166549dc963fSmrg      execute)
166649dc963fSmrg        $ECHO \
166749dc963fSmrg"Usage: $progname [OPTION]... --mode=execute COMMAND [ARGS]...
16684b0ead49Smrg
166949dc963fSmrgAutomatically set library path, then run a program.
16704b0ead49Smrg
167149dc963fSmrgThis mode accepts the following additional options:
16724b0ead49Smrg
167349dc963fSmrg  -dlopen FILE      add the directory containing FILE to the library path
16744b0ead49Smrg
167549dc963fSmrgThis mode sets the library path environment variable according to \`-dlopen'
167649dc963fSmrgflags.
16774b0ead49Smrg
167849dc963fSmrgIf any of the ARGS are libtool executable wrappers, then they are translated
167949dc963fSmrginto their corresponding uninstalled binary, and any of their required library
168049dc963fSmrgdirectories are added to the library path.
16814b0ead49Smrg
168249dc963fSmrgThen, COMMAND is executed, with ARGS as arguments."
168349dc963fSmrg        ;;
16844b0ead49Smrg
168549dc963fSmrg      finish)
168649dc963fSmrg        $ECHO \
168749dc963fSmrg"Usage: $progname [OPTION]... --mode=finish [LIBDIR]...
16884b0ead49Smrg
168949dc963fSmrgComplete the installation of libtool libraries.
16904b0ead49Smrg
169149dc963fSmrgEach LIBDIR is a directory that contains libtool libraries.
16924b0ead49Smrg
169349dc963fSmrgThe commands that this mode executes may require superuser privileges.  Use
169449dc963fSmrgthe \`--dry-run' option if you just want to see what would be executed."
169549dc963fSmrg        ;;
16964b0ead49Smrg
169749dc963fSmrg      install)
169849dc963fSmrg        $ECHO \
169949dc963fSmrg"Usage: $progname [OPTION]... --mode=install INSTALL-COMMAND...
17004b0ead49Smrg
170149dc963fSmrgInstall executables or libraries.
17024b0ead49Smrg
170349dc963fSmrgINSTALL-COMMAND is the installation command.  The first component should be
170449dc963fSmrgeither the \`install' or \`cp' program.
17054b0ead49Smrg
170649dc963fSmrgThe following components of INSTALL-COMMAND are treated specially:
17074b0ead49Smrg
17087aa89044Smrg  -inst-prefix-dir PREFIX-DIR  Use PREFIX-DIR as a staging area for installation
17094b0ead49Smrg
171049dc963fSmrgThe rest of the components are interpreted as arguments to that command (only
171149dc963fSmrgBSD-compatible install options are recognized)."
171249dc963fSmrg        ;;
17134b0ead49Smrg
171449dc963fSmrg      link)
171549dc963fSmrg        $ECHO \
171649dc963fSmrg"Usage: $progname [OPTION]... --mode=link LINK-COMMAND...
17174b0ead49Smrg
171849dc963fSmrgLink object files or libraries together to form another library, or to
171949dc963fSmrgcreate an executable program.
17204b0ead49Smrg
172149dc963fSmrgLINK-COMMAND is a command using the C compiler that you would use to create
172249dc963fSmrga program from several object files.
17234b0ead49Smrg
172449dc963fSmrgThe following components of LINK-COMMAND are treated specially:
17254b0ead49Smrg
172649dc963fSmrg  -all-static       do not do any dynamic linking at all
172749dc963fSmrg  -avoid-version    do not add a version suffix if possible
17287aa89044Smrg  -bindir BINDIR    specify path to binaries directory (for systems where
17297aa89044Smrg                    libraries must be found in the PATH setting at runtime)
173049dc963fSmrg  -dlopen FILE      \`-dlpreopen' FILE if it cannot be dlopened at runtime
173149dc963fSmrg  -dlpreopen FILE   link in FILE and add its symbols to lt_preloaded_symbols
173249dc963fSmrg  -export-dynamic   allow symbols from OUTPUT-FILE to be resolved with dlsym(3)
173349dc963fSmrg  -export-symbols SYMFILE
173449dc963fSmrg                    try to export only the symbols listed in SYMFILE
173549dc963fSmrg  -export-symbols-regex REGEX
173649dc963fSmrg                    try to export only the symbols matching REGEX
173749dc963fSmrg  -LLIBDIR          search LIBDIR for required installed libraries
173849dc963fSmrg  -lNAME            OUTPUT-FILE requires the installed library libNAME
173949dc963fSmrg  -module           build a library that can dlopened
174049dc963fSmrg  -no-fast-install  disable the fast-install mode
174149dc963fSmrg  -no-install       link a not-installable executable
174249dc963fSmrg  -no-undefined     declare that a library does not refer to external symbols
174349dc963fSmrg  -o OUTPUT-FILE    create OUTPUT-FILE from the specified objects
174449dc963fSmrg  -objectlist FILE  Use a list of object files found in FILE to specify objects
174549dc963fSmrg  -precious-files-regex REGEX
174649dc963fSmrg                    don't remove output files matching REGEX
174749dc963fSmrg  -release RELEASE  specify package release information
174849dc963fSmrg  -rpath LIBDIR     the created library will eventually be installed in LIBDIR
174949dc963fSmrg  -R[ ]LIBDIR       add LIBDIR to the runtime path of programs and libraries
175049dc963fSmrg  -shared           only do dynamic linking of libtool libraries
175149dc963fSmrg  -shrext SUFFIX    override the standard shared library file extension
175249dc963fSmrg  -static           do not do any dynamic linking of uninstalled libtool libraries
175349dc963fSmrg  -static-libtool-libs
175449dc963fSmrg                    do not do any dynamic linking of libtool libraries
175549dc963fSmrg  -version-info CURRENT[:REVISION[:AGE]]
175649dc963fSmrg                    specify library version info [each variable defaults to 0]
175749dc963fSmrg  -weak LIBNAME     declare that the target provides the LIBNAME interface
17587aa89044Smrg  -Wc,FLAG
17597aa89044Smrg  -Xcompiler FLAG   pass linker-specific FLAG directly to the compiler
17607aa89044Smrg  -Wl,FLAG
17617aa89044Smrg  -Xlinker FLAG     pass linker-specific FLAG directly to the linker
17627aa89044Smrg  -XCClinker FLAG   pass link-specific FLAG to the compiler driver (CC)
17634b0ead49Smrg
176449dc963fSmrgAll other options (arguments beginning with \`-') are ignored.
17654b0ead49Smrg
176649dc963fSmrgEvery other argument is treated as a filename.  Files ending in \`.la' are
176749dc963fSmrgtreated as uninstalled libtool libraries, other files are standard or library
176849dc963fSmrgobject files.
176952b01e16Smrg
177049dc963fSmrgIf the OUTPUT-FILE ends in \`.la', then a libtool library is created,
177149dc963fSmrgonly library objects (\`.lo' files) may be specified, and \`-rpath' is
177249dc963fSmrgrequired, except when creating a convenience library.
17734b0ead49Smrg
177449dc963fSmrgIf OUTPUT-FILE ends in \`.a' or \`.lib', then a standard library is created
177549dc963fSmrgusing \`ar' and \`ranlib', or on Windows using \`lib'.
17764b0ead49Smrg
177749dc963fSmrgIf OUTPUT-FILE ends in \`.lo' or \`.${objext}', then a reloadable object file
177849dc963fSmrgis created, otherwise an executable program is created."
17794b0ead49Smrg        ;;
17804b0ead49Smrg
178149dc963fSmrg      uninstall)
178249dc963fSmrg        $ECHO \
178349dc963fSmrg"Usage: $progname [OPTION]... --mode=uninstall RM [RM-OPTION]... FILE...
17844b0ead49Smrg
178549dc963fSmrgRemove libraries from an installation directory.
17864b0ead49Smrg
178749dc963fSmrgRM is the name of the program to use to delete files associated with each FILE
178849dc963fSmrg(typically \`/bin/rm').  RM-OPTIONS are options (such as \`-f') to be passed
178949dc963fSmrgto RM.
17904b0ead49Smrg
179149dc963fSmrgIf FILE is a libtool library, all the files associated with it are deleted.
179249dc963fSmrgOtherwise, only FILE itself is deleted using RM."
179349dc963fSmrg        ;;
17944b0ead49Smrg
179549dc963fSmrg      *)
179649dc963fSmrg        func_fatal_help "invalid operation mode \`$mode'"
179749dc963fSmrg        ;;
179849dc963fSmrg    esac
17994b0ead49Smrg
18007aa89044Smrg    echo
180149dc963fSmrg    $ECHO "Try \`$progname --help' for more information about other modes."
180249dc963fSmrg}
18034b0ead49Smrg
18047aa89044Smrg# Now that we've collected a possible --mode arg, show help if necessary
18057aa89044Smrgif $opt_help; then
18067aa89044Smrg  if test "$opt_help" = :; then
18077aa89044Smrg    func_mode_help
18087aa89044Smrg  else
18097aa89044Smrg    {
18107aa89044Smrg      func_help noexit
18117aa89044Smrg      for mode in compile link execute install finish uninstall clean; do
18127aa89044Smrg	func_mode_help
18137aa89044Smrg      done
18147aa89044Smrg    } | sed -n '1p; 2,$s/^Usage:/  or: /p'
18157aa89044Smrg    {
18167aa89044Smrg      func_help noexit
18177aa89044Smrg      for mode in compile link execute install finish uninstall clean; do
18187aa89044Smrg	echo
18197aa89044Smrg	func_mode_help
18207aa89044Smrg      done
18217aa89044Smrg    } |
18227aa89044Smrg    sed '1d
18237aa89044Smrg      /^When reporting/,/^Report/{
18247aa89044Smrg	H
18257aa89044Smrg	d
18267aa89044Smrg      }
18277aa89044Smrg      $x
18287aa89044Smrg      /information about other modes/d
18297aa89044Smrg      /more detailed .*MODE/d
18307aa89044Smrg      s/^Usage:.*--mode=\([^ ]*\) .*/Description of \1 mode:/'
18317aa89044Smrg  fi
18327aa89044Smrg  exit $?
18337aa89044Smrgfi
18344b0ead49Smrg
18354b0ead49Smrg
183649dc963fSmrg# func_mode_execute arg...
183749dc963fSmrgfunc_mode_execute ()
183849dc963fSmrg{
183949dc963fSmrg    $opt_debug
184049dc963fSmrg    # The first argument is the command name.
184149dc963fSmrg    cmd="$nonopt"
184249dc963fSmrg    test -z "$cmd" && \
184349dc963fSmrg      func_fatal_help "you must specify a COMMAND"
18444b0ead49Smrg
184549dc963fSmrg    # Handle -dlopen flags immediately.
184649dc963fSmrg    for file in $execute_dlfiles; do
184749dc963fSmrg      test -f "$file" \
184849dc963fSmrg	|| func_fatal_help "\`$file' is not a file"
18494b0ead49Smrg
185049dc963fSmrg      dir=
185149dc963fSmrg      case $file in
185249dc963fSmrg      *.la)
185349dc963fSmrg	# Check to see that this really is a libtool archive.
185449dc963fSmrg	func_lalib_unsafe_p "$file" \
185549dc963fSmrg	  || func_fatal_help "\`$lib' is not a valid libtool archive"
18564b0ead49Smrg
185749dc963fSmrg	# Read the libtool library.
185849dc963fSmrg	dlname=
185949dc963fSmrg	library_names=
186049dc963fSmrg	func_source "$file"
18614b0ead49Smrg
186249dc963fSmrg	# Skip this library if it cannot be dlopened.
186349dc963fSmrg	if test -z "$dlname"; then
186449dc963fSmrg	  # Warn if it was a shared library.
186549dc963fSmrg	  test -n "$library_names" && \
186649dc963fSmrg	    func_warning "\`$file' was not linked with \`-export-dynamic'"
186749dc963fSmrg	  continue
186849dc963fSmrg	fi
18694b0ead49Smrg
187049dc963fSmrg	func_dirname "$file" "" "."
187149dc963fSmrg	dir="$func_dirname_result"
18724b0ead49Smrg
187349dc963fSmrg	if test -f "$dir/$objdir/$dlname"; then
187449dc963fSmrg	  dir="$dir/$objdir"
187549dc963fSmrg	else
187649dc963fSmrg	  if test ! -f "$dir/$dlname"; then
187749dc963fSmrg	    func_fatal_error "cannot find \`$dlname' in \`$dir' or \`$dir/$objdir'"
187849dc963fSmrg	  fi
187949dc963fSmrg	fi
18804b0ead49Smrg	;;
18814b0ead49Smrg
188249dc963fSmrg      *.lo)
188349dc963fSmrg	# Just add the directory containing the .lo file.
188449dc963fSmrg	func_dirname "$file" "" "."
188549dc963fSmrg	dir="$func_dirname_result"
18864b0ead49Smrg	;;
18874b0ead49Smrg
188849dc963fSmrg      *)
188949dc963fSmrg	func_warning "\`-dlopen' is ignored for non-libtool libraries and objects"
18904b0ead49Smrg	continue
18914b0ead49Smrg	;;
189249dc963fSmrg      esac
18934b0ead49Smrg
189449dc963fSmrg      # Get the absolute pathname.
189549dc963fSmrg      absdir=`cd "$dir" && pwd`
189649dc963fSmrg      test -n "$absdir" && dir="$absdir"
18974b0ead49Smrg
189849dc963fSmrg      # Now add the directory to shlibpath_var.
189949dc963fSmrg      if eval "test -z \"\$$shlibpath_var\""; then
190049dc963fSmrg	eval "$shlibpath_var=\"\$dir\""
190149dc963fSmrg      else
190249dc963fSmrg	eval "$shlibpath_var=\"\$dir:\$$shlibpath_var\""
190349dc963fSmrg      fi
190449dc963fSmrg    done
19054b0ead49Smrg
190649dc963fSmrg    # This variable tells wrapper scripts just to set shlibpath_var
190749dc963fSmrg    # rather than running their programs.
190849dc963fSmrg    libtool_execute_magic="$magic"
19094b0ead49Smrg
191049dc963fSmrg    # Check if any of the arguments is a wrapper script.
191149dc963fSmrg    args=
191249dc963fSmrg    for file
191349dc963fSmrg    do
191449dc963fSmrg      case $file in
19157aa89044Smrg      -* | *.la | *.lo ) ;;
191649dc963fSmrg      *)
191749dc963fSmrg	# Do a test to see if this is really a libtool program.
191849dc963fSmrg	if func_ltwrapper_script_p "$file"; then
191949dc963fSmrg	  func_source "$file"
192049dc963fSmrg	  # Transform arg to wrapped name.
192149dc963fSmrg	  file="$progdir/$program"
192249dc963fSmrg	elif func_ltwrapper_executable_p "$file"; then
192349dc963fSmrg	  func_ltwrapper_scriptname "$file"
192449dc963fSmrg	  func_source "$func_ltwrapper_scriptname_result"
192549dc963fSmrg	  # Transform arg to wrapped name.
192649dc963fSmrg	  file="$progdir/$program"
192749dc963fSmrg	fi
192849dc963fSmrg	;;
192949dc963fSmrg      esac
193049dc963fSmrg      # Quote arguments (to preserve shell metacharacters).
193149dc963fSmrg      func_quote_for_eval "$file"
193249dc963fSmrg      args="$args $func_quote_for_eval_result"
193349dc963fSmrg    done
19344b0ead49Smrg
193549dc963fSmrg    if test "X$opt_dry_run" = Xfalse; then
193649dc963fSmrg      if test -n "$shlibpath_var"; then
193749dc963fSmrg	# Export the shlibpath_var.
193849dc963fSmrg	eval "export $shlibpath_var"
193949dc963fSmrg      fi
19404b0ead49Smrg
194149dc963fSmrg      # Restore saved environment variables
194249dc963fSmrg      for lt_var in LANG LANGUAGE LC_ALL LC_CTYPE LC_COLLATE LC_MESSAGES
194349dc963fSmrg      do
194449dc963fSmrg	eval "if test \"\${save_$lt_var+set}\" = set; then
194549dc963fSmrg                $lt_var=\$save_$lt_var; export $lt_var
19464b0ead49Smrg	      else
194749dc963fSmrg		$lt_unset $lt_var
194849dc963fSmrg	      fi"
194949dc963fSmrg      done
19504b0ead49Smrg
195149dc963fSmrg      # Now prepare to actually exec the command.
195249dc963fSmrg      exec_cmd="\$cmd$args"
195349dc963fSmrg    else
195449dc963fSmrg      # Display what would be done.
195549dc963fSmrg      if test -n "$shlibpath_var"; then
195649dc963fSmrg	eval "\$ECHO \"\$shlibpath_var=\$$shlibpath_var\""
19577aa89044Smrg	echo "export $shlibpath_var"
195849dc963fSmrg      fi
195949dc963fSmrg      $ECHO "$cmd$args"
196049dc963fSmrg      exit $EXIT_SUCCESS
196149dc963fSmrg    fi
196249dc963fSmrg}
19634b0ead49Smrg
196449dc963fSmrgtest "$mode" = execute && func_mode_execute ${1+"$@"}
19654b0ead49Smrg
19664b0ead49Smrg
196749dc963fSmrg# func_mode_finish arg...
196849dc963fSmrgfunc_mode_finish ()
196949dc963fSmrg{
197049dc963fSmrg    $opt_debug
197149dc963fSmrg    libdirs="$nonopt"
197249dc963fSmrg    admincmds=
19734b0ead49Smrg
197449dc963fSmrg    if test -n "$finish_cmds$finish_eval" && test -n "$libdirs"; then
197549dc963fSmrg      for dir
197649dc963fSmrg      do
197749dc963fSmrg	libdirs="$libdirs $dir"
197849dc963fSmrg      done
19794b0ead49Smrg
198049dc963fSmrg      for libdir in $libdirs; do
198149dc963fSmrg	if test -n "$finish_cmds"; then
198249dc963fSmrg	  # Do each command in the finish commands.
198349dc963fSmrg	  func_execute_cmds "$finish_cmds" 'admincmds="$admincmds
198449dc963fSmrg'"$cmd"'"'
19854b0ead49Smrg	fi
198649dc963fSmrg	if test -n "$finish_eval"; then
198749dc963fSmrg	  # Do the single finish_eval.
198849dc963fSmrg	  eval cmds=\"$finish_eval\"
198949dc963fSmrg	  $opt_dry_run || eval "$cmds" || admincmds="$admincmds
199049dc963fSmrg       $cmds"
199149dc963fSmrg	fi
199249dc963fSmrg      done
199349dc963fSmrg    fi
19944b0ead49Smrg
199549dc963fSmrg    # Exit here if they wanted silent mode.
199649dc963fSmrg    $opt_silent && exit $EXIT_SUCCESS
19974b0ead49Smrg
19987aa89044Smrg    echo "----------------------------------------------------------------------"
19997aa89044Smrg    echo "Libraries have been installed in:"
200049dc963fSmrg    for libdir in $libdirs; do
200149dc963fSmrg      $ECHO "   $libdir"
200249dc963fSmrg    done
20037aa89044Smrg    echo
20047aa89044Smrg    echo "If you ever happen to want to link against installed libraries"
20057aa89044Smrg    echo "in a given directory, LIBDIR, you must either use libtool, and"
20067aa89044Smrg    echo "specify the full pathname of the library, or use the \`-LLIBDIR'"
20077aa89044Smrg    echo "flag during linking and do at least one of the following:"
200849dc963fSmrg    if test -n "$shlibpath_var"; then
20097aa89044Smrg      echo "   - add LIBDIR to the \`$shlibpath_var' environment variable"
20107aa89044Smrg      echo "     during execution"
201149dc963fSmrg    fi
201249dc963fSmrg    if test -n "$runpath_var"; then
20137aa89044Smrg      echo "   - add LIBDIR to the \`$runpath_var' environment variable"
20147aa89044Smrg      echo "     during linking"
201549dc963fSmrg    fi
201649dc963fSmrg    if test -n "$hardcode_libdir_flag_spec"; then
201749dc963fSmrg      libdir=LIBDIR
201849dc963fSmrg      eval flag=\"$hardcode_libdir_flag_spec\"
201949dc963fSmrg
202049dc963fSmrg      $ECHO "   - use the \`$flag' linker flag"
202149dc963fSmrg    fi
202249dc963fSmrg    if test -n "$admincmds"; then
202349dc963fSmrg      $ECHO "   - have your system administrator run these commands:$admincmds"
202449dc963fSmrg    fi
202549dc963fSmrg    if test -f /etc/ld.so.conf; then
20267aa89044Smrg      echo "   - have your system administrator add LIBDIR to \`/etc/ld.so.conf'"
202749dc963fSmrg    fi
20287aa89044Smrg    echo
202949dc963fSmrg
20307aa89044Smrg    echo "See any operating system documentation about shared libraries for"
203149dc963fSmrg    case $host in
203249dc963fSmrg      solaris2.[6789]|solaris2.1[0-9])
20337aa89044Smrg        echo "more information, such as the ld(1), crle(1) and ld.so(8) manual"
20347aa89044Smrg	echo "pages."
203549dc963fSmrg	;;
203649dc963fSmrg      *)
20377aa89044Smrg        echo "more information, such as the ld(1) and ld.so(8) manual pages."
203849dc963fSmrg        ;;
203949dc963fSmrg    esac
20407aa89044Smrg    echo "----------------------------------------------------------------------"
204149dc963fSmrg    exit $EXIT_SUCCESS
204249dc963fSmrg}
204349dc963fSmrg
204449dc963fSmrgtest "$mode" = finish && func_mode_finish ${1+"$@"}
204549dc963fSmrg
204649dc963fSmrg
204749dc963fSmrg# func_mode_install arg...
204849dc963fSmrgfunc_mode_install ()
204949dc963fSmrg{
205049dc963fSmrg    $opt_debug
205149dc963fSmrg    # There may be an optional sh(1) argument at the beginning of
205249dc963fSmrg    # install_prog (especially on Windows NT).
205349dc963fSmrg    if test "$nonopt" = "$SHELL" || test "$nonopt" = /bin/sh ||
205449dc963fSmrg       # Allow the use of GNU shtool's install command.
20557aa89044Smrg       case $nonopt in *shtool*) :;; *) false;; esac; then
205649dc963fSmrg      # Aesthetically quote it.
205749dc963fSmrg      func_quote_for_eval "$nonopt"
205849dc963fSmrg      install_prog="$func_quote_for_eval_result "
205949dc963fSmrg      arg=$1
206049dc963fSmrg      shift
206149dc963fSmrg    else
206249dc963fSmrg      install_prog=
206349dc963fSmrg      arg=$nonopt
206449dc963fSmrg    fi
206549dc963fSmrg
206649dc963fSmrg    # The real first argument should be the name of the installation program.
206749dc963fSmrg    # Aesthetically quote it.
206849dc963fSmrg    func_quote_for_eval "$arg"
206949dc963fSmrg    install_prog="$install_prog$func_quote_for_eval_result"
20707aa89044Smrg    install_shared_prog=$install_prog
20717aa89044Smrg    case " $install_prog " in
20727aa89044Smrg      *[\\\ /]cp\ *) install_cp=: ;;
20737aa89044Smrg      *) install_cp=false ;;
20747aa89044Smrg    esac
207549dc963fSmrg
207649dc963fSmrg    # We need to accept at least all the BSD install flags.
207749dc963fSmrg    dest=
207849dc963fSmrg    files=
207949dc963fSmrg    opts=
208049dc963fSmrg    prev=
208149dc963fSmrg    install_type=
208249dc963fSmrg    isdir=no
208349dc963fSmrg    stripme=
20847aa89044Smrg    no_mode=:
208549dc963fSmrg    for arg
208649dc963fSmrg    do
20877aa89044Smrg      arg2=
208849dc963fSmrg      if test -n "$dest"; then
208949dc963fSmrg	files="$files $dest"
209049dc963fSmrg	dest=$arg
209149dc963fSmrg	continue
209249dc963fSmrg      fi
209349dc963fSmrg
209449dc963fSmrg      case $arg in
209549dc963fSmrg      -d) isdir=yes ;;
209649dc963fSmrg      -f)
20977aa89044Smrg	if $install_cp; then :; else
20987aa89044Smrg	  prev=$arg
20997aa89044Smrg	fi
210049dc963fSmrg	;;
210149dc963fSmrg      -g | -m | -o)
210249dc963fSmrg	prev=$arg
210349dc963fSmrg	;;
210449dc963fSmrg      -s)
210549dc963fSmrg	stripme=" -s"
210649dc963fSmrg	continue
210749dc963fSmrg	;;
210849dc963fSmrg      -*)
210949dc963fSmrg	;;
211049dc963fSmrg      *)
211149dc963fSmrg	# If the previous option needed an argument, then skip it.
211249dc963fSmrg	if test -n "$prev"; then
21137aa89044Smrg	  if test "x$prev" = x-m && test -n "$install_override_mode"; then
21147aa89044Smrg	    arg2=$install_override_mode
21157aa89044Smrg	    no_mode=false
21167aa89044Smrg	  fi
21174b0ead49Smrg	  prev=
21184b0ead49Smrg	else
211949dc963fSmrg	  dest=$arg
212049dc963fSmrg	  continue
21214b0ead49Smrg	fi
21224b0ead49Smrg	;;
212349dc963fSmrg      esac
21244b0ead49Smrg
212549dc963fSmrg      # Aesthetically quote the argument.
212649dc963fSmrg      func_quote_for_eval "$arg"
212749dc963fSmrg      install_prog="$install_prog $func_quote_for_eval_result"
21287aa89044Smrg      if test -n "$arg2"; then
21297aa89044Smrg	func_quote_for_eval "$arg2"
21307aa89044Smrg      fi
21317aa89044Smrg      install_shared_prog="$install_shared_prog $func_quote_for_eval_result"
213249dc963fSmrg    done
21334b0ead49Smrg
213449dc963fSmrg    test -z "$install_prog" && \
213549dc963fSmrg      func_fatal_help "you must specify an install program"
21364b0ead49Smrg
213749dc963fSmrg    test -n "$prev" && \
213849dc963fSmrg      func_fatal_help "the \`$prev' option requires an argument"
21394b0ead49Smrg
21407aa89044Smrg    if test -n "$install_override_mode" && $no_mode; then
21417aa89044Smrg      if $install_cp; then :; else
21427aa89044Smrg	func_quote_for_eval "$install_override_mode"
21437aa89044Smrg	install_shared_prog="$install_shared_prog -m $func_quote_for_eval_result"
21447aa89044Smrg      fi
21457aa89044Smrg    fi
21467aa89044Smrg
214749dc963fSmrg    if test -z "$files"; then
214849dc963fSmrg      if test -z "$dest"; then
214949dc963fSmrg	func_fatal_help "no file or destination specified"
215049dc963fSmrg      else
215149dc963fSmrg	func_fatal_help "you must specify a destination"
215249dc963fSmrg      fi
21534b0ead49Smrg    fi
21544b0ead49Smrg
215549dc963fSmrg    # Strip any trailing slash from the destination.
215649dc963fSmrg    func_stripname '' '/' "$dest"
215749dc963fSmrg    dest=$func_stripname_result
21584b0ead49Smrg
215949dc963fSmrg    # Check to see that the destination is a directory.
216049dc963fSmrg    test -d "$dest" && isdir=yes
216149dc963fSmrg    if test "$isdir" = yes; then
216249dc963fSmrg      destdir="$dest"
216349dc963fSmrg      destname=
21644b0ead49Smrg    else
216549dc963fSmrg      func_dirname_and_basename "$dest" "" "."
216649dc963fSmrg      destdir="$func_dirname_result"
216749dc963fSmrg      destname="$func_basename_result"
21684b0ead49Smrg
216949dc963fSmrg      # Not a directory, so check to see that there is only one file specified.
217049dc963fSmrg      set dummy $files; shift
217149dc963fSmrg      test "$#" -gt 1 && \
217249dc963fSmrg	func_fatal_help "\`$dest' is not a directory"
21734b0ead49Smrg    fi
217449dc963fSmrg    case $destdir in
217549dc963fSmrg    [\\/]* | [A-Za-z]:[\\/]*) ;;
21764b0ead49Smrg    *)
217749dc963fSmrg      for file in $files; do
217849dc963fSmrg	case $file in
217949dc963fSmrg	*.lo) ;;
218049dc963fSmrg	*)
218149dc963fSmrg	  func_fatal_help "\`$destdir' must be an absolute directory name"
218249dc963fSmrg	  ;;
218349dc963fSmrg	esac
218449dc963fSmrg      done
21854b0ead49Smrg      ;;
21864b0ead49Smrg    esac
21874b0ead49Smrg
218849dc963fSmrg    # This variable tells wrapper scripts just to set variables rather
218949dc963fSmrg    # than running their programs.
219049dc963fSmrg    libtool_install_magic="$magic"
21914b0ead49Smrg
219249dc963fSmrg    staticlibs=
219349dc963fSmrg    future_libdirs=
219449dc963fSmrg    current_libdirs=
219549dc963fSmrg    for file in $files; do
21964b0ead49Smrg
219749dc963fSmrg      # Do each installation.
219849dc963fSmrg      case $file in
219949dc963fSmrg      *.$libext)
220049dc963fSmrg	# Do the static libraries later.
220149dc963fSmrg	staticlibs="$staticlibs $file"
220249dc963fSmrg	;;
220349dc963fSmrg
220449dc963fSmrg      *.la)
220549dc963fSmrg	# Check to see that this really is a libtool archive.
220649dc963fSmrg	func_lalib_unsafe_p "$file" \
220749dc963fSmrg	  || func_fatal_help "\`$file' is not a valid libtool archive"
220849dc963fSmrg
220949dc963fSmrg	library_names=
221049dc963fSmrg	old_library=
221149dc963fSmrg	relink_command=
221249dc963fSmrg	func_source "$file"
221349dc963fSmrg
221449dc963fSmrg	# Add the libdir to current_libdirs if it is the destination.
221549dc963fSmrg	if test "X$destdir" = "X$libdir"; then
221649dc963fSmrg	  case "$current_libdirs " in
221749dc963fSmrg	  *" $libdir "*) ;;
221849dc963fSmrg	  *) current_libdirs="$current_libdirs $libdir" ;;
22194b0ead49Smrg	  esac
222049dc963fSmrg	else
222149dc963fSmrg	  # Note the libdir as a future libdir.
222249dc963fSmrg	  case "$future_libdirs " in
222349dc963fSmrg	  *" $libdir "*) ;;
222449dc963fSmrg	  *) future_libdirs="$future_libdirs $libdir" ;;
222549dc963fSmrg	  esac
222649dc963fSmrg	fi
22274b0ead49Smrg
222849dc963fSmrg	func_dirname "$file" "/" ""
222949dc963fSmrg	dir="$func_dirname_result"
223049dc963fSmrg	dir="$dir$objdir"
223149dc963fSmrg
223249dc963fSmrg	if test -n "$relink_command"; then
223349dc963fSmrg	  # Determine the prefix the user has applied to our future dir.
22347aa89044Smrg	  inst_prefix_dir=`$ECHO "$destdir" | $SED -e "s%$libdir\$%%"`
223549dc963fSmrg
223649dc963fSmrg	  # Don't allow the user to place us outside of our expected
223749dc963fSmrg	  # location b/c this prevents finding dependent libraries that
223849dc963fSmrg	  # are installed to the same prefix.
223949dc963fSmrg	  # At present, this check doesn't affect windows .dll's that
224049dc963fSmrg	  # are installed into $libdir/../bin (currently, that works fine)
224149dc963fSmrg	  # but it's something to keep an eye on.
224249dc963fSmrg	  test "$inst_prefix_dir" = "$destdir" && \
224349dc963fSmrg	    func_fatal_error "error: cannot install \`$file' to a directory not ending in $libdir"
224449dc963fSmrg
224549dc963fSmrg	  if test -n "$inst_prefix_dir"; then
224649dc963fSmrg	    # Stick the inst_prefix_dir data into the link command.
22477aa89044Smrg	    relink_command=`$ECHO "$relink_command" | $SED "s%@inst_prefix_dir@%-inst-prefix-dir $inst_prefix_dir%"`
224849dc963fSmrg	  else
22497aa89044Smrg	    relink_command=`$ECHO "$relink_command" | $SED "s%@inst_prefix_dir@%%"`
225049dc963fSmrg	  fi
225149dc963fSmrg
225249dc963fSmrg	  func_warning "relinking \`$file'"
225349dc963fSmrg	  func_show_eval "$relink_command" \
225449dc963fSmrg	    'func_fatal_error "error: relink \`$file'\'' with the above command before installing it"'
225549dc963fSmrg	fi
225649dc963fSmrg
225749dc963fSmrg	# See the names of the shared library.
225849dc963fSmrg	set dummy $library_names; shift
225949dc963fSmrg	if test -n "$1"; then
226049dc963fSmrg	  realname="$1"
226149dc963fSmrg	  shift
226249dc963fSmrg
226349dc963fSmrg	  srcname="$realname"
226449dc963fSmrg	  test -n "$relink_command" && srcname="$realname"T
226549dc963fSmrg
226649dc963fSmrg	  # Install the shared library and build the symlinks.
22677aa89044Smrg	  func_show_eval "$install_shared_prog $dir/$srcname $destdir/$realname" \
226849dc963fSmrg	      'exit $?'
226949dc963fSmrg	  tstripme="$stripme"
227049dc963fSmrg	  case $host_os in
227149dc963fSmrg	  cygwin* | mingw* | pw32* | cegcc*)
227249dc963fSmrg	    case $realname in
227349dc963fSmrg	    *.dll.a)
227449dc963fSmrg	      tstripme=""
227549dc963fSmrg	      ;;
227649dc963fSmrg	    esac
22774b0ead49Smrg	    ;;
22784b0ead49Smrg	  esac
227949dc963fSmrg	  if test -n "$tstripme" && test -n "$striplib"; then
228049dc963fSmrg	    func_show_eval "$striplib $destdir/$realname" 'exit $?'
22814b0ead49Smrg	  fi
228249dc963fSmrg
228349dc963fSmrg	  if test "$#" -gt 0; then
228449dc963fSmrg	    # Delete the old symlinks, and create new ones.
228549dc963fSmrg	    # Try `ln -sf' first, because the `ln' binary might depend on
228649dc963fSmrg	    # the symlink we replace!  Solaris /bin/ln does not understand -f,
228749dc963fSmrg	    # so we also need to try rm && ln -s.
228849dc963fSmrg	    for linkname
228949dc963fSmrg	    do
229049dc963fSmrg	      test "$linkname" != "$realname" \
229149dc963fSmrg		&& func_show_eval "(cd $destdir && { $LN_S -f $realname $linkname || { $RM $linkname && $LN_S $realname $linkname; }; })"
22924b0ead49Smrg	    done
22934b0ead49Smrg	  fi
22944b0ead49Smrg
229549dc963fSmrg	  # Do each command in the postinstall commands.
229649dc963fSmrg	  lib="$destdir/$realname"
229749dc963fSmrg	  func_execute_cmds "$postinstall_cmds" 'exit $?'
22984b0ead49Smrg	fi
22994b0ead49Smrg
230049dc963fSmrg	# Install the pseudo-library for information purposes.
230149dc963fSmrg	func_basename "$file"
230249dc963fSmrg	name="$func_basename_result"
230349dc963fSmrg	instname="$dir/$name"i
230449dc963fSmrg	func_show_eval "$install_prog $instname $destdir/$name" 'exit $?'
23054b0ead49Smrg
230649dc963fSmrg	# Maybe install the static library, too.
230749dc963fSmrg	test -n "$old_library" && staticlibs="$staticlibs $dir/$old_library"
230849dc963fSmrg	;;
23094b0ead49Smrg
231049dc963fSmrg      *.lo)
231149dc963fSmrg	# Install (i.e. copy) a libtool object.
23124b0ead49Smrg
231349dc963fSmrg	# Figure out destination file name, if it wasn't already specified.
231449dc963fSmrg	if test -n "$destname"; then
231549dc963fSmrg	  destfile="$destdir/$destname"
231649dc963fSmrg	else
231749dc963fSmrg	  func_basename "$file"
231849dc963fSmrg	  destfile="$func_basename_result"
231949dc963fSmrg	  destfile="$destdir/$destfile"
23204b0ead49Smrg	fi
23214b0ead49Smrg
232249dc963fSmrg	# Deduce the name of the destination old-style object file.
232349dc963fSmrg	case $destfile in
232449dc963fSmrg	*.lo)
232549dc963fSmrg	  func_lo2o "$destfile"
232649dc963fSmrg	  staticdest=$func_lo2o_result
232749dc963fSmrg	  ;;
232849dc963fSmrg	*.$objext)
232949dc963fSmrg	  staticdest="$destfile"
233049dc963fSmrg	  destfile=
233149dc963fSmrg	  ;;
233249dc963fSmrg	*)
233349dc963fSmrg	  func_fatal_help "cannot copy a libtool object to \`$destfile'"
233449dc963fSmrg	  ;;
233549dc963fSmrg	esac
23364b0ead49Smrg
233749dc963fSmrg	# Install the libtool object if requested.
233849dc963fSmrg	test -n "$destfile" && \
233949dc963fSmrg	  func_show_eval "$install_prog $file $destfile" 'exit $?'
23404b0ead49Smrg
234149dc963fSmrg	# Install the old object if enabled.
234249dc963fSmrg	if test "$build_old_libs" = yes; then
234349dc963fSmrg	  # Deduce the name of the old-style object file.
234449dc963fSmrg	  func_lo2o "$file"
234549dc963fSmrg	  staticobj=$func_lo2o_result
234649dc963fSmrg	  func_show_eval "$install_prog \$staticobj \$staticdest" 'exit $?'
23474b0ead49Smrg	fi
234849dc963fSmrg	exit $EXIT_SUCCESS
234949dc963fSmrg	;;
23504b0ead49Smrg
235149dc963fSmrg      *)
235249dc963fSmrg	# Figure out destination file name, if it wasn't already specified.
235349dc963fSmrg	if test -n "$destname"; then
235449dc963fSmrg	  destfile="$destdir/$destname"
235549dc963fSmrg	else
235649dc963fSmrg	  func_basename "$file"
235749dc963fSmrg	  destfile="$func_basename_result"
235849dc963fSmrg	  destfile="$destdir/$destfile"
235949dc963fSmrg	fi
23604b0ead49Smrg
236149dc963fSmrg	# If the file is missing, and there is a .exe on the end, strip it
236249dc963fSmrg	# because it is most likely a libtool script we actually want to
236349dc963fSmrg	# install
236449dc963fSmrg	stripped_ext=""
236549dc963fSmrg	case $file in
236649dc963fSmrg	  *.exe)
236749dc963fSmrg	    if test ! -f "$file"; then
236849dc963fSmrg	      func_stripname '' '.exe' "$file"
236949dc963fSmrg	      file=$func_stripname_result
237049dc963fSmrg	      stripped_ext=".exe"
237149dc963fSmrg	    fi
237249dc963fSmrg	    ;;
237349dc963fSmrg	esac
237449dc963fSmrg
237549dc963fSmrg	# Do a test to see if this is really a libtool program.
237649dc963fSmrg	case $host in
237749dc963fSmrg	*cygwin* | *mingw*)
237849dc963fSmrg	    if func_ltwrapper_executable_p "$file"; then
237949dc963fSmrg	      func_ltwrapper_scriptname "$file"
238049dc963fSmrg	      wrapper=$func_ltwrapper_scriptname_result
238149dc963fSmrg	    else
238249dc963fSmrg	      func_stripname '' '.exe' "$file"
238349dc963fSmrg	      wrapper=$func_stripname_result
238449dc963fSmrg	    fi
238549dc963fSmrg	    ;;
23864b0ead49Smrg	*)
238749dc963fSmrg	    wrapper=$file
238849dc963fSmrg	    ;;
238949dc963fSmrg	esac
239049dc963fSmrg	if func_ltwrapper_script_p "$wrapper"; then
239149dc963fSmrg	  notinst_deplibs=
239249dc963fSmrg	  relink_command=
239349dc963fSmrg
239449dc963fSmrg	  func_source "$wrapper"
239549dc963fSmrg
239649dc963fSmrg	  # Check the variables that should have been set.
239749dc963fSmrg	  test -z "$generated_by_libtool_version" && \
239849dc963fSmrg	    func_fatal_error "invalid libtool wrapper script \`$wrapper'"
239949dc963fSmrg
240049dc963fSmrg	  finalize=yes
240149dc963fSmrg	  for lib in $notinst_deplibs; do
240249dc963fSmrg	    # Check to see that each library is installed.
240349dc963fSmrg	    libdir=
240449dc963fSmrg	    if test -f "$lib"; then
240549dc963fSmrg	      func_source "$lib"
240649dc963fSmrg	    fi
24077aa89044Smrg	    libfile="$libdir/"`$ECHO "$lib" | $SED 's%^.*/%%g'` ### testsuite: skip nested quoting test
240849dc963fSmrg	    if test -n "$libdir" && test ! -f "$libfile"; then
240949dc963fSmrg	      func_warning "\`$lib' has not been installed in \`$libdir'"
241049dc963fSmrg	      finalize=no
241149dc963fSmrg	    fi
241249dc963fSmrg	  done
241349dc963fSmrg
241449dc963fSmrg	  relink_command=
241549dc963fSmrg	  func_source "$wrapper"
241649dc963fSmrg
241749dc963fSmrg	  outputname=
241849dc963fSmrg	  if test "$fast_install" = no && test -n "$relink_command"; then
241949dc963fSmrg	    $opt_dry_run || {
242049dc963fSmrg	      if test "$finalize" = yes; then
242149dc963fSmrg	        tmpdir=`func_mktempdir`
242249dc963fSmrg		func_basename "$file$stripped_ext"
242349dc963fSmrg		file="$func_basename_result"
242449dc963fSmrg	        outputname="$tmpdir/$file"
242549dc963fSmrg	        # Replace the output file specification.
24267aa89044Smrg	        relink_command=`$ECHO "$relink_command" | $SED 's%@OUTPUT@%'"$outputname"'%g'`
242749dc963fSmrg
242849dc963fSmrg	        $opt_silent || {
242949dc963fSmrg	          func_quote_for_expand "$relink_command"
243049dc963fSmrg		  eval "func_echo $func_quote_for_expand_result"
243149dc963fSmrg	        }
243249dc963fSmrg	        if eval "$relink_command"; then :
243349dc963fSmrg	          else
243449dc963fSmrg		  func_error "error: relink \`$file' with the above command before installing it"
243549dc963fSmrg		  $opt_dry_run || ${RM}r "$tmpdir"
243649dc963fSmrg		  continue
243749dc963fSmrg	        fi
243849dc963fSmrg	        file="$outputname"
243949dc963fSmrg	      else
244049dc963fSmrg	        func_warning "cannot relink \`$file'"
244149dc963fSmrg	      fi
244249dc963fSmrg	    }
244349dc963fSmrg	  else
244449dc963fSmrg	    # Install the binary that we compiled earlier.
24457aa89044Smrg	    file=`$ECHO "$file$stripped_ext" | $SED "s%\([^/]*\)$%$objdir/\1%"`
24464b0ead49Smrg	  fi
244749dc963fSmrg	fi
244849dc963fSmrg
244949dc963fSmrg	# remove .exe since cygwin /usr/bin/install will append another
245049dc963fSmrg	# one anyway
245149dc963fSmrg	case $install_prog,$host in
245249dc963fSmrg	*/usr/bin/install*,*cygwin*)
245349dc963fSmrg	  case $file:$destfile in
245449dc963fSmrg	  *.exe:*.exe)
245549dc963fSmrg	    # this is ok
245649dc963fSmrg	    ;;
245749dc963fSmrg	  *.exe:*)
245849dc963fSmrg	    destfile=$destfile.exe
245949dc963fSmrg	    ;;
246049dc963fSmrg	  *:*.exe)
246149dc963fSmrg	    func_stripname '' '.exe' "$destfile"
246249dc963fSmrg	    destfile=$func_stripname_result
246349dc963fSmrg	    ;;
246449dc963fSmrg	  esac
24654b0ead49Smrg	  ;;
24664b0ead49Smrg	esac
246749dc963fSmrg	func_show_eval "$install_prog\$stripme \$file \$destfile" 'exit $?'
246849dc963fSmrg	$opt_dry_run || if test -n "$outputname"; then
246949dc963fSmrg	  ${RM}r "$tmpdir"
247049dc963fSmrg	fi
247149dc963fSmrg	;;
247249dc963fSmrg      esac
247349dc963fSmrg    done
24744b0ead49Smrg
247549dc963fSmrg    for file in $staticlibs; do
247649dc963fSmrg      func_basename "$file"
247749dc963fSmrg      name="$func_basename_result"
247849dc963fSmrg
247949dc963fSmrg      # Set up the ranlib parameters.
248049dc963fSmrg      oldlib="$destdir/$name"
248149dc963fSmrg
248249dc963fSmrg      func_show_eval "$install_prog \$file \$oldlib" 'exit $?'
248349dc963fSmrg
248449dc963fSmrg      if test -n "$stripme" && test -n "$old_striplib"; then
248549dc963fSmrg	func_show_eval "$old_striplib $oldlib" 'exit $?'
248649dc963fSmrg      fi
248749dc963fSmrg
248849dc963fSmrg      # Do each command in the postinstall commands.
248949dc963fSmrg      func_execute_cmds "$old_postinstall_cmds" 'exit $?'
249049dc963fSmrg    done
249149dc963fSmrg
249249dc963fSmrg    test -n "$future_libdirs" && \
249349dc963fSmrg      func_warning "remember to run \`$progname --finish$future_libdirs'"
249449dc963fSmrg
249549dc963fSmrg    if test -n "$current_libdirs"; then
249649dc963fSmrg      # Maybe just do a dry run.
249749dc963fSmrg      $opt_dry_run && current_libdirs=" -n$current_libdirs"
249849dc963fSmrg      exec_cmd='$SHELL $progpath $preserve_args --finish$current_libdirs'
249949dc963fSmrg    else
250049dc963fSmrg      exit $EXIT_SUCCESS
250149dc963fSmrg    fi
250249dc963fSmrg}
250349dc963fSmrg
250449dc963fSmrgtest "$mode" = install && func_mode_install ${1+"$@"}
250549dc963fSmrg
250649dc963fSmrg
250749dc963fSmrg# func_generate_dlsyms outputname originator pic_p
250849dc963fSmrg# Extract symbols from dlprefiles and create ${outputname}S.o with
250949dc963fSmrg# a dlpreopen symbol table.
251049dc963fSmrgfunc_generate_dlsyms ()
251149dc963fSmrg{
251249dc963fSmrg    $opt_debug
251349dc963fSmrg    my_outputname="$1"
251449dc963fSmrg    my_originator="$2"
251549dc963fSmrg    my_pic_p="${3-no}"
251649dc963fSmrg    my_prefix=`$ECHO "$my_originator" | sed 's%[^a-zA-Z0-9]%_%g'`
251749dc963fSmrg    my_dlsyms=
251849dc963fSmrg
251949dc963fSmrg    if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then
252049dc963fSmrg      if test -n "$NM" && test -n "$global_symbol_pipe"; then
252149dc963fSmrg	my_dlsyms="${my_outputname}S.c"
252249dc963fSmrg      else
252349dc963fSmrg	func_error "not configured to extract global symbols from dlpreopened files"
252449dc963fSmrg      fi
252549dc963fSmrg    fi
252649dc963fSmrg
252749dc963fSmrg    if test -n "$my_dlsyms"; then
252849dc963fSmrg      case $my_dlsyms in
252949dc963fSmrg      "") ;;
253049dc963fSmrg      *.c)
253149dc963fSmrg	# Discover the nlist of each of the dlfiles.
253249dc963fSmrg	nlist="$output_objdir/${my_outputname}.nm"
253349dc963fSmrg
253449dc963fSmrg	func_show_eval "$RM $nlist ${nlist}S ${nlist}T"
253549dc963fSmrg
253649dc963fSmrg	# Parse the name list into a source file.
253749dc963fSmrg	func_verbose "creating $output_objdir/$my_dlsyms"
253849dc963fSmrg
253949dc963fSmrg	$opt_dry_run || $ECHO > "$output_objdir/$my_dlsyms" "\
254049dc963fSmrg/* $my_dlsyms - symbol resolution table for \`$my_outputname' dlsym emulation. */
254149dc963fSmrg/* Generated by $PROGRAM (GNU $PACKAGE$TIMESTAMP) $VERSION */
254249dc963fSmrg
254349dc963fSmrg#ifdef __cplusplus
254449dc963fSmrgextern \"C\" {
254549dc963fSmrg#endif
254649dc963fSmrg
25477aa89044Smrg#if defined(__GNUC__) && (((__GNUC__ == 4) && (__GNUC_MINOR__ >= 4)) || (__GNUC__ > 4))
25487aa89044Smrg#pragma GCC diagnostic ignored \"-Wstrict-prototypes\"
25497aa89044Smrg#endif
25507aa89044Smrg
255149dc963fSmrg/* External symbol declarations for the compiler. */\
255249dc963fSmrg"
255349dc963fSmrg
255449dc963fSmrg	if test "$dlself" = yes; then
255549dc963fSmrg	  func_verbose "generating symbol list for \`$output'"
255649dc963fSmrg
255749dc963fSmrg	  $opt_dry_run || echo ': @PROGRAM@ ' > "$nlist"
255849dc963fSmrg
255949dc963fSmrg	  # Add our own program objects to the symbol list.
25607aa89044Smrg	  progfiles=`$ECHO "$objs$old_deplibs" | $SP2NL | $SED "$lo2o" | $NL2SP`
256149dc963fSmrg	  for progfile in $progfiles; do
256249dc963fSmrg	    func_verbose "extracting global C symbols from \`$progfile'"
256349dc963fSmrg	    $opt_dry_run || eval "$NM $progfile | $global_symbol_pipe >> '$nlist'"
256449dc963fSmrg	  done
256549dc963fSmrg
256649dc963fSmrg	  if test -n "$exclude_expsyms"; then
256749dc963fSmrg	    $opt_dry_run || {
256849dc963fSmrg	      eval '$EGREP -v " ($exclude_expsyms)$" "$nlist" > "$nlist"T'
256949dc963fSmrg	      eval '$MV "$nlist"T "$nlist"'
257049dc963fSmrg	    }
25714b0ead49Smrg	  fi
257249dc963fSmrg
257349dc963fSmrg	  if test -n "$export_symbols_regex"; then
257449dc963fSmrg	    $opt_dry_run || {
257549dc963fSmrg	      eval '$EGREP -e "$export_symbols_regex" "$nlist" > "$nlist"T'
257649dc963fSmrg	      eval '$MV "$nlist"T "$nlist"'
257749dc963fSmrg	    }
257849dc963fSmrg	  fi
257949dc963fSmrg
258049dc963fSmrg	  # Prepare the list of exported symbols
258149dc963fSmrg	  if test -z "$export_symbols"; then
258249dc963fSmrg	    export_symbols="$output_objdir/$outputname.exp"
258349dc963fSmrg	    $opt_dry_run || {
258449dc963fSmrg	      $RM $export_symbols
258549dc963fSmrg	      eval "${SED} -n -e '/^: @PROGRAM@ $/d' -e 's/^.* \(.*\)$/\1/p' "'< "$nlist" > "$export_symbols"'
258649dc963fSmrg	      case $host in
258749dc963fSmrg	      *cygwin* | *mingw* | *cegcc* )
258849dc963fSmrg                eval "echo EXPORTS "'> "$output_objdir/$outputname.def"'
258949dc963fSmrg                eval 'cat "$export_symbols" >> "$output_objdir/$outputname.def"'
259049dc963fSmrg	        ;;
259149dc963fSmrg	      esac
259249dc963fSmrg	    }
25934b0ead49Smrg	  else
259449dc963fSmrg	    $opt_dry_run || {
259549dc963fSmrg	      eval "${SED} -e 's/\([].[*^$]\)/\\\\\1/g' -e 's/^/ /' -e 's/$/$/'"' < "$export_symbols" > "$output_objdir/$outputname.exp"'
259649dc963fSmrg	      eval '$GREP -f "$output_objdir/$outputname.exp" < "$nlist" > "$nlist"T'
259749dc963fSmrg	      eval '$MV "$nlist"T "$nlist"'
259849dc963fSmrg	      case $host in
25997aa89044Smrg	        *cygwin* | *mingw* | *cegcc* )
260049dc963fSmrg	          eval "echo EXPORTS "'> "$output_objdir/$outputname.def"'
260149dc963fSmrg	          eval 'cat "$nlist" >> "$output_objdir/$outputname.def"'
260249dc963fSmrg	          ;;
260349dc963fSmrg	      esac
260449dc963fSmrg	    }
26054b0ead49Smrg	  fi
260649dc963fSmrg	fi
26074b0ead49Smrg
260849dc963fSmrg	for dlprefile in $dlprefiles; do
260949dc963fSmrg	  func_verbose "extracting global C symbols from \`$dlprefile'"
261049dc963fSmrg	  func_basename "$dlprefile"
261149dc963fSmrg	  name="$func_basename_result"
261249dc963fSmrg	  $opt_dry_run || {
261349dc963fSmrg	    eval '$ECHO ": $name " >> "$nlist"'
261449dc963fSmrg	    eval "$NM $dlprefile 2>/dev/null | $global_symbol_pipe >> '$nlist'"
261549dc963fSmrg	  }
261649dc963fSmrg	done
261749dc963fSmrg
261849dc963fSmrg	$opt_dry_run || {
261949dc963fSmrg	  # Make sure we have at least an empty file.
262049dc963fSmrg	  test -f "$nlist" || : > "$nlist"
262149dc963fSmrg
262249dc963fSmrg	  if test -n "$exclude_expsyms"; then
262349dc963fSmrg	    $EGREP -v " ($exclude_expsyms)$" "$nlist" > "$nlist"T
262449dc963fSmrg	    $MV "$nlist"T "$nlist"
26254b0ead49Smrg	  fi
262649dc963fSmrg
262749dc963fSmrg	  # Try sorting and uniquifying the output.
262849dc963fSmrg	  if $GREP -v "^: " < "$nlist" |
262949dc963fSmrg	      if sort -k 3 </dev/null >/dev/null 2>&1; then
263049dc963fSmrg		sort -k 3
263149dc963fSmrg	      else
263249dc963fSmrg		sort +2
263349dc963fSmrg	      fi |
263449dc963fSmrg	      uniq > "$nlist"S; then
263549dc963fSmrg	    :
26364b0ead49Smrg	  else
263749dc963fSmrg	    $GREP -v "^: " < "$nlist" > "$nlist"S
26384b0ead49Smrg	  fi
26394b0ead49Smrg
264049dc963fSmrg	  if test -f "$nlist"S; then
264149dc963fSmrg	    eval "$global_symbol_to_cdecl"' < "$nlist"S >> "$output_objdir/$my_dlsyms"'
26424b0ead49Smrg	  else
26437aa89044Smrg	    echo '/* NONE */' >> "$output_objdir/$my_dlsyms"
26444b0ead49Smrg	  fi
26454b0ead49Smrg
26467aa89044Smrg	  echo >> "$output_objdir/$my_dlsyms" "\
26474b0ead49Smrg
264849dc963fSmrg/* The mapping between symbol names and symbols.  */
264949dc963fSmrgtypedef struct {
265049dc963fSmrg  const char *name;
265149dc963fSmrg  void *address;
265249dc963fSmrg} lt_dlsymlist;
265349dc963fSmrg"
265449dc963fSmrg	  case $host in
265549dc963fSmrg	  *cygwin* | *mingw* | *cegcc* )
26567aa89044Smrg	    echo >> "$output_objdir/$my_dlsyms" "\
265749dc963fSmrg/* DATA imports from DLLs on WIN32 con't be const, because
265849dc963fSmrg   runtime relocations are performed -- see ld's documentation
265949dc963fSmrg   on pseudo-relocs.  */"
266049dc963fSmrg	    lt_dlsym_const= ;;
266149dc963fSmrg	  *osf5*)
266249dc963fSmrg	    echo >> "$output_objdir/$my_dlsyms" "\
266349dc963fSmrg/* This system does not cope well with relocations in const data */"
266449dc963fSmrg	    lt_dlsym_const= ;;
266549dc963fSmrg	  *)
266649dc963fSmrg	    lt_dlsym_const=const ;;
266749dc963fSmrg	  esac
26684b0ead49Smrg
26697aa89044Smrg	  echo >> "$output_objdir/$my_dlsyms" "\
267049dc963fSmrgextern $lt_dlsym_const lt_dlsymlist
267149dc963fSmrglt_${my_prefix}_LTX_preloaded_symbols[];
267249dc963fSmrg$lt_dlsym_const lt_dlsymlist
267349dc963fSmrglt_${my_prefix}_LTX_preloaded_symbols[] =
267449dc963fSmrg{\
267549dc963fSmrg  { \"$my_originator\", (void *) 0 },"
26764b0ead49Smrg
267749dc963fSmrg	  case $need_lib_prefix in
267849dc963fSmrg	  no)
267949dc963fSmrg	    eval "$global_symbol_to_c_name_address" < "$nlist" >> "$output_objdir/$my_dlsyms"
268049dc963fSmrg	    ;;
268149dc963fSmrg	  *)
268249dc963fSmrg	    eval "$global_symbol_to_c_name_address_lib_prefix" < "$nlist" >> "$output_objdir/$my_dlsyms"
268349dc963fSmrg	    ;;
268449dc963fSmrg	  esac
26857aa89044Smrg	  echo >> "$output_objdir/$my_dlsyms" "\
268649dc963fSmrg  {0, (void *) 0}
268749dc963fSmrg};
26884b0ead49Smrg
268949dc963fSmrg/* This works around a problem in FreeBSD linker */
269049dc963fSmrg#ifdef FREEBSD_WORKAROUND
269149dc963fSmrgstatic const void *lt_preloaded_setup() {
269249dc963fSmrg  return lt_${my_prefix}_LTX_preloaded_symbols;
269349dc963fSmrg}
269449dc963fSmrg#endif
269549dc963fSmrg
269649dc963fSmrg#ifdef __cplusplus
269749dc963fSmrg}
269849dc963fSmrg#endif\
269949dc963fSmrg"
270049dc963fSmrg	} # !$opt_dry_run
270149dc963fSmrg
270249dc963fSmrg	pic_flag_for_symtable=
270349dc963fSmrg	case "$compile_command " in
270449dc963fSmrg	*" -static "*) ;;
270549dc963fSmrg	*)
270649dc963fSmrg	  case $host in
270749dc963fSmrg	  # compiling the symbol table file with pic_flag works around
270849dc963fSmrg	  # a FreeBSD bug that causes programs to crash when -lm is
270949dc963fSmrg	  # linked before any other PIC object.  But we must not use
271049dc963fSmrg	  # pic_flag when linking with -static.  The problem exists in
271149dc963fSmrg	  # FreeBSD 2.2.6 and is fixed in FreeBSD 3.1.
271249dc963fSmrg	  *-*-freebsd2*|*-*-freebsd3.0*|*-*-freebsdelf3.0*)
271349dc963fSmrg	    pic_flag_for_symtable=" $pic_flag -DFREEBSD_WORKAROUND" ;;
271449dc963fSmrg	  *-*-hpux*)
271549dc963fSmrg	    pic_flag_for_symtable=" $pic_flag"  ;;
271649dc963fSmrg	  *)
271749dc963fSmrg	    if test "X$my_pic_p" != Xno; then
271849dc963fSmrg	      pic_flag_for_symtable=" $pic_flag"
27194b0ead49Smrg	    fi
272049dc963fSmrg	    ;;
272149dc963fSmrg	  esac
272249dc963fSmrg	  ;;
272349dc963fSmrg	esac
272449dc963fSmrg	symtab_cflags=
272549dc963fSmrg	for arg in $LTCFLAGS; do
272649dc963fSmrg	  case $arg in
272749dc963fSmrg	  -pie | -fpie | -fPIE) ;;
272849dc963fSmrg	  *) symtab_cflags="$symtab_cflags $arg" ;;
272949dc963fSmrg	  esac
273049dc963fSmrg	done
27314b0ead49Smrg
273249dc963fSmrg	# Now compile the dynamic symbol file.
273349dc963fSmrg	func_show_eval '(cd $output_objdir && $LTCC$symtab_cflags -c$no_builtin_flag$pic_flag_for_symtable "$my_dlsyms")' 'exit $?'
27344b0ead49Smrg
273549dc963fSmrg	# Clean up the generated files.
273649dc963fSmrg	func_show_eval '$RM "$output_objdir/$my_dlsyms" "$nlist" "${nlist}S" "${nlist}T"'
27374b0ead49Smrg
273849dc963fSmrg	# Transform the symbol file into the correct name.
273949dc963fSmrg	symfileobj="$output_objdir/${my_outputname}S.$objext"
274049dc963fSmrg	case $host in
274149dc963fSmrg	*cygwin* | *mingw* | *cegcc* )
274249dc963fSmrg	  if test -f "$output_objdir/$my_outputname.def"; then
27437aa89044Smrg	    compile_command=`$ECHO "$compile_command" | $SED "s%@SYMFILE@%$output_objdir/$my_outputname.def $symfileobj%"`
27447aa89044Smrg	    finalize_command=`$ECHO "$finalize_command" | $SED "s%@SYMFILE@%$output_objdir/$my_outputname.def $symfileobj%"`
274549dc963fSmrg	  else
27467aa89044Smrg	    compile_command=`$ECHO "$compile_command" | $SED "s%@SYMFILE@%$symfileobj%"`
27477aa89044Smrg	    finalize_command=`$ECHO "$finalize_command" | $SED "s%@SYMFILE@%$symfileobj%"`
27484b0ead49Smrg	  fi
274949dc963fSmrg	  ;;
275049dc963fSmrg	*)
27517aa89044Smrg	  compile_command=`$ECHO "$compile_command" | $SED "s%@SYMFILE@%$symfileobj%"`
27527aa89044Smrg	  finalize_command=`$ECHO "$finalize_command" | $SED "s%@SYMFILE@%$symfileobj%"`
275349dc963fSmrg	  ;;
275449dc963fSmrg	esac
275549dc963fSmrg	;;
275649dc963fSmrg      *)
275749dc963fSmrg	func_fatal_error "unknown suffix for \`$my_dlsyms'"
275849dc963fSmrg	;;
275949dc963fSmrg      esac
276049dc963fSmrg    else
276149dc963fSmrg      # We keep going just in case the user didn't refer to
276249dc963fSmrg      # lt_preloaded_symbols.  The linker will fail if global_symbol_pipe
276349dc963fSmrg      # really was required.
27644b0ead49Smrg
276549dc963fSmrg      # Nullify the symbol file.
27667aa89044Smrg      compile_command=`$ECHO "$compile_command" | $SED "s% @SYMFILE@%%"`
27677aa89044Smrg      finalize_command=`$ECHO "$finalize_command" | $SED "s% @SYMFILE@%%"`
276849dc963fSmrg    fi
276949dc963fSmrg}
27704b0ead49Smrg
277149dc963fSmrg# func_win32_libid arg
277249dc963fSmrg# return the library type of file 'arg'
277349dc963fSmrg#
277449dc963fSmrg# Need a lot of goo to handle *both* DLLs and import libs
277549dc963fSmrg# Has to be a shell function in order to 'eat' the argument
277649dc963fSmrg# that is supplied when $file_magic_command is called.
27777aa89044Smrg# Despite the name, also deal with 64 bit binaries.
277849dc963fSmrgfunc_win32_libid ()
277949dc963fSmrg{
278049dc963fSmrg  $opt_debug
278149dc963fSmrg  win32_libid_type="unknown"
278249dc963fSmrg  win32_fileres=`file -L $1 2>/dev/null`
278349dc963fSmrg  case $win32_fileres in
278449dc963fSmrg  *ar\ archive\ import\ library*) # definitely import
278549dc963fSmrg    win32_libid_type="x86 archive import"
278649dc963fSmrg    ;;
278749dc963fSmrg  *ar\ archive*) # could be an import, or static
27887aa89044Smrg    # Keep the egrep pattern in sync with the one in _LT_CHECK_MAGIC_METHOD.
278949dc963fSmrg    if eval $OBJDUMP -f $1 | $SED -e '10q' 2>/dev/null |
27907aa89044Smrg       $EGREP 'file format (pei*-i386(.*architecture: i386)?|pe-arm-wince|pe-x86-64)' >/dev/null; then
279149dc963fSmrg      win32_nmres=`eval $NM -f posix -A $1 |
279249dc963fSmrg	$SED -n -e '
279349dc963fSmrg	    1,100{
279449dc963fSmrg		/ I /{
279549dc963fSmrg		    s,.*,import,
279649dc963fSmrg		    p
279749dc963fSmrg		    q
279849dc963fSmrg		}
279949dc963fSmrg	    }'`
280049dc963fSmrg      case $win32_nmres in
280149dc963fSmrg      import*)  win32_libid_type="x86 archive import";;
280249dc963fSmrg      *)        win32_libid_type="x86 archive static";;
280349dc963fSmrg      esac
280449dc963fSmrg    fi
280549dc963fSmrg    ;;
280649dc963fSmrg  *DLL*)
280749dc963fSmrg    win32_libid_type="x86 DLL"
280849dc963fSmrg    ;;
280949dc963fSmrg  *executable*) # but shell scripts are "executable" too...
281049dc963fSmrg    case $win32_fileres in
281149dc963fSmrg    *MS\ Windows\ PE\ Intel*)
281249dc963fSmrg      win32_libid_type="x86 DLL"
281349dc963fSmrg      ;;
281449dc963fSmrg    esac
281549dc963fSmrg    ;;
281649dc963fSmrg  esac
281749dc963fSmrg  $ECHO "$win32_libid_type"
281849dc963fSmrg}
28194b0ead49Smrg
28204b0ead49Smrg
28214b0ead49Smrg
282249dc963fSmrg# func_extract_an_archive dir oldlib
282349dc963fSmrgfunc_extract_an_archive ()
282449dc963fSmrg{
282549dc963fSmrg    $opt_debug
282649dc963fSmrg    f_ex_an_ar_dir="$1"; shift
282749dc963fSmrg    f_ex_an_ar_oldlib="$1"
28287aa89044Smrg    if test "$lock_old_archive_extraction" = yes; then
28297aa89044Smrg      lockfile=$f_ex_an_ar_oldlib.lock
28307aa89044Smrg      until $opt_dry_run || ln "$progpath" "$lockfile" 2>/dev/null; do
28317aa89044Smrg	func_echo "Waiting for $lockfile to be removed"
28327aa89044Smrg	sleep 2
28337aa89044Smrg      done
28347aa89044Smrg    fi
28357aa89044Smrg    func_show_eval "(cd \$f_ex_an_ar_dir && $AR x \"\$f_ex_an_ar_oldlib\")" \
28367aa89044Smrg		   'stat=$?; rm -f "$lockfile"; exit $stat'
28377aa89044Smrg    if test "$lock_old_archive_extraction" = yes; then
28387aa89044Smrg      $opt_dry_run || rm -f "$lockfile"
28397aa89044Smrg    fi
284049dc963fSmrg    if ($AR t "$f_ex_an_ar_oldlib" | sort | sort -uc >/dev/null 2>&1); then
284149dc963fSmrg     :
284249dc963fSmrg    else
284349dc963fSmrg      func_fatal_error "object name conflicts in archive: $f_ex_an_ar_dir/$f_ex_an_ar_oldlib"
284449dc963fSmrg    fi
284549dc963fSmrg}
28464b0ead49Smrg
28474b0ead49Smrg
284849dc963fSmrg# func_extract_archives gentop oldlib ...
284949dc963fSmrgfunc_extract_archives ()
285049dc963fSmrg{
285149dc963fSmrg    $opt_debug
285249dc963fSmrg    my_gentop="$1"; shift
285349dc963fSmrg    my_oldlibs=${1+"$@"}
285449dc963fSmrg    my_oldobjs=""
285549dc963fSmrg    my_xlib=""
285649dc963fSmrg    my_xabs=""
285749dc963fSmrg    my_xdir=""
28584b0ead49Smrg
285949dc963fSmrg    for my_xlib in $my_oldlibs; do
286049dc963fSmrg      # Extract the objects.
286149dc963fSmrg      case $my_xlib in
286249dc963fSmrg	[\\/]* | [A-Za-z]:[\\/]*) my_xabs="$my_xlib" ;;
286349dc963fSmrg	*) my_xabs=`pwd`"/$my_xlib" ;;
286449dc963fSmrg      esac
286549dc963fSmrg      func_basename "$my_xlib"
286649dc963fSmrg      my_xlib="$func_basename_result"
286749dc963fSmrg      my_xlib_u=$my_xlib
286849dc963fSmrg      while :; do
286949dc963fSmrg        case " $extracted_archives " in
287049dc963fSmrg	*" $my_xlib_u "*)
287149dc963fSmrg	  func_arith $extracted_serial + 1
287249dc963fSmrg	  extracted_serial=$func_arith_result
287349dc963fSmrg	  my_xlib_u=lt$extracted_serial-$my_xlib ;;
287449dc963fSmrg	*) break ;;
287549dc963fSmrg	esac
287649dc963fSmrg      done
287749dc963fSmrg      extracted_archives="$extracted_archives $my_xlib_u"
287849dc963fSmrg      my_xdir="$my_gentop/$my_xlib_u"
28794b0ead49Smrg
288049dc963fSmrg      func_mkdir_p "$my_xdir"
28814b0ead49Smrg
288249dc963fSmrg      case $host in
288349dc963fSmrg      *-darwin*)
288449dc963fSmrg	func_verbose "Extracting $my_xabs"
288549dc963fSmrg	# Do not bother doing anything if just a dry run
288649dc963fSmrg	$opt_dry_run || {
288749dc963fSmrg	  darwin_orig_dir=`pwd`
288849dc963fSmrg	  cd $my_xdir || exit $?
288949dc963fSmrg	  darwin_archive=$my_xabs
289049dc963fSmrg	  darwin_curdir=`pwd`
289149dc963fSmrg	  darwin_base_archive=`basename "$darwin_archive"`
289249dc963fSmrg	  darwin_arches=`$LIPO -info "$darwin_archive" 2>/dev/null | $GREP Architectures 2>/dev/null || true`
289349dc963fSmrg	  if test -n "$darwin_arches"; then
289449dc963fSmrg	    darwin_arches=`$ECHO "$darwin_arches" | $SED -e 's/.*are://'`
289549dc963fSmrg	    darwin_arch=
289649dc963fSmrg	    func_verbose "$darwin_base_archive has multiple architectures $darwin_arches"
289749dc963fSmrg	    for darwin_arch in  $darwin_arches ; do
289849dc963fSmrg	      func_mkdir_p "unfat-$$/${darwin_base_archive}-${darwin_arch}"
289949dc963fSmrg	      $LIPO -thin $darwin_arch -output "unfat-$$/${darwin_base_archive}-${darwin_arch}/${darwin_base_archive}" "${darwin_archive}"
290049dc963fSmrg	      cd "unfat-$$/${darwin_base_archive}-${darwin_arch}"
290149dc963fSmrg	      func_extract_an_archive "`pwd`" "${darwin_base_archive}"
290249dc963fSmrg	      cd "$darwin_curdir"
290349dc963fSmrg	      $RM "unfat-$$/${darwin_base_archive}-${darwin_arch}/${darwin_base_archive}"
290449dc963fSmrg	    done # $darwin_arches
290549dc963fSmrg            ## Okay now we've a bunch of thin objects, gotta fatten them up :)
290649dc963fSmrg	    darwin_filelist=`find unfat-$$ -type f -name \*.o -print -o -name \*.lo -print | $SED -e "$basename" | sort -u`
290749dc963fSmrg	    darwin_file=
290849dc963fSmrg	    darwin_files=
290949dc963fSmrg	    for darwin_file in $darwin_filelist; do
29107aa89044Smrg	      darwin_files=`find unfat-$$ -name $darwin_file -print | sort | $NL2SP`
291149dc963fSmrg	      $LIPO -create -output "$darwin_file" $darwin_files
291249dc963fSmrg	    done # $darwin_filelist
291349dc963fSmrg	    $RM -rf unfat-$$
291449dc963fSmrg	    cd "$darwin_orig_dir"
29154b0ead49Smrg	  else
291649dc963fSmrg	    cd $darwin_orig_dir
291749dc963fSmrg	    func_extract_an_archive "$my_xdir" "$my_xabs"
291849dc963fSmrg	  fi # $darwin_arches
291949dc963fSmrg	} # !$opt_dry_run
292049dc963fSmrg	;;
292149dc963fSmrg      *)
292249dc963fSmrg        func_extract_an_archive "$my_xdir" "$my_xabs"
292349dc963fSmrg	;;
292449dc963fSmrg      esac
29257aa89044Smrg      my_oldobjs="$my_oldobjs "`find $my_xdir -name \*.$objext -print -o -name \*.lo -print | sort | $NL2SP`
292649dc963fSmrg    done
29274b0ead49Smrg
292849dc963fSmrg    func_extract_archives_result="$my_oldobjs"
292949dc963fSmrg}
29304b0ead49Smrg
29314b0ead49Smrg
29327aa89044Smrg# func_emit_wrapper [arg=no]
29337aa89044Smrg#
29347aa89044Smrg# Emit a libtool wrapper script on stdout.
29357aa89044Smrg# Don't directly open a file because we may want to
29367aa89044Smrg# incorporate the script contents within a cygwin/mingw
29377aa89044Smrg# wrapper executable.  Must ONLY be called from within
29387aa89044Smrg# func_mode_link because it depends on a number of variables
29397aa89044Smrg# set therein.
294049dc963fSmrg#
29417aa89044Smrg# ARG is the value that the WRAPPER_SCRIPT_BELONGS_IN_OBJDIR
29427aa89044Smrg# variable will take.  If 'yes', then the emitted script
29437aa89044Smrg# will assume that the directory in which it is stored is
29447aa89044Smrg# the $objdir directory.  This is a cygwin/mingw-specific
29457aa89044Smrg# behavior.
29467aa89044Smrgfunc_emit_wrapper ()
294749dc963fSmrg{
29487aa89044Smrg	func_emit_wrapper_arg1=${1-no}
29494b0ead49Smrg
295049dc963fSmrg	$ECHO "\
295149dc963fSmrg#! $SHELL
29524b0ead49Smrg
295349dc963fSmrg# $output - temporary wrapper script for $objdir/$outputname
295449dc963fSmrg# Generated by $PROGRAM (GNU $PACKAGE$TIMESTAMP) $VERSION
295549dc963fSmrg#
295649dc963fSmrg# The $output program cannot be directly executed until all the libtool
295749dc963fSmrg# libraries that it depends on are installed.
295849dc963fSmrg#
295949dc963fSmrg# This wrapper script should never be moved out of the build directory.
296049dc963fSmrg# If it is, it will not operate correctly.
29614b0ead49Smrg
296249dc963fSmrg# Sed substitution that helps us do robust quoting.  It backslashifies
296349dc963fSmrg# metacharacters that are still active within double-quoted strings.
296449dc963fSmrgsed_quote_subst='$sed_quote_subst'
29654b0ead49Smrg
296649dc963fSmrg# Be Bourne compatible
296749dc963fSmrgif test -n \"\${ZSH_VERSION+set}\" && (emulate sh) >/dev/null 2>&1; then
296849dc963fSmrg  emulate sh
296949dc963fSmrg  NULLCMD=:
297049dc963fSmrg  # Zsh 3.x and 4.x performs word splitting on \${1+\"\$@\"}, which
297149dc963fSmrg  # is contrary to our usage.  Disable this feature.
297249dc963fSmrg  alias -g '\${1+\"\$@\"}'='\"\$@\"'
297349dc963fSmrg  setopt NO_GLOB_SUBST
297449dc963fSmrgelse
297549dc963fSmrg  case \`(set -o) 2>/dev/null\` in *posix*) set -o posix;; esac
297649dc963fSmrgfi
297749dc963fSmrgBIN_SH=xpg4; export BIN_SH # for Tru64
297849dc963fSmrgDUALCASE=1; export DUALCASE # for MKS sh
29794b0ead49Smrg
298049dc963fSmrg# The HP-UX ksh and POSIX shell print the target directory to stdout
298149dc963fSmrg# if CDPATH is set.
298249dc963fSmrg(unset CDPATH) >/dev/null 2>&1 && unset CDPATH
29834b0ead49Smrg
298449dc963fSmrgrelink_command=\"$relink_command\"
29854b0ead49Smrg
298649dc963fSmrg# This environment variable determines our operation mode.
298749dc963fSmrgif test \"\$libtool_install_magic\" = \"$magic\"; then
298849dc963fSmrg  # install mode needs the following variables:
298949dc963fSmrg  generated_by_libtool_version='$macro_version'
299049dc963fSmrg  notinst_deplibs='$notinst_deplibs'
299149dc963fSmrgelse
299249dc963fSmrg  # When we are sourced in execute mode, \$file and \$ECHO are already set.
299349dc963fSmrg  if test \"\$libtool_execute_magic\" != \"$magic\"; then
29947aa89044Smrg    file=\"\$0\""
29957aa89044Smrg
29967aa89044Smrg    qECHO=`$ECHO "$ECHO" | $SED "$sed_quote_subst"`
29977aa89044Smrg    $ECHO "\
29987aa89044Smrg
29997aa89044Smrg# A function that is used when there is no print builtin or printf.
30007aa89044Smrgfunc_fallback_echo ()
30017aa89044Smrg{
30027aa89044Smrg  eval 'cat <<_LTECHO_EOF
30037aa89044Smrg\$1
30047aa89044Smrg_LTECHO_EOF'
30057aa89044Smrg}
30067aa89044Smrg    ECHO=\"$qECHO\"
30077aa89044Smrg  fi
30087aa89044Smrg
30097aa89044Smrg# Very basic option parsing. These options are (a) specific to
30107aa89044Smrg# the libtool wrapper, (b) are identical between the wrapper
30117aa89044Smrg# /script/ and the wrapper /executable/ which is used only on
30127aa89044Smrg# windows platforms, and (c) all begin with the string "--lt-"
30137aa89044Smrg# (application programs are unlikely to have options which match
30147aa89044Smrg# this pattern).
30157aa89044Smrg#
30167aa89044Smrg# There are only two supported options: --lt-debug and
30177aa89044Smrg# --lt-dump-script. There is, deliberately, no --lt-help.
30187aa89044Smrg#
30197aa89044Smrg# The first argument to this parsing function should be the
30207aa89044Smrg# script's $0 value, followed by "$@".
30217aa89044Smrglt_option_debug=
30227aa89044Smrgfunc_parse_lt_options ()
30237aa89044Smrg{
30247aa89044Smrg  lt_script_arg0=\$0
30257aa89044Smrg  shift
30267aa89044Smrg  for lt_opt
30277aa89044Smrg  do
30287aa89044Smrg    case \"\$lt_opt\" in
30297aa89044Smrg    --lt-debug) lt_option_debug=1 ;;
30307aa89044Smrg    --lt-dump-script)
30317aa89044Smrg        lt_dump_D=\`\$ECHO \"X\$lt_script_arg0\" | $SED -e 's/^X//' -e 's%/[^/]*$%%'\`
30327aa89044Smrg        test \"X\$lt_dump_D\" = \"X\$lt_script_arg0\" && lt_dump_D=.
30337aa89044Smrg        lt_dump_F=\`\$ECHO \"X\$lt_script_arg0\" | $SED -e 's/^X//' -e 's%^.*/%%'\`
30347aa89044Smrg        cat \"\$lt_dump_D/\$lt_dump_F\"
30357aa89044Smrg        exit 0
30367aa89044Smrg      ;;
30377aa89044Smrg    --lt-*)
30387aa89044Smrg        \$ECHO \"Unrecognized --lt- option: '\$lt_opt'\" 1>&2
30397aa89044Smrg        exit 1
30407aa89044Smrg      ;;
30417aa89044Smrg    esac
30427aa89044Smrg  done
30437aa89044Smrg
30447aa89044Smrg  # Print the debug banner immediately:
30457aa89044Smrg  if test -n \"\$lt_option_debug\"; then
30467aa89044Smrg    echo \"${outputname}:${output}:\${LINENO}: libtool wrapper (GNU $PACKAGE$TIMESTAMP) $VERSION\" 1>&2
30477aa89044Smrg  fi
30487aa89044Smrg}
30497aa89044Smrg
30507aa89044Smrg# Used when --lt-debug. Prints its arguments to stdout
30517aa89044Smrg# (redirection is the responsibility of the caller)
30527aa89044Smrgfunc_lt_dump_args ()
30537aa89044Smrg{
30547aa89044Smrg  lt_dump_args_N=1;
30557aa89044Smrg  for lt_arg
30567aa89044Smrg  do
30577aa89044Smrg    \$ECHO \"${outputname}:${output}:\${LINENO}: newargv[\$lt_dump_args_N]: \$lt_arg\"
30587aa89044Smrg    lt_dump_args_N=\`expr \$lt_dump_args_N + 1\`
30597aa89044Smrg  done
30607aa89044Smrg}
30617aa89044Smrg
30627aa89044Smrg# Core function for launching the target application
30637aa89044Smrgfunc_exec_program_core ()
30647aa89044Smrg{
306549dc963fSmrg"
30667aa89044Smrg  case $host in
30677aa89044Smrg  # Backslashes separate directories on plain windows
30687aa89044Smrg  *-*-mingw | *-*-os2* | *-cegcc*)
30697aa89044Smrg    $ECHO "\
30707aa89044Smrg      if test -n \"\$lt_option_debug\"; then
30717aa89044Smrg        \$ECHO \"${outputname}:${output}:\${LINENO}: newargv[0]: \$progdir\\\\\$program\" 1>&2
30727aa89044Smrg        func_lt_dump_args \${1+\"\$@\"} 1>&2
30737aa89044Smrg      fi
30747aa89044Smrg      exec \"\$progdir\\\\\$program\" \${1+\"\$@\"}
30757aa89044Smrg"
30767aa89044Smrg    ;;
30777aa89044Smrg
30787aa89044Smrg  *)
30797aa89044Smrg    $ECHO "\
30807aa89044Smrg      if test -n \"\$lt_option_debug\"; then
30817aa89044Smrg        \$ECHO \"${outputname}:${output}:\${LINENO}: newargv[0]: \$progdir/\$program\" 1>&2
30827aa89044Smrg        func_lt_dump_args \${1+\"\$@\"} 1>&2
30837aa89044Smrg      fi
30847aa89044Smrg      exec \"\$progdir/\$program\" \${1+\"\$@\"}
30857aa89044Smrg"
30867aa89044Smrg    ;;
30877aa89044Smrg  esac
30887aa89044Smrg  $ECHO "\
30897aa89044Smrg      \$ECHO \"\$0: cannot exec \$program \$*\" 1>&2
30907aa89044Smrg      exit 1
30917aa89044Smrg}
30927aa89044Smrg
30937aa89044Smrg# A function to encapsulate launching the target application
30947aa89044Smrg# Strips options in the --lt-* namespace from \$@ and
30957aa89044Smrg# launches target application with the remaining arguments.
30967aa89044Smrgfunc_exec_program ()
30977aa89044Smrg{
30987aa89044Smrg  for lt_wr_arg
30997aa89044Smrg  do
31007aa89044Smrg    case \$lt_wr_arg in
31017aa89044Smrg    --lt-*) ;;
31027aa89044Smrg    *) set x \"\$@\" \"\$lt_wr_arg\"; shift;;
31037aa89044Smrg    esac
31047aa89044Smrg    shift
31057aa89044Smrg  done
31067aa89044Smrg  func_exec_program_core \${1+\"\$@\"}
31077aa89044Smrg}
31087aa89044Smrg
31097aa89044Smrg  # Parse options
31107aa89044Smrg  func_parse_lt_options \"\$0\" \${1+\"\$@\"}
31114b0ead49Smrg
311249dc963fSmrg  # Find the directory that this script lives in.
31137aa89044Smrg  thisdir=\`\$ECHO \"\$file\" | $SED 's%/[^/]*$%%'\`
311449dc963fSmrg  test \"x\$thisdir\" = \"x\$file\" && thisdir=.
31154b0ead49Smrg
311649dc963fSmrg  # Follow symbolic links until we get to the real thisdir.
31177aa89044Smrg  file=\`ls -ld \"\$file\" | $SED -n 's/.*-> //p'\`
311849dc963fSmrg  while test -n \"\$file\"; do
31197aa89044Smrg    destdir=\`\$ECHO \"\$file\" | $SED 's%/[^/]*\$%%'\`
31204b0ead49Smrg
312149dc963fSmrg    # If there was a directory component, then change thisdir.
312249dc963fSmrg    if test \"x\$destdir\" != \"x\$file\"; then
312349dc963fSmrg      case \"\$destdir\" in
312449dc963fSmrg      [\\\\/]* | [A-Za-z]:[\\\\/]*) thisdir=\"\$destdir\" ;;
312549dc963fSmrg      *) thisdir=\"\$thisdir/\$destdir\" ;;
31264b0ead49Smrg      esac
312749dc963fSmrg    fi
31284b0ead49Smrg
31297aa89044Smrg    file=\`\$ECHO \"\$file\" | $SED 's%^.*/%%'\`
31307aa89044Smrg    file=\`ls -ld \"\$thisdir/\$file\" | $SED -n 's/.*-> //p'\`
313149dc963fSmrg  done
31324b0ead49Smrg
313349dc963fSmrg  # Usually 'no', except on cygwin/mingw when embedded into
313449dc963fSmrg  # the cwrapper.
31357aa89044Smrg  WRAPPER_SCRIPT_BELONGS_IN_OBJDIR=$func_emit_wrapper_arg1
313649dc963fSmrg  if test \"\$WRAPPER_SCRIPT_BELONGS_IN_OBJDIR\" = \"yes\"; then
313749dc963fSmrg    # special case for '.'
313849dc963fSmrg    if test \"\$thisdir\" = \".\"; then
313949dc963fSmrg      thisdir=\`pwd\`
314049dc963fSmrg    fi
314149dc963fSmrg    # remove .libs from thisdir
314249dc963fSmrg    case \"\$thisdir\" in
31437aa89044Smrg    *[\\\\/]$objdir ) thisdir=\`\$ECHO \"\$thisdir\" | $SED 's%[\\\\/][^\\\\/]*$%%'\` ;;
314449dc963fSmrg    $objdir )   thisdir=. ;;
314549dc963fSmrg    esac
314649dc963fSmrg  fi
314749dc963fSmrg
314849dc963fSmrg  # Try to get the absolute directory name.
314949dc963fSmrg  absdir=\`cd \"\$thisdir\" && pwd\`
315049dc963fSmrg  test -n \"\$absdir\" && thisdir=\"\$absdir\"
315149dc963fSmrg"
315249dc963fSmrg
315349dc963fSmrg	if test "$fast_install" = yes; then
315449dc963fSmrg	  $ECHO "\
315549dc963fSmrg  program=lt-'$outputname'$exeext
315649dc963fSmrg  progdir=\"\$thisdir/$objdir\"
315749dc963fSmrg
315849dc963fSmrg  if test ! -f \"\$progdir/\$program\" ||
315949dc963fSmrg     { file=\`ls -1dt \"\$progdir/\$program\" \"\$progdir/../\$program\" 2>/dev/null | ${SED} 1q\`; \\
316049dc963fSmrg       test \"X\$file\" != \"X\$progdir/\$program\"; }; then
316149dc963fSmrg
316249dc963fSmrg    file=\"\$\$-\$program\"
316349dc963fSmrg
316449dc963fSmrg    if test ! -d \"\$progdir\"; then
316549dc963fSmrg      $MKDIR \"\$progdir\"
316649dc963fSmrg    else
316749dc963fSmrg      $RM \"\$progdir/\$file\"
316849dc963fSmrg    fi"
316949dc963fSmrg
317049dc963fSmrg	  $ECHO "\
317149dc963fSmrg
317249dc963fSmrg    # relink executable if necessary
317349dc963fSmrg    if test -n \"\$relink_command\"; then
317449dc963fSmrg      if relink_command_output=\`eval \$relink_command 2>&1\`; then :
317549dc963fSmrg      else
317649dc963fSmrg	$ECHO \"\$relink_command_output\" >&2
317749dc963fSmrg	$RM \"\$progdir/\$file\"
317849dc963fSmrg	exit 1
31794b0ead49Smrg      fi
318049dc963fSmrg    fi
31814b0ead49Smrg
318249dc963fSmrg    $MV \"\$progdir/\$file\" \"\$progdir/\$program\" 2>/dev/null ||
318349dc963fSmrg    { $RM \"\$progdir/\$program\";
318449dc963fSmrg      $MV \"\$progdir/\$file\" \"\$progdir/\$program\"; }
318549dc963fSmrg    $RM \"\$progdir/\$file\"
318649dc963fSmrg  fi"
318749dc963fSmrg	else
318849dc963fSmrg	  $ECHO "\
318949dc963fSmrg  program='$outputname'
319049dc963fSmrg  progdir=\"\$thisdir/$objdir\"
319149dc963fSmrg"
31924b0ead49Smrg	fi
31934b0ead49Smrg
319449dc963fSmrg	$ECHO "\
31954b0ead49Smrg
319649dc963fSmrg  if test -f \"\$progdir/\$program\"; then"
31974b0ead49Smrg
319849dc963fSmrg	# Export our shlibpath_var if we have one.
319949dc963fSmrg	if test "$shlibpath_overrides_runpath" = yes && test -n "$shlibpath_var" && test -n "$temp_rpath"; then
320049dc963fSmrg	  $ECHO "\
320149dc963fSmrg    # Add our own library path to $shlibpath_var
320249dc963fSmrg    $shlibpath_var=\"$temp_rpath\$$shlibpath_var\"
320349dc963fSmrg
320449dc963fSmrg    # Some systems cannot cope with colon-terminated $shlibpath_var
320549dc963fSmrg    # The second colon is a workaround for a bug in BeOS R4 sed
32067aa89044Smrg    $shlibpath_var=\`\$ECHO \"\$$shlibpath_var\" | $SED 's/::*\$//'\`
32074b0ead49Smrg
320849dc963fSmrg    export $shlibpath_var
320949dc963fSmrg"
32104b0ead49Smrg	fi
32114b0ead49Smrg
321249dc963fSmrg	# fixup the dll searchpath if we need to.
321349dc963fSmrg	if test -n "$dllsearchpath"; then
321449dc963fSmrg	  $ECHO "\
321549dc963fSmrg    # Add the dll search path components to the executable PATH
321649dc963fSmrg    PATH=$dllsearchpath:\$PATH
321749dc963fSmrg"
321849dc963fSmrg	fi
32194b0ead49Smrg
322049dc963fSmrg	$ECHO "\
322149dc963fSmrg    if test \"\$libtool_execute_magic\" != \"$magic\"; then
322249dc963fSmrg      # Run the actual program with our arguments.
32237aa89044Smrg      func_exec_program \${1+\"\$@\"}
322449dc963fSmrg    fi
322549dc963fSmrg  else
322649dc963fSmrg    # The program doesn't exist.
322749dc963fSmrg    \$ECHO \"\$0: error: \\\`\$progdir/\$program' does not exist\" 1>&2
322849dc963fSmrg    \$ECHO \"This script is just a wrapper for \$program.\" 1>&2
32297aa89044Smrg    \$ECHO \"See the $PACKAGE documentation for more information.\" 1>&2
323049dc963fSmrg    exit 1
323149dc963fSmrg  fi
323249dc963fSmrgfi\
323349dc963fSmrg"
323449dc963fSmrg}
32354b0ead49Smrg
32364b0ead49Smrg
323749dc963fSmrg# func_to_host_path arg
323849dc963fSmrg#
323949dc963fSmrg# Convert paths to host format when used with build tools.
324049dc963fSmrg# Intended for use with "native" mingw (where libtool itself
324149dc963fSmrg# is running under the msys shell), or in the following cross-
324249dc963fSmrg# build environments:
324349dc963fSmrg#    $build          $host
324449dc963fSmrg#    mingw (msys)    mingw  [e.g. native]
324549dc963fSmrg#    cygwin          mingw
324649dc963fSmrg#    *nix + wine     mingw
324749dc963fSmrg# where wine is equipped with the `winepath' executable.
324849dc963fSmrg# In the native mingw case, the (msys) shell automatically
324949dc963fSmrg# converts paths for any non-msys applications it launches,
325049dc963fSmrg# but that facility isn't available from inside the cwrapper.
325149dc963fSmrg# Similar accommodations are necessary for $host mingw and
325249dc963fSmrg# $build cygwin.  Calling this function does no harm for other
325349dc963fSmrg# $host/$build combinations not listed above.
325449dc963fSmrg#
325549dc963fSmrg# ARG is the path (on $build) that should be converted to
325649dc963fSmrg# the proper representation for $host. The result is stored
325749dc963fSmrg# in $func_to_host_path_result.
325849dc963fSmrgfunc_to_host_path ()
325949dc963fSmrg{
326049dc963fSmrg  func_to_host_path_result="$1"
32617aa89044Smrg  if test -n "$1"; then
326249dc963fSmrg    case $host in
326349dc963fSmrg      *mingw* )
326449dc963fSmrg        lt_sed_naive_backslashify='s|\\\\*|\\|g;s|/|\\|g;s|\\|\\\\|g'
326549dc963fSmrg        case $build in
326649dc963fSmrg          *mingw* ) # actually, msys
326749dc963fSmrg            # awkward: cmd appends spaces to result
32687aa89044Smrg            func_to_host_path_result=`( cmd //c echo "$1" ) 2>/dev/null |
32697aa89044Smrg              $SED -e 's/[ ]*$//' -e "$lt_sed_naive_backslashify"`
327049dc963fSmrg            ;;
327149dc963fSmrg          *cygwin* )
32727aa89044Smrg            func_to_host_path_result=`cygpath -w "$1" |
32737aa89044Smrg	      $SED -e "$lt_sed_naive_backslashify"`
327449dc963fSmrg            ;;
327549dc963fSmrg          * )
327649dc963fSmrg            # Unfortunately, winepath does not exit with a non-zero
327749dc963fSmrg            # error code, so we are forced to check the contents of
327849dc963fSmrg            # stdout. On the other hand, if the command is not
327949dc963fSmrg            # found, the shell will set an exit code of 127 and print
328049dc963fSmrg            # *an error message* to stdout. So we must check for both
328149dc963fSmrg            # error code of zero AND non-empty stdout, which explains
328249dc963fSmrg            # the odd construction:
328349dc963fSmrg            func_to_host_path_tmp1=`winepath -w "$1" 2>/dev/null`
328449dc963fSmrg            if test "$?" -eq 0 && test -n "${func_to_host_path_tmp1}"; then
32857aa89044Smrg              func_to_host_path_result=`$ECHO "$func_to_host_path_tmp1" |
328649dc963fSmrg                $SED -e "$lt_sed_naive_backslashify"`
328749dc963fSmrg            else
328849dc963fSmrg              # Allow warning below.
32897aa89044Smrg              func_to_host_path_result=
329049dc963fSmrg            fi
329149dc963fSmrg            ;;
329249dc963fSmrg        esac
329349dc963fSmrg        if test -z "$func_to_host_path_result" ; then
329449dc963fSmrg          func_error "Could not determine host path corresponding to"
32957aa89044Smrg          func_error "  \`$1'"
329649dc963fSmrg          func_error "Continuing, but uninstalled executables may not work."
329749dc963fSmrg          # Fallback:
329849dc963fSmrg          func_to_host_path_result="$1"
329949dc963fSmrg        fi
330049dc963fSmrg        ;;
330149dc963fSmrg    esac
330249dc963fSmrg  fi
330349dc963fSmrg}
330449dc963fSmrg# end: func_to_host_path
33054b0ead49Smrg
330649dc963fSmrg# func_to_host_pathlist arg
330749dc963fSmrg#
330849dc963fSmrg# Convert pathlists to host format when used with build tools.
330949dc963fSmrg# See func_to_host_path(), above. This function supports the
331049dc963fSmrg# following $build/$host combinations (but does no harm for
331149dc963fSmrg# combinations not listed here):
331249dc963fSmrg#    $build          $host
331349dc963fSmrg#    mingw (msys)    mingw  [e.g. native]
331449dc963fSmrg#    cygwin          mingw
331549dc963fSmrg#    *nix + wine     mingw
331649dc963fSmrg#
331749dc963fSmrg# Path separators are also converted from $build format to
331849dc963fSmrg# $host format. If ARG begins or ends with a path separator
331949dc963fSmrg# character, it is preserved (but converted to $host format)
332049dc963fSmrg# on output.
332149dc963fSmrg#
332249dc963fSmrg# ARG is a pathlist (on $build) that should be converted to
332349dc963fSmrg# the proper representation on $host. The result is stored
332449dc963fSmrg# in $func_to_host_pathlist_result.
332549dc963fSmrgfunc_to_host_pathlist ()
332649dc963fSmrg{
332749dc963fSmrg  func_to_host_pathlist_result="$1"
33287aa89044Smrg  if test -n "$1"; then
332949dc963fSmrg    case $host in
333049dc963fSmrg      *mingw* )
333149dc963fSmrg        lt_sed_naive_backslashify='s|\\\\*|\\|g;s|/|\\|g;s|\\|\\\\|g'
333249dc963fSmrg        # Remove leading and trailing path separator characters from
333349dc963fSmrg        # ARG. msys behavior is inconsistent here, cygpath turns them
333449dc963fSmrg        # into '.;' and ';.', and winepath ignores them completely.
33357aa89044Smrg	func_stripname : : "$1"
33367aa89044Smrg        func_to_host_pathlist_tmp1=$func_stripname_result
333749dc963fSmrg        case $build in
333849dc963fSmrg          *mingw* ) # Actually, msys.
333949dc963fSmrg            # Awkward: cmd appends spaces to result.
33407aa89044Smrg            func_to_host_pathlist_result=`
33417aa89044Smrg	      ( cmd //c echo "$func_to_host_pathlist_tmp1" ) 2>/dev/null |
33427aa89044Smrg	      $SED -e 's/[ ]*$//' -e "$lt_sed_naive_backslashify"`
334349dc963fSmrg            ;;
334449dc963fSmrg          *cygwin* )
33457aa89044Smrg            func_to_host_pathlist_result=`cygpath -w -p "$func_to_host_pathlist_tmp1" |
334649dc963fSmrg              $SED -e "$lt_sed_naive_backslashify"`
334749dc963fSmrg            ;;
334849dc963fSmrg          * )
334949dc963fSmrg            # unfortunately, winepath doesn't convert pathlists
335049dc963fSmrg            func_to_host_pathlist_result=""
335149dc963fSmrg            func_to_host_pathlist_oldIFS=$IFS
335249dc963fSmrg            IFS=:
335349dc963fSmrg            for func_to_host_pathlist_f in $func_to_host_pathlist_tmp1 ; do
335449dc963fSmrg              IFS=$func_to_host_pathlist_oldIFS
335549dc963fSmrg              if test -n "$func_to_host_pathlist_f" ; then
335649dc963fSmrg                func_to_host_path "$func_to_host_pathlist_f"
335749dc963fSmrg                if test -n "$func_to_host_path_result" ; then
335849dc963fSmrg                  if test -z "$func_to_host_pathlist_result" ; then
335949dc963fSmrg                    func_to_host_pathlist_result="$func_to_host_path_result"
336049dc963fSmrg                  else
33617aa89044Smrg                    func_append func_to_host_pathlist_result ";$func_to_host_path_result"
336249dc963fSmrg                  fi
336349dc963fSmrg                fi
336449dc963fSmrg              fi
336549dc963fSmrg            done
336649dc963fSmrg            IFS=$func_to_host_pathlist_oldIFS
336749dc963fSmrg            ;;
336849dc963fSmrg        esac
33697aa89044Smrg        if test -z "$func_to_host_pathlist_result"; then
337049dc963fSmrg          func_error "Could not determine the host path(s) corresponding to"
33717aa89044Smrg          func_error "  \`$1'"
337249dc963fSmrg          func_error "Continuing, but uninstalled executables may not work."
337349dc963fSmrg          # Fallback. This may break if $1 contains DOS-style drive
337449dc963fSmrg          # specifications. The fix is not to complicate the expression
337549dc963fSmrg          # below, but for the user to provide a working wine installation
337649dc963fSmrg          # with winepath so that path translation in the cross-to-mingw
337749dc963fSmrg          # case works properly.
337849dc963fSmrg          lt_replace_pathsep_nix_to_dos="s|:|;|g"
337949dc963fSmrg          func_to_host_pathlist_result=`echo "$func_to_host_pathlist_tmp1" |\
338049dc963fSmrg            $SED -e "$lt_replace_pathsep_nix_to_dos"`
338149dc963fSmrg        fi
338249dc963fSmrg        # Now, add the leading and trailing path separators back
338349dc963fSmrg        case "$1" in
338449dc963fSmrg          :* ) func_to_host_pathlist_result=";$func_to_host_pathlist_result"
338549dc963fSmrg            ;;
338649dc963fSmrg        esac
338749dc963fSmrg        case "$1" in
33887aa89044Smrg          *: ) func_append func_to_host_pathlist_result ";"
338949dc963fSmrg            ;;
339049dc963fSmrg        esac
339149dc963fSmrg        ;;
339249dc963fSmrg    esac
339349dc963fSmrg  fi
339449dc963fSmrg}
339549dc963fSmrg# end: func_to_host_pathlist
33964b0ead49Smrg
339749dc963fSmrg# func_emit_cwrapperexe_src
339849dc963fSmrg# emit the source code for a wrapper executable on stdout
339949dc963fSmrg# Must ONLY be called from within func_mode_link because
340049dc963fSmrg# it depends on a number of variable set therein.
340149dc963fSmrgfunc_emit_cwrapperexe_src ()
340249dc963fSmrg{
340349dc963fSmrg	cat <<EOF
34044b0ead49Smrg
340549dc963fSmrg/* $cwrappersource - temporary wrapper executable for $objdir/$outputname
340649dc963fSmrg   Generated by $PROGRAM (GNU $PACKAGE$TIMESTAMP) $VERSION
34074b0ead49Smrg
340849dc963fSmrg   The $output program cannot be directly executed until all the libtool
340949dc963fSmrg   libraries that it depends on are installed.
34104b0ead49Smrg
341149dc963fSmrg   This wrapper executable should never be moved out of the build directory.
341249dc963fSmrg   If it is, it will not operate correctly.
341349dc963fSmrg*/
341449dc963fSmrgEOF
341549dc963fSmrg	    cat <<"EOF"
34167aa89044Smrg#ifdef _MSC_VER
34177aa89044Smrg# define _CRT_SECURE_NO_DEPRECATE 1
34187aa89044Smrg#endif
341949dc963fSmrg#include <stdio.h>
342049dc963fSmrg#include <stdlib.h>
342149dc963fSmrg#ifdef _MSC_VER
342249dc963fSmrg# include <direct.h>
342349dc963fSmrg# include <process.h>
342449dc963fSmrg# include <io.h>
342549dc963fSmrg#else
342649dc963fSmrg# include <unistd.h>
342749dc963fSmrg# include <stdint.h>
342849dc963fSmrg# ifdef __CYGWIN__
342949dc963fSmrg#  include <io.h>
343049dc963fSmrg# endif
343149dc963fSmrg#endif
343249dc963fSmrg#include <malloc.h>
343349dc963fSmrg#include <stdarg.h>
343449dc963fSmrg#include <assert.h>
343549dc963fSmrg#include <string.h>
343649dc963fSmrg#include <ctype.h>
343749dc963fSmrg#include <errno.h>
343849dc963fSmrg#include <fcntl.h>
343949dc963fSmrg#include <sys/stat.h>
34404b0ead49Smrg
34417aa89044Smrg/* declarations of non-ANSI functions */
34427aa89044Smrg#if defined(__MINGW32__)
34437aa89044Smrg# ifdef __STRICT_ANSI__
34447aa89044Smrgint _putenv (const char *);
34457aa89044Smrg# endif
34467aa89044Smrg#elif defined(__CYGWIN__)
34477aa89044Smrg# ifdef __STRICT_ANSI__
34487aa89044Smrgchar *realpath (const char *, char *);
34497aa89044Smrgint putenv (char *);
34507aa89044Smrgint setenv (const char *, const char *, int);
34517aa89044Smrg# endif
34527aa89044Smrg/* #elif defined (other platforms) ... */
34537aa89044Smrg#endif
34547aa89044Smrg
34557aa89044Smrg/* portability defines, excluding path handling macros */
34567aa89044Smrg#if defined(_MSC_VER)
34577aa89044Smrg# define setmode _setmode
34587aa89044Smrg# define stat    _stat
34597aa89044Smrg# define chmod   _chmod
34607aa89044Smrg# define getcwd  _getcwd
34617aa89044Smrg# define putenv  _putenv
34627aa89044Smrg# define S_IXUSR _S_IEXEC
34637aa89044Smrg# ifndef _INTPTR_T_DEFINED
34647aa89044Smrg#  define _INTPTR_T_DEFINED
34657aa89044Smrg#  define intptr_t int
34667aa89044Smrg# endif
34677aa89044Smrg#elif defined(__MINGW32__)
34687aa89044Smrg# define setmode _setmode
34697aa89044Smrg# define stat    _stat
34707aa89044Smrg# define chmod   _chmod
34717aa89044Smrg# define getcwd  _getcwd
34727aa89044Smrg# define putenv  _putenv
34737aa89044Smrg#elif defined(__CYGWIN__)
34747aa89044Smrg# define HAVE_SETENV
34757aa89044Smrg# define FOPEN_WB "wb"
34767aa89044Smrg/* #elif defined (other platforms) ... */
34777aa89044Smrg#endif
34787aa89044Smrg
347949dc963fSmrg#if defined(PATH_MAX)
348049dc963fSmrg# define LT_PATHMAX PATH_MAX
348149dc963fSmrg#elif defined(MAXPATHLEN)
348249dc963fSmrg# define LT_PATHMAX MAXPATHLEN
348349dc963fSmrg#else
348449dc963fSmrg# define LT_PATHMAX 1024
348549dc963fSmrg#endif
34864b0ead49Smrg
348749dc963fSmrg#ifndef S_IXOTH
348849dc963fSmrg# define S_IXOTH 0
348949dc963fSmrg#endif
349049dc963fSmrg#ifndef S_IXGRP
349149dc963fSmrg# define S_IXGRP 0
349249dc963fSmrg#endif
34934b0ead49Smrg
34947aa89044Smrg/* path handling portability macros */
349549dc963fSmrg#ifndef DIR_SEPARATOR
349649dc963fSmrg# define DIR_SEPARATOR '/'
349749dc963fSmrg# define PATH_SEPARATOR ':'
349849dc963fSmrg#endif
34994b0ead49Smrg
350049dc963fSmrg#if defined (_WIN32) || defined (__MSDOS__) || defined (__DJGPP__) || \
350149dc963fSmrg  defined (__OS2__)
350249dc963fSmrg# define HAVE_DOS_BASED_FILE_SYSTEM
350349dc963fSmrg# define FOPEN_WB "wb"
350449dc963fSmrg# ifndef DIR_SEPARATOR_2
350549dc963fSmrg#  define DIR_SEPARATOR_2 '\\'
350649dc963fSmrg# endif
350749dc963fSmrg# ifndef PATH_SEPARATOR_2
350849dc963fSmrg#  define PATH_SEPARATOR_2 ';'
350949dc963fSmrg# endif
351049dc963fSmrg#endif
35114b0ead49Smrg
351249dc963fSmrg#ifndef DIR_SEPARATOR_2
351349dc963fSmrg# define IS_DIR_SEPARATOR(ch) ((ch) == DIR_SEPARATOR)
351449dc963fSmrg#else /* DIR_SEPARATOR_2 */
351549dc963fSmrg# define IS_DIR_SEPARATOR(ch) \
351649dc963fSmrg	(((ch) == DIR_SEPARATOR) || ((ch) == DIR_SEPARATOR_2))
351749dc963fSmrg#endif /* DIR_SEPARATOR_2 */
35184b0ead49Smrg
351949dc963fSmrg#ifndef PATH_SEPARATOR_2
352049dc963fSmrg# define IS_PATH_SEPARATOR(ch) ((ch) == PATH_SEPARATOR)
352149dc963fSmrg#else /* PATH_SEPARATOR_2 */
352249dc963fSmrg# define IS_PATH_SEPARATOR(ch) ((ch) == PATH_SEPARATOR_2)
352349dc963fSmrg#endif /* PATH_SEPARATOR_2 */
35244b0ead49Smrg
352549dc963fSmrg#ifndef FOPEN_WB
352649dc963fSmrg# define FOPEN_WB "w"
352749dc963fSmrg#endif
352849dc963fSmrg#ifndef _O_BINARY
352949dc963fSmrg# define _O_BINARY 0
353049dc963fSmrg#endif
35314b0ead49Smrg
353249dc963fSmrg#define XMALLOC(type, num)      ((type *) xmalloc ((num) * sizeof(type)))
353349dc963fSmrg#define XFREE(stale) do { \
353449dc963fSmrg  if (stale) { free ((void *) stale); stale = 0; } \
353549dc963fSmrg} while (0)
35364b0ead49Smrg
35377aa89044Smrg#if defined(LT_DEBUGWRAPPER)
35387aa89044Smrgstatic int lt_debug = 1;
353949dc963fSmrg#else
35407aa89044Smrgstatic int lt_debug = 0;
354149dc963fSmrg#endif
35424b0ead49Smrg
35437aa89044Smrgconst char *program_name = "libtool-wrapper"; /* in case xstrdup fails */
35444b0ead49Smrg
354549dc963fSmrgvoid *xmalloc (size_t num);
354649dc963fSmrgchar *xstrdup (const char *string);
354749dc963fSmrgconst char *base_name (const char *name);
354849dc963fSmrgchar *find_executable (const char *wrapper);
354949dc963fSmrgchar *chase_symlinks (const char *pathspec);
355049dc963fSmrgint make_executable (const char *path);
355149dc963fSmrgint check_executable (const char *path);
355249dc963fSmrgchar *strendzap (char *str, const char *pat);
35537aa89044Smrgvoid lt_debugprintf (const char *file, int line, const char *fmt, ...);
35547aa89044Smrgvoid lt_fatal (const char *file, int line, const char *message, ...);
35557aa89044Smrgstatic const char *nonnull (const char *s);
35567aa89044Smrgstatic const char *nonempty (const char *s);
355749dc963fSmrgvoid lt_setenv (const char *name, const char *value);
355849dc963fSmrgchar *lt_extend_str (const char *orig_value, const char *add, int to_end);
355949dc963fSmrgvoid lt_update_exe_path (const char *name, const char *value);
356049dc963fSmrgvoid lt_update_lib_path (const char *name, const char *value);
35617aa89044Smrgchar **prepare_spawn (char **argv);
35627aa89044Smrgvoid lt_dump_script (FILE *f);
356349dc963fSmrgEOF
356449dc963fSmrg
356549dc963fSmrg	    cat <<EOF
356649dc963fSmrgconst char * MAGIC_EXE = "$magic_exe";
356749dc963fSmrgconst char * LIB_PATH_VARNAME = "$shlibpath_var";
356849dc963fSmrgEOF
35694b0ead49Smrg
357049dc963fSmrg	    if test "$shlibpath_overrides_runpath" = yes && test -n "$shlibpath_var" && test -n "$temp_rpath"; then
357149dc963fSmrg              func_to_host_pathlist "$temp_rpath"
357249dc963fSmrg	      cat <<EOF
357349dc963fSmrgconst char * LIB_PATH_VALUE   = "$func_to_host_pathlist_result";
357449dc963fSmrgEOF
357549dc963fSmrg	    else
357649dc963fSmrg	      cat <<"EOF"
357749dc963fSmrgconst char * LIB_PATH_VALUE   = "";
357849dc963fSmrgEOF
35794b0ead49Smrg	    fi
35804b0ead49Smrg
358149dc963fSmrg	    if test -n "$dllsearchpath"; then
358249dc963fSmrg              func_to_host_pathlist "$dllsearchpath:"
358349dc963fSmrg	      cat <<EOF
358449dc963fSmrgconst char * EXE_PATH_VARNAME = "PATH";
358549dc963fSmrgconst char * EXE_PATH_VALUE   = "$func_to_host_pathlist_result";
35864b0ead49SmrgEOF
35874b0ead49Smrg	    else
358849dc963fSmrg	      cat <<"EOF"
358949dc963fSmrgconst char * EXE_PATH_VARNAME = "";
359049dc963fSmrgconst char * EXE_PATH_VALUE   = "";
359149dc963fSmrgEOF
35924b0ead49Smrg	    fi
359349dc963fSmrg
359449dc963fSmrg	    if test "$fast_install" = yes; then
359549dc963fSmrg	      cat <<EOF
359649dc963fSmrgconst char * TARGET_PROGRAM_NAME = "lt-$outputname"; /* hopefully, no .exe */
359749dc963fSmrgEOF
35984b0ead49Smrg	    else
359949dc963fSmrg	      cat <<EOF
360049dc963fSmrgconst char * TARGET_PROGRAM_NAME = "$outputname"; /* hopefully, no .exe */
360149dc963fSmrgEOF
36024b0ead49Smrg	    fi
36034b0ead49Smrg
36044b0ead49Smrg
360549dc963fSmrg	    cat <<"EOF"
36064b0ead49Smrg
360749dc963fSmrg#define LTWRAPPER_OPTION_PREFIX         "--lt-"
36084b0ead49Smrg
360949dc963fSmrgstatic const char *ltwrapper_option_prefix = LTWRAPPER_OPTION_PREFIX;
361049dc963fSmrgstatic const char *dumpscript_opt       = LTWRAPPER_OPTION_PREFIX "dump-script";
36117aa89044Smrgstatic const char *debug_opt            = LTWRAPPER_OPTION_PREFIX "debug";
36124b0ead49Smrg
361349dc963fSmrgint
361449dc963fSmrgmain (int argc, char *argv[])
361549dc963fSmrg{
361649dc963fSmrg  char **newargz;
361749dc963fSmrg  int  newargc;
361849dc963fSmrg  char *tmp_pathspec;
361949dc963fSmrg  char *actual_cwrapper_path;
362049dc963fSmrg  char *actual_cwrapper_name;
362149dc963fSmrg  char *target_name;
362249dc963fSmrg  char *lt_argv_zero;
362349dc963fSmrg  intptr_t rval = 127;
36244b0ead49Smrg
362549dc963fSmrg  int i;
36264b0ead49Smrg
362749dc963fSmrg  program_name = (char *) xstrdup (base_name (argv[0]));
36287aa89044Smrg  newargz = XMALLOC (char *, argc + 1);
36294b0ead49Smrg
36307aa89044Smrg  /* very simple arg parsing; don't want to rely on getopt
36317aa89044Smrg   * also, copy all non cwrapper options to newargz, except
36327aa89044Smrg   * argz[0], which is handled differently
36337aa89044Smrg   */
36347aa89044Smrg  newargc=0;
363549dc963fSmrg  for (i = 1; i < argc; i++)
363649dc963fSmrg    {
363749dc963fSmrg      if (strcmp (argv[i], dumpscript_opt) == 0)
363849dc963fSmrg	{
363949dc963fSmrgEOF
364049dc963fSmrg	    case "$host" in
364149dc963fSmrg	      *mingw* | *cygwin* )
364249dc963fSmrg		# make stdout use "unix" line endings
364349dc963fSmrg		echo "          setmode(1,_O_BINARY);"
364449dc963fSmrg		;;
364549dc963fSmrg	      esac
36464b0ead49Smrg
364749dc963fSmrg	    cat <<"EOF"
36487aa89044Smrg	  lt_dump_script (stdout);
364949dc963fSmrg	  return 0;
365049dc963fSmrg	}
36517aa89044Smrg      if (strcmp (argv[i], debug_opt) == 0)
36527aa89044Smrg	{
36537aa89044Smrg          lt_debug = 1;
36547aa89044Smrg          continue;
36557aa89044Smrg	}
36567aa89044Smrg      if (strcmp (argv[i], ltwrapper_option_prefix) == 0)
36577aa89044Smrg        {
36587aa89044Smrg          /* however, if there is an option in the LTWRAPPER_OPTION_PREFIX
36597aa89044Smrg             namespace, but it is not one of the ones we know about and
36607aa89044Smrg             have already dealt with, above (inluding dump-script), then
36617aa89044Smrg             report an error. Otherwise, targets might begin to believe
36627aa89044Smrg             they are allowed to use options in the LTWRAPPER_OPTION_PREFIX
36637aa89044Smrg             namespace. The first time any user complains about this, we'll
36647aa89044Smrg             need to make LTWRAPPER_OPTION_PREFIX a configure-time option
36657aa89044Smrg             or a configure.ac-settable value.
36667aa89044Smrg           */
36677aa89044Smrg          lt_fatal (__FILE__, __LINE__,
36687aa89044Smrg		    "unrecognized %s option: '%s'",
36697aa89044Smrg                    ltwrapper_option_prefix, argv[i]);
36707aa89044Smrg        }
36717aa89044Smrg      /* otherwise ... */
36727aa89044Smrg      newargz[++newargc] = xstrdup (argv[i]);
367349dc963fSmrg    }
36747aa89044Smrg  newargz[++newargc] = NULL;
36757aa89044Smrg
36767aa89044SmrgEOF
36777aa89044Smrg	    cat <<EOF
36787aa89044Smrg  /* The GNU banner must be the first non-error debug message */
36797aa89044Smrg  lt_debugprintf (__FILE__, __LINE__, "libtool wrapper (GNU $PACKAGE$TIMESTAMP) $VERSION\n");
36807aa89044SmrgEOF
36817aa89044Smrg	    cat <<"EOF"
36827aa89044Smrg  lt_debugprintf (__FILE__, __LINE__, "(main) argv[0]: %s\n", argv[0]);
36837aa89044Smrg  lt_debugprintf (__FILE__, __LINE__, "(main) program_name: %s\n", program_name);
36844b0ead49Smrg
368549dc963fSmrg  tmp_pathspec = find_executable (argv[0]);
368649dc963fSmrg  if (tmp_pathspec == NULL)
36877aa89044Smrg    lt_fatal (__FILE__, __LINE__, "couldn't find %s", argv[0]);
36887aa89044Smrg  lt_debugprintf (__FILE__, __LINE__,
36897aa89044Smrg                  "(main) found exe (before symlink chase) at: %s\n",
36907aa89044Smrg		  tmp_pathspec);
369149dc963fSmrg
369249dc963fSmrg  actual_cwrapper_path = chase_symlinks (tmp_pathspec);
36937aa89044Smrg  lt_debugprintf (__FILE__, __LINE__,
36947aa89044Smrg                  "(main) found exe (after symlink chase) at: %s\n",
36957aa89044Smrg		  actual_cwrapper_path);
369649dc963fSmrg  XFREE (tmp_pathspec);
369749dc963fSmrg
36987aa89044Smrg  actual_cwrapper_name = xstrdup (base_name (actual_cwrapper_path));
369949dc963fSmrg  strendzap (actual_cwrapper_path, actual_cwrapper_name);
370049dc963fSmrg
370149dc963fSmrg  /* wrapper name transforms */
370249dc963fSmrg  strendzap (actual_cwrapper_name, ".exe");
370349dc963fSmrg  tmp_pathspec = lt_extend_str (actual_cwrapper_name, ".exe", 1);
370449dc963fSmrg  XFREE (actual_cwrapper_name);
370549dc963fSmrg  actual_cwrapper_name = tmp_pathspec;
370649dc963fSmrg  tmp_pathspec = 0;
370749dc963fSmrg
370849dc963fSmrg  /* target_name transforms -- use actual target program name; might have lt- prefix */
370949dc963fSmrg  target_name = xstrdup (base_name (TARGET_PROGRAM_NAME));
371049dc963fSmrg  strendzap (target_name, ".exe");
371149dc963fSmrg  tmp_pathspec = lt_extend_str (target_name, ".exe", 1);
371249dc963fSmrg  XFREE (target_name);
371349dc963fSmrg  target_name = tmp_pathspec;
371449dc963fSmrg  tmp_pathspec = 0;
371549dc963fSmrg
37167aa89044Smrg  lt_debugprintf (__FILE__, __LINE__,
37177aa89044Smrg		  "(main) libtool target name: %s\n",
37187aa89044Smrg		  target_name);
371949dc963fSmrgEOF
37204b0ead49Smrg
372149dc963fSmrg	    cat <<EOF
372249dc963fSmrg  newargz[0] =
372349dc963fSmrg    XMALLOC (char, (strlen (actual_cwrapper_path) +
372449dc963fSmrg		    strlen ("$objdir") + 1 + strlen (actual_cwrapper_name) + 1));
372549dc963fSmrg  strcpy (newargz[0], actual_cwrapper_path);
372649dc963fSmrg  strcat (newargz[0], "$objdir");
372749dc963fSmrg  strcat (newargz[0], "/");
372849dc963fSmrgEOF
37294b0ead49Smrg
373049dc963fSmrg	    cat <<"EOF"
373149dc963fSmrg  /* stop here, and copy so we don't have to do this twice */
373249dc963fSmrg  tmp_pathspec = xstrdup (newargz[0]);
37334b0ead49Smrg
373449dc963fSmrg  /* do NOT want the lt- prefix here, so use actual_cwrapper_name */
373549dc963fSmrg  strcat (newargz[0], actual_cwrapper_name);
37364b0ead49Smrg
373749dc963fSmrg  /* DO want the lt- prefix here if it exists, so use target_name */
373849dc963fSmrg  lt_argv_zero = lt_extend_str (tmp_pathspec, target_name, 1);
373949dc963fSmrg  XFREE (tmp_pathspec);
374049dc963fSmrg  tmp_pathspec = NULL;
374149dc963fSmrgEOF
37424b0ead49Smrg
374349dc963fSmrg	    case $host_os in
374449dc963fSmrg	      mingw*)
374549dc963fSmrg	    cat <<"EOF"
374649dc963fSmrg  {
374749dc963fSmrg    char* p;
374849dc963fSmrg    while ((p = strchr (newargz[0], '\\')) != NULL)
374949dc963fSmrg      {
375049dc963fSmrg	*p = '/';
375149dc963fSmrg      }
375249dc963fSmrg    while ((p = strchr (lt_argv_zero, '\\')) != NULL)
375349dc963fSmrg      {
375449dc963fSmrg	*p = '/';
375549dc963fSmrg      }
375649dc963fSmrg  }
375749dc963fSmrgEOF
375849dc963fSmrg	    ;;
375949dc963fSmrg	    esac
37604b0ead49Smrg
376149dc963fSmrg	    cat <<"EOF"
376249dc963fSmrg  XFREE (target_name);
376349dc963fSmrg  XFREE (actual_cwrapper_path);
376449dc963fSmrg  XFREE (actual_cwrapper_name);
37654b0ead49Smrg
376649dc963fSmrg  lt_setenv ("BIN_SH", "xpg4"); /* for Tru64 */
376749dc963fSmrg  lt_setenv ("DUALCASE", "1");  /* for MSK sh */
376849dc963fSmrg  lt_update_lib_path (LIB_PATH_VARNAME, LIB_PATH_VALUE);
376949dc963fSmrg  lt_update_exe_path (EXE_PATH_VARNAME, EXE_PATH_VALUE);
37704b0ead49Smrg
37717aa89044Smrg  lt_debugprintf (__FILE__, __LINE__, "(main) lt_argv_zero: %s\n",
37727aa89044Smrg		  nonnull (lt_argv_zero));
377349dc963fSmrg  for (i = 0; i < newargc; i++)
377449dc963fSmrg    {
37757aa89044Smrg      lt_debugprintf (__FILE__, __LINE__, "(main) newargz[%d]: %s\n",
37767aa89044Smrg		      i, nonnull (newargz[i]));
377749dc963fSmrg    }
37784b0ead49Smrg
377949dc963fSmrgEOF
37804b0ead49Smrg
378149dc963fSmrg	    case $host_os in
378249dc963fSmrg	      mingw*)
378349dc963fSmrg		cat <<"EOF"
378449dc963fSmrg  /* execv doesn't actually work on mingw as expected on unix */
37857aa89044Smrg  newargz = prepare_spawn (newargz);
378649dc963fSmrg  rval = _spawnv (_P_WAIT, lt_argv_zero, (const char * const *) newargz);
378749dc963fSmrg  if (rval == -1)
378849dc963fSmrg    {
378949dc963fSmrg      /* failed to start process */
37907aa89044Smrg      lt_debugprintf (__FILE__, __LINE__,
37917aa89044Smrg		      "(main) failed to launch target \"%s\": %s\n",
37927aa89044Smrg		      lt_argv_zero, nonnull (strerror (errno)));
379349dc963fSmrg      return 127;
379449dc963fSmrg    }
379549dc963fSmrg  return rval;
379649dc963fSmrgEOF
379749dc963fSmrg		;;
379849dc963fSmrg	      *)
379949dc963fSmrg		cat <<"EOF"
380049dc963fSmrg  execv (lt_argv_zero, newargz);
380149dc963fSmrg  return rval; /* =127, but avoids unused variable warning */
380249dc963fSmrgEOF
380349dc963fSmrg		;;
380449dc963fSmrg	    esac
38054b0ead49Smrg
380649dc963fSmrg	    cat <<"EOF"
380749dc963fSmrg}
38084b0ead49Smrg
380949dc963fSmrgvoid *
381049dc963fSmrgxmalloc (size_t num)
381149dc963fSmrg{
381249dc963fSmrg  void *p = (void *) malloc (num);
381349dc963fSmrg  if (!p)
38147aa89044Smrg    lt_fatal (__FILE__, __LINE__, "memory exhausted");
38154b0ead49Smrg
381649dc963fSmrg  return p;
381749dc963fSmrg}
38184b0ead49Smrg
381949dc963fSmrgchar *
382049dc963fSmrgxstrdup (const char *string)
382149dc963fSmrg{
382249dc963fSmrg  return string ? strcpy ((char *) xmalloc (strlen (string) + 1),
382349dc963fSmrg			  string) : NULL;
382449dc963fSmrg}
38254b0ead49Smrg
382649dc963fSmrgconst char *
382749dc963fSmrgbase_name (const char *name)
382849dc963fSmrg{
382949dc963fSmrg  const char *base;
38304b0ead49Smrg
383149dc963fSmrg#if defined (HAVE_DOS_BASED_FILE_SYSTEM)
383249dc963fSmrg  /* Skip over the disk name in MSDOS pathnames. */
383349dc963fSmrg  if (isalpha ((unsigned char) name[0]) && name[1] == ':')
383449dc963fSmrg    name += 2;
383549dc963fSmrg#endif
38364b0ead49Smrg
383749dc963fSmrg  for (base = name; *name; name++)
383849dc963fSmrg    if (IS_DIR_SEPARATOR (*name))
383949dc963fSmrg      base = name + 1;
384049dc963fSmrg  return base;
384149dc963fSmrg}
38424b0ead49Smrg
384349dc963fSmrgint
384449dc963fSmrgcheck_executable (const char *path)
384549dc963fSmrg{
384649dc963fSmrg  struct stat st;
38474b0ead49Smrg
38487aa89044Smrg  lt_debugprintf (__FILE__, __LINE__, "(check_executable): %s\n",
38497aa89044Smrg                  nonempty (path));
385049dc963fSmrg  if ((!path) || (!*path))
385149dc963fSmrg    return 0;
38524b0ead49Smrg
385349dc963fSmrg  if ((stat (path, &st) >= 0)
385449dc963fSmrg      && (st.st_mode & (S_IXUSR | S_IXGRP | S_IXOTH)))
385549dc963fSmrg    return 1;
385649dc963fSmrg  else
385749dc963fSmrg    return 0;
385849dc963fSmrg}
38594b0ead49Smrg
386049dc963fSmrgint
386149dc963fSmrgmake_executable (const char *path)
386249dc963fSmrg{
386349dc963fSmrg  int rval = 0;
386449dc963fSmrg  struct stat st;
38654b0ead49Smrg
38667aa89044Smrg  lt_debugprintf (__FILE__, __LINE__, "(make_executable): %s\n",
38677aa89044Smrg                  nonempty (path));
386849dc963fSmrg  if ((!path) || (!*path))
386949dc963fSmrg    return 0;
38704b0ead49Smrg
387149dc963fSmrg  if (stat (path, &st) >= 0)
387249dc963fSmrg    {
387349dc963fSmrg      rval = chmod (path, st.st_mode | S_IXOTH | S_IXGRP | S_IXUSR);
387449dc963fSmrg    }
387549dc963fSmrg  return rval;
387649dc963fSmrg}
38774b0ead49Smrg
387849dc963fSmrg/* Searches for the full path of the wrapper.  Returns
387949dc963fSmrg   newly allocated full path name if found, NULL otherwise
388049dc963fSmrg   Does not chase symlinks, even on platforms that support them.
388149dc963fSmrg*/
388249dc963fSmrgchar *
388349dc963fSmrgfind_executable (const char *wrapper)
388449dc963fSmrg{
388549dc963fSmrg  int has_slash = 0;
388649dc963fSmrg  const char *p;
388749dc963fSmrg  const char *p_next;
388849dc963fSmrg  /* static buffer for getcwd */
388949dc963fSmrg  char tmp[LT_PATHMAX + 1];
389049dc963fSmrg  int tmp_len;
389149dc963fSmrg  char *concat_name;
38924b0ead49Smrg
38937aa89044Smrg  lt_debugprintf (__FILE__, __LINE__, "(find_executable): %s\n",
38947aa89044Smrg                  nonempty (wrapper));
38954b0ead49Smrg
389649dc963fSmrg  if ((wrapper == NULL) || (*wrapper == '\0'))
389749dc963fSmrg    return NULL;
38984b0ead49Smrg
389949dc963fSmrg  /* Absolute path? */
390049dc963fSmrg#if defined (HAVE_DOS_BASED_FILE_SYSTEM)
390149dc963fSmrg  if (isalpha ((unsigned char) wrapper[0]) && wrapper[1] == ':')
390249dc963fSmrg    {
390349dc963fSmrg      concat_name = xstrdup (wrapper);
390449dc963fSmrg      if (check_executable (concat_name))
390549dc963fSmrg	return concat_name;
390649dc963fSmrg      XFREE (concat_name);
390749dc963fSmrg    }
390849dc963fSmrg  else
390949dc963fSmrg    {
391049dc963fSmrg#endif
391149dc963fSmrg      if (IS_DIR_SEPARATOR (wrapper[0]))
391249dc963fSmrg	{
391349dc963fSmrg	  concat_name = xstrdup (wrapper);
391449dc963fSmrg	  if (check_executable (concat_name))
391549dc963fSmrg	    return concat_name;
391649dc963fSmrg	  XFREE (concat_name);
391749dc963fSmrg	}
391849dc963fSmrg#if defined (HAVE_DOS_BASED_FILE_SYSTEM)
391949dc963fSmrg    }
392049dc963fSmrg#endif
39214b0ead49Smrg
392249dc963fSmrg  for (p = wrapper; *p; p++)
392349dc963fSmrg    if (*p == '/')
392449dc963fSmrg      {
392549dc963fSmrg	has_slash = 1;
392649dc963fSmrg	break;
392749dc963fSmrg      }
392849dc963fSmrg  if (!has_slash)
392949dc963fSmrg    {
393049dc963fSmrg      /* no slashes; search PATH */
393149dc963fSmrg      const char *path = getenv ("PATH");
393249dc963fSmrg      if (path != NULL)
393349dc963fSmrg	{
393449dc963fSmrg	  for (p = path; *p; p = p_next)
393549dc963fSmrg	    {
393649dc963fSmrg	      const char *q;
393749dc963fSmrg	      size_t p_len;
393849dc963fSmrg	      for (q = p; *q; q++)
393949dc963fSmrg		if (IS_PATH_SEPARATOR (*q))
394049dc963fSmrg		  break;
394149dc963fSmrg	      p_len = q - p;
394249dc963fSmrg	      p_next = (*q == '\0' ? q : q + 1);
394349dc963fSmrg	      if (p_len == 0)
394449dc963fSmrg		{
394549dc963fSmrg		  /* empty path: current directory */
394649dc963fSmrg		  if (getcwd (tmp, LT_PATHMAX) == NULL)
39477aa89044Smrg		    lt_fatal (__FILE__, __LINE__, "getcwd failed: %s",
39487aa89044Smrg                              nonnull (strerror (errno)));
394949dc963fSmrg		  tmp_len = strlen (tmp);
395049dc963fSmrg		  concat_name =
395149dc963fSmrg		    XMALLOC (char, tmp_len + 1 + strlen (wrapper) + 1);
395249dc963fSmrg		  memcpy (concat_name, tmp, tmp_len);
395349dc963fSmrg		  concat_name[tmp_len] = '/';
395449dc963fSmrg		  strcpy (concat_name + tmp_len + 1, wrapper);
395549dc963fSmrg		}
395649dc963fSmrg	      else
395749dc963fSmrg		{
395849dc963fSmrg		  concat_name =
395949dc963fSmrg		    XMALLOC (char, p_len + 1 + strlen (wrapper) + 1);
396049dc963fSmrg		  memcpy (concat_name, p, p_len);
396149dc963fSmrg		  concat_name[p_len] = '/';
396249dc963fSmrg		  strcpy (concat_name + p_len + 1, wrapper);
396349dc963fSmrg		}
396449dc963fSmrg	      if (check_executable (concat_name))
396549dc963fSmrg		return concat_name;
396649dc963fSmrg	      XFREE (concat_name);
396749dc963fSmrg	    }
396849dc963fSmrg	}
396949dc963fSmrg      /* not found in PATH; assume curdir */
397049dc963fSmrg    }
397149dc963fSmrg  /* Relative path | not found in path: prepend cwd */
397249dc963fSmrg  if (getcwd (tmp, LT_PATHMAX) == NULL)
39737aa89044Smrg    lt_fatal (__FILE__, __LINE__, "getcwd failed: %s",
39747aa89044Smrg              nonnull (strerror (errno)));
397549dc963fSmrg  tmp_len = strlen (tmp);
397649dc963fSmrg  concat_name = XMALLOC (char, tmp_len + 1 + strlen (wrapper) + 1);
397749dc963fSmrg  memcpy (concat_name, tmp, tmp_len);
397849dc963fSmrg  concat_name[tmp_len] = '/';
397949dc963fSmrg  strcpy (concat_name + tmp_len + 1, wrapper);
39804b0ead49Smrg
398149dc963fSmrg  if (check_executable (concat_name))
398249dc963fSmrg    return concat_name;
398349dc963fSmrg  XFREE (concat_name);
398449dc963fSmrg  return NULL;
398549dc963fSmrg}
39864b0ead49Smrg
398749dc963fSmrgchar *
398849dc963fSmrgchase_symlinks (const char *pathspec)
398949dc963fSmrg{
399049dc963fSmrg#ifndef S_ISLNK
399149dc963fSmrg  return xstrdup (pathspec);
399249dc963fSmrg#else
399349dc963fSmrg  char buf[LT_PATHMAX];
399449dc963fSmrg  struct stat s;
399549dc963fSmrg  char *tmp_pathspec = xstrdup (pathspec);
399649dc963fSmrg  char *p;
399749dc963fSmrg  int has_symlinks = 0;
399849dc963fSmrg  while (strlen (tmp_pathspec) && !has_symlinks)
399949dc963fSmrg    {
40007aa89044Smrg      lt_debugprintf (__FILE__, __LINE__,
40017aa89044Smrg		      "checking path component for symlinks: %s\n",
40027aa89044Smrg		      tmp_pathspec);
400349dc963fSmrg      if (lstat (tmp_pathspec, &s) == 0)
400449dc963fSmrg	{
400549dc963fSmrg	  if (S_ISLNK (s.st_mode) != 0)
400649dc963fSmrg	    {
400749dc963fSmrg	      has_symlinks = 1;
400849dc963fSmrg	      break;
400949dc963fSmrg	    }
40104b0ead49Smrg
401149dc963fSmrg	  /* search backwards for last DIR_SEPARATOR */
401249dc963fSmrg	  p = tmp_pathspec + strlen (tmp_pathspec) - 1;
401349dc963fSmrg	  while ((p > tmp_pathspec) && (!IS_DIR_SEPARATOR (*p)))
401449dc963fSmrg	    p--;
401549dc963fSmrg	  if ((p == tmp_pathspec) && (!IS_DIR_SEPARATOR (*p)))
401649dc963fSmrg	    {
401749dc963fSmrg	      /* no more DIR_SEPARATORS left */
401849dc963fSmrg	      break;
401949dc963fSmrg	    }
402049dc963fSmrg	  *p = '\0';
402149dc963fSmrg	}
402249dc963fSmrg      else
402349dc963fSmrg	{
40247aa89044Smrg	  lt_fatal (__FILE__, __LINE__,
40257aa89044Smrg		    "error accessing file \"%s\": %s",
40267aa89044Smrg		    tmp_pathspec, nonnull (strerror (errno)));
402749dc963fSmrg	}
402849dc963fSmrg    }
402949dc963fSmrg  XFREE (tmp_pathspec);
40304b0ead49Smrg
403149dc963fSmrg  if (!has_symlinks)
403249dc963fSmrg    {
403349dc963fSmrg      return xstrdup (pathspec);
403449dc963fSmrg    }
40354b0ead49Smrg
403649dc963fSmrg  tmp_pathspec = realpath (pathspec, buf);
403749dc963fSmrg  if (tmp_pathspec == 0)
403849dc963fSmrg    {
40397aa89044Smrg      lt_fatal (__FILE__, __LINE__,
40407aa89044Smrg		"could not follow symlinks for %s", pathspec);
404149dc963fSmrg    }
404249dc963fSmrg  return xstrdup (tmp_pathspec);
404349dc963fSmrg#endif
404449dc963fSmrg}
40454b0ead49Smrg
404649dc963fSmrgchar *
404749dc963fSmrgstrendzap (char *str, const char *pat)
404849dc963fSmrg{
404949dc963fSmrg  size_t len, patlen;
40504b0ead49Smrg
405149dc963fSmrg  assert (str != NULL);
405249dc963fSmrg  assert (pat != NULL);
40534b0ead49Smrg
405449dc963fSmrg  len = strlen (str);
405549dc963fSmrg  patlen = strlen (pat);
40564b0ead49Smrg
405749dc963fSmrg  if (patlen <= len)
405849dc963fSmrg    {
405949dc963fSmrg      str += len - patlen;
406049dc963fSmrg      if (strcmp (str, pat) == 0)
406149dc963fSmrg	*str = '\0';
406249dc963fSmrg    }
406349dc963fSmrg  return str;
406449dc963fSmrg}
40654b0ead49Smrg
40667aa89044Smrgvoid
40677aa89044Smrglt_debugprintf (const char *file, int line, const char *fmt, ...)
40687aa89044Smrg{
40697aa89044Smrg  va_list args;
40707aa89044Smrg  if (lt_debug)
40717aa89044Smrg    {
40727aa89044Smrg      (void) fprintf (stderr, "%s:%s:%d: ", program_name, file, line);
40737aa89044Smrg      va_start (args, fmt);
40747aa89044Smrg      (void) vfprintf (stderr, fmt, args);
40757aa89044Smrg      va_end (args);
40767aa89044Smrg    }
40777aa89044Smrg}
40787aa89044Smrg
407949dc963fSmrgstatic void
40807aa89044Smrglt_error_core (int exit_status, const char *file,
40817aa89044Smrg	       int line, const char *mode,
408249dc963fSmrg	       const char *message, va_list ap)
408349dc963fSmrg{
40847aa89044Smrg  fprintf (stderr, "%s:%s:%d: %s: ", program_name, file, line, mode);
408549dc963fSmrg  vfprintf (stderr, message, ap);
408649dc963fSmrg  fprintf (stderr, ".\n");
40874b0ead49Smrg
408849dc963fSmrg  if (exit_status >= 0)
408949dc963fSmrg    exit (exit_status);
409049dc963fSmrg}
40914b0ead49Smrg
409249dc963fSmrgvoid
40937aa89044Smrglt_fatal (const char *file, int line, const char *message, ...)
409449dc963fSmrg{
409549dc963fSmrg  va_list ap;
409649dc963fSmrg  va_start (ap, message);
40977aa89044Smrg  lt_error_core (EXIT_FAILURE, file, line, "FATAL", message, ap);
409849dc963fSmrg  va_end (ap);
409949dc963fSmrg}
41004b0ead49Smrg
41017aa89044Smrgstatic const char *
41027aa89044Smrgnonnull (const char *s)
41037aa89044Smrg{
41047aa89044Smrg  return s ? s : "(null)";
41057aa89044Smrg}
41067aa89044Smrg
41077aa89044Smrgstatic const char *
41087aa89044Smrgnonempty (const char *s)
41097aa89044Smrg{
41107aa89044Smrg  return (s && !*s) ? "(empty)" : nonnull (s);
41117aa89044Smrg}
41127aa89044Smrg
411349dc963fSmrgvoid
411449dc963fSmrglt_setenv (const char *name, const char *value)
411549dc963fSmrg{
41167aa89044Smrg  lt_debugprintf (__FILE__, __LINE__,
41177aa89044Smrg		  "(lt_setenv) setting '%s' to '%s'\n",
41187aa89044Smrg                  nonnull (name), nonnull (value));
411949dc963fSmrg  {
412049dc963fSmrg#ifdef HAVE_SETENV
412149dc963fSmrg    /* always make a copy, for consistency with !HAVE_SETENV */
412249dc963fSmrg    char *str = xstrdup (value);
412349dc963fSmrg    setenv (name, str, 1);
412449dc963fSmrg#else
412549dc963fSmrg    int len = strlen (name) + 1 + strlen (value) + 1;
412649dc963fSmrg    char *str = XMALLOC (char, len);
412749dc963fSmrg    sprintf (str, "%s=%s", name, value);
412849dc963fSmrg    if (putenv (str) != EXIT_SUCCESS)
412949dc963fSmrg      {
413049dc963fSmrg        XFREE (str);
413149dc963fSmrg      }
413249dc963fSmrg#endif
413349dc963fSmrg  }
413449dc963fSmrg}
41354b0ead49Smrg
413649dc963fSmrgchar *
413749dc963fSmrglt_extend_str (const char *orig_value, const char *add, int to_end)
413849dc963fSmrg{
413949dc963fSmrg  char *new_value;
414049dc963fSmrg  if (orig_value && *orig_value)
414149dc963fSmrg    {
414249dc963fSmrg      int orig_value_len = strlen (orig_value);
414349dc963fSmrg      int add_len = strlen (add);
414449dc963fSmrg      new_value = XMALLOC (char, add_len + orig_value_len + 1);
414549dc963fSmrg      if (to_end)
414649dc963fSmrg        {
414749dc963fSmrg          strcpy (new_value, orig_value);
414849dc963fSmrg          strcpy (new_value + orig_value_len, add);
414949dc963fSmrg        }
415049dc963fSmrg      else
415149dc963fSmrg        {
415249dc963fSmrg          strcpy (new_value, add);
415349dc963fSmrg          strcpy (new_value + add_len, orig_value);
415449dc963fSmrg        }
415549dc963fSmrg    }
415649dc963fSmrg  else
415749dc963fSmrg    {
415849dc963fSmrg      new_value = xstrdup (add);
415949dc963fSmrg    }
416049dc963fSmrg  return new_value;
416149dc963fSmrg}
41624b0ead49Smrg
416349dc963fSmrgvoid
416449dc963fSmrglt_update_exe_path (const char *name, const char *value)
416549dc963fSmrg{
41667aa89044Smrg  lt_debugprintf (__FILE__, __LINE__,
41677aa89044Smrg		  "(lt_update_exe_path) modifying '%s' by prepending '%s'\n",
41687aa89044Smrg                  nonnull (name), nonnull (value));
41694b0ead49Smrg
417049dc963fSmrg  if (name && *name && value && *value)
417149dc963fSmrg    {
417249dc963fSmrg      char *new_value = lt_extend_str (getenv (name), value, 0);
417349dc963fSmrg      /* some systems can't cope with a ':'-terminated path #' */
417449dc963fSmrg      int len = strlen (new_value);
417549dc963fSmrg      while (((len = strlen (new_value)) > 0) && IS_PATH_SEPARATOR (new_value[len-1]))
417649dc963fSmrg        {
417749dc963fSmrg          new_value[len-1] = '\0';
417849dc963fSmrg        }
417949dc963fSmrg      lt_setenv (name, new_value);
418049dc963fSmrg      XFREE (new_value);
418149dc963fSmrg    }
418249dc963fSmrg}
41834b0ead49Smrg
418449dc963fSmrgvoid
418549dc963fSmrglt_update_lib_path (const char *name, const char *value)
418649dc963fSmrg{
41877aa89044Smrg  lt_debugprintf (__FILE__, __LINE__,
41887aa89044Smrg		  "(lt_update_lib_path) modifying '%s' by prepending '%s'\n",
41897aa89044Smrg                  nonnull (name), nonnull (value));
41904b0ead49Smrg
419149dc963fSmrg  if (name && *name && value && *value)
419249dc963fSmrg    {
419349dc963fSmrg      char *new_value = lt_extend_str (getenv (name), value, 0);
419449dc963fSmrg      lt_setenv (name, new_value);
419549dc963fSmrg      XFREE (new_value);
419649dc963fSmrg    }
419749dc963fSmrg}
41984b0ead49Smrg
41997aa89044SmrgEOF
42007aa89044Smrg	    case $host_os in
42017aa89044Smrg	      mingw*)
42027aa89044Smrg		cat <<"EOF"
42037aa89044Smrg
42047aa89044Smrg/* Prepares an argument vector before calling spawn().
42057aa89044Smrg   Note that spawn() does not by itself call the command interpreter
42067aa89044Smrg     (getenv ("COMSPEC") != NULL ? getenv ("COMSPEC") :
42077aa89044Smrg      ({ OSVERSIONINFO v; v.dwOSVersionInfoSize = sizeof(OSVERSIONINFO);
42087aa89044Smrg         GetVersionEx(&v);
42097aa89044Smrg         v.dwPlatformId == VER_PLATFORM_WIN32_NT;
42107aa89044Smrg      }) ? "cmd.exe" : "command.com").
42117aa89044Smrg   Instead it simply concatenates the arguments, separated by ' ', and calls
42127aa89044Smrg   CreateProcess().  We must quote the arguments since Win32 CreateProcess()
42137aa89044Smrg   interprets characters like ' ', '\t', '\\', '"' (but not '<' and '>') in a
42147aa89044Smrg   special way:
42157aa89044Smrg   - Space and tab are interpreted as delimiters. They are not treated as
42167aa89044Smrg     delimiters if they are surrounded by double quotes: "...".
42177aa89044Smrg   - Unescaped double quotes are removed from the input. Their only effect is
42187aa89044Smrg     that within double quotes, space and tab are treated like normal
42197aa89044Smrg     characters.
42207aa89044Smrg   - Backslashes not followed by double quotes are not special.
42217aa89044Smrg   - But 2*n+1 backslashes followed by a double quote become
42227aa89044Smrg     n backslashes followed by a double quote (n >= 0):
42237aa89044Smrg       \" -> "
42247aa89044Smrg       \\\" -> \"
42257aa89044Smrg       \\\\\" -> \\"
42267aa89044Smrg */
42277aa89044Smrg#define SHELL_SPECIAL_CHARS "\"\\ \001\002\003\004\005\006\007\010\011\012\013\014\015\016\017\020\021\022\023\024\025\026\027\030\031\032\033\034\035\036\037"
42287aa89044Smrg#define SHELL_SPACE_CHARS " \001\002\003\004\005\006\007\010\011\012\013\014\015\016\017\020\021\022\023\024\025\026\027\030\031\032\033\034\035\036\037"
42297aa89044Smrgchar **
42307aa89044Smrgprepare_spawn (char **argv)
42317aa89044Smrg{
42327aa89044Smrg  size_t argc;
42337aa89044Smrg  char **new_argv;
42347aa89044Smrg  size_t i;
42357aa89044Smrg
42367aa89044Smrg  /* Count number of arguments.  */
42377aa89044Smrg  for (argc = 0; argv[argc] != NULL; argc++)
42387aa89044Smrg    ;
42397aa89044Smrg
42407aa89044Smrg  /* Allocate new argument vector.  */
42417aa89044Smrg  new_argv = XMALLOC (char *, argc + 1);
42427aa89044Smrg
42437aa89044Smrg  /* Put quoted arguments into the new argument vector.  */
42447aa89044Smrg  for (i = 0; i < argc; i++)
42457aa89044Smrg    {
42467aa89044Smrg      const char *string = argv[i];
42477aa89044Smrg
42487aa89044Smrg      if (string[0] == '\0')
42497aa89044Smrg	new_argv[i] = xstrdup ("\"\"");
42507aa89044Smrg      else if (strpbrk (string, SHELL_SPECIAL_CHARS) != NULL)
42517aa89044Smrg	{
42527aa89044Smrg	  int quote_around = (strpbrk (string, SHELL_SPACE_CHARS) != NULL);
42537aa89044Smrg	  size_t length;
42547aa89044Smrg	  unsigned int backslashes;
42557aa89044Smrg	  const char *s;
42567aa89044Smrg	  char *quoted_string;
42577aa89044Smrg	  char *p;
42587aa89044Smrg
42597aa89044Smrg	  length = 0;
42607aa89044Smrg	  backslashes = 0;
42617aa89044Smrg	  if (quote_around)
42627aa89044Smrg	    length++;
42637aa89044Smrg	  for (s = string; *s != '\0'; s++)
42647aa89044Smrg	    {
42657aa89044Smrg	      char c = *s;
42667aa89044Smrg	      if (c == '"')
42677aa89044Smrg		length += backslashes + 1;
42687aa89044Smrg	      length++;
42697aa89044Smrg	      if (c == '\\')
42707aa89044Smrg		backslashes++;
42717aa89044Smrg	      else
42727aa89044Smrg		backslashes = 0;
42737aa89044Smrg	    }
42747aa89044Smrg	  if (quote_around)
42757aa89044Smrg	    length += backslashes + 1;
42767aa89044Smrg
42777aa89044Smrg	  quoted_string = XMALLOC (char, length + 1);
42787aa89044Smrg
42797aa89044Smrg	  p = quoted_string;
42807aa89044Smrg	  backslashes = 0;
42817aa89044Smrg	  if (quote_around)
42827aa89044Smrg	    *p++ = '"';
42837aa89044Smrg	  for (s = string; *s != '\0'; s++)
42847aa89044Smrg	    {
42857aa89044Smrg	      char c = *s;
42867aa89044Smrg	      if (c == '"')
42877aa89044Smrg		{
42887aa89044Smrg		  unsigned int j;
42897aa89044Smrg		  for (j = backslashes + 1; j > 0; j--)
42907aa89044Smrg		    *p++ = '\\';
42917aa89044Smrg		}
42927aa89044Smrg	      *p++ = c;
42937aa89044Smrg	      if (c == '\\')
42947aa89044Smrg		backslashes++;
42957aa89044Smrg	      else
42967aa89044Smrg		backslashes = 0;
42977aa89044Smrg	    }
42987aa89044Smrg	  if (quote_around)
42997aa89044Smrg	    {
43007aa89044Smrg	      unsigned int j;
43017aa89044Smrg	      for (j = backslashes; j > 0; j--)
43027aa89044Smrg		*p++ = '\\';
43037aa89044Smrg	      *p++ = '"';
43047aa89044Smrg	    }
43057aa89044Smrg	  *p = '\0';
43067aa89044Smrg
43077aa89044Smrg	  new_argv[i] = quoted_string;
43087aa89044Smrg	}
43097aa89044Smrg      else
43107aa89044Smrg	new_argv[i] = (char *) string;
43117aa89044Smrg    }
43127aa89044Smrg  new_argv[argc] = NULL;
43137aa89044Smrg
43147aa89044Smrg  return new_argv;
43157aa89044Smrg}
43167aa89044SmrgEOF
43177aa89044Smrg		;;
43187aa89044Smrg	    esac
43197aa89044Smrg
43207aa89044Smrg            cat <<"EOF"
43217aa89044Smrgvoid lt_dump_script (FILE* f)
43227aa89044Smrg{
43237aa89044SmrgEOF
43247aa89044Smrg	    func_emit_wrapper yes |
43257aa89044Smrg              $SED -e 's/\([\\"]\)/\\\1/g' \
43267aa89044Smrg	           -e 's/^/  fputs ("/' -e 's/$/\\n", f);/'
43274b0ead49Smrg
43287aa89044Smrg            cat <<"EOF"
43297aa89044Smrg}
433049dc963fSmrgEOF
433149dc963fSmrg}
433249dc963fSmrg# end: func_emit_cwrapperexe_src
43334b0ead49Smrg
43347aa89044Smrg# func_win32_import_lib_p ARG
43357aa89044Smrg# True if ARG is an import lib, as indicated by $file_magic_cmd
43367aa89044Smrgfunc_win32_import_lib_p ()
43377aa89044Smrg{
43387aa89044Smrg    $opt_debug
43397aa89044Smrg    case `eval $file_magic_cmd \"\$1\" 2>/dev/null | $SED -e 10q` in
43407aa89044Smrg    *import*) : ;;
43417aa89044Smrg    *) false ;;
43427aa89044Smrg    esac
43437aa89044Smrg}
43447aa89044Smrg
434549dc963fSmrg# func_mode_link arg...
434649dc963fSmrgfunc_mode_link ()
434749dc963fSmrg{
434849dc963fSmrg    $opt_debug
434949dc963fSmrg    case $host in
435049dc963fSmrg    *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-cegcc*)
435149dc963fSmrg      # It is impossible to link a dll without this setting, and
435249dc963fSmrg      # we shouldn't force the makefile maintainer to figure out
435349dc963fSmrg      # which system we are compiling for in order to pass an extra
435449dc963fSmrg      # flag for every libtool invocation.
435549dc963fSmrg      # allow_undefined=no
43564b0ead49Smrg
435749dc963fSmrg      # FIXME: Unfortunately, there are problems with the above when trying
435849dc963fSmrg      # to make a dll which has undefined symbols, in which case not
435949dc963fSmrg      # even a static library is built.  For now, we need to specify
436049dc963fSmrg      # -no-undefined on the libtool link line when we can be certain
436149dc963fSmrg      # that all symbols are satisfied, otherwise we get a static library.
436249dc963fSmrg      allow_undefined=yes
436349dc963fSmrg      ;;
436449dc963fSmrg    *)
436549dc963fSmrg      allow_undefined=yes
436649dc963fSmrg      ;;
436749dc963fSmrg    esac
436849dc963fSmrg    libtool_args=$nonopt
436949dc963fSmrg    base_compile="$nonopt $@"
437049dc963fSmrg    compile_command=$nonopt
437149dc963fSmrg    finalize_command=$nonopt
43724b0ead49Smrg
437349dc963fSmrg    compile_rpath=
437449dc963fSmrg    finalize_rpath=
437549dc963fSmrg    compile_shlibpath=
437649dc963fSmrg    finalize_shlibpath=
437749dc963fSmrg    convenience=
437849dc963fSmrg    old_convenience=
437949dc963fSmrg    deplibs=
438049dc963fSmrg    old_deplibs=
438149dc963fSmrg    compiler_flags=
438249dc963fSmrg    linker_flags=
438349dc963fSmrg    dllsearchpath=
438449dc963fSmrg    lib_search_path=`pwd`
438549dc963fSmrg    inst_prefix_dir=
438649dc963fSmrg    new_inherited_linker_flags=
43874b0ead49Smrg
438849dc963fSmrg    avoid_version=no
43897aa89044Smrg    bindir=
439049dc963fSmrg    dlfiles=
439149dc963fSmrg    dlprefiles=
439249dc963fSmrg    dlself=no
439349dc963fSmrg    export_dynamic=no
439449dc963fSmrg    export_symbols=
439549dc963fSmrg    export_symbols_regex=
439649dc963fSmrg    generated=
439749dc963fSmrg    libobjs=
439849dc963fSmrg    ltlibs=
439949dc963fSmrg    module=no
440049dc963fSmrg    no_install=no
440149dc963fSmrg    objs=
440249dc963fSmrg    non_pic_objects=
440349dc963fSmrg    precious_files_regex=
440449dc963fSmrg    prefer_static_libs=no
440549dc963fSmrg    preload=no
440649dc963fSmrg    prev=
440749dc963fSmrg    prevarg=
440849dc963fSmrg    release=
440949dc963fSmrg    rpath=
441049dc963fSmrg    xrpath=
441149dc963fSmrg    perm_rpath=
441249dc963fSmrg    temp_rpath=
441349dc963fSmrg    thread_safe=no
441449dc963fSmrg    vinfo=
441549dc963fSmrg    vinfo_number=no
441649dc963fSmrg    weak_libs=
441749dc963fSmrg    single_module="${wl}-single_module"
441849dc963fSmrg    func_infer_tag $base_compile
441949dc963fSmrg
442049dc963fSmrg    # We need to know -static, to get the right output filenames.
442149dc963fSmrg    for arg
442249dc963fSmrg    do
442349dc963fSmrg      case $arg in
442449dc963fSmrg      -shared)
442549dc963fSmrg	test "$build_libtool_libs" != yes && \
442649dc963fSmrg	  func_fatal_configuration "can not build a shared library"
442749dc963fSmrg	build_old_libs=no
442849dc963fSmrg	break
442949dc963fSmrg	;;
443049dc963fSmrg      -all-static | -static | -static-libtool-libs)
443149dc963fSmrg	case $arg in
443249dc963fSmrg	-all-static)
443349dc963fSmrg	  if test "$build_libtool_libs" = yes && test -z "$link_static_flag"; then
443449dc963fSmrg	    func_warning "complete static linking is impossible in this configuration"
443549dc963fSmrg	  fi
443649dc963fSmrg	  if test -n "$link_static_flag"; then
443749dc963fSmrg	    dlopen_self=$dlopen_self_static
443849dc963fSmrg	  fi
443949dc963fSmrg	  prefer_static_libs=yes
444049dc963fSmrg	  ;;
444149dc963fSmrg	-static)
444249dc963fSmrg	  if test -z "$pic_flag" && test -n "$link_static_flag"; then
444349dc963fSmrg	    dlopen_self=$dlopen_self_static
444449dc963fSmrg	  fi
444549dc963fSmrg	  prefer_static_libs=built
444649dc963fSmrg	  ;;
444749dc963fSmrg	-static-libtool-libs)
444849dc963fSmrg	  if test -z "$pic_flag" && test -n "$link_static_flag"; then
444949dc963fSmrg	    dlopen_self=$dlopen_self_static
44504b0ead49Smrg	  fi
445149dc963fSmrg	  prefer_static_libs=yes
445249dc963fSmrg	  ;;
445349dc963fSmrg	esac
445449dc963fSmrg	build_libtool_libs=no
445549dc963fSmrg	build_old_libs=yes
445649dc963fSmrg	break
445749dc963fSmrg	;;
445849dc963fSmrg      esac
445949dc963fSmrg    done
44604b0ead49Smrg
446149dc963fSmrg    # See if our shared archives depend on static archives.
446249dc963fSmrg    test -n "$old_archive_from_new_cmds" && build_old_libs=yes
44634b0ead49Smrg
446449dc963fSmrg    # Go through the arguments, transforming them on the way.
446549dc963fSmrg    while test "$#" -gt 0; do
446649dc963fSmrg      arg="$1"
446749dc963fSmrg      shift
446849dc963fSmrg      func_quote_for_eval "$arg"
446949dc963fSmrg      qarg=$func_quote_for_eval_unquoted_result
447049dc963fSmrg      func_append libtool_args " $func_quote_for_eval_result"
44714b0ead49Smrg
447249dc963fSmrg      # If the previous option needs an argument, assign it.
447349dc963fSmrg      if test -n "$prev"; then
447449dc963fSmrg	case $prev in
447549dc963fSmrg	output)
447649dc963fSmrg	  func_append compile_command " @OUTPUT@"
447749dc963fSmrg	  func_append finalize_command " @OUTPUT@"
447849dc963fSmrg	  ;;
447949dc963fSmrg	esac
44804b0ead49Smrg
448149dc963fSmrg	case $prev in
44827aa89044Smrg	bindir)
44837aa89044Smrg	  bindir="$arg"
44847aa89044Smrg	  prev=
44857aa89044Smrg	  continue
44867aa89044Smrg	  ;;
448749dc963fSmrg	dlfiles|dlprefiles)
448849dc963fSmrg	  if test "$preload" = no; then
448949dc963fSmrg	    # Add the symbol object into the linking commands.
449049dc963fSmrg	    func_append compile_command " @SYMFILE@"
449149dc963fSmrg	    func_append finalize_command " @SYMFILE@"
449249dc963fSmrg	    preload=yes
449349dc963fSmrg	  fi
449449dc963fSmrg	  case $arg in
449549dc963fSmrg	  *.la | *.lo) ;;  # We handle these cases below.
449649dc963fSmrg	  force)
449749dc963fSmrg	    if test "$dlself" = no; then
449849dc963fSmrg	      dlself=needless
449949dc963fSmrg	      export_dynamic=yes
450049dc963fSmrg	    fi
450149dc963fSmrg	    prev=
450249dc963fSmrg	    continue
450349dc963fSmrg	    ;;
450449dc963fSmrg	  self)
450549dc963fSmrg	    if test "$prev" = dlprefiles; then
450649dc963fSmrg	      dlself=yes
450749dc963fSmrg	    elif test "$prev" = dlfiles && test "$dlopen_self" != yes; then
450849dc963fSmrg	      dlself=yes
45094b0ead49Smrg	    else
451049dc963fSmrg	      dlself=needless
451149dc963fSmrg	      export_dynamic=yes
45124b0ead49Smrg	    fi
451349dc963fSmrg	    prev=
451449dc963fSmrg	    continue
451549dc963fSmrg	    ;;
451649dc963fSmrg	  *)
451749dc963fSmrg	    if test "$prev" = dlfiles; then
451849dc963fSmrg	      dlfiles="$dlfiles $arg"
45194b0ead49Smrg	    else
452049dc963fSmrg	      dlprefiles="$dlprefiles $arg"
45214b0ead49Smrg	    fi
452249dc963fSmrg	    prev=
452349dc963fSmrg	    continue
452449dc963fSmrg	    ;;
452549dc963fSmrg	  esac
452649dc963fSmrg	  ;;
452749dc963fSmrg	expsyms)
452849dc963fSmrg	  export_symbols="$arg"
452949dc963fSmrg	  test -f "$arg" \
453049dc963fSmrg	    || func_fatal_error "symbol file \`$arg' does not exist"
453149dc963fSmrg	  prev=
453249dc963fSmrg	  continue
453349dc963fSmrg	  ;;
453449dc963fSmrg	expsyms_regex)
453549dc963fSmrg	  export_symbols_regex="$arg"
453649dc963fSmrg	  prev=
453749dc963fSmrg	  continue
453849dc963fSmrg	  ;;
453949dc963fSmrg	framework)
45404b0ead49Smrg	  case $host in
454149dc963fSmrg	    *-*-darwin*)
454249dc963fSmrg	      case "$deplibs " in
454349dc963fSmrg		*" $qarg.ltframework "*) ;;
454449dc963fSmrg		*) deplibs="$deplibs $qarg.ltframework" # this is fixed later
454549dc963fSmrg		   ;;
454649dc963fSmrg	      esac
454749dc963fSmrg	      ;;
45484b0ead49Smrg	  esac
454949dc963fSmrg	  prev=
455049dc963fSmrg	  continue
45514b0ead49Smrg	  ;;
455249dc963fSmrg	inst_prefix)
455349dc963fSmrg	  inst_prefix_dir="$arg"
455449dc963fSmrg	  prev=
455549dc963fSmrg	  continue
45564b0ead49Smrg	  ;;
455749dc963fSmrg	objectlist)
455849dc963fSmrg	  if test -f "$arg"; then
455949dc963fSmrg	    save_arg=$arg
456049dc963fSmrg	    moreargs=
456149dc963fSmrg	    for fil in `cat "$save_arg"`
456249dc963fSmrg	    do
456349dc963fSmrg#	      moreargs="$moreargs $fil"
456449dc963fSmrg	      arg=$fil
456549dc963fSmrg	      # A libtool-controlled object.
45664b0ead49Smrg
456749dc963fSmrg	      # Check to see that this really is a libtool object.
456849dc963fSmrg	      if func_lalib_unsafe_p "$arg"; then
456949dc963fSmrg		pic_object=
457049dc963fSmrg		non_pic_object=
45714b0ead49Smrg
457249dc963fSmrg		# Read the .lo file
457349dc963fSmrg		func_source "$arg"
45744b0ead49Smrg
457549dc963fSmrg		if test -z "$pic_object" ||
457649dc963fSmrg		   test -z "$non_pic_object" ||
457749dc963fSmrg		   test "$pic_object" = none &&
457849dc963fSmrg		   test "$non_pic_object" = none; then
457949dc963fSmrg		  func_fatal_error "cannot find name of object for \`$arg'"
458049dc963fSmrg		fi
45814b0ead49Smrg
458249dc963fSmrg		# Extract subdirectory from the argument.
458349dc963fSmrg		func_dirname "$arg" "/" ""
458449dc963fSmrg		xdir="$func_dirname_result"
45854b0ead49Smrg
458649dc963fSmrg		if test "$pic_object" != none; then
458749dc963fSmrg		  # Prepend the subdirectory the object is found in.
458849dc963fSmrg		  pic_object="$xdir$pic_object"
45894b0ead49Smrg
459049dc963fSmrg		  if test "$prev" = dlfiles; then
459149dc963fSmrg		    if test "$build_libtool_libs" = yes && test "$dlopen_support" = yes; then
459249dc963fSmrg		      dlfiles="$dlfiles $pic_object"
459349dc963fSmrg		      prev=
459449dc963fSmrg		      continue
459549dc963fSmrg		    else
459649dc963fSmrg		      # If libtool objects are unsupported, then we need to preload.
459749dc963fSmrg		      prev=dlprefiles
459849dc963fSmrg		    fi
459949dc963fSmrg		  fi
46004b0ead49Smrg
460149dc963fSmrg		  # CHECK ME:  I think I busted this.  -Ossama
460249dc963fSmrg		  if test "$prev" = dlprefiles; then
460349dc963fSmrg		    # Preload the old-style object.
460449dc963fSmrg		    dlprefiles="$dlprefiles $pic_object"
460549dc963fSmrg		    prev=
460649dc963fSmrg		  fi
46074b0ead49Smrg
460849dc963fSmrg		  # A PIC object.
460949dc963fSmrg		  func_append libobjs " $pic_object"
461049dc963fSmrg		  arg="$pic_object"
461149dc963fSmrg		fi
46124b0ead49Smrg
461349dc963fSmrg		# Non-PIC object.
461449dc963fSmrg		if test "$non_pic_object" != none; then
461549dc963fSmrg		  # Prepend the subdirectory the object is found in.
461649dc963fSmrg		  non_pic_object="$xdir$non_pic_object"
46174b0ead49Smrg
461849dc963fSmrg		  # A standard non-PIC object
461949dc963fSmrg		  func_append non_pic_objects " $non_pic_object"
462049dc963fSmrg		  if test -z "$pic_object" || test "$pic_object" = none ; then
462149dc963fSmrg		    arg="$non_pic_object"
462249dc963fSmrg		  fi
462349dc963fSmrg		else
462449dc963fSmrg		  # If the PIC object exists, use it instead.
462549dc963fSmrg		  # $xdir was prepended to $pic_object above.
462649dc963fSmrg		  non_pic_object="$pic_object"
462749dc963fSmrg		  func_append non_pic_objects " $non_pic_object"
462849dc963fSmrg		fi
462949dc963fSmrg	      else
463049dc963fSmrg		# Only an error if not doing a dry-run.
463149dc963fSmrg		if $opt_dry_run; then
463249dc963fSmrg		  # Extract subdirectory from the argument.
463349dc963fSmrg		  func_dirname "$arg" "/" ""
463449dc963fSmrg		  xdir="$func_dirname_result"
463549dc963fSmrg
463649dc963fSmrg		  func_lo2o "$arg"
463749dc963fSmrg		  pic_object=$xdir$objdir/$func_lo2o_result
463849dc963fSmrg		  non_pic_object=$xdir$func_lo2o_result
463949dc963fSmrg		  func_append libobjs " $pic_object"
464049dc963fSmrg		  func_append non_pic_objects " $non_pic_object"
464149dc963fSmrg	        else
464249dc963fSmrg		  func_fatal_error "\`$arg' is not a valid libtool object"
464349dc963fSmrg		fi
464449dc963fSmrg	      fi
464549dc963fSmrg	    done
46464b0ead49Smrg	  else
464749dc963fSmrg	    func_fatal_error "link input file \`$arg' does not exist"
46484b0ead49Smrg	  fi
464949dc963fSmrg	  arg=$save_arg
465049dc963fSmrg	  prev=
465149dc963fSmrg	  continue
465249dc963fSmrg	  ;;
465349dc963fSmrg	precious_regex)
465449dc963fSmrg	  precious_files_regex="$arg"
465549dc963fSmrg	  prev=
465649dc963fSmrg	  continue
465749dc963fSmrg	  ;;
465849dc963fSmrg	release)
465949dc963fSmrg	  release="-$arg"
466049dc963fSmrg	  prev=
466149dc963fSmrg	  continue
466249dc963fSmrg	  ;;
466349dc963fSmrg	rpath | xrpath)
466449dc963fSmrg	  # We need an absolute path.
466549dc963fSmrg	  case $arg in
466649dc963fSmrg	  [\\/]* | [A-Za-z]:[\\/]*) ;;
466749dc963fSmrg	  *)
466849dc963fSmrg	    func_fatal_error "only absolute run-paths are allowed"
466949dc963fSmrg	    ;;
467049dc963fSmrg	  esac
467149dc963fSmrg	  if test "$prev" = rpath; then
467249dc963fSmrg	    case "$rpath " in
467349dc963fSmrg	    *" $arg "*) ;;
467449dc963fSmrg	    *) rpath="$rpath $arg" ;;
467549dc963fSmrg	    esac
46764b0ead49Smrg	  else
467749dc963fSmrg	    case "$xrpath " in
467849dc963fSmrg	    *" $arg "*) ;;
467949dc963fSmrg	    *) xrpath="$xrpath $arg" ;;
468049dc963fSmrg	    esac
46814b0ead49Smrg	  fi
468249dc963fSmrg	  prev=
468349dc963fSmrg	  continue
468449dc963fSmrg	  ;;
468549dc963fSmrg	shrext)
468649dc963fSmrg	  shrext_cmds="$arg"
468749dc963fSmrg	  prev=
468849dc963fSmrg	  continue
468949dc963fSmrg	  ;;
469049dc963fSmrg	weak)
469149dc963fSmrg	  weak_libs="$weak_libs $arg"
469249dc963fSmrg	  prev=
469349dc963fSmrg	  continue
469449dc963fSmrg	  ;;
469549dc963fSmrg	xcclinker)
469649dc963fSmrg	  linker_flags="$linker_flags $qarg"
469749dc963fSmrg	  compiler_flags="$compiler_flags $qarg"
469849dc963fSmrg	  prev=
469949dc963fSmrg	  func_append compile_command " $qarg"
470049dc963fSmrg	  func_append finalize_command " $qarg"
470149dc963fSmrg	  continue
470249dc963fSmrg	  ;;
470349dc963fSmrg	xcompiler)
470449dc963fSmrg	  compiler_flags="$compiler_flags $qarg"
470549dc963fSmrg	  prev=
470649dc963fSmrg	  func_append compile_command " $qarg"
470749dc963fSmrg	  func_append finalize_command " $qarg"
470849dc963fSmrg	  continue
470949dc963fSmrg	  ;;
471049dc963fSmrg	xlinker)
471149dc963fSmrg	  linker_flags="$linker_flags $qarg"
471249dc963fSmrg	  compiler_flags="$compiler_flags $wl$qarg"
471349dc963fSmrg	  prev=
471449dc963fSmrg	  func_append compile_command " $wl$qarg"
471549dc963fSmrg	  func_append finalize_command " $wl$qarg"
471649dc963fSmrg	  continue
471749dc963fSmrg	  ;;
471849dc963fSmrg	*)
471949dc963fSmrg	  eval "$prev=\"\$arg\""
472049dc963fSmrg	  prev=
472149dc963fSmrg	  continue
472249dc963fSmrg	  ;;
47234b0ead49Smrg	esac
472449dc963fSmrg      fi # test -n "$prev"
47254b0ead49Smrg
472649dc963fSmrg      prevarg="$arg"
47274b0ead49Smrg
472849dc963fSmrg      case $arg in
472949dc963fSmrg      -all-static)
473049dc963fSmrg	if test -n "$link_static_flag"; then
473149dc963fSmrg	  # See comment for -static flag below, for more details.
473249dc963fSmrg	  func_append compile_command " $link_static_flag"
473349dc963fSmrg	  func_append finalize_command " $link_static_flag"
473449dc963fSmrg	fi
473549dc963fSmrg	continue
473649dc963fSmrg	;;
47374b0ead49Smrg
473849dc963fSmrg      -allow-undefined)
473949dc963fSmrg	# FIXME: remove this flag sometime in the future.
474049dc963fSmrg	func_fatal_error "\`-allow-undefined' must not be used because it is the default"
474149dc963fSmrg	;;
47424b0ead49Smrg
474349dc963fSmrg      -avoid-version)
474449dc963fSmrg	avoid_version=yes
474549dc963fSmrg	continue
474649dc963fSmrg	;;
47474b0ead49Smrg
47487aa89044Smrg      -bindir)
47497aa89044Smrg	prev=bindir
47507aa89044Smrg	continue
47517aa89044Smrg	;;
47527aa89044Smrg
475349dc963fSmrg      -dlopen)
475449dc963fSmrg	prev=dlfiles
475549dc963fSmrg	continue
475649dc963fSmrg	;;
47574b0ead49Smrg
475849dc963fSmrg      -dlpreopen)
475949dc963fSmrg	prev=dlprefiles
476049dc963fSmrg	continue
476149dc963fSmrg	;;
47624b0ead49Smrg
476349dc963fSmrg      -export-dynamic)
476449dc963fSmrg	export_dynamic=yes
476549dc963fSmrg	continue
476649dc963fSmrg	;;
47674b0ead49Smrg
476849dc963fSmrg      -export-symbols | -export-symbols-regex)
476949dc963fSmrg	if test -n "$export_symbols" || test -n "$export_symbols_regex"; then
477049dc963fSmrg	  func_fatal_error "more than one -exported-symbols argument is not allowed"
477149dc963fSmrg	fi
477249dc963fSmrg	if test "X$arg" = "X-export-symbols"; then
477349dc963fSmrg	  prev=expsyms
477449dc963fSmrg	else
477549dc963fSmrg	  prev=expsyms_regex
477649dc963fSmrg	fi
477749dc963fSmrg	continue
477849dc963fSmrg	;;
47794b0ead49Smrg
478049dc963fSmrg      -framework)
478149dc963fSmrg	prev=framework
478249dc963fSmrg	continue
478349dc963fSmrg	;;
47844b0ead49Smrg
478549dc963fSmrg      -inst-prefix-dir)
478649dc963fSmrg	prev=inst_prefix
478749dc963fSmrg	continue
478849dc963fSmrg	;;
47894b0ead49Smrg
479049dc963fSmrg      # The native IRIX linker understands -LANG:*, -LIST:* and -LNO:*
479149dc963fSmrg      # so, if we see these flags be careful not to treat them like -L
479249dc963fSmrg      -L[A-Z][A-Z]*:*)
479349dc963fSmrg	case $with_gcc/$host in
479449dc963fSmrg	no/*-*-irix* | /*-*-irix*)
479549dc963fSmrg	  func_append compile_command " $arg"
479649dc963fSmrg	  func_append finalize_command " $arg"
479749dc963fSmrg	  ;;
479849dc963fSmrg	esac
479949dc963fSmrg	continue
480049dc963fSmrg	;;
48014b0ead49Smrg
480249dc963fSmrg      -L*)
480349dc963fSmrg	func_stripname '-L' '' "$arg"
480449dc963fSmrg	dir=$func_stripname_result
480549dc963fSmrg	if test -z "$dir"; then
480649dc963fSmrg	  if test "$#" -gt 0; then
480749dc963fSmrg	    func_fatal_error "require no space between \`-L' and \`$1'"
480849dc963fSmrg	  else
480949dc963fSmrg	    func_fatal_error "need path for \`-L' option"
481049dc963fSmrg	  fi
481149dc963fSmrg	fi
481249dc963fSmrg	# We need an absolute path.
481349dc963fSmrg	case $dir in
481449dc963fSmrg	[\\/]* | [A-Za-z]:[\\/]*) ;;
481549dc963fSmrg	*)
481649dc963fSmrg	  absdir=`cd "$dir" && pwd`
481749dc963fSmrg	  test -z "$absdir" && \
481849dc963fSmrg	    func_fatal_error "cannot determine absolute directory name of \`$dir'"
481949dc963fSmrg	  dir="$absdir"
482049dc963fSmrg	  ;;
482149dc963fSmrg	esac
482249dc963fSmrg	case "$deplibs " in
482349dc963fSmrg	*" -L$dir "*) ;;
482449dc963fSmrg	*)
482549dc963fSmrg	  deplibs="$deplibs -L$dir"
482649dc963fSmrg	  lib_search_path="$lib_search_path $dir"
482749dc963fSmrg	  ;;
482849dc963fSmrg	esac
482949dc963fSmrg	case $host in
483049dc963fSmrg	*-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-cegcc*)
48317aa89044Smrg	  testbindir=`$ECHO "$dir" | $SED 's*/lib$*/bin*'`
483249dc963fSmrg	  case :$dllsearchpath: in
483349dc963fSmrg	  *":$dir:"*) ;;
483449dc963fSmrg	  ::) dllsearchpath=$dir;;
483549dc963fSmrg	  *) dllsearchpath="$dllsearchpath:$dir";;
483649dc963fSmrg	  esac
483749dc963fSmrg	  case :$dllsearchpath: in
483849dc963fSmrg	  *":$testbindir:"*) ;;
483949dc963fSmrg	  ::) dllsearchpath=$testbindir;;
484049dc963fSmrg	  *) dllsearchpath="$dllsearchpath:$testbindir";;
484149dc963fSmrg	  esac
484249dc963fSmrg	  ;;
484349dc963fSmrg	esac
484449dc963fSmrg	continue
484549dc963fSmrg	;;
48464b0ead49Smrg
484749dc963fSmrg      -l*)
484849dc963fSmrg	if test "X$arg" = "X-lc" || test "X$arg" = "X-lm"; then
484949dc963fSmrg	  case $host in
48507aa89044Smrg	  *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-beos* | *-cegcc* | *-*-haiku*)
485149dc963fSmrg	    # These systems don't actually have a C or math library (as such)
485249dc963fSmrg	    continue
485349dc963fSmrg	    ;;
485449dc963fSmrg	  *-*-os2*)
485549dc963fSmrg	    # These systems don't actually have a C library (as such)
485649dc963fSmrg	    test "X$arg" = "X-lc" && continue
485749dc963fSmrg	    ;;
485849dc963fSmrg	  *-*-openbsd* | *-*-freebsd* | *-*-dragonfly*)
485949dc963fSmrg	    # Do not include libc due to us having libc/libc_r.
486049dc963fSmrg	    test "X$arg" = "X-lc" && continue
486149dc963fSmrg	    ;;
486249dc963fSmrg	  *-*-rhapsody* | *-*-darwin1.[012])
486349dc963fSmrg	    # Rhapsody C and math libraries are in the System framework
486449dc963fSmrg	    deplibs="$deplibs System.ltframework"
486549dc963fSmrg	    continue
486649dc963fSmrg	    ;;
486749dc963fSmrg	  *-*-sco3.2v5* | *-*-sco5v6*)
486849dc963fSmrg	    # Causes problems with __ctype
486949dc963fSmrg	    test "X$arg" = "X-lc" && continue
487049dc963fSmrg	    ;;
487149dc963fSmrg	  *-*-sysv4.2uw2* | *-*-sysv5* | *-*-unixware* | *-*-OpenUNIX*)
487249dc963fSmrg	    # Compiler inserts libc in the correct place for threads to work
487349dc963fSmrg	    test "X$arg" = "X-lc" && continue
487449dc963fSmrg	    ;;
487549dc963fSmrg	  esac
487649dc963fSmrg	elif test "X$arg" = "X-lc_r"; then
487749dc963fSmrg	 case $host in
487849dc963fSmrg	 *-*-openbsd* | *-*-freebsd* | *-*-dragonfly*)
487949dc963fSmrg	   # Do not include libc_r directly, use -pthread flag.
488049dc963fSmrg	   continue
488149dc963fSmrg	   ;;
488249dc963fSmrg	 esac
488349dc963fSmrg	fi
488449dc963fSmrg	deplibs="$deplibs $arg"
488549dc963fSmrg	continue
488649dc963fSmrg	;;
48874b0ead49Smrg
488849dc963fSmrg      -module)
488949dc963fSmrg	module=yes
489049dc963fSmrg	continue
489149dc963fSmrg	;;
48924b0ead49Smrg
489349dc963fSmrg      # Tru64 UNIX uses -model [arg] to determine the layout of C++
489449dc963fSmrg      # classes, name mangling, and exception handling.
489549dc963fSmrg      # Darwin uses the -arch flag to determine output architecture.
489649dc963fSmrg      -model|-arch|-isysroot)
489749dc963fSmrg	compiler_flags="$compiler_flags $arg"
489849dc963fSmrg	func_append compile_command " $arg"
489949dc963fSmrg	func_append finalize_command " $arg"
490049dc963fSmrg	prev=xcompiler
490149dc963fSmrg	continue
490249dc963fSmrg	;;
49034b0ead49Smrg
490449dc963fSmrg      -mt|-mthreads|-kthread|-Kthread|-pthread|-pthreads|--thread-safe|-threads)
490549dc963fSmrg	compiler_flags="$compiler_flags $arg"
490649dc963fSmrg	func_append compile_command " $arg"
490749dc963fSmrg	func_append finalize_command " $arg"
490849dc963fSmrg	case "$new_inherited_linker_flags " in
490949dc963fSmrg	    *" $arg "*) ;;
491049dc963fSmrg	    * ) new_inherited_linker_flags="$new_inherited_linker_flags $arg" ;;
491149dc963fSmrg	esac
491249dc963fSmrg	continue
491349dc963fSmrg	;;
49144b0ead49Smrg
491549dc963fSmrg      -multi_module)
491649dc963fSmrg	single_module="${wl}-multi_module"
491749dc963fSmrg	continue
491849dc963fSmrg	;;
49194b0ead49Smrg
492049dc963fSmrg      -no-fast-install)
492149dc963fSmrg	fast_install=no
492249dc963fSmrg	continue
492349dc963fSmrg	;;
49244b0ead49Smrg
492549dc963fSmrg      -no-install)
492649dc963fSmrg	case $host in
492749dc963fSmrg	*-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-*-darwin* | *-cegcc*)
492849dc963fSmrg	  # The PATH hackery in wrapper scripts is required on Windows
492949dc963fSmrg	  # and Darwin in order for the loader to find any dlls it needs.
493049dc963fSmrg	  func_warning "\`-no-install' is ignored for $host"
493149dc963fSmrg	  func_warning "assuming \`-no-fast-install' instead"
493249dc963fSmrg	  fast_install=no
493349dc963fSmrg	  ;;
493449dc963fSmrg	*) no_install=yes ;;
493549dc963fSmrg	esac
493649dc963fSmrg	continue
493749dc963fSmrg	;;
49384b0ead49Smrg
493949dc963fSmrg      -no-undefined)
494049dc963fSmrg	allow_undefined=no
494149dc963fSmrg	continue
494249dc963fSmrg	;;
49434b0ead49Smrg
494449dc963fSmrg      -objectlist)
494549dc963fSmrg	prev=objectlist
494649dc963fSmrg	continue
494749dc963fSmrg	;;
49484b0ead49Smrg
494949dc963fSmrg      -o) prev=output ;;
49504b0ead49Smrg
495149dc963fSmrg      -precious-files-regex)
495249dc963fSmrg	prev=precious_regex
495349dc963fSmrg	continue
495449dc963fSmrg	;;
49554b0ead49Smrg
495649dc963fSmrg      -release)
495749dc963fSmrg	prev=release
495849dc963fSmrg	continue
495949dc963fSmrg	;;
49604b0ead49Smrg
496149dc963fSmrg      -rpath)
496249dc963fSmrg	prev=rpath
496349dc963fSmrg	continue
496449dc963fSmrg	;;
49654b0ead49Smrg
496649dc963fSmrg      -R)
496749dc963fSmrg	prev=xrpath
496849dc963fSmrg	continue
496949dc963fSmrg	;;
49704b0ead49Smrg
497149dc963fSmrg      -R*)
497249dc963fSmrg	func_stripname '-R' '' "$arg"
497349dc963fSmrg	dir=$func_stripname_result
497449dc963fSmrg	# We need an absolute path.
497549dc963fSmrg	case $dir in
497649dc963fSmrg	[\\/]* | [A-Za-z]:[\\/]*) ;;
497749dc963fSmrg	*)
497849dc963fSmrg	  func_fatal_error "only absolute run-paths are allowed"
497949dc963fSmrg	  ;;
498049dc963fSmrg	esac
498149dc963fSmrg	case "$xrpath " in
498249dc963fSmrg	*" $dir "*) ;;
498349dc963fSmrg	*) xrpath="$xrpath $dir" ;;
498449dc963fSmrg	esac
498549dc963fSmrg	continue
498649dc963fSmrg	;;
49874b0ead49Smrg
498849dc963fSmrg      -shared)
498949dc963fSmrg	# The effects of -shared are defined in a previous loop.
499049dc963fSmrg	continue
499149dc963fSmrg	;;
49924b0ead49Smrg
499349dc963fSmrg      -shrext)
499449dc963fSmrg	prev=shrext
499549dc963fSmrg	continue
499649dc963fSmrg	;;
49974b0ead49Smrg
499849dc963fSmrg      -static | -static-libtool-libs)
499949dc963fSmrg	# The effects of -static are defined in a previous loop.
500049dc963fSmrg	# We used to do the same as -all-static on platforms that
500149dc963fSmrg	# didn't have a PIC flag, but the assumption that the effects
500249dc963fSmrg	# would be equivalent was wrong.  It would break on at least
500349dc963fSmrg	# Digital Unix and AIX.
500449dc963fSmrg	continue
500549dc963fSmrg	;;
50064b0ead49Smrg
500749dc963fSmrg      -thread-safe)
500849dc963fSmrg	thread_safe=yes
500949dc963fSmrg	continue
501049dc963fSmrg	;;
50114b0ead49Smrg
501249dc963fSmrg      -version-info)
501349dc963fSmrg	prev=vinfo
501449dc963fSmrg	continue
501549dc963fSmrg	;;
50164b0ead49Smrg
501749dc963fSmrg      -version-number)
501849dc963fSmrg	prev=vinfo
501949dc963fSmrg	vinfo_number=yes
502049dc963fSmrg	continue
502149dc963fSmrg	;;
50224b0ead49Smrg
502349dc963fSmrg      -weak)
502449dc963fSmrg        prev=weak
502549dc963fSmrg	continue
502649dc963fSmrg	;;
50274b0ead49Smrg
502849dc963fSmrg      -Wc,*)
502949dc963fSmrg	func_stripname '-Wc,' '' "$arg"
503049dc963fSmrg	args=$func_stripname_result
503149dc963fSmrg	arg=
503249dc963fSmrg	save_ifs="$IFS"; IFS=','
503349dc963fSmrg	for flag in $args; do
503449dc963fSmrg	  IFS="$save_ifs"
503549dc963fSmrg          func_quote_for_eval "$flag"
50367aa89044Smrg	  arg="$arg $func_quote_for_eval_result"
503749dc963fSmrg	  compiler_flags="$compiler_flags $func_quote_for_eval_result"
503849dc963fSmrg	done
503949dc963fSmrg	IFS="$save_ifs"
504049dc963fSmrg	func_stripname ' ' '' "$arg"
504149dc963fSmrg	arg=$func_stripname_result
504249dc963fSmrg	;;
50434b0ead49Smrg
504449dc963fSmrg      -Wl,*)
504549dc963fSmrg	func_stripname '-Wl,' '' "$arg"
504649dc963fSmrg	args=$func_stripname_result
504749dc963fSmrg	arg=
504849dc963fSmrg	save_ifs="$IFS"; IFS=','
504949dc963fSmrg	for flag in $args; do
505049dc963fSmrg	  IFS="$save_ifs"
505149dc963fSmrg          func_quote_for_eval "$flag"
505249dc963fSmrg	  arg="$arg $wl$func_quote_for_eval_result"
505349dc963fSmrg	  compiler_flags="$compiler_flags $wl$func_quote_for_eval_result"
505449dc963fSmrg	  linker_flags="$linker_flags $func_quote_for_eval_result"
505549dc963fSmrg	done
505649dc963fSmrg	IFS="$save_ifs"
505749dc963fSmrg	func_stripname ' ' '' "$arg"
505849dc963fSmrg	arg=$func_stripname_result
505949dc963fSmrg	;;
50604b0ead49Smrg
506149dc963fSmrg      -Xcompiler)
506249dc963fSmrg	prev=xcompiler
506349dc963fSmrg	continue
506449dc963fSmrg	;;
50654b0ead49Smrg
506649dc963fSmrg      -Xlinker)
506749dc963fSmrg	prev=xlinker
506849dc963fSmrg	continue
506949dc963fSmrg	;;
50704b0ead49Smrg
507149dc963fSmrg      -XCClinker)
507249dc963fSmrg	prev=xcclinker
507349dc963fSmrg	continue
507449dc963fSmrg	;;
50754b0ead49Smrg
507649dc963fSmrg      # -msg_* for osf cc
507749dc963fSmrg      -msg_*)
507849dc963fSmrg	func_quote_for_eval "$arg"
507949dc963fSmrg	arg="$func_quote_for_eval_result"
508049dc963fSmrg	;;
50814b0ead49Smrg
50827aa89044Smrg      # Flags to be passed through unchanged, with rationale:
50837aa89044Smrg      # -64, -mips[0-9]      enable 64-bit mode for the SGI compiler
50847aa89044Smrg      # -r[0-9][0-9]*        specify processor for the SGI compiler
50857aa89044Smrg      # -xarch=*, -xtarget=* enable 64-bit mode for the Sun compiler
50867aa89044Smrg      # +DA*, +DD*           enable 64-bit mode for the HP compiler
50877aa89044Smrg      # -q*                  compiler args for the IBM compiler
50887aa89044Smrg      # -m*, -t[45]*, -txscale* architecture-specific flags for GCC
50897aa89044Smrg      # -F/path              path to uninstalled frameworks, gcc on darwin
50907aa89044Smrg      # -p, -pg, --coverage, -fprofile-*  profiling flags for GCC
50917aa89044Smrg      # @file                GCC response files
50927aa89044Smrg      # -tp=*                Portland pgcc target processor selection
509349dc963fSmrg      -64|-mips[0-9]|-r[0-9][0-9]*|-xarch=*|-xtarget=*|+DA*|+DD*|-q*|-m*| \
50947aa89044Smrg      -t[45]*|-txscale*|-p|-pg|--coverage|-fprofile-*|-F*|@*|-tp=*)
509549dc963fSmrg        func_quote_for_eval "$arg"
509649dc963fSmrg	arg="$func_quote_for_eval_result"
509749dc963fSmrg        func_append compile_command " $arg"
509849dc963fSmrg        func_append finalize_command " $arg"
509949dc963fSmrg        compiler_flags="$compiler_flags $arg"
510049dc963fSmrg        continue
510149dc963fSmrg        ;;
51024b0ead49Smrg
510349dc963fSmrg      # Some other compiler flag.
510449dc963fSmrg      -* | +*)
510549dc963fSmrg        func_quote_for_eval "$arg"
510649dc963fSmrg	arg="$func_quote_for_eval_result"
510749dc963fSmrg	;;
51084b0ead49Smrg
510949dc963fSmrg      *.$objext)
511049dc963fSmrg	# A standard object.
511149dc963fSmrg	objs="$objs $arg"
511249dc963fSmrg	;;
51134b0ead49Smrg
511449dc963fSmrg      *.lo)
511549dc963fSmrg	# A libtool-controlled object.
51164b0ead49Smrg
511749dc963fSmrg	# Check to see that this really is a libtool object.
511849dc963fSmrg	if func_lalib_unsafe_p "$arg"; then
511949dc963fSmrg	  pic_object=
512049dc963fSmrg	  non_pic_object=
51214b0ead49Smrg
512249dc963fSmrg	  # Read the .lo file
512349dc963fSmrg	  func_source "$arg"
51244b0ead49Smrg
512549dc963fSmrg	  if test -z "$pic_object" ||
512649dc963fSmrg	     test -z "$non_pic_object" ||
512749dc963fSmrg	     test "$pic_object" = none &&
512849dc963fSmrg	     test "$non_pic_object" = none; then
512949dc963fSmrg	    func_fatal_error "cannot find name of object for \`$arg'"
513049dc963fSmrg	  fi
51314b0ead49Smrg
513249dc963fSmrg	  # Extract subdirectory from the argument.
513349dc963fSmrg	  func_dirname "$arg" "/" ""
513449dc963fSmrg	  xdir="$func_dirname_result"
513552b01e16Smrg
513649dc963fSmrg	  if test "$pic_object" != none; then
513749dc963fSmrg	    # Prepend the subdirectory the object is found in.
513849dc963fSmrg	    pic_object="$xdir$pic_object"
51394b0ead49Smrg
514049dc963fSmrg	    if test "$prev" = dlfiles; then
514149dc963fSmrg	      if test "$build_libtool_libs" = yes && test "$dlopen_support" = yes; then
514249dc963fSmrg		dlfiles="$dlfiles $pic_object"
514349dc963fSmrg		prev=
514449dc963fSmrg		continue
514549dc963fSmrg	      else
514649dc963fSmrg		# If libtool objects are unsupported, then we need to preload.
514749dc963fSmrg		prev=dlprefiles
514849dc963fSmrg	      fi
514949dc963fSmrg	    fi
51504b0ead49Smrg
515149dc963fSmrg	    # CHECK ME:  I think I busted this.  -Ossama
515249dc963fSmrg	    if test "$prev" = dlprefiles; then
515349dc963fSmrg	      # Preload the old-style object.
515449dc963fSmrg	      dlprefiles="$dlprefiles $pic_object"
515549dc963fSmrg	      prev=
515649dc963fSmrg	    fi
51574b0ead49Smrg
515849dc963fSmrg	    # A PIC object.
515949dc963fSmrg	    func_append libobjs " $pic_object"
516049dc963fSmrg	    arg="$pic_object"
516149dc963fSmrg	  fi
51624b0ead49Smrg
516349dc963fSmrg	  # Non-PIC object.
516449dc963fSmrg	  if test "$non_pic_object" != none; then
516549dc963fSmrg	    # Prepend the subdirectory the object is found in.
516649dc963fSmrg	    non_pic_object="$xdir$non_pic_object"
51674b0ead49Smrg
516849dc963fSmrg	    # A standard non-PIC object
516949dc963fSmrg	    func_append non_pic_objects " $non_pic_object"
517049dc963fSmrg	    if test -z "$pic_object" || test "$pic_object" = none ; then
517149dc963fSmrg	      arg="$non_pic_object"
517249dc963fSmrg	    fi
517349dc963fSmrg	  else
517449dc963fSmrg	    # If the PIC object exists, use it instead.
517549dc963fSmrg	    # $xdir was prepended to $pic_object above.
517649dc963fSmrg	    non_pic_object="$pic_object"
517749dc963fSmrg	    func_append non_pic_objects " $non_pic_object"
517849dc963fSmrg	  fi
517949dc963fSmrg	else
518049dc963fSmrg	  # Only an error if not doing a dry-run.
518149dc963fSmrg	  if $opt_dry_run; then
518249dc963fSmrg	    # Extract subdirectory from the argument.
518349dc963fSmrg	    func_dirname "$arg" "/" ""
518449dc963fSmrg	    xdir="$func_dirname_result"
518549dc963fSmrg
518649dc963fSmrg	    func_lo2o "$arg"
518749dc963fSmrg	    pic_object=$xdir$objdir/$func_lo2o_result
518849dc963fSmrg	    non_pic_object=$xdir$func_lo2o_result
518949dc963fSmrg	    func_append libobjs " $pic_object"
519049dc963fSmrg	    func_append non_pic_objects " $non_pic_object"
519149dc963fSmrg	  else
519249dc963fSmrg	    func_fatal_error "\`$arg' is not a valid libtool object"
519349dc963fSmrg	  fi
519449dc963fSmrg	fi
519549dc963fSmrg	;;
51964b0ead49Smrg
519749dc963fSmrg      *.$libext)
519849dc963fSmrg	# An archive.
519949dc963fSmrg	deplibs="$deplibs $arg"
520049dc963fSmrg	old_deplibs="$old_deplibs $arg"
520149dc963fSmrg	continue
520249dc963fSmrg	;;
520349dc963fSmrg
520449dc963fSmrg      *.la)
520549dc963fSmrg	# A libtool-controlled library.
520649dc963fSmrg
520749dc963fSmrg	if test "$prev" = dlfiles; then
520849dc963fSmrg	  # This library was specified with -dlopen.
520949dc963fSmrg	  dlfiles="$dlfiles $arg"
521049dc963fSmrg	  prev=
521149dc963fSmrg	elif test "$prev" = dlprefiles; then
521249dc963fSmrg	  # The library was specified with -dlpreopen.
521349dc963fSmrg	  dlprefiles="$dlprefiles $arg"
521449dc963fSmrg	  prev=
521549dc963fSmrg	else
521649dc963fSmrg	  deplibs="$deplibs $arg"
521749dc963fSmrg	fi
521849dc963fSmrg	continue
521949dc963fSmrg	;;
522049dc963fSmrg
522149dc963fSmrg      # Some other compiler argument.
522249dc963fSmrg      *)
522349dc963fSmrg	# Unknown arguments in both finalize_command and compile_command need
522449dc963fSmrg	# to be aesthetically quoted because they are evaled later.
522549dc963fSmrg	func_quote_for_eval "$arg"
522649dc963fSmrg	arg="$func_quote_for_eval_result"
522749dc963fSmrg	;;
522849dc963fSmrg      esac # arg
522949dc963fSmrg
523049dc963fSmrg      # Now actually substitute the argument into the commands.
523149dc963fSmrg      if test -n "$arg"; then
523249dc963fSmrg	func_append compile_command " $arg"
523349dc963fSmrg	func_append finalize_command " $arg"
523449dc963fSmrg      fi
523549dc963fSmrg    done # argument parsing loop
523649dc963fSmrg
523749dc963fSmrg    test -n "$prev" && \
523849dc963fSmrg      func_fatal_help "the \`$prevarg' option requires an argument"
523949dc963fSmrg
524049dc963fSmrg    if test "$export_dynamic" = yes && test -n "$export_dynamic_flag_spec"; then
524149dc963fSmrg      eval arg=\"$export_dynamic_flag_spec\"
524249dc963fSmrg      func_append compile_command " $arg"
524349dc963fSmrg      func_append finalize_command " $arg"
524449dc963fSmrg    fi
524549dc963fSmrg
524649dc963fSmrg    oldlibs=
524749dc963fSmrg    # calculate the name of the file, without its directory
524849dc963fSmrg    func_basename "$output"
524949dc963fSmrg    outputname="$func_basename_result"
525049dc963fSmrg    libobjs_save="$libobjs"
525149dc963fSmrg
525249dc963fSmrg    if test -n "$shlibpath_var"; then
525349dc963fSmrg      # get the directories listed in $shlibpath_var
52547aa89044Smrg      eval shlib_search_path=\`\$ECHO \"\${$shlibpath_var}\" \| \$SED \'s/:/ /g\'\`
525549dc963fSmrg    else
525649dc963fSmrg      shlib_search_path=
525749dc963fSmrg    fi
525849dc963fSmrg    eval sys_lib_search_path=\"$sys_lib_search_path_spec\"
525949dc963fSmrg    eval sys_lib_dlsearch_path=\"$sys_lib_dlsearch_path_spec\"
526049dc963fSmrg
526149dc963fSmrg    func_dirname "$output" "/" ""
526249dc963fSmrg    output_objdir="$func_dirname_result$objdir"
526349dc963fSmrg    # Create the object directory.
526449dc963fSmrg    func_mkdir_p "$output_objdir"
526549dc963fSmrg
526649dc963fSmrg    # Determine the type of output
526749dc963fSmrg    case $output in
526849dc963fSmrg    "")
526949dc963fSmrg      func_fatal_help "you must specify an output file"
527049dc963fSmrg      ;;
527149dc963fSmrg    *.$libext) linkmode=oldlib ;;
527249dc963fSmrg    *.lo | *.$objext) linkmode=obj ;;
527349dc963fSmrg    *.la) linkmode=lib ;;
527449dc963fSmrg    *) linkmode=prog ;; # Anything else should be a program.
527549dc963fSmrg    esac
527649dc963fSmrg
527749dc963fSmrg    specialdeplibs=
527849dc963fSmrg
527949dc963fSmrg    libs=
528049dc963fSmrg    # Find all interdependent deplibs by searching for libraries
528149dc963fSmrg    # that are linked more than once (e.g. -la -lb -la)
528249dc963fSmrg    for deplib in $deplibs; do
528349dc963fSmrg      if $opt_duplicate_deps ; then
528449dc963fSmrg	case "$libs " in
528549dc963fSmrg	*" $deplib "*) specialdeplibs="$specialdeplibs $deplib" ;;
528649dc963fSmrg	esac
528749dc963fSmrg      fi
528849dc963fSmrg      libs="$libs $deplib"
528949dc963fSmrg    done
529049dc963fSmrg
529149dc963fSmrg    if test "$linkmode" = lib; then
529249dc963fSmrg      libs="$predeps $libs $compiler_lib_search_path $postdeps"
529349dc963fSmrg
529449dc963fSmrg      # Compute libraries that are listed more than once in $predeps
529549dc963fSmrg      # $postdeps and mark them as special (i.e., whose duplicates are
529649dc963fSmrg      # not to be eliminated).
529749dc963fSmrg      pre_post_deps=
529849dc963fSmrg      if $opt_duplicate_compiler_generated_deps; then
529949dc963fSmrg	for pre_post_dep in $predeps $postdeps; do
530049dc963fSmrg	  case "$pre_post_deps " in
530149dc963fSmrg	  *" $pre_post_dep "*) specialdeplibs="$specialdeplibs $pre_post_deps" ;;
530249dc963fSmrg	  esac
530349dc963fSmrg	  pre_post_deps="$pre_post_deps $pre_post_dep"
530449dc963fSmrg	done
530549dc963fSmrg      fi
530649dc963fSmrg      pre_post_deps=
530749dc963fSmrg    fi
530849dc963fSmrg
530949dc963fSmrg    deplibs=
531049dc963fSmrg    newdependency_libs=
531149dc963fSmrg    newlib_search_path=
531249dc963fSmrg    need_relink=no # whether we're linking any uninstalled libtool libraries
531349dc963fSmrg    notinst_deplibs= # not-installed libtool libraries
531449dc963fSmrg    notinst_path= # paths that contain not-installed libtool libraries
531549dc963fSmrg
531649dc963fSmrg    case $linkmode in
531749dc963fSmrg    lib)
531849dc963fSmrg	passes="conv dlpreopen link"
531949dc963fSmrg	for file in $dlfiles $dlprefiles; do
532049dc963fSmrg	  case $file in
532149dc963fSmrg	  *.la) ;;
532249dc963fSmrg	  *)
532349dc963fSmrg	    func_fatal_help "libraries can \`-dlopen' only libtool libraries: $file"
532449dc963fSmrg	    ;;
532549dc963fSmrg	  esac
532649dc963fSmrg	done
532749dc963fSmrg	;;
532849dc963fSmrg    prog)
532949dc963fSmrg	compile_deplibs=
533049dc963fSmrg	finalize_deplibs=
533149dc963fSmrg	alldeplibs=no
533249dc963fSmrg	newdlfiles=
533349dc963fSmrg	newdlprefiles=
533449dc963fSmrg	passes="conv scan dlopen dlpreopen link"
533549dc963fSmrg	;;
533649dc963fSmrg    *)  passes="conv"
533749dc963fSmrg	;;
533849dc963fSmrg    esac
533949dc963fSmrg
534049dc963fSmrg    for pass in $passes; do
534149dc963fSmrg      # The preopen pass in lib mode reverses $deplibs; put it back here
534249dc963fSmrg      # so that -L comes before libs that need it for instance...
534349dc963fSmrg      if test "$linkmode,$pass" = "lib,link"; then
534449dc963fSmrg	## FIXME: Find the place where the list is rebuilt in the wrong
534549dc963fSmrg	##        order, and fix it there properly
534649dc963fSmrg        tmp_deplibs=
534749dc963fSmrg	for deplib in $deplibs; do
534849dc963fSmrg	  tmp_deplibs="$deplib $tmp_deplibs"
534949dc963fSmrg	done
535049dc963fSmrg	deplibs="$tmp_deplibs"
535149dc963fSmrg      fi
535249dc963fSmrg
535349dc963fSmrg      if test "$linkmode,$pass" = "lib,link" ||
535449dc963fSmrg	 test "$linkmode,$pass" = "prog,scan"; then
535549dc963fSmrg	libs="$deplibs"
535649dc963fSmrg	deplibs=
535749dc963fSmrg      fi
535849dc963fSmrg      if test "$linkmode" = prog; then
535949dc963fSmrg	case $pass in
536049dc963fSmrg	dlopen) libs="$dlfiles" ;;
536149dc963fSmrg	dlpreopen) libs="$dlprefiles" ;;
536249dc963fSmrg	link) libs="$deplibs %DEPLIBS% $dependency_libs" ;;
536349dc963fSmrg	esac
536449dc963fSmrg      fi
536549dc963fSmrg      if test "$linkmode,$pass" = "lib,dlpreopen"; then
536649dc963fSmrg	# Collect and forward deplibs of preopened libtool libs
536749dc963fSmrg	for lib in $dlprefiles; do
536849dc963fSmrg	  # Ignore non-libtool-libs
536949dc963fSmrg	  dependency_libs=
537049dc963fSmrg	  case $lib in
537149dc963fSmrg	  *.la)	func_source "$lib" ;;
537249dc963fSmrg	  esac
537349dc963fSmrg
537449dc963fSmrg	  # Collect preopened libtool deplibs, except any this library
537549dc963fSmrg	  # has declared as weak libs
537649dc963fSmrg	  for deplib in $dependency_libs; do
53777aa89044Smrg	    func_basename "$deplib"
53787aa89044Smrg            deplib_base=$func_basename_result
537949dc963fSmrg	    case " $weak_libs " in
538049dc963fSmrg	    *" $deplib_base "*) ;;
538149dc963fSmrg	    *) deplibs="$deplibs $deplib" ;;
538249dc963fSmrg	    esac
538349dc963fSmrg	  done
538449dc963fSmrg	done
538549dc963fSmrg	libs="$dlprefiles"
538649dc963fSmrg      fi
538749dc963fSmrg      if test "$pass" = dlopen; then
538849dc963fSmrg	# Collect dlpreopened libraries
538949dc963fSmrg	save_deplibs="$deplibs"
539049dc963fSmrg	deplibs=
539149dc963fSmrg      fi
539249dc963fSmrg
539349dc963fSmrg      for deplib in $libs; do
539449dc963fSmrg	lib=
539549dc963fSmrg	found=no
539649dc963fSmrg	case $deplib in
539749dc963fSmrg	-mt|-mthreads|-kthread|-Kthread|-pthread|-pthreads|--thread-safe|-threads)
539849dc963fSmrg	  if test "$linkmode,$pass" = "prog,link"; then
539949dc963fSmrg	    compile_deplibs="$deplib $compile_deplibs"
540049dc963fSmrg	    finalize_deplibs="$deplib $finalize_deplibs"
540149dc963fSmrg	  else
540249dc963fSmrg	    compiler_flags="$compiler_flags $deplib"
540349dc963fSmrg	    if test "$linkmode" = lib ; then
540449dc963fSmrg		case "$new_inherited_linker_flags " in
540549dc963fSmrg		    *" $deplib "*) ;;
540649dc963fSmrg		    * ) new_inherited_linker_flags="$new_inherited_linker_flags $deplib" ;;
540749dc963fSmrg		esac
540849dc963fSmrg	    fi
540949dc963fSmrg	  fi
541049dc963fSmrg	  continue
541149dc963fSmrg	  ;;
541249dc963fSmrg	-l*)
541349dc963fSmrg	  if test "$linkmode" != lib && test "$linkmode" != prog; then
541449dc963fSmrg	    func_warning "\`-l' is ignored for archives/objects"
541549dc963fSmrg	    continue
541649dc963fSmrg	  fi
541749dc963fSmrg	  func_stripname '-l' '' "$deplib"
541849dc963fSmrg	  name=$func_stripname_result
541949dc963fSmrg	  if test "$linkmode" = lib; then
542049dc963fSmrg	    searchdirs="$newlib_search_path $lib_search_path $compiler_lib_search_dirs $sys_lib_search_path $shlib_search_path"
542149dc963fSmrg	  else
542249dc963fSmrg	    searchdirs="$newlib_search_path $lib_search_path $sys_lib_search_path $shlib_search_path"
542349dc963fSmrg	  fi
542449dc963fSmrg	  for searchdir in $searchdirs; do
542549dc963fSmrg	    for search_ext in .la $std_shrext .so .a; do
542649dc963fSmrg	      # Search the libtool library
542749dc963fSmrg	      lib="$searchdir/lib${name}${search_ext}"
542849dc963fSmrg	      if test -f "$lib"; then
542949dc963fSmrg		if test "$search_ext" = ".la"; then
543049dc963fSmrg		  found=yes
543149dc963fSmrg		else
543249dc963fSmrg		  found=no
543349dc963fSmrg		fi
543449dc963fSmrg		break 2
543549dc963fSmrg	      fi
543649dc963fSmrg	    done
543749dc963fSmrg	  done
543849dc963fSmrg	  if test "$found" != yes; then
543949dc963fSmrg	    # deplib doesn't seem to be a libtool library
544049dc963fSmrg	    if test "$linkmode,$pass" = "prog,link"; then
544149dc963fSmrg	      compile_deplibs="$deplib $compile_deplibs"
544249dc963fSmrg	      finalize_deplibs="$deplib $finalize_deplibs"
544349dc963fSmrg	    else
544449dc963fSmrg	      deplibs="$deplib $deplibs"
544549dc963fSmrg	      test "$linkmode" = lib && newdependency_libs="$deplib $newdependency_libs"
544649dc963fSmrg	    fi
544749dc963fSmrg	    continue
544849dc963fSmrg	  else # deplib is a libtool library
544949dc963fSmrg	    # If $allow_libtool_libs_with_static_runtimes && $deplib is a stdlib,
545049dc963fSmrg	    # We need to do some special things here, and not later.
545149dc963fSmrg	    if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then
545249dc963fSmrg	      case " $predeps $postdeps " in
545349dc963fSmrg	      *" $deplib "*)
545449dc963fSmrg		if func_lalib_p "$lib"; then
545549dc963fSmrg		  library_names=
545649dc963fSmrg		  old_library=
545749dc963fSmrg		  func_source "$lib"
545849dc963fSmrg		  for l in $old_library $library_names; do
545949dc963fSmrg		    ll="$l"
546049dc963fSmrg		  done
546149dc963fSmrg		  if test "X$ll" = "X$old_library" ; then # only static version available
546249dc963fSmrg		    found=no
546349dc963fSmrg		    func_dirname "$lib" "" "."
546449dc963fSmrg		    ladir="$func_dirname_result"
546549dc963fSmrg		    lib=$ladir/$old_library
546649dc963fSmrg		    if test "$linkmode,$pass" = "prog,link"; then
546749dc963fSmrg		      compile_deplibs="$deplib $compile_deplibs"
546849dc963fSmrg		      finalize_deplibs="$deplib $finalize_deplibs"
546949dc963fSmrg		    else
547049dc963fSmrg		      deplibs="$deplib $deplibs"
547149dc963fSmrg		      test "$linkmode" = lib && newdependency_libs="$deplib $newdependency_libs"
547249dc963fSmrg		    fi
547349dc963fSmrg		    continue
547449dc963fSmrg		  fi
547549dc963fSmrg		fi
547649dc963fSmrg		;;
547749dc963fSmrg	      *) ;;
547849dc963fSmrg	      esac
547949dc963fSmrg	    fi
548049dc963fSmrg	  fi
548149dc963fSmrg	  ;; # -l
548249dc963fSmrg	*.ltframework)
548349dc963fSmrg	  if test "$linkmode,$pass" = "prog,link"; then
548449dc963fSmrg	    compile_deplibs="$deplib $compile_deplibs"
548549dc963fSmrg	    finalize_deplibs="$deplib $finalize_deplibs"
548649dc963fSmrg	  else
548749dc963fSmrg	    deplibs="$deplib $deplibs"
548849dc963fSmrg	    if test "$linkmode" = lib ; then
548949dc963fSmrg		case "$new_inherited_linker_flags " in
549049dc963fSmrg		    *" $deplib "*) ;;
549149dc963fSmrg		    * ) new_inherited_linker_flags="$new_inherited_linker_flags $deplib" ;;
549249dc963fSmrg		esac
549349dc963fSmrg	    fi
549449dc963fSmrg	  fi
549549dc963fSmrg	  continue
549649dc963fSmrg	  ;;
549749dc963fSmrg	-L*)
549849dc963fSmrg	  case $linkmode in
549949dc963fSmrg	  lib)
550049dc963fSmrg	    deplibs="$deplib $deplibs"
550149dc963fSmrg	    test "$pass" = conv && continue
550249dc963fSmrg	    newdependency_libs="$deplib $newdependency_libs"
550349dc963fSmrg	    func_stripname '-L' '' "$deplib"
550449dc963fSmrg	    newlib_search_path="$newlib_search_path $func_stripname_result"
550549dc963fSmrg	    ;;
550649dc963fSmrg	  prog)
550749dc963fSmrg	    if test "$pass" = conv; then
550849dc963fSmrg	      deplibs="$deplib $deplibs"
550949dc963fSmrg	      continue
551049dc963fSmrg	    fi
551149dc963fSmrg	    if test "$pass" = scan; then
551249dc963fSmrg	      deplibs="$deplib $deplibs"
551349dc963fSmrg	    else
551449dc963fSmrg	      compile_deplibs="$deplib $compile_deplibs"
551549dc963fSmrg	      finalize_deplibs="$deplib $finalize_deplibs"
551649dc963fSmrg	    fi
551749dc963fSmrg	    func_stripname '-L' '' "$deplib"
551849dc963fSmrg	    newlib_search_path="$newlib_search_path $func_stripname_result"
551949dc963fSmrg	    ;;
552049dc963fSmrg	  *)
552149dc963fSmrg	    func_warning "\`-L' is ignored for archives/objects"
552249dc963fSmrg	    ;;
552349dc963fSmrg	  esac # linkmode
552449dc963fSmrg	  continue
552549dc963fSmrg	  ;; # -L
552649dc963fSmrg	-R*)
552749dc963fSmrg	  if test "$pass" = link; then
552849dc963fSmrg	    func_stripname '-R' '' "$deplib"
552949dc963fSmrg	    dir=$func_stripname_result
553049dc963fSmrg	    # Make sure the xrpath contains only unique directories.
553149dc963fSmrg	    case "$xrpath " in
553249dc963fSmrg	    *" $dir "*) ;;
553349dc963fSmrg	    *) xrpath="$xrpath $dir" ;;
553449dc963fSmrg	    esac
553549dc963fSmrg	  fi
553649dc963fSmrg	  deplibs="$deplib $deplibs"
553749dc963fSmrg	  continue
553849dc963fSmrg	  ;;
553949dc963fSmrg	*.la) lib="$deplib" ;;
554049dc963fSmrg	*.$libext)
554149dc963fSmrg	  if test "$pass" = conv; then
554249dc963fSmrg	    deplibs="$deplib $deplibs"
554349dc963fSmrg	    continue
554449dc963fSmrg	  fi
554549dc963fSmrg	  case $linkmode in
554649dc963fSmrg	  lib)
554749dc963fSmrg	    # Linking convenience modules into shared libraries is allowed,
554849dc963fSmrg	    # but linking other static libraries is non-portable.
554949dc963fSmrg	    case " $dlpreconveniencelibs " in
555049dc963fSmrg	    *" $deplib "*) ;;
555149dc963fSmrg	    *)
555249dc963fSmrg	      valid_a_lib=no
555349dc963fSmrg	      case $deplibs_check_method in
555449dc963fSmrg		match_pattern*)
555549dc963fSmrg		  set dummy $deplibs_check_method; shift
555649dc963fSmrg		  match_pattern_regex=`expr "$deplibs_check_method" : "$1 \(.*\)"`
55577aa89044Smrg		  if eval "\$ECHO \"$deplib\"" 2>/dev/null | $SED 10q \
555849dc963fSmrg		    | $EGREP "$match_pattern_regex" > /dev/null; then
555949dc963fSmrg		    valid_a_lib=yes
556049dc963fSmrg		  fi
556149dc963fSmrg		;;
556249dc963fSmrg		pass_all)
556349dc963fSmrg		  valid_a_lib=yes
556449dc963fSmrg		;;
556549dc963fSmrg	      esac
556649dc963fSmrg	      if test "$valid_a_lib" != yes; then
55677aa89044Smrg		echo
556849dc963fSmrg		$ECHO "*** Warning: Trying to link with static lib archive $deplib."
55697aa89044Smrg		echo "*** I have the capability to make that library automatically link in when"
55707aa89044Smrg		echo "*** you link to this library.  But I can only do this if you have a"
55717aa89044Smrg		echo "*** shared version of the library, which you do not appear to have"
55727aa89044Smrg		echo "*** because the file extensions .$libext of this argument makes me believe"
55737aa89044Smrg		echo "*** that it is just a static archive that I should not use here."
557449dc963fSmrg	      else
55757aa89044Smrg		echo
557649dc963fSmrg		$ECHO "*** Warning: Linking the shared library $output against the"
557749dc963fSmrg		$ECHO "*** static library $deplib is not portable!"
557849dc963fSmrg		deplibs="$deplib $deplibs"
557949dc963fSmrg	      fi
558049dc963fSmrg	      ;;
558149dc963fSmrg	    esac
558249dc963fSmrg	    continue
558349dc963fSmrg	    ;;
558449dc963fSmrg	  prog)
558549dc963fSmrg	    if test "$pass" != link; then
558649dc963fSmrg	      deplibs="$deplib $deplibs"
558749dc963fSmrg	    else
558849dc963fSmrg	      compile_deplibs="$deplib $compile_deplibs"
558949dc963fSmrg	      finalize_deplibs="$deplib $finalize_deplibs"
559049dc963fSmrg	    fi
559149dc963fSmrg	    continue
559249dc963fSmrg	    ;;
559349dc963fSmrg	  esac # linkmode
559449dc963fSmrg	  ;; # *.$libext
559549dc963fSmrg	*.lo | *.$objext)
559649dc963fSmrg	  if test "$pass" = conv; then
559749dc963fSmrg	    deplibs="$deplib $deplibs"
559849dc963fSmrg	  elif test "$linkmode" = prog; then
559949dc963fSmrg	    if test "$pass" = dlpreopen || test "$dlopen_support" != yes || test "$build_libtool_libs" = no; then
560049dc963fSmrg	      # If there is no dlopen support or we're linking statically,
560149dc963fSmrg	      # we need to preload.
560249dc963fSmrg	      newdlprefiles="$newdlprefiles $deplib"
560349dc963fSmrg	      compile_deplibs="$deplib $compile_deplibs"
560449dc963fSmrg	      finalize_deplibs="$deplib $finalize_deplibs"
560549dc963fSmrg	    else
560649dc963fSmrg	      newdlfiles="$newdlfiles $deplib"
560749dc963fSmrg	    fi
560849dc963fSmrg	  fi
560949dc963fSmrg	  continue
561049dc963fSmrg	  ;;
561149dc963fSmrg	%DEPLIBS%)
561249dc963fSmrg	  alldeplibs=yes
561349dc963fSmrg	  continue
561449dc963fSmrg	  ;;
561549dc963fSmrg	esac # case $deplib
561649dc963fSmrg
561749dc963fSmrg	if test "$found" = yes || test -f "$lib"; then :
561849dc963fSmrg	else
561949dc963fSmrg	  func_fatal_error "cannot find the library \`$lib' or unhandled argument \`$deplib'"
562049dc963fSmrg	fi
562149dc963fSmrg
562249dc963fSmrg	# Check to see that this really is a libtool archive.
562349dc963fSmrg	func_lalib_unsafe_p "$lib" \
562449dc963fSmrg	  || func_fatal_error "\`$lib' is not a valid libtool archive"
562549dc963fSmrg
562649dc963fSmrg	func_dirname "$lib" "" "."
562749dc963fSmrg	ladir="$func_dirname_result"
562849dc963fSmrg
562949dc963fSmrg	dlname=
563049dc963fSmrg	dlopen=
563149dc963fSmrg	dlpreopen=
563249dc963fSmrg	libdir=
563349dc963fSmrg	library_names=
563449dc963fSmrg	old_library=
563549dc963fSmrg	inherited_linker_flags=
563649dc963fSmrg	# If the library was installed with an old release of libtool,
563749dc963fSmrg	# it will not redefine variables installed, or shouldnotlink
563849dc963fSmrg	installed=yes
563949dc963fSmrg	shouldnotlink=no
564049dc963fSmrg	avoidtemprpath=
564149dc963fSmrg
564249dc963fSmrg
564349dc963fSmrg	# Read the .la file
564449dc963fSmrg	func_source "$lib"
564549dc963fSmrg
564649dc963fSmrg	# Convert "-framework foo" to "foo.ltframework"
564749dc963fSmrg	if test -n "$inherited_linker_flags"; then
56487aa89044Smrg	  tmp_inherited_linker_flags=`$ECHO "$inherited_linker_flags" | $SED 's/-framework \([^ $]*\)/\1.ltframework/g'`
564949dc963fSmrg	  for tmp_inherited_linker_flag in $tmp_inherited_linker_flags; do
565049dc963fSmrg	    case " $new_inherited_linker_flags " in
565149dc963fSmrg	      *" $tmp_inherited_linker_flag "*) ;;
565249dc963fSmrg	      *) new_inherited_linker_flags="$new_inherited_linker_flags $tmp_inherited_linker_flag";;
565349dc963fSmrg	    esac
565449dc963fSmrg	  done
565549dc963fSmrg	fi
56567aa89044Smrg	dependency_libs=`$ECHO " $dependency_libs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'`
565749dc963fSmrg	if test "$linkmode,$pass" = "lib,link" ||
565849dc963fSmrg	   test "$linkmode,$pass" = "prog,scan" ||
565949dc963fSmrg	   { test "$linkmode" != prog && test "$linkmode" != lib; }; then
566049dc963fSmrg	  test -n "$dlopen" && dlfiles="$dlfiles $dlopen"
566149dc963fSmrg	  test -n "$dlpreopen" && dlprefiles="$dlprefiles $dlpreopen"
566249dc963fSmrg	fi
566349dc963fSmrg
566449dc963fSmrg	if test "$pass" = conv; then
566549dc963fSmrg	  # Only check for convenience libraries
566649dc963fSmrg	  deplibs="$lib $deplibs"
566749dc963fSmrg	  if test -z "$libdir"; then
566849dc963fSmrg	    if test -z "$old_library"; then
566949dc963fSmrg	      func_fatal_error "cannot find name of link library for \`$lib'"
567049dc963fSmrg	    fi
567149dc963fSmrg	    # It is a libtool convenience library, so add in its objects.
567249dc963fSmrg	    convenience="$convenience $ladir/$objdir/$old_library"
567349dc963fSmrg	    old_convenience="$old_convenience $ladir/$objdir/$old_library"
567449dc963fSmrg	  elif test "$linkmode" != prog && test "$linkmode" != lib; then
567549dc963fSmrg	    func_fatal_error "\`$lib' is not a convenience library"
567649dc963fSmrg	  fi
567749dc963fSmrg	  tmp_libs=
567849dc963fSmrg	  for deplib in $dependency_libs; do
567949dc963fSmrg	    deplibs="$deplib $deplibs"
568049dc963fSmrg	    if $opt_duplicate_deps ; then
568149dc963fSmrg	      case "$tmp_libs " in
568249dc963fSmrg	      *" $deplib "*) specialdeplibs="$specialdeplibs $deplib" ;;
568349dc963fSmrg	      esac
568449dc963fSmrg	    fi
568549dc963fSmrg	    tmp_libs="$tmp_libs $deplib"
568649dc963fSmrg	  done
568749dc963fSmrg	  continue
568849dc963fSmrg	fi # $pass = conv
568949dc963fSmrg
569049dc963fSmrg
569149dc963fSmrg	# Get the name of the library we link against.
569249dc963fSmrg	linklib=
569349dc963fSmrg	for l in $old_library $library_names; do
569449dc963fSmrg	  linklib="$l"
569549dc963fSmrg	done
569649dc963fSmrg	if test -z "$linklib"; then
569749dc963fSmrg	  func_fatal_error "cannot find name of link library for \`$lib'"
569849dc963fSmrg	fi
569949dc963fSmrg
570049dc963fSmrg	# This library was specified with -dlopen.
570149dc963fSmrg	if test "$pass" = dlopen; then
570249dc963fSmrg	  if test -z "$libdir"; then
570349dc963fSmrg	    func_fatal_error "cannot -dlopen a convenience library: \`$lib'"
570449dc963fSmrg	  fi
570549dc963fSmrg	  if test -z "$dlname" ||
570649dc963fSmrg	     test "$dlopen_support" != yes ||
570749dc963fSmrg	     test "$build_libtool_libs" = no; then
570849dc963fSmrg	    # If there is no dlname, no dlopen support or we're linking
570949dc963fSmrg	    # statically, we need to preload.  We also need to preload any
571049dc963fSmrg	    # dependent libraries so libltdl's deplib preloader doesn't
571149dc963fSmrg	    # bomb out in the load deplibs phase.
571249dc963fSmrg	    dlprefiles="$dlprefiles $lib $dependency_libs"
571349dc963fSmrg	  else
571449dc963fSmrg	    newdlfiles="$newdlfiles $lib"
571549dc963fSmrg	  fi
571649dc963fSmrg	  continue
571749dc963fSmrg	fi # $pass = dlopen
571849dc963fSmrg
571949dc963fSmrg	# We need an absolute path.
572049dc963fSmrg	case $ladir in
572149dc963fSmrg	[\\/]* | [A-Za-z]:[\\/]*) abs_ladir="$ladir" ;;
572249dc963fSmrg	*)
572349dc963fSmrg	  abs_ladir=`cd "$ladir" && pwd`
572449dc963fSmrg	  if test -z "$abs_ladir"; then
572549dc963fSmrg	    func_warning "cannot determine absolute directory name of \`$ladir'"
572649dc963fSmrg	    func_warning "passing it literally to the linker, although it might fail"
572749dc963fSmrg	    abs_ladir="$ladir"
572849dc963fSmrg	  fi
572949dc963fSmrg	  ;;
573049dc963fSmrg	esac
573149dc963fSmrg	func_basename "$lib"
573249dc963fSmrg	laname="$func_basename_result"
573349dc963fSmrg
573449dc963fSmrg	# Find the relevant object directory and library name.
573549dc963fSmrg	if test "X$installed" = Xyes; then
573649dc963fSmrg	  if test ! -f "$libdir/$linklib" && test -f "$abs_ladir/$linklib"; then
573749dc963fSmrg	    func_warning "library \`$lib' was moved."
573849dc963fSmrg	    dir="$ladir"
573949dc963fSmrg	    absdir="$abs_ladir"
574049dc963fSmrg	    libdir="$abs_ladir"
574149dc963fSmrg	  else
574249dc963fSmrg	    dir="$libdir"
574349dc963fSmrg	    absdir="$libdir"
574449dc963fSmrg	  fi
574549dc963fSmrg	  test "X$hardcode_automatic" = Xyes && avoidtemprpath=yes
574649dc963fSmrg	else
574749dc963fSmrg	  if test ! -f "$ladir/$objdir/$linklib" && test -f "$abs_ladir/$linklib"; then
574849dc963fSmrg	    dir="$ladir"
574949dc963fSmrg	    absdir="$abs_ladir"
575049dc963fSmrg	    # Remove this search path later
575149dc963fSmrg	    notinst_path="$notinst_path $abs_ladir"
575249dc963fSmrg	  else
575349dc963fSmrg	    dir="$ladir/$objdir"
575449dc963fSmrg	    absdir="$abs_ladir/$objdir"
575549dc963fSmrg	    # Remove this search path later
575649dc963fSmrg	    notinst_path="$notinst_path $abs_ladir"
575749dc963fSmrg	  fi
575849dc963fSmrg	fi # $installed = yes
575949dc963fSmrg	func_stripname 'lib' '.la' "$laname"
576049dc963fSmrg	name=$func_stripname_result
576149dc963fSmrg
576249dc963fSmrg	# This library was specified with -dlpreopen.
576349dc963fSmrg	if test "$pass" = dlpreopen; then
576449dc963fSmrg	  if test -z "$libdir" && test "$linkmode" = prog; then
576549dc963fSmrg	    func_fatal_error "only libraries may -dlpreopen a convenience library: \`$lib'"
576649dc963fSmrg	  fi
576749dc963fSmrg	  # Prefer using a static library (so that no silly _DYNAMIC symbols
576849dc963fSmrg	  # are required to link).
576949dc963fSmrg	  if test -n "$old_library"; then
577049dc963fSmrg	    newdlprefiles="$newdlprefiles $dir/$old_library"
577149dc963fSmrg	    # Keep a list of preopened convenience libraries to check
577249dc963fSmrg	    # that they are being used correctly in the link pass.
577349dc963fSmrg	    test -z "$libdir" && \
577449dc963fSmrg		dlpreconveniencelibs="$dlpreconveniencelibs $dir/$old_library"
577549dc963fSmrg	  # Otherwise, use the dlname, so that lt_dlopen finds it.
577649dc963fSmrg	  elif test -n "$dlname"; then
577749dc963fSmrg	    newdlprefiles="$newdlprefiles $dir/$dlname"
577849dc963fSmrg	  else
577949dc963fSmrg	    newdlprefiles="$newdlprefiles $dir/$linklib"
578049dc963fSmrg	  fi
578149dc963fSmrg	fi # $pass = dlpreopen
578249dc963fSmrg
578349dc963fSmrg	if test -z "$libdir"; then
578449dc963fSmrg	  # Link the convenience library
578549dc963fSmrg	  if test "$linkmode" = lib; then
578649dc963fSmrg	    deplibs="$dir/$old_library $deplibs"
578749dc963fSmrg	  elif test "$linkmode,$pass" = "prog,link"; then
578849dc963fSmrg	    compile_deplibs="$dir/$old_library $compile_deplibs"
578949dc963fSmrg	    finalize_deplibs="$dir/$old_library $finalize_deplibs"
579049dc963fSmrg	  else
579149dc963fSmrg	    deplibs="$lib $deplibs" # used for prog,scan pass
579249dc963fSmrg	  fi
579349dc963fSmrg	  continue
579449dc963fSmrg	fi
579549dc963fSmrg
579649dc963fSmrg
579749dc963fSmrg	if test "$linkmode" = prog && test "$pass" != link; then
579849dc963fSmrg	  newlib_search_path="$newlib_search_path $ladir"
579949dc963fSmrg	  deplibs="$lib $deplibs"
580049dc963fSmrg
580149dc963fSmrg	  linkalldeplibs=no
580249dc963fSmrg	  if test "$link_all_deplibs" != no || test -z "$library_names" ||
580349dc963fSmrg	     test "$build_libtool_libs" = no; then
580449dc963fSmrg	    linkalldeplibs=yes
580549dc963fSmrg	  fi
580649dc963fSmrg
580749dc963fSmrg	  tmp_libs=
580849dc963fSmrg	  for deplib in $dependency_libs; do
580949dc963fSmrg	    case $deplib in
581049dc963fSmrg	    -L*) func_stripname '-L' '' "$deplib"
581149dc963fSmrg	         newlib_search_path="$newlib_search_path $func_stripname_result"
581249dc963fSmrg		 ;;
581349dc963fSmrg	    esac
581449dc963fSmrg	    # Need to link against all dependency_libs?
581549dc963fSmrg	    if test "$linkalldeplibs" = yes; then
581649dc963fSmrg	      deplibs="$deplib $deplibs"
581749dc963fSmrg	    else
581849dc963fSmrg	      # Need to hardcode shared library paths
581949dc963fSmrg	      # or/and link against static libraries
582049dc963fSmrg	      newdependency_libs="$deplib $newdependency_libs"
582149dc963fSmrg	    fi
582249dc963fSmrg	    if $opt_duplicate_deps ; then
582349dc963fSmrg	      case "$tmp_libs " in
582449dc963fSmrg	      *" $deplib "*) specialdeplibs="$specialdeplibs $deplib" ;;
582549dc963fSmrg	      esac
582649dc963fSmrg	    fi
582749dc963fSmrg	    tmp_libs="$tmp_libs $deplib"
582849dc963fSmrg	  done # for deplib
582949dc963fSmrg	  continue
583049dc963fSmrg	fi # $linkmode = prog...
583149dc963fSmrg
583249dc963fSmrg	if test "$linkmode,$pass" = "prog,link"; then
583349dc963fSmrg	  if test -n "$library_names" &&
583449dc963fSmrg	     { { test "$prefer_static_libs" = no ||
583549dc963fSmrg	         test "$prefer_static_libs,$installed" = "built,yes"; } ||
583649dc963fSmrg	       test -z "$old_library"; }; then
583749dc963fSmrg	    # We need to hardcode the library path
583849dc963fSmrg	    if test -n "$shlibpath_var" && test -z "$avoidtemprpath" ; then
583949dc963fSmrg	      # Make sure the rpath contains only unique directories.
584049dc963fSmrg	      case "$temp_rpath:" in
584149dc963fSmrg	      *"$absdir:"*) ;;
584249dc963fSmrg	      *) temp_rpath="$temp_rpath$absdir:" ;;
584349dc963fSmrg	      esac
584449dc963fSmrg	    fi
584549dc963fSmrg
584649dc963fSmrg	    # Hardcode the library path.
584749dc963fSmrg	    # Skip directories that are in the system default run-time
584849dc963fSmrg	    # search path.
584949dc963fSmrg	    case " $sys_lib_dlsearch_path " in
585049dc963fSmrg	    *" $absdir "*) ;;
585149dc963fSmrg	    *)
585249dc963fSmrg	      case "$compile_rpath " in
585349dc963fSmrg	      *" $absdir "*) ;;
585449dc963fSmrg	      *) compile_rpath="$compile_rpath $absdir"
585549dc963fSmrg	      esac
585649dc963fSmrg	      ;;
585749dc963fSmrg	    esac
585849dc963fSmrg	    case " $sys_lib_dlsearch_path " in
585949dc963fSmrg	    *" $libdir "*) ;;
586049dc963fSmrg	    *)
586149dc963fSmrg	      case "$finalize_rpath " in
586249dc963fSmrg	      *" $libdir "*) ;;
586349dc963fSmrg	      *) finalize_rpath="$finalize_rpath $libdir"
586449dc963fSmrg	      esac
586549dc963fSmrg	      ;;
586649dc963fSmrg	    esac
586749dc963fSmrg	  fi # $linkmode,$pass = prog,link...
586849dc963fSmrg
586949dc963fSmrg	  if test "$alldeplibs" = yes &&
587049dc963fSmrg	     { test "$deplibs_check_method" = pass_all ||
587149dc963fSmrg	       { test "$build_libtool_libs" = yes &&
587249dc963fSmrg		 test -n "$library_names"; }; }; then
587349dc963fSmrg	    # We only need to search for static libraries
587449dc963fSmrg	    continue
587549dc963fSmrg	  fi
587649dc963fSmrg	fi
587749dc963fSmrg
587849dc963fSmrg	link_static=no # Whether the deplib will be linked statically
587949dc963fSmrg	use_static_libs=$prefer_static_libs
588049dc963fSmrg	if test "$use_static_libs" = built && test "$installed" = yes; then
588149dc963fSmrg	  use_static_libs=no
588249dc963fSmrg	fi
588349dc963fSmrg	if test -n "$library_names" &&
588449dc963fSmrg	   { test "$use_static_libs" = no || test -z "$old_library"; }; then
588549dc963fSmrg	  case $host in
588649dc963fSmrg	  *cygwin* | *mingw* | *cegcc*)
588749dc963fSmrg	      # No point in relinking DLLs because paths are not encoded
588849dc963fSmrg	      notinst_deplibs="$notinst_deplibs $lib"
588949dc963fSmrg	      need_relink=no
589049dc963fSmrg	    ;;
589149dc963fSmrg	  *)
589249dc963fSmrg	    if test "$installed" = no; then
589349dc963fSmrg	      notinst_deplibs="$notinst_deplibs $lib"
589449dc963fSmrg	      need_relink=yes
589549dc963fSmrg	    fi
589649dc963fSmrg	    ;;
589749dc963fSmrg	  esac
589849dc963fSmrg	  # This is a shared library
589949dc963fSmrg
590049dc963fSmrg	  # Warn about portability, can't link against -module's on some
590149dc963fSmrg	  # systems (darwin).  Don't bleat about dlopened modules though!
590249dc963fSmrg	  dlopenmodule=""
590349dc963fSmrg	  for dlpremoduletest in $dlprefiles; do
590449dc963fSmrg	    if test "X$dlpremoduletest" = "X$lib"; then
590549dc963fSmrg	      dlopenmodule="$dlpremoduletest"
590649dc963fSmrg	      break
590749dc963fSmrg	    fi
590849dc963fSmrg	  done
590949dc963fSmrg	  if test -z "$dlopenmodule" && test "$shouldnotlink" = yes && test "$pass" = link; then
59107aa89044Smrg	    echo
591149dc963fSmrg	    if test "$linkmode" = prog; then
591249dc963fSmrg	      $ECHO "*** Warning: Linking the executable $output against the loadable module"
591349dc963fSmrg	    else
591449dc963fSmrg	      $ECHO "*** Warning: Linking the shared library $output against the loadable module"
591549dc963fSmrg	    fi
591649dc963fSmrg	    $ECHO "*** $linklib is not portable!"
591749dc963fSmrg	  fi
591849dc963fSmrg	  if test "$linkmode" = lib &&
591949dc963fSmrg	     test "$hardcode_into_libs" = yes; then
592049dc963fSmrg	    # Hardcode the library path.
592149dc963fSmrg	    # Skip directories that are in the system default run-time
592249dc963fSmrg	    # search path.
592349dc963fSmrg	    case " $sys_lib_dlsearch_path " in
592449dc963fSmrg	    *" $absdir "*) ;;
592549dc963fSmrg	    *)
592649dc963fSmrg	      case "$compile_rpath " in
592749dc963fSmrg	      *" $absdir "*) ;;
592849dc963fSmrg	      *) compile_rpath="$compile_rpath $absdir"
592949dc963fSmrg	      esac
593049dc963fSmrg	      ;;
593149dc963fSmrg	    esac
593249dc963fSmrg	    case " $sys_lib_dlsearch_path " in
593349dc963fSmrg	    *" $libdir "*) ;;
593449dc963fSmrg	    *)
593549dc963fSmrg	      case "$finalize_rpath " in
593649dc963fSmrg	      *" $libdir "*) ;;
593749dc963fSmrg	      *) finalize_rpath="$finalize_rpath $libdir"
593849dc963fSmrg	      esac
593949dc963fSmrg	      ;;
594049dc963fSmrg	    esac
594149dc963fSmrg	  fi
594249dc963fSmrg
594349dc963fSmrg	  if test -n "$old_archive_from_expsyms_cmds"; then
594449dc963fSmrg	    # figure out the soname
594549dc963fSmrg	    set dummy $library_names
594649dc963fSmrg	    shift
594749dc963fSmrg	    realname="$1"
594849dc963fSmrg	    shift
594949dc963fSmrg	    libname=`eval "\\$ECHO \"$libname_spec\""`
595049dc963fSmrg	    # use dlname if we got it. it's perfectly good, no?
595149dc963fSmrg	    if test -n "$dlname"; then
595249dc963fSmrg	      soname="$dlname"
595349dc963fSmrg	    elif test -n "$soname_spec"; then
595449dc963fSmrg	      # bleh windows
595549dc963fSmrg	      case $host in
595649dc963fSmrg	      *cygwin* | mingw* | *cegcc*)
595749dc963fSmrg	        func_arith $current - $age
595849dc963fSmrg		major=$func_arith_result
595949dc963fSmrg		versuffix="-$major"
596049dc963fSmrg		;;
596149dc963fSmrg	      esac
596249dc963fSmrg	      eval soname=\"$soname_spec\"
596349dc963fSmrg	    else
596449dc963fSmrg	      soname="$realname"
596549dc963fSmrg	    fi
596649dc963fSmrg
596749dc963fSmrg	    # Make a new name for the extract_expsyms_cmds to use
596849dc963fSmrg	    soroot="$soname"
596949dc963fSmrg	    func_basename "$soroot"
597049dc963fSmrg	    soname="$func_basename_result"
597149dc963fSmrg	    func_stripname 'lib' '.dll' "$soname"
597249dc963fSmrg	    newlib=libimp-$func_stripname_result.a
597349dc963fSmrg
597449dc963fSmrg	    # If the library has no export list, then create one now
597549dc963fSmrg	    if test -f "$output_objdir/$soname-def"; then :
597649dc963fSmrg	    else
597749dc963fSmrg	      func_verbose "extracting exported symbol list from \`$soname'"
597849dc963fSmrg	      func_execute_cmds "$extract_expsyms_cmds" 'exit $?'
597949dc963fSmrg	    fi
598049dc963fSmrg
598149dc963fSmrg	    # Create $newlib
598249dc963fSmrg	    if test -f "$output_objdir/$newlib"; then :; else
598349dc963fSmrg	      func_verbose "generating import library for \`$soname'"
598449dc963fSmrg	      func_execute_cmds "$old_archive_from_expsyms_cmds" 'exit $?'
598549dc963fSmrg	    fi
598649dc963fSmrg	    # make sure the library variables are pointing to the new library
598749dc963fSmrg	    dir=$output_objdir
598849dc963fSmrg	    linklib=$newlib
598949dc963fSmrg	  fi # test -n "$old_archive_from_expsyms_cmds"
599049dc963fSmrg
599149dc963fSmrg	  if test "$linkmode" = prog || test "$mode" != relink; then
599249dc963fSmrg	    add_shlibpath=
599349dc963fSmrg	    add_dir=
599449dc963fSmrg	    add=
599549dc963fSmrg	    lib_linked=yes
599649dc963fSmrg	    case $hardcode_action in
599749dc963fSmrg	    immediate | unsupported)
599849dc963fSmrg	      if test "$hardcode_direct" = no; then
599949dc963fSmrg		add="$dir/$linklib"
600049dc963fSmrg		case $host in
600149dc963fSmrg		  *-*-sco3.2v5.0.[024]*) add_dir="-L$dir" ;;
600249dc963fSmrg		  *-*-sysv4*uw2*) add_dir="-L$dir" ;;
600349dc963fSmrg		  *-*-sysv5OpenUNIX* | *-*-sysv5UnixWare7.[01].[10]* | \
600449dc963fSmrg		    *-*-unixware7*) add_dir="-L$dir" ;;
600549dc963fSmrg		  *-*-darwin* )
600649dc963fSmrg		    # if the lib is a (non-dlopened) module then we can not
600749dc963fSmrg		    # link against it, someone is ignoring the earlier warnings
600849dc963fSmrg		    if /usr/bin/file -L $add 2> /dev/null |
600949dc963fSmrg			 $GREP ": [^:]* bundle" >/dev/null ; then
601049dc963fSmrg		      if test "X$dlopenmodule" != "X$lib"; then
601149dc963fSmrg			$ECHO "*** Warning: lib $linklib is a module, not a shared library"
601249dc963fSmrg			if test -z "$old_library" ; then
60137aa89044Smrg			  echo
60147aa89044Smrg			  echo "*** And there doesn't seem to be a static archive available"
60157aa89044Smrg			  echo "*** The link will probably fail, sorry"
601649dc963fSmrg			else
601749dc963fSmrg			  add="$dir/$old_library"
601849dc963fSmrg			fi
601949dc963fSmrg		      elif test -n "$old_library"; then
602049dc963fSmrg			add="$dir/$old_library"
602149dc963fSmrg		      fi
602249dc963fSmrg		    fi
602349dc963fSmrg		esac
602449dc963fSmrg	      elif test "$hardcode_minus_L" = no; then
602549dc963fSmrg		case $host in
602649dc963fSmrg		*-*-sunos*) add_shlibpath="$dir" ;;
602749dc963fSmrg		esac
602849dc963fSmrg		add_dir="-L$dir"
602949dc963fSmrg		add="-l$name"
603049dc963fSmrg	      elif test "$hardcode_shlibpath_var" = no; then
603149dc963fSmrg		add_shlibpath="$dir"
603249dc963fSmrg		add="-l$name"
603349dc963fSmrg	      else
603449dc963fSmrg		lib_linked=no
603549dc963fSmrg	      fi
603649dc963fSmrg	      ;;
603749dc963fSmrg	    relink)
603849dc963fSmrg	      if test "$hardcode_direct" = yes &&
603949dc963fSmrg	         test "$hardcode_direct_absolute" = no; then
604049dc963fSmrg		add="$dir/$linklib"
604149dc963fSmrg	      elif test "$hardcode_minus_L" = yes; then
604249dc963fSmrg		add_dir="-L$dir"
604349dc963fSmrg		# Try looking first in the location we're being installed to.
604449dc963fSmrg		if test -n "$inst_prefix_dir"; then
604549dc963fSmrg		  case $libdir in
604649dc963fSmrg		    [\\/]*)
604749dc963fSmrg		      add_dir="$add_dir -L$inst_prefix_dir$libdir"
604849dc963fSmrg		      ;;
604949dc963fSmrg		  esac
605049dc963fSmrg		fi
605149dc963fSmrg		add="-l$name"
605249dc963fSmrg	      elif test "$hardcode_shlibpath_var" = yes; then
605349dc963fSmrg		add_shlibpath="$dir"
605449dc963fSmrg		add="-l$name"
605549dc963fSmrg	      else
605649dc963fSmrg		lib_linked=no
605749dc963fSmrg	      fi
605849dc963fSmrg	      ;;
605949dc963fSmrg	    *) lib_linked=no ;;
606049dc963fSmrg	    esac
606149dc963fSmrg
606249dc963fSmrg	    if test "$lib_linked" != yes; then
606349dc963fSmrg	      func_fatal_configuration "unsupported hardcode properties"
606449dc963fSmrg	    fi
606549dc963fSmrg
606649dc963fSmrg	    if test -n "$add_shlibpath"; then
606749dc963fSmrg	      case :$compile_shlibpath: in
606849dc963fSmrg	      *":$add_shlibpath:"*) ;;
606949dc963fSmrg	      *) compile_shlibpath="$compile_shlibpath$add_shlibpath:" ;;
607049dc963fSmrg	      esac
607149dc963fSmrg	    fi
607249dc963fSmrg	    if test "$linkmode" = prog; then
607349dc963fSmrg	      test -n "$add_dir" && compile_deplibs="$add_dir $compile_deplibs"
607449dc963fSmrg	      test -n "$add" && compile_deplibs="$add $compile_deplibs"
607549dc963fSmrg	    else
607649dc963fSmrg	      test -n "$add_dir" && deplibs="$add_dir $deplibs"
607749dc963fSmrg	      test -n "$add" && deplibs="$add $deplibs"
607849dc963fSmrg	      if test "$hardcode_direct" != yes &&
607949dc963fSmrg		 test "$hardcode_minus_L" != yes &&
608049dc963fSmrg		 test "$hardcode_shlibpath_var" = yes; then
608149dc963fSmrg		case :$finalize_shlibpath: in
608249dc963fSmrg		*":$libdir:"*) ;;
608349dc963fSmrg		*) finalize_shlibpath="$finalize_shlibpath$libdir:" ;;
608449dc963fSmrg		esac
608549dc963fSmrg	      fi
608649dc963fSmrg	    fi
608749dc963fSmrg	  fi
608849dc963fSmrg
608949dc963fSmrg	  if test "$linkmode" = prog || test "$mode" = relink; then
609049dc963fSmrg	    add_shlibpath=
609149dc963fSmrg	    add_dir=
609249dc963fSmrg	    add=
609349dc963fSmrg	    # Finalize command for both is simple: just hardcode it.
609449dc963fSmrg	    if test "$hardcode_direct" = yes &&
609549dc963fSmrg	       test "$hardcode_direct_absolute" = no; then
609649dc963fSmrg	      add="$libdir/$linklib"
609749dc963fSmrg	    elif test "$hardcode_minus_L" = yes; then
609849dc963fSmrg	      add_dir="-L$libdir"
609949dc963fSmrg	      add="-l$name"
610049dc963fSmrg	    elif test "$hardcode_shlibpath_var" = yes; then
610149dc963fSmrg	      case :$finalize_shlibpath: in
610249dc963fSmrg	      *":$libdir:"*) ;;
610349dc963fSmrg	      *) finalize_shlibpath="$finalize_shlibpath$libdir:" ;;
610449dc963fSmrg	      esac
610549dc963fSmrg	      add="-l$name"
610649dc963fSmrg	    elif test "$hardcode_automatic" = yes; then
610749dc963fSmrg	      if test -n "$inst_prefix_dir" &&
610849dc963fSmrg		 test -f "$inst_prefix_dir$libdir/$linklib" ; then
610949dc963fSmrg		add="$inst_prefix_dir$libdir/$linklib"
611049dc963fSmrg	      else
611149dc963fSmrg		add="$libdir/$linklib"
611249dc963fSmrg	      fi
611349dc963fSmrg	    else
611449dc963fSmrg	      # We cannot seem to hardcode it, guess we'll fake it.
611549dc963fSmrg	      add_dir="-L$libdir"
611649dc963fSmrg	      # Try looking first in the location we're being installed to.
611749dc963fSmrg	      if test -n "$inst_prefix_dir"; then
611849dc963fSmrg		case $libdir in
611949dc963fSmrg		  [\\/]*)
612049dc963fSmrg		    add_dir="$add_dir -L$inst_prefix_dir$libdir"
612149dc963fSmrg		    ;;
612249dc963fSmrg		esac
612349dc963fSmrg	      fi
612449dc963fSmrg	      add="-l$name"
612549dc963fSmrg	    fi
612649dc963fSmrg
612749dc963fSmrg	    if test "$linkmode" = prog; then
612849dc963fSmrg	      test -n "$add_dir" && finalize_deplibs="$add_dir $finalize_deplibs"
612949dc963fSmrg	      test -n "$add" && finalize_deplibs="$add $finalize_deplibs"
613049dc963fSmrg	    else
613149dc963fSmrg	      test -n "$add_dir" && deplibs="$add_dir $deplibs"
613249dc963fSmrg	      test -n "$add" && deplibs="$add $deplibs"
613349dc963fSmrg	    fi
613449dc963fSmrg	  fi
613549dc963fSmrg	elif test "$linkmode" = prog; then
613649dc963fSmrg	  # Here we assume that one of hardcode_direct or hardcode_minus_L
613749dc963fSmrg	  # is not unsupported.  This is valid on all known static and
613849dc963fSmrg	  # shared platforms.
613949dc963fSmrg	  if test "$hardcode_direct" != unsupported; then
614049dc963fSmrg	    test -n "$old_library" && linklib="$old_library"
614149dc963fSmrg	    compile_deplibs="$dir/$linklib $compile_deplibs"
614249dc963fSmrg	    finalize_deplibs="$dir/$linklib $finalize_deplibs"
614349dc963fSmrg	  else
614449dc963fSmrg	    compile_deplibs="-l$name -L$dir $compile_deplibs"
614549dc963fSmrg	    finalize_deplibs="-l$name -L$dir $finalize_deplibs"
614649dc963fSmrg	  fi
614749dc963fSmrg	elif test "$build_libtool_libs" = yes; then
614849dc963fSmrg	  # Not a shared library
614949dc963fSmrg	  if test "$deplibs_check_method" != pass_all; then
615049dc963fSmrg	    # We're trying link a shared library against a static one
615149dc963fSmrg	    # but the system doesn't support it.
615249dc963fSmrg
615349dc963fSmrg	    # Just print a warning and add the library to dependency_libs so
615449dc963fSmrg	    # that the program can be linked against the static library.
61557aa89044Smrg	    echo
615649dc963fSmrg	    $ECHO "*** Warning: This system can not link to static lib archive $lib."
61577aa89044Smrg	    echo "*** I have the capability to make that library automatically link in when"
61587aa89044Smrg	    echo "*** you link to this library.  But I can only do this if you have a"
61597aa89044Smrg	    echo "*** shared version of the library, which you do not appear to have."
616049dc963fSmrg	    if test "$module" = yes; then
61617aa89044Smrg	      echo "*** But as you try to build a module library, libtool will still create "
61627aa89044Smrg	      echo "*** a static module, that should work as long as the dlopening application"
61637aa89044Smrg	      echo "*** is linked with the -dlopen flag to resolve symbols at runtime."
616449dc963fSmrg	      if test -z "$global_symbol_pipe"; then
61657aa89044Smrg		echo
61667aa89044Smrg		echo "*** However, this would only work if libtool was able to extract symbol"
61677aa89044Smrg		echo "*** lists from a program, using \`nm' or equivalent, but libtool could"
61687aa89044Smrg		echo "*** not find such a program.  So, this module is probably useless."
61697aa89044Smrg		echo "*** \`nm' from GNU binutils and a full rebuild may help."
617049dc963fSmrg	      fi
617149dc963fSmrg	      if test "$build_old_libs" = no; then
617249dc963fSmrg		build_libtool_libs=module
617349dc963fSmrg		build_old_libs=yes
617449dc963fSmrg	      else
617549dc963fSmrg		build_libtool_libs=no
617649dc963fSmrg	      fi
617749dc963fSmrg	    fi
617849dc963fSmrg	  else
617949dc963fSmrg	    deplibs="$dir/$old_library $deplibs"
618049dc963fSmrg	    link_static=yes
618149dc963fSmrg	  fi
618249dc963fSmrg	fi # link shared/static library?
618349dc963fSmrg
618449dc963fSmrg	if test "$linkmode" = lib; then
618549dc963fSmrg	  if test -n "$dependency_libs" &&
618649dc963fSmrg	     { test "$hardcode_into_libs" != yes ||
618749dc963fSmrg	       test "$build_old_libs" = yes ||
618849dc963fSmrg	       test "$link_static" = yes; }; then
618949dc963fSmrg	    # Extract -R from dependency_libs
619049dc963fSmrg	    temp_deplibs=
619149dc963fSmrg	    for libdir in $dependency_libs; do
619249dc963fSmrg	      case $libdir in
619349dc963fSmrg	      -R*) func_stripname '-R' '' "$libdir"
619449dc963fSmrg	           temp_xrpath=$func_stripname_result
619549dc963fSmrg		   case " $xrpath " in
619649dc963fSmrg		   *" $temp_xrpath "*) ;;
619749dc963fSmrg		   *) xrpath="$xrpath $temp_xrpath";;
619849dc963fSmrg		   esac;;
619949dc963fSmrg	      *) temp_deplibs="$temp_deplibs $libdir";;
620049dc963fSmrg	      esac
620149dc963fSmrg	    done
620249dc963fSmrg	    dependency_libs="$temp_deplibs"
620349dc963fSmrg	  fi
620449dc963fSmrg
620549dc963fSmrg	  newlib_search_path="$newlib_search_path $absdir"
620649dc963fSmrg	  # Link against this library
620749dc963fSmrg	  test "$link_static" = no && newdependency_libs="$abs_ladir/$laname $newdependency_libs"
620849dc963fSmrg	  # ... and its dependency_libs
620949dc963fSmrg	  tmp_libs=
621049dc963fSmrg	  for deplib in $dependency_libs; do
621149dc963fSmrg	    newdependency_libs="$deplib $newdependency_libs"
621249dc963fSmrg	    if $opt_duplicate_deps ; then
621349dc963fSmrg	      case "$tmp_libs " in
621449dc963fSmrg	      *" $deplib "*) specialdeplibs="$specialdeplibs $deplib" ;;
621549dc963fSmrg	      esac
621649dc963fSmrg	    fi
621749dc963fSmrg	    tmp_libs="$tmp_libs $deplib"
621849dc963fSmrg	  done
621949dc963fSmrg
622049dc963fSmrg	  if test "$link_all_deplibs" != no; then
622149dc963fSmrg	    # Add the search paths of all dependency libraries
622249dc963fSmrg	    for deplib in $dependency_libs; do
62237aa89044Smrg	      path=
622449dc963fSmrg	      case $deplib in
622549dc963fSmrg	      -L*) path="$deplib" ;;
622649dc963fSmrg	      *.la)
622749dc963fSmrg	        func_dirname "$deplib" "" "."
622849dc963fSmrg		dir="$func_dirname_result"
622949dc963fSmrg		# We need an absolute path.
623049dc963fSmrg		case $dir in
623149dc963fSmrg		[\\/]* | [A-Za-z]:[\\/]*) absdir="$dir" ;;
623249dc963fSmrg		*)
623349dc963fSmrg		  absdir=`cd "$dir" && pwd`
623449dc963fSmrg		  if test -z "$absdir"; then
623549dc963fSmrg		    func_warning "cannot determine absolute directory name of \`$dir'"
623649dc963fSmrg		    absdir="$dir"
623749dc963fSmrg		  fi
623849dc963fSmrg		  ;;
623949dc963fSmrg		esac
624049dc963fSmrg		if $GREP "^installed=no" $deplib > /dev/null; then
624149dc963fSmrg		case $host in
624249dc963fSmrg		*-*-darwin*)
624349dc963fSmrg		  depdepl=
624449dc963fSmrg		  eval deplibrary_names=`${SED} -n -e 's/^library_names=\(.*\)$/\1/p' $deplib`
624549dc963fSmrg		  if test -n "$deplibrary_names" ; then
624649dc963fSmrg		    for tmp in $deplibrary_names ; do
624749dc963fSmrg		      depdepl=$tmp
624849dc963fSmrg		    done
624949dc963fSmrg		    if test -f "$absdir/$objdir/$depdepl" ; then
625049dc963fSmrg		      depdepl="$absdir/$objdir/$depdepl"
625149dc963fSmrg		      darwin_install_name=`${OTOOL} -L $depdepl | awk '{if (NR == 2) {print $1;exit}}'`
625249dc963fSmrg                      if test -z "$darwin_install_name"; then
625349dc963fSmrg                          darwin_install_name=`${OTOOL64} -L $depdepl  | awk '{if (NR == 2) {print $1;exit}}'`
625449dc963fSmrg                      fi
625549dc963fSmrg		      compiler_flags="$compiler_flags ${wl}-dylib_file ${wl}${darwin_install_name}:${depdepl}"
625649dc963fSmrg		      linker_flags="$linker_flags -dylib_file ${darwin_install_name}:${depdepl}"
625749dc963fSmrg		      path=
625849dc963fSmrg		    fi
625949dc963fSmrg		  fi
626049dc963fSmrg		  ;;
626149dc963fSmrg		*)
626249dc963fSmrg		  path="-L$absdir/$objdir"
626349dc963fSmrg		  ;;
626449dc963fSmrg		esac
626549dc963fSmrg		else
626649dc963fSmrg		  eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $deplib`
626749dc963fSmrg		  test -z "$libdir" && \
626849dc963fSmrg		    func_fatal_error "\`$deplib' is not a valid libtool archive"
626949dc963fSmrg		  test "$absdir" != "$libdir" && \
627049dc963fSmrg		    func_warning "\`$deplib' seems to be moved"
627149dc963fSmrg
627249dc963fSmrg		  path="-L$absdir"
627349dc963fSmrg		fi
627449dc963fSmrg		;;
627549dc963fSmrg	      esac
627649dc963fSmrg	      case " $deplibs " in
627749dc963fSmrg	      *" $path "*) ;;
627849dc963fSmrg	      *) deplibs="$path $deplibs" ;;
627949dc963fSmrg	      esac
628049dc963fSmrg	    done
628149dc963fSmrg	  fi # link_all_deplibs != no
628249dc963fSmrg	fi # linkmode = lib
628349dc963fSmrg      done # for deplib in $libs
628449dc963fSmrg      if test "$pass" = link; then
628549dc963fSmrg	if test "$linkmode" = "prog"; then
628649dc963fSmrg	  compile_deplibs="$new_inherited_linker_flags $compile_deplibs"
628749dc963fSmrg	  finalize_deplibs="$new_inherited_linker_flags $finalize_deplibs"
628849dc963fSmrg	else
62897aa89044Smrg	  compiler_flags="$compiler_flags "`$ECHO " $new_inherited_linker_flags" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'`
629049dc963fSmrg	fi
629149dc963fSmrg      fi
629249dc963fSmrg      dependency_libs="$newdependency_libs"
629349dc963fSmrg      if test "$pass" = dlpreopen; then
629449dc963fSmrg	# Link the dlpreopened libraries before other libraries
629549dc963fSmrg	for deplib in $save_deplibs; do
629649dc963fSmrg	  deplibs="$deplib $deplibs"
629749dc963fSmrg	done
629849dc963fSmrg      fi
629949dc963fSmrg      if test "$pass" != dlopen; then
630049dc963fSmrg	if test "$pass" != conv; then
630149dc963fSmrg	  # Make sure lib_search_path contains only unique directories.
630249dc963fSmrg	  lib_search_path=
630349dc963fSmrg	  for dir in $newlib_search_path; do
630449dc963fSmrg	    case "$lib_search_path " in
630549dc963fSmrg	    *" $dir "*) ;;
630649dc963fSmrg	    *) lib_search_path="$lib_search_path $dir" ;;
630749dc963fSmrg	    esac
630849dc963fSmrg	  done
630949dc963fSmrg	  newlib_search_path=
631049dc963fSmrg	fi
631149dc963fSmrg
631249dc963fSmrg	if test "$linkmode,$pass" != "prog,link"; then
631349dc963fSmrg	  vars="deplibs"
631449dc963fSmrg	else
631549dc963fSmrg	  vars="compile_deplibs finalize_deplibs"
631649dc963fSmrg	fi
631749dc963fSmrg	for var in $vars dependency_libs; do
631849dc963fSmrg	  # Add libraries to $var in reverse order
631949dc963fSmrg	  eval tmp_libs=\"\$$var\"
632049dc963fSmrg	  new_libs=
632149dc963fSmrg	  for deplib in $tmp_libs; do
632249dc963fSmrg	    # FIXME: Pedantically, this is the right thing to do, so
632349dc963fSmrg	    #        that some nasty dependency loop isn't accidentally
632449dc963fSmrg	    #        broken:
632549dc963fSmrg	    #new_libs="$deplib $new_libs"
632649dc963fSmrg	    # Pragmatically, this seems to cause very few problems in
632749dc963fSmrg	    # practice:
632849dc963fSmrg	    case $deplib in
632949dc963fSmrg	    -L*) new_libs="$deplib $new_libs" ;;
633049dc963fSmrg	    -R*) ;;
633149dc963fSmrg	    *)
633249dc963fSmrg	      # And here is the reason: when a library appears more
633349dc963fSmrg	      # than once as an explicit dependence of a library, or
633449dc963fSmrg	      # is implicitly linked in more than once by the
633549dc963fSmrg	      # compiler, it is considered special, and multiple
633649dc963fSmrg	      # occurrences thereof are not removed.  Compare this
633749dc963fSmrg	      # with having the same library being listed as a
633849dc963fSmrg	      # dependency of multiple other libraries: in this case,
633949dc963fSmrg	      # we know (pedantically, we assume) the library does not
634049dc963fSmrg	      # need to be listed more than once, so we keep only the
634149dc963fSmrg	      # last copy.  This is not always right, but it is rare
634249dc963fSmrg	      # enough that we require users that really mean to play
634349dc963fSmrg	      # such unportable linking tricks to link the library
634449dc963fSmrg	      # using -Wl,-lname, so that libtool does not consider it
634549dc963fSmrg	      # for duplicate removal.
634649dc963fSmrg	      case " $specialdeplibs " in
634749dc963fSmrg	      *" $deplib "*) new_libs="$deplib $new_libs" ;;
634849dc963fSmrg	      *)
634949dc963fSmrg		case " $new_libs " in
635049dc963fSmrg		*" $deplib "*) ;;
635149dc963fSmrg		*) new_libs="$deplib $new_libs" ;;
635249dc963fSmrg		esac
635349dc963fSmrg		;;
635449dc963fSmrg	      esac
635549dc963fSmrg	      ;;
635649dc963fSmrg	    esac
635749dc963fSmrg	  done
635849dc963fSmrg	  tmp_libs=
635949dc963fSmrg	  for deplib in $new_libs; do
636049dc963fSmrg	    case $deplib in
636149dc963fSmrg	    -L*)
636249dc963fSmrg	      case " $tmp_libs " in
636349dc963fSmrg	      *" $deplib "*) ;;
636449dc963fSmrg	      *) tmp_libs="$tmp_libs $deplib" ;;
636549dc963fSmrg	      esac
636649dc963fSmrg	      ;;
636749dc963fSmrg	    *) tmp_libs="$tmp_libs $deplib" ;;
636849dc963fSmrg	    esac
636949dc963fSmrg	  done
637049dc963fSmrg	  eval $var=\"$tmp_libs\"
637149dc963fSmrg	done # for var
637249dc963fSmrg      fi
637349dc963fSmrg      # Last step: remove runtime libs from dependency_libs
637449dc963fSmrg      # (they stay in deplibs)
637549dc963fSmrg      tmp_libs=
637649dc963fSmrg      for i in $dependency_libs ; do
637749dc963fSmrg	case " $predeps $postdeps $compiler_lib_search_path " in
637849dc963fSmrg	*" $i "*)
637949dc963fSmrg	  i=""
638049dc963fSmrg	  ;;
638149dc963fSmrg	esac
638249dc963fSmrg	if test -n "$i" ; then
638349dc963fSmrg	  tmp_libs="$tmp_libs $i"
638449dc963fSmrg	fi
638549dc963fSmrg      done
638649dc963fSmrg      dependency_libs=$tmp_libs
638749dc963fSmrg    done # for pass
638849dc963fSmrg    if test "$linkmode" = prog; then
638949dc963fSmrg      dlfiles="$newdlfiles"
639049dc963fSmrg    fi
639149dc963fSmrg    if test "$linkmode" = prog || test "$linkmode" = lib; then
639249dc963fSmrg      dlprefiles="$newdlprefiles"
639349dc963fSmrg    fi
639449dc963fSmrg
639549dc963fSmrg    case $linkmode in
639649dc963fSmrg    oldlib)
639749dc963fSmrg      if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then
639849dc963fSmrg	func_warning "\`-dlopen' is ignored for archives"
639949dc963fSmrg      fi
640049dc963fSmrg
640149dc963fSmrg      case " $deplibs" in
640249dc963fSmrg      *\ -l* | *\ -L*)
640349dc963fSmrg	func_warning "\`-l' and \`-L' are ignored for archives" ;;
640449dc963fSmrg      esac
640549dc963fSmrg
640649dc963fSmrg      test -n "$rpath" && \
640749dc963fSmrg	func_warning "\`-rpath' is ignored for archives"
640849dc963fSmrg
640949dc963fSmrg      test -n "$xrpath" && \
641049dc963fSmrg	func_warning "\`-R' is ignored for archives"
641149dc963fSmrg
641249dc963fSmrg      test -n "$vinfo" && \
641349dc963fSmrg	func_warning "\`-version-info/-version-number' is ignored for archives"
641449dc963fSmrg
641549dc963fSmrg      test -n "$release" && \
641649dc963fSmrg	func_warning "\`-release' is ignored for archives"
641749dc963fSmrg
641849dc963fSmrg      test -n "$export_symbols$export_symbols_regex" && \
641949dc963fSmrg	func_warning "\`-export-symbols' is ignored for archives"
642049dc963fSmrg
642149dc963fSmrg      # Now set the variables for building old libraries.
642249dc963fSmrg      build_libtool_libs=no
642349dc963fSmrg      oldlibs="$output"
642449dc963fSmrg      objs="$objs$old_deplibs"
642549dc963fSmrg      ;;
642649dc963fSmrg
642749dc963fSmrg    lib)
642849dc963fSmrg      # Make sure we only generate libraries of the form `libNAME.la'.
642949dc963fSmrg      case $outputname in
643049dc963fSmrg      lib*)
643149dc963fSmrg	func_stripname 'lib' '.la' "$outputname"
643249dc963fSmrg	name=$func_stripname_result
643349dc963fSmrg	eval shared_ext=\"$shrext_cmds\"
643449dc963fSmrg	eval libname=\"$libname_spec\"
643549dc963fSmrg	;;
643649dc963fSmrg      *)
643749dc963fSmrg	test "$module" = no && \
643849dc963fSmrg	  func_fatal_help "libtool library \`$output' must begin with \`lib'"
643949dc963fSmrg
644049dc963fSmrg	if test "$need_lib_prefix" != no; then
644149dc963fSmrg	  # Add the "lib" prefix for modules if required
644249dc963fSmrg	  func_stripname '' '.la' "$outputname"
644349dc963fSmrg	  name=$func_stripname_result
644449dc963fSmrg	  eval shared_ext=\"$shrext_cmds\"
644549dc963fSmrg	  eval libname=\"$libname_spec\"
644649dc963fSmrg	else
644749dc963fSmrg	  func_stripname '' '.la' "$outputname"
644849dc963fSmrg	  libname=$func_stripname_result
644949dc963fSmrg	fi
645049dc963fSmrg	;;
645149dc963fSmrg      esac
645249dc963fSmrg
645349dc963fSmrg      if test -n "$objs"; then
645449dc963fSmrg	if test "$deplibs_check_method" != pass_all; then
645549dc963fSmrg	  func_fatal_error "cannot build libtool library \`$output' from non-libtool objects on this host:$objs"
645649dc963fSmrg	else
64577aa89044Smrg	  echo
645849dc963fSmrg	  $ECHO "*** Warning: Linking the shared library $output against the non-libtool"
645949dc963fSmrg	  $ECHO "*** objects $objs is not portable!"
646049dc963fSmrg	  libobjs="$libobjs $objs"
646149dc963fSmrg	fi
646249dc963fSmrg      fi
646349dc963fSmrg
646449dc963fSmrg      test "$dlself" != no && \
646549dc963fSmrg	func_warning "\`-dlopen self' is ignored for libtool libraries"
646649dc963fSmrg
646749dc963fSmrg      set dummy $rpath
646849dc963fSmrg      shift
646949dc963fSmrg      test "$#" -gt 1 && \
647049dc963fSmrg	func_warning "ignoring multiple \`-rpath's for a libtool library"
647149dc963fSmrg
647249dc963fSmrg      install_libdir="$1"
647349dc963fSmrg
647449dc963fSmrg      oldlibs=
647549dc963fSmrg      if test -z "$rpath"; then
647649dc963fSmrg	if test "$build_libtool_libs" = yes; then
647749dc963fSmrg	  # Building a libtool convenience library.
647849dc963fSmrg	  # Some compilers have problems with a `.al' extension so
647949dc963fSmrg	  # convenience libraries should have the same extension an
648049dc963fSmrg	  # archive normally would.
648149dc963fSmrg	  oldlibs="$output_objdir/$libname.$libext $oldlibs"
648249dc963fSmrg	  build_libtool_libs=convenience
648349dc963fSmrg	  build_old_libs=yes
648449dc963fSmrg	fi
648549dc963fSmrg
648649dc963fSmrg	test -n "$vinfo" && \
648749dc963fSmrg	  func_warning "\`-version-info/-version-number' is ignored for convenience libraries"
648849dc963fSmrg
648949dc963fSmrg	test -n "$release" && \
649049dc963fSmrg	  func_warning "\`-release' is ignored for convenience libraries"
649149dc963fSmrg      else
649249dc963fSmrg
649349dc963fSmrg	# Parse the version information argument.
649449dc963fSmrg	save_ifs="$IFS"; IFS=':'
649549dc963fSmrg	set dummy $vinfo 0 0 0
649649dc963fSmrg	shift
649749dc963fSmrg	IFS="$save_ifs"
649849dc963fSmrg
649949dc963fSmrg	test -n "$7" && \
650049dc963fSmrg	  func_fatal_help "too many parameters to \`-version-info'"
650149dc963fSmrg
650249dc963fSmrg	# convert absolute version numbers to libtool ages
650349dc963fSmrg	# this retains compatibility with .la files and attempts
650449dc963fSmrg	# to make the code below a bit more comprehensible
650549dc963fSmrg
650649dc963fSmrg	case $vinfo_number in
650749dc963fSmrg	yes)
650849dc963fSmrg	  number_major="$1"
650949dc963fSmrg	  number_minor="$2"
651049dc963fSmrg	  number_revision="$3"
651149dc963fSmrg	  #
651249dc963fSmrg	  # There are really only two kinds -- those that
651349dc963fSmrg	  # use the current revision as the major version
651449dc963fSmrg	  # and those that subtract age and use age as
651549dc963fSmrg	  # a minor version.  But, then there is irix
651649dc963fSmrg	  # which has an extra 1 added just for fun
651749dc963fSmrg	  #
651849dc963fSmrg	  case $version_type in
651949dc963fSmrg	  darwin|linux|osf|windows|none)
652049dc963fSmrg	    func_arith $number_major + $number_minor
652149dc963fSmrg	    current=$func_arith_result
652249dc963fSmrg	    age="$number_minor"
652349dc963fSmrg	    revision="$number_revision"
652449dc963fSmrg	    ;;
65257aa89044Smrg	  freebsd-aout|freebsd-elf|qnx|sunos)
652649dc963fSmrg	    current="$number_major"
652749dc963fSmrg	    revision="$number_minor"
652849dc963fSmrg	    age="0"
652949dc963fSmrg	    ;;
653049dc963fSmrg	  irix|nonstopux)
653149dc963fSmrg	    func_arith $number_major + $number_minor
653249dc963fSmrg	    current=$func_arith_result
653349dc963fSmrg	    age="$number_minor"
653449dc963fSmrg	    revision="$number_minor"
653549dc963fSmrg	    lt_irix_increment=no
653649dc963fSmrg	    ;;
653749dc963fSmrg	  esac
653849dc963fSmrg	  ;;
653949dc963fSmrg	no)
654049dc963fSmrg	  current="$1"
654149dc963fSmrg	  revision="$2"
654249dc963fSmrg	  age="$3"
654349dc963fSmrg	  ;;
654449dc963fSmrg	esac
654549dc963fSmrg
654649dc963fSmrg	# Check that each of the things are valid numbers.
654749dc963fSmrg	case $current in
654849dc963fSmrg	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]) ;;
654949dc963fSmrg	*)
655049dc963fSmrg	  func_error "CURRENT \`$current' must be a nonnegative integer"
655149dc963fSmrg	  func_fatal_error "\`$vinfo' is not valid version information"
655249dc963fSmrg	  ;;
655349dc963fSmrg	esac
655449dc963fSmrg
655549dc963fSmrg	case $revision in
655649dc963fSmrg	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]) ;;
655749dc963fSmrg	*)
655849dc963fSmrg	  func_error "REVISION \`$revision' must be a nonnegative integer"
655949dc963fSmrg	  func_fatal_error "\`$vinfo' is not valid version information"
656049dc963fSmrg	  ;;
656149dc963fSmrg	esac
656249dc963fSmrg
656349dc963fSmrg	case $age in
656449dc963fSmrg	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]) ;;
656549dc963fSmrg	*)
656649dc963fSmrg	  func_error "AGE \`$age' must be a nonnegative integer"
656749dc963fSmrg	  func_fatal_error "\`$vinfo' is not valid version information"
656849dc963fSmrg	  ;;
656949dc963fSmrg	esac
657049dc963fSmrg
657149dc963fSmrg	if test "$age" -gt "$current"; then
657249dc963fSmrg	  func_error "AGE \`$age' is greater than the current interface number \`$current'"
657349dc963fSmrg	  func_fatal_error "\`$vinfo' is not valid version information"
657449dc963fSmrg	fi
657549dc963fSmrg
657649dc963fSmrg	# Calculate the version variables.
657749dc963fSmrg	major=
657849dc963fSmrg	versuffix=
657949dc963fSmrg	verstring=
658049dc963fSmrg	case $version_type in
658149dc963fSmrg	none) ;;
658249dc963fSmrg
658349dc963fSmrg	darwin)
658449dc963fSmrg	  # Like Linux, but with the current version available in
658549dc963fSmrg	  # verstring for coding it into the library header
658649dc963fSmrg	  func_arith $current - $age
658749dc963fSmrg	  major=.$func_arith_result
658849dc963fSmrg	  versuffix="$major.$age.$revision"
658949dc963fSmrg	  # Darwin ld doesn't like 0 for these options...
659049dc963fSmrg	  func_arith $current + 1
659149dc963fSmrg	  minor_current=$func_arith_result
659249dc963fSmrg	  xlcverstring="${wl}-compatibility_version ${wl}$minor_current ${wl}-current_version ${wl}$minor_current.$revision"
659349dc963fSmrg	  verstring="-compatibility_version $minor_current -current_version $minor_current.$revision"
659449dc963fSmrg	  ;;
659549dc963fSmrg
659649dc963fSmrg	freebsd-aout)
659749dc963fSmrg	  major=".$current"
659849dc963fSmrg	  versuffix=".$current.$revision";
659949dc963fSmrg	  ;;
660049dc963fSmrg
660149dc963fSmrg	freebsd-elf)
660249dc963fSmrg	  major=".$current"
660349dc963fSmrg	  versuffix=".$current"
660449dc963fSmrg	  ;;
660549dc963fSmrg
660649dc963fSmrg	irix | nonstopux)
660749dc963fSmrg	  if test "X$lt_irix_increment" = "Xno"; then
660849dc963fSmrg	    func_arith $current - $age
660949dc963fSmrg	  else
661049dc963fSmrg	    func_arith $current - $age + 1
661149dc963fSmrg	  fi
661249dc963fSmrg	  major=$func_arith_result
661349dc963fSmrg
661449dc963fSmrg	  case $version_type in
661549dc963fSmrg	    nonstopux) verstring_prefix=nonstopux ;;
661649dc963fSmrg	    *)         verstring_prefix=sgi ;;
661749dc963fSmrg	  esac
661849dc963fSmrg	  verstring="$verstring_prefix$major.$revision"
661949dc963fSmrg
662049dc963fSmrg	  # Add in all the interfaces that we are compatible with.
662149dc963fSmrg	  loop=$revision
662249dc963fSmrg	  while test "$loop" -ne 0; do
662349dc963fSmrg	    func_arith $revision - $loop
662449dc963fSmrg	    iface=$func_arith_result
662549dc963fSmrg	    func_arith $loop - 1
662649dc963fSmrg	    loop=$func_arith_result
662749dc963fSmrg	    verstring="$verstring_prefix$major.$iface:$verstring"
662849dc963fSmrg	  done
662949dc963fSmrg
663049dc963fSmrg	  # Before this point, $major must not contain `.'.
663149dc963fSmrg	  major=.$major
663249dc963fSmrg	  versuffix="$major.$revision"
663349dc963fSmrg	  ;;
663449dc963fSmrg
663549dc963fSmrg	linux)
663649dc963fSmrg	  func_arith $current - $age
663749dc963fSmrg	  major=.$func_arith_result
663849dc963fSmrg	  versuffix="$major.$age.$revision"
663949dc963fSmrg	  ;;
664049dc963fSmrg
664149dc963fSmrg	osf)
664249dc963fSmrg	  func_arith $current - $age
664349dc963fSmrg	  major=.$func_arith_result
664449dc963fSmrg	  versuffix=".$current.$age.$revision"
664549dc963fSmrg	  verstring="$current.$age.$revision"
664649dc963fSmrg
664749dc963fSmrg	  # Add in all the interfaces that we are compatible with.
664849dc963fSmrg	  loop=$age
664949dc963fSmrg	  while test "$loop" -ne 0; do
665049dc963fSmrg	    func_arith $current - $loop
665149dc963fSmrg	    iface=$func_arith_result
665249dc963fSmrg	    func_arith $loop - 1
665349dc963fSmrg	    loop=$func_arith_result
665449dc963fSmrg	    verstring="$verstring:${iface}.0"
665549dc963fSmrg	  done
665649dc963fSmrg
665749dc963fSmrg	  # Make executables depend on our current version.
665849dc963fSmrg	  verstring="$verstring:${current}.0"
665949dc963fSmrg	  ;;
666049dc963fSmrg
666149dc963fSmrg	qnx)
666249dc963fSmrg	  major=".$current"
666349dc963fSmrg	  versuffix=".$current"
666449dc963fSmrg	  ;;
666549dc963fSmrg
666649dc963fSmrg	sunos)
666749dc963fSmrg	  major=".$current"
666849dc963fSmrg	  versuffix=".$current.$revision"
666949dc963fSmrg	  ;;
667049dc963fSmrg
667149dc963fSmrg	windows)
667249dc963fSmrg	  # Use '-' rather than '.', since we only want one
667349dc963fSmrg	  # extension on DOS 8.3 filesystems.
667449dc963fSmrg	  func_arith $current - $age
667549dc963fSmrg	  major=$func_arith_result
667649dc963fSmrg	  versuffix="-$major"
667749dc963fSmrg	  ;;
667849dc963fSmrg
667949dc963fSmrg	*)
668049dc963fSmrg	  func_fatal_configuration "unknown library version type \`$version_type'"
668149dc963fSmrg	  ;;
668249dc963fSmrg	esac
668349dc963fSmrg
668449dc963fSmrg	# Clear the version info if we defaulted, and they specified a release.
668549dc963fSmrg	if test -z "$vinfo" && test -n "$release"; then
668649dc963fSmrg	  major=
668749dc963fSmrg	  case $version_type in
668849dc963fSmrg	  darwin)
668949dc963fSmrg	    # we can't check for "0.0" in archive_cmds due to quoting
669049dc963fSmrg	    # problems, so we reset it completely
669149dc963fSmrg	    verstring=
669249dc963fSmrg	    ;;
669349dc963fSmrg	  *)
669449dc963fSmrg	    verstring="0.0"
669549dc963fSmrg	    ;;
669649dc963fSmrg	  esac
669749dc963fSmrg	  if test "$need_version" = no; then
669849dc963fSmrg	    versuffix=
669949dc963fSmrg	  else
670049dc963fSmrg	    versuffix=".0.0"
670149dc963fSmrg	  fi
670249dc963fSmrg	fi
670349dc963fSmrg
670449dc963fSmrg	# Remove version info from name if versioning should be avoided
670549dc963fSmrg	if test "$avoid_version" = yes && test "$need_version" = no; then
670649dc963fSmrg	  major=
670749dc963fSmrg	  versuffix=
670849dc963fSmrg	  verstring=""
670949dc963fSmrg	fi
671049dc963fSmrg
671149dc963fSmrg	# Check to see if the archive will have undefined symbols.
671249dc963fSmrg	if test "$allow_undefined" = yes; then
671349dc963fSmrg	  if test "$allow_undefined_flag" = unsupported; then
671449dc963fSmrg	    func_warning "undefined symbols not allowed in $host shared libraries"
671549dc963fSmrg	    build_libtool_libs=no
671649dc963fSmrg	    build_old_libs=yes
671749dc963fSmrg	  fi
671849dc963fSmrg	else
671949dc963fSmrg	  # Don't allow undefined symbols.
672049dc963fSmrg	  allow_undefined_flag="$no_undefined_flag"
672149dc963fSmrg	fi
672249dc963fSmrg
672349dc963fSmrg      fi
672449dc963fSmrg
672549dc963fSmrg      func_generate_dlsyms "$libname" "$libname" "yes"
672649dc963fSmrg      libobjs="$libobjs $symfileobj"
672749dc963fSmrg      test "X$libobjs" = "X " && libobjs=
672849dc963fSmrg
672949dc963fSmrg      if test "$mode" != relink; then
673049dc963fSmrg	# Remove our outputs, but don't remove object files since they
673149dc963fSmrg	# may have been created when compiling PIC objects.
673249dc963fSmrg	removelist=
673349dc963fSmrg	tempremovelist=`$ECHO "$output_objdir/*"`
673449dc963fSmrg	for p in $tempremovelist; do
673549dc963fSmrg	  case $p in
673649dc963fSmrg	    *.$objext | *.gcno)
673749dc963fSmrg	       ;;
673849dc963fSmrg	    $output_objdir/$outputname | $output_objdir/$libname.* | $output_objdir/${libname}${release}.*)
673949dc963fSmrg	       if test "X$precious_files_regex" != "X"; then
674049dc963fSmrg		 if $ECHO "$p" | $EGREP -e "$precious_files_regex" >/dev/null 2>&1
674149dc963fSmrg		 then
674249dc963fSmrg		   continue
674349dc963fSmrg		 fi
674449dc963fSmrg	       fi
674549dc963fSmrg	       removelist="$removelist $p"
674649dc963fSmrg	       ;;
674749dc963fSmrg	    *) ;;
674849dc963fSmrg	  esac
674949dc963fSmrg	done
675049dc963fSmrg	test -n "$removelist" && \
675149dc963fSmrg	  func_show_eval "${RM}r \$removelist"
675249dc963fSmrg      fi
675349dc963fSmrg
675449dc963fSmrg      # Now set the variables for building old libraries.
675549dc963fSmrg      if test "$build_old_libs" = yes && test "$build_libtool_libs" != convenience ; then
675649dc963fSmrg	oldlibs="$oldlibs $output_objdir/$libname.$libext"
675749dc963fSmrg
675849dc963fSmrg	# Transform .lo files to .o files.
67597aa89044Smrg	oldobjs="$objs "`$ECHO "$libobjs" | $SP2NL | $SED "/\.${libext}$/d; $lo2o" | $NL2SP`
676049dc963fSmrg      fi
676149dc963fSmrg
676249dc963fSmrg      # Eliminate all temporary directories.
676349dc963fSmrg      #for path in $notinst_path; do
67647aa89044Smrg      #	lib_search_path=`$ECHO "$lib_search_path " | $SED "s% $path % %g"`
67657aa89044Smrg      #	deplibs=`$ECHO "$deplibs " | $SED "s% -L$path % %g"`
67667aa89044Smrg      #	dependency_libs=`$ECHO "$dependency_libs " | $SED "s% -L$path % %g"`
676749dc963fSmrg      #done
676849dc963fSmrg
676949dc963fSmrg      if test -n "$xrpath"; then
677049dc963fSmrg	# If the user specified any rpath flags, then add them.
677149dc963fSmrg	temp_xrpath=
677249dc963fSmrg	for libdir in $xrpath; do
677349dc963fSmrg	  temp_xrpath="$temp_xrpath -R$libdir"
677449dc963fSmrg	  case "$finalize_rpath " in
677549dc963fSmrg	  *" $libdir "*) ;;
677649dc963fSmrg	  *) finalize_rpath="$finalize_rpath $libdir" ;;
677749dc963fSmrg	  esac
677849dc963fSmrg	done
677949dc963fSmrg	if test "$hardcode_into_libs" != yes || test "$build_old_libs" = yes; then
678049dc963fSmrg	  dependency_libs="$temp_xrpath $dependency_libs"
678149dc963fSmrg	fi
678249dc963fSmrg      fi
678349dc963fSmrg
678449dc963fSmrg      # Make sure dlfiles contains only unique files that won't be dlpreopened
678549dc963fSmrg      old_dlfiles="$dlfiles"
678649dc963fSmrg      dlfiles=
678749dc963fSmrg      for lib in $old_dlfiles; do
678849dc963fSmrg	case " $dlprefiles $dlfiles " in
678949dc963fSmrg	*" $lib "*) ;;
679049dc963fSmrg	*) dlfiles="$dlfiles $lib" ;;
679149dc963fSmrg	esac
679249dc963fSmrg      done
679349dc963fSmrg
679449dc963fSmrg      # Make sure dlprefiles contains only unique files
679549dc963fSmrg      old_dlprefiles="$dlprefiles"
679649dc963fSmrg      dlprefiles=
679749dc963fSmrg      for lib in $old_dlprefiles; do
679849dc963fSmrg	case "$dlprefiles " in
679949dc963fSmrg	*" $lib "*) ;;
680049dc963fSmrg	*) dlprefiles="$dlprefiles $lib" ;;
680149dc963fSmrg	esac
680249dc963fSmrg      done
680349dc963fSmrg
680449dc963fSmrg      if test "$build_libtool_libs" = yes; then
680549dc963fSmrg	if test -n "$rpath"; then
680649dc963fSmrg	  case $host in
68077aa89044Smrg	  *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-*-beos* | *-cegcc* | *-*-haiku*)
680849dc963fSmrg	    # these systems don't actually have a c library (as such)!
680949dc963fSmrg	    ;;
681049dc963fSmrg	  *-*-rhapsody* | *-*-darwin1.[012])
681149dc963fSmrg	    # Rhapsody C library is in the System framework
681249dc963fSmrg	    deplibs="$deplibs System.ltframework"
681349dc963fSmrg	    ;;
681449dc963fSmrg	  *-*-netbsd*)
681549dc963fSmrg	    # Don't link with libc until the a.out ld.so is fixed.
681649dc963fSmrg	    ;;
681749dc963fSmrg	  *-*-openbsd* | *-*-freebsd* | *-*-dragonfly*)
681849dc963fSmrg	    # Do not include libc due to us having libc/libc_r.
681949dc963fSmrg	    ;;
682049dc963fSmrg	  *-*-sco3.2v5* | *-*-sco5v6*)
682149dc963fSmrg	    # Causes problems with __ctype
682249dc963fSmrg	    ;;
682349dc963fSmrg	  *-*-sysv4.2uw2* | *-*-sysv5* | *-*-unixware* | *-*-OpenUNIX*)
682449dc963fSmrg	    # Compiler inserts libc in the correct place for threads to work
682549dc963fSmrg	    ;;
682649dc963fSmrg	  *)
682749dc963fSmrg	    # Add libc to deplibs on all other systems if necessary.
682849dc963fSmrg	    if test "$build_libtool_need_lc" = "yes"; then
682949dc963fSmrg	      deplibs="$deplibs -lc"
683049dc963fSmrg	    fi
683149dc963fSmrg	    ;;
683249dc963fSmrg	  esac
683349dc963fSmrg	fi
683449dc963fSmrg
683549dc963fSmrg	# Transform deplibs into only deplibs that can be linked in shared.
683649dc963fSmrg	name_save=$name
683749dc963fSmrg	libname_save=$libname
683849dc963fSmrg	release_save=$release
683949dc963fSmrg	versuffix_save=$versuffix
684049dc963fSmrg	major_save=$major
684149dc963fSmrg	# I'm not sure if I'm treating the release correctly.  I think
684249dc963fSmrg	# release should show up in the -l (ie -lgmp5) so we don't want to
684349dc963fSmrg	# add it in twice.  Is that correct?
684449dc963fSmrg	release=""
684549dc963fSmrg	versuffix=""
684649dc963fSmrg	major=""
684749dc963fSmrg	newdeplibs=
684849dc963fSmrg	droppeddeps=no
684949dc963fSmrg	case $deplibs_check_method in
685049dc963fSmrg	pass_all)
685149dc963fSmrg	  # Don't check for shared/static.  Everything works.
685249dc963fSmrg	  # This might be a little naive.  We might want to check
685349dc963fSmrg	  # whether the library exists or not.  But this is on
685449dc963fSmrg	  # osf3 & osf4 and I'm not really sure... Just
685549dc963fSmrg	  # implementing what was already the behavior.
685649dc963fSmrg	  newdeplibs=$deplibs
685749dc963fSmrg	  ;;
685849dc963fSmrg	test_compile)
685949dc963fSmrg	  # This code stresses the "libraries are programs" paradigm to its
686049dc963fSmrg	  # limits. Maybe even breaks it.  We compile a program, linking it
686149dc963fSmrg	  # against the deplibs as a proxy for the library.  Then we can check
686249dc963fSmrg	  # whether they linked in statically or dynamically with ldd.
686349dc963fSmrg	  $opt_dry_run || $RM conftest.c
686449dc963fSmrg	  cat > conftest.c <<EOF
686549dc963fSmrg	  int main() { return 0; }
686649dc963fSmrgEOF
686749dc963fSmrg	  $opt_dry_run || $RM conftest
686849dc963fSmrg	  if $LTCC $LTCFLAGS -o conftest conftest.c $deplibs; then
686949dc963fSmrg	    ldd_output=`ldd conftest`
687049dc963fSmrg	    for i in $deplibs; do
687149dc963fSmrg	      case $i in
687249dc963fSmrg	      -l*)
687349dc963fSmrg		func_stripname -l '' "$i"
687449dc963fSmrg		name=$func_stripname_result
687549dc963fSmrg		if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then
687649dc963fSmrg		  case " $predeps $postdeps " in
687749dc963fSmrg		  *" $i "*)
687849dc963fSmrg		    newdeplibs="$newdeplibs $i"
687949dc963fSmrg		    i=""
688049dc963fSmrg		    ;;
688149dc963fSmrg		  esac
688249dc963fSmrg		fi
688349dc963fSmrg		if test -n "$i" ; then
688449dc963fSmrg		  libname=`eval "\\$ECHO \"$libname_spec\""`
688549dc963fSmrg		  deplib_matches=`eval "\\$ECHO \"$library_names_spec\""`
688649dc963fSmrg		  set dummy $deplib_matches; shift
688749dc963fSmrg		  deplib_match=$1
688849dc963fSmrg		  if test `expr "$ldd_output" : ".*$deplib_match"` -ne 0 ; then
688949dc963fSmrg		    newdeplibs="$newdeplibs $i"
689049dc963fSmrg		  else
689149dc963fSmrg		    droppeddeps=yes
68927aa89044Smrg		    echo
689349dc963fSmrg		    $ECHO "*** Warning: dynamic linker does not accept needed library $i."
68947aa89044Smrg		    echo "*** I have the capability to make that library automatically link in when"
68957aa89044Smrg		    echo "*** you link to this library.  But I can only do this if you have a"
68967aa89044Smrg		    echo "*** shared version of the library, which I believe you do not have"
68977aa89044Smrg		    echo "*** because a test_compile did reveal that the linker did not use it for"
68987aa89044Smrg		    echo "*** its dynamic dependency list that programs get resolved with at runtime."
689949dc963fSmrg		  fi
690049dc963fSmrg		fi
690149dc963fSmrg		;;
690249dc963fSmrg	      *)
690349dc963fSmrg		newdeplibs="$newdeplibs $i"
690449dc963fSmrg		;;
690549dc963fSmrg	      esac
690649dc963fSmrg	    done
690749dc963fSmrg	  else
690849dc963fSmrg	    # Error occurred in the first compile.  Let's try to salvage
690949dc963fSmrg	    # the situation: Compile a separate program for each library.
691049dc963fSmrg	    for i in $deplibs; do
691149dc963fSmrg	      case $i in
691249dc963fSmrg	      -l*)
691349dc963fSmrg		func_stripname -l '' "$i"
691449dc963fSmrg		name=$func_stripname_result
691549dc963fSmrg		$opt_dry_run || $RM conftest
691649dc963fSmrg		if $LTCC $LTCFLAGS -o conftest conftest.c $i; then
691749dc963fSmrg		  ldd_output=`ldd conftest`
691849dc963fSmrg		  if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then
691949dc963fSmrg		    case " $predeps $postdeps " in
692049dc963fSmrg		    *" $i "*)
692149dc963fSmrg		      newdeplibs="$newdeplibs $i"
692249dc963fSmrg		      i=""
692349dc963fSmrg		      ;;
692449dc963fSmrg		    esac
692549dc963fSmrg		  fi
692649dc963fSmrg		  if test -n "$i" ; then
692749dc963fSmrg		    libname=`eval "\\$ECHO \"$libname_spec\""`
692849dc963fSmrg		    deplib_matches=`eval "\\$ECHO \"$library_names_spec\""`
692949dc963fSmrg		    set dummy $deplib_matches; shift
693049dc963fSmrg		    deplib_match=$1
693149dc963fSmrg		    if test `expr "$ldd_output" : ".*$deplib_match"` -ne 0 ; then
693249dc963fSmrg		      newdeplibs="$newdeplibs $i"
693349dc963fSmrg		    else
693449dc963fSmrg		      droppeddeps=yes
69357aa89044Smrg		      echo
693649dc963fSmrg		      $ECHO "*** Warning: dynamic linker does not accept needed library $i."
69377aa89044Smrg		      echo "*** I have the capability to make that library automatically link in when"
69387aa89044Smrg		      echo "*** you link to this library.  But I can only do this if you have a"
69397aa89044Smrg		      echo "*** shared version of the library, which you do not appear to have"
69407aa89044Smrg		      echo "*** because a test_compile did reveal that the linker did not use this one"
69417aa89044Smrg		      echo "*** as a dynamic dependency that programs can get resolved with at runtime."
694249dc963fSmrg		    fi
694349dc963fSmrg		  fi
694449dc963fSmrg		else
694549dc963fSmrg		  droppeddeps=yes
69467aa89044Smrg		  echo
694749dc963fSmrg		  $ECHO "*** Warning!  Library $i is needed by this library but I was not able to"
69487aa89044Smrg		  echo "*** make it link in!  You will probably need to install it or some"
69497aa89044Smrg		  echo "*** library that it depends on before this library will be fully"
69507aa89044Smrg		  echo "*** functional.  Installing it before continuing would be even better."
695149dc963fSmrg		fi
695249dc963fSmrg		;;
695349dc963fSmrg	      *)
695449dc963fSmrg		newdeplibs="$newdeplibs $i"
695549dc963fSmrg		;;
695649dc963fSmrg	      esac
695749dc963fSmrg	    done
695849dc963fSmrg	  fi
695949dc963fSmrg	  ;;
696049dc963fSmrg	file_magic*)
696149dc963fSmrg	  set dummy $deplibs_check_method; shift
696249dc963fSmrg	  file_magic_regex=`expr "$deplibs_check_method" : "$1 \(.*\)"`
696349dc963fSmrg	  for a_deplib in $deplibs; do
696449dc963fSmrg	    case $a_deplib in
696549dc963fSmrg	    -l*)
696649dc963fSmrg	      func_stripname -l '' "$a_deplib"
696749dc963fSmrg	      name=$func_stripname_result
696849dc963fSmrg	      if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then
696949dc963fSmrg		case " $predeps $postdeps " in
697049dc963fSmrg		*" $a_deplib "*)
697149dc963fSmrg		  newdeplibs="$newdeplibs $a_deplib"
697249dc963fSmrg		  a_deplib=""
697349dc963fSmrg		  ;;
697449dc963fSmrg		esac
697549dc963fSmrg	      fi
697649dc963fSmrg	      if test -n "$a_deplib" ; then
697749dc963fSmrg		libname=`eval "\\$ECHO \"$libname_spec\""`
697849dc963fSmrg		for i in $lib_search_path $sys_lib_search_path $shlib_search_path; do
697949dc963fSmrg		  potential_libs=`ls $i/$libname[.-]* 2>/dev/null`
698049dc963fSmrg		  for potent_lib in $potential_libs; do
698149dc963fSmrg		      # Follow soft links.
698249dc963fSmrg		      if ls -lLd "$potent_lib" 2>/dev/null |
698349dc963fSmrg			 $GREP " -> " >/dev/null; then
698449dc963fSmrg			continue
698549dc963fSmrg		      fi
698649dc963fSmrg		      # The statement above tries to avoid entering an
698749dc963fSmrg		      # endless loop below, in case of cyclic links.
698849dc963fSmrg		      # We might still enter an endless loop, since a link
698949dc963fSmrg		      # loop can be closed while we follow links,
699049dc963fSmrg		      # but so what?
699149dc963fSmrg		      potlib="$potent_lib"
699249dc963fSmrg		      while test -h "$potlib" 2>/dev/null; do
699349dc963fSmrg			potliblink=`ls -ld $potlib | ${SED} 's/.* -> //'`
699449dc963fSmrg			case $potliblink in
699549dc963fSmrg			[\\/]* | [A-Za-z]:[\\/]*) potlib="$potliblink";;
69967aa89044Smrg			*) potlib=`$ECHO "$potlib" | $SED 's,[^/]*$,,'`"$potliblink";;
699749dc963fSmrg			esac
699849dc963fSmrg		      done
699949dc963fSmrg		      if eval $file_magic_cmd \"\$potlib\" 2>/dev/null |
700049dc963fSmrg			 $SED -e 10q |
700149dc963fSmrg			 $EGREP "$file_magic_regex" > /dev/null; then
700249dc963fSmrg			newdeplibs="$newdeplibs $a_deplib"
700349dc963fSmrg			a_deplib=""
700449dc963fSmrg			break 2
700549dc963fSmrg		      fi
700649dc963fSmrg		  done
700749dc963fSmrg		done
700849dc963fSmrg	      fi
700949dc963fSmrg	      if test -n "$a_deplib" ; then
701049dc963fSmrg		droppeddeps=yes
70117aa89044Smrg		echo
701249dc963fSmrg		$ECHO "*** Warning: linker path does not have real file for library $a_deplib."
70137aa89044Smrg		echo "*** I have the capability to make that library automatically link in when"
70147aa89044Smrg		echo "*** you link to this library.  But I can only do this if you have a"
70157aa89044Smrg		echo "*** shared version of the library, which you do not appear to have"
70167aa89044Smrg		echo "*** because I did check the linker path looking for a file starting"
701749dc963fSmrg		if test -z "$potlib" ; then
701849dc963fSmrg		  $ECHO "*** with $libname but no candidates were found. (...for file magic test)"
701949dc963fSmrg		else
702049dc963fSmrg		  $ECHO "*** with $libname and none of the candidates passed a file format test"
702149dc963fSmrg		  $ECHO "*** using a file magic. Last file checked: $potlib"
702249dc963fSmrg		fi
702349dc963fSmrg	      fi
702449dc963fSmrg	      ;;
702549dc963fSmrg	    *)
702649dc963fSmrg	      # Add a -L argument.
702749dc963fSmrg	      newdeplibs="$newdeplibs $a_deplib"
702849dc963fSmrg	      ;;
702949dc963fSmrg	    esac
703049dc963fSmrg	  done # Gone through all deplibs.
703149dc963fSmrg	  ;;
703249dc963fSmrg	match_pattern*)
703349dc963fSmrg	  set dummy $deplibs_check_method; shift
703449dc963fSmrg	  match_pattern_regex=`expr "$deplibs_check_method" : "$1 \(.*\)"`
703549dc963fSmrg	  for a_deplib in $deplibs; do
703649dc963fSmrg	    case $a_deplib in
703749dc963fSmrg	    -l*)
703849dc963fSmrg	      func_stripname -l '' "$a_deplib"
703949dc963fSmrg	      name=$func_stripname_result
704049dc963fSmrg	      if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then
704149dc963fSmrg		case " $predeps $postdeps " in
704249dc963fSmrg		*" $a_deplib "*)
704349dc963fSmrg		  newdeplibs="$newdeplibs $a_deplib"
704449dc963fSmrg		  a_deplib=""
704549dc963fSmrg		  ;;
704649dc963fSmrg		esac
704749dc963fSmrg	      fi
704849dc963fSmrg	      if test -n "$a_deplib" ; then
704949dc963fSmrg		libname=`eval "\\$ECHO \"$libname_spec\""`
705049dc963fSmrg		for i in $lib_search_path $sys_lib_search_path $shlib_search_path; do
705149dc963fSmrg		  potential_libs=`ls $i/$libname[.-]* 2>/dev/null`
705249dc963fSmrg		  for potent_lib in $potential_libs; do
705349dc963fSmrg		    potlib="$potent_lib" # see symlink-check above in file_magic test
70547aa89044Smrg		    if eval "\$ECHO \"$potent_lib\"" 2>/dev/null | $SED 10q | \
705549dc963fSmrg		       $EGREP "$match_pattern_regex" > /dev/null; then
705649dc963fSmrg		      newdeplibs="$newdeplibs $a_deplib"
705749dc963fSmrg		      a_deplib=""
705849dc963fSmrg		      break 2
705949dc963fSmrg		    fi
706049dc963fSmrg		  done
706149dc963fSmrg		done
706249dc963fSmrg	      fi
706349dc963fSmrg	      if test -n "$a_deplib" ; then
706449dc963fSmrg		droppeddeps=yes
70657aa89044Smrg		echo
706649dc963fSmrg		$ECHO "*** Warning: linker path does not have real file for library $a_deplib."
70677aa89044Smrg		echo "*** I have the capability to make that library automatically link in when"
70687aa89044Smrg		echo "*** you link to this library.  But I can only do this if you have a"
70697aa89044Smrg		echo "*** shared version of the library, which you do not appear to have"
70707aa89044Smrg		echo "*** because I did check the linker path looking for a file starting"
707149dc963fSmrg		if test -z "$potlib" ; then
707249dc963fSmrg		  $ECHO "*** with $libname but no candidates were found. (...for regex pattern test)"
707349dc963fSmrg		else
707449dc963fSmrg		  $ECHO "*** with $libname and none of the candidates passed a file format test"
707549dc963fSmrg		  $ECHO "*** using a regex pattern. Last file checked: $potlib"
707649dc963fSmrg		fi
707749dc963fSmrg	      fi
707849dc963fSmrg	      ;;
707949dc963fSmrg	    *)
708049dc963fSmrg	      # Add a -L argument.
708149dc963fSmrg	      newdeplibs="$newdeplibs $a_deplib"
708249dc963fSmrg	      ;;
708349dc963fSmrg	    esac
708449dc963fSmrg	  done # Gone through all deplibs.
708549dc963fSmrg	  ;;
708649dc963fSmrg	none | unknown | *)
708749dc963fSmrg	  newdeplibs=""
70887aa89044Smrg	  tmp_deplibs=`$ECHO " $deplibs" | $SED 's/ -lc$//; s/ -[LR][^ ]*//g'`
708949dc963fSmrg	  if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then
709049dc963fSmrg	    for i in $predeps $postdeps ; do
709149dc963fSmrg	      # can't use Xsed below, because $i might contain '/'
70927aa89044Smrg	      tmp_deplibs=`$ECHO " $tmp_deplibs" | $SED "s,$i,,"`
709349dc963fSmrg	    done
709449dc963fSmrg	  fi
70957aa89044Smrg	  case $tmp_deplibs in
70967aa89044Smrg	  *[!\	\ ]*)
70977aa89044Smrg	    echo
709849dc963fSmrg	    if test "X$deplibs_check_method" = "Xnone"; then
70997aa89044Smrg	      echo "*** Warning: inter-library dependencies are not supported in this platform."
710049dc963fSmrg	    else
71017aa89044Smrg	      echo "*** Warning: inter-library dependencies are not known to be supported."
710249dc963fSmrg	    fi
71037aa89044Smrg	    echo "*** All declared inter-library dependencies are being dropped."
710449dc963fSmrg	    droppeddeps=yes
71057aa89044Smrg	    ;;
71067aa89044Smrg	  esac
710749dc963fSmrg	  ;;
710849dc963fSmrg	esac
710949dc963fSmrg	versuffix=$versuffix_save
711049dc963fSmrg	major=$major_save
711149dc963fSmrg	release=$release_save
711249dc963fSmrg	libname=$libname_save
711349dc963fSmrg	name=$name_save
711449dc963fSmrg
711549dc963fSmrg	case $host in
711649dc963fSmrg	*-*-rhapsody* | *-*-darwin1.[012])
711749dc963fSmrg	  # On Rhapsody replace the C library with the System framework
71187aa89044Smrg	  newdeplibs=`$ECHO " $newdeplibs" | $SED 's/ -lc / System.ltframework /'`
711949dc963fSmrg	  ;;
712049dc963fSmrg	esac
712149dc963fSmrg
712249dc963fSmrg	if test "$droppeddeps" = yes; then
712349dc963fSmrg	  if test "$module" = yes; then
71247aa89044Smrg	    echo
71257aa89044Smrg	    echo "*** Warning: libtool could not satisfy all declared inter-library"
712649dc963fSmrg	    $ECHO "*** dependencies of module $libname.  Therefore, libtool will create"
71277aa89044Smrg	    echo "*** a static module, that should work as long as the dlopening"
71287aa89044Smrg	    echo "*** application is linked with the -dlopen flag."
712949dc963fSmrg	    if test -z "$global_symbol_pipe"; then
71307aa89044Smrg	      echo
71317aa89044Smrg	      echo "*** However, this would only work if libtool was able to extract symbol"
71327aa89044Smrg	      echo "*** lists from a program, using \`nm' or equivalent, but libtool could"
71337aa89044Smrg	      echo "*** not find such a program.  So, this module is probably useless."
71347aa89044Smrg	      echo "*** \`nm' from GNU binutils and a full rebuild may help."
713549dc963fSmrg	    fi
713649dc963fSmrg	    if test "$build_old_libs" = no; then
713749dc963fSmrg	      oldlibs="$output_objdir/$libname.$libext"
713849dc963fSmrg	      build_libtool_libs=module
713949dc963fSmrg	      build_old_libs=yes
714049dc963fSmrg	    else
714149dc963fSmrg	      build_libtool_libs=no
714249dc963fSmrg	    fi
714349dc963fSmrg	  else
71447aa89044Smrg	    echo "*** The inter-library dependencies that have been dropped here will be"
71457aa89044Smrg	    echo "*** automatically added whenever a program is linked with this library"
71467aa89044Smrg	    echo "*** or is declared to -dlopen it."
714749dc963fSmrg
714849dc963fSmrg	    if test "$allow_undefined" = no; then
71497aa89044Smrg	      echo
71507aa89044Smrg	      echo "*** Since this library must not contain undefined symbols,"
71517aa89044Smrg	      echo "*** because either the platform does not support them or"
71527aa89044Smrg	      echo "*** it was explicitly requested with -no-undefined,"
71537aa89044Smrg	      echo "*** libtool will only create a static version of it."
715449dc963fSmrg	      if test "$build_old_libs" = no; then
715549dc963fSmrg		oldlibs="$output_objdir/$libname.$libext"
715649dc963fSmrg		build_libtool_libs=module
715749dc963fSmrg		build_old_libs=yes
715849dc963fSmrg	      else
715949dc963fSmrg		build_libtool_libs=no
716049dc963fSmrg	      fi
716149dc963fSmrg	    fi
716249dc963fSmrg	  fi
716349dc963fSmrg	fi
716449dc963fSmrg	# Done checking deplibs!
716549dc963fSmrg	deplibs=$newdeplibs
716649dc963fSmrg      fi
716749dc963fSmrg      # Time to change all our "foo.ltframework" stuff back to "-framework foo"
716849dc963fSmrg      case $host in
716949dc963fSmrg	*-*-darwin*)
71707aa89044Smrg	  newdeplibs=`$ECHO " $newdeplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'`
71717aa89044Smrg	  new_inherited_linker_flags=`$ECHO " $new_inherited_linker_flags" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'`
71727aa89044Smrg	  deplibs=`$ECHO " $deplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'`
717349dc963fSmrg	  ;;
717449dc963fSmrg      esac
717549dc963fSmrg
717649dc963fSmrg      # move library search paths that coincide with paths to not yet
717749dc963fSmrg      # installed libraries to the beginning of the library search list
717849dc963fSmrg      new_libs=
717949dc963fSmrg      for path in $notinst_path; do
718049dc963fSmrg	case " $new_libs " in
718149dc963fSmrg	*" -L$path/$objdir "*) ;;
718249dc963fSmrg	*)
718349dc963fSmrg	  case " $deplibs " in
718449dc963fSmrg	  *" -L$path/$objdir "*)
718549dc963fSmrg	    new_libs="$new_libs -L$path/$objdir" ;;
718649dc963fSmrg	  esac
718749dc963fSmrg	  ;;
718849dc963fSmrg	esac
718949dc963fSmrg      done
719049dc963fSmrg      for deplib in $deplibs; do
719149dc963fSmrg	case $deplib in
719249dc963fSmrg	-L*)
719349dc963fSmrg	  case " $new_libs " in
719449dc963fSmrg	  *" $deplib "*) ;;
719549dc963fSmrg	  *) new_libs="$new_libs $deplib" ;;
719649dc963fSmrg	  esac
719749dc963fSmrg	  ;;
719849dc963fSmrg	*) new_libs="$new_libs $deplib" ;;
719949dc963fSmrg	esac
720049dc963fSmrg      done
720149dc963fSmrg      deplibs="$new_libs"
720249dc963fSmrg
720349dc963fSmrg      # All the library-specific variables (install_libdir is set above).
720449dc963fSmrg      library_names=
720549dc963fSmrg      old_library=
720649dc963fSmrg      dlname=
720749dc963fSmrg
720849dc963fSmrg      # Test again, we may have decided not to build it any more
720949dc963fSmrg      if test "$build_libtool_libs" = yes; then
721049dc963fSmrg	if test "$hardcode_into_libs" = yes; then
721149dc963fSmrg	  # Hardcode the library paths
721249dc963fSmrg	  hardcode_libdirs=
721349dc963fSmrg	  dep_rpath=
721449dc963fSmrg	  rpath="$finalize_rpath"
721549dc963fSmrg	  test "$mode" != relink && rpath="$compile_rpath$rpath"
721649dc963fSmrg	  for libdir in $rpath; do
721749dc963fSmrg	    if test -n "$hardcode_libdir_flag_spec"; then
721849dc963fSmrg	      if test -n "$hardcode_libdir_separator"; then
721949dc963fSmrg		if test -z "$hardcode_libdirs"; then
722049dc963fSmrg		  hardcode_libdirs="$libdir"
722149dc963fSmrg		else
722249dc963fSmrg		  # Just accumulate the unique libdirs.
722349dc963fSmrg		  case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in
722449dc963fSmrg		  *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*)
722549dc963fSmrg		    ;;
722649dc963fSmrg		  *)
722749dc963fSmrg		    hardcode_libdirs="$hardcode_libdirs$hardcode_libdir_separator$libdir"
722849dc963fSmrg		    ;;
722949dc963fSmrg		  esac
723049dc963fSmrg		fi
723149dc963fSmrg	      else
723249dc963fSmrg		eval flag=\"$hardcode_libdir_flag_spec\"
723349dc963fSmrg		dep_rpath="$dep_rpath $flag"
723449dc963fSmrg	      fi
723549dc963fSmrg	    elif test -n "$runpath_var"; then
723649dc963fSmrg	      case "$perm_rpath " in
723749dc963fSmrg	      *" $libdir "*) ;;
723849dc963fSmrg	      *) perm_rpath="$perm_rpath $libdir" ;;
723949dc963fSmrg	      esac
724049dc963fSmrg	    fi
724149dc963fSmrg	  done
724249dc963fSmrg	  # Substitute the hardcoded libdirs into the rpath.
724349dc963fSmrg	  if test -n "$hardcode_libdir_separator" &&
724449dc963fSmrg	     test -n "$hardcode_libdirs"; then
724549dc963fSmrg	    libdir="$hardcode_libdirs"
724649dc963fSmrg	    if test -n "$hardcode_libdir_flag_spec_ld"; then
724749dc963fSmrg	      eval dep_rpath=\"$hardcode_libdir_flag_spec_ld\"
724849dc963fSmrg	    else
724949dc963fSmrg	      eval dep_rpath=\"$hardcode_libdir_flag_spec\"
725049dc963fSmrg	    fi
725149dc963fSmrg	  fi
725249dc963fSmrg	  if test -n "$runpath_var" && test -n "$perm_rpath"; then
725349dc963fSmrg	    # We should set the runpath_var.
725449dc963fSmrg	    rpath=
725549dc963fSmrg	    for dir in $perm_rpath; do
725649dc963fSmrg	      rpath="$rpath$dir:"
725749dc963fSmrg	    done
725849dc963fSmrg	    eval "$runpath_var='$rpath\$$runpath_var'; export $runpath_var"
725949dc963fSmrg	  fi
726049dc963fSmrg	  test -n "$dep_rpath" && deplibs="$dep_rpath $deplibs"
726149dc963fSmrg	fi
72624b0ead49Smrg
726349dc963fSmrg	shlibpath="$finalize_shlibpath"
726449dc963fSmrg	test "$mode" != relink && shlibpath="$compile_shlibpath$shlibpath"
726549dc963fSmrg	if test -n "$shlibpath"; then
726649dc963fSmrg	  eval "$shlibpath_var='$shlibpath\$$shlibpath_var'; export $shlibpath_var"
726749dc963fSmrg	fi
72684b0ead49Smrg
726949dc963fSmrg	# Get the real and link names of the library.
727049dc963fSmrg	eval shared_ext=\"$shrext_cmds\"
727149dc963fSmrg	eval library_names=\"$library_names_spec\"
727249dc963fSmrg	set dummy $library_names
727349dc963fSmrg	shift
727449dc963fSmrg	realname="$1"
727549dc963fSmrg	shift
72764b0ead49Smrg
727749dc963fSmrg	if test -n "$soname_spec"; then
727849dc963fSmrg	  eval soname=\"$soname_spec\"
727949dc963fSmrg	else
728049dc963fSmrg	  soname="$realname"
728149dc963fSmrg	fi
728249dc963fSmrg	if test -z "$dlname"; then
728349dc963fSmrg	  dlname=$soname
728449dc963fSmrg	fi
72854b0ead49Smrg
728649dc963fSmrg	lib="$output_objdir/$realname"
728749dc963fSmrg	linknames=
728849dc963fSmrg	for link
728949dc963fSmrg	do
729049dc963fSmrg	  linknames="$linknames $link"
729149dc963fSmrg	done
72924b0ead49Smrg
729349dc963fSmrg	# Use standard objects if they are pic
72947aa89044Smrg	test -z "$pic_flag" && libobjs=`$ECHO "$libobjs" | $SP2NL | $SED "$lo2o" | $NL2SP`
729549dc963fSmrg	test "X$libobjs" = "X " && libobjs=
72964b0ead49Smrg
729749dc963fSmrg	delfiles=
729849dc963fSmrg	if test -n "$export_symbols" && test -n "$include_expsyms"; then
729949dc963fSmrg	  $opt_dry_run || cp "$export_symbols" "$output_objdir/$libname.uexp"
730049dc963fSmrg	  export_symbols="$output_objdir/$libname.uexp"
730149dc963fSmrg	  delfiles="$delfiles $export_symbols"
730249dc963fSmrg	fi
73034b0ead49Smrg
730449dc963fSmrg	orig_export_symbols=
730549dc963fSmrg	case $host_os in
730649dc963fSmrg	cygwin* | mingw* | cegcc*)
730749dc963fSmrg	  if test -n "$export_symbols" && test -z "$export_symbols_regex"; then
730849dc963fSmrg	    # exporting using user supplied symfile
730949dc963fSmrg	    if test "x`$SED 1q $export_symbols`" != xEXPORTS; then
731049dc963fSmrg	      # and it's NOT already a .def file. Must figure out
731149dc963fSmrg	      # which of the given symbols are data symbols and tag
731249dc963fSmrg	      # them as such. So, trigger use of export_symbols_cmds.
731349dc963fSmrg	      # export_symbols gets reassigned inside the "prepare
731449dc963fSmrg	      # the list of exported symbols" if statement, so the
731549dc963fSmrg	      # include_expsyms logic still works.
731649dc963fSmrg	      orig_export_symbols="$export_symbols"
731749dc963fSmrg	      export_symbols=
731849dc963fSmrg	      always_export_symbols=yes
731949dc963fSmrg	    fi
732049dc963fSmrg	  fi
732149dc963fSmrg	  ;;
732249dc963fSmrg	esac
73234b0ead49Smrg
732449dc963fSmrg	# Prepare the list of exported symbols
732549dc963fSmrg	if test -z "$export_symbols"; then
732649dc963fSmrg	  if test "$always_export_symbols" = yes || test -n "$export_symbols_regex"; then
732749dc963fSmrg	    func_verbose "generating symbol list for \`$libname.la'"
732849dc963fSmrg	    export_symbols="$output_objdir/$libname.exp"
732949dc963fSmrg	    $opt_dry_run || $RM $export_symbols
733049dc963fSmrg	    cmds=$export_symbols_cmds
733149dc963fSmrg	    save_ifs="$IFS"; IFS='~'
733249dc963fSmrg	    for cmd in $cmds; do
733349dc963fSmrg	      IFS="$save_ifs"
733449dc963fSmrg	      eval cmd=\"$cmd\"
733549dc963fSmrg	      func_len " $cmd"
733649dc963fSmrg	      len=$func_len_result
733749dc963fSmrg	      if test "$len" -lt "$max_cmd_len" || test "$max_cmd_len" -le -1; then
733849dc963fSmrg		func_show_eval "$cmd" 'exit $?'
733949dc963fSmrg		skipped_export=false
734049dc963fSmrg	      else
734149dc963fSmrg		# The command line is too long to execute in one step.
734249dc963fSmrg		func_verbose "using reloadable object file for export list..."
734349dc963fSmrg		skipped_export=:
734449dc963fSmrg		# Break out early, otherwise skipped_export may be
734549dc963fSmrg		# set to false by a later but shorter cmd.
734649dc963fSmrg		break
734749dc963fSmrg	      fi
734849dc963fSmrg	    done
734949dc963fSmrg	    IFS="$save_ifs"
735049dc963fSmrg	    if test -n "$export_symbols_regex" && test "X$skipped_export" != "X:"; then
735149dc963fSmrg	      func_show_eval '$EGREP -e "$export_symbols_regex" "$export_symbols" > "${export_symbols}T"'
735249dc963fSmrg	      func_show_eval '$MV "${export_symbols}T" "$export_symbols"'
735349dc963fSmrg	    fi
735449dc963fSmrg	  fi
73554b0ead49Smrg	fi
73564b0ead49Smrg
735749dc963fSmrg	if test -n "$export_symbols" && test -n "$include_expsyms"; then
735849dc963fSmrg	  tmp_export_symbols="$export_symbols"
735949dc963fSmrg	  test -n "$orig_export_symbols" && tmp_export_symbols="$orig_export_symbols"
73607aa89044Smrg	  $opt_dry_run || eval '$ECHO "$include_expsyms" | $SP2NL >> "$tmp_export_symbols"'
736149dc963fSmrg	fi
73624b0ead49Smrg
736349dc963fSmrg	if test "X$skipped_export" != "X:" && test -n "$orig_export_symbols"; then
736449dc963fSmrg	  # The given exports_symbols file has to be filtered, so filter it.
736549dc963fSmrg	  func_verbose "filter symbol list for \`$libname.la' to tag DATA exports"
736649dc963fSmrg	  # FIXME: $output_objdir/$libname.filter potentially contains lots of
736749dc963fSmrg	  # 's' commands which not all seds can handle. GNU sed should be fine
736849dc963fSmrg	  # though. Also, the filter scales superlinearly with the number of
736949dc963fSmrg	  # global variables. join(1) would be nice here, but unfortunately
737049dc963fSmrg	  # isn't a blessed tool.
737149dc963fSmrg	  $opt_dry_run || $SED -e '/[ ,]DATA/!d;s,\(.*\)\([ \,].*\),s|^\1$|\1\2|,' < $export_symbols > $output_objdir/$libname.filter
737249dc963fSmrg	  delfiles="$delfiles $export_symbols $output_objdir/$libname.filter"
737349dc963fSmrg	  export_symbols=$output_objdir/$libname.def
737449dc963fSmrg	  $opt_dry_run || $SED -f $output_objdir/$libname.filter < $orig_export_symbols > $export_symbols
737549dc963fSmrg	fi
73764b0ead49Smrg
737749dc963fSmrg	tmp_deplibs=
737849dc963fSmrg	for test_deplib in $deplibs; do
737949dc963fSmrg	  case " $convenience " in
738049dc963fSmrg	  *" $test_deplib "*) ;;
738149dc963fSmrg	  *)
738249dc963fSmrg	    tmp_deplibs="$tmp_deplibs $test_deplib"
738349dc963fSmrg	    ;;
738449dc963fSmrg	  esac
738549dc963fSmrg	done
738649dc963fSmrg	deplibs="$tmp_deplibs"
73874b0ead49Smrg
738849dc963fSmrg	if test -n "$convenience"; then
738949dc963fSmrg	  if test -n "$whole_archive_flag_spec" &&
739049dc963fSmrg	    test "$compiler_needs_object" = yes &&
739149dc963fSmrg	    test -z "$libobjs"; then
739249dc963fSmrg	    # extract the archives, so we have objects to list.
739349dc963fSmrg	    # TODO: could optimize this to just extract one archive.
739449dc963fSmrg	    whole_archive_flag_spec=
739549dc963fSmrg	  fi
739649dc963fSmrg	  if test -n "$whole_archive_flag_spec"; then
739749dc963fSmrg	    save_libobjs=$libobjs
739849dc963fSmrg	    eval libobjs=\"\$libobjs $whole_archive_flag_spec\"
739949dc963fSmrg	    test "X$libobjs" = "X " && libobjs=
740049dc963fSmrg	  else
740149dc963fSmrg	    gentop="$output_objdir/${outputname}x"
740249dc963fSmrg	    generated="$generated $gentop"
74034b0ead49Smrg
740449dc963fSmrg	    func_extract_archives $gentop $convenience
740549dc963fSmrg	    libobjs="$libobjs $func_extract_archives_result"
740649dc963fSmrg	    test "X$libobjs" = "X " && libobjs=
740749dc963fSmrg	  fi
74084b0ead49Smrg	fi
74094b0ead49Smrg
741049dc963fSmrg	if test "$thread_safe" = yes && test -n "$thread_safe_flag_spec"; then
741149dc963fSmrg	  eval flag=\"$thread_safe_flag_spec\"
741249dc963fSmrg	  linker_flags="$linker_flags $flag"
74134b0ead49Smrg	fi
74144b0ead49Smrg
741549dc963fSmrg	# Make a backup of the uninstalled library when relinking
741649dc963fSmrg	if test "$mode" = relink; then
741749dc963fSmrg	  $opt_dry_run || eval '(cd $output_objdir && $RM ${realname}U && $MV $realname ${realname}U)' || exit $?
741849dc963fSmrg	fi
74194b0ead49Smrg
742049dc963fSmrg	# Do each of the archive commands.
742149dc963fSmrg	if test "$module" = yes && test -n "$module_cmds" ; then
742249dc963fSmrg	  if test -n "$export_symbols" && test -n "$module_expsym_cmds"; then
742349dc963fSmrg	    eval test_cmds=\"$module_expsym_cmds\"
742449dc963fSmrg	    cmds=$module_expsym_cmds
742549dc963fSmrg	  else
742649dc963fSmrg	    eval test_cmds=\"$module_cmds\"
742749dc963fSmrg	    cmds=$module_cmds
742849dc963fSmrg	  fi
74294b0ead49Smrg	else
743049dc963fSmrg	  if test -n "$export_symbols" && test -n "$archive_expsym_cmds"; then
743149dc963fSmrg	    eval test_cmds=\"$archive_expsym_cmds\"
743249dc963fSmrg	    cmds=$archive_expsym_cmds
743349dc963fSmrg	  else
743449dc963fSmrg	    eval test_cmds=\"$archive_cmds\"
743549dc963fSmrg	    cmds=$archive_cmds
743649dc963fSmrg	  fi
74374b0ead49Smrg	fi
74384b0ead49Smrg
743949dc963fSmrg	if test "X$skipped_export" != "X:" &&
744049dc963fSmrg	   func_len " $test_cmds" &&
744149dc963fSmrg	   len=$func_len_result &&
744249dc963fSmrg	   test "$len" -lt "$max_cmd_len" || test "$max_cmd_len" -le -1; then
744349dc963fSmrg	  :
744449dc963fSmrg	else
744549dc963fSmrg	  # The command line is too long to link in one step, link piecewise
744649dc963fSmrg	  # or, if using GNU ld and skipped_export is not :, use a linker
744749dc963fSmrg	  # script.
74484b0ead49Smrg
744949dc963fSmrg	  # Save the value of $output and $libobjs because we want to
745049dc963fSmrg	  # use them later.  If we have whole_archive_flag_spec, we
745149dc963fSmrg	  # want to use save_libobjs as it was before
745249dc963fSmrg	  # whole_archive_flag_spec was expanded, because we can't
745349dc963fSmrg	  # assume the linker understands whole_archive_flag_spec.
745449dc963fSmrg	  # This may have to be revisited, in case too many
745549dc963fSmrg	  # convenience libraries get linked in and end up exceeding
745649dc963fSmrg	  # the spec.
745749dc963fSmrg	  if test -z "$convenience" || test -z "$whole_archive_flag_spec"; then
745849dc963fSmrg	    save_libobjs=$libobjs
745949dc963fSmrg	  fi
746049dc963fSmrg	  save_output=$output
74617aa89044Smrg	  func_basename "$output"
74627aa89044Smrg	  output_la=$func_basename_result
74634b0ead49Smrg
746449dc963fSmrg	  # Clear the reloadable object creation command queue and
746549dc963fSmrg	  # initialize k to one.
746649dc963fSmrg	  test_cmds=
746749dc963fSmrg	  concat_cmds=
746849dc963fSmrg	  objlist=
746949dc963fSmrg	  last_robj=
747049dc963fSmrg	  k=1
747149dc963fSmrg
747249dc963fSmrg	  if test -n "$save_libobjs" && test "X$skipped_export" != "X:" && test "$with_gnu_ld" = yes; then
747349dc963fSmrg	    output=${output_objdir}/${output_la}.lnkscript
747449dc963fSmrg	    func_verbose "creating GNU ld script: $output"
74757aa89044Smrg	    echo 'INPUT (' > $output
747649dc963fSmrg	    for obj in $save_libobjs
74774b0ead49Smrg	    do
747849dc963fSmrg	      $ECHO "$obj" >> $output
747949dc963fSmrg	    done
74807aa89044Smrg	    echo ')' >> $output
748149dc963fSmrg	    delfiles="$delfiles $output"
748249dc963fSmrg	  elif test -n "$save_libobjs" && test "X$skipped_export" != "X:" && test "X$file_list_spec" != X; then
748349dc963fSmrg	    output=${output_objdir}/${output_la}.lnk
748449dc963fSmrg	    func_verbose "creating linker input file list: $output"
748549dc963fSmrg	    : > $output
748649dc963fSmrg	    set x $save_libobjs
748749dc963fSmrg	    shift
748849dc963fSmrg	    firstobj=
748949dc963fSmrg	    if test "$compiler_needs_object" = yes; then
749049dc963fSmrg	      firstobj="$1 "
749149dc963fSmrg	      shift
749249dc963fSmrg	    fi
749349dc963fSmrg	    for obj
749449dc963fSmrg	    do
749549dc963fSmrg	      $ECHO "$obj" >> $output
749649dc963fSmrg	    done
749749dc963fSmrg	    delfiles="$delfiles $output"
749849dc963fSmrg	    output=$firstobj\"$file_list_spec$output\"
749949dc963fSmrg	  else
750049dc963fSmrg	    if test -n "$save_libobjs"; then
750149dc963fSmrg	      func_verbose "creating reloadable object files..."
750249dc963fSmrg	      output=$output_objdir/$output_la-${k}.$objext
750349dc963fSmrg	      eval test_cmds=\"$reload_cmds\"
750449dc963fSmrg	      func_len " $test_cmds"
750549dc963fSmrg	      len0=$func_len_result
750649dc963fSmrg	      len=$len0
750749dc963fSmrg
750849dc963fSmrg	      # Loop over the list of objects to be linked.
750949dc963fSmrg	      for obj in $save_libobjs
751049dc963fSmrg	      do
751149dc963fSmrg		func_len " $obj"
751249dc963fSmrg		func_arith $len + $func_len_result
751349dc963fSmrg		len=$func_arith_result
751449dc963fSmrg		if test "X$objlist" = X ||
751549dc963fSmrg		   test "$len" -lt "$max_cmd_len"; then
751649dc963fSmrg		  func_append objlist " $obj"
751749dc963fSmrg		else
751849dc963fSmrg		  # The command $test_cmds is almost too long, add a
751949dc963fSmrg		  # command to the queue.
752049dc963fSmrg		  if test "$k" -eq 1 ; then
752149dc963fSmrg		    # The first file doesn't have a previous command to add.
75227aa89044Smrg		    reload_objs=$objlist
75237aa89044Smrg		    eval concat_cmds=\"$reload_cmds\"
752449dc963fSmrg		  else
752549dc963fSmrg		    # All subsequent reloadable object files will link in
752649dc963fSmrg		    # the last one created.
75277aa89044Smrg		    reload_objs="$objlist $last_robj"
75287aa89044Smrg		    eval concat_cmds=\"\$concat_cmds~$reload_cmds~\$RM $last_robj\"
752949dc963fSmrg		  fi
753049dc963fSmrg		  last_robj=$output_objdir/$output_la-${k}.$objext
753149dc963fSmrg		  func_arith $k + 1
753249dc963fSmrg		  k=$func_arith_result
753349dc963fSmrg		  output=$output_objdir/$output_la-${k}.$objext
75347aa89044Smrg		  objlist=" $obj"
753549dc963fSmrg		  func_len " $last_robj"
753649dc963fSmrg		  func_arith $len0 + $func_len_result
753749dc963fSmrg		  len=$func_arith_result
753849dc963fSmrg		fi
753949dc963fSmrg	      done
754049dc963fSmrg	      # Handle the remaining objects by creating one last
754149dc963fSmrg	      # reloadable object file.  All subsequent reloadable object
754249dc963fSmrg	      # files will link in the last one created.
754349dc963fSmrg	      test -z "$concat_cmds" || concat_cmds=$concat_cmds~
75447aa89044Smrg	      reload_objs="$objlist $last_robj"
75457aa89044Smrg	      eval concat_cmds=\"\${concat_cmds}$reload_cmds\"
754649dc963fSmrg	      if test -n "$last_robj"; then
754749dc963fSmrg	        eval concat_cmds=\"\${concat_cmds}~\$RM $last_robj\"
754849dc963fSmrg	      fi
754949dc963fSmrg	      delfiles="$delfiles $output"
75504b0ead49Smrg
755149dc963fSmrg	    else
755249dc963fSmrg	      output=
755349dc963fSmrg	    fi
75544b0ead49Smrg
755549dc963fSmrg	    if ${skipped_export-false}; then
755649dc963fSmrg	      func_verbose "generating symbol list for \`$libname.la'"
755749dc963fSmrg	      export_symbols="$output_objdir/$libname.exp"
755849dc963fSmrg	      $opt_dry_run || $RM $export_symbols
755949dc963fSmrg	      libobjs=$output
756049dc963fSmrg	      # Append the command to create the export file.
756149dc963fSmrg	      test -z "$concat_cmds" || concat_cmds=$concat_cmds~
756249dc963fSmrg	      eval concat_cmds=\"\$concat_cmds$export_symbols_cmds\"
756349dc963fSmrg	      if test -n "$last_robj"; then
756449dc963fSmrg		eval concat_cmds=\"\$concat_cmds~\$RM $last_robj\"
756549dc963fSmrg	      fi
75664b0ead49Smrg	    fi
75674b0ead49Smrg
756849dc963fSmrg	    test -n "$save_libobjs" &&
756949dc963fSmrg	      func_verbose "creating a temporary reloadable object file: $output"
75704b0ead49Smrg
757149dc963fSmrg	    # Loop through the commands generated above and execute them.
757249dc963fSmrg	    save_ifs="$IFS"; IFS='~'
757349dc963fSmrg	    for cmd in $concat_cmds; do
757449dc963fSmrg	      IFS="$save_ifs"
757549dc963fSmrg	      $opt_silent || {
757649dc963fSmrg		  func_quote_for_expand "$cmd"
757749dc963fSmrg		  eval "func_echo $func_quote_for_expand_result"
757849dc963fSmrg	      }
757949dc963fSmrg	      $opt_dry_run || eval "$cmd" || {
758049dc963fSmrg		lt_exit=$?
758149dc963fSmrg
758249dc963fSmrg		# Restore the uninstalled library and exit
758349dc963fSmrg		if test "$mode" = relink; then
758449dc963fSmrg		  ( cd "$output_objdir" && \
758549dc963fSmrg		    $RM "${realname}T" && \
758649dc963fSmrg		    $MV "${realname}U" "$realname" )
758749dc963fSmrg		fi
75884b0ead49Smrg
758949dc963fSmrg		exit $lt_exit
759049dc963fSmrg	      }
759149dc963fSmrg	    done
759249dc963fSmrg	    IFS="$save_ifs"
75934b0ead49Smrg
759449dc963fSmrg	    if test -n "$export_symbols_regex" && ${skipped_export-false}; then
759549dc963fSmrg	      func_show_eval '$EGREP -e "$export_symbols_regex" "$export_symbols" > "${export_symbols}T"'
759649dc963fSmrg	      func_show_eval '$MV "${export_symbols}T" "$export_symbols"'
75974b0ead49Smrg	    fi
75984b0ead49Smrg	  fi
75994b0ead49Smrg
760049dc963fSmrg          if ${skipped_export-false}; then
760149dc963fSmrg	    if test -n "$export_symbols" && test -n "$include_expsyms"; then
760249dc963fSmrg	      tmp_export_symbols="$export_symbols"
760349dc963fSmrg	      test -n "$orig_export_symbols" && tmp_export_symbols="$orig_export_symbols"
76047aa89044Smrg	      $opt_dry_run || eval '$ECHO "$include_expsyms" | $SP2NL >> "$tmp_export_symbols"'
760549dc963fSmrg	    fi
76064b0ead49Smrg
760749dc963fSmrg	    if test -n "$orig_export_symbols"; then
760849dc963fSmrg	      # The given exports_symbols file has to be filtered, so filter it.
760949dc963fSmrg	      func_verbose "filter symbol list for \`$libname.la' to tag DATA exports"
761049dc963fSmrg	      # FIXME: $output_objdir/$libname.filter potentially contains lots of
761149dc963fSmrg	      # 's' commands which not all seds can handle. GNU sed should be fine
761249dc963fSmrg	      # though. Also, the filter scales superlinearly with the number of
761349dc963fSmrg	      # global variables. join(1) would be nice here, but unfortunately
761449dc963fSmrg	      # isn't a blessed tool.
761549dc963fSmrg	      $opt_dry_run || $SED -e '/[ ,]DATA/!d;s,\(.*\)\([ \,].*\),s|^\1$|\1\2|,' < $export_symbols > $output_objdir/$libname.filter
761649dc963fSmrg	      delfiles="$delfiles $export_symbols $output_objdir/$libname.filter"
761749dc963fSmrg	      export_symbols=$output_objdir/$libname.def
761849dc963fSmrg	      $opt_dry_run || $SED -f $output_objdir/$libname.filter < $orig_export_symbols > $export_symbols
761949dc963fSmrg	    fi
762049dc963fSmrg	  fi
76214b0ead49Smrg
762249dc963fSmrg	  libobjs=$output
762349dc963fSmrg	  # Restore the value of output.
762449dc963fSmrg	  output=$save_output
76254b0ead49Smrg
762649dc963fSmrg	  if test -n "$convenience" && test -n "$whole_archive_flag_spec"; then
762749dc963fSmrg	    eval libobjs=\"\$libobjs $whole_archive_flag_spec\"
762849dc963fSmrg	    test "X$libobjs" = "X " && libobjs=
762949dc963fSmrg	  fi
763049dc963fSmrg	  # Expand the library linking commands again to reset the
763149dc963fSmrg	  # value of $libobjs for piecewise linking.
76324b0ead49Smrg
763349dc963fSmrg	  # Do each of the archive commands.
763449dc963fSmrg	  if test "$module" = yes && test -n "$module_cmds" ; then
763549dc963fSmrg	    if test -n "$export_symbols" && test -n "$module_expsym_cmds"; then
763649dc963fSmrg	      cmds=$module_expsym_cmds
763749dc963fSmrg	    else
763849dc963fSmrg	      cmds=$module_cmds
76394b0ead49Smrg	    fi
76404b0ead49Smrg	  else
764149dc963fSmrg	    if test -n "$export_symbols" && test -n "$archive_expsym_cmds"; then
764249dc963fSmrg	      cmds=$archive_expsym_cmds
764349dc963fSmrg	    else
764449dc963fSmrg	      cmds=$archive_cmds
764549dc963fSmrg	    fi
76464b0ead49Smrg	  fi
764749dc963fSmrg	fi
76484b0ead49Smrg
764949dc963fSmrg	if test -n "$delfiles"; then
765049dc963fSmrg	  # Append the command to remove temporary files to $cmds.
765149dc963fSmrg	  eval cmds=\"\$cmds~\$RM $delfiles\"
765249dc963fSmrg	fi
76534b0ead49Smrg
765449dc963fSmrg	# Add any objects from preloaded convenience libraries
765549dc963fSmrg	if test -n "$dlprefiles"; then
765649dc963fSmrg	  gentop="$output_objdir/${outputname}x"
765749dc963fSmrg	  generated="$generated $gentop"
76584b0ead49Smrg
765949dc963fSmrg	  func_extract_archives $gentop $dlprefiles
766049dc963fSmrg	  libobjs="$libobjs $func_extract_archives_result"
766149dc963fSmrg	  test "X$libobjs" = "X " && libobjs=
766249dc963fSmrg	fi
76634b0ead49Smrg
766449dc963fSmrg	save_ifs="$IFS"; IFS='~'
766549dc963fSmrg	for cmd in $cmds; do
766649dc963fSmrg	  IFS="$save_ifs"
766749dc963fSmrg	  eval cmd=\"$cmd\"
766849dc963fSmrg	  $opt_silent || {
766949dc963fSmrg	    func_quote_for_expand "$cmd"
767049dc963fSmrg	    eval "func_echo $func_quote_for_expand_result"
767149dc963fSmrg	  }
767249dc963fSmrg	  $opt_dry_run || eval "$cmd" || {
767349dc963fSmrg	    lt_exit=$?
76744b0ead49Smrg
767549dc963fSmrg	    # Restore the uninstalled library and exit
767649dc963fSmrg	    if test "$mode" = relink; then
767749dc963fSmrg	      ( cd "$output_objdir" && \
767849dc963fSmrg	        $RM "${realname}T" && \
767949dc963fSmrg		$MV "${realname}U" "$realname" )
768049dc963fSmrg	    fi
76814b0ead49Smrg
768249dc963fSmrg	    exit $lt_exit
768349dc963fSmrg	  }
768449dc963fSmrg	done
768549dc963fSmrg	IFS="$save_ifs"
76864b0ead49Smrg
768749dc963fSmrg	# Restore the uninstalled library and exit
768849dc963fSmrg	if test "$mode" = relink; then
768949dc963fSmrg	  $opt_dry_run || eval '(cd $output_objdir && $RM ${realname}T && $MV $realname ${realname}T && $MV ${realname}U $realname)' || exit $?
76904b0ead49Smrg
769149dc963fSmrg	  if test -n "$convenience"; then
769249dc963fSmrg	    if test -z "$whole_archive_flag_spec"; then
769349dc963fSmrg	      func_show_eval '${RM}r "$gentop"'
769449dc963fSmrg	    fi
769549dc963fSmrg	  fi
76964b0ead49Smrg
769749dc963fSmrg	  exit $EXIT_SUCCESS
769849dc963fSmrg	fi
769949dc963fSmrg
770049dc963fSmrg	# Create links to the real library.
770149dc963fSmrg	for linkname in $linknames; do
770249dc963fSmrg	  if test "$realname" != "$linkname"; then
770349dc963fSmrg	    func_show_eval '(cd "$output_objdir" && $RM "$linkname" && $LN_S "$realname" "$linkname")' 'exit $?'
77044b0ead49Smrg	  fi
77054b0ead49Smrg	done
77064b0ead49Smrg
770749dc963fSmrg	# If -module or -export-dynamic was specified, set the dlname.
770849dc963fSmrg	if test "$module" = yes || test "$export_dynamic" = yes; then
770949dc963fSmrg	  # On all known operating systems, these are identical.
771049dc963fSmrg	  dlname="$soname"
771149dc963fSmrg	fi
771249dc963fSmrg      fi
77134b0ead49Smrg      ;;
77144b0ead49Smrg
771549dc963fSmrg    obj)
771649dc963fSmrg      if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then
771749dc963fSmrg	func_warning "\`-dlopen' is ignored for objects"
771849dc963fSmrg      fi
77194b0ead49Smrg
772049dc963fSmrg      case " $deplibs" in
772149dc963fSmrg      *\ -l* | *\ -L*)
772249dc963fSmrg	func_warning "\`-l' and \`-L' are ignored for objects" ;;
77234b0ead49Smrg      esac
77244b0ead49Smrg
772549dc963fSmrg      test -n "$rpath" && \
772649dc963fSmrg	func_warning "\`-rpath' is ignored for objects"
772749dc963fSmrg
772849dc963fSmrg      test -n "$xrpath" && \
772949dc963fSmrg	func_warning "\`-R' is ignored for objects"
77304b0ead49Smrg
773149dc963fSmrg      test -n "$vinfo" && \
773249dc963fSmrg	func_warning "\`-version-info' is ignored for objects"
77334b0ead49Smrg
773449dc963fSmrg      test -n "$release" && \
773549dc963fSmrg	func_warning "\`-release' is ignored for objects"
773649dc963fSmrg
773749dc963fSmrg      case $output in
773849dc963fSmrg      *.lo)
773949dc963fSmrg	test -n "$objs$old_deplibs" && \
774049dc963fSmrg	  func_fatal_error "cannot build library object \`$output' from non-libtool objects"
774149dc963fSmrg
774249dc963fSmrg	libobj=$output
774349dc963fSmrg	func_lo2o "$libobj"
774449dc963fSmrg	obj=$func_lo2o_result
77454b0ead49Smrg	;;
77464b0ead49Smrg      *)
774749dc963fSmrg	libobj=
774849dc963fSmrg	obj="$output"
77494b0ead49Smrg	;;
77504b0ead49Smrg      esac
77514b0ead49Smrg
775249dc963fSmrg      # Delete the old objects.
775349dc963fSmrg      $opt_dry_run || $RM $obj $libobj
77544b0ead49Smrg
775549dc963fSmrg      # Objects from convenience libraries.  This assumes
775649dc963fSmrg      # single-version convenience libraries.  Whenever we create
775749dc963fSmrg      # different ones for PIC/non-PIC, this we'll have to duplicate
775849dc963fSmrg      # the extraction.
775949dc963fSmrg      reload_conv_objs=
776049dc963fSmrg      gentop=
776149dc963fSmrg      # reload_cmds runs $LD directly, so let us get rid of
776249dc963fSmrg      # -Wl from whole_archive_flag_spec and hope we can get by with
776349dc963fSmrg      # turning comma into space..
776449dc963fSmrg      wl=
77654b0ead49Smrg
776649dc963fSmrg      if test -n "$convenience"; then
776749dc963fSmrg	if test -n "$whole_archive_flag_spec"; then
776849dc963fSmrg	  eval tmp_whole_archive_flags=\"$whole_archive_flag_spec\"
77697aa89044Smrg	  reload_conv_objs=$reload_objs\ `$ECHO "$tmp_whole_archive_flags" | $SED 's|,| |g'`
777049dc963fSmrg	else
777149dc963fSmrg	  gentop="$output_objdir/${obj}x"
777249dc963fSmrg	  generated="$generated $gentop"
77734b0ead49Smrg
777449dc963fSmrg	  func_extract_archives $gentop $convenience
777549dc963fSmrg	  reload_conv_objs="$reload_objs $func_extract_archives_result"
777649dc963fSmrg	fi
77774b0ead49Smrg      fi
77784b0ead49Smrg
777949dc963fSmrg      # Create the old-style object.
77807aa89044Smrg      reload_objs="$objs$old_deplibs "`$ECHO "$libobjs" | $SP2NL | $SED "/\.${libext}$/d; /\.lib$/d; $lo2o" | $NL2SP`" $reload_conv_objs" ### testsuite: skip nested quoting test
77814b0ead49Smrg
778249dc963fSmrg      output="$obj"
778349dc963fSmrg      func_execute_cmds "$reload_cmds" 'exit $?'
77844b0ead49Smrg
778549dc963fSmrg      # Exit if we aren't doing a library object file.
778649dc963fSmrg      if test -z "$libobj"; then
778749dc963fSmrg	if test -n "$gentop"; then
778849dc963fSmrg	  func_show_eval '${RM}r "$gentop"'
778949dc963fSmrg	fi
779049dc963fSmrg
779149dc963fSmrg	exit $EXIT_SUCCESS
77924b0ead49Smrg      fi
779349dc963fSmrg
779449dc963fSmrg      if test "$build_libtool_libs" != yes; then
779549dc963fSmrg	if test -n "$gentop"; then
779649dc963fSmrg	  func_show_eval '${RM}r "$gentop"'
779749dc963fSmrg	fi
779849dc963fSmrg
779949dc963fSmrg	# Create an invalid libtool object if no PIC, so that we don't
780049dc963fSmrg	# accidentally link it into a program.
780149dc963fSmrg	# $show "echo timestamp > $libobj"
780249dc963fSmrg	# $opt_dry_run || eval "echo timestamp > $libobj" || exit $?
780349dc963fSmrg	exit $EXIT_SUCCESS
780449dc963fSmrg      fi
780549dc963fSmrg
780649dc963fSmrg      if test -n "$pic_flag" || test "$pic_mode" != default; then
780749dc963fSmrg	# Only do commands if we really have different PIC objects.
780849dc963fSmrg	reload_objs="$libobjs $reload_conv_objs"
780949dc963fSmrg	output="$libobj"
781049dc963fSmrg	func_execute_cmds "$reload_cmds" 'exit $?'
781149dc963fSmrg      fi
781249dc963fSmrg
781349dc963fSmrg      if test -n "$gentop"; then
781449dc963fSmrg	func_show_eval '${RM}r "$gentop"'
781549dc963fSmrg      fi
781649dc963fSmrg
781749dc963fSmrg      exit $EXIT_SUCCESS
78184b0ead49Smrg      ;;
78194b0ead49Smrg
782049dc963fSmrg    prog)
782149dc963fSmrg      case $host in
782249dc963fSmrg	*cygwin*) func_stripname '' '.exe' "$output"
782349dc963fSmrg	          output=$func_stripname_result.exe;;
782449dc963fSmrg      esac
782549dc963fSmrg      test -n "$vinfo" && \
782649dc963fSmrg	func_warning "\`-version-info' is ignored for programs"
78274b0ead49Smrg
782849dc963fSmrg      test -n "$release" && \
782949dc963fSmrg	func_warning "\`-release' is ignored for programs"
78304b0ead49Smrg
783149dc963fSmrg      test "$preload" = yes \
783249dc963fSmrg        && test "$dlopen_support" = unknown \
783349dc963fSmrg	&& test "$dlopen_self" = unknown \
783449dc963fSmrg	&& test "$dlopen_self_static" = unknown && \
783549dc963fSmrg	  func_warning "\`LT_INIT([dlopen])' not used. Assuming no dlopen support."
783649dc963fSmrg
783749dc963fSmrg      case $host in
783849dc963fSmrg      *-*-rhapsody* | *-*-darwin1.[012])
783949dc963fSmrg	# On Rhapsody replace the C library is the System framework
78407aa89044Smrg	compile_deplibs=`$ECHO " $compile_deplibs" | $SED 's/ -lc / System.ltframework /'`
78417aa89044Smrg	finalize_deplibs=`$ECHO " $finalize_deplibs" | $SED 's/ -lc / System.ltframework /'`
78424b0ead49Smrg	;;
784349dc963fSmrg      esac
78444b0ead49Smrg
784549dc963fSmrg      case $host in
784649dc963fSmrg      *-*-darwin*)
784749dc963fSmrg	# Don't allow lazy linking, it breaks C++ global constructors
784849dc963fSmrg	# But is supposedly fixed on 10.4 or later (yay!).
784949dc963fSmrg	if test "$tagname" = CXX ; then
785049dc963fSmrg	  case ${MACOSX_DEPLOYMENT_TARGET-10.0} in
785149dc963fSmrg	    10.[0123])
785249dc963fSmrg	      compile_command="$compile_command ${wl}-bind_at_load"
785349dc963fSmrg	      finalize_command="$finalize_command ${wl}-bind_at_load"
785449dc963fSmrg	    ;;
785549dc963fSmrg	  esac
78564b0ead49Smrg	fi
785749dc963fSmrg	# Time to change all our "foo.ltframework" stuff back to "-framework foo"
78587aa89044Smrg	compile_deplibs=`$ECHO " $compile_deplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'`
78597aa89044Smrg	finalize_deplibs=`$ECHO " $finalize_deplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'`
786049dc963fSmrg	;;
786149dc963fSmrg      esac
78624b0ead49Smrg
78634b0ead49Smrg
786449dc963fSmrg      # move library search paths that coincide with paths to not yet
786549dc963fSmrg      # installed libraries to the beginning of the library search list
786649dc963fSmrg      new_libs=
786749dc963fSmrg      for path in $notinst_path; do
786849dc963fSmrg	case " $new_libs " in
786949dc963fSmrg	*" -L$path/$objdir "*) ;;
787049dc963fSmrg	*)
787149dc963fSmrg	  case " $compile_deplibs " in
787249dc963fSmrg	  *" -L$path/$objdir "*)
787349dc963fSmrg	    new_libs="$new_libs -L$path/$objdir" ;;
78744b0ead49Smrg	  esac
787549dc963fSmrg	  ;;
787649dc963fSmrg	esac
787749dc963fSmrg      done
787849dc963fSmrg      for deplib in $compile_deplibs; do
787949dc963fSmrg	case $deplib in
788049dc963fSmrg	-L*)
788149dc963fSmrg	  case " $new_libs " in
788249dc963fSmrg	  *" $deplib "*) ;;
788349dc963fSmrg	  *) new_libs="$new_libs $deplib" ;;
78844b0ead49Smrg	  esac
788549dc963fSmrg	  ;;
788649dc963fSmrg	*) new_libs="$new_libs $deplib" ;;
788749dc963fSmrg	esac
788849dc963fSmrg      done
788949dc963fSmrg      compile_deplibs="$new_libs"
78904b0ead49Smrg
78914b0ead49Smrg
789249dc963fSmrg      compile_command="$compile_command $compile_deplibs"
789349dc963fSmrg      finalize_command="$finalize_command $finalize_deplibs"
78944b0ead49Smrg
789549dc963fSmrg      if test -n "$rpath$xrpath"; then
789649dc963fSmrg	# If the user specified any rpath flags, then add them.
789749dc963fSmrg	for libdir in $rpath $xrpath; do
789849dc963fSmrg	  # This is the magic to use -rpath.
789949dc963fSmrg	  case "$finalize_rpath " in
790049dc963fSmrg	  *" $libdir "*) ;;
790149dc963fSmrg	  *) finalize_rpath="$finalize_rpath $libdir" ;;
790249dc963fSmrg	  esac
790349dc963fSmrg	done
790449dc963fSmrg      fi
79054b0ead49Smrg
790649dc963fSmrg      # Now hardcode the library paths
790749dc963fSmrg      rpath=
790849dc963fSmrg      hardcode_libdirs=
790949dc963fSmrg      for libdir in $compile_rpath $finalize_rpath; do
791049dc963fSmrg	if test -n "$hardcode_libdir_flag_spec"; then
791149dc963fSmrg	  if test -n "$hardcode_libdir_separator"; then
791249dc963fSmrg	    if test -z "$hardcode_libdirs"; then
791349dc963fSmrg	      hardcode_libdirs="$libdir"
791449dc963fSmrg	    else
791549dc963fSmrg	      # Just accumulate the unique libdirs.
791649dc963fSmrg	      case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in
791749dc963fSmrg	      *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*)
791849dc963fSmrg		;;
791949dc963fSmrg	      *)
792049dc963fSmrg		hardcode_libdirs="$hardcode_libdirs$hardcode_libdir_separator$libdir"
792149dc963fSmrg		;;
792249dc963fSmrg	      esac
792349dc963fSmrg	    fi
79244b0ead49Smrg	  else
792549dc963fSmrg	    eval flag=\"$hardcode_libdir_flag_spec\"
792649dc963fSmrg	    rpath="$rpath $flag"
79274b0ead49Smrg	  fi
792849dc963fSmrg	elif test -n "$runpath_var"; then
792949dc963fSmrg	  case "$perm_rpath " in
793049dc963fSmrg	  *" $libdir "*) ;;
793149dc963fSmrg	  *) perm_rpath="$perm_rpath $libdir" ;;
793249dc963fSmrg	  esac
793349dc963fSmrg	fi
793449dc963fSmrg	case $host in
793549dc963fSmrg	*-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-cegcc*)
793649dc963fSmrg	  testbindir=`${ECHO} "$libdir" | ${SED} -e 's*/lib$*/bin*'`
793749dc963fSmrg	  case :$dllsearchpath: in
793849dc963fSmrg	  *":$libdir:"*) ;;
793949dc963fSmrg	  ::) dllsearchpath=$libdir;;
794049dc963fSmrg	  *) dllsearchpath="$dllsearchpath:$libdir";;
794149dc963fSmrg	  esac
794249dc963fSmrg	  case :$dllsearchpath: in
794349dc963fSmrg	  *":$testbindir:"*) ;;
794449dc963fSmrg	  ::) dllsearchpath=$testbindir;;
794549dc963fSmrg	  *) dllsearchpath="$dllsearchpath:$testbindir";;
794649dc963fSmrg	  esac
794749dc963fSmrg	  ;;
794849dc963fSmrg	esac
794949dc963fSmrg      done
795049dc963fSmrg      # Substitute the hardcoded libdirs into the rpath.
795149dc963fSmrg      if test -n "$hardcode_libdir_separator" &&
795249dc963fSmrg	 test -n "$hardcode_libdirs"; then
795349dc963fSmrg	libdir="$hardcode_libdirs"
795449dc963fSmrg	eval rpath=\" $hardcode_libdir_flag_spec\"
795549dc963fSmrg      fi
795649dc963fSmrg      compile_rpath="$rpath"
79574b0ead49Smrg
795849dc963fSmrg      rpath=
795949dc963fSmrg      hardcode_libdirs=
796049dc963fSmrg      for libdir in $finalize_rpath; do
796149dc963fSmrg	if test -n "$hardcode_libdir_flag_spec"; then
796249dc963fSmrg	  if test -n "$hardcode_libdir_separator"; then
796349dc963fSmrg	    if test -z "$hardcode_libdirs"; then
796449dc963fSmrg	      hardcode_libdirs="$libdir"
796549dc963fSmrg	    else
796649dc963fSmrg	      # Just accumulate the unique libdirs.
796749dc963fSmrg	      case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in
796849dc963fSmrg	      *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*)
796949dc963fSmrg		;;
797049dc963fSmrg	      *)
797149dc963fSmrg		hardcode_libdirs="$hardcode_libdirs$hardcode_libdir_separator$libdir"
797249dc963fSmrg		;;
797349dc963fSmrg	      esac
797449dc963fSmrg	    fi
79754b0ead49Smrg	  else
797649dc963fSmrg	    eval flag=\"$hardcode_libdir_flag_spec\"
797749dc963fSmrg	    rpath="$rpath $flag"
79784b0ead49Smrg	  fi
797949dc963fSmrg	elif test -n "$runpath_var"; then
798049dc963fSmrg	  case "$finalize_perm_rpath " in
798149dc963fSmrg	  *" $libdir "*) ;;
798249dc963fSmrg	  *) finalize_perm_rpath="$finalize_perm_rpath $libdir" ;;
798349dc963fSmrg	  esac
79844b0ead49Smrg	fi
798549dc963fSmrg      done
798649dc963fSmrg      # Substitute the hardcoded libdirs into the rpath.
798749dc963fSmrg      if test -n "$hardcode_libdir_separator" &&
798849dc963fSmrg	 test -n "$hardcode_libdirs"; then
798949dc963fSmrg	libdir="$hardcode_libdirs"
799049dc963fSmrg	eval rpath=\" $hardcode_libdir_flag_spec\"
799149dc963fSmrg      fi
799249dc963fSmrg      finalize_rpath="$rpath"
79934b0ead49Smrg
799449dc963fSmrg      if test -n "$libobjs" && test "$build_old_libs" = yes; then
799549dc963fSmrg	# Transform all the library objects into standard objects.
79967aa89044Smrg	compile_command=`$ECHO "$compile_command" | $SP2NL | $SED "$lo2o" | $NL2SP`
79977aa89044Smrg	finalize_command=`$ECHO "$finalize_command" | $SP2NL | $SED "$lo2o" | $NL2SP`
799849dc963fSmrg      fi
79994b0ead49Smrg
800049dc963fSmrg      func_generate_dlsyms "$outputname" "@PROGRAM@" "no"
80014b0ead49Smrg
800249dc963fSmrg      # template prelinking step
800349dc963fSmrg      if test -n "$prelink_cmds"; then
800449dc963fSmrg	func_execute_cmds "$prelink_cmds" 'exit $?'
800549dc963fSmrg      fi
80064b0ead49Smrg
800749dc963fSmrg      wrappers_required=yes
800849dc963fSmrg      case $host in
80097aa89044Smrg      *cegcc* | *mingw32ce*)
80107aa89044Smrg        # Disable wrappers for cegcc and mingw32ce hosts, we are cross compiling anyway.
80117aa89044Smrg        wrappers_required=no
80127aa89044Smrg        ;;
801349dc963fSmrg      *cygwin* | *mingw* )
801449dc963fSmrg        if test "$build_libtool_libs" != yes; then
801549dc963fSmrg          wrappers_required=no
801649dc963fSmrg        fi
801749dc963fSmrg        ;;
801849dc963fSmrg      *)
801949dc963fSmrg        if test "$need_relink" = no || test "$build_libtool_libs" != yes; then
802049dc963fSmrg          wrappers_required=no
802149dc963fSmrg        fi
802249dc963fSmrg        ;;
802349dc963fSmrg      esac
802449dc963fSmrg      if test "$wrappers_required" = no; then
802549dc963fSmrg	# Replace the output file specification.
80267aa89044Smrg	compile_command=`$ECHO "$compile_command" | $SED 's%@OUTPUT@%'"$output"'%g'`
802749dc963fSmrg	link_command="$compile_command$compile_rpath"
80284b0ead49Smrg
802949dc963fSmrg	# We have no uninstalled library dependencies, so finalize right now.
803049dc963fSmrg	exit_status=0
803149dc963fSmrg	func_show_eval "$link_command" 'exit_status=$?'
80324b0ead49Smrg
803349dc963fSmrg	# Delete the generated files.
803449dc963fSmrg	if test -f "$output_objdir/${outputname}S.${objext}"; then
803549dc963fSmrg	  func_show_eval '$RM "$output_objdir/${outputname}S.${objext}"'
80364b0ead49Smrg	fi
80374b0ead49Smrg
803849dc963fSmrg	exit $exit_status
803949dc963fSmrg      fi
80404b0ead49Smrg
804149dc963fSmrg      if test -n "$compile_shlibpath$finalize_shlibpath"; then
804249dc963fSmrg	compile_command="$shlibpath_var=\"$compile_shlibpath$finalize_shlibpath\$$shlibpath_var\" $compile_command"
804349dc963fSmrg      fi
804449dc963fSmrg      if test -n "$finalize_shlibpath"; then
804549dc963fSmrg	finalize_command="$shlibpath_var=\"$finalize_shlibpath\$$shlibpath_var\" $finalize_command"
804649dc963fSmrg      fi
80474b0ead49Smrg
804849dc963fSmrg      compile_var=
804949dc963fSmrg      finalize_var=
805049dc963fSmrg      if test -n "$runpath_var"; then
805149dc963fSmrg	if test -n "$perm_rpath"; then
805249dc963fSmrg	  # We should set the runpath_var.
805349dc963fSmrg	  rpath=
805449dc963fSmrg	  for dir in $perm_rpath; do
805549dc963fSmrg	    rpath="$rpath$dir:"
805649dc963fSmrg	  done
805749dc963fSmrg	  compile_var="$runpath_var=\"$rpath\$$runpath_var\" "
80584b0ead49Smrg	fi
805949dc963fSmrg	if test -n "$finalize_perm_rpath"; then
806049dc963fSmrg	  # We should set the runpath_var.
806149dc963fSmrg	  rpath=
806249dc963fSmrg	  for dir in $finalize_perm_rpath; do
806349dc963fSmrg	    rpath="$rpath$dir:"
806449dc963fSmrg	  done
806549dc963fSmrg	  finalize_var="$runpath_var=\"$rpath\$$runpath_var\" "
80664b0ead49Smrg	fi
806749dc963fSmrg      fi
80684b0ead49Smrg
806949dc963fSmrg      if test "$no_install" = yes; then
807049dc963fSmrg	# We don't need to create a wrapper script.
807149dc963fSmrg	link_command="$compile_var$compile_command$compile_rpath"
807249dc963fSmrg	# Replace the output file specification.
80737aa89044Smrg	link_command=`$ECHO "$link_command" | $SED 's%@OUTPUT@%'"$output"'%g'`
807449dc963fSmrg	# Delete the old output file.
807549dc963fSmrg	$opt_dry_run || $RM $output
807649dc963fSmrg	# Link the executable and exit
807749dc963fSmrg	func_show_eval "$link_command" 'exit $?'
80784b0ead49Smrg	exit $EXIT_SUCCESS
807949dc963fSmrg      fi
80804b0ead49Smrg
808149dc963fSmrg      if test "$hardcode_action" = relink; then
808249dc963fSmrg	# Fast installation is not supported
808349dc963fSmrg	link_command="$compile_var$compile_command$compile_rpath"
808449dc963fSmrg	relink_command="$finalize_var$finalize_command$finalize_rpath"
808549dc963fSmrg
808649dc963fSmrg	func_warning "this platform does not like uninstalled shared libraries"
808749dc963fSmrg	func_warning "\`$output' will be relinked during installation"
808849dc963fSmrg      else
808949dc963fSmrg	if test "$fast_install" != no; then
809049dc963fSmrg	  link_command="$finalize_var$compile_command$finalize_rpath"
809149dc963fSmrg	  if test "$fast_install" = yes; then
80927aa89044Smrg	    relink_command=`$ECHO "$compile_var$compile_command$compile_rpath" | $SED 's%@OUTPUT@%\$progdir/\$file%g'`
809349dc963fSmrg	  else
809449dc963fSmrg	    # fast_install is set to needless
809549dc963fSmrg	    relink_command=
809649dc963fSmrg	  fi
80974b0ead49Smrg	else
809849dc963fSmrg	  link_command="$compile_var$compile_command$compile_rpath"
809949dc963fSmrg	  relink_command="$finalize_var$finalize_command$finalize_rpath"
81004b0ead49Smrg	fi
810149dc963fSmrg      fi
81024b0ead49Smrg
810349dc963fSmrg      # Replace the output file specification.
81047aa89044Smrg      link_command=`$ECHO "$link_command" | $SED 's%@OUTPUT@%'"$output_objdir/$outputname"'%g'`
81054b0ead49Smrg
810649dc963fSmrg      # Delete the old output files.
810749dc963fSmrg      $opt_dry_run || $RM $output $output_objdir/$outputname $output_objdir/lt-$outputname
81084b0ead49Smrg
810949dc963fSmrg      func_show_eval "$link_command" 'exit $?'
81104b0ead49Smrg
811149dc963fSmrg      # Now create the wrapper script.
811249dc963fSmrg      func_verbose "creating $output"
81134b0ead49Smrg
811449dc963fSmrg      # Quote the relink command for shipping.
811549dc963fSmrg      if test -n "$relink_command"; then
811649dc963fSmrg	# Preserve any variables that may affect compiler behavior
811749dc963fSmrg	for var in $variables_saved_for_relink; do
811849dc963fSmrg	  if eval test -z \"\${$var+set}\"; then
811949dc963fSmrg	    relink_command="{ test -z \"\${$var+set}\" || $lt_unset $var || { $var=; export $var; }; }; $relink_command"
812049dc963fSmrg	  elif eval var_value=\$$var; test -z "$var_value"; then
812149dc963fSmrg	    relink_command="$var=; export $var; $relink_command"
81224b0ead49Smrg	  else
812349dc963fSmrg	    func_quote_for_eval "$var_value"
812449dc963fSmrg	    relink_command="$var=$func_quote_for_eval_result; export $var; $relink_command"
81254b0ead49Smrg	  fi
812649dc963fSmrg	done
812749dc963fSmrg	relink_command="(cd `pwd`; $relink_command)"
81287aa89044Smrg	relink_command=`$ECHO "$relink_command" | $SED "$sed_quote_subst"`
812949dc963fSmrg      fi
813049dc963fSmrg
813149dc963fSmrg      # Only actually do things if not in dry run mode.
813249dc963fSmrg      $opt_dry_run || {
813349dc963fSmrg	# win32 will think the script is a binary if it has
813449dc963fSmrg	# a .exe suffix, so we strip it off here.
813549dc963fSmrg	case $output in
813649dc963fSmrg	  *.exe) func_stripname '' '.exe' "$output"
813749dc963fSmrg	         output=$func_stripname_result ;;
813849dc963fSmrg	esac
813949dc963fSmrg	# test for cygwin because mv fails w/o .exe extensions
814049dc963fSmrg	case $host in
814149dc963fSmrg	  *cygwin*)
814249dc963fSmrg	    exeext=.exe
814349dc963fSmrg	    func_stripname '' '.exe' "$outputname"
814449dc963fSmrg	    outputname=$func_stripname_result ;;
814549dc963fSmrg	  *) exeext= ;;
81464b0ead49Smrg	esac
814749dc963fSmrg	case $host in
814849dc963fSmrg	  *cygwin* | *mingw* )
814949dc963fSmrg	    func_dirname_and_basename "$output" "" "."
815049dc963fSmrg	    output_name=$func_basename_result
815149dc963fSmrg	    output_path=$func_dirname_result
815249dc963fSmrg	    cwrappersource="$output_path/$objdir/lt-$output_name.c"
815349dc963fSmrg	    cwrapper="$output_path/$output_name.exe"
815449dc963fSmrg	    $RM $cwrappersource $cwrapper
815549dc963fSmrg	    trap "$RM $cwrappersource $cwrapper; exit $EXIT_FAILURE" 1 2 15
815649dc963fSmrg
815749dc963fSmrg	    func_emit_cwrapperexe_src > $cwrappersource
815849dc963fSmrg
815949dc963fSmrg	    # The wrapper executable is built using the $host compiler,
816049dc963fSmrg	    # because it contains $host paths and files. If cross-
816149dc963fSmrg	    # compiling, it, like the target executable, must be
816249dc963fSmrg	    # executed on the $host or under an emulation environment.
816349dc963fSmrg	    $opt_dry_run || {
816449dc963fSmrg	      $LTCC $LTCFLAGS -o $cwrapper $cwrappersource
816549dc963fSmrg	      $STRIP $cwrapper
816649dc963fSmrg	    }
81674b0ead49Smrg
816849dc963fSmrg	    # Now, create the wrapper script for func_source use:
816949dc963fSmrg	    func_ltwrapper_scriptname $cwrapper
817049dc963fSmrg	    $RM $func_ltwrapper_scriptname_result
817149dc963fSmrg	    trap "$RM $func_ltwrapper_scriptname_result; exit $EXIT_FAILURE" 1 2 15
817249dc963fSmrg	    $opt_dry_run || {
817349dc963fSmrg	      # note: this script will not be executed, so do not chmod.
817449dc963fSmrg	      if test "x$build" = "x$host" ; then
817549dc963fSmrg		$cwrapper --lt-dump-script > $func_ltwrapper_scriptname_result
817649dc963fSmrg	      else
817749dc963fSmrg		func_emit_wrapper no > $func_ltwrapper_scriptname_result
817849dc963fSmrg	      fi
817949dc963fSmrg	    }
818049dc963fSmrg	  ;;
818149dc963fSmrg	  * )
818249dc963fSmrg	    $RM $output
818349dc963fSmrg	    trap "$RM $output; exit $EXIT_FAILURE" 1 2 15
81844b0ead49Smrg
818549dc963fSmrg	    func_emit_wrapper no > $output
818649dc963fSmrg	    chmod +x $output
818749dc963fSmrg	  ;;
818849dc963fSmrg	esac
818949dc963fSmrg      }
819049dc963fSmrg      exit $EXIT_SUCCESS
819149dc963fSmrg      ;;
819249dc963fSmrg    esac
81934b0ead49Smrg
819449dc963fSmrg    # See if we need to build an old-fashioned archive.
819549dc963fSmrg    for oldlib in $oldlibs; do
81964b0ead49Smrg
819749dc963fSmrg      if test "$build_libtool_libs" = convenience; then
819849dc963fSmrg	oldobjs="$libobjs_save $symfileobj"
819949dc963fSmrg	addlibs="$convenience"
820049dc963fSmrg	build_libtool_libs=no
820149dc963fSmrg      else
820249dc963fSmrg	if test "$build_libtool_libs" = module; then
820349dc963fSmrg	  oldobjs="$libobjs_save"
820449dc963fSmrg	  build_libtool_libs=no
820549dc963fSmrg	else
820649dc963fSmrg	  oldobjs="$old_deplibs $non_pic_objects"
820749dc963fSmrg	  if test "$preload" = yes && test -f "$symfileobj"; then
820849dc963fSmrg	    oldobjs="$oldobjs $symfileobj"
820949dc963fSmrg	  fi
821049dc963fSmrg	fi
821149dc963fSmrg	addlibs="$old_convenience"
82124b0ead49Smrg      fi
82134b0ead49Smrg
821449dc963fSmrg      if test -n "$addlibs"; then
821549dc963fSmrg	gentop="$output_objdir/${outputname}x"
821649dc963fSmrg	generated="$generated $gentop"
82174b0ead49Smrg
821849dc963fSmrg	func_extract_archives $gentop $addlibs
821949dc963fSmrg	oldobjs="$oldobjs $func_extract_archives_result"
822049dc963fSmrg      fi
82214b0ead49Smrg
822249dc963fSmrg      # Do each command in the archive commands.
822349dc963fSmrg      if test -n "$old_archive_from_new_cmds" && test "$build_libtool_libs" = yes; then
822449dc963fSmrg	cmds=$old_archive_from_new_cmds
822549dc963fSmrg      else
82264b0ead49Smrg
822749dc963fSmrg	# Add any objects from preloaded convenience libraries
822849dc963fSmrg	if test -n "$dlprefiles"; then
822949dc963fSmrg	  gentop="$output_objdir/${outputname}x"
823049dc963fSmrg	  generated="$generated $gentop"
82314b0ead49Smrg
823249dc963fSmrg	  func_extract_archives $gentop $dlprefiles
823349dc963fSmrg	  oldobjs="$oldobjs $func_extract_archives_result"
823449dc963fSmrg	fi
82354b0ead49Smrg
823649dc963fSmrg	# POSIX demands no paths to be encoded in archives.  We have
823749dc963fSmrg	# to avoid creating archives with duplicate basenames if we
823849dc963fSmrg	# might have to extract them afterwards, e.g., when creating a
823949dc963fSmrg	# static archive out of a convenience library, or when linking
824049dc963fSmrg	# the entirety of a libtool archive into another (currently
824149dc963fSmrg	# not supported by libtool).
824249dc963fSmrg	if (for obj in $oldobjs
824349dc963fSmrg	    do
824449dc963fSmrg	      func_basename "$obj"
824549dc963fSmrg	      $ECHO "$func_basename_result"
824649dc963fSmrg	    done | sort | sort -uc >/dev/null 2>&1); then
824749dc963fSmrg	  :
824849dc963fSmrg	else
82497aa89044Smrg	  echo "copying selected object files to avoid basename conflicts..."
825049dc963fSmrg	  gentop="$output_objdir/${outputname}x"
825149dc963fSmrg	  generated="$generated $gentop"
825249dc963fSmrg	  func_mkdir_p "$gentop"
825349dc963fSmrg	  save_oldobjs=$oldobjs
825449dc963fSmrg	  oldobjs=
825549dc963fSmrg	  counter=1
825649dc963fSmrg	  for obj in $save_oldobjs
825749dc963fSmrg	  do
825849dc963fSmrg	    func_basename "$obj"
825949dc963fSmrg	    objbase="$func_basename_result"
826049dc963fSmrg	    case " $oldobjs " in
826149dc963fSmrg	    " ") oldobjs=$obj ;;
826249dc963fSmrg	    *[\ /]"$objbase "*)
826349dc963fSmrg	      while :; do
826449dc963fSmrg		# Make sure we don't pick an alternate name that also
826549dc963fSmrg		# overlaps.
826649dc963fSmrg		newobj=lt$counter-$objbase
826749dc963fSmrg		func_arith $counter + 1
826849dc963fSmrg		counter=$func_arith_result
826949dc963fSmrg		case " $oldobjs " in
827049dc963fSmrg		*[\ /]"$newobj "*) ;;
827149dc963fSmrg		*) if test ! -f "$gentop/$newobj"; then break; fi ;;
827249dc963fSmrg		esac
827349dc963fSmrg	      done
827449dc963fSmrg	      func_show_eval "ln $obj $gentop/$newobj || cp $obj $gentop/$newobj"
827549dc963fSmrg	      oldobjs="$oldobjs $gentop/$newobj"
827649dc963fSmrg	      ;;
827749dc963fSmrg	    *) oldobjs="$oldobjs $obj" ;;
827849dc963fSmrg	    esac
82794b0ead49Smrg	  done
82804b0ead49Smrg	fi
828149dc963fSmrg	eval cmds=\"$old_archive_cmds\"
82824b0ead49Smrg
828349dc963fSmrg	func_len " $cmds"
828449dc963fSmrg	len=$func_len_result
828549dc963fSmrg	if test "$len" -lt "$max_cmd_len" || test "$max_cmd_len" -le -1; then
828649dc963fSmrg	  cmds=$old_archive_cmds
828749dc963fSmrg	else
828849dc963fSmrg	  # the command line is too long to link in one step, link in parts
828949dc963fSmrg	  func_verbose "using piecewise archive linking..."
829049dc963fSmrg	  save_RANLIB=$RANLIB
829149dc963fSmrg	  RANLIB=:
829249dc963fSmrg	  objlist=
829349dc963fSmrg	  concat_cmds=
829449dc963fSmrg	  save_oldobjs=$oldobjs
829549dc963fSmrg	  oldobjs=
829649dc963fSmrg	  # Is there a better way of finding the last object in the list?
829749dc963fSmrg	  for obj in $save_oldobjs
829849dc963fSmrg	  do
829949dc963fSmrg	    last_oldobj=$obj
830049dc963fSmrg	  done
830149dc963fSmrg	  eval test_cmds=\"$old_archive_cmds\"
830249dc963fSmrg	  func_len " $test_cmds"
830349dc963fSmrg	  len0=$func_len_result
830449dc963fSmrg	  len=$len0
830549dc963fSmrg	  for obj in $save_oldobjs
830649dc963fSmrg	  do
830749dc963fSmrg	    func_len " $obj"
830849dc963fSmrg	    func_arith $len + $func_len_result
830949dc963fSmrg	    len=$func_arith_result
831049dc963fSmrg	    func_append objlist " $obj"
831149dc963fSmrg	    if test "$len" -lt "$max_cmd_len"; then
831249dc963fSmrg	      :
831349dc963fSmrg	    else
831449dc963fSmrg	      # the above command should be used before it gets too long
831549dc963fSmrg	      oldobjs=$objlist
831649dc963fSmrg	      if test "$obj" = "$last_oldobj" ; then
831749dc963fSmrg		RANLIB=$save_RANLIB
831849dc963fSmrg	      fi
831949dc963fSmrg	      test -z "$concat_cmds" || concat_cmds=$concat_cmds~
832049dc963fSmrg	      eval concat_cmds=\"\${concat_cmds}$old_archive_cmds\"
832149dc963fSmrg	      objlist=
832249dc963fSmrg	      len=$len0
832349dc963fSmrg	    fi
832449dc963fSmrg	  done
832549dc963fSmrg	  RANLIB=$save_RANLIB
832649dc963fSmrg	  oldobjs=$objlist
832749dc963fSmrg	  if test "X$oldobjs" = "X" ; then
832849dc963fSmrg	    eval cmds=\"\$concat_cmds\"
832949dc963fSmrg	  else
833049dc963fSmrg	    eval cmds=\"\$concat_cmds~\$old_archive_cmds\"
833149dc963fSmrg	  fi
833249dc963fSmrg	fi
833349dc963fSmrg      fi
833449dc963fSmrg      func_execute_cmds "$cmds" 'exit $?'
83354b0ead49Smrg    done
83364b0ead49Smrg
833749dc963fSmrg    test -n "$generated" && \
833849dc963fSmrg      func_show_eval "${RM}r$generated"
83394b0ead49Smrg
834049dc963fSmrg    # Now create the libtool archive.
834149dc963fSmrg    case $output in
834249dc963fSmrg    *.la)
834349dc963fSmrg      old_library=
834449dc963fSmrg      test "$build_old_libs" = yes && old_library="$libname.$libext"
834549dc963fSmrg      func_verbose "creating $output"
83464b0ead49Smrg
834749dc963fSmrg      # Preserve any variables that may affect compiler behavior
834849dc963fSmrg      for var in $variables_saved_for_relink; do
834949dc963fSmrg	if eval test -z \"\${$var+set}\"; then
835049dc963fSmrg	  relink_command="{ test -z \"\${$var+set}\" || $lt_unset $var || { $var=; export $var; }; }; $relink_command"
835149dc963fSmrg	elif eval var_value=\$$var; test -z "$var_value"; then
835249dc963fSmrg	  relink_command="$var=; export $var; $relink_command"
83534b0ead49Smrg	else
835449dc963fSmrg	  func_quote_for_eval "$var_value"
835549dc963fSmrg	  relink_command="$var=$func_quote_for_eval_result; export $var; $relink_command"
83564b0ead49Smrg	fi
835749dc963fSmrg      done
835849dc963fSmrg      # Quote the link command for shipping.
835949dc963fSmrg      relink_command="(cd `pwd`; $SHELL $progpath $preserve_args --mode=relink $libtool_args @inst_prefix_dir@)"
83607aa89044Smrg      relink_command=`$ECHO "$relink_command" | $SED "$sed_quote_subst"`
836149dc963fSmrg      if test "$hardcode_automatic" = yes ; then
836249dc963fSmrg	relink_command=
836349dc963fSmrg      fi
83644b0ead49Smrg
836549dc963fSmrg      # Only create the output if not a dry run.
836649dc963fSmrg      $opt_dry_run || {
836749dc963fSmrg	for installed in no yes; do
836849dc963fSmrg	  if test "$installed" = yes; then
836949dc963fSmrg	    if test -z "$install_libdir"; then
837049dc963fSmrg	      break
837149dc963fSmrg	    fi
837249dc963fSmrg	    output="$output_objdir/$outputname"i
837349dc963fSmrg	    # Replace all uninstalled libtool libraries with the installed ones
837449dc963fSmrg	    newdependency_libs=
837549dc963fSmrg	    for deplib in $dependency_libs; do
837649dc963fSmrg	      case $deplib in
837749dc963fSmrg	      *.la)
837849dc963fSmrg		func_basename "$deplib"
837949dc963fSmrg		name="$func_basename_result"
838049dc963fSmrg		eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $deplib`
838149dc963fSmrg		test -z "$libdir" && \
838249dc963fSmrg		  func_fatal_error "\`$deplib' is not a valid libtool archive"
838349dc963fSmrg		newdependency_libs="$newdependency_libs $libdir/$name"
838449dc963fSmrg		;;
838549dc963fSmrg	      *) newdependency_libs="$newdependency_libs $deplib" ;;
838649dc963fSmrg	      esac
838749dc963fSmrg	    done
838849dc963fSmrg	    dependency_libs="$newdependency_libs"
838949dc963fSmrg	    newdlfiles=
839049dc963fSmrg
839149dc963fSmrg	    for lib in $dlfiles; do
839249dc963fSmrg	      case $lib in
839349dc963fSmrg	      *.la)
839449dc963fSmrg	        func_basename "$lib"
839549dc963fSmrg		name="$func_basename_result"
839649dc963fSmrg		eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $lib`
839749dc963fSmrg		test -z "$libdir" && \
839849dc963fSmrg		  func_fatal_error "\`$lib' is not a valid libtool archive"
839949dc963fSmrg		newdlfiles="$newdlfiles $libdir/$name"
840049dc963fSmrg		;;
840149dc963fSmrg	      *) newdlfiles="$newdlfiles $lib" ;;
840249dc963fSmrg	      esac
840349dc963fSmrg	    done
840449dc963fSmrg	    dlfiles="$newdlfiles"
840549dc963fSmrg	    newdlprefiles=
840649dc963fSmrg	    for lib in $dlprefiles; do
840749dc963fSmrg	      case $lib in
840849dc963fSmrg	      *.la)
840949dc963fSmrg		# Only pass preopened files to the pseudo-archive (for
841049dc963fSmrg		# eventual linking with the app. that links it) if we
841149dc963fSmrg		# didn't already link the preopened objects directly into
841249dc963fSmrg		# the library:
841349dc963fSmrg		func_basename "$lib"
841449dc963fSmrg		name="$func_basename_result"
841549dc963fSmrg		eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $lib`
841649dc963fSmrg		test -z "$libdir" && \
841749dc963fSmrg		  func_fatal_error "\`$lib' is not a valid libtool archive"
841849dc963fSmrg		newdlprefiles="$newdlprefiles $libdir/$name"
841949dc963fSmrg		;;
842049dc963fSmrg	      esac
842149dc963fSmrg	    done
842249dc963fSmrg	    dlprefiles="$newdlprefiles"
842349dc963fSmrg	  else
842449dc963fSmrg	    newdlfiles=
842549dc963fSmrg	    for lib in $dlfiles; do
842649dc963fSmrg	      case $lib in
842749dc963fSmrg		[\\/]* | [A-Za-z]:[\\/]*) abs="$lib" ;;
842849dc963fSmrg		*) abs=`pwd`"/$lib" ;;
842949dc963fSmrg	      esac
843049dc963fSmrg	      newdlfiles="$newdlfiles $abs"
843149dc963fSmrg	    done
843249dc963fSmrg	    dlfiles="$newdlfiles"
843349dc963fSmrg	    newdlprefiles=
843449dc963fSmrg	    for lib in $dlprefiles; do
843549dc963fSmrg	      case $lib in
843649dc963fSmrg		[\\/]* | [A-Za-z]:[\\/]*) abs="$lib" ;;
843749dc963fSmrg		*) abs=`pwd`"/$lib" ;;
843849dc963fSmrg	      esac
843949dc963fSmrg	      newdlprefiles="$newdlprefiles $abs"
844049dc963fSmrg	    done
844149dc963fSmrg	    dlprefiles="$newdlprefiles"
844249dc963fSmrg	  fi
844349dc963fSmrg	  $RM $output
844449dc963fSmrg	  # place dlname in correct position for cygwin
84457aa89044Smrg	  # In fact, it would be nice if we could use this code for all target
84467aa89044Smrg	  # systems that can't hard-code library paths into their executables
84477aa89044Smrg	  # and that have no shared library path variable independent of PATH,
84487aa89044Smrg	  # but it turns out we can't easily determine that from inspecting
84497aa89044Smrg	  # libtool variables, so we have to hard-code the OSs to which it
84507aa89044Smrg	  # applies here; at the moment, that means platforms that use the PE
84517aa89044Smrg	  # object format with DLL files.  See the long comment at the top of
84527aa89044Smrg	  # tests/bindir.at for full details.
845349dc963fSmrg	  tdlname=$dlname
845449dc963fSmrg	  case $host,$output,$installed,$module,$dlname in
84557aa89044Smrg	    *cygwin*,*lai,yes,no,*.dll | *mingw*,*lai,yes,no,*.dll | *cegcc*,*lai,yes,no,*.dll)
84567aa89044Smrg	      # If a -bindir argument was supplied, place the dll there.
84577aa89044Smrg	      if test "x$bindir" != x ;
84587aa89044Smrg	      then
84597aa89044Smrg		func_relative_path "$install_libdir" "$bindir"
84607aa89044Smrg		tdlname=$func_relative_path_result$dlname
84617aa89044Smrg	      else
84627aa89044Smrg		# Otherwise fall back on heuristic.
84637aa89044Smrg		tdlname=../bin/$dlname
84647aa89044Smrg	      fi
84657aa89044Smrg	      ;;
846649dc963fSmrg	  esac
846749dc963fSmrg	  $ECHO > $output "\
846849dc963fSmrg# $outputname - a libtool library file
846949dc963fSmrg# Generated by $PROGRAM (GNU $PACKAGE$TIMESTAMP) $VERSION
847049dc963fSmrg#
847149dc963fSmrg# Please DO NOT delete this file!
847249dc963fSmrg# It is necessary for linking the library.
84734b0ead49Smrg
847449dc963fSmrg# The name that we can dlopen(3).
847549dc963fSmrgdlname='$tdlname'
84764b0ead49Smrg
847749dc963fSmrg# Names of this library.
847849dc963fSmrglibrary_names='$library_names'
84794b0ead49Smrg
848049dc963fSmrg# The name of the static archive.
848149dc963fSmrgold_library='$old_library'
84824b0ead49Smrg
848349dc963fSmrg# Linker flags that can not go in dependency_libs.
848449dc963fSmrginherited_linker_flags='$new_inherited_linker_flags'
84854b0ead49Smrg
848649dc963fSmrg# Libraries that this one depends upon.
848749dc963fSmrgdependency_libs='$dependency_libs'
84884b0ead49Smrg
848949dc963fSmrg# Names of additional weak libraries provided by this library
849049dc963fSmrgweak_library_names='$weak_libs'
84914b0ead49Smrg
849249dc963fSmrg# Version information for $libname.
849349dc963fSmrgcurrent=$current
849449dc963fSmrgage=$age
849549dc963fSmrgrevision=$revision
84964b0ead49Smrg
849749dc963fSmrg# Is this an already installed library?
849849dc963fSmrginstalled=$installed
84994b0ead49Smrg
850049dc963fSmrg# Should we warn about portability when linking against -modules?
850149dc963fSmrgshouldnotlink=$module
85024b0ead49Smrg
850349dc963fSmrg# Files to dlopen/dlpreopen
850449dc963fSmrgdlopen='$dlfiles'
850549dc963fSmrgdlpreopen='$dlprefiles'
85064b0ead49Smrg
850749dc963fSmrg# Directory that this library needs to be installed in:
850849dc963fSmrglibdir='$install_libdir'"
850949dc963fSmrg	  if test "$installed" = no && test "$need_relink" = yes; then
851049dc963fSmrg	    $ECHO >> $output "\
851149dc963fSmrgrelink_command=\"$relink_command\""
851249dc963fSmrg	  fi
851349dc963fSmrg	done
851449dc963fSmrg      }
85154b0ead49Smrg
851649dc963fSmrg      # Do a symbolic link so that the libtool archive can be found in
851749dc963fSmrg      # LD_LIBRARY_PATH before the program is installed.
851849dc963fSmrg      func_show_eval '( cd "$output_objdir" && $RM "$outputname" && $LN_S "../$outputname" "$outputname" )' 'exit $?'
851949dc963fSmrg      ;;
852049dc963fSmrg    esac
852149dc963fSmrg    exit $EXIT_SUCCESS
852249dc963fSmrg}
85234b0ead49Smrg
852449dc963fSmrg{ test "$mode" = link || test "$mode" = relink; } &&
852549dc963fSmrg    func_mode_link ${1+"$@"}
85264b0ead49Smrg
85274b0ead49Smrg
852849dc963fSmrg# func_mode_uninstall arg...
852949dc963fSmrgfunc_mode_uninstall ()
853049dc963fSmrg{
853149dc963fSmrg    $opt_debug
853249dc963fSmrg    RM="$nonopt"
85334b0ead49Smrg    files=
85344b0ead49Smrg    rmforce=
85354b0ead49Smrg    exit_status=0
85364b0ead49Smrg
85374b0ead49Smrg    # This variable tells wrapper scripts just to set variables rather
85384b0ead49Smrg    # than running their programs.
85394b0ead49Smrg    libtool_install_magic="$magic"
85404b0ead49Smrg
85414b0ead49Smrg    for arg
85424b0ead49Smrg    do
85434b0ead49Smrg      case $arg in
854449dc963fSmrg      -f) RM="$RM $arg"; rmforce=yes ;;
854549dc963fSmrg      -*) RM="$RM $arg" ;;
85464b0ead49Smrg      *) files="$files $arg" ;;
85474b0ead49Smrg      esac
85484b0ead49Smrg    done
85494b0ead49Smrg
855049dc963fSmrg    test -z "$RM" && \
855149dc963fSmrg      func_fatal_help "you must specify an RM program"
85524b0ead49Smrg
85534b0ead49Smrg    rmdirs=
85544b0ead49Smrg
85554b0ead49Smrg    origobjdir="$objdir"
85564b0ead49Smrg    for file in $files; do
855749dc963fSmrg      func_dirname "$file" "" "."
855849dc963fSmrg      dir="$func_dirname_result"
855949dc963fSmrg      if test "X$dir" = X.; then
85604b0ead49Smrg	objdir="$origobjdir"
85614b0ead49Smrg      else
85624b0ead49Smrg	objdir="$dir/$origobjdir"
85634b0ead49Smrg      fi
856449dc963fSmrg      func_basename "$file"
856549dc963fSmrg      name="$func_basename_result"
85664b0ead49Smrg      test "$mode" = uninstall && objdir="$dir"
85674b0ead49Smrg
85684b0ead49Smrg      # Remember objdir for removal later, being careful to avoid duplicates
85694b0ead49Smrg      if test "$mode" = clean; then
85704b0ead49Smrg	case " $rmdirs " in
85714b0ead49Smrg	  *" $objdir "*) ;;
85724b0ead49Smrg	  *) rmdirs="$rmdirs $objdir" ;;
85734b0ead49Smrg	esac
85744b0ead49Smrg      fi
85754b0ead49Smrg
85764b0ead49Smrg      # Don't error if the file doesn't exist and rm -f was used.
857749dc963fSmrg      if { test -L "$file"; } >/dev/null 2>&1 ||
857849dc963fSmrg	 { test -h "$file"; } >/dev/null 2>&1 ||
857949dc963fSmrg	 test -f "$file"; then
85804b0ead49Smrg	:
85814b0ead49Smrg      elif test -d "$file"; then
85824b0ead49Smrg	exit_status=1
85834b0ead49Smrg	continue
85844b0ead49Smrg      elif test "$rmforce" = yes; then
85854b0ead49Smrg	continue
85864b0ead49Smrg      fi
85874b0ead49Smrg
85884b0ead49Smrg      rmfiles="$file"
85894b0ead49Smrg
85904b0ead49Smrg      case $name in
85914b0ead49Smrg      *.la)
85924b0ead49Smrg	# Possibly a libtool archive, so verify it.
859349dc963fSmrg	if func_lalib_p "$file"; then
859449dc963fSmrg	  func_source $dir/$name
85954b0ead49Smrg
85964b0ead49Smrg	  # Delete the libtool libraries and symlinks.
85974b0ead49Smrg	  for n in $library_names; do
85984b0ead49Smrg	    rmfiles="$rmfiles $objdir/$n"
85994b0ead49Smrg	  done
86004b0ead49Smrg	  test -n "$old_library" && rmfiles="$rmfiles $objdir/$old_library"
86014b0ead49Smrg
86024b0ead49Smrg	  case "$mode" in
86034b0ead49Smrg	  clean)
86044b0ead49Smrg	    case "  $library_names " in
86054b0ead49Smrg	    # "  " in the beginning catches empty $dlname
86064b0ead49Smrg	    *" $dlname "*) ;;
86074b0ead49Smrg	    *) rmfiles="$rmfiles $objdir/$dlname" ;;
86084b0ead49Smrg	    esac
860949dc963fSmrg	    test -n "$libdir" && rmfiles="$rmfiles $objdir/$name $objdir/${name}i"
86104b0ead49Smrg	    ;;
86114b0ead49Smrg	  uninstall)
86124b0ead49Smrg	    if test -n "$library_names"; then
86134b0ead49Smrg	      # Do each command in the postuninstall commands.
861449dc963fSmrg	      func_execute_cmds "$postuninstall_cmds" 'test "$rmforce" = yes || exit_status=1'
86154b0ead49Smrg	    fi
86164b0ead49Smrg
86174b0ead49Smrg	    if test -n "$old_library"; then
86184b0ead49Smrg	      # Do each command in the old_postuninstall commands.
861949dc963fSmrg	      func_execute_cmds "$old_postuninstall_cmds" 'test "$rmforce" = yes || exit_status=1'
86204b0ead49Smrg	    fi
86214b0ead49Smrg	    # FIXME: should reinstall the best remaining shared library.
86224b0ead49Smrg	    ;;
86234b0ead49Smrg	  esac
86244b0ead49Smrg	fi
86254b0ead49Smrg	;;
86264b0ead49Smrg
86274b0ead49Smrg      *.lo)
86284b0ead49Smrg	# Possibly a libtool object, so verify it.
862949dc963fSmrg	if func_lalib_p "$file"; then
86304b0ead49Smrg
86314b0ead49Smrg	  # Read the .lo file
863249dc963fSmrg	  func_source $dir/$name
86334b0ead49Smrg
86344b0ead49Smrg	  # Add PIC object to the list of files to remove.
863549dc963fSmrg	  if test -n "$pic_object" &&
863649dc963fSmrg	     test "$pic_object" != none; then
86374b0ead49Smrg	    rmfiles="$rmfiles $dir/$pic_object"
86384b0ead49Smrg	  fi
86394b0ead49Smrg
86404b0ead49Smrg	  # Add non-PIC object to the list of files to remove.
864149dc963fSmrg	  if test -n "$non_pic_object" &&
864249dc963fSmrg	     test "$non_pic_object" != none; then
86434b0ead49Smrg	    rmfiles="$rmfiles $dir/$non_pic_object"
86444b0ead49Smrg	  fi
86454b0ead49Smrg	fi
86464b0ead49Smrg	;;
86474b0ead49Smrg
86484b0ead49Smrg      *)
86494b0ead49Smrg	if test "$mode" = clean ; then
86504b0ead49Smrg	  noexename=$name
86514b0ead49Smrg	  case $file in
86524b0ead49Smrg	  *.exe)
865349dc963fSmrg	    func_stripname '' '.exe' "$file"
865449dc963fSmrg	    file=$func_stripname_result
865549dc963fSmrg	    func_stripname '' '.exe' "$name"
865649dc963fSmrg	    noexename=$func_stripname_result
86574b0ead49Smrg	    # $file with .exe has already been added to rmfiles,
86584b0ead49Smrg	    # add $file without .exe
86594b0ead49Smrg	    rmfiles="$rmfiles $file"
86604b0ead49Smrg	    ;;
86614b0ead49Smrg	  esac
86624b0ead49Smrg	  # Do a test to see if this is a libtool program.
866349dc963fSmrg	  if func_ltwrapper_p "$file"; then
866449dc963fSmrg	    if func_ltwrapper_executable_p "$file"; then
866549dc963fSmrg	      func_ltwrapper_scriptname "$file"
866649dc963fSmrg	      relink_command=
866749dc963fSmrg	      func_source $func_ltwrapper_scriptname_result
866849dc963fSmrg	      rmfiles="$rmfiles $func_ltwrapper_scriptname_result"
866949dc963fSmrg	    else
867049dc963fSmrg	      relink_command=
867149dc963fSmrg	      func_source $dir/$noexename
867249dc963fSmrg	    fi
86734b0ead49Smrg
86744b0ead49Smrg	    # note $name still contains .exe if it was in $file originally
86754b0ead49Smrg	    # as does the version of $file that was added into $rmfiles
86764b0ead49Smrg	    rmfiles="$rmfiles $objdir/$name $objdir/${name}S.${objext}"
86774b0ead49Smrg	    if test "$fast_install" = yes && test -n "$relink_command"; then
86784b0ead49Smrg	      rmfiles="$rmfiles $objdir/lt-$name"
86794b0ead49Smrg	    fi
86804b0ead49Smrg	    if test "X$noexename" != "X$name" ; then
86814b0ead49Smrg	      rmfiles="$rmfiles $objdir/lt-${noexename}.c"
86824b0ead49Smrg	    fi
86834b0ead49Smrg	  fi
86844b0ead49Smrg	fi
86854b0ead49Smrg	;;
86864b0ead49Smrg      esac
868749dc963fSmrg      func_show_eval "$RM $rmfiles" 'exit_status=1'
86884b0ead49Smrg    done
86894b0ead49Smrg    objdir="$origobjdir"
86904b0ead49Smrg
86914b0ead49Smrg    # Try to remove the ${objdir}s in the directories where we deleted files
86924b0ead49Smrg    for dir in $rmdirs; do
86934b0ead49Smrg      if test -d "$dir"; then
869449dc963fSmrg	func_show_eval "rmdir $dir >/dev/null 2>&1"
86954b0ead49Smrg      fi
86964b0ead49Smrg    done
86974b0ead49Smrg
86984b0ead49Smrg    exit $exit_status
869949dc963fSmrg}
87004b0ead49Smrg
870149dc963fSmrg{ test "$mode" = uninstall || test "$mode" = clean; } &&
870249dc963fSmrg    func_mode_uninstall ${1+"$@"}
87034b0ead49Smrg
870449dc963fSmrgtest -z "$mode" && {
870549dc963fSmrg  help="$generic_help"
870649dc963fSmrg  func_fatal_help "you must specify a MODE"
870749dc963fSmrg}
870849dc963fSmrg
870949dc963fSmrgtest -z "$exec_cmd" && \
871049dc963fSmrg  func_fatal_help "invalid operation mode \`$mode'"
87114b0ead49Smrg
87124b0ead49Smrgif test -n "$exec_cmd"; then
871349dc963fSmrg  eval exec "$exec_cmd"
87144b0ead49Smrg  exit $EXIT_FAILURE
87154b0ead49Smrgfi
87164b0ead49Smrg
871749dc963fSmrgexit $exit_status
87184b0ead49Smrg
87194b0ead49Smrg
87204b0ead49Smrg# The TAGs below are defined such that we never get into a situation
87214b0ead49Smrg# in which we disable both kinds of libraries.  Given conflicting
87224b0ead49Smrg# choices, we go for a static library, that is the most portable,
87234b0ead49Smrg# since we can't tell whether shared libraries were disabled because
87244b0ead49Smrg# the user asked for that or because the platform doesn't support
87254b0ead49Smrg# them.  This is particularly important on AIX, because we don't
87264b0ead49Smrg# support having both static and shared libraries enabled at the same
87274b0ead49Smrg# time on that platform, so we default to a shared-only configuration.
87284b0ead49Smrg# If a disable-shared tag is given, we'll fallback to a static-only
87294b0ead49Smrg# configuration.  But we'll never go from static-only to shared-only.
87304b0ead49Smrg
87314b0ead49Smrg# ### BEGIN LIBTOOL TAG CONFIG: disable-shared
873249dc963fSmrgbuild_libtool_libs=no
873349dc963fSmrgbuild_old_libs=yes
87344b0ead49Smrg# ### END LIBTOOL TAG CONFIG: disable-shared
87354b0ead49Smrg
87364b0ead49Smrg# ### BEGIN LIBTOOL TAG CONFIG: disable-static
873749dc963fSmrgbuild_old_libs=`case $build_libtool_libs in yes) echo no;; *) echo yes;; esac`
87384b0ead49Smrg# ### END LIBTOOL TAG CONFIG: disable-static
87394b0ead49Smrg
87404b0ead49Smrg# Local Variables:
87414b0ead49Smrg# mode:shell-script
87424b0ead49Smrg# sh-indentation:2
87434b0ead49Smrg# End:
874449dc963fSmrg# vi:sw=2
874549dc963fSmrg
8746