ltmain.sh revision 4e7590ef
149dc963fSmrg
24e7590efSmrg# libtool (GNU libtool) 2.4.2
349dc963fSmrg# Written by Gordon Matzigkeit <gord@gnu.ai.mit.edu>, 1996
449dc963fSmrg
57aa89044Smrg# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005, 2006,
64e7590efSmrg# 2007, 2008, 2009, 2010, 2011 Free Software Foundation, Inc.
749dc963fSmrg# This is free software; see the source for copying conditions.  There is NO
849dc963fSmrg# warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
949dc963fSmrg
1049dc963fSmrg# GNU Libtool is free software; you can redistribute it and/or modify
114b0ead49Smrg# it under the terms of the GNU General Public License as published by
124b0ead49Smrg# the Free Software Foundation; either version 2 of the License, or
134b0ead49Smrg# (at your option) any later version.
144b0ead49Smrg#
1549dc963fSmrg# As a special exception to the GNU General Public License,
1649dc963fSmrg# if you distribute this file as part of a program or library that
1749dc963fSmrg# is built using GNU Libtool, you may include this file under the
1849dc963fSmrg# same distribution terms that you use for the rest of that program.
1949dc963fSmrg#
2049dc963fSmrg# GNU Libtool is distributed in the hope that it will be useful, but
214b0ead49Smrg# WITHOUT ANY WARRANTY; without even the implied warranty of
224b0ead49Smrg# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
234b0ead49Smrg# General Public License for more details.
244b0ead49Smrg#
254b0ead49Smrg# You should have received a copy of the GNU General Public License
2649dc963fSmrg# along with GNU Libtool; see the file COPYING.  If not, a copy
2749dc963fSmrg# can be downloaded from http://www.gnu.org/licenses/gpl.html,
2849dc963fSmrg# or obtained by writing to the Free Software Foundation, Inc.,
2949dc963fSmrg# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
304b0ead49Smrg
3149dc963fSmrg# Usage: $progname [OPTION]... [MODE-ARG]...
3249dc963fSmrg#
3349dc963fSmrg# Provide generalized library-building support services.
3449dc963fSmrg#
357aa89044Smrg#       --config             show all configuration variables
367aa89044Smrg#       --debug              enable verbose shell tracing
377aa89044Smrg#   -n, --dry-run            display commands without modifying any files
387aa89044Smrg#       --features           display basic configuration information and exit
397aa89044Smrg#       --mode=MODE          use operation mode MODE
407aa89044Smrg#       --preserve-dup-deps  don't remove duplicate dependency libraries
417aa89044Smrg#       --quiet, --silent    don't print informational messages
427aa89044Smrg#       --no-quiet, --no-silent
437aa89044Smrg#                            print informational messages (default)
444e7590efSmrg#       --no-warn            don't display warning messages
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)
734e7590efSmrg#         $progname:	(GNU libtool) 2.4.2
747aa89044Smrg#         automake:	$automake_version
757aa89044Smrg#         autoconf:	$autoconf_version
7649dc963fSmrg#
7749dc963fSmrg# Report bugs to <bug-libtool@gnu.org>.
784e7590efSmrg# GNU libtool home page: <http://www.gnu.org/software/libtool/>.
794e7590efSmrg# General help using GNU software: <http://www.gnu.org/gethelp/>.
804b0ead49Smrg
817aa89044SmrgPROGRAM=libtool
824b0ead49SmrgPACKAGE=libtool
834e7590efSmrgVERSION=2.4.2
8449dc963fSmrgTIMESTAMP=""
854e7590efSmrgpackage_revision=1.3337
8652b01e16Smrg
8749dc963fSmrg# Be Bourne compatible
8852b01e16Smrgif test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then
8952b01e16Smrg  emulate sh
9052b01e16Smrg  NULLCMD=:
9152b01e16Smrg  # Zsh 3.x and 4.x performs word splitting on ${1+"$@"}, which
9252b01e16Smrg  # is contrary to our usage.  Disable this feature.
9352b01e16Smrg  alias -g '${1+"$@"}'='"$@"'
944b0ead49Smrg  setopt NO_GLOB_SUBST
9552b01e16Smrgelse
9652b01e16Smrg  case `(set -o) 2>/dev/null` in *posix*) set -o posix;; esac
974b0ead49Smrgfi
9852b01e16SmrgBIN_SH=xpg4; export BIN_SH # for Tru64
9952b01e16SmrgDUALCASE=1; export DUALCASE # for MKS sh
1004b0ead49Smrg
1017aa89044Smrg# A function that is used when there is no print builtin or printf.
1027aa89044Smrgfunc_fallback_echo ()
1037aa89044Smrg{
1047aa89044Smrg  eval 'cat <<_LTECHO_EOF
1057aa89044Smrg$1
1067aa89044Smrg_LTECHO_EOF'
1077aa89044Smrg}
1087aa89044Smrg
10949dc963fSmrg# NLS nuisances: We save the old values to restore during execute mode.
11049dc963fSmrglt_user_locale=
11149dc963fSmrglt_safe_locale=
11252b01e16Smrgfor lt_var in LANG LANGUAGE LC_ALL LC_CTYPE LC_COLLATE LC_MESSAGES
11352b01e16Smrgdo
11452b01e16Smrg  eval "if test \"\${$lt_var+set}\" = set; then
11549dc963fSmrg          save_$lt_var=\$$lt_var
11649dc963fSmrg          $lt_var=C
11752b01e16Smrg	  export $lt_var
11849dc963fSmrg	  lt_user_locale=\"$lt_var=\\\$save_\$lt_var; \$lt_user_locale\"
11949dc963fSmrg	  lt_safe_locale=\"$lt_var=C; \$lt_safe_locale\"
12052b01e16Smrg	fi"
12152b01e16Smrgdone
1227aa89044SmrgLC_ALL=C
1237aa89044SmrgLANGUAGE=C
1247aa89044Smrgexport LANGUAGE LC_ALL
12552b01e16Smrg
12649dc963fSmrg$lt_unset CDPATH
12749dc963fSmrg
12849dc963fSmrg
1297aa89044Smrg# Work around backward compatibility issue on IRIX 6.5. On IRIX 6.4+, sh
1307aa89044Smrg# is ksh but when the shell is invoked as "sh" and the current value of
1317aa89044Smrg# the _XPG environment variable is not equal to 1 (one), the special
1327aa89044Smrg# positional parameter $0, within a function call, is the name of the
1337aa89044Smrg# function.
1347aa89044Smrgprogpath="$0"
13549dc963fSmrg
13649dc963fSmrg
13749dc963fSmrg
13849dc963fSmrg: ${CP="cp -f"}
1397aa89044Smrgtest "${ECHO+set}" = set || ECHO=${as_echo-'printf %s\n'}
14049dc963fSmrg: ${MAKE="make"}
14149dc963fSmrg: ${MKDIR="mkdir"}
14249dc963fSmrg: ${MV="mv -f"}
14349dc963fSmrg: ${RM="rm -f"}
14449dc963fSmrg: ${SHELL="${CONFIG_SHELL-/bin/sh}"}
14549dc963fSmrg: ${Xsed="$SED -e 1s/^X//"}
14649dc963fSmrg
14749dc963fSmrg# Global variables:
14849dc963fSmrgEXIT_SUCCESS=0
14949dc963fSmrgEXIT_FAILURE=1
15049dc963fSmrgEXIT_MISMATCH=63  # $? = 63 is used to indicate version mismatch to missing.
15149dc963fSmrgEXIT_SKIP=77	  # $? = 77 is used to indicate a skipped test to automake.
15249dc963fSmrg
15349dc963fSmrgexit_status=$EXIT_SUCCESS
1544b0ead49Smrg
1554b0ead49Smrg# Make sure IFS has a sensible default
1564b0ead49Smrglt_nl='
1574b0ead49Smrg'
1584b0ead49SmrgIFS=" 	$lt_nl"
1594b0ead49Smrg
16049dc963fSmrgdirname="s,/[^/]*$,,"
16149dc963fSmrgbasename="s,^.*/,,"
16249dc963fSmrg
1634e7590efSmrg# func_dirname file append nondir_replacement
1644e7590efSmrg# Compute the dirname of FILE.  If nonempty, add APPEND to the result,
1654e7590efSmrg# otherwise set result to NONDIR_REPLACEMENT.
1664e7590efSmrgfunc_dirname ()
1674e7590efSmrg{
1684e7590efSmrg    func_dirname_result=`$ECHO "${1}" | $SED "$dirname"`
1694e7590efSmrg    if test "X$func_dirname_result" = "X${1}"; then
1704e7590efSmrg      func_dirname_result="${3}"
1714e7590efSmrg    else
1724e7590efSmrg      func_dirname_result="$func_dirname_result${2}"
1734e7590efSmrg    fi
1744e7590efSmrg} # func_dirname may be replaced by extended shell implementation
1754e7590efSmrg
1764e7590efSmrg
1774e7590efSmrg# func_basename file
1784e7590efSmrgfunc_basename ()
1794e7590efSmrg{
1804e7590efSmrg    func_basename_result=`$ECHO "${1}" | $SED "$basename"`
1814e7590efSmrg} # func_basename may be replaced by extended shell implementation
1824e7590efSmrg
1834e7590efSmrg
18449dc963fSmrg# func_dirname_and_basename file append nondir_replacement
18549dc963fSmrg# perform func_basename and func_dirname in a single function
18649dc963fSmrg# call:
18749dc963fSmrg#   dirname:  Compute the dirname of FILE.  If nonempty,
18849dc963fSmrg#             add APPEND to the result, otherwise set result
18949dc963fSmrg#             to NONDIR_REPLACEMENT.
19049dc963fSmrg#             value returned in "$func_dirname_result"
19149dc963fSmrg#   basename: Compute filename of FILE.
19249dc963fSmrg#             value retuned in "$func_basename_result"
19349dc963fSmrg# Implementation must be kept synchronized with func_dirname
19449dc963fSmrg# and func_basename. For efficiency, we do not delegate to
19549dc963fSmrg# those functions but instead duplicate the functionality here.
19649dc963fSmrgfunc_dirname_and_basename ()
19749dc963fSmrg{
1984e7590efSmrg    # Extract subdirectory from the argument.
1994e7590efSmrg    func_dirname_result=`$ECHO "${1}" | $SED -e "$dirname"`
2004e7590efSmrg    if test "X$func_dirname_result" = "X${1}"; then
2014e7590efSmrg      func_dirname_result="${3}"
2024e7590efSmrg    else
2034e7590efSmrg      func_dirname_result="$func_dirname_result${2}"
2044e7590efSmrg    fi
2054e7590efSmrg    func_basename_result=`$ECHO "${1}" | $SED -e "$basename"`
2064e7590efSmrg} # func_dirname_and_basename may be replaced by extended shell implementation
2074e7590efSmrg
2084e7590efSmrg
2094e7590efSmrg# func_stripname prefix suffix name
2104e7590efSmrg# strip PREFIX and SUFFIX off of NAME.
2114e7590efSmrg# PREFIX and SUFFIX must not contain globbing or regex special
2124e7590efSmrg# characters, hashes, percent signs, but SUFFIX may contain a leading
2134e7590efSmrg# dot (in which case that matches only a dot).
2144e7590efSmrg# func_strip_suffix prefix name
2154e7590efSmrgfunc_stripname ()
2164e7590efSmrg{
2174e7590efSmrg    case ${2} in
2184e7590efSmrg      .*) func_stripname_result=`$ECHO "${3}" | $SED "s%^${1}%%; s%\\\\${2}\$%%"`;;
2194e7590efSmrg      *)  func_stripname_result=`$ECHO "${3}" | $SED "s%^${1}%%; s%${2}\$%%"`;;
2204e7590efSmrg    esac
2214e7590efSmrg} # func_stripname may be replaced by extended shell implementation
2224b0ead49Smrg
22349dc963fSmrg
2247aa89044Smrg# These SED scripts presuppose an absolute path with a trailing slash.
2257aa89044Smrgpathcar='s,^/\([^/]*\).*$,\1,'
2267aa89044Smrgpathcdr='s,^/[^/]*,,'
2277aa89044Smrgremovedotparts=':dotsl
2287aa89044Smrg		s@/\./@/@g
2297aa89044Smrg		t dotsl
2307aa89044Smrg		s,/\.$,/,'
2317aa89044Smrgcollapseslashes='s@/\{1,\}@/@g'
2327aa89044Smrgfinalslash='s,/*$,/,'
2337aa89044Smrg
2347aa89044Smrg# func_normal_abspath PATH
2357aa89044Smrg# Remove doubled-up and trailing slashes, "." path components,
2367aa89044Smrg# and cancel out any ".." path components in PATH after making
2377aa89044Smrg# it an absolute path.
2387aa89044Smrg#             value returned in "$func_normal_abspath_result"
2397aa89044Smrgfunc_normal_abspath ()
2407aa89044Smrg{
2417aa89044Smrg  # Start from root dir and reassemble the path.
2427aa89044Smrg  func_normal_abspath_result=
2437aa89044Smrg  func_normal_abspath_tpath=$1
2447aa89044Smrg  func_normal_abspath_altnamespace=
2457aa89044Smrg  case $func_normal_abspath_tpath in
2467aa89044Smrg    "")
2477aa89044Smrg      # Empty path, that just means $cwd.
2487aa89044Smrg      func_stripname '' '/' "`pwd`"
2497aa89044Smrg      func_normal_abspath_result=$func_stripname_result
2507aa89044Smrg      return
2517aa89044Smrg    ;;
2527aa89044Smrg    # The next three entries are used to spot a run of precisely
2537aa89044Smrg    # two leading slashes without using negated character classes;
2547aa89044Smrg    # we take advantage of case's first-match behaviour.
2557aa89044Smrg    ///*)
2567aa89044Smrg      # Unusual form of absolute path, do nothing.
2577aa89044Smrg    ;;
2587aa89044Smrg    //*)
2597aa89044Smrg      # Not necessarily an ordinary path; POSIX reserves leading '//'
2607aa89044Smrg      # and for example Cygwin uses it to access remote file shares
2617aa89044Smrg      # over CIFS/SMB, so we conserve a leading double slash if found.
2627aa89044Smrg      func_normal_abspath_altnamespace=/
2637aa89044Smrg    ;;
2647aa89044Smrg    /*)
2657aa89044Smrg      # Absolute path, do nothing.
2667aa89044Smrg    ;;
2677aa89044Smrg    *)
2687aa89044Smrg      # Relative path, prepend $cwd.
2697aa89044Smrg      func_normal_abspath_tpath=`pwd`/$func_normal_abspath_tpath
2707aa89044Smrg    ;;
2717aa89044Smrg  esac
2727aa89044Smrg  # Cancel out all the simple stuff to save iterations.  We also want
2737aa89044Smrg  # the path to end with a slash for ease of parsing, so make sure
2747aa89044Smrg  # there is one (and only one) here.
2757aa89044Smrg  func_normal_abspath_tpath=`$ECHO "$func_normal_abspath_tpath" | $SED \
2767aa89044Smrg        -e "$removedotparts" -e "$collapseslashes" -e "$finalslash"`
2777aa89044Smrg  while :; do
2787aa89044Smrg    # Processed it all yet?
2797aa89044Smrg    if test "$func_normal_abspath_tpath" = / ; then
2807aa89044Smrg      # If we ascended to the root using ".." the result may be empty now.
2817aa89044Smrg      if test -z "$func_normal_abspath_result" ; then
2827aa89044Smrg        func_normal_abspath_result=/
2837aa89044Smrg      fi
2847aa89044Smrg      break
2857aa89044Smrg    fi
2867aa89044Smrg    func_normal_abspath_tcomponent=`$ECHO "$func_normal_abspath_tpath" | $SED \
2877aa89044Smrg        -e "$pathcar"`
2887aa89044Smrg    func_normal_abspath_tpath=`$ECHO "$func_normal_abspath_tpath" | $SED \
2897aa89044Smrg        -e "$pathcdr"`
2907aa89044Smrg    # Figure out what to do with it
2917aa89044Smrg    case $func_normal_abspath_tcomponent in
2927aa89044Smrg      "")
2937aa89044Smrg        # Trailing empty path component, ignore it.
2947aa89044Smrg      ;;
2957aa89044Smrg      ..)
2967aa89044Smrg        # Parent dir; strip last assembled component from result.
2977aa89044Smrg        func_dirname "$func_normal_abspath_result"
2987aa89044Smrg        func_normal_abspath_result=$func_dirname_result
2997aa89044Smrg      ;;
3007aa89044Smrg      *)
3017aa89044Smrg        # Actual path component, append it.
3027aa89044Smrg        func_normal_abspath_result=$func_normal_abspath_result/$func_normal_abspath_tcomponent
3037aa89044Smrg      ;;
3047aa89044Smrg    esac
3057aa89044Smrg  done
3067aa89044Smrg  # Restore leading double-slash if one was found on entry.
3077aa89044Smrg  func_normal_abspath_result=$func_normal_abspath_altnamespace$func_normal_abspath_result
3087aa89044Smrg}
3097aa89044Smrg
3107aa89044Smrg# func_relative_path SRCDIR DSTDIR
3117aa89044Smrg# generates a relative path from SRCDIR to DSTDIR, with a trailing
3127aa89044Smrg# slash if non-empty, suitable for immediately appending a filename
3137aa89044Smrg# without needing to append a separator.
3147aa89044Smrg#             value returned in "$func_relative_path_result"
3157aa89044Smrgfunc_relative_path ()
3167aa89044Smrg{
3177aa89044Smrg  func_relative_path_result=
3187aa89044Smrg  func_normal_abspath "$1"
3197aa89044Smrg  func_relative_path_tlibdir=$func_normal_abspath_result
3207aa89044Smrg  func_normal_abspath "$2"
3217aa89044Smrg  func_relative_path_tbindir=$func_normal_abspath_result
3227aa89044Smrg
3237aa89044Smrg  # Ascend the tree starting from libdir
3247aa89044Smrg  while :; do
3257aa89044Smrg    # check if we have found a prefix of bindir
3267aa89044Smrg    case $func_relative_path_tbindir in
3277aa89044Smrg      $func_relative_path_tlibdir)
3287aa89044Smrg        # found an exact match
3297aa89044Smrg        func_relative_path_tcancelled=
3307aa89044Smrg        break
3317aa89044Smrg        ;;
3327aa89044Smrg      $func_relative_path_tlibdir*)
3337aa89044Smrg        # found a matching prefix
3347aa89044Smrg        func_stripname "$func_relative_path_tlibdir" '' "$func_relative_path_tbindir"
3357aa89044Smrg        func_relative_path_tcancelled=$func_stripname_result
3367aa89044Smrg        if test -z "$func_relative_path_result"; then
3377aa89044Smrg          func_relative_path_result=.
3387aa89044Smrg        fi
3397aa89044Smrg        break
3407aa89044Smrg        ;;
3417aa89044Smrg      *)
3427aa89044Smrg        func_dirname $func_relative_path_tlibdir
3437aa89044Smrg        func_relative_path_tlibdir=${func_dirname_result}
3447aa89044Smrg        if test "x$func_relative_path_tlibdir" = x ; then
3457aa89044Smrg          # Have to descend all the way to the root!
3467aa89044Smrg          func_relative_path_result=../$func_relative_path_result
3477aa89044Smrg          func_relative_path_tcancelled=$func_relative_path_tbindir
3487aa89044Smrg          break
3497aa89044Smrg        fi
3507aa89044Smrg        func_relative_path_result=../$func_relative_path_result
3517aa89044Smrg        ;;
3527aa89044Smrg    esac
3537aa89044Smrg  done
3547aa89044Smrg
3557aa89044Smrg  # Now calculate path; take care to avoid doubling-up slashes.
3567aa89044Smrg  func_stripname '' '/' "$func_relative_path_result"
3577aa89044Smrg  func_relative_path_result=$func_stripname_result
3587aa89044Smrg  func_stripname '/' '/' "$func_relative_path_tcancelled"
3597aa89044Smrg  if test "x$func_stripname_result" != x ; then
3607aa89044Smrg    func_relative_path_result=${func_relative_path_result}/${func_stripname_result}
3617aa89044Smrg  fi
3627aa89044Smrg
3637aa89044Smrg  # Normalisation. If bindir is libdir, return empty string,
3647aa89044Smrg  # else relative path ending with a slash; either way, target
3657aa89044Smrg  # file name can be directly appended.
3667aa89044Smrg  if test ! -z "$func_relative_path_result"; then
3677aa89044Smrg    func_stripname './' '' "$func_relative_path_result/"
3687aa89044Smrg    func_relative_path_result=$func_stripname_result
3697aa89044Smrg  fi
3707aa89044Smrg}
37149dc963fSmrg
37249dc963fSmrg# The name of this program:
37349dc963fSmrgfunc_dirname_and_basename "$progpath"
37449dc963fSmrgprogname=$func_basename_result
37549dc963fSmrg
37649dc963fSmrg# Make sure we have an absolute path for reexecution:
37749dc963fSmrgcase $progpath in
37849dc963fSmrg  [\\/]*|[A-Za-z]:\\*) ;;
37949dc963fSmrg  *[\\/]*)
38049dc963fSmrg     progdir=$func_dirname_result
38149dc963fSmrg     progdir=`cd "$progdir" && pwd`
38249dc963fSmrg     progpath="$progdir/$progname"
38349dc963fSmrg     ;;
38449dc963fSmrg  *)
38549dc963fSmrg     save_IFS="$IFS"
3864e7590efSmrg     IFS=${PATH_SEPARATOR-:}
38749dc963fSmrg     for progdir in $PATH; do
38849dc963fSmrg       IFS="$save_IFS"
38949dc963fSmrg       test -x "$progdir/$progname" && break
39049dc963fSmrg     done
39149dc963fSmrg     IFS="$save_IFS"
39249dc963fSmrg     test -n "$progdir" || progdir=`pwd`
39349dc963fSmrg     progpath="$progdir/$progname"
39449dc963fSmrg     ;;
39549dc963fSmrgesac
39649dc963fSmrg
39749dc963fSmrg# Sed substitution that helps us do robust quoting.  It backslashifies
39849dc963fSmrg# metacharacters that are still active within double-quoted strings.
39949dc963fSmrgXsed="${SED}"' -e 1s/^X//'
40049dc963fSmrgsed_quote_subst='s/\([`"$\\]\)/\\\1/g'
40149dc963fSmrg
40249dc963fSmrg# Same as above, but do not quote variable references.
40349dc963fSmrgdouble_quote_subst='s/\(["`\\]\)/\\\1/g'
40449dc963fSmrg
4054e7590efSmrg# Sed substitution that turns a string into a regex matching for the
4064e7590efSmrg# string literally.
4074e7590efSmrgsed_make_literal_regex='s,[].[^$\\*\/],\\&,g'
4084e7590efSmrg
4094e7590efSmrg# Sed substitution that converts a w32 file name or path
4104e7590efSmrg# which contains forward slashes, into one that contains
4114e7590efSmrg# (escaped) backslashes.  A very naive implementation.
4124e7590efSmrglt_sed_naive_backslashify='s|\\\\*|\\|g;s|/|\\|g;s|\\|\\\\|g'
4134e7590efSmrg
41449dc963fSmrg# Re-`\' parameter expansions in output of double_quote_subst that were
41549dc963fSmrg# `\'-ed in input to the same.  If an odd number of `\' preceded a '$'
41649dc963fSmrg# in input to double_quote_subst, that '$' was protected from expansion.
41749dc963fSmrg# Since each input `\' is now two `\'s, look for any number of runs of
41849dc963fSmrg# four `\'s followed by two `\'s and then a '$'.  `\' that '$'.
41949dc963fSmrgbs='\\'
42049dc963fSmrgbs2='\\\\'
42149dc963fSmrgbs4='\\\\\\\\'
42249dc963fSmrgdollar='\$'
42349dc963fSmrgsed_double_backslash="\
42449dc963fSmrg  s/$bs4/&\\
42549dc963fSmrg/g
42649dc963fSmrg  s/^$bs2$dollar/$bs&/
42749dc963fSmrg  s/\\([^$bs]\\)$bs2$dollar/\\1$bs2$bs$dollar/g
42849dc963fSmrg  s/\n//g"
42949dc963fSmrg
43049dc963fSmrg# Standard options:
43149dc963fSmrgopt_dry_run=false
43249dc963fSmrgopt_help=false
43349dc963fSmrgopt_quiet=false
43449dc963fSmrgopt_verbose=false
43549dc963fSmrgopt_warning=:
43649dc963fSmrg
43749dc963fSmrg# func_echo arg...
43849dc963fSmrg# Echo program name prefixed message, along with the current mode
43949dc963fSmrg# name if it has been set yet.
44049dc963fSmrgfunc_echo ()
44149dc963fSmrg{
4424e7590efSmrg    $ECHO "$progname: ${opt_mode+$opt_mode: }$*"
44349dc963fSmrg}
44449dc963fSmrg
44549dc963fSmrg# func_verbose arg...
44649dc963fSmrg# Echo program name prefixed message in verbose mode only.
44749dc963fSmrgfunc_verbose ()
44849dc963fSmrg{
44949dc963fSmrg    $opt_verbose && func_echo ${1+"$@"}
45049dc963fSmrg
45149dc963fSmrg    # A bug in bash halts the script if the last line of a function
45249dc963fSmrg    # fails when set -e is in force, so we need another command to
45349dc963fSmrg    # work around that:
45449dc963fSmrg    :
45549dc963fSmrg}
45649dc963fSmrg
4577aa89044Smrg# func_echo_all arg...
4587aa89044Smrg# Invoke $ECHO with all args, space-separated.
4597aa89044Smrgfunc_echo_all ()
4607aa89044Smrg{
4617aa89044Smrg    $ECHO "$*"
4627aa89044Smrg}
4637aa89044Smrg
46449dc963fSmrg# func_error arg...
46549dc963fSmrg# Echo program name prefixed message to standard error.
46649dc963fSmrgfunc_error ()
46749dc963fSmrg{
4684e7590efSmrg    $ECHO "$progname: ${opt_mode+$opt_mode: }"${1+"$@"} 1>&2
46949dc963fSmrg}
47049dc963fSmrg
47149dc963fSmrg# func_warning arg...
47249dc963fSmrg# Echo program name prefixed warning message to standard error.
47349dc963fSmrgfunc_warning ()
47449dc963fSmrg{
4754e7590efSmrg    $opt_warning && $ECHO "$progname: ${opt_mode+$opt_mode: }warning: "${1+"$@"} 1>&2
47649dc963fSmrg
47749dc963fSmrg    # bash bug again:
47849dc963fSmrg    :
47949dc963fSmrg}
48049dc963fSmrg
48149dc963fSmrg# func_fatal_error arg...
48249dc963fSmrg# Echo program name prefixed message to standard error, and exit.
48349dc963fSmrgfunc_fatal_error ()
48449dc963fSmrg{
48549dc963fSmrg    func_error ${1+"$@"}
48649dc963fSmrg    exit $EXIT_FAILURE
48749dc963fSmrg}
48849dc963fSmrg
48949dc963fSmrg# func_fatal_help arg...
49049dc963fSmrg# Echo program name prefixed message to standard error, followed by
49149dc963fSmrg# a help hint, and exit.
49249dc963fSmrgfunc_fatal_help ()
49349dc963fSmrg{
49449dc963fSmrg    func_error ${1+"$@"}
49549dc963fSmrg    func_fatal_error "$help"
49649dc963fSmrg}
49749dc963fSmrghelp="Try \`$progname --help' for more information."  ## default
49849dc963fSmrg
49949dc963fSmrg
50049dc963fSmrg# func_grep expression filename
50149dc963fSmrg# Check whether EXPRESSION matches any line of FILENAME, without output.
50249dc963fSmrgfunc_grep ()
50349dc963fSmrg{
50449dc963fSmrg    $GREP "$1" "$2" >/dev/null 2>&1
50549dc963fSmrg}
50649dc963fSmrg
50749dc963fSmrg
50849dc963fSmrg# func_mkdir_p directory-path
50949dc963fSmrg# Make sure the entire path to DIRECTORY-PATH is available.
51049dc963fSmrgfunc_mkdir_p ()
51149dc963fSmrg{
51249dc963fSmrg    my_directory_path="$1"
51349dc963fSmrg    my_dir_list=
51449dc963fSmrg
51549dc963fSmrg    if test -n "$my_directory_path" && test "$opt_dry_run" != ":"; then
51649dc963fSmrg
51749dc963fSmrg      # Protect directory names starting with `-'
51849dc963fSmrg      case $my_directory_path in
51949dc963fSmrg        -*) my_directory_path="./$my_directory_path" ;;
52049dc963fSmrg      esac
52149dc963fSmrg
52249dc963fSmrg      # While some portion of DIR does not yet exist...
52349dc963fSmrg      while test ! -d "$my_directory_path"; do
52449dc963fSmrg        # ...make a list in topmost first order.  Use a colon delimited
52549dc963fSmrg	# list incase some portion of path contains whitespace.
52649dc963fSmrg        my_dir_list="$my_directory_path:$my_dir_list"
52749dc963fSmrg
52849dc963fSmrg        # If the last portion added has no slash in it, the list is done
52949dc963fSmrg        case $my_directory_path in */*) ;; *) break ;; esac
53049dc963fSmrg
53149dc963fSmrg        # ...otherwise throw away the child directory and loop
5327aa89044Smrg        my_directory_path=`$ECHO "$my_directory_path" | $SED -e "$dirname"`
53349dc963fSmrg      done
5347aa89044Smrg      my_dir_list=`$ECHO "$my_dir_list" | $SED 's,:*$,,'`
53549dc963fSmrg
53649dc963fSmrg      save_mkdir_p_IFS="$IFS"; IFS=':'
53749dc963fSmrg      for my_dir in $my_dir_list; do
53849dc963fSmrg	IFS="$save_mkdir_p_IFS"
53949dc963fSmrg        # mkdir can fail with a `File exist' error if two processes
54049dc963fSmrg        # try to create one of the directories concurrently.  Don't
54149dc963fSmrg        # stop in that case!
54249dc963fSmrg        $MKDIR "$my_dir" 2>/dev/null || :
54349dc963fSmrg      done
54449dc963fSmrg      IFS="$save_mkdir_p_IFS"
54549dc963fSmrg
54649dc963fSmrg      # Bail out if we (or some other process) failed to create a directory.
54749dc963fSmrg      test -d "$my_directory_path" || \
54849dc963fSmrg        func_fatal_error "Failed to create \`$1'"
54949dc963fSmrg    fi
55049dc963fSmrg}
5514b0ead49Smrg
5524b0ead49Smrg
5534b0ead49Smrg# func_mktempdir [string]
5544b0ead49Smrg# Make a temporary directory that won't clash with other running
5554b0ead49Smrg# libtool processes, and avoids race conditions if possible.  If
5564b0ead49Smrg# given, STRING is the basename for that directory.
5574b0ead49Smrgfunc_mktempdir ()
5584b0ead49Smrg{
5594b0ead49Smrg    my_template="${TMPDIR-/tmp}/${1-$progname}"
5604b0ead49Smrg
56149dc963fSmrg    if test "$opt_dry_run" = ":"; then
5624b0ead49Smrg      # Return a directory name, but don't create it in dry-run mode
5634b0ead49Smrg      my_tmpdir="${my_template}-$$"
5644b0ead49Smrg    else
5654b0ead49Smrg
5664b0ead49Smrg      # If mktemp works, use that first and foremost
5674b0ead49Smrg      my_tmpdir=`mktemp -d "${my_template}-XXXXXXXX" 2>/dev/null`
5684b0ead49Smrg
5694b0ead49Smrg      if test ! -d "$my_tmpdir"; then
57049dc963fSmrg        # Failing that, at least try and use $RANDOM to avoid a race
57149dc963fSmrg        my_tmpdir="${my_template}-${RANDOM-0}$$"
5724b0ead49Smrg
57349dc963fSmrg        save_mktempdir_umask=`umask`
57449dc963fSmrg        umask 0077
57549dc963fSmrg        $MKDIR "$my_tmpdir"
57649dc963fSmrg        umask $save_mktempdir_umask
5774b0ead49Smrg      fi
5784b0ead49Smrg
5794b0ead49Smrg      # If we're not in dry-run mode, bomb out on failure
58049dc963fSmrg      test -d "$my_tmpdir" || \
58149dc963fSmrg        func_fatal_error "cannot create temporary directory \`$my_tmpdir'"
5824b0ead49Smrg    fi
5834b0ead49Smrg
5847aa89044Smrg    $ECHO "$my_tmpdir"
5854b0ead49Smrg}
5864b0ead49Smrg
5874b0ead49Smrg
58849dc963fSmrg# func_quote_for_eval arg
58949dc963fSmrg# Aesthetically quote ARG to be evaled later.
59049dc963fSmrg# This function returns two values: FUNC_QUOTE_FOR_EVAL_RESULT
59149dc963fSmrg# is double-quoted, suitable for a subsequent eval, whereas
59249dc963fSmrg# FUNC_QUOTE_FOR_EVAL_UNQUOTED_RESULT has merely all characters
59349dc963fSmrg# which are still active within double quotes backslashified.
59449dc963fSmrgfunc_quote_for_eval ()
5954b0ead49Smrg{
59649dc963fSmrg    case $1 in
59749dc963fSmrg      *[\\\`\"\$]*)
5987aa89044Smrg	func_quote_for_eval_unquoted_result=`$ECHO "$1" | $SED "$sed_quote_subst"` ;;
59949dc963fSmrg      *)
60049dc963fSmrg        func_quote_for_eval_unquoted_result="$1" ;;
60149dc963fSmrg    esac
60249dc963fSmrg
60349dc963fSmrg    case $func_quote_for_eval_unquoted_result in
60449dc963fSmrg      # Double-quote args containing shell metacharacters to delay
60549dc963fSmrg      # word splitting, command substitution and and variable
60649dc963fSmrg      # expansion for a subsequent eval.
60749dc963fSmrg      # Many Bourne shells cannot handle close brackets correctly
60849dc963fSmrg      # in scan sets, so we specify it separately.
60949dc963fSmrg      *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \	]*|*]*|"")
61049dc963fSmrg        func_quote_for_eval_result="\"$func_quote_for_eval_unquoted_result\""
61149dc963fSmrg        ;;
61249dc963fSmrg      *)
61349dc963fSmrg        func_quote_for_eval_result="$func_quote_for_eval_unquoted_result"
6144b0ead49Smrg    esac
6154b0ead49Smrg}
6164b0ead49Smrg
6174b0ead49Smrg
61849dc963fSmrg# func_quote_for_expand arg
61949dc963fSmrg# Aesthetically quote ARG to be evaled later; same as above,
62049dc963fSmrg# but do not quote variable references.
62149dc963fSmrgfunc_quote_for_expand ()
6224b0ead49Smrg{
62349dc963fSmrg    case $1 in
62449dc963fSmrg      *[\\\`\"]*)
6257aa89044Smrg	my_arg=`$ECHO "$1" | $SED \
62649dc963fSmrg	    -e "$double_quote_subst" -e "$sed_double_backslash"` ;;
6274b0ead49Smrg      *)
62849dc963fSmrg        my_arg="$1" ;;
62949dc963fSmrg    esac
63049dc963fSmrg
63149dc963fSmrg    case $my_arg in
63249dc963fSmrg      # Double-quote args containing shell metacharacters to delay
63349dc963fSmrg      # word splitting and command substitution for a subsequent eval.
63449dc963fSmrg      # Many Bourne shells cannot handle close brackets correctly
63549dc963fSmrg      # in scan sets, so we specify it separately.
63649dc963fSmrg      *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \	]*|*]*|"")
63749dc963fSmrg        my_arg="\"$my_arg\""
63849dc963fSmrg        ;;
63949dc963fSmrg    esac
64049dc963fSmrg
64149dc963fSmrg    func_quote_for_expand_result="$my_arg"
6424b0ead49Smrg}
6434b0ead49Smrg
6444b0ead49Smrg
64549dc963fSmrg# func_show_eval cmd [fail_exp]
64649dc963fSmrg# Unless opt_silent is true, then output CMD.  Then, if opt_dryrun is
64749dc963fSmrg# not true, evaluate CMD.  If the evaluation of CMD fails, and FAIL_EXP
64849dc963fSmrg# is given, then evaluate it.
64949dc963fSmrgfunc_show_eval ()
6504b0ead49Smrg{
65149dc963fSmrg    my_cmd="$1"
65249dc963fSmrg    my_fail_exp="${2-:}"
6534b0ead49Smrg
65449dc963fSmrg    ${opt_silent-false} || {
65549dc963fSmrg      func_quote_for_expand "$my_cmd"
65649dc963fSmrg      eval "func_echo $func_quote_for_expand_result"
65749dc963fSmrg    }
65849dc963fSmrg
65949dc963fSmrg    if ${opt_dry_run-false}; then :; else
66049dc963fSmrg      eval "$my_cmd"
66149dc963fSmrg      my_status=$?
66249dc963fSmrg      if test "$my_status" -eq 0; then :; else
66349dc963fSmrg	eval "(exit $my_status); $my_fail_exp"
66449dc963fSmrg      fi
6654b0ead49Smrg    fi
6664b0ead49Smrg}
6674b0ead49Smrg
66849dc963fSmrg
66949dc963fSmrg# func_show_eval_locale cmd [fail_exp]
67049dc963fSmrg# Unless opt_silent is true, then output CMD.  Then, if opt_dryrun is
67149dc963fSmrg# not true, evaluate CMD.  If the evaluation of CMD fails, and FAIL_EXP
67249dc963fSmrg# is given, then evaluate it.  Use the saved locale for evaluation.
67349dc963fSmrgfunc_show_eval_locale ()
6744b0ead49Smrg{
67549dc963fSmrg    my_cmd="$1"
67649dc963fSmrg    my_fail_exp="${2-:}"
67749dc963fSmrg
67849dc963fSmrg    ${opt_silent-false} || {
67949dc963fSmrg      func_quote_for_expand "$my_cmd"
68049dc963fSmrg      eval "func_echo $func_quote_for_expand_result"
68149dc963fSmrg    }
68249dc963fSmrg
68349dc963fSmrg    if ${opt_dry_run-false}; then :; else
68449dc963fSmrg      eval "$lt_user_locale
68549dc963fSmrg	    $my_cmd"
68649dc963fSmrg      my_status=$?
68749dc963fSmrg      eval "$lt_safe_locale"
68849dc963fSmrg      if test "$my_status" -eq 0; then :; else
68949dc963fSmrg	eval "(exit $my_status); $my_fail_exp"
69049dc963fSmrg      fi
6914b0ead49Smrg    fi
69249dc963fSmrg}
6934b0ead49Smrg
6944e7590efSmrg# func_tr_sh
6954e7590efSmrg# Turn $1 into a string suitable for a shell variable name.
6964e7590efSmrg# Result is stored in $func_tr_sh_result.  All characters
6974e7590efSmrg# not in the set a-zA-Z0-9_ are replaced with '_'. Further,
6984e7590efSmrg# if $1 begins with a digit, a '_' is prepended as well.
6994e7590efSmrgfunc_tr_sh ()
7004e7590efSmrg{
7014e7590efSmrg  case $1 in
7024e7590efSmrg  [0-9]* | *[!a-zA-Z0-9_]*)
7034e7590efSmrg    func_tr_sh_result=`$ECHO "$1" | $SED 's/^\([0-9]\)/_\1/; s/[^a-zA-Z0-9_]/_/g'`
7044e7590efSmrg    ;;
7054e7590efSmrg  * )
7064e7590efSmrg    func_tr_sh_result=$1
7074e7590efSmrg    ;;
7084e7590efSmrg  esac
7094e7590efSmrg}
7104e7590efSmrg
7114b0ead49Smrg
71249dc963fSmrg# func_version
71349dc963fSmrg# Echo version message to standard output and exit.
71449dc963fSmrgfunc_version ()
71549dc963fSmrg{
7164e7590efSmrg    $opt_debug
7174e7590efSmrg
7187aa89044Smrg    $SED -n '/(C)/!b go
7197aa89044Smrg	:more
7207aa89044Smrg	/\./!{
7217aa89044Smrg	  N
7227aa89044Smrg	  s/\n# / /
7237aa89044Smrg	  b more
7247aa89044Smrg	}
7257aa89044Smrg	:go
7267aa89044Smrg	/^# '$PROGRAM' (GNU /,/# warranty; / {
72749dc963fSmrg        s/^# //
72849dc963fSmrg	s/^# *$//
72949dc963fSmrg        s/\((C)\)[ 0-9,-]*\( [1-9][0-9]*\)/\1\2/
73049dc963fSmrg        p
73149dc963fSmrg     }' < "$progpath"
73249dc963fSmrg     exit $?
73349dc963fSmrg}
73449dc963fSmrg
73549dc963fSmrg# func_usage
73649dc963fSmrg# Echo short help message to standard output and exit.
73749dc963fSmrgfunc_usage ()
73849dc963fSmrg{
7394e7590efSmrg    $opt_debug
7404e7590efSmrg
7417aa89044Smrg    $SED -n '/^# Usage:/,/^#  *.*--help/ {
74249dc963fSmrg        s/^# //
74349dc963fSmrg	s/^# *$//
74449dc963fSmrg	s/\$progname/'$progname'/
74549dc963fSmrg	p
74649dc963fSmrg    }' < "$progpath"
7477aa89044Smrg    echo
74849dc963fSmrg    $ECHO "run \`$progname --help | more' for full usage"
74949dc963fSmrg    exit $?
75049dc963fSmrg}
75149dc963fSmrg
7527aa89044Smrg# func_help [NOEXIT]
7537aa89044Smrg# Echo long help message to standard output and exit,
7547aa89044Smrg# unless 'noexit' is passed as argument.
75549dc963fSmrgfunc_help ()
75649dc963fSmrg{
7574e7590efSmrg    $opt_debug
7584e7590efSmrg
75949dc963fSmrg    $SED -n '/^# Usage:/,/# Report bugs to/ {
7604e7590efSmrg	:print
76149dc963fSmrg        s/^# //
76249dc963fSmrg	s/^# *$//
76349dc963fSmrg	s*\$progname*'$progname'*
76449dc963fSmrg	s*\$host*'"$host"'*
76549dc963fSmrg	s*\$SHELL*'"$SHELL"'*
76649dc963fSmrg	s*\$LTCC*'"$LTCC"'*
76749dc963fSmrg	s*\$LTCFLAGS*'"$LTCFLAGS"'*
76849dc963fSmrg	s*\$LD*'"$LD"'*
76949dc963fSmrg	s/\$with_gnu_ld/'"$with_gnu_ld"'/
7704e7590efSmrg	s/\$automake_version/'"`(${AUTOMAKE-automake} --version) 2>/dev/null |$SED 1q`"'/
7714e7590efSmrg	s/\$autoconf_version/'"`(${AUTOCONF-autoconf} --version) 2>/dev/null |$SED 1q`"'/
77249dc963fSmrg	p
7734e7590efSmrg	d
7744e7590efSmrg     }
7754e7590efSmrg     /^# .* home page:/b print
7764e7590efSmrg     /^# General help using/b print
7774e7590efSmrg     ' < "$progpath"
7787aa89044Smrg    ret=$?
7797aa89044Smrg    if test -z "$1"; then
7807aa89044Smrg      exit $ret
7817aa89044Smrg    fi
78249dc963fSmrg}
78349dc963fSmrg
78449dc963fSmrg# func_missing_arg argname
78549dc963fSmrg# Echo program name prefixed message to standard error and set global
78649dc963fSmrg# exit_cmd.
78749dc963fSmrgfunc_missing_arg ()
78849dc963fSmrg{
7894e7590efSmrg    $opt_debug
7904e7590efSmrg
7917aa89044Smrg    func_error "missing argument for $1."
79249dc963fSmrg    exit_cmd=exit
7934b0ead49Smrg}
7944b0ead49Smrg
7954b0ead49Smrg
7964e7590efSmrg# func_split_short_opt shortopt
7974e7590efSmrg# Set func_split_short_opt_name and func_split_short_opt_arg shell
7984e7590efSmrg# variables after splitting SHORTOPT after the 2nd character.
7994e7590efSmrgfunc_split_short_opt ()
8004e7590efSmrg{
8014e7590efSmrg    my_sed_short_opt='1s/^\(..\).*$/\1/;q'
8024e7590efSmrg    my_sed_short_rest='1s/^..\(.*\)$/\1/;q'
8034e7590efSmrg
8044e7590efSmrg    func_split_short_opt_name=`$ECHO "$1" | $SED "$my_sed_short_opt"`
8054e7590efSmrg    func_split_short_opt_arg=`$ECHO "$1" | $SED "$my_sed_short_rest"`
8064e7590efSmrg} # func_split_short_opt may be replaced by extended shell implementation
8074e7590efSmrg
8084e7590efSmrg
8094e7590efSmrg# func_split_long_opt longopt
8104e7590efSmrg# Set func_split_long_opt_name and func_split_long_opt_arg shell
8114e7590efSmrg# variables after splitting LONGOPT at the `=' sign.
8124e7590efSmrgfunc_split_long_opt ()
8134e7590efSmrg{
8144e7590efSmrg    my_sed_long_opt='1s/^\(--[^=]*\)=.*/\1/;q'
8154e7590efSmrg    my_sed_long_arg='1s/^--[^=]*=//'
8164e7590efSmrg
8174e7590efSmrg    func_split_long_opt_name=`$ECHO "$1" | $SED "$my_sed_long_opt"`
8184e7590efSmrg    func_split_long_opt_arg=`$ECHO "$1" | $SED "$my_sed_long_arg"`
8194e7590efSmrg} # func_split_long_opt may be replaced by extended shell implementation
8204e7590efSmrg
8214e7590efSmrgexit_cmd=:
8224b0ead49Smrg
82349dc963fSmrg
82449dc963fSmrg
82549dc963fSmrg
8264b0ead49Smrg
82749dc963fSmrgmagic="%%%MAGIC variable%%%"
82849dc963fSmrgmagic_exe="%%%MAGIC EXE variable%%%"
8294b0ead49Smrg
83049dc963fSmrg# Global variables.
83149dc963fSmrgnonopt=
83249dc963fSmrgpreserve_args=
83349dc963fSmrglo2o="s/\\.lo\$/.${objext}/"
83449dc963fSmrgo2lo="s/\\.${objext}\$/.lo/"
83549dc963fSmrgextracted_archives=
83649dc963fSmrgextracted_serial=0
8374b0ead49Smrg
83849dc963fSmrg# If this variable is set in any of the actions, the command in it
83949dc963fSmrg# will be execed at the end.  This prevents here-documents from being
84049dc963fSmrg# left over by shells.
84149dc963fSmrgexec_cmd=
84249dc963fSmrg
8434e7590efSmrg# func_append var value
8444e7590efSmrg# Append VALUE to the end of shell variable VAR.
8454e7590efSmrgfunc_append ()
8464e7590efSmrg{
8474e7590efSmrg    eval "${1}=\$${1}\${2}"
8484e7590efSmrg} # func_append may be replaced by extended shell implementation
8494e7590efSmrg
8504e7590efSmrg# func_append_quoted var value
8514e7590efSmrg# Quote VALUE and append to the end of shell variable VAR, separated
8524e7590efSmrg# by a space.
8534e7590efSmrgfunc_append_quoted ()
8544e7590efSmrg{
8554e7590efSmrg    func_quote_for_eval "${2}"
8564e7590efSmrg    eval "${1}=\$${1}\\ \$func_quote_for_eval_result"
8574e7590efSmrg} # func_append_quoted may be replaced by extended shell implementation
8584e7590efSmrg
8594e7590efSmrg
8604e7590efSmrg# func_arith arithmetic-term...
8614e7590efSmrgfunc_arith ()
8624e7590efSmrg{
8634e7590efSmrg    func_arith_result=`expr "${@}"`
8644e7590efSmrg} # func_arith may be replaced by extended shell implementation
8654e7590efSmrg
8664e7590efSmrg
8674e7590efSmrg# func_len string
8684e7590efSmrg# STRING may not start with a hyphen.
8694e7590efSmrgfunc_len ()
8704e7590efSmrg{
8714e7590efSmrg    func_len_result=`expr "${1}" : ".*" 2>/dev/null || echo $max_cmd_len`
8724e7590efSmrg} # func_len may be replaced by extended shell implementation
8734e7590efSmrg
8744e7590efSmrg
8754e7590efSmrg# func_lo2o object
8764e7590efSmrgfunc_lo2o ()
8774e7590efSmrg{
8784e7590efSmrg    func_lo2o_result=`$ECHO "${1}" | $SED "$lo2o"`
8794e7590efSmrg} # func_lo2o may be replaced by extended shell implementation
8804e7590efSmrg
8814e7590efSmrg
8824e7590efSmrg# func_xform libobj-or-source
8834e7590efSmrgfunc_xform ()
8844e7590efSmrg{
8854e7590efSmrg    func_xform_result=`$ECHO "${1}" | $SED 's/\.[^.]*$/.lo/'`
8864e7590efSmrg} # func_xform may be replaced by extended shell implementation
8874e7590efSmrg
8884e7590efSmrg
88949dc963fSmrg# func_fatal_configuration arg...
89049dc963fSmrg# Echo program name prefixed message to standard error, followed by
89149dc963fSmrg# a configuration failure hint, and exit.
89249dc963fSmrgfunc_fatal_configuration ()
89349dc963fSmrg{
89449dc963fSmrg    func_error ${1+"$@"}
89549dc963fSmrg    func_error "See the $PACKAGE documentation for more information."
89649dc963fSmrg    func_fatal_error "Fatal configuration error."
89749dc963fSmrg}
8984b0ead49Smrg
89952b01e16Smrg
90049dc963fSmrg# func_config
90149dc963fSmrg# Display the configuration for all the tags in this script.
90249dc963fSmrgfunc_config ()
90349dc963fSmrg{
90449dc963fSmrg    re_begincf='^# ### BEGIN LIBTOOL'
90549dc963fSmrg    re_endcf='^# ### END LIBTOOL'
90649dc963fSmrg
90749dc963fSmrg    # Default configuration.
90849dc963fSmrg    $SED "1,/$re_begincf CONFIG/d;/$re_endcf CONFIG/,\$d" < "$progpath"
9094b0ead49Smrg
9104b0ead49Smrg    # Now print the configurations for the tags.
9114b0ead49Smrg    for tagname in $taglist; do
91249dc963fSmrg      $SED -n "/$re_begincf TAG CONFIG: $tagname\$/,/$re_endcf TAG CONFIG: $tagname\$/p" < "$progpath"
9134b0ead49Smrg    done
9144b0ead49Smrg
91549dc963fSmrg    exit $?
91649dc963fSmrg}
9174b0ead49Smrg
91849dc963fSmrg# func_features
91949dc963fSmrg# Display the features supported by this script.
92049dc963fSmrgfunc_features ()
92149dc963fSmrg{
9227aa89044Smrg    echo "host: $host"
9234b0ead49Smrg    if test "$build_libtool_libs" = yes; then
9247aa89044Smrg      echo "enable shared libraries"
9254b0ead49Smrg    else
9267aa89044Smrg      echo "disable shared libraries"
9274b0ead49Smrg    fi
9284b0ead49Smrg    if test "$build_old_libs" = yes; then
9297aa89044Smrg      echo "enable static libraries"
9304b0ead49Smrg    else
9317aa89044Smrg      echo "disable static libraries"
9324b0ead49Smrg    fi
93349dc963fSmrg
9344b0ead49Smrg    exit $?
93549dc963fSmrg}
9364b0ead49Smrg
93749dc963fSmrg# func_enable_tag tagname
93849dc963fSmrg# Verify that TAGNAME is valid, and either flag an error and exit, or
93949dc963fSmrg# enable the TAGNAME tag.  We also add TAGNAME to the global $taglist
94049dc963fSmrg# variable here.
94149dc963fSmrgfunc_enable_tag ()
94249dc963fSmrg{
94349dc963fSmrg  # Global variable:
94449dc963fSmrg  tagname="$1"
9454b0ead49Smrg
94649dc963fSmrg  re_begincf="^# ### BEGIN LIBTOOL TAG CONFIG: $tagname\$"
94749dc963fSmrg  re_endcf="^# ### END LIBTOOL TAG CONFIG: $tagname\$"
94849dc963fSmrg  sed_extractcf="/$re_begincf/,/$re_endcf/p"
9494b0ead49Smrg
95049dc963fSmrg  # Validate tagname.
95149dc963fSmrg  case $tagname in
95249dc963fSmrg    *[!-_A-Za-z0-9,/]*)
95349dc963fSmrg      func_fatal_error "invalid tag name: $tagname"
95449dc963fSmrg      ;;
95549dc963fSmrg  esac
9564b0ead49Smrg
95749dc963fSmrg  # Don't test for the "default" C tag, as we know it's
95849dc963fSmrg  # there but not specially marked.
95949dc963fSmrg  case $tagname in
96049dc963fSmrg    CC) ;;
96149dc963fSmrg    *)
96249dc963fSmrg      if $GREP "$re_begincf" "$progpath" >/dev/null 2>&1; then
96349dc963fSmrg	taglist="$taglist $tagname"
96449dc963fSmrg
96549dc963fSmrg	# Evaluate the configuration.  Be careful to quote the path
96649dc963fSmrg	# and the sed script, to avoid splitting on whitespace, but
96749dc963fSmrg	# also don't use non-portable quotes within backquotes within
96849dc963fSmrg	# quotes we have to do it in 2 steps:
96949dc963fSmrg	extractedcf=`$SED -n -e "$sed_extractcf" < "$progpath"`
97049dc963fSmrg	eval "$extractedcf"
97149dc963fSmrg      else
97249dc963fSmrg	func_error "ignoring unknown tag $tagname"
97349dc963fSmrg      fi
97449dc963fSmrg      ;;
97549dc963fSmrg  esac
97649dc963fSmrg}
97749dc963fSmrg
9784e7590efSmrg# func_check_version_match
9794e7590efSmrg# Ensure that we are using m4 macros, and libtool script from the same
9804e7590efSmrg# release of libtool.
9814e7590efSmrgfunc_check_version_match ()
98249dc963fSmrg{
9834e7590efSmrg  if test "$package_revision" != "$macro_revision"; then
9844e7590efSmrg    if test "$VERSION" != "$macro_version"; then
9854e7590efSmrg      if test -z "$macro_version"; then
9864e7590efSmrg        cat >&2 <<_LT_EOF
9874e7590efSmrg$progname: Version mismatch error.  This is $PACKAGE $VERSION, but the
9884e7590efSmrg$progname: definition of this LT_INIT comes from an older release.
9894e7590efSmrg$progname: You should recreate aclocal.m4 with macros from $PACKAGE $VERSION
9904e7590efSmrg$progname: and run autoconf again.
9914e7590efSmrg_LT_EOF
9924e7590efSmrg      else
9934e7590efSmrg        cat >&2 <<_LT_EOF
9944e7590efSmrg$progname: Version mismatch error.  This is $PACKAGE $VERSION, but the
9954e7590efSmrg$progname: definition of this LT_INIT comes from $PACKAGE $macro_version.
9964e7590efSmrg$progname: You should recreate aclocal.m4 with macros from $PACKAGE $VERSION
9974e7590efSmrg$progname: and run autoconf again.
9984e7590efSmrg_LT_EOF
9994e7590efSmrg      fi
10004e7590efSmrg    else
10014e7590efSmrg      cat >&2 <<_LT_EOF
10024e7590efSmrg$progname: Version mismatch error.  This is $PACKAGE $VERSION, revision $package_revision,
10034e7590efSmrg$progname: but the definition of this LT_INIT comes from revision $macro_revision.
10044e7590efSmrg$progname: You should recreate aclocal.m4 with macros from revision $package_revision
10054e7590efSmrg$progname: of $PACKAGE $VERSION and run autoconf again.
10064e7590efSmrg_LT_EOF
10074e7590efSmrg    fi
10084e7590efSmrg
10094e7590efSmrg    exit $EXIT_MISMATCH
10104e7590efSmrg  fi
10114e7590efSmrg}
10124e7590efSmrg
10134e7590efSmrg
10144e7590efSmrg# Shorthand for --mode=foo, only valid as the first argument
10154e7590efSmrgcase $1 in
10164e7590efSmrgclean|clea|cle|cl)
10174e7590efSmrg  shift; set dummy --mode clean ${1+"$@"}; shift
10184e7590efSmrg  ;;
10194e7590efSmrgcompile|compil|compi|comp|com|co|c)
10204e7590efSmrg  shift; set dummy --mode compile ${1+"$@"}; shift
10214e7590efSmrg  ;;
10224e7590efSmrgexecute|execut|execu|exec|exe|ex|e)
10234e7590efSmrg  shift; set dummy --mode execute ${1+"$@"}; shift
10244e7590efSmrg  ;;
10254e7590efSmrgfinish|finis|fini|fin|fi|f)
10264e7590efSmrg  shift; set dummy --mode finish ${1+"$@"}; shift
10274e7590efSmrg  ;;
10284e7590efSmrginstall|instal|insta|inst|ins|in|i)
10294e7590efSmrg  shift; set dummy --mode install ${1+"$@"}; shift
10304e7590efSmrg  ;;
10314e7590efSmrglink|lin|li|l)
10324e7590efSmrg  shift; set dummy --mode link ${1+"$@"}; shift
10334e7590efSmrg  ;;
10344e7590efSmrguninstall|uninstal|uninsta|uninst|unins|unin|uni|un|u)
10354e7590efSmrg  shift; set dummy --mode uninstall ${1+"$@"}; shift
10364e7590efSmrg  ;;
10374e7590efSmrgesac
10384e7590efSmrg
10394e7590efSmrg
10404e7590efSmrg
10414e7590efSmrg# Option defaults:
10424e7590efSmrgopt_debug=:
10434e7590efSmrgopt_dry_run=false
10444e7590efSmrgopt_config=false
10454e7590efSmrgopt_preserve_dup_deps=false
10464e7590efSmrgopt_features=false
10474e7590efSmrgopt_finish=false
10484e7590efSmrgopt_help=false
10494e7590efSmrgopt_help_all=false
10504e7590efSmrgopt_silent=:
10514e7590efSmrgopt_warning=:
10524e7590efSmrgopt_verbose=:
10534e7590efSmrgopt_silent=false
10544e7590efSmrgopt_verbose=false
10554b0ead49Smrg
10564b0ead49Smrg
10574e7590efSmrg# Parse options once, thoroughly.  This comes as soon as possible in the
10584e7590efSmrg# script to make things like `--version' happen as quickly as we can.
10594e7590efSmrg{
10604e7590efSmrg  # this just eases exit handling
10614e7590efSmrg  while test $# -gt 0; do
106249dc963fSmrg    opt="$1"
106349dc963fSmrg    shift
106449dc963fSmrg    case $opt in
10654e7590efSmrg      --debug|-x)	opt_debug='set -x'
106649dc963fSmrg			func_echo "enabling shell trace mode"
106749dc963fSmrg			$opt_debug
106849dc963fSmrg			;;
10694e7590efSmrg      --dry-run|--dryrun|-n)
10704e7590efSmrg			opt_dry_run=:
107149dc963fSmrg			;;
10724e7590efSmrg      --config)
10734e7590efSmrg			opt_config=:
10744e7590efSmrgfunc_config
10754e7590efSmrg			;;
10764e7590efSmrg      --dlopen|-dlopen)
10774e7590efSmrg			optarg="$1"
10784e7590efSmrg			opt_dlopen="${opt_dlopen+$opt_dlopen
10794e7590efSmrg}$optarg"
108049dc963fSmrg			shift
108149dc963fSmrg			;;
108249dc963fSmrg      --preserve-dup-deps)
10834e7590efSmrg			opt_preserve_dup_deps=:
10847aa89044Smrg			;;
10854e7590efSmrg      --features)
10864e7590efSmrg			opt_features=:
10874e7590efSmrgfunc_features
108849dc963fSmrg			;;
10894e7590efSmrg      --finish)
10904e7590efSmrg			opt_finish=:
10914e7590efSmrgset dummy --mode finish ${1+"$@"}; shift
10924e7590efSmrg			;;
10934e7590efSmrg      --help)
10944e7590efSmrg			opt_help=:
10954e7590efSmrg			;;
10964e7590efSmrg      --help-all)
10974e7590efSmrg			opt_help_all=:
10984e7590efSmrgopt_help=': help-all'
10994e7590efSmrg			;;
11004e7590efSmrg      --mode)
11014e7590efSmrg			test $# = 0 && func_missing_arg $opt && break
11024e7590efSmrg			optarg="$1"
11034e7590efSmrg			opt_mode="$optarg"
11044e7590efSmrgcase $optarg in
11054e7590efSmrg  # Valid mode arguments:
11064e7590efSmrg  clean|compile|execute|finish|install|link|relink|uninstall) ;;
11074e7590efSmrg
11084e7590efSmrg  # Catch anything else as an error
11094e7590efSmrg  *) func_error "invalid argument for $opt"
11104e7590efSmrg     exit_cmd=exit
11114e7590efSmrg     break
11124e7590efSmrg     ;;
11134e7590efSmrgesac
11144e7590efSmrg			shift
11154e7590efSmrg			;;
11164e7590efSmrg      --no-silent|--no-quiet)
111749dc963fSmrg			opt_silent=false
11184e7590efSmrgfunc_append preserve_args " $opt"
11197aa89044Smrg			;;
11204e7590efSmrg      --no-warning|--no-warn)
11214e7590efSmrg			opt_warning=false
11224e7590efSmrgfunc_append preserve_args " $opt"
11234e7590efSmrg			;;
11244e7590efSmrg      --no-verbose)
11257aa89044Smrg			opt_verbose=false
11264e7590efSmrgfunc_append preserve_args " $opt"
112749dc963fSmrg			;;
11284e7590efSmrg      --silent|--quiet)
11294e7590efSmrg			opt_silent=:
11304e7590efSmrgfunc_append preserve_args " $opt"
11314e7590efSmrg        opt_verbose=false
11324e7590efSmrg			;;
11334e7590efSmrg      --verbose|-v)
11344e7590efSmrg			opt_verbose=:
11354e7590efSmrgfunc_append preserve_args " $opt"
11364e7590efSmrgopt_silent=false
11374e7590efSmrg			;;
11384e7590efSmrg      --tag)
11394e7590efSmrg			test $# = 0 && func_missing_arg $opt && break
11404e7590efSmrg			optarg="$1"
11414e7590efSmrg			opt_tag="$optarg"
11424e7590efSmrgfunc_append preserve_args " $opt $optarg"
11434e7590efSmrgfunc_enable_tag "$optarg"
114449dc963fSmrg			shift
114549dc963fSmrg			;;
114649dc963fSmrg
11474e7590efSmrg      -\?|-h)		func_usage				;;
11484e7590efSmrg      --help)		func_help				;;
11494e7590efSmrg      --version)	func_version				;;
11504e7590efSmrg
115149dc963fSmrg      # Separate optargs to long options:
11524e7590efSmrg      --*=*)
11534e7590efSmrg			func_split_long_opt "$opt"
11544e7590efSmrg			set dummy "$func_split_long_opt_name" "$func_split_long_opt_arg" ${1+"$@"}
115549dc963fSmrg			shift
115649dc963fSmrg			;;
115749dc963fSmrg
11584e7590efSmrg      # Separate non-argument short options:
11594e7590efSmrg      -\?*|-h*|-n*|-v*)
11604e7590efSmrg			func_split_short_opt "$opt"
11614e7590efSmrg			set dummy "$func_split_short_opt_name" "-$func_split_short_opt_arg" ${1+"$@"}
11624e7590efSmrg			shift
116349dc963fSmrg			;;
11644e7590efSmrg
11654e7590efSmrg      --)		break					;;
11664e7590efSmrg      -*)		func_fatal_help "unrecognized option \`$opt'" ;;
11674e7590efSmrg      *)		set dummy "$opt" ${1+"$@"};	shift; break  ;;
116849dc963fSmrg    esac
116949dc963fSmrg  done
117049dc963fSmrg
11714e7590efSmrg  # Validate options:
11724e7590efSmrg
11734e7590efSmrg  # save first non-option argument
11744e7590efSmrg  if test "$#" -gt 0; then
11754e7590efSmrg    nonopt="$opt"
11764e7590efSmrg    shift
11774e7590efSmrg  fi
11784e7590efSmrg
11794e7590efSmrg  # preserve --debug
11804e7590efSmrg  test "$opt_debug" = : || func_append preserve_args " --debug"
118149dc963fSmrg
118249dc963fSmrg  case $host in
118349dc963fSmrg    *cygwin* | *mingw* | *pw32* | *cegcc*)
118449dc963fSmrg      # don't eliminate duplications in $postdeps and $predeps
118549dc963fSmrg      opt_duplicate_compiler_generated_deps=:
11864b0ead49Smrg      ;;
11874b0ead49Smrg    *)
11884e7590efSmrg      opt_duplicate_compiler_generated_deps=$opt_preserve_dup_deps
118949dc963fSmrg      ;;
119049dc963fSmrg  esac
11914b0ead49Smrg
11924e7590efSmrg  $opt_help || {
11934e7590efSmrg    # Sanity checks first:
11944e7590efSmrg    func_check_version_match
119549dc963fSmrg
11964e7590efSmrg    if test "$build_libtool_libs" != yes && test "$build_old_libs" != yes; then
11974e7590efSmrg      func_fatal_configuration "not configured to build any kind of library"
119849dc963fSmrg    fi
119949dc963fSmrg
12004e7590efSmrg    # Darwin sucks
12014e7590efSmrg    eval std_shrext=\"$shrext_cmds\"
120249dc963fSmrg
12034e7590efSmrg    # Only execute mode is allowed to have -dlopen flags.
12044e7590efSmrg    if test -n "$opt_dlopen" && test "$opt_mode" != execute; then
12054e7590efSmrg      func_error "unrecognized option \`-dlopen'"
12064e7590efSmrg      $ECHO "$help" 1>&2
12074e7590efSmrg      exit $EXIT_FAILURE
12084e7590efSmrg    fi
120949dc963fSmrg
12104e7590efSmrg    # Change the help message to a mode-specific one.
12114e7590efSmrg    generic_help="$help"
12124e7590efSmrg    help="Try \`$progname --help --mode=$opt_mode' for more information."
12134e7590efSmrg  }
121449dc963fSmrg
121549dc963fSmrg
12164e7590efSmrg  # Bail if the options were screwed
12174e7590efSmrg  $exit_cmd $EXIT_FAILURE
12184e7590efSmrg}
121949dc963fSmrg
122049dc963fSmrg
12214b0ead49Smrg
12224b0ead49Smrg
12234e7590efSmrg## ----------- ##
12244e7590efSmrg##    Main.    ##
12254e7590efSmrg## ----------- ##
12264b0ead49Smrg
122749dc963fSmrg# func_lalib_p file
122849dc963fSmrg# True iff FILE is a libtool `.la' library or `.lo' object file.
122949dc963fSmrg# This function is only a basic sanity check; it will hardly flush out
123049dc963fSmrg# determined imposters.
123149dc963fSmrgfunc_lalib_p ()
123249dc963fSmrg{
123349dc963fSmrg    test -f "$1" &&
123449dc963fSmrg      $SED -e 4q "$1" 2>/dev/null \
123549dc963fSmrg        | $GREP "^# Generated by .*$PACKAGE" > /dev/null 2>&1
123649dc963fSmrg}
12374b0ead49Smrg
123849dc963fSmrg# func_lalib_unsafe_p file
123949dc963fSmrg# True iff FILE is a libtool `.la' library or `.lo' object file.
124049dc963fSmrg# This function implements the same check as func_lalib_p without
124149dc963fSmrg# resorting to external programs.  To this end, it redirects stdin and
124249dc963fSmrg# closes it afterwards, without saving the original file descriptor.
124349dc963fSmrg# As a safety measure, use it only where a negative result would be
124449dc963fSmrg# fatal anyway.  Works if `file' does not exist.
124549dc963fSmrgfunc_lalib_unsafe_p ()
124649dc963fSmrg{
124749dc963fSmrg    lalib_p=no
124849dc963fSmrg    if test -f "$1" && test -r "$1" && exec 5<&0 <"$1"; then
124949dc963fSmrg	for lalib_p_l in 1 2 3 4
125049dc963fSmrg	do
125149dc963fSmrg	    read lalib_p_line
125249dc963fSmrg	    case "$lalib_p_line" in
125349dc963fSmrg		\#\ Generated\ by\ *$PACKAGE* ) lalib_p=yes; break;;
125449dc963fSmrg	    esac
125549dc963fSmrg	done
125649dc963fSmrg	exec 0<&5 5<&-
125749dc963fSmrg    fi
125849dc963fSmrg    test "$lalib_p" = yes
125949dc963fSmrg}
12604b0ead49Smrg
126149dc963fSmrg# func_ltwrapper_script_p file
126249dc963fSmrg# True iff FILE is a libtool wrapper script
126349dc963fSmrg# This function is only a basic sanity check; it will hardly flush out
126449dc963fSmrg# determined imposters.
126549dc963fSmrgfunc_ltwrapper_script_p ()
126649dc963fSmrg{
126749dc963fSmrg    func_lalib_p "$1"
126849dc963fSmrg}
12694b0ead49Smrg
127049dc963fSmrg# func_ltwrapper_executable_p file
127149dc963fSmrg# True iff FILE is a libtool wrapper executable
127249dc963fSmrg# This function is only a basic sanity check; it will hardly flush out
127349dc963fSmrg# determined imposters.
127449dc963fSmrgfunc_ltwrapper_executable_p ()
127549dc963fSmrg{
127649dc963fSmrg    func_ltwrapper_exec_suffix=
127749dc963fSmrg    case $1 in
127849dc963fSmrg    *.exe) ;;
127949dc963fSmrg    *) func_ltwrapper_exec_suffix=.exe ;;
128049dc963fSmrg    esac
128149dc963fSmrg    $GREP "$magic_exe" "$1$func_ltwrapper_exec_suffix" >/dev/null 2>&1
128249dc963fSmrg}
12834b0ead49Smrg
128449dc963fSmrg# func_ltwrapper_scriptname file
128549dc963fSmrg# Assumes file is an ltwrapper_executable
128649dc963fSmrg# uses $file to determine the appropriate filename for a
128749dc963fSmrg# temporary ltwrapper_script.
128849dc963fSmrgfunc_ltwrapper_scriptname ()
128949dc963fSmrg{
12904e7590efSmrg    func_dirname_and_basename "$1" "" "."
12914e7590efSmrg    func_stripname '' '.exe' "$func_basename_result"
12924e7590efSmrg    func_ltwrapper_scriptname_result="$func_dirname_result/$objdir/${func_stripname_result}_ltshwrapper"
129349dc963fSmrg}
129449dc963fSmrg
129549dc963fSmrg# func_ltwrapper_p file
129649dc963fSmrg# True iff FILE is a libtool wrapper script or wrapper executable
129749dc963fSmrg# This function is only a basic sanity check; it will hardly flush out
129849dc963fSmrg# determined imposters.
129949dc963fSmrgfunc_ltwrapper_p ()
130049dc963fSmrg{
130149dc963fSmrg    func_ltwrapper_script_p "$1" || func_ltwrapper_executable_p "$1"
130249dc963fSmrg}
130349dc963fSmrg
130449dc963fSmrg
130549dc963fSmrg# func_execute_cmds commands fail_cmd
130649dc963fSmrg# Execute tilde-delimited COMMANDS.
130749dc963fSmrg# If FAIL_CMD is given, eval that upon failure.
130849dc963fSmrg# FAIL_CMD may read-access the current command in variable CMD!
130949dc963fSmrgfunc_execute_cmds ()
131049dc963fSmrg{
131149dc963fSmrg    $opt_debug
131249dc963fSmrg    save_ifs=$IFS; IFS='~'
131349dc963fSmrg    for cmd in $1; do
131449dc963fSmrg      IFS=$save_ifs
131549dc963fSmrg      eval cmd=\"$cmd\"
131649dc963fSmrg      func_show_eval "$cmd" "${2-:}"
131749dc963fSmrg    done
131849dc963fSmrg    IFS=$save_ifs
131949dc963fSmrg}
132049dc963fSmrg
132149dc963fSmrg
132249dc963fSmrg# func_source file
132349dc963fSmrg# Source FILE, adding directory component if necessary.
132449dc963fSmrg# Note that it is not necessary on cygwin/mingw to append a dot to
132549dc963fSmrg# FILE even if both FILE and FILE.exe exist: automatic-append-.exe
132649dc963fSmrg# behavior happens only for exec(3), not for open(2)!  Also, sourcing
132749dc963fSmrg# `FILE.' does not work on cygwin managed mounts.
132849dc963fSmrgfunc_source ()
132949dc963fSmrg{
133049dc963fSmrg    $opt_debug
133149dc963fSmrg    case $1 in
133249dc963fSmrg    */* | *\\*)	. "$1" ;;
133349dc963fSmrg    *)		. "./$1" ;;
133449dc963fSmrg    esac
133549dc963fSmrg}
133649dc963fSmrg
133749dc963fSmrg
13384e7590efSmrg# func_resolve_sysroot PATH
13394e7590efSmrg# Replace a leading = in PATH with a sysroot.  Store the result into
13404e7590efSmrg# func_resolve_sysroot_result
13414e7590efSmrgfunc_resolve_sysroot ()
13424e7590efSmrg{
13434e7590efSmrg  func_resolve_sysroot_result=$1
13444e7590efSmrg  case $func_resolve_sysroot_result in
13454e7590efSmrg  =*)
13464e7590efSmrg    func_stripname '=' '' "$func_resolve_sysroot_result"
13474e7590efSmrg    func_resolve_sysroot_result=$lt_sysroot$func_stripname_result
13484e7590efSmrg    ;;
13494e7590efSmrg  esac
13504e7590efSmrg}
13514e7590efSmrg
13524e7590efSmrg# func_replace_sysroot PATH
13534e7590efSmrg# If PATH begins with the sysroot, replace it with = and
13544e7590efSmrg# store the result into func_replace_sysroot_result.
13554e7590efSmrgfunc_replace_sysroot ()
13564e7590efSmrg{
13574e7590efSmrg  case "$lt_sysroot:$1" in
13584e7590efSmrg  ?*:"$lt_sysroot"*)
13594e7590efSmrg    func_stripname "$lt_sysroot" '' "$1"
13604e7590efSmrg    func_replace_sysroot_result="=$func_stripname_result"
13614e7590efSmrg    ;;
13624e7590efSmrg  *)
13634e7590efSmrg    # Including no sysroot.
13644e7590efSmrg    func_replace_sysroot_result=$1
13654e7590efSmrg    ;;
13664e7590efSmrg  esac
13674e7590efSmrg}
13684e7590efSmrg
136949dc963fSmrg# func_infer_tag arg
137049dc963fSmrg# Infer tagged configuration to use if any are available and
137149dc963fSmrg# if one wasn't chosen via the "--tag" command line option.
137249dc963fSmrg# Only attempt this if the compiler in the base compile
137349dc963fSmrg# command doesn't match the default compiler.
137449dc963fSmrg# arg is usually of the form 'gcc ...'
137549dc963fSmrgfunc_infer_tag ()
137649dc963fSmrg{
137749dc963fSmrg    $opt_debug
137849dc963fSmrg    if test -n "$available_tags" && test -z "$tagname"; then
137949dc963fSmrg      CC_quoted=
138049dc963fSmrg      for arg in $CC; do
13814e7590efSmrg	func_append_quoted CC_quoted "$arg"
138249dc963fSmrg      done
13837aa89044Smrg      CC_expanded=`func_echo_all $CC`
13847aa89044Smrg      CC_quoted_expanded=`func_echo_all $CC_quoted`
138549dc963fSmrg      case $@ in
138649dc963fSmrg      # Blanks in the command may have been stripped by the calling shell,
138749dc963fSmrg      # but not from the CC environment variable when configure was run.
13887aa89044Smrg      " $CC "* | "$CC "* | " $CC_expanded "* | "$CC_expanded "* | \
13897aa89044Smrg      " $CC_quoted"* | "$CC_quoted "* | " $CC_quoted_expanded "* | "$CC_quoted_expanded "*) ;;
139049dc963fSmrg      # Blanks at the start of $base_compile will cause this to fail
139149dc963fSmrg      # if we don't check for them as well.
139249dc963fSmrg      *)
139349dc963fSmrg	for z in $available_tags; do
139449dc963fSmrg	  if $GREP "^# ### BEGIN LIBTOOL TAG CONFIG: $z$" < "$progpath" > /dev/null; then
139549dc963fSmrg	    # Evaluate the configuration.
139649dc963fSmrg	    eval "`${SED} -n -e '/^# ### BEGIN LIBTOOL TAG CONFIG: '$z'$/,/^# ### END LIBTOOL TAG CONFIG: '$z'$/p' < $progpath`"
139749dc963fSmrg	    CC_quoted=
139849dc963fSmrg	    for arg in $CC; do
139949dc963fSmrg	      # Double-quote args containing other shell metacharacters.
14004e7590efSmrg	      func_append_quoted CC_quoted "$arg"
140149dc963fSmrg	    done
14027aa89044Smrg	    CC_expanded=`func_echo_all $CC`
14037aa89044Smrg	    CC_quoted_expanded=`func_echo_all $CC_quoted`
140449dc963fSmrg	    case "$@ " in
14057aa89044Smrg	    " $CC "* | "$CC "* | " $CC_expanded "* | "$CC_expanded "* | \
14067aa89044Smrg	    " $CC_quoted"* | "$CC_quoted "* | " $CC_quoted_expanded "* | "$CC_quoted_expanded "*)
140749dc963fSmrg	      # The compiler in the base compile command matches
140849dc963fSmrg	      # the one in the tagged configuration.
140949dc963fSmrg	      # Assume this is the tagged configuration we want.
141049dc963fSmrg	      tagname=$z
141149dc963fSmrg	      break
141249dc963fSmrg	      ;;
141349dc963fSmrg	    esac
141449dc963fSmrg	  fi
141549dc963fSmrg	done
141649dc963fSmrg	# If $tagname still isn't set, then no tagged configuration
141749dc963fSmrg	# was found and let the user know that the "--tag" command
141849dc963fSmrg	# line option must be used.
141949dc963fSmrg	if test -z "$tagname"; then
142049dc963fSmrg	  func_echo "unable to infer tagged configuration"
142149dc963fSmrg	  func_fatal_error "specify a tag with \`--tag'"
142249dc963fSmrg#	else
142349dc963fSmrg#	  func_verbose "using $tagname tagged configuration"
142449dc963fSmrg	fi
142549dc963fSmrg	;;
142649dc963fSmrg      esac
142749dc963fSmrg    fi
142849dc963fSmrg}
142949dc963fSmrg
143049dc963fSmrg
14314e7590efSmrg
14324e7590efSmrg# func_write_libtool_object output_name pic_name nonpic_name
14334e7590efSmrg# Create a libtool object file (analogous to a ".la" file),
14344e7590efSmrg# but don't create it if we're doing a dry run.
14354e7590efSmrgfunc_write_libtool_object ()
14364e7590efSmrg{
14374e7590efSmrg    write_libobj=${1}
14384e7590efSmrg    if test "$build_libtool_libs" = yes; then
14394e7590efSmrg      write_lobj=\'${2}\'
14404e7590efSmrg    else
14414e7590efSmrg      write_lobj=none
14424e7590efSmrg    fi
14434e7590efSmrg
14444e7590efSmrg    if test "$build_old_libs" = yes; then
14454e7590efSmrg      write_oldobj=\'${3}\'
14464e7590efSmrg    else
14474e7590efSmrg      write_oldobj=none
14484e7590efSmrg    fi
14494e7590efSmrg
14504e7590efSmrg    $opt_dry_run || {
14514e7590efSmrg      cat >${write_libobj}T <<EOF
14524e7590efSmrg# $write_libobj - a libtool object file
14534e7590efSmrg# Generated by $PROGRAM (GNU $PACKAGE$TIMESTAMP) $VERSION
14544e7590efSmrg#
14554e7590efSmrg# Please DO NOT delete this file!
14564e7590efSmrg# It is necessary for linking the library.
14574e7590efSmrg
14584e7590efSmrg# Name of the PIC object.
14594e7590efSmrgpic_object=$write_lobj
14604e7590efSmrg
14614e7590efSmrg# Name of the non-PIC object
14624e7590efSmrgnon_pic_object=$write_oldobj
14634e7590efSmrg
14644e7590efSmrgEOF
14654e7590efSmrg      $MV "${write_libobj}T" "${write_libobj}"
14664e7590efSmrg    }
14674e7590efSmrg}
14684e7590efSmrg
14694e7590efSmrg
14704e7590efSmrg##################################################
14714e7590efSmrg# FILE NAME AND PATH CONVERSION HELPER FUNCTIONS #
14724e7590efSmrg##################################################
14734e7590efSmrg
14744e7590efSmrg# func_convert_core_file_wine_to_w32 ARG
14754e7590efSmrg# Helper function used by file name conversion functions when $build is *nix,
14764e7590efSmrg# and $host is mingw, cygwin, or some other w32 environment. Relies on a
14774e7590efSmrg# correctly configured wine environment available, with the winepath program
14784e7590efSmrg# in $build's $PATH.
14794e7590efSmrg#
14804e7590efSmrg# ARG is the $build file name to be converted to w32 format.
14814e7590efSmrg# Result is available in $func_convert_core_file_wine_to_w32_result, and will
14824e7590efSmrg# be empty on error (or when ARG is empty)
14834e7590efSmrgfunc_convert_core_file_wine_to_w32 ()
14844e7590efSmrg{
14854e7590efSmrg  $opt_debug
14864e7590efSmrg  func_convert_core_file_wine_to_w32_result="$1"
14874e7590efSmrg  if test -n "$1"; then
14884e7590efSmrg    # Unfortunately, winepath does not exit with a non-zero error code, so we
14894e7590efSmrg    # are forced to check the contents of stdout. On the other hand, if the
14904e7590efSmrg    # command is not found, the shell will set an exit code of 127 and print
14914e7590efSmrg    # *an error message* to stdout. So we must check for both error code of
14924e7590efSmrg    # zero AND non-empty stdout, which explains the odd construction:
14934e7590efSmrg    func_convert_core_file_wine_to_w32_tmp=`winepath -w "$1" 2>/dev/null`
14944e7590efSmrg    if test "$?" -eq 0 && test -n "${func_convert_core_file_wine_to_w32_tmp}"; then
14954e7590efSmrg      func_convert_core_file_wine_to_w32_result=`$ECHO "$func_convert_core_file_wine_to_w32_tmp" |
14964e7590efSmrg        $SED -e "$lt_sed_naive_backslashify"`
14974e7590efSmrg    else
14984e7590efSmrg      func_convert_core_file_wine_to_w32_result=
14994e7590efSmrg    fi
15004e7590efSmrg  fi
15014e7590efSmrg}
15024e7590efSmrg# end: func_convert_core_file_wine_to_w32
15034e7590efSmrg
15044e7590efSmrg
15054e7590efSmrg# func_convert_core_path_wine_to_w32 ARG
15064e7590efSmrg# Helper function used by path conversion functions when $build is *nix, and
15074e7590efSmrg# $host is mingw, cygwin, or some other w32 environment. Relies on a correctly
15084e7590efSmrg# configured wine environment available, with the winepath program in $build's
15094e7590efSmrg# $PATH. Assumes ARG has no leading or trailing path separator characters.
15104e7590efSmrg#
15114e7590efSmrg# ARG is path to be converted from $build format to win32.
15124e7590efSmrg# Result is available in $func_convert_core_path_wine_to_w32_result.
15134e7590efSmrg# Unconvertible file (directory) names in ARG are skipped; if no directory names
15144e7590efSmrg# are convertible, then the result may be empty.
15154e7590efSmrgfunc_convert_core_path_wine_to_w32 ()
15164e7590efSmrg{
15174e7590efSmrg  $opt_debug
15184e7590efSmrg  # unfortunately, winepath doesn't convert paths, only file names
15194e7590efSmrg  func_convert_core_path_wine_to_w32_result=""
15204e7590efSmrg  if test -n "$1"; then
15214e7590efSmrg    oldIFS=$IFS
15224e7590efSmrg    IFS=:
15234e7590efSmrg    for func_convert_core_path_wine_to_w32_f in $1; do
15244e7590efSmrg      IFS=$oldIFS
15254e7590efSmrg      func_convert_core_file_wine_to_w32 "$func_convert_core_path_wine_to_w32_f"
15264e7590efSmrg      if test -n "$func_convert_core_file_wine_to_w32_result" ; then
15274e7590efSmrg        if test -z "$func_convert_core_path_wine_to_w32_result"; then
15284e7590efSmrg          func_convert_core_path_wine_to_w32_result="$func_convert_core_file_wine_to_w32_result"
15294e7590efSmrg        else
15304e7590efSmrg          func_append func_convert_core_path_wine_to_w32_result ";$func_convert_core_file_wine_to_w32_result"
15314e7590efSmrg        fi
15324e7590efSmrg      fi
15334e7590efSmrg    done
15344e7590efSmrg    IFS=$oldIFS
15354e7590efSmrg  fi
15364e7590efSmrg}
15374e7590efSmrg# end: func_convert_core_path_wine_to_w32
15384e7590efSmrg
15394e7590efSmrg
15404e7590efSmrg# func_cygpath ARGS...
15414e7590efSmrg# Wrapper around calling the cygpath program via LT_CYGPATH. This is used when
15424e7590efSmrg# when (1) $build is *nix and Cygwin is hosted via a wine environment; or (2)
15434e7590efSmrg# $build is MSYS and $host is Cygwin, or (3) $build is Cygwin. In case (1) or
15444e7590efSmrg# (2), returns the Cygwin file name or path in func_cygpath_result (input
15454e7590efSmrg# file name or path is assumed to be in w32 format, as previously converted
15464e7590efSmrg# from $build's *nix or MSYS format). In case (3), returns the w32 file name
15474e7590efSmrg# or path in func_cygpath_result (input file name or path is assumed to be in
15484e7590efSmrg# Cygwin format). Returns an empty string on error.
15494e7590efSmrg#
15504e7590efSmrg# ARGS are passed to cygpath, with the last one being the file name or path to
15514e7590efSmrg# be converted.
15524e7590efSmrg#
15534e7590efSmrg# Specify the absolute *nix (or w32) name to cygpath in the LT_CYGPATH
15544e7590efSmrg# environment variable; do not put it in $PATH.
15554e7590efSmrgfunc_cygpath ()
15564e7590efSmrg{
15574e7590efSmrg  $opt_debug
15584e7590efSmrg  if test -n "$LT_CYGPATH" && test -f "$LT_CYGPATH"; then
15594e7590efSmrg    func_cygpath_result=`$LT_CYGPATH "$@" 2>/dev/null`
15604e7590efSmrg    if test "$?" -ne 0; then
15614e7590efSmrg      # on failure, ensure result is empty
15624e7590efSmrg      func_cygpath_result=
15634e7590efSmrg    fi
15644e7590efSmrg  else
15654e7590efSmrg    func_cygpath_result=
15664e7590efSmrg    func_error "LT_CYGPATH is empty or specifies non-existent file: \`$LT_CYGPATH'"
15674e7590efSmrg  fi
15684e7590efSmrg}
15694e7590efSmrg#end: func_cygpath
15704e7590efSmrg
15714e7590efSmrg
15724e7590efSmrg# func_convert_core_msys_to_w32 ARG
15734e7590efSmrg# Convert file name or path ARG from MSYS format to w32 format.  Return
15744e7590efSmrg# result in func_convert_core_msys_to_w32_result.
15754e7590efSmrgfunc_convert_core_msys_to_w32 ()
15764e7590efSmrg{
15774e7590efSmrg  $opt_debug
15784e7590efSmrg  # awkward: cmd appends spaces to result
15794e7590efSmrg  func_convert_core_msys_to_w32_result=`( cmd //c echo "$1" ) 2>/dev/null |
15804e7590efSmrg    $SED -e 's/[ ]*$//' -e "$lt_sed_naive_backslashify"`
15814e7590efSmrg}
15824e7590efSmrg#end: func_convert_core_msys_to_w32
15834e7590efSmrg
15844e7590efSmrg
15854e7590efSmrg# func_convert_file_check ARG1 ARG2
15864e7590efSmrg# Verify that ARG1 (a file name in $build format) was converted to $host
15874e7590efSmrg# format in ARG2. Otherwise, emit an error message, but continue (resetting
15884e7590efSmrg# func_to_host_file_result to ARG1).
15894e7590efSmrgfunc_convert_file_check ()
15904e7590efSmrg{
15914e7590efSmrg  $opt_debug
15924e7590efSmrg  if test -z "$2" && test -n "$1" ; then
15934e7590efSmrg    func_error "Could not determine host file name corresponding to"
15944e7590efSmrg    func_error "  \`$1'"
15954e7590efSmrg    func_error "Continuing, but uninstalled executables may not work."
15964e7590efSmrg    # Fallback:
15974e7590efSmrg    func_to_host_file_result="$1"
15984e7590efSmrg  fi
15994e7590efSmrg}
16004e7590efSmrg# end func_convert_file_check
16014e7590efSmrg
16024e7590efSmrg
16034e7590efSmrg# func_convert_path_check FROM_PATHSEP TO_PATHSEP FROM_PATH TO_PATH
16044e7590efSmrg# Verify that FROM_PATH (a path in $build format) was converted to $host
16054e7590efSmrg# format in TO_PATH. Otherwise, emit an error message, but continue, resetting
16064e7590efSmrg# func_to_host_file_result to a simplistic fallback value (see below).
16074e7590efSmrgfunc_convert_path_check ()
16084e7590efSmrg{
16094e7590efSmrg  $opt_debug
16104e7590efSmrg  if test -z "$4" && test -n "$3"; then
16114e7590efSmrg    func_error "Could not determine the host path corresponding to"
16124e7590efSmrg    func_error "  \`$3'"
16134e7590efSmrg    func_error "Continuing, but uninstalled executables may not work."
16144e7590efSmrg    # Fallback.  This is a deliberately simplistic "conversion" and
16154e7590efSmrg    # should not be "improved".  See libtool.info.
16164e7590efSmrg    if test "x$1" != "x$2"; then
16174e7590efSmrg      lt_replace_pathsep_chars="s|$1|$2|g"
16184e7590efSmrg      func_to_host_path_result=`echo "$3" |
16194e7590efSmrg        $SED -e "$lt_replace_pathsep_chars"`
16204e7590efSmrg    else
16214e7590efSmrg      func_to_host_path_result="$3"
16224e7590efSmrg    fi
16234e7590efSmrg  fi
16244e7590efSmrg}
16254e7590efSmrg# end func_convert_path_check
16264e7590efSmrg
16274e7590efSmrg
16284e7590efSmrg# func_convert_path_front_back_pathsep FRONTPAT BACKPAT REPL ORIG
16294e7590efSmrg# Modifies func_to_host_path_result by prepending REPL if ORIG matches FRONTPAT
16304e7590efSmrg# and appending REPL if ORIG matches BACKPAT.
16314e7590efSmrgfunc_convert_path_front_back_pathsep ()
16324e7590efSmrg{
16334e7590efSmrg  $opt_debug
16344e7590efSmrg  case $4 in
16354e7590efSmrg  $1 ) func_to_host_path_result="$3$func_to_host_path_result"
16364e7590efSmrg    ;;
16374e7590efSmrg  esac
16384e7590efSmrg  case $4 in
16394e7590efSmrg  $2 ) func_append func_to_host_path_result "$3"
16404e7590efSmrg    ;;
16414e7590efSmrg  esac
16424e7590efSmrg}
16434e7590efSmrg# end func_convert_path_front_back_pathsep
16444e7590efSmrg
16454e7590efSmrg
16464e7590efSmrg##################################################
16474e7590efSmrg# $build to $host FILE NAME CONVERSION FUNCTIONS #
16484e7590efSmrg##################################################
16494e7590efSmrg# invoked via `$to_host_file_cmd ARG'
16504e7590efSmrg#
16514e7590efSmrg# In each case, ARG is the path to be converted from $build to $host format.
16524e7590efSmrg# Result will be available in $func_to_host_file_result.
16534e7590efSmrg
16544e7590efSmrg
16554e7590efSmrg# func_to_host_file ARG
16564e7590efSmrg# Converts the file name ARG from $build format to $host format. Return result
16574e7590efSmrg# in func_to_host_file_result.
16584e7590efSmrgfunc_to_host_file ()
16594e7590efSmrg{
16604e7590efSmrg  $opt_debug
16614e7590efSmrg  $to_host_file_cmd "$1"
16624e7590efSmrg}
16634e7590efSmrg# end func_to_host_file
16644e7590efSmrg
16654e7590efSmrg
16664e7590efSmrg# func_to_tool_file ARG LAZY
16674e7590efSmrg# converts the file name ARG from $build format to toolchain format. Return
16684e7590efSmrg# result in func_to_tool_file_result.  If the conversion in use is listed
16694e7590efSmrg# in (the comma separated) LAZY, no conversion takes place.
16704e7590efSmrgfunc_to_tool_file ()
16714e7590efSmrg{
16724e7590efSmrg  $opt_debug
16734e7590efSmrg  case ,$2, in
16744e7590efSmrg    *,"$to_tool_file_cmd",*)
16754e7590efSmrg      func_to_tool_file_result=$1
16764e7590efSmrg      ;;
16774e7590efSmrg    *)
16784e7590efSmrg      $to_tool_file_cmd "$1"
16794e7590efSmrg      func_to_tool_file_result=$func_to_host_file_result
16804e7590efSmrg      ;;
16814e7590efSmrg  esac
16824e7590efSmrg}
16834e7590efSmrg# end func_to_tool_file
16844e7590efSmrg
16854e7590efSmrg
16864e7590efSmrg# func_convert_file_noop ARG
16874e7590efSmrg# Copy ARG to func_to_host_file_result.
16884e7590efSmrgfunc_convert_file_noop ()
16894e7590efSmrg{
16904e7590efSmrg  func_to_host_file_result="$1"
16914e7590efSmrg}
16924e7590efSmrg# end func_convert_file_noop
16934e7590efSmrg
16944e7590efSmrg
16954e7590efSmrg# func_convert_file_msys_to_w32 ARG
16964e7590efSmrg# Convert file name ARG from (mingw) MSYS to (mingw) w32 format; automatic
16974e7590efSmrg# conversion to w32 is not available inside the cwrapper.  Returns result in
16984e7590efSmrg# func_to_host_file_result.
16994e7590efSmrgfunc_convert_file_msys_to_w32 ()
17004e7590efSmrg{
17014e7590efSmrg  $opt_debug
17024e7590efSmrg  func_to_host_file_result="$1"
17034e7590efSmrg  if test -n "$1"; then
17044e7590efSmrg    func_convert_core_msys_to_w32 "$1"
17054e7590efSmrg    func_to_host_file_result="$func_convert_core_msys_to_w32_result"
17064e7590efSmrg  fi
17074e7590efSmrg  func_convert_file_check "$1" "$func_to_host_file_result"
17084e7590efSmrg}
17094e7590efSmrg# end func_convert_file_msys_to_w32
17104e7590efSmrg
17114e7590efSmrg
17124e7590efSmrg# func_convert_file_cygwin_to_w32 ARG
17134e7590efSmrg# Convert file name ARG from Cygwin to w32 format.  Returns result in
17144e7590efSmrg# func_to_host_file_result.
17154e7590efSmrgfunc_convert_file_cygwin_to_w32 ()
17164e7590efSmrg{
17174e7590efSmrg  $opt_debug
17184e7590efSmrg  func_to_host_file_result="$1"
17194e7590efSmrg  if test -n "$1"; then
17204e7590efSmrg    # because $build is cygwin, we call "the" cygpath in $PATH; no need to use
17214e7590efSmrg    # LT_CYGPATH in this case.
17224e7590efSmrg    func_to_host_file_result=`cygpath -m "$1"`
17234e7590efSmrg  fi
17244e7590efSmrg  func_convert_file_check "$1" "$func_to_host_file_result"
17254e7590efSmrg}
17264e7590efSmrg# end func_convert_file_cygwin_to_w32
17274e7590efSmrg
17284e7590efSmrg
17294e7590efSmrg# func_convert_file_nix_to_w32 ARG
17304e7590efSmrg# Convert file name ARG from *nix to w32 format.  Requires a wine environment
17314e7590efSmrg# and a working winepath. Returns result in func_to_host_file_result.
17324e7590efSmrgfunc_convert_file_nix_to_w32 ()
17334e7590efSmrg{
17344e7590efSmrg  $opt_debug
17354e7590efSmrg  func_to_host_file_result="$1"
17364e7590efSmrg  if test -n "$1"; then
17374e7590efSmrg    func_convert_core_file_wine_to_w32 "$1"
17384e7590efSmrg    func_to_host_file_result="$func_convert_core_file_wine_to_w32_result"
17394e7590efSmrg  fi
17404e7590efSmrg  func_convert_file_check "$1" "$func_to_host_file_result"
17414e7590efSmrg}
17424e7590efSmrg# end func_convert_file_nix_to_w32
17434e7590efSmrg
17444e7590efSmrg
17454e7590efSmrg# func_convert_file_msys_to_cygwin ARG
17464e7590efSmrg# Convert file name ARG from MSYS to Cygwin format.  Requires LT_CYGPATH set.
17474e7590efSmrg# Returns result in func_to_host_file_result.
17484e7590efSmrgfunc_convert_file_msys_to_cygwin ()
17494e7590efSmrg{
17504e7590efSmrg  $opt_debug
17514e7590efSmrg  func_to_host_file_result="$1"
17524e7590efSmrg  if test -n "$1"; then
17534e7590efSmrg    func_convert_core_msys_to_w32 "$1"
17544e7590efSmrg    func_cygpath -u "$func_convert_core_msys_to_w32_result"
17554e7590efSmrg    func_to_host_file_result="$func_cygpath_result"
17564e7590efSmrg  fi
17574e7590efSmrg  func_convert_file_check "$1" "$func_to_host_file_result"
17584e7590efSmrg}
17594e7590efSmrg# end func_convert_file_msys_to_cygwin
17604e7590efSmrg
17614e7590efSmrg
17624e7590efSmrg# func_convert_file_nix_to_cygwin ARG
17634e7590efSmrg# Convert file name ARG from *nix to Cygwin format.  Requires Cygwin installed
17644e7590efSmrg# in a wine environment, working winepath, and LT_CYGPATH set.  Returns result
17654e7590efSmrg# in func_to_host_file_result.
17664e7590efSmrgfunc_convert_file_nix_to_cygwin ()
17674e7590efSmrg{
17684e7590efSmrg  $opt_debug
17694e7590efSmrg  func_to_host_file_result="$1"
17704e7590efSmrg  if test -n "$1"; then
17714e7590efSmrg    # convert from *nix to w32, then use cygpath to convert from w32 to cygwin.
17724e7590efSmrg    func_convert_core_file_wine_to_w32 "$1"
17734e7590efSmrg    func_cygpath -u "$func_convert_core_file_wine_to_w32_result"
17744e7590efSmrg    func_to_host_file_result="$func_cygpath_result"
17754e7590efSmrg  fi
17764e7590efSmrg  func_convert_file_check "$1" "$func_to_host_file_result"
17774e7590efSmrg}
17784e7590efSmrg# end func_convert_file_nix_to_cygwin
17794e7590efSmrg
17804e7590efSmrg
17814e7590efSmrg#############################################
17824e7590efSmrg# $build to $host PATH CONVERSION FUNCTIONS #
17834e7590efSmrg#############################################
17844e7590efSmrg# invoked via `$to_host_path_cmd ARG'
17854e7590efSmrg#
17864e7590efSmrg# In each case, ARG is the path to be converted from $build to $host format.
17874e7590efSmrg# The result will be available in $func_to_host_path_result.
17884e7590efSmrg#
17894e7590efSmrg# Path separators are also converted from $build format to $host format.  If
17904e7590efSmrg# ARG begins or ends with a path separator character, it is preserved (but
17914e7590efSmrg# converted to $host format) on output.
17924e7590efSmrg#
17934e7590efSmrg# All path conversion functions are named using the following convention:
17944e7590efSmrg#   file name conversion function    : func_convert_file_X_to_Y ()
17954e7590efSmrg#   path conversion function         : func_convert_path_X_to_Y ()
17964e7590efSmrg# where, for any given $build/$host combination the 'X_to_Y' value is the
17974e7590efSmrg# same.  If conversion functions are added for new $build/$host combinations,
17984e7590efSmrg# the two new functions must follow this pattern, or func_init_to_host_path_cmd
17994e7590efSmrg# will break.
18004e7590efSmrg
18014e7590efSmrg
18024e7590efSmrg# func_init_to_host_path_cmd
18034e7590efSmrg# Ensures that function "pointer" variable $to_host_path_cmd is set to the
18044e7590efSmrg# appropriate value, based on the value of $to_host_file_cmd.
18054e7590efSmrgto_host_path_cmd=
18064e7590efSmrgfunc_init_to_host_path_cmd ()
18074e7590efSmrg{
18084e7590efSmrg  $opt_debug
18094e7590efSmrg  if test -z "$to_host_path_cmd"; then
18104e7590efSmrg    func_stripname 'func_convert_file_' '' "$to_host_file_cmd"
18114e7590efSmrg    to_host_path_cmd="func_convert_path_${func_stripname_result}"
18124e7590efSmrg  fi
18134e7590efSmrg}
18144e7590efSmrg
18154e7590efSmrg
18164e7590efSmrg# func_to_host_path ARG
18174e7590efSmrg# Converts the path ARG from $build format to $host format. Return result
18184e7590efSmrg# in func_to_host_path_result.
18194e7590efSmrgfunc_to_host_path ()
18204e7590efSmrg{
18214e7590efSmrg  $opt_debug
18224e7590efSmrg  func_init_to_host_path_cmd
18234e7590efSmrg  $to_host_path_cmd "$1"
18244e7590efSmrg}
18254e7590efSmrg# end func_to_host_path
18264e7590efSmrg
18274e7590efSmrg
18284e7590efSmrg# func_convert_path_noop ARG
18294e7590efSmrg# Copy ARG to func_to_host_path_result.
18304e7590efSmrgfunc_convert_path_noop ()
18314e7590efSmrg{
18324e7590efSmrg  func_to_host_path_result="$1"
18334e7590efSmrg}
18344e7590efSmrg# end func_convert_path_noop
18354e7590efSmrg
18364e7590efSmrg
18374e7590efSmrg# func_convert_path_msys_to_w32 ARG
18384e7590efSmrg# Convert path ARG from (mingw) MSYS to (mingw) w32 format; automatic
18394e7590efSmrg# conversion to w32 is not available inside the cwrapper.  Returns result in
18404e7590efSmrg# func_to_host_path_result.
18414e7590efSmrgfunc_convert_path_msys_to_w32 ()
18424e7590efSmrg{
18434e7590efSmrg  $opt_debug
18444e7590efSmrg  func_to_host_path_result="$1"
18454e7590efSmrg  if test -n "$1"; then
18464e7590efSmrg    # Remove leading and trailing path separator characters from ARG.  MSYS
18474e7590efSmrg    # behavior is inconsistent here; cygpath turns them into '.;' and ';.';
18484e7590efSmrg    # and winepath ignores them completely.
18494e7590efSmrg    func_stripname : : "$1"
18504e7590efSmrg    func_to_host_path_tmp1=$func_stripname_result
18514e7590efSmrg    func_convert_core_msys_to_w32 "$func_to_host_path_tmp1"
18524e7590efSmrg    func_to_host_path_result="$func_convert_core_msys_to_w32_result"
18534e7590efSmrg    func_convert_path_check : ";" \
18544e7590efSmrg      "$func_to_host_path_tmp1" "$func_to_host_path_result"
18554e7590efSmrg    func_convert_path_front_back_pathsep ":*" "*:" ";" "$1"
18564e7590efSmrg  fi
18574e7590efSmrg}
18584e7590efSmrg# end func_convert_path_msys_to_w32
18594e7590efSmrg
18604e7590efSmrg
18614e7590efSmrg# func_convert_path_cygwin_to_w32 ARG
18624e7590efSmrg# Convert path ARG from Cygwin to w32 format.  Returns result in
18634e7590efSmrg# func_to_host_file_result.
18644e7590efSmrgfunc_convert_path_cygwin_to_w32 ()
18654e7590efSmrg{
18664e7590efSmrg  $opt_debug
18674e7590efSmrg  func_to_host_path_result="$1"
18684e7590efSmrg  if test -n "$1"; then
18694e7590efSmrg    # See func_convert_path_msys_to_w32:
18704e7590efSmrg    func_stripname : : "$1"
18714e7590efSmrg    func_to_host_path_tmp1=$func_stripname_result
18724e7590efSmrg    func_to_host_path_result=`cygpath -m -p "$func_to_host_path_tmp1"`
18734e7590efSmrg    func_convert_path_check : ";" \
18744e7590efSmrg      "$func_to_host_path_tmp1" "$func_to_host_path_result"
18754e7590efSmrg    func_convert_path_front_back_pathsep ":*" "*:" ";" "$1"
18764e7590efSmrg  fi
18774e7590efSmrg}
18784e7590efSmrg# end func_convert_path_cygwin_to_w32
18794e7590efSmrg
18804e7590efSmrg
18814e7590efSmrg# func_convert_path_nix_to_w32 ARG
18824e7590efSmrg# Convert path ARG from *nix to w32 format.  Requires a wine environment and
18834e7590efSmrg# a working winepath.  Returns result in func_to_host_file_result.
18844e7590efSmrgfunc_convert_path_nix_to_w32 ()
188549dc963fSmrg{
18864e7590efSmrg  $opt_debug
18874e7590efSmrg  func_to_host_path_result="$1"
18884e7590efSmrg  if test -n "$1"; then
18894e7590efSmrg    # See func_convert_path_msys_to_w32:
18904e7590efSmrg    func_stripname : : "$1"
18914e7590efSmrg    func_to_host_path_tmp1=$func_stripname_result
18924e7590efSmrg    func_convert_core_path_wine_to_w32 "$func_to_host_path_tmp1"
18934e7590efSmrg    func_to_host_path_result="$func_convert_core_path_wine_to_w32_result"
18944e7590efSmrg    func_convert_path_check : ";" \
18954e7590efSmrg      "$func_to_host_path_tmp1" "$func_to_host_path_result"
18964e7590efSmrg    func_convert_path_front_back_pathsep ":*" "*:" ";" "$1"
18974e7590efSmrg  fi
18984e7590efSmrg}
18994e7590efSmrg# end func_convert_path_nix_to_w32
190049dc963fSmrg
190149dc963fSmrg
19024e7590efSmrg# func_convert_path_msys_to_cygwin ARG
19034e7590efSmrg# Convert path ARG from MSYS to Cygwin format.  Requires LT_CYGPATH set.
19044e7590efSmrg# Returns result in func_to_host_file_result.
19054e7590efSmrgfunc_convert_path_msys_to_cygwin ()
19064e7590efSmrg{
19074e7590efSmrg  $opt_debug
19084e7590efSmrg  func_to_host_path_result="$1"
19094e7590efSmrg  if test -n "$1"; then
19104e7590efSmrg    # See func_convert_path_msys_to_w32:
19114e7590efSmrg    func_stripname : : "$1"
19124e7590efSmrg    func_to_host_path_tmp1=$func_stripname_result
19134e7590efSmrg    func_convert_core_msys_to_w32 "$func_to_host_path_tmp1"
19144e7590efSmrg    func_cygpath -u -p "$func_convert_core_msys_to_w32_result"
19154e7590efSmrg    func_to_host_path_result="$func_cygpath_result"
19164e7590efSmrg    func_convert_path_check : : \
19174e7590efSmrg      "$func_to_host_path_tmp1" "$func_to_host_path_result"
19184e7590efSmrg    func_convert_path_front_back_pathsep ":*" "*:" : "$1"
19194e7590efSmrg  fi
19204e7590efSmrg}
19214e7590efSmrg# end func_convert_path_msys_to_cygwin
192249dc963fSmrg
192349dc963fSmrg
19244e7590efSmrg# func_convert_path_nix_to_cygwin ARG
19254e7590efSmrg# Convert path ARG from *nix to Cygwin format.  Requires Cygwin installed in a
19264e7590efSmrg# a wine environment, working winepath, and LT_CYGPATH set.  Returns result in
19274e7590efSmrg# func_to_host_file_result.
19284e7590efSmrgfunc_convert_path_nix_to_cygwin ()
19294e7590efSmrg{
19304e7590efSmrg  $opt_debug
19314e7590efSmrg  func_to_host_path_result="$1"
19324e7590efSmrg  if test -n "$1"; then
19334e7590efSmrg    # Remove leading and trailing path separator characters from
19344e7590efSmrg    # ARG. msys behavior is inconsistent here, cygpath turns them
19354e7590efSmrg    # into '.;' and ';.', and winepath ignores them completely.
19364e7590efSmrg    func_stripname : : "$1"
19374e7590efSmrg    func_to_host_path_tmp1=$func_stripname_result
19384e7590efSmrg    func_convert_core_path_wine_to_w32 "$func_to_host_path_tmp1"
19394e7590efSmrg    func_cygpath -u -p "$func_convert_core_path_wine_to_w32_result"
19404e7590efSmrg    func_to_host_path_result="$func_cygpath_result"
19414e7590efSmrg    func_convert_path_check : : \
19424e7590efSmrg      "$func_to_host_path_tmp1" "$func_to_host_path_result"
19434e7590efSmrg    func_convert_path_front_back_pathsep ":*" "*:" : "$1"
19444e7590efSmrg  fi
194549dc963fSmrg}
19464e7590efSmrg# end func_convert_path_nix_to_cygwin
19474e7590efSmrg
194849dc963fSmrg
194949dc963fSmrg# func_mode_compile arg...
195049dc963fSmrgfunc_mode_compile ()
195149dc963fSmrg{
195249dc963fSmrg    $opt_debug
195349dc963fSmrg    # Get the compilation command and the source file.
195449dc963fSmrg    base_compile=
195549dc963fSmrg    srcfile="$nonopt"  #  always keep a non-empty value in "srcfile"
195649dc963fSmrg    suppress_opt=yes
195749dc963fSmrg    suppress_output=
195849dc963fSmrg    arg_mode=normal
195949dc963fSmrg    libobj=
196049dc963fSmrg    later=
196149dc963fSmrg    pie_flag=
196249dc963fSmrg
196349dc963fSmrg    for arg
196449dc963fSmrg    do
196549dc963fSmrg      case $arg_mode in
196649dc963fSmrg      arg  )
196749dc963fSmrg	# do not "continue".  Instead, add this to base_compile
196849dc963fSmrg	lastarg="$arg"
196949dc963fSmrg	arg_mode=normal
197049dc963fSmrg	;;
197149dc963fSmrg
197249dc963fSmrg      target )
197349dc963fSmrg	libobj="$arg"
197449dc963fSmrg	arg_mode=normal
197549dc963fSmrg	continue
197649dc963fSmrg	;;
197749dc963fSmrg
197849dc963fSmrg      normal )
197949dc963fSmrg	# Accept any command-line options.
198049dc963fSmrg	case $arg in
198149dc963fSmrg	-o)
198249dc963fSmrg	  test -n "$libobj" && \
198349dc963fSmrg	    func_fatal_error "you cannot specify \`-o' more than once"
198449dc963fSmrg	  arg_mode=target
198549dc963fSmrg	  continue
198649dc963fSmrg	  ;;
198749dc963fSmrg
198849dc963fSmrg	-pie | -fpie | -fPIE)
19894e7590efSmrg          func_append pie_flag " $arg"
199049dc963fSmrg	  continue
199149dc963fSmrg	  ;;
199249dc963fSmrg
199349dc963fSmrg	-shared | -static | -prefer-pic | -prefer-non-pic)
19944e7590efSmrg	  func_append later " $arg"
199549dc963fSmrg	  continue
199649dc963fSmrg	  ;;
199749dc963fSmrg
199849dc963fSmrg	-no-suppress)
19994b0ead49Smrg	  suppress_opt=no
20004b0ead49Smrg	  continue
20014b0ead49Smrg	  ;;
20024b0ead49Smrg
20034b0ead49Smrg	-Xcompiler)
20044b0ead49Smrg	  arg_mode=arg  #  the next one goes into the "base_compile" arg list
20054b0ead49Smrg	  continue      #  The current "srcfile" will either be retained or
20064b0ead49Smrg	  ;;            #  replaced later.  I would guess that would be a bug.
20074b0ead49Smrg
20084b0ead49Smrg	-Wc,*)
200949dc963fSmrg	  func_stripname '-Wc,' '' "$arg"
201049dc963fSmrg	  args=$func_stripname_result
20114b0ead49Smrg	  lastarg=
20124b0ead49Smrg	  save_ifs="$IFS"; IFS=','
201349dc963fSmrg	  for arg in $args; do
20144b0ead49Smrg	    IFS="$save_ifs"
20154e7590efSmrg	    func_append_quoted lastarg "$arg"
20164b0ead49Smrg	  done
20174b0ead49Smrg	  IFS="$save_ifs"
201849dc963fSmrg	  func_stripname ' ' '' "$lastarg"
201949dc963fSmrg	  lastarg=$func_stripname_result
20204b0ead49Smrg
20214b0ead49Smrg	  # Add the arguments to base_compile.
20224e7590efSmrg	  func_append base_compile " $lastarg"
20234b0ead49Smrg	  continue
20244b0ead49Smrg	  ;;
20254b0ead49Smrg
202649dc963fSmrg	*)
20274b0ead49Smrg	  # Accept the current argument as the source file.
20284b0ead49Smrg	  # The previous "srcfile" becomes the current argument.
20294b0ead49Smrg	  #
20304b0ead49Smrg	  lastarg="$srcfile"
20314b0ead49Smrg	  srcfile="$arg"
20324b0ead49Smrg	  ;;
20334b0ead49Smrg	esac  #  case $arg
20344b0ead49Smrg	;;
20354b0ead49Smrg      esac    #  case $arg_mode
20364b0ead49Smrg
20374b0ead49Smrg      # Aesthetically quote the previous argument.
20384e7590efSmrg      func_append_quoted base_compile "$lastarg"
20394b0ead49Smrg    done # for arg
20404b0ead49Smrg
20414b0ead49Smrg    case $arg_mode in
20424b0ead49Smrg    arg)
204349dc963fSmrg      func_fatal_error "you must specify an argument for -Xcompile"
20444b0ead49Smrg      ;;
20454b0ead49Smrg    target)
204649dc963fSmrg      func_fatal_error "you must specify a target with \`-o'"
20474b0ead49Smrg      ;;
20484b0ead49Smrg    *)
20494b0ead49Smrg      # Get the name of the library object.
205049dc963fSmrg      test -z "$libobj" && {
205149dc963fSmrg	func_basename "$srcfile"
205249dc963fSmrg	libobj="$func_basename_result"
205349dc963fSmrg      }
20544b0ead49Smrg      ;;
20554b0ead49Smrg    esac
20564b0ead49Smrg
20574b0ead49Smrg    # Recognize several different file suffixes.
20584b0ead49Smrg    # If the user specifies -o file.o, it is replaced with file.lo
20594b0ead49Smrg    case $libobj in
206049dc963fSmrg    *.[cCFSifmso] | \
206149dc963fSmrg    *.ada | *.adb | *.ads | *.asm | \
206249dc963fSmrg    *.c++ | *.cc | *.ii | *.class | *.cpp | *.cxx | \
20634e7590efSmrg    *.[fF][09]? | *.for | *.java | *.go | *.obj | *.sx | *.cu | *.cup)
206449dc963fSmrg      func_xform "$libobj"
206549dc963fSmrg      libobj=$func_xform_result
206649dc963fSmrg      ;;
20674b0ead49Smrg    esac
20684b0ead49Smrg
20694b0ead49Smrg    case $libobj in
207049dc963fSmrg    *.lo) func_lo2o "$libobj"; obj=$func_lo2o_result ;;
20714b0ead49Smrg    *)
207249dc963fSmrg      func_fatal_error "cannot determine name of library object from \`$libobj'"
20734b0ead49Smrg      ;;
20744b0ead49Smrg    esac
20754b0ead49Smrg
20764b0ead49Smrg    func_infer_tag $base_compile
20774b0ead49Smrg
20784b0ead49Smrg    for arg in $later; do
20794b0ead49Smrg      case $arg in
208049dc963fSmrg      -shared)
208149dc963fSmrg	test "$build_libtool_libs" != yes && \
208249dc963fSmrg	  func_fatal_configuration "can not build a shared library"
208349dc963fSmrg	build_old_libs=no
208449dc963fSmrg	continue
208549dc963fSmrg	;;
208649dc963fSmrg
20874b0ead49Smrg      -static)
208849dc963fSmrg	build_libtool_libs=no
20894b0ead49Smrg	build_old_libs=yes
20904b0ead49Smrg	continue
20914b0ead49Smrg	;;
20924b0ead49Smrg
20934b0ead49Smrg      -prefer-pic)
20944b0ead49Smrg	pic_mode=yes
20954b0ead49Smrg	continue
20964b0ead49Smrg	;;
20974b0ead49Smrg
20984b0ead49Smrg      -prefer-non-pic)
20994b0ead49Smrg	pic_mode=no
21004b0ead49Smrg	continue
21014b0ead49Smrg	;;
21024b0ead49Smrg      esac
21034b0ead49Smrg    done
21044b0ead49Smrg
210549dc963fSmrg    func_quote_for_eval "$libobj"
210649dc963fSmrg    test "X$libobj" != "X$func_quote_for_eval_result" \
210749dc963fSmrg      && $ECHO "X$libobj" | $GREP '[]~#^*{};<>?"'"'"'	 &()|`$[]' \
210849dc963fSmrg      && func_warning "libobj name \`$libobj' may not contain shell special characters."
210949dc963fSmrg    func_dirname_and_basename "$obj" "/" ""
211049dc963fSmrg    objname="$func_basename_result"
211149dc963fSmrg    xdir="$func_dirname_result"
21124b0ead49Smrg    lobj=${xdir}$objdir/$objname
21134b0ead49Smrg
211449dc963fSmrg    test -z "$base_compile" && \
211549dc963fSmrg      func_fatal_help "you must specify a compilation command"
21164b0ead49Smrg
21174b0ead49Smrg    # Delete any leftover library objects.
21184b0ead49Smrg    if test "$build_old_libs" = yes; then
21194b0ead49Smrg      removelist="$obj $lobj $libobj ${libobj}T"
21204b0ead49Smrg    else
21214b0ead49Smrg      removelist="$lobj $libobj ${libobj}T"
21224b0ead49Smrg    fi
21234b0ead49Smrg
21244b0ead49Smrg    # On Cygwin there's no "real" PIC flag so we must build both object types
21254b0ead49Smrg    case $host_os in
212649dc963fSmrg    cygwin* | mingw* | pw32* | os2* | cegcc*)
21274b0ead49Smrg      pic_mode=default
21284b0ead49Smrg      ;;
21294b0ead49Smrg    esac
21304b0ead49Smrg    if test "$pic_mode" = no && test "$deplibs_check_method" != pass_all; then
21314b0ead49Smrg      # non-PIC code in shared libraries is not supported
21324b0ead49Smrg      pic_mode=default
21334b0ead49Smrg    fi
21344b0ead49Smrg
21354b0ead49Smrg    # Calculate the filename of the output object if compiler does
21364b0ead49Smrg    # not support -o with -c
21374b0ead49Smrg    if test "$compiler_c_o" = no; then
21387aa89044Smrg      output_obj=`$ECHO "$srcfile" | $SED 's%^.*/%%; s%\.[^.]*$%%'`.${objext}
21394b0ead49Smrg      lockfile="$output_obj.lock"
21404b0ead49Smrg    else
21414b0ead49Smrg      output_obj=
21424b0ead49Smrg      need_locks=no
21434b0ead49Smrg      lockfile=
21444b0ead49Smrg    fi
21454b0ead49Smrg
21464b0ead49Smrg    # Lock this critical section if it is needed
21474b0ead49Smrg    # We use this script file to make the link, it avoids creating a new file
21484b0ead49Smrg    if test "$need_locks" = yes; then
214949dc963fSmrg      until $opt_dry_run || ln "$progpath" "$lockfile" 2>/dev/null; do
215049dc963fSmrg	func_echo "Waiting for $lockfile to be removed"
21514b0ead49Smrg	sleep 2
21524b0ead49Smrg      done
21534b0ead49Smrg    elif test "$need_locks" = warn; then
21544b0ead49Smrg      if test -f "$lockfile"; then
215549dc963fSmrg	$ECHO "\
21564b0ead49Smrg*** ERROR, $lockfile exists and contains:
21574b0ead49Smrg`cat $lockfile 2>/dev/null`
21584b0ead49Smrg
21594b0ead49SmrgThis indicates that another process is trying to use the same
21604b0ead49Smrgtemporary object file, and libtool could not work around it because
21614b0ead49Smrgyour compiler does not support \`-c' and \`-o' together.  If you
21624b0ead49Smrgrepeat this compilation, it may succeed, by chance, but you had better
21634b0ead49Smrgavoid parallel builds (make -j) in this platform, or get a better
21644b0ead49Smrgcompiler."
21654b0ead49Smrg
216649dc963fSmrg	$opt_dry_run || $RM $removelist
21674b0ead49Smrg	exit $EXIT_FAILURE
21684b0ead49Smrg      fi
21694e7590efSmrg      func_append removelist " $output_obj"
217049dc963fSmrg      $ECHO "$srcfile" > "$lockfile"
21714b0ead49Smrg    fi
21724b0ead49Smrg
217349dc963fSmrg    $opt_dry_run || $RM $removelist
21744e7590efSmrg    func_append removelist " $lockfile"
217549dc963fSmrg    trap '$opt_dry_run || $RM $removelist; exit $EXIT_FAILURE' 1 2 15
217649dc963fSmrg
21774e7590efSmrg    func_to_tool_file "$srcfile" func_convert_file_msys_to_w32
21784e7590efSmrg    srcfile=$func_to_tool_file_result
217949dc963fSmrg    func_quote_for_eval "$srcfile"
218049dc963fSmrg    qsrcfile=$func_quote_for_eval_result
21814b0ead49Smrg
21824b0ead49Smrg    # Only build a PIC object if we are building libtool libraries.
21834b0ead49Smrg    if test "$build_libtool_libs" = yes; then
21844b0ead49Smrg      # Without this assignment, base_compile gets emptied.
21854b0ead49Smrg      fbsd_hideous_sh_bug=$base_compile
21864b0ead49Smrg
21874b0ead49Smrg      if test "$pic_mode" != no; then
21884b0ead49Smrg	command="$base_compile $qsrcfile $pic_flag"
21894b0ead49Smrg      else
21904b0ead49Smrg	# Don't build PIC code
21914b0ead49Smrg	command="$base_compile $qsrcfile"
21924b0ead49Smrg      fi
21934b0ead49Smrg
219449dc963fSmrg      func_mkdir_p "$xdir$objdir"
21954b0ead49Smrg
21964b0ead49Smrg      if test -z "$output_obj"; then
21974b0ead49Smrg	# Place PIC objects in $objdir
21984e7590efSmrg	func_append command " -o $lobj"
21994b0ead49Smrg      fi
22004b0ead49Smrg
220149dc963fSmrg      func_show_eval_locale "$command"	\
220249dc963fSmrg          'test -n "$output_obj" && $RM $removelist; exit $EXIT_FAILURE'
22034b0ead49Smrg
22044b0ead49Smrg      if test "$need_locks" = warn &&
22054b0ead49Smrg	 test "X`cat $lockfile 2>/dev/null`" != "X$srcfile"; then
220649dc963fSmrg	$ECHO "\
22074b0ead49Smrg*** ERROR, $lockfile contains:
22084b0ead49Smrg`cat $lockfile 2>/dev/null`
22094b0ead49Smrg
22104b0ead49Smrgbut it should contain:
22114b0ead49Smrg$srcfile
22124b0ead49Smrg
22134b0ead49SmrgThis indicates that another process is trying to use the same
22144b0ead49Smrgtemporary object file, and libtool could not work around it because
22154b0ead49Smrgyour compiler does not support \`-c' and \`-o' together.  If you
22164b0ead49Smrgrepeat this compilation, it may succeed, by chance, but you had better
22174b0ead49Smrgavoid parallel builds (make -j) in this platform, or get a better
22184b0ead49Smrgcompiler."
22194b0ead49Smrg
222049dc963fSmrg	$opt_dry_run || $RM $removelist
22214b0ead49Smrg	exit $EXIT_FAILURE
22224b0ead49Smrg      fi
22234b0ead49Smrg
22244b0ead49Smrg      # Just move the object if needed, then go on to compile the next one
22254b0ead49Smrg      if test -n "$output_obj" && test "X$output_obj" != "X$lobj"; then
222649dc963fSmrg	func_show_eval '$MV "$output_obj" "$lobj"' \
222749dc963fSmrg	  'error=$?; $opt_dry_run || $RM $removelist; exit $error'
22284b0ead49Smrg      fi
22294b0ead49Smrg
22304b0ead49Smrg      # Allow error messages only from the first compilation.
22314b0ead49Smrg      if test "$suppress_opt" = yes; then
223249dc963fSmrg	suppress_output=' >/dev/null 2>&1'
22334b0ead49Smrg      fi
22344b0ead49Smrg    fi
22354b0ead49Smrg
22364b0ead49Smrg    # Only build a position-dependent object if we build old libraries.
22374b0ead49Smrg    if test "$build_old_libs" = yes; then
22384b0ead49Smrg      if test "$pic_mode" != yes; then
22394b0ead49Smrg	# Don't build PIC code
224049dc963fSmrg	command="$base_compile $qsrcfile$pie_flag"
22414b0ead49Smrg      else
22424b0ead49Smrg	command="$base_compile $qsrcfile $pic_flag"
22434b0ead49Smrg      fi
22444b0ead49Smrg      if test "$compiler_c_o" = yes; then
22454e7590efSmrg	func_append command " -o $obj"
22464b0ead49Smrg      fi
22474b0ead49Smrg
22484b0ead49Smrg      # Suppress compiler output if we already did a PIC compilation.
22494e7590efSmrg      func_append command "$suppress_output"
225049dc963fSmrg      func_show_eval_locale "$command" \
225149dc963fSmrg        '$opt_dry_run || $RM $removelist; exit $EXIT_FAILURE'
22524b0ead49Smrg
22534b0ead49Smrg      if test "$need_locks" = warn &&
22544b0ead49Smrg	 test "X`cat $lockfile 2>/dev/null`" != "X$srcfile"; then
225549dc963fSmrg	$ECHO "\
22564b0ead49Smrg*** ERROR, $lockfile contains:
22574b0ead49Smrg`cat $lockfile 2>/dev/null`
22584b0ead49Smrg
22594b0ead49Smrgbut it should contain:
22604b0ead49Smrg$srcfile
22614b0ead49Smrg
22624b0ead49SmrgThis indicates that another process is trying to use the same
22634b0ead49Smrgtemporary object file, and libtool could not work around it because
22644b0ead49Smrgyour compiler does not support \`-c' and \`-o' together.  If you
22654b0ead49Smrgrepeat this compilation, it may succeed, by chance, but you had better
22664b0ead49Smrgavoid parallel builds (make -j) in this platform, or get a better
22674b0ead49Smrgcompiler."
22684b0ead49Smrg
226949dc963fSmrg	$opt_dry_run || $RM $removelist
22704b0ead49Smrg	exit $EXIT_FAILURE
22714b0ead49Smrg      fi
22724b0ead49Smrg
22734b0ead49Smrg      # Just move the object if needed
22744b0ead49Smrg      if test -n "$output_obj" && test "X$output_obj" != "X$obj"; then
227549dc963fSmrg	func_show_eval '$MV "$output_obj" "$obj"' \
227649dc963fSmrg	  'error=$?; $opt_dry_run || $RM $removelist; exit $error'
22774b0ead49Smrg      fi
22784b0ead49Smrg    fi
22794b0ead49Smrg
228049dc963fSmrg    $opt_dry_run || {
228149dc963fSmrg      func_write_libtool_object "$libobj" "$objdir/$objname" "$objname"
22824b0ead49Smrg
228349dc963fSmrg      # Unlock the critical section if it was locked
228449dc963fSmrg      if test "$need_locks" != no; then
228549dc963fSmrg	removelist=$lockfile
228649dc963fSmrg        $RM "$lockfile"
228749dc963fSmrg      fi
228849dc963fSmrg    }
22894b0ead49Smrg
22904b0ead49Smrg    exit $EXIT_SUCCESS
229149dc963fSmrg}
22924b0ead49Smrg
229349dc963fSmrg$opt_help || {
22944e7590efSmrg  test "$opt_mode" = compile && func_mode_compile ${1+"$@"}
229549dc963fSmrg}
22964b0ead49Smrg
229749dc963fSmrgfunc_mode_help ()
229849dc963fSmrg{
229949dc963fSmrg    # We need to display help for each of the modes.
23004e7590efSmrg    case $opt_mode in
230149dc963fSmrg      "")
230249dc963fSmrg        # Generic help is extracted from the usage comments
230349dc963fSmrg        # at the start of this file.
230449dc963fSmrg        func_help
230549dc963fSmrg        ;;
23064b0ead49Smrg
230749dc963fSmrg      clean)
230849dc963fSmrg        $ECHO \
230949dc963fSmrg"Usage: $progname [OPTION]... --mode=clean RM [RM-OPTION]... FILE...
23104b0ead49Smrg
231149dc963fSmrgRemove files from the build directory.
23124b0ead49Smrg
231349dc963fSmrgRM is the name of the program to use to delete files associated with each FILE
231449dc963fSmrg(typically \`/bin/rm').  RM-OPTIONS are options (such as \`-f') to be passed
231549dc963fSmrgto RM.
23164b0ead49Smrg
231749dc963fSmrgIf FILE is a libtool library, object or program, all the files associated
231849dc963fSmrgwith it are deleted. Otherwise, only FILE itself is deleted using RM."
231949dc963fSmrg        ;;
23204b0ead49Smrg
232149dc963fSmrg      compile)
232249dc963fSmrg      $ECHO \
232349dc963fSmrg"Usage: $progname [OPTION]... --mode=compile COMPILE-COMMAND... SOURCEFILE
23244b0ead49Smrg
232549dc963fSmrgCompile a source file into a libtool library object.
23264b0ead49Smrg
232749dc963fSmrgThis mode accepts the following additional options:
23284b0ead49Smrg
232949dc963fSmrg  -o OUTPUT-FILE    set the output file name to OUTPUT-FILE
233049dc963fSmrg  -no-suppress      do not suppress compiler output for multiple passes
23317aa89044Smrg  -prefer-pic       try to build PIC objects only
23327aa89044Smrg  -prefer-non-pic   try to build non-PIC objects only
233349dc963fSmrg  -shared           do not build a \`.o' file suitable for static linking
233449dc963fSmrg  -static           only build a \`.o' file suitable for static linking
23357aa89044Smrg  -Wc,FLAG          pass FLAG directly to the compiler
23364b0ead49Smrg
233749dc963fSmrgCOMPILE-COMMAND is a command to be used in creating a \`standard' object file
233849dc963fSmrgfrom the given SOURCEFILE.
23394b0ead49Smrg
234049dc963fSmrgThe output file name is determined by removing the directory component from
234149dc963fSmrgSOURCEFILE, then substituting the C source code suffix \`.c' with the
234249dc963fSmrglibrary object suffix, \`.lo'."
234349dc963fSmrg        ;;
23444b0ead49Smrg
234549dc963fSmrg      execute)
234649dc963fSmrg        $ECHO \
234749dc963fSmrg"Usage: $progname [OPTION]... --mode=execute COMMAND [ARGS]...
23484b0ead49Smrg
234949dc963fSmrgAutomatically set library path, then run a program.
23504b0ead49Smrg
235149dc963fSmrgThis mode accepts the following additional options:
23524b0ead49Smrg
235349dc963fSmrg  -dlopen FILE      add the directory containing FILE to the library path
23544b0ead49Smrg
235549dc963fSmrgThis mode sets the library path environment variable according to \`-dlopen'
235649dc963fSmrgflags.
23574b0ead49Smrg
235849dc963fSmrgIf any of the ARGS are libtool executable wrappers, then they are translated
235949dc963fSmrginto their corresponding uninstalled binary, and any of their required library
236049dc963fSmrgdirectories are added to the library path.
23614b0ead49Smrg
236249dc963fSmrgThen, COMMAND is executed, with ARGS as arguments."
236349dc963fSmrg        ;;
23644b0ead49Smrg
236549dc963fSmrg      finish)
236649dc963fSmrg        $ECHO \
236749dc963fSmrg"Usage: $progname [OPTION]... --mode=finish [LIBDIR]...
23684b0ead49Smrg
236949dc963fSmrgComplete the installation of libtool libraries.
23704b0ead49Smrg
237149dc963fSmrgEach LIBDIR is a directory that contains libtool libraries.
23724b0ead49Smrg
237349dc963fSmrgThe commands that this mode executes may require superuser privileges.  Use
237449dc963fSmrgthe \`--dry-run' option if you just want to see what would be executed."
237549dc963fSmrg        ;;
23764b0ead49Smrg
237749dc963fSmrg      install)
237849dc963fSmrg        $ECHO \
237949dc963fSmrg"Usage: $progname [OPTION]... --mode=install INSTALL-COMMAND...
23804b0ead49Smrg
238149dc963fSmrgInstall executables or libraries.
23824b0ead49Smrg
238349dc963fSmrgINSTALL-COMMAND is the installation command.  The first component should be
238449dc963fSmrgeither the \`install' or \`cp' program.
23854b0ead49Smrg
238649dc963fSmrgThe following components of INSTALL-COMMAND are treated specially:
23874b0ead49Smrg
23887aa89044Smrg  -inst-prefix-dir PREFIX-DIR  Use PREFIX-DIR as a staging area for installation
23894b0ead49Smrg
239049dc963fSmrgThe rest of the components are interpreted as arguments to that command (only
239149dc963fSmrgBSD-compatible install options are recognized)."
239249dc963fSmrg        ;;
23934b0ead49Smrg
239449dc963fSmrg      link)
239549dc963fSmrg        $ECHO \
239649dc963fSmrg"Usage: $progname [OPTION]... --mode=link LINK-COMMAND...
23974b0ead49Smrg
239849dc963fSmrgLink object files or libraries together to form another library, or to
239949dc963fSmrgcreate an executable program.
24004b0ead49Smrg
240149dc963fSmrgLINK-COMMAND is a command using the C compiler that you would use to create
240249dc963fSmrga program from several object files.
24034b0ead49Smrg
240449dc963fSmrgThe following components of LINK-COMMAND are treated specially:
24054b0ead49Smrg
240649dc963fSmrg  -all-static       do not do any dynamic linking at all
240749dc963fSmrg  -avoid-version    do not add a version suffix if possible
24087aa89044Smrg  -bindir BINDIR    specify path to binaries directory (for systems where
24097aa89044Smrg                    libraries must be found in the PATH setting at runtime)
241049dc963fSmrg  -dlopen FILE      \`-dlpreopen' FILE if it cannot be dlopened at runtime
241149dc963fSmrg  -dlpreopen FILE   link in FILE and add its symbols to lt_preloaded_symbols
241249dc963fSmrg  -export-dynamic   allow symbols from OUTPUT-FILE to be resolved with dlsym(3)
241349dc963fSmrg  -export-symbols SYMFILE
241449dc963fSmrg                    try to export only the symbols listed in SYMFILE
241549dc963fSmrg  -export-symbols-regex REGEX
241649dc963fSmrg                    try to export only the symbols matching REGEX
241749dc963fSmrg  -LLIBDIR          search LIBDIR for required installed libraries
241849dc963fSmrg  -lNAME            OUTPUT-FILE requires the installed library libNAME
241949dc963fSmrg  -module           build a library that can dlopened
242049dc963fSmrg  -no-fast-install  disable the fast-install mode
242149dc963fSmrg  -no-install       link a not-installable executable
242249dc963fSmrg  -no-undefined     declare that a library does not refer to external symbols
242349dc963fSmrg  -o OUTPUT-FILE    create OUTPUT-FILE from the specified objects
242449dc963fSmrg  -objectlist FILE  Use a list of object files found in FILE to specify objects
242549dc963fSmrg  -precious-files-regex REGEX
242649dc963fSmrg                    don't remove output files matching REGEX
242749dc963fSmrg  -release RELEASE  specify package release information
242849dc963fSmrg  -rpath LIBDIR     the created library will eventually be installed in LIBDIR
242949dc963fSmrg  -R[ ]LIBDIR       add LIBDIR to the runtime path of programs and libraries
243049dc963fSmrg  -shared           only do dynamic linking of libtool libraries
243149dc963fSmrg  -shrext SUFFIX    override the standard shared library file extension
243249dc963fSmrg  -static           do not do any dynamic linking of uninstalled libtool libraries
243349dc963fSmrg  -static-libtool-libs
243449dc963fSmrg                    do not do any dynamic linking of libtool libraries
243549dc963fSmrg  -version-info CURRENT[:REVISION[:AGE]]
243649dc963fSmrg                    specify library version info [each variable defaults to 0]
243749dc963fSmrg  -weak LIBNAME     declare that the target provides the LIBNAME interface
24387aa89044Smrg  -Wc,FLAG
24397aa89044Smrg  -Xcompiler FLAG   pass linker-specific FLAG directly to the compiler
24407aa89044Smrg  -Wl,FLAG
24417aa89044Smrg  -Xlinker FLAG     pass linker-specific FLAG directly to the linker
24427aa89044Smrg  -XCClinker FLAG   pass link-specific FLAG to the compiler driver (CC)
24434b0ead49Smrg
244449dc963fSmrgAll other options (arguments beginning with \`-') are ignored.
24454b0ead49Smrg
244649dc963fSmrgEvery other argument is treated as a filename.  Files ending in \`.la' are
244749dc963fSmrgtreated as uninstalled libtool libraries, other files are standard or library
244849dc963fSmrgobject files.
244952b01e16Smrg
245049dc963fSmrgIf the OUTPUT-FILE ends in \`.la', then a libtool library is created,
245149dc963fSmrgonly library objects (\`.lo' files) may be specified, and \`-rpath' is
245249dc963fSmrgrequired, except when creating a convenience library.
24534b0ead49Smrg
245449dc963fSmrgIf OUTPUT-FILE ends in \`.a' or \`.lib', then a standard library is created
245549dc963fSmrgusing \`ar' and \`ranlib', or on Windows using \`lib'.
24564b0ead49Smrg
245749dc963fSmrgIf OUTPUT-FILE ends in \`.lo' or \`.${objext}', then a reloadable object file
245849dc963fSmrgis created, otherwise an executable program is created."
24594b0ead49Smrg        ;;
24604b0ead49Smrg
246149dc963fSmrg      uninstall)
246249dc963fSmrg        $ECHO \
246349dc963fSmrg"Usage: $progname [OPTION]... --mode=uninstall RM [RM-OPTION]... FILE...
24644b0ead49Smrg
246549dc963fSmrgRemove libraries from an installation directory.
24664b0ead49Smrg
246749dc963fSmrgRM is the name of the program to use to delete files associated with each FILE
246849dc963fSmrg(typically \`/bin/rm').  RM-OPTIONS are options (such as \`-f') to be passed
246949dc963fSmrgto RM.
24704b0ead49Smrg
247149dc963fSmrgIf FILE is a libtool library, all the files associated with it are deleted.
247249dc963fSmrgOtherwise, only FILE itself is deleted using RM."
247349dc963fSmrg        ;;
24744b0ead49Smrg
247549dc963fSmrg      *)
24764e7590efSmrg        func_fatal_help "invalid operation mode \`$opt_mode'"
247749dc963fSmrg        ;;
247849dc963fSmrg    esac
24794b0ead49Smrg
24807aa89044Smrg    echo
248149dc963fSmrg    $ECHO "Try \`$progname --help' for more information about other modes."
248249dc963fSmrg}
24834b0ead49Smrg
24847aa89044Smrg# Now that we've collected a possible --mode arg, show help if necessary
24857aa89044Smrgif $opt_help; then
24867aa89044Smrg  if test "$opt_help" = :; then
24877aa89044Smrg    func_mode_help
24887aa89044Smrg  else
24897aa89044Smrg    {
24907aa89044Smrg      func_help noexit
24914e7590efSmrg      for opt_mode in compile link execute install finish uninstall clean; do
24927aa89044Smrg	func_mode_help
24937aa89044Smrg      done
24947aa89044Smrg    } | sed -n '1p; 2,$s/^Usage:/  or: /p'
24957aa89044Smrg    {
24967aa89044Smrg      func_help noexit
24974e7590efSmrg      for opt_mode in compile link execute install finish uninstall clean; do
24987aa89044Smrg	echo
24997aa89044Smrg	func_mode_help
25007aa89044Smrg      done
25017aa89044Smrg    } |
25027aa89044Smrg    sed '1d
25037aa89044Smrg      /^When reporting/,/^Report/{
25047aa89044Smrg	H
25057aa89044Smrg	d
25067aa89044Smrg      }
25077aa89044Smrg      $x
25087aa89044Smrg      /information about other modes/d
25097aa89044Smrg      /more detailed .*MODE/d
25107aa89044Smrg      s/^Usage:.*--mode=\([^ ]*\) .*/Description of \1 mode:/'
25117aa89044Smrg  fi
25127aa89044Smrg  exit $?
25137aa89044Smrgfi
25144b0ead49Smrg
25154b0ead49Smrg
251649dc963fSmrg# func_mode_execute arg...
251749dc963fSmrgfunc_mode_execute ()
251849dc963fSmrg{
251949dc963fSmrg    $opt_debug
252049dc963fSmrg    # The first argument is the command name.
252149dc963fSmrg    cmd="$nonopt"
252249dc963fSmrg    test -z "$cmd" && \
252349dc963fSmrg      func_fatal_help "you must specify a COMMAND"
25244b0ead49Smrg
252549dc963fSmrg    # Handle -dlopen flags immediately.
25264e7590efSmrg    for file in $opt_dlopen; do
252749dc963fSmrg      test -f "$file" \
252849dc963fSmrg	|| func_fatal_help "\`$file' is not a file"
25294b0ead49Smrg
253049dc963fSmrg      dir=
253149dc963fSmrg      case $file in
253249dc963fSmrg      *.la)
25334e7590efSmrg	func_resolve_sysroot "$file"
25344e7590efSmrg	file=$func_resolve_sysroot_result
25354e7590efSmrg
253649dc963fSmrg	# Check to see that this really is a libtool archive.
253749dc963fSmrg	func_lalib_unsafe_p "$file" \
253849dc963fSmrg	  || func_fatal_help "\`$lib' is not a valid libtool archive"
25394b0ead49Smrg
254049dc963fSmrg	# Read the libtool library.
254149dc963fSmrg	dlname=
254249dc963fSmrg	library_names=
254349dc963fSmrg	func_source "$file"
25444b0ead49Smrg
254549dc963fSmrg	# Skip this library if it cannot be dlopened.
254649dc963fSmrg	if test -z "$dlname"; then
254749dc963fSmrg	  # Warn if it was a shared library.
254849dc963fSmrg	  test -n "$library_names" && \
254949dc963fSmrg	    func_warning "\`$file' was not linked with \`-export-dynamic'"
255049dc963fSmrg	  continue
255149dc963fSmrg	fi
25524b0ead49Smrg
255349dc963fSmrg	func_dirname "$file" "" "."
255449dc963fSmrg	dir="$func_dirname_result"
25554b0ead49Smrg
255649dc963fSmrg	if test -f "$dir/$objdir/$dlname"; then
25574e7590efSmrg	  func_append dir "/$objdir"
255849dc963fSmrg	else
255949dc963fSmrg	  if test ! -f "$dir/$dlname"; then
256049dc963fSmrg	    func_fatal_error "cannot find \`$dlname' in \`$dir' or \`$dir/$objdir'"
256149dc963fSmrg	  fi
256249dc963fSmrg	fi
25634b0ead49Smrg	;;
25644b0ead49Smrg
256549dc963fSmrg      *.lo)
256649dc963fSmrg	# Just add the directory containing the .lo file.
256749dc963fSmrg	func_dirname "$file" "" "."
256849dc963fSmrg	dir="$func_dirname_result"
25694b0ead49Smrg	;;
25704b0ead49Smrg
257149dc963fSmrg      *)
257249dc963fSmrg	func_warning "\`-dlopen' is ignored for non-libtool libraries and objects"
25734b0ead49Smrg	continue
25744b0ead49Smrg	;;
257549dc963fSmrg      esac
25764b0ead49Smrg
257749dc963fSmrg      # Get the absolute pathname.
257849dc963fSmrg      absdir=`cd "$dir" && pwd`
257949dc963fSmrg      test -n "$absdir" && dir="$absdir"
25804b0ead49Smrg
258149dc963fSmrg      # Now add the directory to shlibpath_var.
258249dc963fSmrg      if eval "test -z \"\$$shlibpath_var\""; then
258349dc963fSmrg	eval "$shlibpath_var=\"\$dir\""
258449dc963fSmrg      else
258549dc963fSmrg	eval "$shlibpath_var=\"\$dir:\$$shlibpath_var\""
258649dc963fSmrg      fi
258749dc963fSmrg    done
25884b0ead49Smrg
258949dc963fSmrg    # This variable tells wrapper scripts just to set shlibpath_var
259049dc963fSmrg    # rather than running their programs.
259149dc963fSmrg    libtool_execute_magic="$magic"
25924b0ead49Smrg
259349dc963fSmrg    # Check if any of the arguments is a wrapper script.
259449dc963fSmrg    args=
259549dc963fSmrg    for file
259649dc963fSmrg    do
259749dc963fSmrg      case $file in
25987aa89044Smrg      -* | *.la | *.lo ) ;;
259949dc963fSmrg      *)
260049dc963fSmrg	# Do a test to see if this is really a libtool program.
260149dc963fSmrg	if func_ltwrapper_script_p "$file"; then
260249dc963fSmrg	  func_source "$file"
260349dc963fSmrg	  # Transform arg to wrapped name.
260449dc963fSmrg	  file="$progdir/$program"
260549dc963fSmrg	elif func_ltwrapper_executable_p "$file"; then
260649dc963fSmrg	  func_ltwrapper_scriptname "$file"
260749dc963fSmrg	  func_source "$func_ltwrapper_scriptname_result"
260849dc963fSmrg	  # Transform arg to wrapped name.
260949dc963fSmrg	  file="$progdir/$program"
261049dc963fSmrg	fi
261149dc963fSmrg	;;
261249dc963fSmrg      esac
261349dc963fSmrg      # Quote arguments (to preserve shell metacharacters).
26144e7590efSmrg      func_append_quoted args "$file"
261549dc963fSmrg    done
26164b0ead49Smrg
261749dc963fSmrg    if test "X$opt_dry_run" = Xfalse; then
261849dc963fSmrg      if test -n "$shlibpath_var"; then
261949dc963fSmrg	# Export the shlibpath_var.
262049dc963fSmrg	eval "export $shlibpath_var"
262149dc963fSmrg      fi
26224b0ead49Smrg
262349dc963fSmrg      # Restore saved environment variables
262449dc963fSmrg      for lt_var in LANG LANGUAGE LC_ALL LC_CTYPE LC_COLLATE LC_MESSAGES
262549dc963fSmrg      do
262649dc963fSmrg	eval "if test \"\${save_$lt_var+set}\" = set; then
262749dc963fSmrg                $lt_var=\$save_$lt_var; export $lt_var
26284b0ead49Smrg	      else
262949dc963fSmrg		$lt_unset $lt_var
263049dc963fSmrg	      fi"
263149dc963fSmrg      done
26324b0ead49Smrg
263349dc963fSmrg      # Now prepare to actually exec the command.
263449dc963fSmrg      exec_cmd="\$cmd$args"
263549dc963fSmrg    else
263649dc963fSmrg      # Display what would be done.
263749dc963fSmrg      if test -n "$shlibpath_var"; then
263849dc963fSmrg	eval "\$ECHO \"\$shlibpath_var=\$$shlibpath_var\""
26397aa89044Smrg	echo "export $shlibpath_var"
264049dc963fSmrg      fi
264149dc963fSmrg      $ECHO "$cmd$args"
264249dc963fSmrg      exit $EXIT_SUCCESS
264349dc963fSmrg    fi
264449dc963fSmrg}
26454b0ead49Smrg
26464e7590efSmrgtest "$opt_mode" = execute && func_mode_execute ${1+"$@"}
26474b0ead49Smrg
26484b0ead49Smrg
264949dc963fSmrg# func_mode_finish arg...
265049dc963fSmrgfunc_mode_finish ()
265149dc963fSmrg{
265249dc963fSmrg    $opt_debug
26534e7590efSmrg    libs=
26544e7590efSmrg    libdirs=
265549dc963fSmrg    admincmds=
26564b0ead49Smrg
26574e7590efSmrg    for opt in "$nonopt" ${1+"$@"}
26584e7590efSmrg    do
26594e7590efSmrg      if test -d "$opt"; then
26604e7590efSmrg	func_append libdirs " $opt"
26614e7590efSmrg
26624e7590efSmrg      elif test -f "$opt"; then
26634e7590efSmrg	if func_lalib_unsafe_p "$opt"; then
26644e7590efSmrg	  func_append libs " $opt"
26654e7590efSmrg	else
26664e7590efSmrg	  func_warning "\`$opt' is not a valid libtool archive"
26674e7590efSmrg	fi
26684e7590efSmrg
26694e7590efSmrg      else
26704e7590efSmrg	func_fatal_error "invalid argument \`$opt'"
26714e7590efSmrg      fi
26724e7590efSmrg    done
26734e7590efSmrg
26744e7590efSmrg    if test -n "$libs"; then
26754e7590efSmrg      if test -n "$lt_sysroot"; then
26764e7590efSmrg        sysroot_regex=`$ECHO "$lt_sysroot" | $SED "$sed_make_literal_regex"`
26774e7590efSmrg        sysroot_cmd="s/\([ ']\)$sysroot_regex/\1/g;"
26784e7590efSmrg      else
26794e7590efSmrg        sysroot_cmd=
26804e7590efSmrg      fi
26814e7590efSmrg
26824e7590efSmrg      # Remove sysroot references
26834e7590efSmrg      if $opt_dry_run; then
26844e7590efSmrg        for lib in $libs; do
26854e7590efSmrg          echo "removing references to $lt_sysroot and \`=' prefixes from $lib"
26864e7590efSmrg        done
26874e7590efSmrg      else
26884e7590efSmrg        tmpdir=`func_mktempdir`
26894e7590efSmrg        for lib in $libs; do
26904e7590efSmrg	  sed -e "${sysroot_cmd} s/\([ ']-[LR]\)=/\1/g; s/\([ ']\)=/\1/g" $lib \
26914e7590efSmrg	    > $tmpdir/tmp-la
26924e7590efSmrg	  mv -f $tmpdir/tmp-la $lib
26934e7590efSmrg	done
26944e7590efSmrg        ${RM}r "$tmpdir"
26954e7590efSmrg      fi
26964e7590efSmrg    fi
26974b0ead49Smrg
26984e7590efSmrg    if test -n "$finish_cmds$finish_eval" && test -n "$libdirs"; then
269949dc963fSmrg      for libdir in $libdirs; do
270049dc963fSmrg	if test -n "$finish_cmds"; then
270149dc963fSmrg	  # Do each command in the finish commands.
270249dc963fSmrg	  func_execute_cmds "$finish_cmds" 'admincmds="$admincmds
270349dc963fSmrg'"$cmd"'"'
27044b0ead49Smrg	fi
270549dc963fSmrg	if test -n "$finish_eval"; then
270649dc963fSmrg	  # Do the single finish_eval.
270749dc963fSmrg	  eval cmds=\"$finish_eval\"
27084e7590efSmrg	  $opt_dry_run || eval "$cmds" || func_append admincmds "
270949dc963fSmrg       $cmds"
271049dc963fSmrg	fi
271149dc963fSmrg      done
271249dc963fSmrg    fi
27134b0ead49Smrg
271449dc963fSmrg    # Exit here if they wanted silent mode.
271549dc963fSmrg    $opt_silent && exit $EXIT_SUCCESS
27164b0ead49Smrg
27174e7590efSmrg    if test -n "$finish_cmds$finish_eval" && test -n "$libdirs"; then
27184e7590efSmrg      echo "----------------------------------------------------------------------"
27194e7590efSmrg      echo "Libraries have been installed in:"
27204e7590efSmrg      for libdir in $libdirs; do
27214e7590efSmrg	$ECHO "   $libdir"
27224e7590efSmrg      done
27234e7590efSmrg      echo
27244e7590efSmrg      echo "If you ever happen to want to link against installed libraries"
27254e7590efSmrg      echo "in a given directory, LIBDIR, you must either use libtool, and"
27264e7590efSmrg      echo "specify the full pathname of the library, or use the \`-LLIBDIR'"
27274e7590efSmrg      echo "flag during linking and do at least one of the following:"
27284e7590efSmrg      if test -n "$shlibpath_var"; then
27294e7590efSmrg	echo "   - add LIBDIR to the \`$shlibpath_var' environment variable"
27304e7590efSmrg	echo "     during execution"
27314e7590efSmrg      fi
27324e7590efSmrg      if test -n "$runpath_var"; then
27334e7590efSmrg	echo "   - add LIBDIR to the \`$runpath_var' environment variable"
27344e7590efSmrg	echo "     during linking"
27354e7590efSmrg      fi
27364e7590efSmrg      if test -n "$hardcode_libdir_flag_spec"; then
27374e7590efSmrg	libdir=LIBDIR
27384e7590efSmrg	eval flag=\"$hardcode_libdir_flag_spec\"
273949dc963fSmrg
27404e7590efSmrg	$ECHO "   - use the \`$flag' linker flag"
27414e7590efSmrg      fi
27424e7590efSmrg      if test -n "$admincmds"; then
27434e7590efSmrg	$ECHO "   - have your system administrator run these commands:$admincmds"
27444e7590efSmrg      fi
27454e7590efSmrg      if test -f /etc/ld.so.conf; then
27464e7590efSmrg	echo "   - have your system administrator add LIBDIR to \`/etc/ld.so.conf'"
27474e7590efSmrg      fi
27484e7590efSmrg      echo
274949dc963fSmrg
27504e7590efSmrg      echo "See any operating system documentation about shared libraries for"
27514e7590efSmrg      case $host in
27524e7590efSmrg	solaris2.[6789]|solaris2.1[0-9])
27534e7590efSmrg	  echo "more information, such as the ld(1), crle(1) and ld.so(8) manual"
27544e7590efSmrg	  echo "pages."
27554e7590efSmrg	  ;;
27564e7590efSmrg	*)
27574e7590efSmrg	  echo "more information, such as the ld(1) and ld.so(8) manual pages."
27584e7590efSmrg	  ;;
27594e7590efSmrg      esac
27604e7590efSmrg      echo "----------------------------------------------------------------------"
27614e7590efSmrg    fi
276249dc963fSmrg    exit $EXIT_SUCCESS
276349dc963fSmrg}
276449dc963fSmrg
27654e7590efSmrgtest "$opt_mode" = finish && func_mode_finish ${1+"$@"}
276649dc963fSmrg
276749dc963fSmrg
276849dc963fSmrg# func_mode_install arg...
276949dc963fSmrgfunc_mode_install ()
277049dc963fSmrg{
277149dc963fSmrg    $opt_debug
277249dc963fSmrg    # There may be an optional sh(1) argument at the beginning of
277349dc963fSmrg    # install_prog (especially on Windows NT).
277449dc963fSmrg    if test "$nonopt" = "$SHELL" || test "$nonopt" = /bin/sh ||
277549dc963fSmrg       # Allow the use of GNU shtool's install command.
27767aa89044Smrg       case $nonopt in *shtool*) :;; *) false;; esac; then
277749dc963fSmrg      # Aesthetically quote it.
277849dc963fSmrg      func_quote_for_eval "$nonopt"
277949dc963fSmrg      install_prog="$func_quote_for_eval_result "
278049dc963fSmrg      arg=$1
278149dc963fSmrg      shift
278249dc963fSmrg    else
278349dc963fSmrg      install_prog=
278449dc963fSmrg      arg=$nonopt
278549dc963fSmrg    fi
278649dc963fSmrg
278749dc963fSmrg    # The real first argument should be the name of the installation program.
278849dc963fSmrg    # Aesthetically quote it.
278949dc963fSmrg    func_quote_for_eval "$arg"
27904e7590efSmrg    func_append install_prog "$func_quote_for_eval_result"
27917aa89044Smrg    install_shared_prog=$install_prog
27927aa89044Smrg    case " $install_prog " in
27937aa89044Smrg      *[\\\ /]cp\ *) install_cp=: ;;
27947aa89044Smrg      *) install_cp=false ;;
27957aa89044Smrg    esac
279649dc963fSmrg
279749dc963fSmrg    # We need to accept at least all the BSD install flags.
279849dc963fSmrg    dest=
279949dc963fSmrg    files=
280049dc963fSmrg    opts=
280149dc963fSmrg    prev=
280249dc963fSmrg    install_type=
280349dc963fSmrg    isdir=no
280449dc963fSmrg    stripme=
28057aa89044Smrg    no_mode=:
280649dc963fSmrg    for arg
280749dc963fSmrg    do
28087aa89044Smrg      arg2=
280949dc963fSmrg      if test -n "$dest"; then
28104e7590efSmrg	func_append files " $dest"
281149dc963fSmrg	dest=$arg
281249dc963fSmrg	continue
281349dc963fSmrg      fi
281449dc963fSmrg
281549dc963fSmrg      case $arg in
281649dc963fSmrg      -d) isdir=yes ;;
281749dc963fSmrg      -f)
28187aa89044Smrg	if $install_cp; then :; else
28197aa89044Smrg	  prev=$arg
28207aa89044Smrg	fi
282149dc963fSmrg	;;
282249dc963fSmrg      -g | -m | -o)
282349dc963fSmrg	prev=$arg
282449dc963fSmrg	;;
282549dc963fSmrg      -s)
282649dc963fSmrg	stripme=" -s"
282749dc963fSmrg	continue
282849dc963fSmrg	;;
282949dc963fSmrg      -*)
283049dc963fSmrg	;;
283149dc963fSmrg      *)
283249dc963fSmrg	# If the previous option needed an argument, then skip it.
283349dc963fSmrg	if test -n "$prev"; then
28347aa89044Smrg	  if test "x$prev" = x-m && test -n "$install_override_mode"; then
28357aa89044Smrg	    arg2=$install_override_mode
28367aa89044Smrg	    no_mode=false
28377aa89044Smrg	  fi
28384b0ead49Smrg	  prev=
28394b0ead49Smrg	else
284049dc963fSmrg	  dest=$arg
284149dc963fSmrg	  continue
28424b0ead49Smrg	fi
28434b0ead49Smrg	;;
284449dc963fSmrg      esac
28454b0ead49Smrg
284649dc963fSmrg      # Aesthetically quote the argument.
284749dc963fSmrg      func_quote_for_eval "$arg"
28484e7590efSmrg      func_append install_prog " $func_quote_for_eval_result"
28497aa89044Smrg      if test -n "$arg2"; then
28507aa89044Smrg	func_quote_for_eval "$arg2"
28517aa89044Smrg      fi
28524e7590efSmrg      func_append install_shared_prog " $func_quote_for_eval_result"
285349dc963fSmrg    done
28544b0ead49Smrg
285549dc963fSmrg    test -z "$install_prog" && \
285649dc963fSmrg      func_fatal_help "you must specify an install program"
28574b0ead49Smrg
285849dc963fSmrg    test -n "$prev" && \
285949dc963fSmrg      func_fatal_help "the \`$prev' option requires an argument"
28604b0ead49Smrg
28617aa89044Smrg    if test -n "$install_override_mode" && $no_mode; then
28627aa89044Smrg      if $install_cp; then :; else
28637aa89044Smrg	func_quote_for_eval "$install_override_mode"
28644e7590efSmrg	func_append install_shared_prog " -m $func_quote_for_eval_result"
28657aa89044Smrg      fi
28667aa89044Smrg    fi
28677aa89044Smrg
286849dc963fSmrg    if test -z "$files"; then
286949dc963fSmrg      if test -z "$dest"; then
287049dc963fSmrg	func_fatal_help "no file or destination specified"
287149dc963fSmrg      else
287249dc963fSmrg	func_fatal_help "you must specify a destination"
287349dc963fSmrg      fi
28744b0ead49Smrg    fi
28754b0ead49Smrg
287649dc963fSmrg    # Strip any trailing slash from the destination.
287749dc963fSmrg    func_stripname '' '/' "$dest"
287849dc963fSmrg    dest=$func_stripname_result
28794b0ead49Smrg
288049dc963fSmrg    # Check to see that the destination is a directory.
288149dc963fSmrg    test -d "$dest" && isdir=yes
288249dc963fSmrg    if test "$isdir" = yes; then
288349dc963fSmrg      destdir="$dest"
288449dc963fSmrg      destname=
28854b0ead49Smrg    else
288649dc963fSmrg      func_dirname_and_basename "$dest" "" "."
288749dc963fSmrg      destdir="$func_dirname_result"
288849dc963fSmrg      destname="$func_basename_result"
28894b0ead49Smrg
289049dc963fSmrg      # Not a directory, so check to see that there is only one file specified.
289149dc963fSmrg      set dummy $files; shift
289249dc963fSmrg      test "$#" -gt 1 && \
289349dc963fSmrg	func_fatal_help "\`$dest' is not a directory"
28944b0ead49Smrg    fi
289549dc963fSmrg    case $destdir in
289649dc963fSmrg    [\\/]* | [A-Za-z]:[\\/]*) ;;
28974b0ead49Smrg    *)
289849dc963fSmrg      for file in $files; do
289949dc963fSmrg	case $file in
290049dc963fSmrg	*.lo) ;;
290149dc963fSmrg	*)
290249dc963fSmrg	  func_fatal_help "\`$destdir' must be an absolute directory name"
290349dc963fSmrg	  ;;
290449dc963fSmrg	esac
290549dc963fSmrg      done
29064b0ead49Smrg      ;;
29074b0ead49Smrg    esac
29084b0ead49Smrg
290949dc963fSmrg    # This variable tells wrapper scripts just to set variables rather
291049dc963fSmrg    # than running their programs.
291149dc963fSmrg    libtool_install_magic="$magic"
29124b0ead49Smrg
291349dc963fSmrg    staticlibs=
291449dc963fSmrg    future_libdirs=
291549dc963fSmrg    current_libdirs=
291649dc963fSmrg    for file in $files; do
29174b0ead49Smrg
291849dc963fSmrg      # Do each installation.
291949dc963fSmrg      case $file in
292049dc963fSmrg      *.$libext)
292149dc963fSmrg	# Do the static libraries later.
29224e7590efSmrg	func_append staticlibs " $file"
292349dc963fSmrg	;;
292449dc963fSmrg
292549dc963fSmrg      *.la)
29264e7590efSmrg	func_resolve_sysroot "$file"
29274e7590efSmrg	file=$func_resolve_sysroot_result
29284e7590efSmrg
292949dc963fSmrg	# Check to see that this really is a libtool archive.
293049dc963fSmrg	func_lalib_unsafe_p "$file" \
293149dc963fSmrg	  || func_fatal_help "\`$file' is not a valid libtool archive"
293249dc963fSmrg
293349dc963fSmrg	library_names=
293449dc963fSmrg	old_library=
293549dc963fSmrg	relink_command=
293649dc963fSmrg	func_source "$file"
293749dc963fSmrg
293849dc963fSmrg	# Add the libdir to current_libdirs if it is the destination.
293949dc963fSmrg	if test "X$destdir" = "X$libdir"; then
294049dc963fSmrg	  case "$current_libdirs " in
294149dc963fSmrg	  *" $libdir "*) ;;
29424e7590efSmrg	  *) func_append current_libdirs " $libdir" ;;
29434b0ead49Smrg	  esac
294449dc963fSmrg	else
294549dc963fSmrg	  # Note the libdir as a future libdir.
294649dc963fSmrg	  case "$future_libdirs " in
294749dc963fSmrg	  *" $libdir "*) ;;
29484e7590efSmrg	  *) func_append future_libdirs " $libdir" ;;
294949dc963fSmrg	  esac
295049dc963fSmrg	fi
29514b0ead49Smrg
295249dc963fSmrg	func_dirname "$file" "/" ""
295349dc963fSmrg	dir="$func_dirname_result"
29544e7590efSmrg	func_append dir "$objdir"
295549dc963fSmrg
295649dc963fSmrg	if test -n "$relink_command"; then
295749dc963fSmrg	  # Determine the prefix the user has applied to our future dir.
29587aa89044Smrg	  inst_prefix_dir=`$ECHO "$destdir" | $SED -e "s%$libdir\$%%"`
295949dc963fSmrg
296049dc963fSmrg	  # Don't allow the user to place us outside of our expected
296149dc963fSmrg	  # location b/c this prevents finding dependent libraries that
296249dc963fSmrg	  # are installed to the same prefix.
296349dc963fSmrg	  # At present, this check doesn't affect windows .dll's that
296449dc963fSmrg	  # are installed into $libdir/../bin (currently, that works fine)
296549dc963fSmrg	  # but it's something to keep an eye on.
296649dc963fSmrg	  test "$inst_prefix_dir" = "$destdir" && \
296749dc963fSmrg	    func_fatal_error "error: cannot install \`$file' to a directory not ending in $libdir"
296849dc963fSmrg
296949dc963fSmrg	  if test -n "$inst_prefix_dir"; then
297049dc963fSmrg	    # Stick the inst_prefix_dir data into the link command.
29717aa89044Smrg	    relink_command=`$ECHO "$relink_command" | $SED "s%@inst_prefix_dir@%-inst-prefix-dir $inst_prefix_dir%"`
297249dc963fSmrg	  else
29737aa89044Smrg	    relink_command=`$ECHO "$relink_command" | $SED "s%@inst_prefix_dir@%%"`
297449dc963fSmrg	  fi
297549dc963fSmrg
297649dc963fSmrg	  func_warning "relinking \`$file'"
297749dc963fSmrg	  func_show_eval "$relink_command" \
297849dc963fSmrg	    'func_fatal_error "error: relink \`$file'\'' with the above command before installing it"'
297949dc963fSmrg	fi
298049dc963fSmrg
298149dc963fSmrg	# See the names of the shared library.
298249dc963fSmrg	set dummy $library_names; shift
298349dc963fSmrg	if test -n "$1"; then
298449dc963fSmrg	  realname="$1"
298549dc963fSmrg	  shift
298649dc963fSmrg
298749dc963fSmrg	  srcname="$realname"
298849dc963fSmrg	  test -n "$relink_command" && srcname="$realname"T
298949dc963fSmrg
299049dc963fSmrg	  # Install the shared library and build the symlinks.
29917aa89044Smrg	  func_show_eval "$install_shared_prog $dir/$srcname $destdir/$realname" \
299249dc963fSmrg	      'exit $?'
299349dc963fSmrg	  tstripme="$stripme"
299449dc963fSmrg	  case $host_os in
299549dc963fSmrg	  cygwin* | mingw* | pw32* | cegcc*)
299649dc963fSmrg	    case $realname in
299749dc963fSmrg	    *.dll.a)
299849dc963fSmrg	      tstripme=""
299949dc963fSmrg	      ;;
300049dc963fSmrg	    esac
30014b0ead49Smrg	    ;;
30024b0ead49Smrg	  esac
300349dc963fSmrg	  if test -n "$tstripme" && test -n "$striplib"; then
300449dc963fSmrg	    func_show_eval "$striplib $destdir/$realname" 'exit $?'
30054b0ead49Smrg	  fi
300649dc963fSmrg
300749dc963fSmrg	  if test "$#" -gt 0; then
300849dc963fSmrg	    # Delete the old symlinks, and create new ones.
300949dc963fSmrg	    # Try `ln -sf' first, because the `ln' binary might depend on
301049dc963fSmrg	    # the symlink we replace!  Solaris /bin/ln does not understand -f,
301149dc963fSmrg	    # so we also need to try rm && ln -s.
301249dc963fSmrg	    for linkname
301349dc963fSmrg	    do
301449dc963fSmrg	      test "$linkname" != "$realname" \
301549dc963fSmrg		&& func_show_eval "(cd $destdir && { $LN_S -f $realname $linkname || { $RM $linkname && $LN_S $realname $linkname; }; })"
30164b0ead49Smrg	    done
30174b0ead49Smrg	  fi
30184b0ead49Smrg
301949dc963fSmrg	  # Do each command in the postinstall commands.
302049dc963fSmrg	  lib="$destdir/$realname"
302149dc963fSmrg	  func_execute_cmds "$postinstall_cmds" 'exit $?'
30224b0ead49Smrg	fi
30234b0ead49Smrg
302449dc963fSmrg	# Install the pseudo-library for information purposes.
302549dc963fSmrg	func_basename "$file"
302649dc963fSmrg	name="$func_basename_result"
302749dc963fSmrg	instname="$dir/$name"i
302849dc963fSmrg	func_show_eval "$install_prog $instname $destdir/$name" 'exit $?'
30294b0ead49Smrg
303049dc963fSmrg	# Maybe install the static library, too.
30314e7590efSmrg	test -n "$old_library" && func_append staticlibs " $dir/$old_library"
303249dc963fSmrg	;;
30334b0ead49Smrg
303449dc963fSmrg      *.lo)
303549dc963fSmrg	# Install (i.e. copy) a libtool object.
30364b0ead49Smrg
303749dc963fSmrg	# Figure out destination file name, if it wasn't already specified.
303849dc963fSmrg	if test -n "$destname"; then
303949dc963fSmrg	  destfile="$destdir/$destname"
304049dc963fSmrg	else
304149dc963fSmrg	  func_basename "$file"
304249dc963fSmrg	  destfile="$func_basename_result"
304349dc963fSmrg	  destfile="$destdir/$destfile"
30444b0ead49Smrg	fi
30454b0ead49Smrg
304649dc963fSmrg	# Deduce the name of the destination old-style object file.
304749dc963fSmrg	case $destfile in
304849dc963fSmrg	*.lo)
304949dc963fSmrg	  func_lo2o "$destfile"
305049dc963fSmrg	  staticdest=$func_lo2o_result
305149dc963fSmrg	  ;;
305249dc963fSmrg	*.$objext)
305349dc963fSmrg	  staticdest="$destfile"
305449dc963fSmrg	  destfile=
305549dc963fSmrg	  ;;
305649dc963fSmrg	*)
305749dc963fSmrg	  func_fatal_help "cannot copy a libtool object to \`$destfile'"
305849dc963fSmrg	  ;;
305949dc963fSmrg	esac
30604b0ead49Smrg
306149dc963fSmrg	# Install the libtool object if requested.
306249dc963fSmrg	test -n "$destfile" && \
306349dc963fSmrg	  func_show_eval "$install_prog $file $destfile" 'exit $?'
30644b0ead49Smrg
306549dc963fSmrg	# Install the old object if enabled.
306649dc963fSmrg	if test "$build_old_libs" = yes; then
306749dc963fSmrg	  # Deduce the name of the old-style object file.
306849dc963fSmrg	  func_lo2o "$file"
306949dc963fSmrg	  staticobj=$func_lo2o_result
307049dc963fSmrg	  func_show_eval "$install_prog \$staticobj \$staticdest" 'exit $?'
30714b0ead49Smrg	fi
307249dc963fSmrg	exit $EXIT_SUCCESS
307349dc963fSmrg	;;
30744b0ead49Smrg
307549dc963fSmrg      *)
307649dc963fSmrg	# Figure out destination file name, if it wasn't already specified.
307749dc963fSmrg	if test -n "$destname"; then
307849dc963fSmrg	  destfile="$destdir/$destname"
307949dc963fSmrg	else
308049dc963fSmrg	  func_basename "$file"
308149dc963fSmrg	  destfile="$func_basename_result"
308249dc963fSmrg	  destfile="$destdir/$destfile"
308349dc963fSmrg	fi
30844b0ead49Smrg
308549dc963fSmrg	# If the file is missing, and there is a .exe on the end, strip it
308649dc963fSmrg	# because it is most likely a libtool script we actually want to
308749dc963fSmrg	# install
308849dc963fSmrg	stripped_ext=""
308949dc963fSmrg	case $file in
309049dc963fSmrg	  *.exe)
309149dc963fSmrg	    if test ! -f "$file"; then
309249dc963fSmrg	      func_stripname '' '.exe' "$file"
309349dc963fSmrg	      file=$func_stripname_result
309449dc963fSmrg	      stripped_ext=".exe"
309549dc963fSmrg	    fi
309649dc963fSmrg	    ;;
309749dc963fSmrg	esac
309849dc963fSmrg
309949dc963fSmrg	# Do a test to see if this is really a libtool program.
310049dc963fSmrg	case $host in
310149dc963fSmrg	*cygwin* | *mingw*)
310249dc963fSmrg	    if func_ltwrapper_executable_p "$file"; then
310349dc963fSmrg	      func_ltwrapper_scriptname "$file"
310449dc963fSmrg	      wrapper=$func_ltwrapper_scriptname_result
310549dc963fSmrg	    else
310649dc963fSmrg	      func_stripname '' '.exe' "$file"
310749dc963fSmrg	      wrapper=$func_stripname_result
310849dc963fSmrg	    fi
310949dc963fSmrg	    ;;
31104b0ead49Smrg	*)
311149dc963fSmrg	    wrapper=$file
311249dc963fSmrg	    ;;
311349dc963fSmrg	esac
311449dc963fSmrg	if func_ltwrapper_script_p "$wrapper"; then
311549dc963fSmrg	  notinst_deplibs=
311649dc963fSmrg	  relink_command=
311749dc963fSmrg
311849dc963fSmrg	  func_source "$wrapper"
311949dc963fSmrg
312049dc963fSmrg	  # Check the variables that should have been set.
312149dc963fSmrg	  test -z "$generated_by_libtool_version" && \
312249dc963fSmrg	    func_fatal_error "invalid libtool wrapper script \`$wrapper'"
312349dc963fSmrg
312449dc963fSmrg	  finalize=yes
312549dc963fSmrg	  for lib in $notinst_deplibs; do
312649dc963fSmrg	    # Check to see that each library is installed.
312749dc963fSmrg	    libdir=
312849dc963fSmrg	    if test -f "$lib"; then
312949dc963fSmrg	      func_source "$lib"
313049dc963fSmrg	    fi
31317aa89044Smrg	    libfile="$libdir/"`$ECHO "$lib" | $SED 's%^.*/%%g'` ### testsuite: skip nested quoting test
313249dc963fSmrg	    if test -n "$libdir" && test ! -f "$libfile"; then
313349dc963fSmrg	      func_warning "\`$lib' has not been installed in \`$libdir'"
313449dc963fSmrg	      finalize=no
313549dc963fSmrg	    fi
313649dc963fSmrg	  done
313749dc963fSmrg
313849dc963fSmrg	  relink_command=
313949dc963fSmrg	  func_source "$wrapper"
314049dc963fSmrg
314149dc963fSmrg	  outputname=
314249dc963fSmrg	  if test "$fast_install" = no && test -n "$relink_command"; then
314349dc963fSmrg	    $opt_dry_run || {
314449dc963fSmrg	      if test "$finalize" = yes; then
314549dc963fSmrg	        tmpdir=`func_mktempdir`
314649dc963fSmrg		func_basename "$file$stripped_ext"
314749dc963fSmrg		file="$func_basename_result"
314849dc963fSmrg	        outputname="$tmpdir/$file"
314949dc963fSmrg	        # Replace the output file specification.
31507aa89044Smrg	        relink_command=`$ECHO "$relink_command" | $SED 's%@OUTPUT@%'"$outputname"'%g'`
315149dc963fSmrg
315249dc963fSmrg	        $opt_silent || {
315349dc963fSmrg	          func_quote_for_expand "$relink_command"
315449dc963fSmrg		  eval "func_echo $func_quote_for_expand_result"
315549dc963fSmrg	        }
315649dc963fSmrg	        if eval "$relink_command"; then :
315749dc963fSmrg	          else
315849dc963fSmrg		  func_error "error: relink \`$file' with the above command before installing it"
315949dc963fSmrg		  $opt_dry_run || ${RM}r "$tmpdir"
316049dc963fSmrg		  continue
316149dc963fSmrg	        fi
316249dc963fSmrg	        file="$outputname"
316349dc963fSmrg	      else
316449dc963fSmrg	        func_warning "cannot relink \`$file'"
316549dc963fSmrg	      fi
316649dc963fSmrg	    }
316749dc963fSmrg	  else
316849dc963fSmrg	    # Install the binary that we compiled earlier.
31697aa89044Smrg	    file=`$ECHO "$file$stripped_ext" | $SED "s%\([^/]*\)$%$objdir/\1%"`
31704b0ead49Smrg	  fi
317149dc963fSmrg	fi
317249dc963fSmrg
317349dc963fSmrg	# remove .exe since cygwin /usr/bin/install will append another
317449dc963fSmrg	# one anyway
317549dc963fSmrg	case $install_prog,$host in
317649dc963fSmrg	*/usr/bin/install*,*cygwin*)
317749dc963fSmrg	  case $file:$destfile in
317849dc963fSmrg	  *.exe:*.exe)
317949dc963fSmrg	    # this is ok
318049dc963fSmrg	    ;;
318149dc963fSmrg	  *.exe:*)
318249dc963fSmrg	    destfile=$destfile.exe
318349dc963fSmrg	    ;;
318449dc963fSmrg	  *:*.exe)
318549dc963fSmrg	    func_stripname '' '.exe' "$destfile"
318649dc963fSmrg	    destfile=$func_stripname_result
318749dc963fSmrg	    ;;
318849dc963fSmrg	  esac
31894b0ead49Smrg	  ;;
31904b0ead49Smrg	esac
319149dc963fSmrg	func_show_eval "$install_prog\$stripme \$file \$destfile" 'exit $?'
319249dc963fSmrg	$opt_dry_run || if test -n "$outputname"; then
319349dc963fSmrg	  ${RM}r "$tmpdir"
319449dc963fSmrg	fi
319549dc963fSmrg	;;
319649dc963fSmrg      esac
319749dc963fSmrg    done
31984b0ead49Smrg
319949dc963fSmrg    for file in $staticlibs; do
320049dc963fSmrg      func_basename "$file"
320149dc963fSmrg      name="$func_basename_result"
320249dc963fSmrg
320349dc963fSmrg      # Set up the ranlib parameters.
320449dc963fSmrg      oldlib="$destdir/$name"
32054e7590efSmrg      func_to_tool_file "$oldlib" func_convert_file_msys_to_w32
32064e7590efSmrg      tool_oldlib=$func_to_tool_file_result
320749dc963fSmrg
320849dc963fSmrg      func_show_eval "$install_prog \$file \$oldlib" 'exit $?'
320949dc963fSmrg
321049dc963fSmrg      if test -n "$stripme" && test -n "$old_striplib"; then
32114e7590efSmrg	func_show_eval "$old_striplib $tool_oldlib" 'exit $?'
321249dc963fSmrg      fi
321349dc963fSmrg
321449dc963fSmrg      # Do each command in the postinstall commands.
321549dc963fSmrg      func_execute_cmds "$old_postinstall_cmds" 'exit $?'
321649dc963fSmrg    done
321749dc963fSmrg
321849dc963fSmrg    test -n "$future_libdirs" && \
321949dc963fSmrg      func_warning "remember to run \`$progname --finish$future_libdirs'"
322049dc963fSmrg
322149dc963fSmrg    if test -n "$current_libdirs"; then
322249dc963fSmrg      # Maybe just do a dry run.
322349dc963fSmrg      $opt_dry_run && current_libdirs=" -n$current_libdirs"
322449dc963fSmrg      exec_cmd='$SHELL $progpath $preserve_args --finish$current_libdirs'
322549dc963fSmrg    else
322649dc963fSmrg      exit $EXIT_SUCCESS
322749dc963fSmrg    fi
322849dc963fSmrg}
322949dc963fSmrg
32304e7590efSmrgtest "$opt_mode" = install && func_mode_install ${1+"$@"}
323149dc963fSmrg
323249dc963fSmrg
323349dc963fSmrg# func_generate_dlsyms outputname originator pic_p
323449dc963fSmrg# Extract symbols from dlprefiles and create ${outputname}S.o with
323549dc963fSmrg# a dlpreopen symbol table.
323649dc963fSmrgfunc_generate_dlsyms ()
323749dc963fSmrg{
323849dc963fSmrg    $opt_debug
323949dc963fSmrg    my_outputname="$1"
324049dc963fSmrg    my_originator="$2"
324149dc963fSmrg    my_pic_p="${3-no}"
324249dc963fSmrg    my_prefix=`$ECHO "$my_originator" | sed 's%[^a-zA-Z0-9]%_%g'`
324349dc963fSmrg    my_dlsyms=
324449dc963fSmrg
324549dc963fSmrg    if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then
324649dc963fSmrg      if test -n "$NM" && test -n "$global_symbol_pipe"; then
324749dc963fSmrg	my_dlsyms="${my_outputname}S.c"
324849dc963fSmrg      else
324949dc963fSmrg	func_error "not configured to extract global symbols from dlpreopened files"
325049dc963fSmrg      fi
325149dc963fSmrg    fi
325249dc963fSmrg
325349dc963fSmrg    if test -n "$my_dlsyms"; then
325449dc963fSmrg      case $my_dlsyms in
325549dc963fSmrg      "") ;;
325649dc963fSmrg      *.c)
325749dc963fSmrg	# Discover the nlist of each of the dlfiles.
325849dc963fSmrg	nlist="$output_objdir/${my_outputname}.nm"
325949dc963fSmrg
326049dc963fSmrg	func_show_eval "$RM $nlist ${nlist}S ${nlist}T"
326149dc963fSmrg
326249dc963fSmrg	# Parse the name list into a source file.
326349dc963fSmrg	func_verbose "creating $output_objdir/$my_dlsyms"
326449dc963fSmrg
326549dc963fSmrg	$opt_dry_run || $ECHO > "$output_objdir/$my_dlsyms" "\
326649dc963fSmrg/* $my_dlsyms - symbol resolution table for \`$my_outputname' dlsym emulation. */
326749dc963fSmrg/* Generated by $PROGRAM (GNU $PACKAGE$TIMESTAMP) $VERSION */
326849dc963fSmrg
326949dc963fSmrg#ifdef __cplusplus
327049dc963fSmrgextern \"C\" {
327149dc963fSmrg#endif
327249dc963fSmrg
32737aa89044Smrg#if defined(__GNUC__) && (((__GNUC__ == 4) && (__GNUC_MINOR__ >= 4)) || (__GNUC__ > 4))
32747aa89044Smrg#pragma GCC diagnostic ignored \"-Wstrict-prototypes\"
32757aa89044Smrg#endif
32767aa89044Smrg
32774e7590efSmrg/* Keep this code in sync between libtool.m4, ltmain, lt_system.h, and tests.  */
32784e7590efSmrg#if defined(_WIN32) || defined(__CYGWIN__) || defined(_WIN32_WCE)
32794e7590efSmrg/* DATA imports from DLLs on WIN32 con't be const, because runtime
32804e7590efSmrg   relocations are performed -- see ld's documentation on pseudo-relocs.  */
32814e7590efSmrg# define LT_DLSYM_CONST
32824e7590efSmrg#elif defined(__osf__)
32834e7590efSmrg/* This system does not cope well with relocations in const data.  */
32844e7590efSmrg# define LT_DLSYM_CONST
32854e7590efSmrg#else
32864e7590efSmrg# define LT_DLSYM_CONST const
32874e7590efSmrg#endif
32884e7590efSmrg
328949dc963fSmrg/* External symbol declarations for the compiler. */\
329049dc963fSmrg"
329149dc963fSmrg
329249dc963fSmrg	if test "$dlself" = yes; then
329349dc963fSmrg	  func_verbose "generating symbol list for \`$output'"
329449dc963fSmrg
329549dc963fSmrg	  $opt_dry_run || echo ': @PROGRAM@ ' > "$nlist"
329649dc963fSmrg
329749dc963fSmrg	  # Add our own program objects to the symbol list.
32987aa89044Smrg	  progfiles=`$ECHO "$objs$old_deplibs" | $SP2NL | $SED "$lo2o" | $NL2SP`
329949dc963fSmrg	  for progfile in $progfiles; do
33004e7590efSmrg	    func_to_tool_file "$progfile" func_convert_file_msys_to_w32
33014e7590efSmrg	    func_verbose "extracting global C symbols from \`$func_to_tool_file_result'"
33024e7590efSmrg	    $opt_dry_run || eval "$NM $func_to_tool_file_result | $global_symbol_pipe >> '$nlist'"
330349dc963fSmrg	  done
330449dc963fSmrg
330549dc963fSmrg	  if test -n "$exclude_expsyms"; then
330649dc963fSmrg	    $opt_dry_run || {
330749dc963fSmrg	      eval '$EGREP -v " ($exclude_expsyms)$" "$nlist" > "$nlist"T'
330849dc963fSmrg	      eval '$MV "$nlist"T "$nlist"'
330949dc963fSmrg	    }
33104b0ead49Smrg	  fi
331149dc963fSmrg
331249dc963fSmrg	  if test -n "$export_symbols_regex"; then
331349dc963fSmrg	    $opt_dry_run || {
331449dc963fSmrg	      eval '$EGREP -e "$export_symbols_regex" "$nlist" > "$nlist"T'
331549dc963fSmrg	      eval '$MV "$nlist"T "$nlist"'
331649dc963fSmrg	    }
331749dc963fSmrg	  fi
331849dc963fSmrg
331949dc963fSmrg	  # Prepare the list of exported symbols
332049dc963fSmrg	  if test -z "$export_symbols"; then
332149dc963fSmrg	    export_symbols="$output_objdir/$outputname.exp"
332249dc963fSmrg	    $opt_dry_run || {
332349dc963fSmrg	      $RM $export_symbols
332449dc963fSmrg	      eval "${SED} -n -e '/^: @PROGRAM@ $/d' -e 's/^.* \(.*\)$/\1/p' "'< "$nlist" > "$export_symbols"'
332549dc963fSmrg	      case $host in
332649dc963fSmrg	      *cygwin* | *mingw* | *cegcc* )
332749dc963fSmrg                eval "echo EXPORTS "'> "$output_objdir/$outputname.def"'
332849dc963fSmrg                eval 'cat "$export_symbols" >> "$output_objdir/$outputname.def"'
332949dc963fSmrg	        ;;
333049dc963fSmrg	      esac
333149dc963fSmrg	    }
33324b0ead49Smrg	  else
333349dc963fSmrg	    $opt_dry_run || {
333449dc963fSmrg	      eval "${SED} -e 's/\([].[*^$]\)/\\\\\1/g' -e 's/^/ /' -e 's/$/$/'"' < "$export_symbols" > "$output_objdir/$outputname.exp"'
333549dc963fSmrg	      eval '$GREP -f "$output_objdir/$outputname.exp" < "$nlist" > "$nlist"T'
333649dc963fSmrg	      eval '$MV "$nlist"T "$nlist"'
333749dc963fSmrg	      case $host in
33387aa89044Smrg	        *cygwin* | *mingw* | *cegcc* )
333949dc963fSmrg	          eval "echo EXPORTS "'> "$output_objdir/$outputname.def"'
334049dc963fSmrg	          eval 'cat "$nlist" >> "$output_objdir/$outputname.def"'
334149dc963fSmrg	          ;;
334249dc963fSmrg	      esac
334349dc963fSmrg	    }
33444b0ead49Smrg	  fi
334549dc963fSmrg	fi
33464b0ead49Smrg
334749dc963fSmrg	for dlprefile in $dlprefiles; do
334849dc963fSmrg	  func_verbose "extracting global C symbols from \`$dlprefile'"
334949dc963fSmrg	  func_basename "$dlprefile"
335049dc963fSmrg	  name="$func_basename_result"
33514e7590efSmrg          case $host in
33524e7590efSmrg	    *cygwin* | *mingw* | *cegcc* )
33534e7590efSmrg	      # if an import library, we need to obtain dlname
33544e7590efSmrg	      if func_win32_import_lib_p "$dlprefile"; then
33554e7590efSmrg	        func_tr_sh "$dlprefile"
33564e7590efSmrg	        eval "curr_lafile=\$libfile_$func_tr_sh_result"
33574e7590efSmrg	        dlprefile_dlbasename=""
33584e7590efSmrg	        if test -n "$curr_lafile" && func_lalib_p "$curr_lafile"; then
33594e7590efSmrg	          # Use subshell, to avoid clobbering current variable values
33604e7590efSmrg	          dlprefile_dlname=`source "$curr_lafile" && echo "$dlname"`
33614e7590efSmrg	          if test -n "$dlprefile_dlname" ; then
33624e7590efSmrg	            func_basename "$dlprefile_dlname"
33634e7590efSmrg	            dlprefile_dlbasename="$func_basename_result"
33644e7590efSmrg	          else
33654e7590efSmrg	            # no lafile. user explicitly requested -dlpreopen <import library>.
33664e7590efSmrg	            $sharedlib_from_linklib_cmd "$dlprefile"
33674e7590efSmrg	            dlprefile_dlbasename=$sharedlib_from_linklib_result
33684e7590efSmrg	          fi
33694e7590efSmrg	        fi
33704e7590efSmrg	        $opt_dry_run || {
33714e7590efSmrg	          if test -n "$dlprefile_dlbasename" ; then
33724e7590efSmrg	            eval '$ECHO ": $dlprefile_dlbasename" >> "$nlist"'
33734e7590efSmrg	          else
33744e7590efSmrg	            func_warning "Could not compute DLL name from $name"
33754e7590efSmrg	            eval '$ECHO ": $name " >> "$nlist"'
33764e7590efSmrg	          fi
33774e7590efSmrg	          func_to_tool_file "$dlprefile" func_convert_file_msys_to_w32
33784e7590efSmrg	          eval "$NM \"$func_to_tool_file_result\" 2>/dev/null | $global_symbol_pipe |
33794e7590efSmrg	            $SED -e '/I __imp/d' -e 's/I __nm_/D /;s/_nm__//' >> '$nlist'"
33804e7590efSmrg	        }
33814e7590efSmrg	      else # not an import lib
33824e7590efSmrg	        $opt_dry_run || {
33834e7590efSmrg	          eval '$ECHO ": $name " >> "$nlist"'
33844e7590efSmrg	          func_to_tool_file "$dlprefile" func_convert_file_msys_to_w32
33854e7590efSmrg	          eval "$NM \"$func_to_tool_file_result\" 2>/dev/null | $global_symbol_pipe >> '$nlist'"
33864e7590efSmrg	        }
33874e7590efSmrg	      fi
33884e7590efSmrg	    ;;
33894e7590efSmrg	    *)
33904e7590efSmrg	      $opt_dry_run || {
33914e7590efSmrg	        eval '$ECHO ": $name " >> "$nlist"'
33924e7590efSmrg	        func_to_tool_file "$dlprefile" func_convert_file_msys_to_w32
33934e7590efSmrg	        eval "$NM \"$func_to_tool_file_result\" 2>/dev/null | $global_symbol_pipe >> '$nlist'"
33944e7590efSmrg	      }
33954e7590efSmrg	    ;;
33964e7590efSmrg          esac
339749dc963fSmrg	done
339849dc963fSmrg
339949dc963fSmrg	$opt_dry_run || {
340049dc963fSmrg	  # Make sure we have at least an empty file.
340149dc963fSmrg	  test -f "$nlist" || : > "$nlist"
340249dc963fSmrg
340349dc963fSmrg	  if test -n "$exclude_expsyms"; then
340449dc963fSmrg	    $EGREP -v " ($exclude_expsyms)$" "$nlist" > "$nlist"T
340549dc963fSmrg	    $MV "$nlist"T "$nlist"
34064b0ead49Smrg	  fi
340749dc963fSmrg
340849dc963fSmrg	  # Try sorting and uniquifying the output.
340949dc963fSmrg	  if $GREP -v "^: " < "$nlist" |
341049dc963fSmrg	      if sort -k 3 </dev/null >/dev/null 2>&1; then
341149dc963fSmrg		sort -k 3
341249dc963fSmrg	      else
341349dc963fSmrg		sort +2
341449dc963fSmrg	      fi |
341549dc963fSmrg	      uniq > "$nlist"S; then
341649dc963fSmrg	    :
34174b0ead49Smrg	  else
341849dc963fSmrg	    $GREP -v "^: " < "$nlist" > "$nlist"S
34194b0ead49Smrg	  fi
34204b0ead49Smrg
342149dc963fSmrg	  if test -f "$nlist"S; then
342249dc963fSmrg	    eval "$global_symbol_to_cdecl"' < "$nlist"S >> "$output_objdir/$my_dlsyms"'
34234b0ead49Smrg	  else
34247aa89044Smrg	    echo '/* NONE */' >> "$output_objdir/$my_dlsyms"
34254b0ead49Smrg	  fi
34264b0ead49Smrg
34277aa89044Smrg	  echo >> "$output_objdir/$my_dlsyms" "\
34284b0ead49Smrg
342949dc963fSmrg/* The mapping between symbol names and symbols.  */
343049dc963fSmrgtypedef struct {
343149dc963fSmrg  const char *name;
343249dc963fSmrg  void *address;
343349dc963fSmrg} lt_dlsymlist;
34344e7590efSmrgextern LT_DLSYM_CONST lt_dlsymlist
343549dc963fSmrglt_${my_prefix}_LTX_preloaded_symbols[];
34364e7590efSmrgLT_DLSYM_CONST lt_dlsymlist
343749dc963fSmrglt_${my_prefix}_LTX_preloaded_symbols[] =
343849dc963fSmrg{\
343949dc963fSmrg  { \"$my_originator\", (void *) 0 },"
34404b0ead49Smrg
344149dc963fSmrg	  case $need_lib_prefix in
344249dc963fSmrg	  no)
344349dc963fSmrg	    eval "$global_symbol_to_c_name_address" < "$nlist" >> "$output_objdir/$my_dlsyms"
344449dc963fSmrg	    ;;
344549dc963fSmrg	  *)
344649dc963fSmrg	    eval "$global_symbol_to_c_name_address_lib_prefix" < "$nlist" >> "$output_objdir/$my_dlsyms"
344749dc963fSmrg	    ;;
344849dc963fSmrg	  esac
34497aa89044Smrg	  echo >> "$output_objdir/$my_dlsyms" "\
345049dc963fSmrg  {0, (void *) 0}
345149dc963fSmrg};
34524b0ead49Smrg
345349dc963fSmrg/* This works around a problem in FreeBSD linker */
345449dc963fSmrg#ifdef FREEBSD_WORKAROUND
345549dc963fSmrgstatic const void *lt_preloaded_setup() {
345649dc963fSmrg  return lt_${my_prefix}_LTX_preloaded_symbols;
345749dc963fSmrg}
345849dc963fSmrg#endif
345949dc963fSmrg
346049dc963fSmrg#ifdef __cplusplus
346149dc963fSmrg}
346249dc963fSmrg#endif\
346349dc963fSmrg"
346449dc963fSmrg	} # !$opt_dry_run
346549dc963fSmrg
346649dc963fSmrg	pic_flag_for_symtable=
346749dc963fSmrg	case "$compile_command " in
346849dc963fSmrg	*" -static "*) ;;
346949dc963fSmrg	*)
347049dc963fSmrg	  case $host in
347149dc963fSmrg	  # compiling the symbol table file with pic_flag works around
347249dc963fSmrg	  # a FreeBSD bug that causes programs to crash when -lm is
347349dc963fSmrg	  # linked before any other PIC object.  But we must not use
347449dc963fSmrg	  # pic_flag when linking with -static.  The problem exists in
347549dc963fSmrg	  # FreeBSD 2.2.6 and is fixed in FreeBSD 3.1.
34764e7590efSmrg	  *-*-freebsd2.*|*-*-freebsd3.0*|*-*-freebsdelf3.0*)
347749dc963fSmrg	    pic_flag_for_symtable=" $pic_flag -DFREEBSD_WORKAROUND" ;;
347849dc963fSmrg	  *-*-hpux*)
347949dc963fSmrg	    pic_flag_for_symtable=" $pic_flag"  ;;
348049dc963fSmrg	  *)
348149dc963fSmrg	    if test "X$my_pic_p" != Xno; then
348249dc963fSmrg	      pic_flag_for_symtable=" $pic_flag"
34834b0ead49Smrg	    fi
348449dc963fSmrg	    ;;
348549dc963fSmrg	  esac
348649dc963fSmrg	  ;;
348749dc963fSmrg	esac
348849dc963fSmrg	symtab_cflags=
348949dc963fSmrg	for arg in $LTCFLAGS; do
349049dc963fSmrg	  case $arg in
349149dc963fSmrg	  -pie | -fpie | -fPIE) ;;
34924e7590efSmrg	  *) func_append symtab_cflags " $arg" ;;
349349dc963fSmrg	  esac
349449dc963fSmrg	done
34954b0ead49Smrg
349649dc963fSmrg	# Now compile the dynamic symbol file.
349749dc963fSmrg	func_show_eval '(cd $output_objdir && $LTCC$symtab_cflags -c$no_builtin_flag$pic_flag_for_symtable "$my_dlsyms")' 'exit $?'
34984b0ead49Smrg
349949dc963fSmrg	# Clean up the generated files.
350049dc963fSmrg	func_show_eval '$RM "$output_objdir/$my_dlsyms" "$nlist" "${nlist}S" "${nlist}T"'
35014b0ead49Smrg
350249dc963fSmrg	# Transform the symbol file into the correct name.
350349dc963fSmrg	symfileobj="$output_objdir/${my_outputname}S.$objext"
350449dc963fSmrg	case $host in
350549dc963fSmrg	*cygwin* | *mingw* | *cegcc* )
350649dc963fSmrg	  if test -f "$output_objdir/$my_outputname.def"; then
35077aa89044Smrg	    compile_command=`$ECHO "$compile_command" | $SED "s%@SYMFILE@%$output_objdir/$my_outputname.def $symfileobj%"`
35087aa89044Smrg	    finalize_command=`$ECHO "$finalize_command" | $SED "s%@SYMFILE@%$output_objdir/$my_outputname.def $symfileobj%"`
350949dc963fSmrg	  else
35107aa89044Smrg	    compile_command=`$ECHO "$compile_command" | $SED "s%@SYMFILE@%$symfileobj%"`
35117aa89044Smrg	    finalize_command=`$ECHO "$finalize_command" | $SED "s%@SYMFILE@%$symfileobj%"`
35124b0ead49Smrg	  fi
351349dc963fSmrg	  ;;
351449dc963fSmrg	*)
35157aa89044Smrg	  compile_command=`$ECHO "$compile_command" | $SED "s%@SYMFILE@%$symfileobj%"`
35167aa89044Smrg	  finalize_command=`$ECHO "$finalize_command" | $SED "s%@SYMFILE@%$symfileobj%"`
351749dc963fSmrg	  ;;
351849dc963fSmrg	esac
351949dc963fSmrg	;;
352049dc963fSmrg      *)
352149dc963fSmrg	func_fatal_error "unknown suffix for \`$my_dlsyms'"
352249dc963fSmrg	;;
352349dc963fSmrg      esac
352449dc963fSmrg    else
352549dc963fSmrg      # We keep going just in case the user didn't refer to
352649dc963fSmrg      # lt_preloaded_symbols.  The linker will fail if global_symbol_pipe
352749dc963fSmrg      # really was required.
35284b0ead49Smrg
352949dc963fSmrg      # Nullify the symbol file.
35307aa89044Smrg      compile_command=`$ECHO "$compile_command" | $SED "s% @SYMFILE@%%"`
35317aa89044Smrg      finalize_command=`$ECHO "$finalize_command" | $SED "s% @SYMFILE@%%"`
353249dc963fSmrg    fi
353349dc963fSmrg}
35344b0ead49Smrg
353549dc963fSmrg# func_win32_libid arg
353649dc963fSmrg# return the library type of file 'arg'
353749dc963fSmrg#
353849dc963fSmrg# Need a lot of goo to handle *both* DLLs and import libs
353949dc963fSmrg# Has to be a shell function in order to 'eat' the argument
354049dc963fSmrg# that is supplied when $file_magic_command is called.
35417aa89044Smrg# Despite the name, also deal with 64 bit binaries.
354249dc963fSmrgfunc_win32_libid ()
354349dc963fSmrg{
354449dc963fSmrg  $opt_debug
354549dc963fSmrg  win32_libid_type="unknown"
354649dc963fSmrg  win32_fileres=`file -L $1 2>/dev/null`
354749dc963fSmrg  case $win32_fileres in
354849dc963fSmrg  *ar\ archive\ import\ library*) # definitely import
354949dc963fSmrg    win32_libid_type="x86 archive import"
355049dc963fSmrg    ;;
355149dc963fSmrg  *ar\ archive*) # could be an import, or static
35527aa89044Smrg    # Keep the egrep pattern in sync with the one in _LT_CHECK_MAGIC_METHOD.
355349dc963fSmrg    if eval $OBJDUMP -f $1 | $SED -e '10q' 2>/dev/null |
35547aa89044Smrg       $EGREP 'file format (pei*-i386(.*architecture: i386)?|pe-arm-wince|pe-x86-64)' >/dev/null; then
35554e7590efSmrg      func_to_tool_file "$1" func_convert_file_msys_to_w32
35564e7590efSmrg      win32_nmres=`eval $NM -f posix -A \"$func_to_tool_file_result\" |
355749dc963fSmrg	$SED -n -e '
355849dc963fSmrg	    1,100{
355949dc963fSmrg		/ I /{
356049dc963fSmrg		    s,.*,import,
356149dc963fSmrg		    p
356249dc963fSmrg		    q
356349dc963fSmrg		}
356449dc963fSmrg	    }'`
356549dc963fSmrg      case $win32_nmres in
356649dc963fSmrg      import*)  win32_libid_type="x86 archive import";;
356749dc963fSmrg      *)        win32_libid_type="x86 archive static";;
356849dc963fSmrg      esac
356949dc963fSmrg    fi
357049dc963fSmrg    ;;
357149dc963fSmrg  *DLL*)
357249dc963fSmrg    win32_libid_type="x86 DLL"
357349dc963fSmrg    ;;
357449dc963fSmrg  *executable*) # but shell scripts are "executable" too...
357549dc963fSmrg    case $win32_fileres in
357649dc963fSmrg    *MS\ Windows\ PE\ Intel*)
357749dc963fSmrg      win32_libid_type="x86 DLL"
357849dc963fSmrg      ;;
357949dc963fSmrg    esac
358049dc963fSmrg    ;;
358149dc963fSmrg  esac
358249dc963fSmrg  $ECHO "$win32_libid_type"
358349dc963fSmrg}
35844b0ead49Smrg
35854e7590efSmrg# func_cygming_dll_for_implib ARG
35864e7590efSmrg#
35874e7590efSmrg# Platform-specific function to extract the
35884e7590efSmrg# name of the DLL associated with the specified
35894e7590efSmrg# import library ARG.
35904e7590efSmrg# Invoked by eval'ing the libtool variable
35914e7590efSmrg#    $sharedlib_from_linklib_cmd
35924e7590efSmrg# Result is available in the variable
35934e7590efSmrg#    $sharedlib_from_linklib_result
35944e7590efSmrgfunc_cygming_dll_for_implib ()
35954e7590efSmrg{
35964e7590efSmrg  $opt_debug
35974e7590efSmrg  sharedlib_from_linklib_result=`$DLLTOOL --identify-strict --identify "$1"`
35984e7590efSmrg}
35994e7590efSmrg
36004e7590efSmrg# func_cygming_dll_for_implib_fallback_core SECTION_NAME LIBNAMEs
36014e7590efSmrg#
36024e7590efSmrg# The is the core of a fallback implementation of a
36034e7590efSmrg# platform-specific function to extract the name of the
36044e7590efSmrg# DLL associated with the specified import library LIBNAME.
36054e7590efSmrg#
36064e7590efSmrg# SECTION_NAME is either .idata$6 or .idata$7, depending
36074e7590efSmrg# on the platform and compiler that created the implib.
36084e7590efSmrg#
36094e7590efSmrg# Echos the name of the DLL associated with the
36104e7590efSmrg# specified import library.
36114e7590efSmrgfunc_cygming_dll_for_implib_fallback_core ()
36124e7590efSmrg{
36134e7590efSmrg  $opt_debug
36144e7590efSmrg  match_literal=`$ECHO "$1" | $SED "$sed_make_literal_regex"`
36154e7590efSmrg  $OBJDUMP -s --section "$1" "$2" 2>/dev/null |
36164e7590efSmrg    $SED '/^Contents of section '"$match_literal"':/{
36174e7590efSmrg      # Place marker at beginning of archive member dllname section
36184e7590efSmrg      s/.*/====MARK====/
36194e7590efSmrg      p
36204e7590efSmrg      d
36214e7590efSmrg    }
36224e7590efSmrg    # These lines can sometimes be longer than 43 characters, but
36234e7590efSmrg    # are always uninteresting
36244e7590efSmrg    /:[	 ]*file format pe[i]\{,1\}-/d
36254e7590efSmrg    /^In archive [^:]*:/d
36264e7590efSmrg    # Ensure marker is printed
36274e7590efSmrg    /^====MARK====/p
36284e7590efSmrg    # Remove all lines with less than 43 characters
36294e7590efSmrg    /^.\{43\}/!d
36304e7590efSmrg    # From remaining lines, remove first 43 characters
36314e7590efSmrg    s/^.\{43\}//' |
36324e7590efSmrg    $SED -n '
36334e7590efSmrg      # Join marker and all lines until next marker into a single line
36344e7590efSmrg      /^====MARK====/ b para
36354e7590efSmrg      H
36364e7590efSmrg      $ b para
36374e7590efSmrg      b
36384e7590efSmrg      :para
36394e7590efSmrg      x
36404e7590efSmrg      s/\n//g
36414e7590efSmrg      # Remove the marker
36424e7590efSmrg      s/^====MARK====//
36434e7590efSmrg      # Remove trailing dots and whitespace
36444e7590efSmrg      s/[\. \t]*$//
36454e7590efSmrg      # Print
36464e7590efSmrg      /./p' |
36474e7590efSmrg    # we now have a list, one entry per line, of the stringified
36484e7590efSmrg    # contents of the appropriate section of all members of the
36494e7590efSmrg    # archive which possess that section. Heuristic: eliminate
36504e7590efSmrg    # all those which have a first or second character that is
36514e7590efSmrg    # a '.' (that is, objdump's representation of an unprintable
36524e7590efSmrg    # character.) This should work for all archives with less than
36534e7590efSmrg    # 0x302f exports -- but will fail for DLLs whose name actually
36544e7590efSmrg    # begins with a literal '.' or a single character followed by
36554e7590efSmrg    # a '.'.
36564e7590efSmrg    #
36574e7590efSmrg    # Of those that remain, print the first one.
36584e7590efSmrg    $SED -e '/^\./d;/^.\./d;q'
36594e7590efSmrg}
36604e7590efSmrg
36614e7590efSmrg# func_cygming_gnu_implib_p ARG
36624e7590efSmrg# This predicate returns with zero status (TRUE) if
36634e7590efSmrg# ARG is a GNU/binutils-style import library. Returns
36644e7590efSmrg# with nonzero status (FALSE) otherwise.
36654e7590efSmrgfunc_cygming_gnu_implib_p ()
36664e7590efSmrg{
36674e7590efSmrg  $opt_debug
36684e7590efSmrg  func_to_tool_file "$1" func_convert_file_msys_to_w32
36694e7590efSmrg  func_cygming_gnu_implib_tmp=`$NM "$func_to_tool_file_result" | eval "$global_symbol_pipe" | $EGREP ' (_head_[A-Za-z0-9_]+_[ad]l*|[A-Za-z0-9_]+_[ad]l*_iname)$'`
36704e7590efSmrg  test -n "$func_cygming_gnu_implib_tmp"
36714e7590efSmrg}
36724e7590efSmrg
36734e7590efSmrg# func_cygming_ms_implib_p ARG
36744e7590efSmrg# This predicate returns with zero status (TRUE) if
36754e7590efSmrg# ARG is an MS-style import library. Returns
36764e7590efSmrg# with nonzero status (FALSE) otherwise.
36774e7590efSmrgfunc_cygming_ms_implib_p ()
36784e7590efSmrg{
36794e7590efSmrg  $opt_debug
36804e7590efSmrg  func_to_tool_file "$1" func_convert_file_msys_to_w32
36814e7590efSmrg  func_cygming_ms_implib_tmp=`$NM "$func_to_tool_file_result" | eval "$global_symbol_pipe" | $GREP '_NULL_IMPORT_DESCRIPTOR'`
36824e7590efSmrg  test -n "$func_cygming_ms_implib_tmp"
36834e7590efSmrg}
36844e7590efSmrg
36854e7590efSmrg# func_cygming_dll_for_implib_fallback ARG
36864e7590efSmrg# Platform-specific function to extract the
36874e7590efSmrg# name of the DLL associated with the specified
36884e7590efSmrg# import library ARG.
36894e7590efSmrg#
36904e7590efSmrg# This fallback implementation is for use when $DLLTOOL
36914e7590efSmrg# does not support the --identify-strict option.
36924e7590efSmrg# Invoked by eval'ing the libtool variable
36934e7590efSmrg#    $sharedlib_from_linklib_cmd
36944e7590efSmrg# Result is available in the variable
36954e7590efSmrg#    $sharedlib_from_linklib_result
36964e7590efSmrgfunc_cygming_dll_for_implib_fallback ()
36974e7590efSmrg{
36984e7590efSmrg  $opt_debug
36994e7590efSmrg  if func_cygming_gnu_implib_p "$1" ; then
37004e7590efSmrg    # binutils import library
37014e7590efSmrg    sharedlib_from_linklib_result=`func_cygming_dll_for_implib_fallback_core '.idata$7' "$1"`
37024e7590efSmrg  elif func_cygming_ms_implib_p "$1" ; then
37034e7590efSmrg    # ms-generated import library
37044e7590efSmrg    sharedlib_from_linklib_result=`func_cygming_dll_for_implib_fallback_core '.idata$6' "$1"`
37054e7590efSmrg  else
37064e7590efSmrg    # unknown
37074e7590efSmrg    sharedlib_from_linklib_result=""
37084e7590efSmrg  fi
37094e7590efSmrg}
37104b0ead49Smrg
37114b0ead49Smrg
371249dc963fSmrg# func_extract_an_archive dir oldlib
371349dc963fSmrgfunc_extract_an_archive ()
371449dc963fSmrg{
371549dc963fSmrg    $opt_debug
371649dc963fSmrg    f_ex_an_ar_dir="$1"; shift
371749dc963fSmrg    f_ex_an_ar_oldlib="$1"
37187aa89044Smrg    if test "$lock_old_archive_extraction" = yes; then
37197aa89044Smrg      lockfile=$f_ex_an_ar_oldlib.lock
37207aa89044Smrg      until $opt_dry_run || ln "$progpath" "$lockfile" 2>/dev/null; do
37217aa89044Smrg	func_echo "Waiting for $lockfile to be removed"
37227aa89044Smrg	sleep 2
37237aa89044Smrg      done
37247aa89044Smrg    fi
37257aa89044Smrg    func_show_eval "(cd \$f_ex_an_ar_dir && $AR x \"\$f_ex_an_ar_oldlib\")" \
37267aa89044Smrg		   'stat=$?; rm -f "$lockfile"; exit $stat'
37277aa89044Smrg    if test "$lock_old_archive_extraction" = yes; then
37287aa89044Smrg      $opt_dry_run || rm -f "$lockfile"
37297aa89044Smrg    fi
373049dc963fSmrg    if ($AR t "$f_ex_an_ar_oldlib" | sort | sort -uc >/dev/null 2>&1); then
373149dc963fSmrg     :
373249dc963fSmrg    else
373349dc963fSmrg      func_fatal_error "object name conflicts in archive: $f_ex_an_ar_dir/$f_ex_an_ar_oldlib"
373449dc963fSmrg    fi
373549dc963fSmrg}
37364b0ead49Smrg
37374b0ead49Smrg
373849dc963fSmrg# func_extract_archives gentop oldlib ...
373949dc963fSmrgfunc_extract_archives ()
374049dc963fSmrg{
374149dc963fSmrg    $opt_debug
374249dc963fSmrg    my_gentop="$1"; shift
374349dc963fSmrg    my_oldlibs=${1+"$@"}
374449dc963fSmrg    my_oldobjs=""
374549dc963fSmrg    my_xlib=""
374649dc963fSmrg    my_xabs=""
374749dc963fSmrg    my_xdir=""
37484b0ead49Smrg
374949dc963fSmrg    for my_xlib in $my_oldlibs; do
375049dc963fSmrg      # Extract the objects.
375149dc963fSmrg      case $my_xlib in
375249dc963fSmrg	[\\/]* | [A-Za-z]:[\\/]*) my_xabs="$my_xlib" ;;
375349dc963fSmrg	*) my_xabs=`pwd`"/$my_xlib" ;;
375449dc963fSmrg      esac
375549dc963fSmrg      func_basename "$my_xlib"
375649dc963fSmrg      my_xlib="$func_basename_result"
375749dc963fSmrg      my_xlib_u=$my_xlib
375849dc963fSmrg      while :; do
375949dc963fSmrg        case " $extracted_archives " in
376049dc963fSmrg	*" $my_xlib_u "*)
376149dc963fSmrg	  func_arith $extracted_serial + 1
376249dc963fSmrg	  extracted_serial=$func_arith_result
376349dc963fSmrg	  my_xlib_u=lt$extracted_serial-$my_xlib ;;
376449dc963fSmrg	*) break ;;
376549dc963fSmrg	esac
376649dc963fSmrg      done
376749dc963fSmrg      extracted_archives="$extracted_archives $my_xlib_u"
376849dc963fSmrg      my_xdir="$my_gentop/$my_xlib_u"
37694b0ead49Smrg
377049dc963fSmrg      func_mkdir_p "$my_xdir"
37714b0ead49Smrg
377249dc963fSmrg      case $host in
377349dc963fSmrg      *-darwin*)
377449dc963fSmrg	func_verbose "Extracting $my_xabs"
377549dc963fSmrg	# Do not bother doing anything if just a dry run
377649dc963fSmrg	$opt_dry_run || {
377749dc963fSmrg	  darwin_orig_dir=`pwd`
377849dc963fSmrg	  cd $my_xdir || exit $?
377949dc963fSmrg	  darwin_archive=$my_xabs
378049dc963fSmrg	  darwin_curdir=`pwd`
378149dc963fSmrg	  darwin_base_archive=`basename "$darwin_archive"`
378249dc963fSmrg	  darwin_arches=`$LIPO -info "$darwin_archive" 2>/dev/null | $GREP Architectures 2>/dev/null || true`
378349dc963fSmrg	  if test -n "$darwin_arches"; then
378449dc963fSmrg	    darwin_arches=`$ECHO "$darwin_arches" | $SED -e 's/.*are://'`
378549dc963fSmrg	    darwin_arch=
378649dc963fSmrg	    func_verbose "$darwin_base_archive has multiple architectures $darwin_arches"
378749dc963fSmrg	    for darwin_arch in  $darwin_arches ; do
378849dc963fSmrg	      func_mkdir_p "unfat-$$/${darwin_base_archive}-${darwin_arch}"
378949dc963fSmrg	      $LIPO -thin $darwin_arch -output "unfat-$$/${darwin_base_archive}-${darwin_arch}/${darwin_base_archive}" "${darwin_archive}"
379049dc963fSmrg	      cd "unfat-$$/${darwin_base_archive}-${darwin_arch}"
379149dc963fSmrg	      func_extract_an_archive "`pwd`" "${darwin_base_archive}"
379249dc963fSmrg	      cd "$darwin_curdir"
379349dc963fSmrg	      $RM "unfat-$$/${darwin_base_archive}-${darwin_arch}/${darwin_base_archive}"
379449dc963fSmrg	    done # $darwin_arches
379549dc963fSmrg            ## Okay now we've a bunch of thin objects, gotta fatten them up :)
379649dc963fSmrg	    darwin_filelist=`find unfat-$$ -type f -name \*.o -print -o -name \*.lo -print | $SED -e "$basename" | sort -u`
379749dc963fSmrg	    darwin_file=
379849dc963fSmrg	    darwin_files=
379949dc963fSmrg	    for darwin_file in $darwin_filelist; do
38007aa89044Smrg	      darwin_files=`find unfat-$$ -name $darwin_file -print | sort | $NL2SP`
380149dc963fSmrg	      $LIPO -create -output "$darwin_file" $darwin_files
380249dc963fSmrg	    done # $darwin_filelist
380349dc963fSmrg	    $RM -rf unfat-$$
380449dc963fSmrg	    cd "$darwin_orig_dir"
38054b0ead49Smrg	  else
380649dc963fSmrg	    cd $darwin_orig_dir
380749dc963fSmrg	    func_extract_an_archive "$my_xdir" "$my_xabs"
380849dc963fSmrg	  fi # $darwin_arches
380949dc963fSmrg	} # !$opt_dry_run
381049dc963fSmrg	;;
381149dc963fSmrg      *)
381249dc963fSmrg        func_extract_an_archive "$my_xdir" "$my_xabs"
381349dc963fSmrg	;;
381449dc963fSmrg      esac
38157aa89044Smrg      my_oldobjs="$my_oldobjs "`find $my_xdir -name \*.$objext -print -o -name \*.lo -print | sort | $NL2SP`
381649dc963fSmrg    done
38174b0ead49Smrg
381849dc963fSmrg    func_extract_archives_result="$my_oldobjs"
381949dc963fSmrg}
38204b0ead49Smrg
38214b0ead49Smrg
38227aa89044Smrg# func_emit_wrapper [arg=no]
38237aa89044Smrg#
38247aa89044Smrg# Emit a libtool wrapper script on stdout.
38257aa89044Smrg# Don't directly open a file because we may want to
38267aa89044Smrg# incorporate the script contents within a cygwin/mingw
38277aa89044Smrg# wrapper executable.  Must ONLY be called from within
38287aa89044Smrg# func_mode_link because it depends on a number of variables
38297aa89044Smrg# set therein.
383049dc963fSmrg#
38317aa89044Smrg# ARG is the value that the WRAPPER_SCRIPT_BELONGS_IN_OBJDIR
38327aa89044Smrg# variable will take.  If 'yes', then the emitted script
38337aa89044Smrg# will assume that the directory in which it is stored is
38347aa89044Smrg# the $objdir directory.  This is a cygwin/mingw-specific
38357aa89044Smrg# behavior.
38367aa89044Smrgfunc_emit_wrapper ()
383749dc963fSmrg{
38387aa89044Smrg	func_emit_wrapper_arg1=${1-no}
38394b0ead49Smrg
384049dc963fSmrg	$ECHO "\
384149dc963fSmrg#! $SHELL
38424b0ead49Smrg
384349dc963fSmrg# $output - temporary wrapper script for $objdir/$outputname
384449dc963fSmrg# Generated by $PROGRAM (GNU $PACKAGE$TIMESTAMP) $VERSION
384549dc963fSmrg#
384649dc963fSmrg# The $output program cannot be directly executed until all the libtool
384749dc963fSmrg# libraries that it depends on are installed.
384849dc963fSmrg#
384949dc963fSmrg# This wrapper script should never be moved out of the build directory.
385049dc963fSmrg# If it is, it will not operate correctly.
38514b0ead49Smrg
385249dc963fSmrg# Sed substitution that helps us do robust quoting.  It backslashifies
385349dc963fSmrg# metacharacters that are still active within double-quoted strings.
385449dc963fSmrgsed_quote_subst='$sed_quote_subst'
38554b0ead49Smrg
385649dc963fSmrg# Be Bourne compatible
385749dc963fSmrgif test -n \"\${ZSH_VERSION+set}\" && (emulate sh) >/dev/null 2>&1; then
385849dc963fSmrg  emulate sh
385949dc963fSmrg  NULLCMD=:
386049dc963fSmrg  # Zsh 3.x and 4.x performs word splitting on \${1+\"\$@\"}, which
386149dc963fSmrg  # is contrary to our usage.  Disable this feature.
386249dc963fSmrg  alias -g '\${1+\"\$@\"}'='\"\$@\"'
386349dc963fSmrg  setopt NO_GLOB_SUBST
386449dc963fSmrgelse
386549dc963fSmrg  case \`(set -o) 2>/dev/null\` in *posix*) set -o posix;; esac
386649dc963fSmrgfi
386749dc963fSmrgBIN_SH=xpg4; export BIN_SH # for Tru64
386849dc963fSmrgDUALCASE=1; export DUALCASE # for MKS sh
38694b0ead49Smrg
387049dc963fSmrg# The HP-UX ksh and POSIX shell print the target directory to stdout
387149dc963fSmrg# if CDPATH is set.
387249dc963fSmrg(unset CDPATH) >/dev/null 2>&1 && unset CDPATH
38734b0ead49Smrg
387449dc963fSmrgrelink_command=\"$relink_command\"
38754b0ead49Smrg
387649dc963fSmrg# This environment variable determines our operation mode.
387749dc963fSmrgif test \"\$libtool_install_magic\" = \"$magic\"; then
387849dc963fSmrg  # install mode needs the following variables:
387949dc963fSmrg  generated_by_libtool_version='$macro_version'
388049dc963fSmrg  notinst_deplibs='$notinst_deplibs'
388149dc963fSmrgelse
388249dc963fSmrg  # When we are sourced in execute mode, \$file and \$ECHO are already set.
388349dc963fSmrg  if test \"\$libtool_execute_magic\" != \"$magic\"; then
38847aa89044Smrg    file=\"\$0\""
38857aa89044Smrg
38867aa89044Smrg    qECHO=`$ECHO "$ECHO" | $SED "$sed_quote_subst"`
38877aa89044Smrg    $ECHO "\
38887aa89044Smrg
38897aa89044Smrg# A function that is used when there is no print builtin or printf.
38907aa89044Smrgfunc_fallback_echo ()
38917aa89044Smrg{
38927aa89044Smrg  eval 'cat <<_LTECHO_EOF
38937aa89044Smrg\$1
38947aa89044Smrg_LTECHO_EOF'
38957aa89044Smrg}
38967aa89044Smrg    ECHO=\"$qECHO\"
38977aa89044Smrg  fi
38987aa89044Smrg
38997aa89044Smrg# Very basic option parsing. These options are (a) specific to
39007aa89044Smrg# the libtool wrapper, (b) are identical between the wrapper
39017aa89044Smrg# /script/ and the wrapper /executable/ which is used only on
39027aa89044Smrg# windows platforms, and (c) all begin with the string "--lt-"
39037aa89044Smrg# (application programs are unlikely to have options which match
39047aa89044Smrg# this pattern).
39057aa89044Smrg#
39067aa89044Smrg# There are only two supported options: --lt-debug and
39077aa89044Smrg# --lt-dump-script. There is, deliberately, no --lt-help.
39087aa89044Smrg#
39097aa89044Smrg# The first argument to this parsing function should be the
39107aa89044Smrg# script's $0 value, followed by "$@".
39117aa89044Smrglt_option_debug=
39127aa89044Smrgfunc_parse_lt_options ()
39137aa89044Smrg{
39147aa89044Smrg  lt_script_arg0=\$0
39157aa89044Smrg  shift
39167aa89044Smrg  for lt_opt
39177aa89044Smrg  do
39187aa89044Smrg    case \"\$lt_opt\" in
39197aa89044Smrg    --lt-debug) lt_option_debug=1 ;;
39207aa89044Smrg    --lt-dump-script)
39217aa89044Smrg        lt_dump_D=\`\$ECHO \"X\$lt_script_arg0\" | $SED -e 's/^X//' -e 's%/[^/]*$%%'\`
39227aa89044Smrg        test \"X\$lt_dump_D\" = \"X\$lt_script_arg0\" && lt_dump_D=.
39237aa89044Smrg        lt_dump_F=\`\$ECHO \"X\$lt_script_arg0\" | $SED -e 's/^X//' -e 's%^.*/%%'\`
39247aa89044Smrg        cat \"\$lt_dump_D/\$lt_dump_F\"
39257aa89044Smrg        exit 0
39267aa89044Smrg      ;;
39277aa89044Smrg    --lt-*)
39287aa89044Smrg        \$ECHO \"Unrecognized --lt- option: '\$lt_opt'\" 1>&2
39297aa89044Smrg        exit 1
39307aa89044Smrg      ;;
39317aa89044Smrg    esac
39327aa89044Smrg  done
39337aa89044Smrg
39347aa89044Smrg  # Print the debug banner immediately:
39357aa89044Smrg  if test -n \"\$lt_option_debug\"; then
39367aa89044Smrg    echo \"${outputname}:${output}:\${LINENO}: libtool wrapper (GNU $PACKAGE$TIMESTAMP) $VERSION\" 1>&2
39377aa89044Smrg  fi
39387aa89044Smrg}
39397aa89044Smrg
39407aa89044Smrg# Used when --lt-debug. Prints its arguments to stdout
39417aa89044Smrg# (redirection is the responsibility of the caller)
39427aa89044Smrgfunc_lt_dump_args ()
39437aa89044Smrg{
39447aa89044Smrg  lt_dump_args_N=1;
39457aa89044Smrg  for lt_arg
39467aa89044Smrg  do
39477aa89044Smrg    \$ECHO \"${outputname}:${output}:\${LINENO}: newargv[\$lt_dump_args_N]: \$lt_arg\"
39487aa89044Smrg    lt_dump_args_N=\`expr \$lt_dump_args_N + 1\`
39497aa89044Smrg  done
39507aa89044Smrg}
39517aa89044Smrg
39527aa89044Smrg# Core function for launching the target application
39537aa89044Smrgfunc_exec_program_core ()
39547aa89044Smrg{
395549dc963fSmrg"
39567aa89044Smrg  case $host in
39577aa89044Smrg  # Backslashes separate directories on plain windows
39587aa89044Smrg  *-*-mingw | *-*-os2* | *-cegcc*)
39597aa89044Smrg    $ECHO "\
39607aa89044Smrg      if test -n \"\$lt_option_debug\"; then
39617aa89044Smrg        \$ECHO \"${outputname}:${output}:\${LINENO}: newargv[0]: \$progdir\\\\\$program\" 1>&2
39627aa89044Smrg        func_lt_dump_args \${1+\"\$@\"} 1>&2
39637aa89044Smrg      fi
39647aa89044Smrg      exec \"\$progdir\\\\\$program\" \${1+\"\$@\"}
39657aa89044Smrg"
39667aa89044Smrg    ;;
39677aa89044Smrg
39687aa89044Smrg  *)
39697aa89044Smrg    $ECHO "\
39707aa89044Smrg      if test -n \"\$lt_option_debug\"; then
39717aa89044Smrg        \$ECHO \"${outputname}:${output}:\${LINENO}: newargv[0]: \$progdir/\$program\" 1>&2
39727aa89044Smrg        func_lt_dump_args \${1+\"\$@\"} 1>&2
39737aa89044Smrg      fi
39747aa89044Smrg      exec \"\$progdir/\$program\" \${1+\"\$@\"}
39757aa89044Smrg"
39767aa89044Smrg    ;;
39777aa89044Smrg  esac
39787aa89044Smrg  $ECHO "\
39797aa89044Smrg      \$ECHO \"\$0: cannot exec \$program \$*\" 1>&2
39807aa89044Smrg      exit 1
39817aa89044Smrg}
39827aa89044Smrg
39837aa89044Smrg# A function to encapsulate launching the target application
39847aa89044Smrg# Strips options in the --lt-* namespace from \$@ and
39857aa89044Smrg# launches target application with the remaining arguments.
39867aa89044Smrgfunc_exec_program ()
39877aa89044Smrg{
39884e7590efSmrg  case \" \$* \" in
39894e7590efSmrg  *\\ --lt-*)
39904e7590efSmrg    for lt_wr_arg
39914e7590efSmrg    do
39924e7590efSmrg      case \$lt_wr_arg in
39934e7590efSmrg      --lt-*) ;;
39944e7590efSmrg      *) set x \"\$@\" \"\$lt_wr_arg\"; shift;;
39954e7590efSmrg      esac
39964e7590efSmrg      shift
39974e7590efSmrg    done ;;
39984e7590efSmrg  esac
39997aa89044Smrg  func_exec_program_core \${1+\"\$@\"}
40007aa89044Smrg}
40017aa89044Smrg
40027aa89044Smrg  # Parse options
40037aa89044Smrg  func_parse_lt_options \"\$0\" \${1+\"\$@\"}
40044b0ead49Smrg
400549dc963fSmrg  # Find the directory that this script lives in.
40067aa89044Smrg  thisdir=\`\$ECHO \"\$file\" | $SED 's%/[^/]*$%%'\`
400749dc963fSmrg  test \"x\$thisdir\" = \"x\$file\" && thisdir=.
40084b0ead49Smrg
400949dc963fSmrg  # Follow symbolic links until we get to the real thisdir.
40107aa89044Smrg  file=\`ls -ld \"\$file\" | $SED -n 's/.*-> //p'\`
401149dc963fSmrg  while test -n \"\$file\"; do
40127aa89044Smrg    destdir=\`\$ECHO \"\$file\" | $SED 's%/[^/]*\$%%'\`
40134b0ead49Smrg
401449dc963fSmrg    # If there was a directory component, then change thisdir.
401549dc963fSmrg    if test \"x\$destdir\" != \"x\$file\"; then
401649dc963fSmrg      case \"\$destdir\" in
401749dc963fSmrg      [\\\\/]* | [A-Za-z]:[\\\\/]*) thisdir=\"\$destdir\" ;;
401849dc963fSmrg      *) thisdir=\"\$thisdir/\$destdir\" ;;
40194b0ead49Smrg      esac
402049dc963fSmrg    fi
40214b0ead49Smrg
40227aa89044Smrg    file=\`\$ECHO \"\$file\" | $SED 's%^.*/%%'\`
40237aa89044Smrg    file=\`ls -ld \"\$thisdir/\$file\" | $SED -n 's/.*-> //p'\`
402449dc963fSmrg  done
40254b0ead49Smrg
402649dc963fSmrg  # Usually 'no', except on cygwin/mingw when embedded into
402749dc963fSmrg  # the cwrapper.
40287aa89044Smrg  WRAPPER_SCRIPT_BELONGS_IN_OBJDIR=$func_emit_wrapper_arg1
402949dc963fSmrg  if test \"\$WRAPPER_SCRIPT_BELONGS_IN_OBJDIR\" = \"yes\"; then
403049dc963fSmrg    # special case for '.'
403149dc963fSmrg    if test \"\$thisdir\" = \".\"; then
403249dc963fSmrg      thisdir=\`pwd\`
403349dc963fSmrg    fi
403449dc963fSmrg    # remove .libs from thisdir
403549dc963fSmrg    case \"\$thisdir\" in
40367aa89044Smrg    *[\\\\/]$objdir ) thisdir=\`\$ECHO \"\$thisdir\" | $SED 's%[\\\\/][^\\\\/]*$%%'\` ;;
403749dc963fSmrg    $objdir )   thisdir=. ;;
403849dc963fSmrg    esac
403949dc963fSmrg  fi
404049dc963fSmrg
404149dc963fSmrg  # Try to get the absolute directory name.
404249dc963fSmrg  absdir=\`cd \"\$thisdir\" && pwd\`
404349dc963fSmrg  test -n \"\$absdir\" && thisdir=\"\$absdir\"
404449dc963fSmrg"
404549dc963fSmrg
404649dc963fSmrg	if test "$fast_install" = yes; then
404749dc963fSmrg	  $ECHO "\
404849dc963fSmrg  program=lt-'$outputname'$exeext
404949dc963fSmrg  progdir=\"\$thisdir/$objdir\"
405049dc963fSmrg
405149dc963fSmrg  if test ! -f \"\$progdir/\$program\" ||
405249dc963fSmrg     { file=\`ls -1dt \"\$progdir/\$program\" \"\$progdir/../\$program\" 2>/dev/null | ${SED} 1q\`; \\
405349dc963fSmrg       test \"X\$file\" != \"X\$progdir/\$program\"; }; then
405449dc963fSmrg
405549dc963fSmrg    file=\"\$\$-\$program\"
405649dc963fSmrg
405749dc963fSmrg    if test ! -d \"\$progdir\"; then
405849dc963fSmrg      $MKDIR \"\$progdir\"
405949dc963fSmrg    else
406049dc963fSmrg      $RM \"\$progdir/\$file\"
406149dc963fSmrg    fi"
406249dc963fSmrg
406349dc963fSmrg	  $ECHO "\
406449dc963fSmrg
406549dc963fSmrg    # relink executable if necessary
406649dc963fSmrg    if test -n \"\$relink_command\"; then
406749dc963fSmrg      if relink_command_output=\`eval \$relink_command 2>&1\`; then :
406849dc963fSmrg      else
406949dc963fSmrg	$ECHO \"\$relink_command_output\" >&2
407049dc963fSmrg	$RM \"\$progdir/\$file\"
407149dc963fSmrg	exit 1
40724b0ead49Smrg      fi
407349dc963fSmrg    fi
40744b0ead49Smrg
407549dc963fSmrg    $MV \"\$progdir/\$file\" \"\$progdir/\$program\" 2>/dev/null ||
407649dc963fSmrg    { $RM \"\$progdir/\$program\";
407749dc963fSmrg      $MV \"\$progdir/\$file\" \"\$progdir/\$program\"; }
407849dc963fSmrg    $RM \"\$progdir/\$file\"
407949dc963fSmrg  fi"
408049dc963fSmrg	else
408149dc963fSmrg	  $ECHO "\
408249dc963fSmrg  program='$outputname'
408349dc963fSmrg  progdir=\"\$thisdir/$objdir\"
408449dc963fSmrg"
40854b0ead49Smrg	fi
40864b0ead49Smrg
408749dc963fSmrg	$ECHO "\
40884b0ead49Smrg
408949dc963fSmrg  if test -f \"\$progdir/\$program\"; then"
40904b0ead49Smrg
40914e7590efSmrg	# fixup the dll searchpath if we need to.
40924e7590efSmrg	#
40934e7590efSmrg	# Fix the DLL searchpath if we need to.  Do this before prepending
40944e7590efSmrg	# to shlibpath, because on Windows, both are PATH and uninstalled
40954e7590efSmrg	# libraries must come first.
40964e7590efSmrg	if test -n "$dllsearchpath"; then
40974e7590efSmrg	  $ECHO "\
40984e7590efSmrg    # Add the dll search path components to the executable PATH
40994e7590efSmrg    PATH=$dllsearchpath:\$PATH
41004e7590efSmrg"
41014e7590efSmrg	fi
41024e7590efSmrg
410349dc963fSmrg	# Export our shlibpath_var if we have one.
410449dc963fSmrg	if test "$shlibpath_overrides_runpath" = yes && test -n "$shlibpath_var" && test -n "$temp_rpath"; then
410549dc963fSmrg	  $ECHO "\
410649dc963fSmrg    # Add our own library path to $shlibpath_var
410749dc963fSmrg    $shlibpath_var=\"$temp_rpath\$$shlibpath_var\"
410849dc963fSmrg
410949dc963fSmrg    # Some systems cannot cope with colon-terminated $shlibpath_var
411049dc963fSmrg    # The second colon is a workaround for a bug in BeOS R4 sed
41117aa89044Smrg    $shlibpath_var=\`\$ECHO \"\$$shlibpath_var\" | $SED 's/::*\$//'\`
41124b0ead49Smrg
411349dc963fSmrg    export $shlibpath_var
411449dc963fSmrg"
41154b0ead49Smrg	fi
41164b0ead49Smrg
411749dc963fSmrg	$ECHO "\
411849dc963fSmrg    if test \"\$libtool_execute_magic\" != \"$magic\"; then
411949dc963fSmrg      # Run the actual program with our arguments.
41207aa89044Smrg      func_exec_program \${1+\"\$@\"}
412149dc963fSmrg    fi
412249dc963fSmrg  else
412349dc963fSmrg    # The program doesn't exist.
412449dc963fSmrg    \$ECHO \"\$0: error: \\\`\$progdir/\$program' does not exist\" 1>&2
412549dc963fSmrg    \$ECHO \"This script is just a wrapper for \$program.\" 1>&2
41267aa89044Smrg    \$ECHO \"See the $PACKAGE documentation for more information.\" 1>&2
412749dc963fSmrg    exit 1
412849dc963fSmrg  fi
412949dc963fSmrgfi\
413049dc963fSmrg"
413149dc963fSmrg}
41324b0ead49Smrg
41334b0ead49Smrg
413449dc963fSmrg# func_emit_cwrapperexe_src
413549dc963fSmrg# emit the source code for a wrapper executable on stdout
413649dc963fSmrg# Must ONLY be called from within func_mode_link because
413749dc963fSmrg# it depends on a number of variable set therein.
413849dc963fSmrgfunc_emit_cwrapperexe_src ()
413949dc963fSmrg{
414049dc963fSmrg	cat <<EOF
41414b0ead49Smrg
414249dc963fSmrg/* $cwrappersource - temporary wrapper executable for $objdir/$outputname
414349dc963fSmrg   Generated by $PROGRAM (GNU $PACKAGE$TIMESTAMP) $VERSION
41444b0ead49Smrg
414549dc963fSmrg   The $output program cannot be directly executed until all the libtool
414649dc963fSmrg   libraries that it depends on are installed.
41474b0ead49Smrg
414849dc963fSmrg   This wrapper executable should never be moved out of the build directory.
414949dc963fSmrg   If it is, it will not operate correctly.
415049dc963fSmrg*/
415149dc963fSmrgEOF
415249dc963fSmrg	    cat <<"EOF"
41537aa89044Smrg#ifdef _MSC_VER
41547aa89044Smrg# define _CRT_SECURE_NO_DEPRECATE 1
41557aa89044Smrg#endif
415649dc963fSmrg#include <stdio.h>
415749dc963fSmrg#include <stdlib.h>
415849dc963fSmrg#ifdef _MSC_VER
415949dc963fSmrg# include <direct.h>
416049dc963fSmrg# include <process.h>
416149dc963fSmrg# include <io.h>
416249dc963fSmrg#else
416349dc963fSmrg# include <unistd.h>
416449dc963fSmrg# include <stdint.h>
416549dc963fSmrg# ifdef __CYGWIN__
416649dc963fSmrg#  include <io.h>
416749dc963fSmrg# endif
416849dc963fSmrg#endif
416949dc963fSmrg#include <malloc.h>
417049dc963fSmrg#include <stdarg.h>
417149dc963fSmrg#include <assert.h>
417249dc963fSmrg#include <string.h>
417349dc963fSmrg#include <ctype.h>
417449dc963fSmrg#include <errno.h>
417549dc963fSmrg#include <fcntl.h>
417649dc963fSmrg#include <sys/stat.h>
41774b0ead49Smrg
41787aa89044Smrg/* declarations of non-ANSI functions */
41797aa89044Smrg#if defined(__MINGW32__)
41807aa89044Smrg# ifdef __STRICT_ANSI__
41817aa89044Smrgint _putenv (const char *);
41827aa89044Smrg# endif
41837aa89044Smrg#elif defined(__CYGWIN__)
41847aa89044Smrg# ifdef __STRICT_ANSI__
41857aa89044Smrgchar *realpath (const char *, char *);
41867aa89044Smrgint putenv (char *);
41877aa89044Smrgint setenv (const char *, const char *, int);
41887aa89044Smrg# endif
41897aa89044Smrg/* #elif defined (other platforms) ... */
41907aa89044Smrg#endif
41917aa89044Smrg
41927aa89044Smrg/* portability defines, excluding path handling macros */
41937aa89044Smrg#if defined(_MSC_VER)
41947aa89044Smrg# define setmode _setmode
41957aa89044Smrg# define stat    _stat
41967aa89044Smrg# define chmod   _chmod
41977aa89044Smrg# define getcwd  _getcwd
41987aa89044Smrg# define putenv  _putenv
41997aa89044Smrg# define S_IXUSR _S_IEXEC
42007aa89044Smrg# ifndef _INTPTR_T_DEFINED
42017aa89044Smrg#  define _INTPTR_T_DEFINED
42027aa89044Smrg#  define intptr_t int
42037aa89044Smrg# endif
42047aa89044Smrg#elif defined(__MINGW32__)
42057aa89044Smrg# define setmode _setmode
42067aa89044Smrg# define stat    _stat
42077aa89044Smrg# define chmod   _chmod
42087aa89044Smrg# define getcwd  _getcwd
42097aa89044Smrg# define putenv  _putenv
42107aa89044Smrg#elif defined(__CYGWIN__)
42117aa89044Smrg# define HAVE_SETENV
42127aa89044Smrg# define FOPEN_WB "wb"
42137aa89044Smrg/* #elif defined (other platforms) ... */
42147aa89044Smrg#endif
42157aa89044Smrg
421649dc963fSmrg#if defined(PATH_MAX)
421749dc963fSmrg# define LT_PATHMAX PATH_MAX
421849dc963fSmrg#elif defined(MAXPATHLEN)
421949dc963fSmrg# define LT_PATHMAX MAXPATHLEN
422049dc963fSmrg#else
422149dc963fSmrg# define LT_PATHMAX 1024
422249dc963fSmrg#endif
42234b0ead49Smrg
422449dc963fSmrg#ifndef S_IXOTH
422549dc963fSmrg# define S_IXOTH 0
422649dc963fSmrg#endif
422749dc963fSmrg#ifndef S_IXGRP
422849dc963fSmrg# define S_IXGRP 0
422949dc963fSmrg#endif
42304b0ead49Smrg
42317aa89044Smrg/* path handling portability macros */
423249dc963fSmrg#ifndef DIR_SEPARATOR
423349dc963fSmrg# define DIR_SEPARATOR '/'
423449dc963fSmrg# define PATH_SEPARATOR ':'
423549dc963fSmrg#endif
42364b0ead49Smrg
423749dc963fSmrg#if defined (_WIN32) || defined (__MSDOS__) || defined (__DJGPP__) || \
423849dc963fSmrg  defined (__OS2__)
423949dc963fSmrg# define HAVE_DOS_BASED_FILE_SYSTEM
424049dc963fSmrg# define FOPEN_WB "wb"
424149dc963fSmrg# ifndef DIR_SEPARATOR_2
424249dc963fSmrg#  define DIR_SEPARATOR_2 '\\'
424349dc963fSmrg# endif
424449dc963fSmrg# ifndef PATH_SEPARATOR_2
424549dc963fSmrg#  define PATH_SEPARATOR_2 ';'
424649dc963fSmrg# endif
424749dc963fSmrg#endif
42484b0ead49Smrg
424949dc963fSmrg#ifndef DIR_SEPARATOR_2
425049dc963fSmrg# define IS_DIR_SEPARATOR(ch) ((ch) == DIR_SEPARATOR)
425149dc963fSmrg#else /* DIR_SEPARATOR_2 */
425249dc963fSmrg# define IS_DIR_SEPARATOR(ch) \
425349dc963fSmrg	(((ch) == DIR_SEPARATOR) || ((ch) == DIR_SEPARATOR_2))
425449dc963fSmrg#endif /* DIR_SEPARATOR_2 */
42554b0ead49Smrg
425649dc963fSmrg#ifndef PATH_SEPARATOR_2
425749dc963fSmrg# define IS_PATH_SEPARATOR(ch) ((ch) == PATH_SEPARATOR)
425849dc963fSmrg#else /* PATH_SEPARATOR_2 */
425949dc963fSmrg# define IS_PATH_SEPARATOR(ch) ((ch) == PATH_SEPARATOR_2)
426049dc963fSmrg#endif /* PATH_SEPARATOR_2 */
42614b0ead49Smrg
426249dc963fSmrg#ifndef FOPEN_WB
426349dc963fSmrg# define FOPEN_WB "w"
426449dc963fSmrg#endif
426549dc963fSmrg#ifndef _O_BINARY
426649dc963fSmrg# define _O_BINARY 0
426749dc963fSmrg#endif
42684b0ead49Smrg
426949dc963fSmrg#define XMALLOC(type, num)      ((type *) xmalloc ((num) * sizeof(type)))
427049dc963fSmrg#define XFREE(stale) do { \
427149dc963fSmrg  if (stale) { free ((void *) stale); stale = 0; } \
427249dc963fSmrg} while (0)
42734b0ead49Smrg
42747aa89044Smrg#if defined(LT_DEBUGWRAPPER)
42757aa89044Smrgstatic int lt_debug = 1;
427649dc963fSmrg#else
42777aa89044Smrgstatic int lt_debug = 0;
427849dc963fSmrg#endif
42794b0ead49Smrg
42807aa89044Smrgconst char *program_name = "libtool-wrapper"; /* in case xstrdup fails */
42814b0ead49Smrg
428249dc963fSmrgvoid *xmalloc (size_t num);
428349dc963fSmrgchar *xstrdup (const char *string);
428449dc963fSmrgconst char *base_name (const char *name);
428549dc963fSmrgchar *find_executable (const char *wrapper);
428649dc963fSmrgchar *chase_symlinks (const char *pathspec);
428749dc963fSmrgint make_executable (const char *path);
428849dc963fSmrgint check_executable (const char *path);
428949dc963fSmrgchar *strendzap (char *str, const char *pat);
42907aa89044Smrgvoid lt_debugprintf (const char *file, int line, const char *fmt, ...);
42917aa89044Smrgvoid lt_fatal (const char *file, int line, const char *message, ...);
42927aa89044Smrgstatic const char *nonnull (const char *s);
42937aa89044Smrgstatic const char *nonempty (const char *s);
429449dc963fSmrgvoid lt_setenv (const char *name, const char *value);
429549dc963fSmrgchar *lt_extend_str (const char *orig_value, const char *add, int to_end);
429649dc963fSmrgvoid lt_update_exe_path (const char *name, const char *value);
429749dc963fSmrgvoid lt_update_lib_path (const char *name, const char *value);
42987aa89044Smrgchar **prepare_spawn (char **argv);
42997aa89044Smrgvoid lt_dump_script (FILE *f);
430049dc963fSmrgEOF
430149dc963fSmrg
430249dc963fSmrg	    cat <<EOF
43034e7590efSmrgvolatile const char * MAGIC_EXE = "$magic_exe";
430449dc963fSmrgconst char * LIB_PATH_VARNAME = "$shlibpath_var";
430549dc963fSmrgEOF
43064b0ead49Smrg
430749dc963fSmrg	    if test "$shlibpath_overrides_runpath" = yes && test -n "$shlibpath_var" && test -n "$temp_rpath"; then
43084e7590efSmrg              func_to_host_path "$temp_rpath"
430949dc963fSmrg	      cat <<EOF
43104e7590efSmrgconst char * LIB_PATH_VALUE   = "$func_to_host_path_result";
431149dc963fSmrgEOF
431249dc963fSmrg	    else
431349dc963fSmrg	      cat <<"EOF"
431449dc963fSmrgconst char * LIB_PATH_VALUE   = "";
431549dc963fSmrgEOF
43164b0ead49Smrg	    fi
43174b0ead49Smrg
431849dc963fSmrg	    if test -n "$dllsearchpath"; then
43194e7590efSmrg              func_to_host_path "$dllsearchpath:"
432049dc963fSmrg	      cat <<EOF
432149dc963fSmrgconst char * EXE_PATH_VARNAME = "PATH";
43224e7590efSmrgconst char * EXE_PATH_VALUE   = "$func_to_host_path_result";
43234b0ead49SmrgEOF
43244b0ead49Smrg	    else
432549dc963fSmrg	      cat <<"EOF"
432649dc963fSmrgconst char * EXE_PATH_VARNAME = "";
432749dc963fSmrgconst char * EXE_PATH_VALUE   = "";
432849dc963fSmrgEOF
43294b0ead49Smrg	    fi
433049dc963fSmrg
433149dc963fSmrg	    if test "$fast_install" = yes; then
433249dc963fSmrg	      cat <<EOF
433349dc963fSmrgconst char * TARGET_PROGRAM_NAME = "lt-$outputname"; /* hopefully, no .exe */
433449dc963fSmrgEOF
43354b0ead49Smrg	    else
433649dc963fSmrg	      cat <<EOF
433749dc963fSmrgconst char * TARGET_PROGRAM_NAME = "$outputname"; /* hopefully, no .exe */
433849dc963fSmrgEOF
43394b0ead49Smrg	    fi
43404b0ead49Smrg
43414b0ead49Smrg
434249dc963fSmrg	    cat <<"EOF"
43434b0ead49Smrg
434449dc963fSmrg#define LTWRAPPER_OPTION_PREFIX         "--lt-"
43454b0ead49Smrg
434649dc963fSmrgstatic const char *ltwrapper_option_prefix = LTWRAPPER_OPTION_PREFIX;
434749dc963fSmrgstatic const char *dumpscript_opt       = LTWRAPPER_OPTION_PREFIX "dump-script";
43487aa89044Smrgstatic const char *debug_opt            = LTWRAPPER_OPTION_PREFIX "debug";
43494b0ead49Smrg
435049dc963fSmrgint
435149dc963fSmrgmain (int argc, char *argv[])
435249dc963fSmrg{
435349dc963fSmrg  char **newargz;
435449dc963fSmrg  int  newargc;
435549dc963fSmrg  char *tmp_pathspec;
435649dc963fSmrg  char *actual_cwrapper_path;
435749dc963fSmrg  char *actual_cwrapper_name;
435849dc963fSmrg  char *target_name;
435949dc963fSmrg  char *lt_argv_zero;
436049dc963fSmrg  intptr_t rval = 127;
43614b0ead49Smrg
436249dc963fSmrg  int i;
43634b0ead49Smrg
436449dc963fSmrg  program_name = (char *) xstrdup (base_name (argv[0]));
43657aa89044Smrg  newargz = XMALLOC (char *, argc + 1);
43664b0ead49Smrg
43677aa89044Smrg  /* very simple arg parsing; don't want to rely on getopt
43687aa89044Smrg   * also, copy all non cwrapper options to newargz, except
43697aa89044Smrg   * argz[0], which is handled differently
43707aa89044Smrg   */
43717aa89044Smrg  newargc=0;
437249dc963fSmrg  for (i = 1; i < argc; i++)
437349dc963fSmrg    {
437449dc963fSmrg      if (strcmp (argv[i], dumpscript_opt) == 0)
437549dc963fSmrg	{
437649dc963fSmrgEOF
437749dc963fSmrg	    case "$host" in
437849dc963fSmrg	      *mingw* | *cygwin* )
437949dc963fSmrg		# make stdout use "unix" line endings
438049dc963fSmrg		echo "          setmode(1,_O_BINARY);"
438149dc963fSmrg		;;
438249dc963fSmrg	      esac
43834b0ead49Smrg
438449dc963fSmrg	    cat <<"EOF"
43857aa89044Smrg	  lt_dump_script (stdout);
438649dc963fSmrg	  return 0;
438749dc963fSmrg	}
43887aa89044Smrg      if (strcmp (argv[i], debug_opt) == 0)
43897aa89044Smrg	{
43907aa89044Smrg          lt_debug = 1;
43917aa89044Smrg          continue;
43927aa89044Smrg	}
43937aa89044Smrg      if (strcmp (argv[i], ltwrapper_option_prefix) == 0)
43947aa89044Smrg        {
43957aa89044Smrg          /* however, if there is an option in the LTWRAPPER_OPTION_PREFIX
43967aa89044Smrg             namespace, but it is not one of the ones we know about and
43977aa89044Smrg             have already dealt with, above (inluding dump-script), then
43987aa89044Smrg             report an error. Otherwise, targets might begin to believe
43997aa89044Smrg             they are allowed to use options in the LTWRAPPER_OPTION_PREFIX
44007aa89044Smrg             namespace. The first time any user complains about this, we'll
44017aa89044Smrg             need to make LTWRAPPER_OPTION_PREFIX a configure-time option
44027aa89044Smrg             or a configure.ac-settable value.
44037aa89044Smrg           */
44047aa89044Smrg          lt_fatal (__FILE__, __LINE__,
44057aa89044Smrg		    "unrecognized %s option: '%s'",
44067aa89044Smrg                    ltwrapper_option_prefix, argv[i]);
44077aa89044Smrg        }
44087aa89044Smrg      /* otherwise ... */
44097aa89044Smrg      newargz[++newargc] = xstrdup (argv[i]);
441049dc963fSmrg    }
44117aa89044Smrg  newargz[++newargc] = NULL;
44127aa89044Smrg
44137aa89044SmrgEOF
44147aa89044Smrg	    cat <<EOF
44157aa89044Smrg  /* The GNU banner must be the first non-error debug message */
44167aa89044Smrg  lt_debugprintf (__FILE__, __LINE__, "libtool wrapper (GNU $PACKAGE$TIMESTAMP) $VERSION\n");
44177aa89044SmrgEOF
44187aa89044Smrg	    cat <<"EOF"
44197aa89044Smrg  lt_debugprintf (__FILE__, __LINE__, "(main) argv[0]: %s\n", argv[0]);
44207aa89044Smrg  lt_debugprintf (__FILE__, __LINE__, "(main) program_name: %s\n", program_name);
44214b0ead49Smrg
442249dc963fSmrg  tmp_pathspec = find_executable (argv[0]);
442349dc963fSmrg  if (tmp_pathspec == NULL)
44247aa89044Smrg    lt_fatal (__FILE__, __LINE__, "couldn't find %s", argv[0]);
44257aa89044Smrg  lt_debugprintf (__FILE__, __LINE__,
44267aa89044Smrg                  "(main) found exe (before symlink chase) at: %s\n",
44277aa89044Smrg		  tmp_pathspec);
442849dc963fSmrg
442949dc963fSmrg  actual_cwrapper_path = chase_symlinks (tmp_pathspec);
44307aa89044Smrg  lt_debugprintf (__FILE__, __LINE__,
44317aa89044Smrg                  "(main) found exe (after symlink chase) at: %s\n",
44327aa89044Smrg		  actual_cwrapper_path);
443349dc963fSmrg  XFREE (tmp_pathspec);
443449dc963fSmrg
44357aa89044Smrg  actual_cwrapper_name = xstrdup (base_name (actual_cwrapper_path));
443649dc963fSmrg  strendzap (actual_cwrapper_path, actual_cwrapper_name);
443749dc963fSmrg
443849dc963fSmrg  /* wrapper name transforms */
443949dc963fSmrg  strendzap (actual_cwrapper_name, ".exe");
444049dc963fSmrg  tmp_pathspec = lt_extend_str (actual_cwrapper_name, ".exe", 1);
444149dc963fSmrg  XFREE (actual_cwrapper_name);
444249dc963fSmrg  actual_cwrapper_name = tmp_pathspec;
444349dc963fSmrg  tmp_pathspec = 0;
444449dc963fSmrg
444549dc963fSmrg  /* target_name transforms -- use actual target program name; might have lt- prefix */
444649dc963fSmrg  target_name = xstrdup (base_name (TARGET_PROGRAM_NAME));
444749dc963fSmrg  strendzap (target_name, ".exe");
444849dc963fSmrg  tmp_pathspec = lt_extend_str (target_name, ".exe", 1);
444949dc963fSmrg  XFREE (target_name);
445049dc963fSmrg  target_name = tmp_pathspec;
445149dc963fSmrg  tmp_pathspec = 0;
445249dc963fSmrg
44537aa89044Smrg  lt_debugprintf (__FILE__, __LINE__,
44547aa89044Smrg		  "(main) libtool target name: %s\n",
44557aa89044Smrg		  target_name);
445649dc963fSmrgEOF
44574b0ead49Smrg
445849dc963fSmrg	    cat <<EOF
445949dc963fSmrg  newargz[0] =
446049dc963fSmrg    XMALLOC (char, (strlen (actual_cwrapper_path) +
446149dc963fSmrg		    strlen ("$objdir") + 1 + strlen (actual_cwrapper_name) + 1));
446249dc963fSmrg  strcpy (newargz[0], actual_cwrapper_path);
446349dc963fSmrg  strcat (newargz[0], "$objdir");
446449dc963fSmrg  strcat (newargz[0], "/");
446549dc963fSmrgEOF
44664b0ead49Smrg
446749dc963fSmrg	    cat <<"EOF"
446849dc963fSmrg  /* stop here, and copy so we don't have to do this twice */
446949dc963fSmrg  tmp_pathspec = xstrdup (newargz[0]);
44704b0ead49Smrg
447149dc963fSmrg  /* do NOT want the lt- prefix here, so use actual_cwrapper_name */
447249dc963fSmrg  strcat (newargz[0], actual_cwrapper_name);
44734b0ead49Smrg
447449dc963fSmrg  /* DO want the lt- prefix here if it exists, so use target_name */
447549dc963fSmrg  lt_argv_zero = lt_extend_str (tmp_pathspec, target_name, 1);
447649dc963fSmrg  XFREE (tmp_pathspec);
447749dc963fSmrg  tmp_pathspec = NULL;
447849dc963fSmrgEOF
44794b0ead49Smrg
448049dc963fSmrg	    case $host_os in
448149dc963fSmrg	      mingw*)
448249dc963fSmrg	    cat <<"EOF"
448349dc963fSmrg  {
448449dc963fSmrg    char* p;
448549dc963fSmrg    while ((p = strchr (newargz[0], '\\')) != NULL)
448649dc963fSmrg      {
448749dc963fSmrg	*p = '/';
448849dc963fSmrg      }
448949dc963fSmrg    while ((p = strchr (lt_argv_zero, '\\')) != NULL)
449049dc963fSmrg      {
449149dc963fSmrg	*p = '/';
449249dc963fSmrg      }
449349dc963fSmrg  }
449449dc963fSmrgEOF
449549dc963fSmrg	    ;;
449649dc963fSmrg	    esac
44974b0ead49Smrg
449849dc963fSmrg	    cat <<"EOF"
449949dc963fSmrg  XFREE (target_name);
450049dc963fSmrg  XFREE (actual_cwrapper_path);
450149dc963fSmrg  XFREE (actual_cwrapper_name);
45024b0ead49Smrg
450349dc963fSmrg  lt_setenv ("BIN_SH", "xpg4"); /* for Tru64 */
450449dc963fSmrg  lt_setenv ("DUALCASE", "1");  /* for MSK sh */
45054e7590efSmrg  /* Update the DLL searchpath.  EXE_PATH_VALUE ($dllsearchpath) must
45064e7590efSmrg     be prepended before (that is, appear after) LIB_PATH_VALUE ($temp_rpath)
45074e7590efSmrg     because on Windows, both *_VARNAMEs are PATH but uninstalled
45084e7590efSmrg     libraries must come first. */
450949dc963fSmrg  lt_update_exe_path (EXE_PATH_VARNAME, EXE_PATH_VALUE);
45104e7590efSmrg  lt_update_lib_path (LIB_PATH_VARNAME, LIB_PATH_VALUE);
45114b0ead49Smrg
45127aa89044Smrg  lt_debugprintf (__FILE__, __LINE__, "(main) lt_argv_zero: %s\n",
45137aa89044Smrg		  nonnull (lt_argv_zero));
451449dc963fSmrg  for (i = 0; i < newargc; i++)
451549dc963fSmrg    {
45167aa89044Smrg      lt_debugprintf (__FILE__, __LINE__, "(main) newargz[%d]: %s\n",
45177aa89044Smrg		      i, nonnull (newargz[i]));
451849dc963fSmrg    }
45194b0ead49Smrg
452049dc963fSmrgEOF
45214b0ead49Smrg
452249dc963fSmrg	    case $host_os in
452349dc963fSmrg	      mingw*)
452449dc963fSmrg		cat <<"EOF"
452549dc963fSmrg  /* execv doesn't actually work on mingw as expected on unix */
45267aa89044Smrg  newargz = prepare_spawn (newargz);
452749dc963fSmrg  rval = _spawnv (_P_WAIT, lt_argv_zero, (const char * const *) newargz);
452849dc963fSmrg  if (rval == -1)
452949dc963fSmrg    {
453049dc963fSmrg      /* failed to start process */
45317aa89044Smrg      lt_debugprintf (__FILE__, __LINE__,
45327aa89044Smrg		      "(main) failed to launch target \"%s\": %s\n",
45337aa89044Smrg		      lt_argv_zero, nonnull (strerror (errno)));
453449dc963fSmrg      return 127;
453549dc963fSmrg    }
453649dc963fSmrg  return rval;
453749dc963fSmrgEOF
453849dc963fSmrg		;;
453949dc963fSmrg	      *)
454049dc963fSmrg		cat <<"EOF"
454149dc963fSmrg  execv (lt_argv_zero, newargz);
454249dc963fSmrg  return rval; /* =127, but avoids unused variable warning */
454349dc963fSmrgEOF
454449dc963fSmrg		;;
454549dc963fSmrg	    esac
45464b0ead49Smrg
454749dc963fSmrg	    cat <<"EOF"
454849dc963fSmrg}
45494b0ead49Smrg
455049dc963fSmrgvoid *
455149dc963fSmrgxmalloc (size_t num)
455249dc963fSmrg{
455349dc963fSmrg  void *p = (void *) malloc (num);
455449dc963fSmrg  if (!p)
45557aa89044Smrg    lt_fatal (__FILE__, __LINE__, "memory exhausted");
45564b0ead49Smrg
455749dc963fSmrg  return p;
455849dc963fSmrg}
45594b0ead49Smrg
456049dc963fSmrgchar *
456149dc963fSmrgxstrdup (const char *string)
456249dc963fSmrg{
456349dc963fSmrg  return string ? strcpy ((char *) xmalloc (strlen (string) + 1),
456449dc963fSmrg			  string) : NULL;
456549dc963fSmrg}
45664b0ead49Smrg
456749dc963fSmrgconst char *
456849dc963fSmrgbase_name (const char *name)
456949dc963fSmrg{
457049dc963fSmrg  const char *base;
45714b0ead49Smrg
457249dc963fSmrg#if defined (HAVE_DOS_BASED_FILE_SYSTEM)
457349dc963fSmrg  /* Skip over the disk name in MSDOS pathnames. */
457449dc963fSmrg  if (isalpha ((unsigned char) name[0]) && name[1] == ':')
457549dc963fSmrg    name += 2;
457649dc963fSmrg#endif
45774b0ead49Smrg
457849dc963fSmrg  for (base = name; *name; name++)
457949dc963fSmrg    if (IS_DIR_SEPARATOR (*name))
458049dc963fSmrg      base = name + 1;
458149dc963fSmrg  return base;
458249dc963fSmrg}
45834b0ead49Smrg
458449dc963fSmrgint
458549dc963fSmrgcheck_executable (const char *path)
458649dc963fSmrg{
458749dc963fSmrg  struct stat st;
45884b0ead49Smrg
45897aa89044Smrg  lt_debugprintf (__FILE__, __LINE__, "(check_executable): %s\n",
45907aa89044Smrg                  nonempty (path));
459149dc963fSmrg  if ((!path) || (!*path))
459249dc963fSmrg    return 0;
45934b0ead49Smrg
459449dc963fSmrg  if ((stat (path, &st) >= 0)
459549dc963fSmrg      && (st.st_mode & (S_IXUSR | S_IXGRP | S_IXOTH)))
459649dc963fSmrg    return 1;
459749dc963fSmrg  else
459849dc963fSmrg    return 0;
459949dc963fSmrg}
46004b0ead49Smrg
460149dc963fSmrgint
460249dc963fSmrgmake_executable (const char *path)
460349dc963fSmrg{
460449dc963fSmrg  int rval = 0;
460549dc963fSmrg  struct stat st;
46064b0ead49Smrg
46077aa89044Smrg  lt_debugprintf (__FILE__, __LINE__, "(make_executable): %s\n",
46087aa89044Smrg                  nonempty (path));
460949dc963fSmrg  if ((!path) || (!*path))
461049dc963fSmrg    return 0;
46114b0ead49Smrg
461249dc963fSmrg  if (stat (path, &st) >= 0)
461349dc963fSmrg    {
461449dc963fSmrg      rval = chmod (path, st.st_mode | S_IXOTH | S_IXGRP | S_IXUSR);
461549dc963fSmrg    }
461649dc963fSmrg  return rval;
461749dc963fSmrg}
46184b0ead49Smrg
461949dc963fSmrg/* Searches for the full path of the wrapper.  Returns
462049dc963fSmrg   newly allocated full path name if found, NULL otherwise
462149dc963fSmrg   Does not chase symlinks, even on platforms that support them.
462249dc963fSmrg*/
462349dc963fSmrgchar *
462449dc963fSmrgfind_executable (const char *wrapper)
462549dc963fSmrg{
462649dc963fSmrg  int has_slash = 0;
462749dc963fSmrg  const char *p;
462849dc963fSmrg  const char *p_next;
462949dc963fSmrg  /* static buffer for getcwd */
463049dc963fSmrg  char tmp[LT_PATHMAX + 1];
463149dc963fSmrg  int tmp_len;
463249dc963fSmrg  char *concat_name;
46334b0ead49Smrg
46347aa89044Smrg  lt_debugprintf (__FILE__, __LINE__, "(find_executable): %s\n",
46357aa89044Smrg                  nonempty (wrapper));
46364b0ead49Smrg
463749dc963fSmrg  if ((wrapper == NULL) || (*wrapper == '\0'))
463849dc963fSmrg    return NULL;
46394b0ead49Smrg
464049dc963fSmrg  /* Absolute path? */
464149dc963fSmrg#if defined (HAVE_DOS_BASED_FILE_SYSTEM)
464249dc963fSmrg  if (isalpha ((unsigned char) wrapper[0]) && wrapper[1] == ':')
464349dc963fSmrg    {
464449dc963fSmrg      concat_name = xstrdup (wrapper);
464549dc963fSmrg      if (check_executable (concat_name))
464649dc963fSmrg	return concat_name;
464749dc963fSmrg      XFREE (concat_name);
464849dc963fSmrg    }
464949dc963fSmrg  else
465049dc963fSmrg    {
465149dc963fSmrg#endif
465249dc963fSmrg      if (IS_DIR_SEPARATOR (wrapper[0]))
465349dc963fSmrg	{
465449dc963fSmrg	  concat_name = xstrdup (wrapper);
465549dc963fSmrg	  if (check_executable (concat_name))
465649dc963fSmrg	    return concat_name;
465749dc963fSmrg	  XFREE (concat_name);
465849dc963fSmrg	}
465949dc963fSmrg#if defined (HAVE_DOS_BASED_FILE_SYSTEM)
466049dc963fSmrg    }
466149dc963fSmrg#endif
46624b0ead49Smrg
466349dc963fSmrg  for (p = wrapper; *p; p++)
466449dc963fSmrg    if (*p == '/')
466549dc963fSmrg      {
466649dc963fSmrg	has_slash = 1;
466749dc963fSmrg	break;
466849dc963fSmrg      }
466949dc963fSmrg  if (!has_slash)
467049dc963fSmrg    {
467149dc963fSmrg      /* no slashes; search PATH */
467249dc963fSmrg      const char *path = getenv ("PATH");
467349dc963fSmrg      if (path != NULL)
467449dc963fSmrg	{
467549dc963fSmrg	  for (p = path; *p; p = p_next)
467649dc963fSmrg	    {
467749dc963fSmrg	      const char *q;
467849dc963fSmrg	      size_t p_len;
467949dc963fSmrg	      for (q = p; *q; q++)
468049dc963fSmrg		if (IS_PATH_SEPARATOR (*q))
468149dc963fSmrg		  break;
468249dc963fSmrg	      p_len = q - p;
468349dc963fSmrg	      p_next = (*q == '\0' ? q : q + 1);
468449dc963fSmrg	      if (p_len == 0)
468549dc963fSmrg		{
468649dc963fSmrg		  /* empty path: current directory */
468749dc963fSmrg		  if (getcwd (tmp, LT_PATHMAX) == NULL)
46887aa89044Smrg		    lt_fatal (__FILE__, __LINE__, "getcwd failed: %s",
46897aa89044Smrg                              nonnull (strerror (errno)));
469049dc963fSmrg		  tmp_len = strlen (tmp);
469149dc963fSmrg		  concat_name =
469249dc963fSmrg		    XMALLOC (char, tmp_len + 1 + strlen (wrapper) + 1);
469349dc963fSmrg		  memcpy (concat_name, tmp, tmp_len);
469449dc963fSmrg		  concat_name[tmp_len] = '/';
469549dc963fSmrg		  strcpy (concat_name + tmp_len + 1, wrapper);
469649dc963fSmrg		}
469749dc963fSmrg	      else
469849dc963fSmrg		{
469949dc963fSmrg		  concat_name =
470049dc963fSmrg		    XMALLOC (char, p_len + 1 + strlen (wrapper) + 1);
470149dc963fSmrg		  memcpy (concat_name, p, p_len);
470249dc963fSmrg		  concat_name[p_len] = '/';
470349dc963fSmrg		  strcpy (concat_name + p_len + 1, wrapper);
470449dc963fSmrg		}
470549dc963fSmrg	      if (check_executable (concat_name))
470649dc963fSmrg		return concat_name;
470749dc963fSmrg	      XFREE (concat_name);
470849dc963fSmrg	    }
470949dc963fSmrg	}
471049dc963fSmrg      /* not found in PATH; assume curdir */
471149dc963fSmrg    }
471249dc963fSmrg  /* Relative path | not found in path: prepend cwd */
471349dc963fSmrg  if (getcwd (tmp, LT_PATHMAX) == NULL)
47147aa89044Smrg    lt_fatal (__FILE__, __LINE__, "getcwd failed: %s",
47157aa89044Smrg              nonnull (strerror (errno)));
471649dc963fSmrg  tmp_len = strlen (tmp);
471749dc963fSmrg  concat_name = XMALLOC (char, tmp_len + 1 + strlen (wrapper) + 1);
471849dc963fSmrg  memcpy (concat_name, tmp, tmp_len);
471949dc963fSmrg  concat_name[tmp_len] = '/';
472049dc963fSmrg  strcpy (concat_name + tmp_len + 1, wrapper);
47214b0ead49Smrg
472249dc963fSmrg  if (check_executable (concat_name))
472349dc963fSmrg    return concat_name;
472449dc963fSmrg  XFREE (concat_name);
472549dc963fSmrg  return NULL;
472649dc963fSmrg}
47274b0ead49Smrg
472849dc963fSmrgchar *
472949dc963fSmrgchase_symlinks (const char *pathspec)
473049dc963fSmrg{
473149dc963fSmrg#ifndef S_ISLNK
473249dc963fSmrg  return xstrdup (pathspec);
473349dc963fSmrg#else
473449dc963fSmrg  char buf[LT_PATHMAX];
473549dc963fSmrg  struct stat s;
473649dc963fSmrg  char *tmp_pathspec = xstrdup (pathspec);
473749dc963fSmrg  char *p;
473849dc963fSmrg  int has_symlinks = 0;
473949dc963fSmrg  while (strlen (tmp_pathspec) && !has_symlinks)
474049dc963fSmrg    {
47417aa89044Smrg      lt_debugprintf (__FILE__, __LINE__,
47427aa89044Smrg		      "checking path component for symlinks: %s\n",
47437aa89044Smrg		      tmp_pathspec);
474449dc963fSmrg      if (lstat (tmp_pathspec, &s) == 0)
474549dc963fSmrg	{
474649dc963fSmrg	  if (S_ISLNK (s.st_mode) != 0)
474749dc963fSmrg	    {
474849dc963fSmrg	      has_symlinks = 1;
474949dc963fSmrg	      break;
475049dc963fSmrg	    }
47514b0ead49Smrg
475249dc963fSmrg	  /* search backwards for last DIR_SEPARATOR */
475349dc963fSmrg	  p = tmp_pathspec + strlen (tmp_pathspec) - 1;
475449dc963fSmrg	  while ((p > tmp_pathspec) && (!IS_DIR_SEPARATOR (*p)))
475549dc963fSmrg	    p--;
475649dc963fSmrg	  if ((p == tmp_pathspec) && (!IS_DIR_SEPARATOR (*p)))
475749dc963fSmrg	    {
475849dc963fSmrg	      /* no more DIR_SEPARATORS left */
475949dc963fSmrg	      break;
476049dc963fSmrg	    }
476149dc963fSmrg	  *p = '\0';
476249dc963fSmrg	}
476349dc963fSmrg      else
476449dc963fSmrg	{
47657aa89044Smrg	  lt_fatal (__FILE__, __LINE__,
47667aa89044Smrg		    "error accessing file \"%s\": %s",
47677aa89044Smrg		    tmp_pathspec, nonnull (strerror (errno)));
476849dc963fSmrg	}
476949dc963fSmrg    }
477049dc963fSmrg  XFREE (tmp_pathspec);
47714b0ead49Smrg
477249dc963fSmrg  if (!has_symlinks)
477349dc963fSmrg    {
477449dc963fSmrg      return xstrdup (pathspec);
477549dc963fSmrg    }
47764b0ead49Smrg
477749dc963fSmrg  tmp_pathspec = realpath (pathspec, buf);
477849dc963fSmrg  if (tmp_pathspec == 0)
477949dc963fSmrg    {
47807aa89044Smrg      lt_fatal (__FILE__, __LINE__,
47817aa89044Smrg		"could not follow symlinks for %s", pathspec);
478249dc963fSmrg    }
478349dc963fSmrg  return xstrdup (tmp_pathspec);
478449dc963fSmrg#endif
478549dc963fSmrg}
47864b0ead49Smrg
478749dc963fSmrgchar *
478849dc963fSmrgstrendzap (char *str, const char *pat)
478949dc963fSmrg{
479049dc963fSmrg  size_t len, patlen;
47914b0ead49Smrg
479249dc963fSmrg  assert (str != NULL);
479349dc963fSmrg  assert (pat != NULL);
47944b0ead49Smrg
479549dc963fSmrg  len = strlen (str);
479649dc963fSmrg  patlen = strlen (pat);
47974b0ead49Smrg
479849dc963fSmrg  if (patlen <= len)
479949dc963fSmrg    {
480049dc963fSmrg      str += len - patlen;
480149dc963fSmrg      if (strcmp (str, pat) == 0)
480249dc963fSmrg	*str = '\0';
480349dc963fSmrg    }
480449dc963fSmrg  return str;
480549dc963fSmrg}
48064b0ead49Smrg
48077aa89044Smrgvoid
48087aa89044Smrglt_debugprintf (const char *file, int line, const char *fmt, ...)
48097aa89044Smrg{
48107aa89044Smrg  va_list args;
48117aa89044Smrg  if (lt_debug)
48127aa89044Smrg    {
48137aa89044Smrg      (void) fprintf (stderr, "%s:%s:%d: ", program_name, file, line);
48147aa89044Smrg      va_start (args, fmt);
48157aa89044Smrg      (void) vfprintf (stderr, fmt, args);
48167aa89044Smrg      va_end (args);
48177aa89044Smrg    }
48187aa89044Smrg}
48197aa89044Smrg
482049dc963fSmrgstatic void
48217aa89044Smrglt_error_core (int exit_status, const char *file,
48227aa89044Smrg	       int line, const char *mode,
482349dc963fSmrg	       const char *message, va_list ap)
482449dc963fSmrg{
48257aa89044Smrg  fprintf (stderr, "%s:%s:%d: %s: ", program_name, file, line, mode);
482649dc963fSmrg  vfprintf (stderr, message, ap);
482749dc963fSmrg  fprintf (stderr, ".\n");
48284b0ead49Smrg
482949dc963fSmrg  if (exit_status >= 0)
483049dc963fSmrg    exit (exit_status);
483149dc963fSmrg}
48324b0ead49Smrg
483349dc963fSmrgvoid
48347aa89044Smrglt_fatal (const char *file, int line, const char *message, ...)
483549dc963fSmrg{
483649dc963fSmrg  va_list ap;
483749dc963fSmrg  va_start (ap, message);
48387aa89044Smrg  lt_error_core (EXIT_FAILURE, file, line, "FATAL", message, ap);
483949dc963fSmrg  va_end (ap);
484049dc963fSmrg}
48414b0ead49Smrg
48427aa89044Smrgstatic const char *
48437aa89044Smrgnonnull (const char *s)
48447aa89044Smrg{
48457aa89044Smrg  return s ? s : "(null)";
48467aa89044Smrg}
48477aa89044Smrg
48487aa89044Smrgstatic const char *
48497aa89044Smrgnonempty (const char *s)
48507aa89044Smrg{
48517aa89044Smrg  return (s && !*s) ? "(empty)" : nonnull (s);
48527aa89044Smrg}
48537aa89044Smrg
485449dc963fSmrgvoid
485549dc963fSmrglt_setenv (const char *name, const char *value)
485649dc963fSmrg{
48577aa89044Smrg  lt_debugprintf (__FILE__, __LINE__,
48587aa89044Smrg		  "(lt_setenv) setting '%s' to '%s'\n",
48597aa89044Smrg                  nonnull (name), nonnull (value));
486049dc963fSmrg  {
486149dc963fSmrg#ifdef HAVE_SETENV
486249dc963fSmrg    /* always make a copy, for consistency with !HAVE_SETENV */
486349dc963fSmrg    char *str = xstrdup (value);
486449dc963fSmrg    setenv (name, str, 1);
486549dc963fSmrg#else
486649dc963fSmrg    int len = strlen (name) + 1 + strlen (value) + 1;
486749dc963fSmrg    char *str = XMALLOC (char, len);
486849dc963fSmrg    sprintf (str, "%s=%s", name, value);
486949dc963fSmrg    if (putenv (str) != EXIT_SUCCESS)
487049dc963fSmrg      {
487149dc963fSmrg        XFREE (str);
487249dc963fSmrg      }
487349dc963fSmrg#endif
487449dc963fSmrg  }
487549dc963fSmrg}
48764b0ead49Smrg
487749dc963fSmrgchar *
487849dc963fSmrglt_extend_str (const char *orig_value, const char *add, int to_end)
487949dc963fSmrg{
488049dc963fSmrg  char *new_value;
488149dc963fSmrg  if (orig_value && *orig_value)
488249dc963fSmrg    {
488349dc963fSmrg      int orig_value_len = strlen (orig_value);
488449dc963fSmrg      int add_len = strlen (add);
488549dc963fSmrg      new_value = XMALLOC (char, add_len + orig_value_len + 1);
488649dc963fSmrg      if (to_end)
488749dc963fSmrg        {
488849dc963fSmrg          strcpy (new_value, orig_value);
488949dc963fSmrg          strcpy (new_value + orig_value_len, add);
489049dc963fSmrg        }
489149dc963fSmrg      else
489249dc963fSmrg        {
489349dc963fSmrg          strcpy (new_value, add);
489449dc963fSmrg          strcpy (new_value + add_len, orig_value);
489549dc963fSmrg        }
489649dc963fSmrg    }
489749dc963fSmrg  else
489849dc963fSmrg    {
489949dc963fSmrg      new_value = xstrdup (add);
490049dc963fSmrg    }
490149dc963fSmrg  return new_value;
490249dc963fSmrg}
49034b0ead49Smrg
490449dc963fSmrgvoid
490549dc963fSmrglt_update_exe_path (const char *name, const char *value)
490649dc963fSmrg{
49077aa89044Smrg  lt_debugprintf (__FILE__, __LINE__,
49087aa89044Smrg		  "(lt_update_exe_path) modifying '%s' by prepending '%s'\n",
49097aa89044Smrg                  nonnull (name), nonnull (value));
49104b0ead49Smrg
491149dc963fSmrg  if (name && *name && value && *value)
491249dc963fSmrg    {
491349dc963fSmrg      char *new_value = lt_extend_str (getenv (name), value, 0);
491449dc963fSmrg      /* some systems can't cope with a ':'-terminated path #' */
491549dc963fSmrg      int len = strlen (new_value);
491649dc963fSmrg      while (((len = strlen (new_value)) > 0) && IS_PATH_SEPARATOR (new_value[len-1]))
491749dc963fSmrg        {
491849dc963fSmrg          new_value[len-1] = '\0';
491949dc963fSmrg        }
492049dc963fSmrg      lt_setenv (name, new_value);
492149dc963fSmrg      XFREE (new_value);
492249dc963fSmrg    }
492349dc963fSmrg}
49244b0ead49Smrg
492549dc963fSmrgvoid
492649dc963fSmrglt_update_lib_path (const char *name, const char *value)
492749dc963fSmrg{
49287aa89044Smrg  lt_debugprintf (__FILE__, __LINE__,
49297aa89044Smrg		  "(lt_update_lib_path) modifying '%s' by prepending '%s'\n",
49307aa89044Smrg                  nonnull (name), nonnull (value));
49314b0ead49Smrg
493249dc963fSmrg  if (name && *name && value && *value)
493349dc963fSmrg    {
493449dc963fSmrg      char *new_value = lt_extend_str (getenv (name), value, 0);
493549dc963fSmrg      lt_setenv (name, new_value);
493649dc963fSmrg      XFREE (new_value);
493749dc963fSmrg    }
493849dc963fSmrg}
49394b0ead49Smrg
49407aa89044SmrgEOF
49417aa89044Smrg	    case $host_os in
49427aa89044Smrg	      mingw*)
49437aa89044Smrg		cat <<"EOF"
49447aa89044Smrg
49457aa89044Smrg/* Prepares an argument vector before calling spawn().
49467aa89044Smrg   Note that spawn() does not by itself call the command interpreter
49477aa89044Smrg     (getenv ("COMSPEC") != NULL ? getenv ("COMSPEC") :
49487aa89044Smrg      ({ OSVERSIONINFO v; v.dwOSVersionInfoSize = sizeof(OSVERSIONINFO);
49497aa89044Smrg         GetVersionEx(&v);
49507aa89044Smrg         v.dwPlatformId == VER_PLATFORM_WIN32_NT;
49517aa89044Smrg      }) ? "cmd.exe" : "command.com").
49527aa89044Smrg   Instead it simply concatenates the arguments, separated by ' ', and calls
49537aa89044Smrg   CreateProcess().  We must quote the arguments since Win32 CreateProcess()
49547aa89044Smrg   interprets characters like ' ', '\t', '\\', '"' (but not '<' and '>') in a
49557aa89044Smrg   special way:
49567aa89044Smrg   - Space and tab are interpreted as delimiters. They are not treated as
49577aa89044Smrg     delimiters if they are surrounded by double quotes: "...".
49587aa89044Smrg   - Unescaped double quotes are removed from the input. Their only effect is
49597aa89044Smrg     that within double quotes, space and tab are treated like normal
49607aa89044Smrg     characters.
49617aa89044Smrg   - Backslashes not followed by double quotes are not special.
49627aa89044Smrg   - But 2*n+1 backslashes followed by a double quote become
49637aa89044Smrg     n backslashes followed by a double quote (n >= 0):
49647aa89044Smrg       \" -> "
49657aa89044Smrg       \\\" -> \"
49667aa89044Smrg       \\\\\" -> \\"
49677aa89044Smrg */
49687aa89044Smrg#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"
49697aa89044Smrg#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"
49707aa89044Smrgchar **
49717aa89044Smrgprepare_spawn (char **argv)
49727aa89044Smrg{
49737aa89044Smrg  size_t argc;
49747aa89044Smrg  char **new_argv;
49757aa89044Smrg  size_t i;
49767aa89044Smrg
49777aa89044Smrg  /* Count number of arguments.  */
49787aa89044Smrg  for (argc = 0; argv[argc] != NULL; argc++)
49797aa89044Smrg    ;
49807aa89044Smrg
49817aa89044Smrg  /* Allocate new argument vector.  */
49827aa89044Smrg  new_argv = XMALLOC (char *, argc + 1);
49837aa89044Smrg
49847aa89044Smrg  /* Put quoted arguments into the new argument vector.  */
49857aa89044Smrg  for (i = 0; i < argc; i++)
49867aa89044Smrg    {
49877aa89044Smrg      const char *string = argv[i];
49887aa89044Smrg
49897aa89044Smrg      if (string[0] == '\0')
49907aa89044Smrg	new_argv[i] = xstrdup ("\"\"");
49917aa89044Smrg      else if (strpbrk (string, SHELL_SPECIAL_CHARS) != NULL)
49927aa89044Smrg	{
49937aa89044Smrg	  int quote_around = (strpbrk (string, SHELL_SPACE_CHARS) != NULL);
49947aa89044Smrg	  size_t length;
49957aa89044Smrg	  unsigned int backslashes;
49967aa89044Smrg	  const char *s;
49977aa89044Smrg	  char *quoted_string;
49987aa89044Smrg	  char *p;
49997aa89044Smrg
50007aa89044Smrg	  length = 0;
50017aa89044Smrg	  backslashes = 0;
50027aa89044Smrg	  if (quote_around)
50037aa89044Smrg	    length++;
50047aa89044Smrg	  for (s = string; *s != '\0'; s++)
50057aa89044Smrg	    {
50067aa89044Smrg	      char c = *s;
50077aa89044Smrg	      if (c == '"')
50087aa89044Smrg		length += backslashes + 1;
50097aa89044Smrg	      length++;
50107aa89044Smrg	      if (c == '\\')
50117aa89044Smrg		backslashes++;
50127aa89044Smrg	      else
50137aa89044Smrg		backslashes = 0;
50147aa89044Smrg	    }
50157aa89044Smrg	  if (quote_around)
50167aa89044Smrg	    length += backslashes + 1;
50177aa89044Smrg
50187aa89044Smrg	  quoted_string = XMALLOC (char, length + 1);
50197aa89044Smrg
50207aa89044Smrg	  p = quoted_string;
50217aa89044Smrg	  backslashes = 0;
50227aa89044Smrg	  if (quote_around)
50237aa89044Smrg	    *p++ = '"';
50247aa89044Smrg	  for (s = string; *s != '\0'; s++)
50257aa89044Smrg	    {
50267aa89044Smrg	      char c = *s;
50277aa89044Smrg	      if (c == '"')
50287aa89044Smrg		{
50297aa89044Smrg		  unsigned int j;
50307aa89044Smrg		  for (j = backslashes + 1; j > 0; j--)
50317aa89044Smrg		    *p++ = '\\';
50327aa89044Smrg		}
50337aa89044Smrg	      *p++ = c;
50347aa89044Smrg	      if (c == '\\')
50357aa89044Smrg		backslashes++;
50367aa89044Smrg	      else
50377aa89044Smrg		backslashes = 0;
50387aa89044Smrg	    }
50397aa89044Smrg	  if (quote_around)
50407aa89044Smrg	    {
50417aa89044Smrg	      unsigned int j;
50427aa89044Smrg	      for (j = backslashes; j > 0; j--)
50437aa89044Smrg		*p++ = '\\';
50447aa89044Smrg	      *p++ = '"';
50457aa89044Smrg	    }
50467aa89044Smrg	  *p = '\0';
50477aa89044Smrg
50487aa89044Smrg	  new_argv[i] = quoted_string;
50497aa89044Smrg	}
50507aa89044Smrg      else
50517aa89044Smrg	new_argv[i] = (char *) string;
50527aa89044Smrg    }
50537aa89044Smrg  new_argv[argc] = NULL;
50547aa89044Smrg
50557aa89044Smrg  return new_argv;
50567aa89044Smrg}
50577aa89044SmrgEOF
50587aa89044Smrg		;;
50597aa89044Smrg	    esac
50607aa89044Smrg
50617aa89044Smrg            cat <<"EOF"
50627aa89044Smrgvoid lt_dump_script (FILE* f)
50637aa89044Smrg{
50647aa89044SmrgEOF
50657aa89044Smrg	    func_emit_wrapper yes |
50664e7590efSmrg	      $SED -n -e '
50674e7590efSmrgs/^\(.\{79\}\)\(..*\)/\1\
50684e7590efSmrg\2/
50694e7590efSmrgh
50704e7590efSmrgs/\([\\"]\)/\\\1/g
50714e7590efSmrgs/$/\\n/
50724e7590efSmrgs/\([^\n]*\).*/  fputs ("\1", f);/p
50734e7590efSmrgg
50744e7590efSmrgD'
50757aa89044Smrg            cat <<"EOF"
50767aa89044Smrg}
507749dc963fSmrgEOF
507849dc963fSmrg}
507949dc963fSmrg# end: func_emit_cwrapperexe_src
50804b0ead49Smrg
50817aa89044Smrg# func_win32_import_lib_p ARG
50827aa89044Smrg# True if ARG is an import lib, as indicated by $file_magic_cmd
50837aa89044Smrgfunc_win32_import_lib_p ()
50847aa89044Smrg{
50857aa89044Smrg    $opt_debug
50867aa89044Smrg    case `eval $file_magic_cmd \"\$1\" 2>/dev/null | $SED -e 10q` in
50877aa89044Smrg    *import*) : ;;
50887aa89044Smrg    *) false ;;
50897aa89044Smrg    esac
50907aa89044Smrg}
50917aa89044Smrg
509249dc963fSmrg# func_mode_link arg...
509349dc963fSmrgfunc_mode_link ()
509449dc963fSmrg{
509549dc963fSmrg    $opt_debug
509649dc963fSmrg    case $host in
509749dc963fSmrg    *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-cegcc*)
509849dc963fSmrg      # It is impossible to link a dll without this setting, and
509949dc963fSmrg      # we shouldn't force the makefile maintainer to figure out
510049dc963fSmrg      # which system we are compiling for in order to pass an extra
510149dc963fSmrg      # flag for every libtool invocation.
510249dc963fSmrg      # allow_undefined=no
51034b0ead49Smrg
510449dc963fSmrg      # FIXME: Unfortunately, there are problems with the above when trying
510549dc963fSmrg      # to make a dll which has undefined symbols, in which case not
510649dc963fSmrg      # even a static library is built.  For now, we need to specify
510749dc963fSmrg      # -no-undefined on the libtool link line when we can be certain
510849dc963fSmrg      # that all symbols are satisfied, otherwise we get a static library.
510949dc963fSmrg      allow_undefined=yes
511049dc963fSmrg      ;;
511149dc963fSmrg    *)
511249dc963fSmrg      allow_undefined=yes
511349dc963fSmrg      ;;
511449dc963fSmrg    esac
511549dc963fSmrg    libtool_args=$nonopt
511649dc963fSmrg    base_compile="$nonopt $@"
511749dc963fSmrg    compile_command=$nonopt
511849dc963fSmrg    finalize_command=$nonopt
51194b0ead49Smrg
512049dc963fSmrg    compile_rpath=
512149dc963fSmrg    finalize_rpath=
512249dc963fSmrg    compile_shlibpath=
512349dc963fSmrg    finalize_shlibpath=
512449dc963fSmrg    convenience=
512549dc963fSmrg    old_convenience=
512649dc963fSmrg    deplibs=
512749dc963fSmrg    old_deplibs=
512849dc963fSmrg    compiler_flags=
512949dc963fSmrg    linker_flags=
513049dc963fSmrg    dllsearchpath=
513149dc963fSmrg    lib_search_path=`pwd`
513249dc963fSmrg    inst_prefix_dir=
513349dc963fSmrg    new_inherited_linker_flags=
51344b0ead49Smrg
513549dc963fSmrg    avoid_version=no
51367aa89044Smrg    bindir=
513749dc963fSmrg    dlfiles=
513849dc963fSmrg    dlprefiles=
513949dc963fSmrg    dlself=no
514049dc963fSmrg    export_dynamic=no
514149dc963fSmrg    export_symbols=
514249dc963fSmrg    export_symbols_regex=
514349dc963fSmrg    generated=
514449dc963fSmrg    libobjs=
514549dc963fSmrg    ltlibs=
514649dc963fSmrg    module=no
514749dc963fSmrg    no_install=no
514849dc963fSmrg    objs=
514949dc963fSmrg    non_pic_objects=
515049dc963fSmrg    precious_files_regex=
515149dc963fSmrg    prefer_static_libs=no
515249dc963fSmrg    preload=no
515349dc963fSmrg    prev=
515449dc963fSmrg    prevarg=
515549dc963fSmrg    release=
515649dc963fSmrg    rpath=
515749dc963fSmrg    xrpath=
515849dc963fSmrg    perm_rpath=
515949dc963fSmrg    temp_rpath=
516049dc963fSmrg    thread_safe=no
516149dc963fSmrg    vinfo=
516249dc963fSmrg    vinfo_number=no
516349dc963fSmrg    weak_libs=
516449dc963fSmrg    single_module="${wl}-single_module"
516549dc963fSmrg    func_infer_tag $base_compile
516649dc963fSmrg
516749dc963fSmrg    # We need to know -static, to get the right output filenames.
516849dc963fSmrg    for arg
516949dc963fSmrg    do
517049dc963fSmrg      case $arg in
517149dc963fSmrg      -shared)
517249dc963fSmrg	test "$build_libtool_libs" != yes && \
517349dc963fSmrg	  func_fatal_configuration "can not build a shared library"
517449dc963fSmrg	build_old_libs=no
517549dc963fSmrg	break
517649dc963fSmrg	;;
517749dc963fSmrg      -all-static | -static | -static-libtool-libs)
517849dc963fSmrg	case $arg in
517949dc963fSmrg	-all-static)
518049dc963fSmrg	  if test "$build_libtool_libs" = yes && test -z "$link_static_flag"; then
518149dc963fSmrg	    func_warning "complete static linking is impossible in this configuration"
518249dc963fSmrg	  fi
518349dc963fSmrg	  if test -n "$link_static_flag"; then
518449dc963fSmrg	    dlopen_self=$dlopen_self_static
518549dc963fSmrg	  fi
518649dc963fSmrg	  prefer_static_libs=yes
518749dc963fSmrg	  ;;
518849dc963fSmrg	-static)
518949dc963fSmrg	  if test -z "$pic_flag" && test -n "$link_static_flag"; then
519049dc963fSmrg	    dlopen_self=$dlopen_self_static
519149dc963fSmrg	  fi
519249dc963fSmrg	  prefer_static_libs=built
519349dc963fSmrg	  ;;
519449dc963fSmrg	-static-libtool-libs)
519549dc963fSmrg	  if test -z "$pic_flag" && test -n "$link_static_flag"; then
519649dc963fSmrg	    dlopen_self=$dlopen_self_static
51974b0ead49Smrg	  fi
519849dc963fSmrg	  prefer_static_libs=yes
519949dc963fSmrg	  ;;
520049dc963fSmrg	esac
520149dc963fSmrg	build_libtool_libs=no
520249dc963fSmrg	build_old_libs=yes
520349dc963fSmrg	break
520449dc963fSmrg	;;
520549dc963fSmrg      esac
520649dc963fSmrg    done
52074b0ead49Smrg
520849dc963fSmrg    # See if our shared archives depend on static archives.
520949dc963fSmrg    test -n "$old_archive_from_new_cmds" && build_old_libs=yes
52104b0ead49Smrg
521149dc963fSmrg    # Go through the arguments, transforming them on the way.
521249dc963fSmrg    while test "$#" -gt 0; do
521349dc963fSmrg      arg="$1"
521449dc963fSmrg      shift
521549dc963fSmrg      func_quote_for_eval "$arg"
521649dc963fSmrg      qarg=$func_quote_for_eval_unquoted_result
521749dc963fSmrg      func_append libtool_args " $func_quote_for_eval_result"
52184b0ead49Smrg
521949dc963fSmrg      # If the previous option needs an argument, assign it.
522049dc963fSmrg      if test -n "$prev"; then
522149dc963fSmrg	case $prev in
522249dc963fSmrg	output)
522349dc963fSmrg	  func_append compile_command " @OUTPUT@"
522449dc963fSmrg	  func_append finalize_command " @OUTPUT@"
522549dc963fSmrg	  ;;
522649dc963fSmrg	esac
52274b0ead49Smrg
522849dc963fSmrg	case $prev in
52297aa89044Smrg	bindir)
52307aa89044Smrg	  bindir="$arg"
52317aa89044Smrg	  prev=
52327aa89044Smrg	  continue
52337aa89044Smrg	  ;;
523449dc963fSmrg	dlfiles|dlprefiles)
523549dc963fSmrg	  if test "$preload" = no; then
523649dc963fSmrg	    # Add the symbol object into the linking commands.
523749dc963fSmrg	    func_append compile_command " @SYMFILE@"
523849dc963fSmrg	    func_append finalize_command " @SYMFILE@"
523949dc963fSmrg	    preload=yes
524049dc963fSmrg	  fi
524149dc963fSmrg	  case $arg in
524249dc963fSmrg	  *.la | *.lo) ;;  # We handle these cases below.
524349dc963fSmrg	  force)
524449dc963fSmrg	    if test "$dlself" = no; then
524549dc963fSmrg	      dlself=needless
524649dc963fSmrg	      export_dynamic=yes
524749dc963fSmrg	    fi
524849dc963fSmrg	    prev=
524949dc963fSmrg	    continue
525049dc963fSmrg	    ;;
525149dc963fSmrg	  self)
525249dc963fSmrg	    if test "$prev" = dlprefiles; then
525349dc963fSmrg	      dlself=yes
525449dc963fSmrg	    elif test "$prev" = dlfiles && test "$dlopen_self" != yes; then
525549dc963fSmrg	      dlself=yes
52564b0ead49Smrg	    else
525749dc963fSmrg	      dlself=needless
525849dc963fSmrg	      export_dynamic=yes
52594b0ead49Smrg	    fi
526049dc963fSmrg	    prev=
526149dc963fSmrg	    continue
526249dc963fSmrg	    ;;
526349dc963fSmrg	  *)
526449dc963fSmrg	    if test "$prev" = dlfiles; then
52654e7590efSmrg	      func_append dlfiles " $arg"
52664b0ead49Smrg	    else
52674e7590efSmrg	      func_append dlprefiles " $arg"
52684b0ead49Smrg	    fi
526949dc963fSmrg	    prev=
527049dc963fSmrg	    continue
527149dc963fSmrg	    ;;
527249dc963fSmrg	  esac
527349dc963fSmrg	  ;;
527449dc963fSmrg	expsyms)
527549dc963fSmrg	  export_symbols="$arg"
527649dc963fSmrg	  test -f "$arg" \
527749dc963fSmrg	    || func_fatal_error "symbol file \`$arg' does not exist"
527849dc963fSmrg	  prev=
527949dc963fSmrg	  continue
528049dc963fSmrg	  ;;
528149dc963fSmrg	expsyms_regex)
528249dc963fSmrg	  export_symbols_regex="$arg"
528349dc963fSmrg	  prev=
528449dc963fSmrg	  continue
528549dc963fSmrg	  ;;
528649dc963fSmrg	framework)
52874b0ead49Smrg	  case $host in
528849dc963fSmrg	    *-*-darwin*)
528949dc963fSmrg	      case "$deplibs " in
529049dc963fSmrg		*" $qarg.ltframework "*) ;;
52914e7590efSmrg		*) func_append deplibs " $qarg.ltframework" # this is fixed later
529249dc963fSmrg		   ;;
529349dc963fSmrg	      esac
529449dc963fSmrg	      ;;
52954b0ead49Smrg	  esac
529649dc963fSmrg	  prev=
529749dc963fSmrg	  continue
52984b0ead49Smrg	  ;;
529949dc963fSmrg	inst_prefix)
530049dc963fSmrg	  inst_prefix_dir="$arg"
530149dc963fSmrg	  prev=
530249dc963fSmrg	  continue
53034b0ead49Smrg	  ;;
530449dc963fSmrg	objectlist)
530549dc963fSmrg	  if test -f "$arg"; then
530649dc963fSmrg	    save_arg=$arg
530749dc963fSmrg	    moreargs=
530849dc963fSmrg	    for fil in `cat "$save_arg"`
530949dc963fSmrg	    do
53104e7590efSmrg#	      func_append moreargs " $fil"
531149dc963fSmrg	      arg=$fil
531249dc963fSmrg	      # A libtool-controlled object.
53134b0ead49Smrg
531449dc963fSmrg	      # Check to see that this really is a libtool object.
531549dc963fSmrg	      if func_lalib_unsafe_p "$arg"; then
531649dc963fSmrg		pic_object=
531749dc963fSmrg		non_pic_object=
53184b0ead49Smrg
531949dc963fSmrg		# Read the .lo file
532049dc963fSmrg		func_source "$arg"
53214b0ead49Smrg
532249dc963fSmrg		if test -z "$pic_object" ||
532349dc963fSmrg		   test -z "$non_pic_object" ||
532449dc963fSmrg		   test "$pic_object" = none &&
532549dc963fSmrg		   test "$non_pic_object" = none; then
532649dc963fSmrg		  func_fatal_error "cannot find name of object for \`$arg'"
532749dc963fSmrg		fi
53284b0ead49Smrg
532949dc963fSmrg		# Extract subdirectory from the argument.
533049dc963fSmrg		func_dirname "$arg" "/" ""
533149dc963fSmrg		xdir="$func_dirname_result"
53324b0ead49Smrg
533349dc963fSmrg		if test "$pic_object" != none; then
533449dc963fSmrg		  # Prepend the subdirectory the object is found in.
533549dc963fSmrg		  pic_object="$xdir$pic_object"
53364b0ead49Smrg
533749dc963fSmrg		  if test "$prev" = dlfiles; then
533849dc963fSmrg		    if test "$build_libtool_libs" = yes && test "$dlopen_support" = yes; then
53394e7590efSmrg		      func_append dlfiles " $pic_object"
534049dc963fSmrg		      prev=
534149dc963fSmrg		      continue
534249dc963fSmrg		    else
534349dc963fSmrg		      # If libtool objects are unsupported, then we need to preload.
534449dc963fSmrg		      prev=dlprefiles
534549dc963fSmrg		    fi
534649dc963fSmrg		  fi
53474b0ead49Smrg
534849dc963fSmrg		  # CHECK ME:  I think I busted this.  -Ossama
534949dc963fSmrg		  if test "$prev" = dlprefiles; then
535049dc963fSmrg		    # Preload the old-style object.
53514e7590efSmrg		    func_append dlprefiles " $pic_object"
535249dc963fSmrg		    prev=
535349dc963fSmrg		  fi
53544b0ead49Smrg
535549dc963fSmrg		  # A PIC object.
535649dc963fSmrg		  func_append libobjs " $pic_object"
535749dc963fSmrg		  arg="$pic_object"
535849dc963fSmrg		fi
53594b0ead49Smrg
536049dc963fSmrg		# Non-PIC object.
536149dc963fSmrg		if test "$non_pic_object" != none; then
536249dc963fSmrg		  # Prepend the subdirectory the object is found in.
536349dc963fSmrg		  non_pic_object="$xdir$non_pic_object"
53644b0ead49Smrg
536549dc963fSmrg		  # A standard non-PIC object
536649dc963fSmrg		  func_append non_pic_objects " $non_pic_object"
536749dc963fSmrg		  if test -z "$pic_object" || test "$pic_object" = none ; then
536849dc963fSmrg		    arg="$non_pic_object"
536949dc963fSmrg		  fi
537049dc963fSmrg		else
537149dc963fSmrg		  # If the PIC object exists, use it instead.
537249dc963fSmrg		  # $xdir was prepended to $pic_object above.
537349dc963fSmrg		  non_pic_object="$pic_object"
537449dc963fSmrg		  func_append non_pic_objects " $non_pic_object"
537549dc963fSmrg		fi
537649dc963fSmrg	      else
537749dc963fSmrg		# Only an error if not doing a dry-run.
537849dc963fSmrg		if $opt_dry_run; then
537949dc963fSmrg		  # Extract subdirectory from the argument.
538049dc963fSmrg		  func_dirname "$arg" "/" ""
538149dc963fSmrg		  xdir="$func_dirname_result"
538249dc963fSmrg
538349dc963fSmrg		  func_lo2o "$arg"
538449dc963fSmrg		  pic_object=$xdir$objdir/$func_lo2o_result
538549dc963fSmrg		  non_pic_object=$xdir$func_lo2o_result
538649dc963fSmrg		  func_append libobjs " $pic_object"
538749dc963fSmrg		  func_append non_pic_objects " $non_pic_object"
538849dc963fSmrg	        else
538949dc963fSmrg		  func_fatal_error "\`$arg' is not a valid libtool object"
539049dc963fSmrg		fi
539149dc963fSmrg	      fi
539249dc963fSmrg	    done
53934b0ead49Smrg	  else
539449dc963fSmrg	    func_fatal_error "link input file \`$arg' does not exist"
53954b0ead49Smrg	  fi
539649dc963fSmrg	  arg=$save_arg
539749dc963fSmrg	  prev=
539849dc963fSmrg	  continue
539949dc963fSmrg	  ;;
540049dc963fSmrg	precious_regex)
540149dc963fSmrg	  precious_files_regex="$arg"
540249dc963fSmrg	  prev=
540349dc963fSmrg	  continue
540449dc963fSmrg	  ;;
540549dc963fSmrg	release)
540649dc963fSmrg	  release="-$arg"
540749dc963fSmrg	  prev=
540849dc963fSmrg	  continue
540949dc963fSmrg	  ;;
541049dc963fSmrg	rpath | xrpath)
541149dc963fSmrg	  # We need an absolute path.
541249dc963fSmrg	  case $arg in
541349dc963fSmrg	  [\\/]* | [A-Za-z]:[\\/]*) ;;
541449dc963fSmrg	  *)
541549dc963fSmrg	    func_fatal_error "only absolute run-paths are allowed"
541649dc963fSmrg	    ;;
541749dc963fSmrg	  esac
541849dc963fSmrg	  if test "$prev" = rpath; then
541949dc963fSmrg	    case "$rpath " in
542049dc963fSmrg	    *" $arg "*) ;;
54214e7590efSmrg	    *) func_append rpath " $arg" ;;
542249dc963fSmrg	    esac
54234b0ead49Smrg	  else
542449dc963fSmrg	    case "$xrpath " in
542549dc963fSmrg	    *" $arg "*) ;;
54264e7590efSmrg	    *) func_append xrpath " $arg" ;;
542749dc963fSmrg	    esac
54284b0ead49Smrg	  fi
542949dc963fSmrg	  prev=
543049dc963fSmrg	  continue
543149dc963fSmrg	  ;;
543249dc963fSmrg	shrext)
543349dc963fSmrg	  shrext_cmds="$arg"
543449dc963fSmrg	  prev=
543549dc963fSmrg	  continue
543649dc963fSmrg	  ;;
543749dc963fSmrg	weak)
54384e7590efSmrg	  func_append weak_libs " $arg"
543949dc963fSmrg	  prev=
544049dc963fSmrg	  continue
544149dc963fSmrg	  ;;
544249dc963fSmrg	xcclinker)
54434e7590efSmrg	  func_append linker_flags " $qarg"
54444e7590efSmrg	  func_append compiler_flags " $qarg"
544549dc963fSmrg	  prev=
544649dc963fSmrg	  func_append compile_command " $qarg"
544749dc963fSmrg	  func_append finalize_command " $qarg"
544849dc963fSmrg	  continue
544949dc963fSmrg	  ;;
545049dc963fSmrg	xcompiler)
54514e7590efSmrg	  func_append compiler_flags " $qarg"
545249dc963fSmrg	  prev=
545349dc963fSmrg	  func_append compile_command " $qarg"
545449dc963fSmrg	  func_append finalize_command " $qarg"
545549dc963fSmrg	  continue
545649dc963fSmrg	  ;;
545749dc963fSmrg	xlinker)
54584e7590efSmrg	  func_append linker_flags " $qarg"
54594e7590efSmrg	  func_append compiler_flags " $wl$qarg"
546049dc963fSmrg	  prev=
546149dc963fSmrg	  func_append compile_command " $wl$qarg"
546249dc963fSmrg	  func_append finalize_command " $wl$qarg"
546349dc963fSmrg	  continue
546449dc963fSmrg	  ;;
546549dc963fSmrg	*)
546649dc963fSmrg	  eval "$prev=\"\$arg\""
546749dc963fSmrg	  prev=
546849dc963fSmrg	  continue
546949dc963fSmrg	  ;;
54704b0ead49Smrg	esac
547149dc963fSmrg      fi # test -n "$prev"
54724b0ead49Smrg
547349dc963fSmrg      prevarg="$arg"
54744b0ead49Smrg
547549dc963fSmrg      case $arg in
547649dc963fSmrg      -all-static)
547749dc963fSmrg	if test -n "$link_static_flag"; then
547849dc963fSmrg	  # See comment for -static flag below, for more details.
547949dc963fSmrg	  func_append compile_command " $link_static_flag"
548049dc963fSmrg	  func_append finalize_command " $link_static_flag"
548149dc963fSmrg	fi
548249dc963fSmrg	continue
548349dc963fSmrg	;;
54844b0ead49Smrg
548549dc963fSmrg      -allow-undefined)
548649dc963fSmrg	# FIXME: remove this flag sometime in the future.
548749dc963fSmrg	func_fatal_error "\`-allow-undefined' must not be used because it is the default"
548849dc963fSmrg	;;
54894b0ead49Smrg
549049dc963fSmrg      -avoid-version)
549149dc963fSmrg	avoid_version=yes
549249dc963fSmrg	continue
549349dc963fSmrg	;;
54944b0ead49Smrg
54957aa89044Smrg      -bindir)
54967aa89044Smrg	prev=bindir
54977aa89044Smrg	continue
54987aa89044Smrg	;;
54997aa89044Smrg
550049dc963fSmrg      -dlopen)
550149dc963fSmrg	prev=dlfiles
550249dc963fSmrg	continue
550349dc963fSmrg	;;
55044b0ead49Smrg
550549dc963fSmrg      -dlpreopen)
550649dc963fSmrg	prev=dlprefiles
550749dc963fSmrg	continue
550849dc963fSmrg	;;
55094b0ead49Smrg
551049dc963fSmrg      -export-dynamic)
551149dc963fSmrg	export_dynamic=yes
551249dc963fSmrg	continue
551349dc963fSmrg	;;
55144b0ead49Smrg
551549dc963fSmrg      -export-symbols | -export-symbols-regex)
551649dc963fSmrg	if test -n "$export_symbols" || test -n "$export_symbols_regex"; then
551749dc963fSmrg	  func_fatal_error "more than one -exported-symbols argument is not allowed"
551849dc963fSmrg	fi
551949dc963fSmrg	if test "X$arg" = "X-export-symbols"; then
552049dc963fSmrg	  prev=expsyms
552149dc963fSmrg	else
552249dc963fSmrg	  prev=expsyms_regex
552349dc963fSmrg	fi
552449dc963fSmrg	continue
552549dc963fSmrg	;;
55264b0ead49Smrg
552749dc963fSmrg      -framework)
552849dc963fSmrg	prev=framework
552949dc963fSmrg	continue
553049dc963fSmrg	;;
55314b0ead49Smrg
553249dc963fSmrg      -inst-prefix-dir)
553349dc963fSmrg	prev=inst_prefix
553449dc963fSmrg	continue
553549dc963fSmrg	;;
55364b0ead49Smrg
553749dc963fSmrg      # The native IRIX linker understands -LANG:*, -LIST:* and -LNO:*
553849dc963fSmrg      # so, if we see these flags be careful not to treat them like -L
553949dc963fSmrg      -L[A-Z][A-Z]*:*)
554049dc963fSmrg	case $with_gcc/$host in
554149dc963fSmrg	no/*-*-irix* | /*-*-irix*)
554249dc963fSmrg	  func_append compile_command " $arg"
554349dc963fSmrg	  func_append finalize_command " $arg"
554449dc963fSmrg	  ;;
554549dc963fSmrg	esac
554649dc963fSmrg	continue
554749dc963fSmrg	;;
55484b0ead49Smrg
554949dc963fSmrg      -L*)
55504e7590efSmrg	func_stripname "-L" '' "$arg"
55514e7590efSmrg	if test -z "$func_stripname_result"; then
555249dc963fSmrg	  if test "$#" -gt 0; then
555349dc963fSmrg	    func_fatal_error "require no space between \`-L' and \`$1'"
555449dc963fSmrg	  else
555549dc963fSmrg	    func_fatal_error "need path for \`-L' option"
555649dc963fSmrg	  fi
555749dc963fSmrg	fi
55584e7590efSmrg	func_resolve_sysroot "$func_stripname_result"
55594e7590efSmrg	dir=$func_resolve_sysroot_result
556049dc963fSmrg	# We need an absolute path.
556149dc963fSmrg	case $dir in
556249dc963fSmrg	[\\/]* | [A-Za-z]:[\\/]*) ;;
556349dc963fSmrg	*)
556449dc963fSmrg	  absdir=`cd "$dir" && pwd`
556549dc963fSmrg	  test -z "$absdir" && \
556649dc963fSmrg	    func_fatal_error "cannot determine absolute directory name of \`$dir'"
556749dc963fSmrg	  dir="$absdir"
556849dc963fSmrg	  ;;
556949dc963fSmrg	esac
557049dc963fSmrg	case "$deplibs " in
55714e7590efSmrg	*" -L$dir "* | *" $arg "*)
55724e7590efSmrg	  # Will only happen for absolute or sysroot arguments
55734e7590efSmrg	  ;;
557449dc963fSmrg	*)
55754e7590efSmrg	  # Preserve sysroot, but never include relative directories
55764e7590efSmrg	  case $dir in
55774e7590efSmrg	    [\\/]* | [A-Za-z]:[\\/]* | =*) func_append deplibs " $arg" ;;
55784e7590efSmrg	    *) func_append deplibs " -L$dir" ;;
55794e7590efSmrg	  esac
55804e7590efSmrg	  func_append lib_search_path " $dir"
558149dc963fSmrg	  ;;
558249dc963fSmrg	esac
558349dc963fSmrg	case $host in
558449dc963fSmrg	*-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-cegcc*)
55857aa89044Smrg	  testbindir=`$ECHO "$dir" | $SED 's*/lib$*/bin*'`
558649dc963fSmrg	  case :$dllsearchpath: in
558749dc963fSmrg	  *":$dir:"*) ;;
558849dc963fSmrg	  ::) dllsearchpath=$dir;;
55894e7590efSmrg	  *) func_append dllsearchpath ":$dir";;
559049dc963fSmrg	  esac
559149dc963fSmrg	  case :$dllsearchpath: in
559249dc963fSmrg	  *":$testbindir:"*) ;;
559349dc963fSmrg	  ::) dllsearchpath=$testbindir;;
55944e7590efSmrg	  *) func_append dllsearchpath ":$testbindir";;
559549dc963fSmrg	  esac
559649dc963fSmrg	  ;;
559749dc963fSmrg	esac
559849dc963fSmrg	continue
559949dc963fSmrg	;;
56004b0ead49Smrg
560149dc963fSmrg      -l*)
560249dc963fSmrg	if test "X$arg" = "X-lc" || test "X$arg" = "X-lm"; then
560349dc963fSmrg	  case $host in
56047aa89044Smrg	  *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-beos* | *-cegcc* | *-*-haiku*)
560549dc963fSmrg	    # These systems don't actually have a C or math library (as such)
560649dc963fSmrg	    continue
560749dc963fSmrg	    ;;
560849dc963fSmrg	  *-*-os2*)
560949dc963fSmrg	    # These systems don't actually have a C library (as such)
561049dc963fSmrg	    test "X$arg" = "X-lc" && continue
561149dc963fSmrg	    ;;
561249dc963fSmrg	  *-*-openbsd* | *-*-freebsd* | *-*-dragonfly*)
561349dc963fSmrg	    # Do not include libc due to us having libc/libc_r.
561449dc963fSmrg	    test "X$arg" = "X-lc" && continue
561549dc963fSmrg	    ;;
561649dc963fSmrg	  *-*-rhapsody* | *-*-darwin1.[012])
561749dc963fSmrg	    # Rhapsody C and math libraries are in the System framework
56184e7590efSmrg	    func_append deplibs " System.ltframework"
561949dc963fSmrg	    continue
562049dc963fSmrg	    ;;
562149dc963fSmrg	  *-*-sco3.2v5* | *-*-sco5v6*)
562249dc963fSmrg	    # Causes problems with __ctype
562349dc963fSmrg	    test "X$arg" = "X-lc" && continue
562449dc963fSmrg	    ;;
562549dc963fSmrg	  *-*-sysv4.2uw2* | *-*-sysv5* | *-*-unixware* | *-*-OpenUNIX*)
562649dc963fSmrg	    # Compiler inserts libc in the correct place for threads to work
562749dc963fSmrg	    test "X$arg" = "X-lc" && continue
562849dc963fSmrg	    ;;
562949dc963fSmrg	  esac
563049dc963fSmrg	elif test "X$arg" = "X-lc_r"; then
563149dc963fSmrg	 case $host in
563249dc963fSmrg	 *-*-openbsd* | *-*-freebsd* | *-*-dragonfly*)
563349dc963fSmrg	   # Do not include libc_r directly, use -pthread flag.
563449dc963fSmrg	   continue
563549dc963fSmrg	   ;;
563649dc963fSmrg	 esac
563749dc963fSmrg	fi
56384e7590efSmrg	func_append deplibs " $arg"
563949dc963fSmrg	continue
564049dc963fSmrg	;;
56414b0ead49Smrg
564249dc963fSmrg      -module)
564349dc963fSmrg	module=yes
564449dc963fSmrg	continue
564549dc963fSmrg	;;
56464b0ead49Smrg
564749dc963fSmrg      # Tru64 UNIX uses -model [arg] to determine the layout of C++
564849dc963fSmrg      # classes, name mangling, and exception handling.
564949dc963fSmrg      # Darwin uses the -arch flag to determine output architecture.
56504e7590efSmrg      -model|-arch|-isysroot|--sysroot)
56514e7590efSmrg	func_append compiler_flags " $arg"
565249dc963fSmrg	func_append compile_command " $arg"
565349dc963fSmrg	func_append finalize_command " $arg"
565449dc963fSmrg	prev=xcompiler
565549dc963fSmrg	continue
565649dc963fSmrg	;;
56574b0ead49Smrg
56584e7590efSmrg      -mt|-mthreads|-kthread|-Kthread|-pthread|-pthreads|--thread-safe \
56594e7590efSmrg      |-threads|-fopenmp|-openmp|-mp|-xopenmp|-omp|-qsmp=*)
56604e7590efSmrg	func_append compiler_flags " $arg"
566149dc963fSmrg	func_append compile_command " $arg"
566249dc963fSmrg	func_append finalize_command " $arg"
566349dc963fSmrg	case "$new_inherited_linker_flags " in
566449dc963fSmrg	    *" $arg "*) ;;
56654e7590efSmrg	    * ) func_append new_inherited_linker_flags " $arg" ;;
566649dc963fSmrg	esac
566749dc963fSmrg	continue
566849dc963fSmrg	;;
56694b0ead49Smrg
567049dc963fSmrg      -multi_module)
567149dc963fSmrg	single_module="${wl}-multi_module"
567249dc963fSmrg	continue
567349dc963fSmrg	;;
56744b0ead49Smrg
567549dc963fSmrg      -no-fast-install)
567649dc963fSmrg	fast_install=no
567749dc963fSmrg	continue
567849dc963fSmrg	;;
56794b0ead49Smrg
568049dc963fSmrg      -no-install)
568149dc963fSmrg	case $host in
568249dc963fSmrg	*-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-*-darwin* | *-cegcc*)
568349dc963fSmrg	  # The PATH hackery in wrapper scripts is required on Windows
568449dc963fSmrg	  # and Darwin in order for the loader to find any dlls it needs.
568549dc963fSmrg	  func_warning "\`-no-install' is ignored for $host"
568649dc963fSmrg	  func_warning "assuming \`-no-fast-install' instead"
568749dc963fSmrg	  fast_install=no
568849dc963fSmrg	  ;;
568949dc963fSmrg	*) no_install=yes ;;
569049dc963fSmrg	esac
569149dc963fSmrg	continue
569249dc963fSmrg	;;
56934b0ead49Smrg
569449dc963fSmrg      -no-undefined)
569549dc963fSmrg	allow_undefined=no
569649dc963fSmrg	continue
569749dc963fSmrg	;;
56984b0ead49Smrg
569949dc963fSmrg      -objectlist)
570049dc963fSmrg	prev=objectlist
570149dc963fSmrg	continue
570249dc963fSmrg	;;
57034b0ead49Smrg
570449dc963fSmrg      -o) prev=output ;;
57054b0ead49Smrg
570649dc963fSmrg      -precious-files-regex)
570749dc963fSmrg	prev=precious_regex
570849dc963fSmrg	continue
570949dc963fSmrg	;;
57104b0ead49Smrg
571149dc963fSmrg      -release)
571249dc963fSmrg	prev=release
571349dc963fSmrg	continue
571449dc963fSmrg	;;
57154b0ead49Smrg
571649dc963fSmrg      -rpath)
571749dc963fSmrg	prev=rpath
571849dc963fSmrg	continue
571949dc963fSmrg	;;
57204b0ead49Smrg
572149dc963fSmrg      -R)
572249dc963fSmrg	prev=xrpath
572349dc963fSmrg	continue
572449dc963fSmrg	;;
57254b0ead49Smrg
572649dc963fSmrg      -R*)
572749dc963fSmrg	func_stripname '-R' '' "$arg"
572849dc963fSmrg	dir=$func_stripname_result
572949dc963fSmrg	# We need an absolute path.
573049dc963fSmrg	case $dir in
573149dc963fSmrg	[\\/]* | [A-Za-z]:[\\/]*) ;;
57324e7590efSmrg	=*)
57334e7590efSmrg	  func_stripname '=' '' "$dir"
57344e7590efSmrg	  dir=$lt_sysroot$func_stripname_result
57354e7590efSmrg	  ;;
573649dc963fSmrg	*)
573749dc963fSmrg	  func_fatal_error "only absolute run-paths are allowed"
573849dc963fSmrg	  ;;
573949dc963fSmrg	esac
574049dc963fSmrg	case "$xrpath " in
574149dc963fSmrg	*" $dir "*) ;;
57424e7590efSmrg	*) func_append xrpath " $dir" ;;
574349dc963fSmrg	esac
574449dc963fSmrg	continue
574549dc963fSmrg	;;
57464b0ead49Smrg
574749dc963fSmrg      -shared)
574849dc963fSmrg	# The effects of -shared are defined in a previous loop.
574949dc963fSmrg	continue
575049dc963fSmrg	;;
57514b0ead49Smrg
575249dc963fSmrg      -shrext)
575349dc963fSmrg	prev=shrext
575449dc963fSmrg	continue
575549dc963fSmrg	;;
57564b0ead49Smrg
575749dc963fSmrg      -static | -static-libtool-libs)
575849dc963fSmrg	# The effects of -static are defined in a previous loop.
575949dc963fSmrg	# We used to do the same as -all-static on platforms that
576049dc963fSmrg	# didn't have a PIC flag, but the assumption that the effects
576149dc963fSmrg	# would be equivalent was wrong.  It would break on at least
576249dc963fSmrg	# Digital Unix and AIX.
576349dc963fSmrg	continue
576449dc963fSmrg	;;
57654b0ead49Smrg
576649dc963fSmrg      -thread-safe)
576749dc963fSmrg	thread_safe=yes
576849dc963fSmrg	continue
576949dc963fSmrg	;;
57704b0ead49Smrg
577149dc963fSmrg      -version-info)
577249dc963fSmrg	prev=vinfo
577349dc963fSmrg	continue
577449dc963fSmrg	;;
57754b0ead49Smrg
577649dc963fSmrg      -version-number)
577749dc963fSmrg	prev=vinfo
577849dc963fSmrg	vinfo_number=yes
577949dc963fSmrg	continue
578049dc963fSmrg	;;
57814b0ead49Smrg
578249dc963fSmrg      -weak)
578349dc963fSmrg        prev=weak
578449dc963fSmrg	continue
578549dc963fSmrg	;;
57864b0ead49Smrg
578749dc963fSmrg      -Wc,*)
578849dc963fSmrg	func_stripname '-Wc,' '' "$arg"
578949dc963fSmrg	args=$func_stripname_result
579049dc963fSmrg	arg=
579149dc963fSmrg	save_ifs="$IFS"; IFS=','
579249dc963fSmrg	for flag in $args; do
579349dc963fSmrg	  IFS="$save_ifs"
579449dc963fSmrg          func_quote_for_eval "$flag"
57954e7590efSmrg	  func_append arg " $func_quote_for_eval_result"
57964e7590efSmrg	  func_append compiler_flags " $func_quote_for_eval_result"
579749dc963fSmrg	done
579849dc963fSmrg	IFS="$save_ifs"
579949dc963fSmrg	func_stripname ' ' '' "$arg"
580049dc963fSmrg	arg=$func_stripname_result
580149dc963fSmrg	;;
58024b0ead49Smrg
580349dc963fSmrg      -Wl,*)
580449dc963fSmrg	func_stripname '-Wl,' '' "$arg"
580549dc963fSmrg	args=$func_stripname_result
580649dc963fSmrg	arg=
580749dc963fSmrg	save_ifs="$IFS"; IFS=','
580849dc963fSmrg	for flag in $args; do
580949dc963fSmrg	  IFS="$save_ifs"
581049dc963fSmrg          func_quote_for_eval "$flag"
58114e7590efSmrg	  func_append arg " $wl$func_quote_for_eval_result"
58124e7590efSmrg	  func_append compiler_flags " $wl$func_quote_for_eval_result"
58134e7590efSmrg	  func_append linker_flags " $func_quote_for_eval_result"
581449dc963fSmrg	done
581549dc963fSmrg	IFS="$save_ifs"
581649dc963fSmrg	func_stripname ' ' '' "$arg"
581749dc963fSmrg	arg=$func_stripname_result
581849dc963fSmrg	;;
58194b0ead49Smrg
582049dc963fSmrg      -Xcompiler)
582149dc963fSmrg	prev=xcompiler
582249dc963fSmrg	continue
582349dc963fSmrg	;;
58244b0ead49Smrg
582549dc963fSmrg      -Xlinker)
582649dc963fSmrg	prev=xlinker
582749dc963fSmrg	continue
582849dc963fSmrg	;;
58294b0ead49Smrg
583049dc963fSmrg      -XCClinker)
583149dc963fSmrg	prev=xcclinker
583249dc963fSmrg	continue
583349dc963fSmrg	;;
58344b0ead49Smrg
583549dc963fSmrg      # -msg_* for osf cc
583649dc963fSmrg      -msg_*)
583749dc963fSmrg	func_quote_for_eval "$arg"
583849dc963fSmrg	arg="$func_quote_for_eval_result"
583949dc963fSmrg	;;
58404b0ead49Smrg
58417aa89044Smrg      # Flags to be passed through unchanged, with rationale:
58427aa89044Smrg      # -64, -mips[0-9]      enable 64-bit mode for the SGI compiler
58437aa89044Smrg      # -r[0-9][0-9]*        specify processor for the SGI compiler
58447aa89044Smrg      # -xarch=*, -xtarget=* enable 64-bit mode for the Sun compiler
58457aa89044Smrg      # +DA*, +DD*           enable 64-bit mode for the HP compiler
58467aa89044Smrg      # -q*                  compiler args for the IBM compiler
58477aa89044Smrg      # -m*, -t[45]*, -txscale* architecture-specific flags for GCC
58487aa89044Smrg      # -F/path              path to uninstalled frameworks, gcc on darwin
58497aa89044Smrg      # -p, -pg, --coverage, -fprofile-*  profiling flags for GCC
58507aa89044Smrg      # @file                GCC response files
58517aa89044Smrg      # -tp=*                Portland pgcc target processor selection
58524e7590efSmrg      # --sysroot=*          for sysroot support
58534e7590efSmrg      # -O*, -flto*, -fwhopr*, -fuse-linker-plugin GCC link-time optimization
585449dc963fSmrg      -64|-mips[0-9]|-r[0-9][0-9]*|-xarch=*|-xtarget=*|+DA*|+DD*|-q*|-m*| \
58554e7590efSmrg      -t[45]*|-txscale*|-p|-pg|--coverage|-fprofile-*|-F*|@*|-tp=*|--sysroot=*| \
58564e7590efSmrg      -O*|-flto*|-fwhopr*|-fuse-linker-plugin)
585749dc963fSmrg        func_quote_for_eval "$arg"
585849dc963fSmrg	arg="$func_quote_for_eval_result"
585949dc963fSmrg        func_append compile_command " $arg"
586049dc963fSmrg        func_append finalize_command " $arg"
58614e7590efSmrg        func_append compiler_flags " $arg"
586249dc963fSmrg        continue
586349dc963fSmrg        ;;
58644b0ead49Smrg
586549dc963fSmrg      # Some other compiler flag.
586649dc963fSmrg      -* | +*)
586749dc963fSmrg        func_quote_for_eval "$arg"
586849dc963fSmrg	arg="$func_quote_for_eval_result"
586949dc963fSmrg	;;
58704b0ead49Smrg
587149dc963fSmrg      *.$objext)
587249dc963fSmrg	# A standard object.
58734e7590efSmrg	func_append objs " $arg"
587449dc963fSmrg	;;
58754b0ead49Smrg
587649dc963fSmrg      *.lo)
587749dc963fSmrg	# A libtool-controlled object.
58784b0ead49Smrg
587949dc963fSmrg	# Check to see that this really is a libtool object.
588049dc963fSmrg	if func_lalib_unsafe_p "$arg"; then
588149dc963fSmrg	  pic_object=
588249dc963fSmrg	  non_pic_object=
58834b0ead49Smrg
588449dc963fSmrg	  # Read the .lo file
588549dc963fSmrg	  func_source "$arg"
58864b0ead49Smrg
588749dc963fSmrg	  if test -z "$pic_object" ||
588849dc963fSmrg	     test -z "$non_pic_object" ||
588949dc963fSmrg	     test "$pic_object" = none &&
589049dc963fSmrg	     test "$non_pic_object" = none; then
589149dc963fSmrg	    func_fatal_error "cannot find name of object for \`$arg'"
589249dc963fSmrg	  fi
58934b0ead49Smrg
589449dc963fSmrg	  # Extract subdirectory from the argument.
589549dc963fSmrg	  func_dirname "$arg" "/" ""
589649dc963fSmrg	  xdir="$func_dirname_result"
589752b01e16Smrg
589849dc963fSmrg	  if test "$pic_object" != none; then
589949dc963fSmrg	    # Prepend the subdirectory the object is found in.
590049dc963fSmrg	    pic_object="$xdir$pic_object"
59014b0ead49Smrg
590249dc963fSmrg	    if test "$prev" = dlfiles; then
590349dc963fSmrg	      if test "$build_libtool_libs" = yes && test "$dlopen_support" = yes; then
59044e7590efSmrg		func_append dlfiles " $pic_object"
590549dc963fSmrg		prev=
590649dc963fSmrg		continue
590749dc963fSmrg	      else
590849dc963fSmrg		# If libtool objects are unsupported, then we need to preload.
590949dc963fSmrg		prev=dlprefiles
591049dc963fSmrg	      fi
591149dc963fSmrg	    fi
59124b0ead49Smrg
591349dc963fSmrg	    # CHECK ME:  I think I busted this.  -Ossama
591449dc963fSmrg	    if test "$prev" = dlprefiles; then
591549dc963fSmrg	      # Preload the old-style object.
59164e7590efSmrg	      func_append dlprefiles " $pic_object"
591749dc963fSmrg	      prev=
591849dc963fSmrg	    fi
59194b0ead49Smrg
592049dc963fSmrg	    # A PIC object.
592149dc963fSmrg	    func_append libobjs " $pic_object"
592249dc963fSmrg	    arg="$pic_object"
592349dc963fSmrg	  fi
59244b0ead49Smrg
592549dc963fSmrg	  # Non-PIC object.
592649dc963fSmrg	  if test "$non_pic_object" != none; then
592749dc963fSmrg	    # Prepend the subdirectory the object is found in.
592849dc963fSmrg	    non_pic_object="$xdir$non_pic_object"
59294b0ead49Smrg
593049dc963fSmrg	    # A standard non-PIC object
593149dc963fSmrg	    func_append non_pic_objects " $non_pic_object"
593249dc963fSmrg	    if test -z "$pic_object" || test "$pic_object" = none ; then
593349dc963fSmrg	      arg="$non_pic_object"
593449dc963fSmrg	    fi
593549dc963fSmrg	  else
593649dc963fSmrg	    # If the PIC object exists, use it instead.
593749dc963fSmrg	    # $xdir was prepended to $pic_object above.
593849dc963fSmrg	    non_pic_object="$pic_object"
593949dc963fSmrg	    func_append non_pic_objects " $non_pic_object"
594049dc963fSmrg	  fi
594149dc963fSmrg	else
594249dc963fSmrg	  # Only an error if not doing a dry-run.
594349dc963fSmrg	  if $opt_dry_run; then
594449dc963fSmrg	    # Extract subdirectory from the argument.
594549dc963fSmrg	    func_dirname "$arg" "/" ""
594649dc963fSmrg	    xdir="$func_dirname_result"
594749dc963fSmrg
594849dc963fSmrg	    func_lo2o "$arg"
594949dc963fSmrg	    pic_object=$xdir$objdir/$func_lo2o_result
595049dc963fSmrg	    non_pic_object=$xdir$func_lo2o_result
595149dc963fSmrg	    func_append libobjs " $pic_object"
595249dc963fSmrg	    func_append non_pic_objects " $non_pic_object"
595349dc963fSmrg	  else
595449dc963fSmrg	    func_fatal_error "\`$arg' is not a valid libtool object"
595549dc963fSmrg	  fi
595649dc963fSmrg	fi
595749dc963fSmrg	;;
59584b0ead49Smrg
595949dc963fSmrg      *.$libext)
596049dc963fSmrg	# An archive.
59614e7590efSmrg	func_append deplibs " $arg"
59624e7590efSmrg	func_append old_deplibs " $arg"
596349dc963fSmrg	continue
596449dc963fSmrg	;;
596549dc963fSmrg
596649dc963fSmrg      *.la)
596749dc963fSmrg	# A libtool-controlled library.
596849dc963fSmrg
59694e7590efSmrg	func_resolve_sysroot "$arg"
597049dc963fSmrg	if test "$prev" = dlfiles; then
597149dc963fSmrg	  # This library was specified with -dlopen.
59724e7590efSmrg	  func_append dlfiles " $func_resolve_sysroot_result"
597349dc963fSmrg	  prev=
597449dc963fSmrg	elif test "$prev" = dlprefiles; then
597549dc963fSmrg	  # The library was specified with -dlpreopen.
59764e7590efSmrg	  func_append dlprefiles " $func_resolve_sysroot_result"
597749dc963fSmrg	  prev=
597849dc963fSmrg	else
59794e7590efSmrg	  func_append deplibs " $func_resolve_sysroot_result"
598049dc963fSmrg	fi
598149dc963fSmrg	continue
598249dc963fSmrg	;;
598349dc963fSmrg
598449dc963fSmrg      # Some other compiler argument.
598549dc963fSmrg      *)
598649dc963fSmrg	# Unknown arguments in both finalize_command and compile_command need
598749dc963fSmrg	# to be aesthetically quoted because they are evaled later.
598849dc963fSmrg	func_quote_for_eval "$arg"
598949dc963fSmrg	arg="$func_quote_for_eval_result"
599049dc963fSmrg	;;
599149dc963fSmrg      esac # arg
599249dc963fSmrg
599349dc963fSmrg      # Now actually substitute the argument into the commands.
599449dc963fSmrg      if test -n "$arg"; then
599549dc963fSmrg	func_append compile_command " $arg"
599649dc963fSmrg	func_append finalize_command " $arg"
599749dc963fSmrg      fi
599849dc963fSmrg    done # argument parsing loop
599949dc963fSmrg
600049dc963fSmrg    test -n "$prev" && \
600149dc963fSmrg      func_fatal_help "the \`$prevarg' option requires an argument"
600249dc963fSmrg
600349dc963fSmrg    if test "$export_dynamic" = yes && test -n "$export_dynamic_flag_spec"; then
600449dc963fSmrg      eval arg=\"$export_dynamic_flag_spec\"
600549dc963fSmrg      func_append compile_command " $arg"
600649dc963fSmrg      func_append finalize_command " $arg"
600749dc963fSmrg    fi
600849dc963fSmrg
600949dc963fSmrg    oldlibs=
601049dc963fSmrg    # calculate the name of the file, without its directory
601149dc963fSmrg    func_basename "$output"
601249dc963fSmrg    outputname="$func_basename_result"
601349dc963fSmrg    libobjs_save="$libobjs"
601449dc963fSmrg
601549dc963fSmrg    if test -n "$shlibpath_var"; then
601649dc963fSmrg      # get the directories listed in $shlibpath_var
60177aa89044Smrg      eval shlib_search_path=\`\$ECHO \"\${$shlibpath_var}\" \| \$SED \'s/:/ /g\'\`
601849dc963fSmrg    else
601949dc963fSmrg      shlib_search_path=
602049dc963fSmrg    fi
602149dc963fSmrg    eval sys_lib_search_path=\"$sys_lib_search_path_spec\"
602249dc963fSmrg    eval sys_lib_dlsearch_path=\"$sys_lib_dlsearch_path_spec\"
602349dc963fSmrg
602449dc963fSmrg    func_dirname "$output" "/" ""
602549dc963fSmrg    output_objdir="$func_dirname_result$objdir"
60264e7590efSmrg    func_to_tool_file "$output_objdir/"
60274e7590efSmrg    tool_output_objdir=$func_to_tool_file_result
602849dc963fSmrg    # Create the object directory.
602949dc963fSmrg    func_mkdir_p "$output_objdir"
603049dc963fSmrg
603149dc963fSmrg    # Determine the type of output
603249dc963fSmrg    case $output in
603349dc963fSmrg    "")
603449dc963fSmrg      func_fatal_help "you must specify an output file"
603549dc963fSmrg      ;;
603649dc963fSmrg    *.$libext) linkmode=oldlib ;;
603749dc963fSmrg    *.lo | *.$objext) linkmode=obj ;;
603849dc963fSmrg    *.la) linkmode=lib ;;
603949dc963fSmrg    *) linkmode=prog ;; # Anything else should be a program.
604049dc963fSmrg    esac
604149dc963fSmrg
604249dc963fSmrg    specialdeplibs=
604349dc963fSmrg
604449dc963fSmrg    libs=
604549dc963fSmrg    # Find all interdependent deplibs by searching for libraries
604649dc963fSmrg    # that are linked more than once (e.g. -la -lb -la)
604749dc963fSmrg    for deplib in $deplibs; do
60484e7590efSmrg      if $opt_preserve_dup_deps ; then
604949dc963fSmrg	case "$libs " in
60504e7590efSmrg	*" $deplib "*) func_append specialdeplibs " $deplib" ;;
605149dc963fSmrg	esac
605249dc963fSmrg      fi
60534e7590efSmrg      func_append libs " $deplib"
605449dc963fSmrg    done
605549dc963fSmrg
605649dc963fSmrg    if test "$linkmode" = lib; then
605749dc963fSmrg      libs="$predeps $libs $compiler_lib_search_path $postdeps"
605849dc963fSmrg
605949dc963fSmrg      # Compute libraries that are listed more than once in $predeps
606049dc963fSmrg      # $postdeps and mark them as special (i.e., whose duplicates are
606149dc963fSmrg      # not to be eliminated).
606249dc963fSmrg      pre_post_deps=
606349dc963fSmrg      if $opt_duplicate_compiler_generated_deps; then
606449dc963fSmrg	for pre_post_dep in $predeps $postdeps; do
606549dc963fSmrg	  case "$pre_post_deps " in
60664e7590efSmrg	  *" $pre_post_dep "*) func_append specialdeplibs " $pre_post_deps" ;;
606749dc963fSmrg	  esac
60684e7590efSmrg	  func_append pre_post_deps " $pre_post_dep"
606949dc963fSmrg	done
607049dc963fSmrg      fi
607149dc963fSmrg      pre_post_deps=
607249dc963fSmrg    fi
607349dc963fSmrg
607449dc963fSmrg    deplibs=
607549dc963fSmrg    newdependency_libs=
607649dc963fSmrg    newlib_search_path=
607749dc963fSmrg    need_relink=no # whether we're linking any uninstalled libtool libraries
607849dc963fSmrg    notinst_deplibs= # not-installed libtool libraries
607949dc963fSmrg    notinst_path= # paths that contain not-installed libtool libraries
608049dc963fSmrg
608149dc963fSmrg    case $linkmode in
608249dc963fSmrg    lib)
608349dc963fSmrg	passes="conv dlpreopen link"
608449dc963fSmrg	for file in $dlfiles $dlprefiles; do
608549dc963fSmrg	  case $file in
608649dc963fSmrg	  *.la) ;;
608749dc963fSmrg	  *)
608849dc963fSmrg	    func_fatal_help "libraries can \`-dlopen' only libtool libraries: $file"
608949dc963fSmrg	    ;;
609049dc963fSmrg	  esac
609149dc963fSmrg	done
609249dc963fSmrg	;;
609349dc963fSmrg    prog)
609449dc963fSmrg	compile_deplibs=
609549dc963fSmrg	finalize_deplibs=
609649dc963fSmrg	alldeplibs=no
609749dc963fSmrg	newdlfiles=
609849dc963fSmrg	newdlprefiles=
609949dc963fSmrg	passes="conv scan dlopen dlpreopen link"
610049dc963fSmrg	;;
610149dc963fSmrg    *)  passes="conv"
610249dc963fSmrg	;;
610349dc963fSmrg    esac
610449dc963fSmrg
610549dc963fSmrg    for pass in $passes; do
610649dc963fSmrg      # The preopen pass in lib mode reverses $deplibs; put it back here
610749dc963fSmrg      # so that -L comes before libs that need it for instance...
610849dc963fSmrg      if test "$linkmode,$pass" = "lib,link"; then
610949dc963fSmrg	## FIXME: Find the place where the list is rebuilt in the wrong
611049dc963fSmrg	##        order, and fix it there properly
611149dc963fSmrg        tmp_deplibs=
611249dc963fSmrg	for deplib in $deplibs; do
611349dc963fSmrg	  tmp_deplibs="$deplib $tmp_deplibs"
611449dc963fSmrg	done
611549dc963fSmrg	deplibs="$tmp_deplibs"
611649dc963fSmrg      fi
611749dc963fSmrg
611849dc963fSmrg      if test "$linkmode,$pass" = "lib,link" ||
611949dc963fSmrg	 test "$linkmode,$pass" = "prog,scan"; then
612049dc963fSmrg	libs="$deplibs"
612149dc963fSmrg	deplibs=
612249dc963fSmrg      fi
612349dc963fSmrg      if test "$linkmode" = prog; then
612449dc963fSmrg	case $pass in
612549dc963fSmrg	dlopen) libs="$dlfiles" ;;
612649dc963fSmrg	dlpreopen) libs="$dlprefiles" ;;
612749dc963fSmrg	link) libs="$deplibs %DEPLIBS% $dependency_libs" ;;
612849dc963fSmrg	esac
612949dc963fSmrg      fi
613049dc963fSmrg      if test "$linkmode,$pass" = "lib,dlpreopen"; then
613149dc963fSmrg	# Collect and forward deplibs of preopened libtool libs
613249dc963fSmrg	for lib in $dlprefiles; do
613349dc963fSmrg	  # Ignore non-libtool-libs
613449dc963fSmrg	  dependency_libs=
61354e7590efSmrg	  func_resolve_sysroot "$lib"
613649dc963fSmrg	  case $lib in
61374e7590efSmrg	  *.la)	func_source "$func_resolve_sysroot_result" ;;
613849dc963fSmrg	  esac
613949dc963fSmrg
614049dc963fSmrg	  # Collect preopened libtool deplibs, except any this library
614149dc963fSmrg	  # has declared as weak libs
614249dc963fSmrg	  for deplib in $dependency_libs; do
61437aa89044Smrg	    func_basename "$deplib"
61447aa89044Smrg            deplib_base=$func_basename_result
614549dc963fSmrg	    case " $weak_libs " in
614649dc963fSmrg	    *" $deplib_base "*) ;;
61474e7590efSmrg	    *) func_append deplibs " $deplib" ;;
614849dc963fSmrg	    esac
614949dc963fSmrg	  done
615049dc963fSmrg	done
615149dc963fSmrg	libs="$dlprefiles"
615249dc963fSmrg      fi
615349dc963fSmrg      if test "$pass" = dlopen; then
615449dc963fSmrg	# Collect dlpreopened libraries
615549dc963fSmrg	save_deplibs="$deplibs"
615649dc963fSmrg	deplibs=
615749dc963fSmrg      fi
615849dc963fSmrg
615949dc963fSmrg      for deplib in $libs; do
616049dc963fSmrg	lib=
616149dc963fSmrg	found=no
616249dc963fSmrg	case $deplib in
61634e7590efSmrg	-mt|-mthreads|-kthread|-Kthread|-pthread|-pthreads|--thread-safe \
61644e7590efSmrg        |-threads|-fopenmp|-openmp|-mp|-xopenmp|-omp|-qsmp=*)
616549dc963fSmrg	  if test "$linkmode,$pass" = "prog,link"; then
616649dc963fSmrg	    compile_deplibs="$deplib $compile_deplibs"
616749dc963fSmrg	    finalize_deplibs="$deplib $finalize_deplibs"
616849dc963fSmrg	  else
61694e7590efSmrg	    func_append compiler_flags " $deplib"
617049dc963fSmrg	    if test "$linkmode" = lib ; then
617149dc963fSmrg		case "$new_inherited_linker_flags " in
617249dc963fSmrg		    *" $deplib "*) ;;
61734e7590efSmrg		    * ) func_append new_inherited_linker_flags " $deplib" ;;
617449dc963fSmrg		esac
617549dc963fSmrg	    fi
617649dc963fSmrg	  fi
617749dc963fSmrg	  continue
617849dc963fSmrg	  ;;
617949dc963fSmrg	-l*)
618049dc963fSmrg	  if test "$linkmode" != lib && test "$linkmode" != prog; then
618149dc963fSmrg	    func_warning "\`-l' is ignored for archives/objects"
618249dc963fSmrg	    continue
618349dc963fSmrg	  fi
618449dc963fSmrg	  func_stripname '-l' '' "$deplib"
618549dc963fSmrg	  name=$func_stripname_result
618649dc963fSmrg	  if test "$linkmode" = lib; then
618749dc963fSmrg	    searchdirs="$newlib_search_path $lib_search_path $compiler_lib_search_dirs $sys_lib_search_path $shlib_search_path"
618849dc963fSmrg	  else
618949dc963fSmrg	    searchdirs="$newlib_search_path $lib_search_path $sys_lib_search_path $shlib_search_path"
619049dc963fSmrg	  fi
619149dc963fSmrg	  for searchdir in $searchdirs; do
619249dc963fSmrg	    for search_ext in .la $std_shrext .so .a; do
619349dc963fSmrg	      # Search the libtool library
619449dc963fSmrg	      lib="$searchdir/lib${name}${search_ext}"
619549dc963fSmrg	      if test -f "$lib"; then
619649dc963fSmrg		if test "$search_ext" = ".la"; then
619749dc963fSmrg		  found=yes
619849dc963fSmrg		else
619949dc963fSmrg		  found=no
620049dc963fSmrg		fi
620149dc963fSmrg		break 2
620249dc963fSmrg	      fi
620349dc963fSmrg	    done
620449dc963fSmrg	  done
620549dc963fSmrg	  if test "$found" != yes; then
620649dc963fSmrg	    # deplib doesn't seem to be a libtool library
620749dc963fSmrg	    if test "$linkmode,$pass" = "prog,link"; then
620849dc963fSmrg	      compile_deplibs="$deplib $compile_deplibs"
620949dc963fSmrg	      finalize_deplibs="$deplib $finalize_deplibs"
621049dc963fSmrg	    else
621149dc963fSmrg	      deplibs="$deplib $deplibs"
621249dc963fSmrg	      test "$linkmode" = lib && newdependency_libs="$deplib $newdependency_libs"
621349dc963fSmrg	    fi
621449dc963fSmrg	    continue
621549dc963fSmrg	  else # deplib is a libtool library
621649dc963fSmrg	    # If $allow_libtool_libs_with_static_runtimes && $deplib is a stdlib,
621749dc963fSmrg	    # We need to do some special things here, and not later.
621849dc963fSmrg	    if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then
621949dc963fSmrg	      case " $predeps $postdeps " in
622049dc963fSmrg	      *" $deplib "*)
622149dc963fSmrg		if func_lalib_p "$lib"; then
622249dc963fSmrg		  library_names=
622349dc963fSmrg		  old_library=
622449dc963fSmrg		  func_source "$lib"
622549dc963fSmrg		  for l in $old_library $library_names; do
622649dc963fSmrg		    ll="$l"
622749dc963fSmrg		  done
622849dc963fSmrg		  if test "X$ll" = "X$old_library" ; then # only static version available
622949dc963fSmrg		    found=no
623049dc963fSmrg		    func_dirname "$lib" "" "."
623149dc963fSmrg		    ladir="$func_dirname_result"
623249dc963fSmrg		    lib=$ladir/$old_library
623349dc963fSmrg		    if test "$linkmode,$pass" = "prog,link"; then
623449dc963fSmrg		      compile_deplibs="$deplib $compile_deplibs"
623549dc963fSmrg		      finalize_deplibs="$deplib $finalize_deplibs"
623649dc963fSmrg		    else
623749dc963fSmrg		      deplibs="$deplib $deplibs"
623849dc963fSmrg		      test "$linkmode" = lib && newdependency_libs="$deplib $newdependency_libs"
623949dc963fSmrg		    fi
624049dc963fSmrg		    continue
624149dc963fSmrg		  fi
624249dc963fSmrg		fi
624349dc963fSmrg		;;
624449dc963fSmrg	      *) ;;
624549dc963fSmrg	      esac
624649dc963fSmrg	    fi
624749dc963fSmrg	  fi
624849dc963fSmrg	  ;; # -l
624949dc963fSmrg	*.ltframework)
625049dc963fSmrg	  if test "$linkmode,$pass" = "prog,link"; then
625149dc963fSmrg	    compile_deplibs="$deplib $compile_deplibs"
625249dc963fSmrg	    finalize_deplibs="$deplib $finalize_deplibs"
625349dc963fSmrg	  else
625449dc963fSmrg	    deplibs="$deplib $deplibs"
625549dc963fSmrg	    if test "$linkmode" = lib ; then
625649dc963fSmrg		case "$new_inherited_linker_flags " in
625749dc963fSmrg		    *" $deplib "*) ;;
62584e7590efSmrg		    * ) func_append new_inherited_linker_flags " $deplib" ;;
625949dc963fSmrg		esac
626049dc963fSmrg	    fi
626149dc963fSmrg	  fi
626249dc963fSmrg	  continue
626349dc963fSmrg	  ;;
626449dc963fSmrg	-L*)
626549dc963fSmrg	  case $linkmode in
626649dc963fSmrg	  lib)
626749dc963fSmrg	    deplibs="$deplib $deplibs"
626849dc963fSmrg	    test "$pass" = conv && continue
626949dc963fSmrg	    newdependency_libs="$deplib $newdependency_libs"
627049dc963fSmrg	    func_stripname '-L' '' "$deplib"
62714e7590efSmrg	    func_resolve_sysroot "$func_stripname_result"
62724e7590efSmrg	    func_append newlib_search_path " $func_resolve_sysroot_result"
627349dc963fSmrg	    ;;
627449dc963fSmrg	  prog)
627549dc963fSmrg	    if test "$pass" = conv; then
627649dc963fSmrg	      deplibs="$deplib $deplibs"
627749dc963fSmrg	      continue
627849dc963fSmrg	    fi
627949dc963fSmrg	    if test "$pass" = scan; then
628049dc963fSmrg	      deplibs="$deplib $deplibs"
628149dc963fSmrg	    else
628249dc963fSmrg	      compile_deplibs="$deplib $compile_deplibs"
628349dc963fSmrg	      finalize_deplibs="$deplib $finalize_deplibs"
628449dc963fSmrg	    fi
628549dc963fSmrg	    func_stripname '-L' '' "$deplib"
62864e7590efSmrg	    func_resolve_sysroot "$func_stripname_result"
62874e7590efSmrg	    func_append newlib_search_path " $func_resolve_sysroot_result"
628849dc963fSmrg	    ;;
628949dc963fSmrg	  *)
629049dc963fSmrg	    func_warning "\`-L' is ignored for archives/objects"
629149dc963fSmrg	    ;;
629249dc963fSmrg	  esac # linkmode
629349dc963fSmrg	  continue
629449dc963fSmrg	  ;; # -L
629549dc963fSmrg	-R*)
629649dc963fSmrg	  if test "$pass" = link; then
629749dc963fSmrg	    func_stripname '-R' '' "$deplib"
62984e7590efSmrg	    func_resolve_sysroot "$func_stripname_result"
62994e7590efSmrg	    dir=$func_resolve_sysroot_result
630049dc963fSmrg	    # Make sure the xrpath contains only unique directories.
630149dc963fSmrg	    case "$xrpath " in
630249dc963fSmrg	    *" $dir "*) ;;
63034e7590efSmrg	    *) func_append xrpath " $dir" ;;
630449dc963fSmrg	    esac
630549dc963fSmrg	  fi
630649dc963fSmrg	  deplibs="$deplib $deplibs"
630749dc963fSmrg	  continue
630849dc963fSmrg	  ;;
63094e7590efSmrg	*.la)
63104e7590efSmrg	  func_resolve_sysroot "$deplib"
63114e7590efSmrg	  lib=$func_resolve_sysroot_result
63124e7590efSmrg	  ;;
631349dc963fSmrg	*.$libext)
631449dc963fSmrg	  if test "$pass" = conv; then
631549dc963fSmrg	    deplibs="$deplib $deplibs"
631649dc963fSmrg	    continue
631749dc963fSmrg	  fi
631849dc963fSmrg	  case $linkmode in
631949dc963fSmrg	  lib)
632049dc963fSmrg	    # Linking convenience modules into shared libraries is allowed,
632149dc963fSmrg	    # but linking other static libraries is non-portable.
632249dc963fSmrg	    case " $dlpreconveniencelibs " in
632349dc963fSmrg	    *" $deplib "*) ;;
632449dc963fSmrg	    *)
632549dc963fSmrg	      valid_a_lib=no
632649dc963fSmrg	      case $deplibs_check_method in
632749dc963fSmrg		match_pattern*)
632849dc963fSmrg		  set dummy $deplibs_check_method; shift
632949dc963fSmrg		  match_pattern_regex=`expr "$deplibs_check_method" : "$1 \(.*\)"`
63307aa89044Smrg		  if eval "\$ECHO \"$deplib\"" 2>/dev/null | $SED 10q \
633149dc963fSmrg		    | $EGREP "$match_pattern_regex" > /dev/null; then
633249dc963fSmrg		    valid_a_lib=yes
633349dc963fSmrg		  fi
633449dc963fSmrg		;;
633549dc963fSmrg		pass_all)
633649dc963fSmrg		  valid_a_lib=yes
633749dc963fSmrg		;;
633849dc963fSmrg	      esac
633949dc963fSmrg	      if test "$valid_a_lib" != yes; then
63407aa89044Smrg		echo
634149dc963fSmrg		$ECHO "*** Warning: Trying to link with static lib archive $deplib."
63427aa89044Smrg		echo "*** I have the capability to make that library automatically link in when"
63437aa89044Smrg		echo "*** you link to this library.  But I can only do this if you have a"
63447aa89044Smrg		echo "*** shared version of the library, which you do not appear to have"
63457aa89044Smrg		echo "*** because the file extensions .$libext of this argument makes me believe"
63467aa89044Smrg		echo "*** that it is just a static archive that I should not use here."
634749dc963fSmrg	      else
63487aa89044Smrg		echo
634949dc963fSmrg		$ECHO "*** Warning: Linking the shared library $output against the"
635049dc963fSmrg		$ECHO "*** static library $deplib is not portable!"
635149dc963fSmrg		deplibs="$deplib $deplibs"
635249dc963fSmrg	      fi
635349dc963fSmrg	      ;;
635449dc963fSmrg	    esac
635549dc963fSmrg	    continue
635649dc963fSmrg	    ;;
635749dc963fSmrg	  prog)
635849dc963fSmrg	    if test "$pass" != link; then
635949dc963fSmrg	      deplibs="$deplib $deplibs"
636049dc963fSmrg	    else
636149dc963fSmrg	      compile_deplibs="$deplib $compile_deplibs"
636249dc963fSmrg	      finalize_deplibs="$deplib $finalize_deplibs"
636349dc963fSmrg	    fi
636449dc963fSmrg	    continue
636549dc963fSmrg	    ;;
636649dc963fSmrg	  esac # linkmode
636749dc963fSmrg	  ;; # *.$libext
636849dc963fSmrg	*.lo | *.$objext)
636949dc963fSmrg	  if test "$pass" = conv; then
637049dc963fSmrg	    deplibs="$deplib $deplibs"
637149dc963fSmrg	  elif test "$linkmode" = prog; then
637249dc963fSmrg	    if test "$pass" = dlpreopen || test "$dlopen_support" != yes || test "$build_libtool_libs" = no; then
637349dc963fSmrg	      # If there is no dlopen support or we're linking statically,
637449dc963fSmrg	      # we need to preload.
63754e7590efSmrg	      func_append newdlprefiles " $deplib"
637649dc963fSmrg	      compile_deplibs="$deplib $compile_deplibs"
637749dc963fSmrg	      finalize_deplibs="$deplib $finalize_deplibs"
637849dc963fSmrg	    else
63794e7590efSmrg	      func_append newdlfiles " $deplib"
638049dc963fSmrg	    fi
638149dc963fSmrg	  fi
638249dc963fSmrg	  continue
638349dc963fSmrg	  ;;
638449dc963fSmrg	%DEPLIBS%)
638549dc963fSmrg	  alldeplibs=yes
638649dc963fSmrg	  continue
638749dc963fSmrg	  ;;
638849dc963fSmrg	esac # case $deplib
638949dc963fSmrg
639049dc963fSmrg	if test "$found" = yes || test -f "$lib"; then :
639149dc963fSmrg	else
639249dc963fSmrg	  func_fatal_error "cannot find the library \`$lib' or unhandled argument \`$deplib'"
639349dc963fSmrg	fi
639449dc963fSmrg
639549dc963fSmrg	# Check to see that this really is a libtool archive.
639649dc963fSmrg	func_lalib_unsafe_p "$lib" \
639749dc963fSmrg	  || func_fatal_error "\`$lib' is not a valid libtool archive"
639849dc963fSmrg
639949dc963fSmrg	func_dirname "$lib" "" "."
640049dc963fSmrg	ladir="$func_dirname_result"
640149dc963fSmrg
640249dc963fSmrg	dlname=
640349dc963fSmrg	dlopen=
640449dc963fSmrg	dlpreopen=
640549dc963fSmrg	libdir=
640649dc963fSmrg	library_names=
640749dc963fSmrg	old_library=
640849dc963fSmrg	inherited_linker_flags=
640949dc963fSmrg	# If the library was installed with an old release of libtool,
641049dc963fSmrg	# it will not redefine variables installed, or shouldnotlink
641149dc963fSmrg	installed=yes
641249dc963fSmrg	shouldnotlink=no
641349dc963fSmrg	avoidtemprpath=
641449dc963fSmrg
641549dc963fSmrg
641649dc963fSmrg	# Read the .la file
641749dc963fSmrg	func_source "$lib"
641849dc963fSmrg
641949dc963fSmrg	# Convert "-framework foo" to "foo.ltframework"
642049dc963fSmrg	if test -n "$inherited_linker_flags"; then
64217aa89044Smrg	  tmp_inherited_linker_flags=`$ECHO "$inherited_linker_flags" | $SED 's/-framework \([^ $]*\)/\1.ltframework/g'`
642249dc963fSmrg	  for tmp_inherited_linker_flag in $tmp_inherited_linker_flags; do
642349dc963fSmrg	    case " $new_inherited_linker_flags " in
642449dc963fSmrg	      *" $tmp_inherited_linker_flag "*) ;;
64254e7590efSmrg	      *) func_append new_inherited_linker_flags " $tmp_inherited_linker_flag";;
642649dc963fSmrg	    esac
642749dc963fSmrg	  done
642849dc963fSmrg	fi
64297aa89044Smrg	dependency_libs=`$ECHO " $dependency_libs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'`
643049dc963fSmrg	if test "$linkmode,$pass" = "lib,link" ||
643149dc963fSmrg	   test "$linkmode,$pass" = "prog,scan" ||
643249dc963fSmrg	   { test "$linkmode" != prog && test "$linkmode" != lib; }; then
64334e7590efSmrg	  test -n "$dlopen" && func_append dlfiles " $dlopen"
64344e7590efSmrg	  test -n "$dlpreopen" && func_append dlprefiles " $dlpreopen"
643549dc963fSmrg	fi
643649dc963fSmrg
643749dc963fSmrg	if test "$pass" = conv; then
643849dc963fSmrg	  # Only check for convenience libraries
643949dc963fSmrg	  deplibs="$lib $deplibs"
644049dc963fSmrg	  if test -z "$libdir"; then
644149dc963fSmrg	    if test -z "$old_library"; then
644249dc963fSmrg	      func_fatal_error "cannot find name of link library for \`$lib'"
644349dc963fSmrg	    fi
644449dc963fSmrg	    # It is a libtool convenience library, so add in its objects.
64454e7590efSmrg	    func_append convenience " $ladir/$objdir/$old_library"
64464e7590efSmrg	    func_append old_convenience " $ladir/$objdir/$old_library"
644749dc963fSmrg	  elif test "$linkmode" != prog && test "$linkmode" != lib; then
644849dc963fSmrg	    func_fatal_error "\`$lib' is not a convenience library"
644949dc963fSmrg	  fi
645049dc963fSmrg	  tmp_libs=
645149dc963fSmrg	  for deplib in $dependency_libs; do
645249dc963fSmrg	    deplibs="$deplib $deplibs"
64534e7590efSmrg	    if $opt_preserve_dup_deps ; then
645449dc963fSmrg	      case "$tmp_libs " in
64554e7590efSmrg	      *" $deplib "*) func_append specialdeplibs " $deplib" ;;
645649dc963fSmrg	      esac
645749dc963fSmrg	    fi
64584e7590efSmrg	    func_append tmp_libs " $deplib"
645949dc963fSmrg	  done
646049dc963fSmrg	  continue
646149dc963fSmrg	fi # $pass = conv
646249dc963fSmrg
646349dc963fSmrg
646449dc963fSmrg	# Get the name of the library we link against.
646549dc963fSmrg	linklib=
64664e7590efSmrg	if test -n "$old_library" &&
64674e7590efSmrg	   { test "$prefer_static_libs" = yes ||
64684e7590efSmrg	     test "$prefer_static_libs,$installed" = "built,no"; }; then
64694e7590efSmrg	  linklib=$old_library
64704e7590efSmrg	else
64714e7590efSmrg	  for l in $old_library $library_names; do
64724e7590efSmrg	    linklib="$l"
64734e7590efSmrg	  done
64744e7590efSmrg	fi
647549dc963fSmrg	if test -z "$linklib"; then
647649dc963fSmrg	  func_fatal_error "cannot find name of link library for \`$lib'"
647749dc963fSmrg	fi
647849dc963fSmrg
647949dc963fSmrg	# This library was specified with -dlopen.
648049dc963fSmrg	if test "$pass" = dlopen; then
648149dc963fSmrg	  if test -z "$libdir"; then
648249dc963fSmrg	    func_fatal_error "cannot -dlopen a convenience library: \`$lib'"
648349dc963fSmrg	  fi
648449dc963fSmrg	  if test -z "$dlname" ||
648549dc963fSmrg	     test "$dlopen_support" != yes ||
648649dc963fSmrg	     test "$build_libtool_libs" = no; then
648749dc963fSmrg	    # If there is no dlname, no dlopen support or we're linking
648849dc963fSmrg	    # statically, we need to preload.  We also need to preload any
648949dc963fSmrg	    # dependent libraries so libltdl's deplib preloader doesn't
649049dc963fSmrg	    # bomb out in the load deplibs phase.
64914e7590efSmrg	    func_append dlprefiles " $lib $dependency_libs"
649249dc963fSmrg	  else
64934e7590efSmrg	    func_append newdlfiles " $lib"
649449dc963fSmrg	  fi
649549dc963fSmrg	  continue
649649dc963fSmrg	fi # $pass = dlopen
649749dc963fSmrg
649849dc963fSmrg	# We need an absolute path.
649949dc963fSmrg	case $ladir in
650049dc963fSmrg	[\\/]* | [A-Za-z]:[\\/]*) abs_ladir="$ladir" ;;
650149dc963fSmrg	*)
650249dc963fSmrg	  abs_ladir=`cd "$ladir" && pwd`
650349dc963fSmrg	  if test -z "$abs_ladir"; then
650449dc963fSmrg	    func_warning "cannot determine absolute directory name of \`$ladir'"
650549dc963fSmrg	    func_warning "passing it literally to the linker, although it might fail"
650649dc963fSmrg	    abs_ladir="$ladir"
650749dc963fSmrg	  fi
650849dc963fSmrg	  ;;
650949dc963fSmrg	esac
651049dc963fSmrg	func_basename "$lib"
651149dc963fSmrg	laname="$func_basename_result"
651249dc963fSmrg
651349dc963fSmrg	# Find the relevant object directory and library name.
651449dc963fSmrg	if test "X$installed" = Xyes; then
65154e7590efSmrg	  if test ! -f "$lt_sysroot$libdir/$linklib" && test -f "$abs_ladir/$linklib"; then
651649dc963fSmrg	    func_warning "library \`$lib' was moved."
651749dc963fSmrg	    dir="$ladir"
651849dc963fSmrg	    absdir="$abs_ladir"
651949dc963fSmrg	    libdir="$abs_ladir"
652049dc963fSmrg	  else
65214e7590efSmrg	    dir="$lt_sysroot$libdir"
65224e7590efSmrg	    absdir="$lt_sysroot$libdir"
652349dc963fSmrg	  fi
652449dc963fSmrg	  test "X$hardcode_automatic" = Xyes && avoidtemprpath=yes
652549dc963fSmrg	else
652649dc963fSmrg	  if test ! -f "$ladir/$objdir/$linklib" && test -f "$abs_ladir/$linklib"; then
652749dc963fSmrg	    dir="$ladir"
652849dc963fSmrg	    absdir="$abs_ladir"
652949dc963fSmrg	    # Remove this search path later
65304e7590efSmrg	    func_append notinst_path " $abs_ladir"
653149dc963fSmrg	  else
653249dc963fSmrg	    dir="$ladir/$objdir"
653349dc963fSmrg	    absdir="$abs_ladir/$objdir"
653449dc963fSmrg	    # Remove this search path later
65354e7590efSmrg	    func_append notinst_path " $abs_ladir"
653649dc963fSmrg	  fi
653749dc963fSmrg	fi # $installed = yes
653849dc963fSmrg	func_stripname 'lib' '.la' "$laname"
653949dc963fSmrg	name=$func_stripname_result
654049dc963fSmrg
654149dc963fSmrg	# This library was specified with -dlpreopen.
654249dc963fSmrg	if test "$pass" = dlpreopen; then
654349dc963fSmrg	  if test -z "$libdir" && test "$linkmode" = prog; then
654449dc963fSmrg	    func_fatal_error "only libraries may -dlpreopen a convenience library: \`$lib'"
654549dc963fSmrg	  fi
65464e7590efSmrg	  case "$host" in
65474e7590efSmrg	    # special handling for platforms with PE-DLLs.
65484e7590efSmrg	    *cygwin* | *mingw* | *cegcc* )
65494e7590efSmrg	      # Linker will automatically link against shared library if both
65504e7590efSmrg	      # static and shared are present.  Therefore, ensure we extract
65514e7590efSmrg	      # symbols from the import library if a shared library is present
65524e7590efSmrg	      # (otherwise, the dlopen module name will be incorrect).  We do
65534e7590efSmrg	      # this by putting the import library name into $newdlprefiles.
65544e7590efSmrg	      # We recover the dlopen module name by 'saving' the la file
65554e7590efSmrg	      # name in a special purpose variable, and (later) extracting the
65564e7590efSmrg	      # dlname from the la file.
65574e7590efSmrg	      if test -n "$dlname"; then
65584e7590efSmrg	        func_tr_sh "$dir/$linklib"
65594e7590efSmrg	        eval "libfile_$func_tr_sh_result=\$abs_ladir/\$laname"
65604e7590efSmrg	        func_append newdlprefiles " $dir/$linklib"
65614e7590efSmrg	      else
65624e7590efSmrg	        func_append newdlprefiles " $dir/$old_library"
65634e7590efSmrg	        # Keep a list of preopened convenience libraries to check
65644e7590efSmrg	        # that they are being used correctly in the link pass.
65654e7590efSmrg	        test -z "$libdir" && \
65664e7590efSmrg	          func_append dlpreconveniencelibs " $dir/$old_library"
65674e7590efSmrg	      fi
65684e7590efSmrg	    ;;
65694e7590efSmrg	    * )
65704e7590efSmrg	      # Prefer using a static library (so that no silly _DYNAMIC symbols
65714e7590efSmrg	      # are required to link).
65724e7590efSmrg	      if test -n "$old_library"; then
65734e7590efSmrg	        func_append newdlprefiles " $dir/$old_library"
65744e7590efSmrg	        # Keep a list of preopened convenience libraries to check
65754e7590efSmrg	        # that they are being used correctly in the link pass.
65764e7590efSmrg	        test -z "$libdir" && \
65774e7590efSmrg	          func_append dlpreconveniencelibs " $dir/$old_library"
65784e7590efSmrg	      # Otherwise, use the dlname, so that lt_dlopen finds it.
65794e7590efSmrg	      elif test -n "$dlname"; then
65804e7590efSmrg	        func_append newdlprefiles " $dir/$dlname"
65814e7590efSmrg	      else
65824e7590efSmrg	        func_append newdlprefiles " $dir/$linklib"
65834e7590efSmrg	      fi
65844e7590efSmrg	    ;;
65854e7590efSmrg	  esac
658649dc963fSmrg	fi # $pass = dlpreopen
658749dc963fSmrg
658849dc963fSmrg	if test -z "$libdir"; then
658949dc963fSmrg	  # Link the convenience library
659049dc963fSmrg	  if test "$linkmode" = lib; then
659149dc963fSmrg	    deplibs="$dir/$old_library $deplibs"
659249dc963fSmrg	  elif test "$linkmode,$pass" = "prog,link"; then
659349dc963fSmrg	    compile_deplibs="$dir/$old_library $compile_deplibs"
659449dc963fSmrg	    finalize_deplibs="$dir/$old_library $finalize_deplibs"
659549dc963fSmrg	  else
659649dc963fSmrg	    deplibs="$lib $deplibs" # used for prog,scan pass
659749dc963fSmrg	  fi
659849dc963fSmrg	  continue
659949dc963fSmrg	fi
660049dc963fSmrg
660149dc963fSmrg
660249dc963fSmrg	if test "$linkmode" = prog && test "$pass" != link; then
66034e7590efSmrg	  func_append newlib_search_path " $ladir"
660449dc963fSmrg	  deplibs="$lib $deplibs"
660549dc963fSmrg
660649dc963fSmrg	  linkalldeplibs=no
660749dc963fSmrg	  if test "$link_all_deplibs" != no || test -z "$library_names" ||
660849dc963fSmrg	     test "$build_libtool_libs" = no; then
660949dc963fSmrg	    linkalldeplibs=yes
661049dc963fSmrg	  fi
661149dc963fSmrg
661249dc963fSmrg	  tmp_libs=
661349dc963fSmrg	  for deplib in $dependency_libs; do
661449dc963fSmrg	    case $deplib in
661549dc963fSmrg	    -L*) func_stripname '-L' '' "$deplib"
66164e7590efSmrg	         func_resolve_sysroot "$func_stripname_result"
66174e7590efSmrg	         func_append newlib_search_path " $func_resolve_sysroot_result"
661849dc963fSmrg		 ;;
661949dc963fSmrg	    esac
662049dc963fSmrg	    # Need to link against all dependency_libs?
662149dc963fSmrg	    if test "$linkalldeplibs" = yes; then
662249dc963fSmrg	      deplibs="$deplib $deplibs"
662349dc963fSmrg	    else
662449dc963fSmrg	      # Need to hardcode shared library paths
662549dc963fSmrg	      # or/and link against static libraries
662649dc963fSmrg	      newdependency_libs="$deplib $newdependency_libs"
662749dc963fSmrg	    fi
66284e7590efSmrg	    if $opt_preserve_dup_deps ; then
662949dc963fSmrg	      case "$tmp_libs " in
66304e7590efSmrg	      *" $deplib "*) func_append specialdeplibs " $deplib" ;;
663149dc963fSmrg	      esac
663249dc963fSmrg	    fi
66334e7590efSmrg	    func_append tmp_libs " $deplib"
663449dc963fSmrg	  done # for deplib
663549dc963fSmrg	  continue
663649dc963fSmrg	fi # $linkmode = prog...
663749dc963fSmrg
663849dc963fSmrg	if test "$linkmode,$pass" = "prog,link"; then
663949dc963fSmrg	  if test -n "$library_names" &&
664049dc963fSmrg	     { { test "$prefer_static_libs" = no ||
664149dc963fSmrg	         test "$prefer_static_libs,$installed" = "built,yes"; } ||
664249dc963fSmrg	       test -z "$old_library"; }; then
664349dc963fSmrg	    # We need to hardcode the library path
664449dc963fSmrg	    if test -n "$shlibpath_var" && test -z "$avoidtemprpath" ; then
664549dc963fSmrg	      # Make sure the rpath contains only unique directories.
664649dc963fSmrg	      case "$temp_rpath:" in
664749dc963fSmrg	      *"$absdir:"*) ;;
66484e7590efSmrg	      *) func_append temp_rpath "$absdir:" ;;
664949dc963fSmrg	      esac
665049dc963fSmrg	    fi
665149dc963fSmrg
665249dc963fSmrg	    # Hardcode the library path.
665349dc963fSmrg	    # Skip directories that are in the system default run-time
665449dc963fSmrg	    # search path.
665549dc963fSmrg	    case " $sys_lib_dlsearch_path " in
665649dc963fSmrg	    *" $absdir "*) ;;
665749dc963fSmrg	    *)
665849dc963fSmrg	      case "$compile_rpath " in
665949dc963fSmrg	      *" $absdir "*) ;;
66604e7590efSmrg	      *) func_append compile_rpath " $absdir" ;;
666149dc963fSmrg	      esac
666249dc963fSmrg	      ;;
666349dc963fSmrg	    esac
666449dc963fSmrg	    case " $sys_lib_dlsearch_path " in
666549dc963fSmrg	    *" $libdir "*) ;;
666649dc963fSmrg	    *)
666749dc963fSmrg	      case "$finalize_rpath " in
666849dc963fSmrg	      *" $libdir "*) ;;
66694e7590efSmrg	      *) func_append finalize_rpath " $libdir" ;;
667049dc963fSmrg	      esac
667149dc963fSmrg	      ;;
667249dc963fSmrg	    esac
667349dc963fSmrg	  fi # $linkmode,$pass = prog,link...
667449dc963fSmrg
667549dc963fSmrg	  if test "$alldeplibs" = yes &&
667649dc963fSmrg	     { test "$deplibs_check_method" = pass_all ||
667749dc963fSmrg	       { test "$build_libtool_libs" = yes &&
667849dc963fSmrg		 test -n "$library_names"; }; }; then
667949dc963fSmrg	    # We only need to search for static libraries
668049dc963fSmrg	    continue
668149dc963fSmrg	  fi
668249dc963fSmrg	fi
668349dc963fSmrg
668449dc963fSmrg	link_static=no # Whether the deplib will be linked statically
668549dc963fSmrg	use_static_libs=$prefer_static_libs
668649dc963fSmrg	if test "$use_static_libs" = built && test "$installed" = yes; then
668749dc963fSmrg	  use_static_libs=no
668849dc963fSmrg	fi
668949dc963fSmrg	if test -n "$library_names" &&
669049dc963fSmrg	   { test "$use_static_libs" = no || test -z "$old_library"; }; then
669149dc963fSmrg	  case $host in
669249dc963fSmrg	  *cygwin* | *mingw* | *cegcc*)
669349dc963fSmrg	      # No point in relinking DLLs because paths are not encoded
66944e7590efSmrg	      func_append notinst_deplibs " $lib"
669549dc963fSmrg	      need_relink=no
669649dc963fSmrg	    ;;
669749dc963fSmrg	  *)
669849dc963fSmrg	    if test "$installed" = no; then
66994e7590efSmrg	      func_append notinst_deplibs " $lib"
670049dc963fSmrg	      need_relink=yes
670149dc963fSmrg	    fi
670249dc963fSmrg	    ;;
670349dc963fSmrg	  esac
670449dc963fSmrg	  # This is a shared library
670549dc963fSmrg
670649dc963fSmrg	  # Warn about portability, can't link against -module's on some
670749dc963fSmrg	  # systems (darwin).  Don't bleat about dlopened modules though!
670849dc963fSmrg	  dlopenmodule=""
670949dc963fSmrg	  for dlpremoduletest in $dlprefiles; do
671049dc963fSmrg	    if test "X$dlpremoduletest" = "X$lib"; then
671149dc963fSmrg	      dlopenmodule="$dlpremoduletest"
671249dc963fSmrg	      break
671349dc963fSmrg	    fi
671449dc963fSmrg	  done
671549dc963fSmrg	  if test -z "$dlopenmodule" && test "$shouldnotlink" = yes && test "$pass" = link; then
67167aa89044Smrg	    echo
671749dc963fSmrg	    if test "$linkmode" = prog; then
671849dc963fSmrg	      $ECHO "*** Warning: Linking the executable $output against the loadable module"
671949dc963fSmrg	    else
672049dc963fSmrg	      $ECHO "*** Warning: Linking the shared library $output against the loadable module"
672149dc963fSmrg	    fi
672249dc963fSmrg	    $ECHO "*** $linklib is not portable!"
672349dc963fSmrg	  fi
672449dc963fSmrg	  if test "$linkmode" = lib &&
672549dc963fSmrg	     test "$hardcode_into_libs" = yes; then
672649dc963fSmrg	    # Hardcode the library path.
672749dc963fSmrg	    # Skip directories that are in the system default run-time
672849dc963fSmrg	    # search path.
672949dc963fSmrg	    case " $sys_lib_dlsearch_path " in
673049dc963fSmrg	    *" $absdir "*) ;;
673149dc963fSmrg	    *)
673249dc963fSmrg	      case "$compile_rpath " in
673349dc963fSmrg	      *" $absdir "*) ;;
67344e7590efSmrg	      *) func_append compile_rpath " $absdir" ;;
673549dc963fSmrg	      esac
673649dc963fSmrg	      ;;
673749dc963fSmrg	    esac
673849dc963fSmrg	    case " $sys_lib_dlsearch_path " in
673949dc963fSmrg	    *" $libdir "*) ;;
674049dc963fSmrg	    *)
674149dc963fSmrg	      case "$finalize_rpath " in
674249dc963fSmrg	      *" $libdir "*) ;;
67434e7590efSmrg	      *) func_append finalize_rpath " $libdir" ;;
674449dc963fSmrg	      esac
674549dc963fSmrg	      ;;
674649dc963fSmrg	    esac
674749dc963fSmrg	  fi
674849dc963fSmrg
674949dc963fSmrg	  if test -n "$old_archive_from_expsyms_cmds"; then
675049dc963fSmrg	    # figure out the soname
675149dc963fSmrg	    set dummy $library_names
675249dc963fSmrg	    shift
675349dc963fSmrg	    realname="$1"
675449dc963fSmrg	    shift
675549dc963fSmrg	    libname=`eval "\\$ECHO \"$libname_spec\""`
675649dc963fSmrg	    # use dlname if we got it. it's perfectly good, no?
675749dc963fSmrg	    if test -n "$dlname"; then
675849dc963fSmrg	      soname="$dlname"
675949dc963fSmrg	    elif test -n "$soname_spec"; then
676049dc963fSmrg	      # bleh windows
676149dc963fSmrg	      case $host in
676249dc963fSmrg	      *cygwin* | mingw* | *cegcc*)
676349dc963fSmrg	        func_arith $current - $age
676449dc963fSmrg		major=$func_arith_result
676549dc963fSmrg		versuffix="-$major"
676649dc963fSmrg		;;
676749dc963fSmrg	      esac
676849dc963fSmrg	      eval soname=\"$soname_spec\"
676949dc963fSmrg	    else
677049dc963fSmrg	      soname="$realname"
677149dc963fSmrg	    fi
677249dc963fSmrg
677349dc963fSmrg	    # Make a new name for the extract_expsyms_cmds to use
677449dc963fSmrg	    soroot="$soname"
677549dc963fSmrg	    func_basename "$soroot"
677649dc963fSmrg	    soname="$func_basename_result"
677749dc963fSmrg	    func_stripname 'lib' '.dll' "$soname"
677849dc963fSmrg	    newlib=libimp-$func_stripname_result.a
677949dc963fSmrg
678049dc963fSmrg	    # If the library has no export list, then create one now
678149dc963fSmrg	    if test -f "$output_objdir/$soname-def"; then :
678249dc963fSmrg	    else
678349dc963fSmrg	      func_verbose "extracting exported symbol list from \`$soname'"
678449dc963fSmrg	      func_execute_cmds "$extract_expsyms_cmds" 'exit $?'
678549dc963fSmrg	    fi
678649dc963fSmrg
678749dc963fSmrg	    # Create $newlib
678849dc963fSmrg	    if test -f "$output_objdir/$newlib"; then :; else
678949dc963fSmrg	      func_verbose "generating import library for \`$soname'"
679049dc963fSmrg	      func_execute_cmds "$old_archive_from_expsyms_cmds" 'exit $?'
679149dc963fSmrg	    fi
679249dc963fSmrg	    # make sure the library variables are pointing to the new library
679349dc963fSmrg	    dir=$output_objdir
679449dc963fSmrg	    linklib=$newlib
679549dc963fSmrg	  fi # test -n "$old_archive_from_expsyms_cmds"
679649dc963fSmrg
67974e7590efSmrg	  if test "$linkmode" = prog || test "$opt_mode" != relink; then
679849dc963fSmrg	    add_shlibpath=
679949dc963fSmrg	    add_dir=
680049dc963fSmrg	    add=
680149dc963fSmrg	    lib_linked=yes
680249dc963fSmrg	    case $hardcode_action in
680349dc963fSmrg	    immediate | unsupported)
680449dc963fSmrg	      if test "$hardcode_direct" = no; then
680549dc963fSmrg		add="$dir/$linklib"
680649dc963fSmrg		case $host in
680749dc963fSmrg		  *-*-sco3.2v5.0.[024]*) add_dir="-L$dir" ;;
680849dc963fSmrg		  *-*-sysv4*uw2*) add_dir="-L$dir" ;;
680949dc963fSmrg		  *-*-sysv5OpenUNIX* | *-*-sysv5UnixWare7.[01].[10]* | \
681049dc963fSmrg		    *-*-unixware7*) add_dir="-L$dir" ;;
681149dc963fSmrg		  *-*-darwin* )
681249dc963fSmrg		    # if the lib is a (non-dlopened) module then we can not
681349dc963fSmrg		    # link against it, someone is ignoring the earlier warnings
681449dc963fSmrg		    if /usr/bin/file -L $add 2> /dev/null |
681549dc963fSmrg			 $GREP ": [^:]* bundle" >/dev/null ; then
681649dc963fSmrg		      if test "X$dlopenmodule" != "X$lib"; then
681749dc963fSmrg			$ECHO "*** Warning: lib $linklib is a module, not a shared library"
681849dc963fSmrg			if test -z "$old_library" ; then
68197aa89044Smrg			  echo
68207aa89044Smrg			  echo "*** And there doesn't seem to be a static archive available"
68217aa89044Smrg			  echo "*** The link will probably fail, sorry"
682249dc963fSmrg			else
682349dc963fSmrg			  add="$dir/$old_library"
682449dc963fSmrg			fi
682549dc963fSmrg		      elif test -n "$old_library"; then
682649dc963fSmrg			add="$dir/$old_library"
682749dc963fSmrg		      fi
682849dc963fSmrg		    fi
682949dc963fSmrg		esac
683049dc963fSmrg	      elif test "$hardcode_minus_L" = no; then
683149dc963fSmrg		case $host in
683249dc963fSmrg		*-*-sunos*) add_shlibpath="$dir" ;;
683349dc963fSmrg		esac
683449dc963fSmrg		add_dir="-L$dir"
683549dc963fSmrg		add="-l$name"
683649dc963fSmrg	      elif test "$hardcode_shlibpath_var" = no; then
683749dc963fSmrg		add_shlibpath="$dir"
683849dc963fSmrg		add="-l$name"
683949dc963fSmrg	      else
684049dc963fSmrg		lib_linked=no
684149dc963fSmrg	      fi
684249dc963fSmrg	      ;;
684349dc963fSmrg	    relink)
684449dc963fSmrg	      if test "$hardcode_direct" = yes &&
684549dc963fSmrg	         test "$hardcode_direct_absolute" = no; then
684649dc963fSmrg		add="$dir/$linklib"
684749dc963fSmrg	      elif test "$hardcode_minus_L" = yes; then
68484e7590efSmrg		add_dir="-L$absdir"
684949dc963fSmrg		# Try looking first in the location we're being installed to.
685049dc963fSmrg		if test -n "$inst_prefix_dir"; then
685149dc963fSmrg		  case $libdir in
685249dc963fSmrg		    [\\/]*)
68534e7590efSmrg		      func_append add_dir " -L$inst_prefix_dir$libdir"
685449dc963fSmrg		      ;;
685549dc963fSmrg		  esac
685649dc963fSmrg		fi
685749dc963fSmrg		add="-l$name"
685849dc963fSmrg	      elif test "$hardcode_shlibpath_var" = yes; then
685949dc963fSmrg		add_shlibpath="$dir"
686049dc963fSmrg		add="-l$name"
686149dc963fSmrg	      else
686249dc963fSmrg		lib_linked=no
686349dc963fSmrg	      fi
686449dc963fSmrg	      ;;
686549dc963fSmrg	    *) lib_linked=no ;;
686649dc963fSmrg	    esac
686749dc963fSmrg
686849dc963fSmrg	    if test "$lib_linked" != yes; then
686949dc963fSmrg	      func_fatal_configuration "unsupported hardcode properties"
687049dc963fSmrg	    fi
687149dc963fSmrg
687249dc963fSmrg	    if test -n "$add_shlibpath"; then
687349dc963fSmrg	      case :$compile_shlibpath: in
687449dc963fSmrg	      *":$add_shlibpath:"*) ;;
68754e7590efSmrg	      *) func_append compile_shlibpath "$add_shlibpath:" ;;
687649dc963fSmrg	      esac
687749dc963fSmrg	    fi
687849dc963fSmrg	    if test "$linkmode" = prog; then
687949dc963fSmrg	      test -n "$add_dir" && compile_deplibs="$add_dir $compile_deplibs"
688049dc963fSmrg	      test -n "$add" && compile_deplibs="$add $compile_deplibs"
688149dc963fSmrg	    else
688249dc963fSmrg	      test -n "$add_dir" && deplibs="$add_dir $deplibs"
688349dc963fSmrg	      test -n "$add" && deplibs="$add $deplibs"
688449dc963fSmrg	      if test "$hardcode_direct" != yes &&
688549dc963fSmrg		 test "$hardcode_minus_L" != yes &&
688649dc963fSmrg		 test "$hardcode_shlibpath_var" = yes; then
688749dc963fSmrg		case :$finalize_shlibpath: in
688849dc963fSmrg		*":$libdir:"*) ;;
68894e7590efSmrg		*) func_append finalize_shlibpath "$libdir:" ;;
689049dc963fSmrg		esac
689149dc963fSmrg	      fi
689249dc963fSmrg	    fi
689349dc963fSmrg	  fi
689449dc963fSmrg
68954e7590efSmrg	  if test "$linkmode" = prog || test "$opt_mode" = relink; then
689649dc963fSmrg	    add_shlibpath=
689749dc963fSmrg	    add_dir=
689849dc963fSmrg	    add=
689949dc963fSmrg	    # Finalize command for both is simple: just hardcode it.
690049dc963fSmrg	    if test "$hardcode_direct" = yes &&
690149dc963fSmrg	       test "$hardcode_direct_absolute" = no; then
690249dc963fSmrg	      add="$libdir/$linklib"
690349dc963fSmrg	    elif test "$hardcode_minus_L" = yes; then
690449dc963fSmrg	      add_dir="-L$libdir"
690549dc963fSmrg	      add="-l$name"
690649dc963fSmrg	    elif test "$hardcode_shlibpath_var" = yes; then
690749dc963fSmrg	      case :$finalize_shlibpath: in
690849dc963fSmrg	      *":$libdir:"*) ;;
69094e7590efSmrg	      *) func_append finalize_shlibpath "$libdir:" ;;
691049dc963fSmrg	      esac
691149dc963fSmrg	      add="-l$name"
691249dc963fSmrg	    elif test "$hardcode_automatic" = yes; then
691349dc963fSmrg	      if test -n "$inst_prefix_dir" &&
691449dc963fSmrg		 test -f "$inst_prefix_dir$libdir/$linklib" ; then
691549dc963fSmrg		add="$inst_prefix_dir$libdir/$linklib"
691649dc963fSmrg	      else
691749dc963fSmrg		add="$libdir/$linklib"
691849dc963fSmrg	      fi
691949dc963fSmrg	    else
692049dc963fSmrg	      # We cannot seem to hardcode it, guess we'll fake it.
692149dc963fSmrg	      add_dir="-L$libdir"
692249dc963fSmrg	      # Try looking first in the location we're being installed to.
692349dc963fSmrg	      if test -n "$inst_prefix_dir"; then
692449dc963fSmrg		case $libdir in
692549dc963fSmrg		  [\\/]*)
69264e7590efSmrg		    func_append add_dir " -L$inst_prefix_dir$libdir"
692749dc963fSmrg		    ;;
692849dc963fSmrg		esac
692949dc963fSmrg	      fi
693049dc963fSmrg	      add="-l$name"
693149dc963fSmrg	    fi
693249dc963fSmrg
693349dc963fSmrg	    if test "$linkmode" = prog; then
693449dc963fSmrg	      test -n "$add_dir" && finalize_deplibs="$add_dir $finalize_deplibs"
693549dc963fSmrg	      test -n "$add" && finalize_deplibs="$add $finalize_deplibs"
693649dc963fSmrg	    else
693749dc963fSmrg	      test -n "$add_dir" && deplibs="$add_dir $deplibs"
693849dc963fSmrg	      test -n "$add" && deplibs="$add $deplibs"
693949dc963fSmrg	    fi
694049dc963fSmrg	  fi
694149dc963fSmrg	elif test "$linkmode" = prog; then
694249dc963fSmrg	  # Here we assume that one of hardcode_direct or hardcode_minus_L
694349dc963fSmrg	  # is not unsupported.  This is valid on all known static and
694449dc963fSmrg	  # shared platforms.
694549dc963fSmrg	  if test "$hardcode_direct" != unsupported; then
694649dc963fSmrg	    test -n "$old_library" && linklib="$old_library"
694749dc963fSmrg	    compile_deplibs="$dir/$linklib $compile_deplibs"
694849dc963fSmrg	    finalize_deplibs="$dir/$linklib $finalize_deplibs"
694949dc963fSmrg	  else
695049dc963fSmrg	    compile_deplibs="-l$name -L$dir $compile_deplibs"
695149dc963fSmrg	    finalize_deplibs="-l$name -L$dir $finalize_deplibs"
695249dc963fSmrg	  fi
695349dc963fSmrg	elif test "$build_libtool_libs" = yes; then
695449dc963fSmrg	  # Not a shared library
695549dc963fSmrg	  if test "$deplibs_check_method" != pass_all; then
695649dc963fSmrg	    # We're trying link a shared library against a static one
695749dc963fSmrg	    # but the system doesn't support it.
695849dc963fSmrg
695949dc963fSmrg	    # Just print a warning and add the library to dependency_libs so
696049dc963fSmrg	    # that the program can be linked against the static library.
69617aa89044Smrg	    echo
696249dc963fSmrg	    $ECHO "*** Warning: This system can not link to static lib archive $lib."
69637aa89044Smrg	    echo "*** I have the capability to make that library automatically link in when"
69647aa89044Smrg	    echo "*** you link to this library.  But I can only do this if you have a"
69657aa89044Smrg	    echo "*** shared version of the library, which you do not appear to have."
696649dc963fSmrg	    if test "$module" = yes; then
69677aa89044Smrg	      echo "*** But as you try to build a module library, libtool will still create "
69687aa89044Smrg	      echo "*** a static module, that should work as long as the dlopening application"
69697aa89044Smrg	      echo "*** is linked with the -dlopen flag to resolve symbols at runtime."
697049dc963fSmrg	      if test -z "$global_symbol_pipe"; then
69717aa89044Smrg		echo
69727aa89044Smrg		echo "*** However, this would only work if libtool was able to extract symbol"
69737aa89044Smrg		echo "*** lists from a program, using \`nm' or equivalent, but libtool could"
69747aa89044Smrg		echo "*** not find such a program.  So, this module is probably useless."
69757aa89044Smrg		echo "*** \`nm' from GNU binutils and a full rebuild may help."
697649dc963fSmrg	      fi
697749dc963fSmrg	      if test "$build_old_libs" = no; then
697849dc963fSmrg		build_libtool_libs=module
697949dc963fSmrg		build_old_libs=yes
698049dc963fSmrg	      else
698149dc963fSmrg		build_libtool_libs=no
698249dc963fSmrg	      fi
698349dc963fSmrg	    fi
698449dc963fSmrg	  else
698549dc963fSmrg	    deplibs="$dir/$old_library $deplibs"
698649dc963fSmrg	    link_static=yes
698749dc963fSmrg	  fi
698849dc963fSmrg	fi # link shared/static library?
698949dc963fSmrg
699049dc963fSmrg	if test "$linkmode" = lib; then
699149dc963fSmrg	  if test -n "$dependency_libs" &&
699249dc963fSmrg	     { test "$hardcode_into_libs" != yes ||
699349dc963fSmrg	       test "$build_old_libs" = yes ||
699449dc963fSmrg	       test "$link_static" = yes; }; then
699549dc963fSmrg	    # Extract -R from dependency_libs
699649dc963fSmrg	    temp_deplibs=
699749dc963fSmrg	    for libdir in $dependency_libs; do
699849dc963fSmrg	      case $libdir in
699949dc963fSmrg	      -R*) func_stripname '-R' '' "$libdir"
700049dc963fSmrg	           temp_xrpath=$func_stripname_result
700149dc963fSmrg		   case " $xrpath " in
700249dc963fSmrg		   *" $temp_xrpath "*) ;;
70034e7590efSmrg		   *) func_append xrpath " $temp_xrpath";;
700449dc963fSmrg		   esac;;
70054e7590efSmrg	      *) func_append temp_deplibs " $libdir";;
700649dc963fSmrg	      esac
700749dc963fSmrg	    done
700849dc963fSmrg	    dependency_libs="$temp_deplibs"
700949dc963fSmrg	  fi
701049dc963fSmrg
70114e7590efSmrg	  func_append newlib_search_path " $absdir"
701249dc963fSmrg	  # Link against this library
701349dc963fSmrg	  test "$link_static" = no && newdependency_libs="$abs_ladir/$laname $newdependency_libs"
701449dc963fSmrg	  # ... and its dependency_libs
701549dc963fSmrg	  tmp_libs=
701649dc963fSmrg	  for deplib in $dependency_libs; do
701749dc963fSmrg	    newdependency_libs="$deplib $newdependency_libs"
70184e7590efSmrg	    case $deplib in
70194e7590efSmrg              -L*) func_stripname '-L' '' "$deplib"
70204e7590efSmrg                   func_resolve_sysroot "$func_stripname_result";;
70214e7590efSmrg              *) func_resolve_sysroot "$deplib" ;;
70224e7590efSmrg            esac
70234e7590efSmrg	    if $opt_preserve_dup_deps ; then
702449dc963fSmrg	      case "$tmp_libs " in
70254e7590efSmrg	      *" $func_resolve_sysroot_result "*)
70264e7590efSmrg                func_append specialdeplibs " $func_resolve_sysroot_result" ;;
702749dc963fSmrg	      esac
702849dc963fSmrg	    fi
70294e7590efSmrg	    func_append tmp_libs " $func_resolve_sysroot_result"
703049dc963fSmrg	  done
703149dc963fSmrg
703249dc963fSmrg	  if test "$link_all_deplibs" != no; then
703349dc963fSmrg	    # Add the search paths of all dependency libraries
703449dc963fSmrg	    for deplib in $dependency_libs; do
70357aa89044Smrg	      path=
703649dc963fSmrg	      case $deplib in
703749dc963fSmrg	      -L*) path="$deplib" ;;
703849dc963fSmrg	      *.la)
70394e7590efSmrg	        func_resolve_sysroot "$deplib"
70404e7590efSmrg	        deplib=$func_resolve_sysroot_result
704149dc963fSmrg	        func_dirname "$deplib" "" "."
70424e7590efSmrg		dir=$func_dirname_result
704349dc963fSmrg		# We need an absolute path.
704449dc963fSmrg		case $dir in
704549dc963fSmrg		[\\/]* | [A-Za-z]:[\\/]*) absdir="$dir" ;;
704649dc963fSmrg		*)
704749dc963fSmrg		  absdir=`cd "$dir" && pwd`
704849dc963fSmrg		  if test -z "$absdir"; then
704949dc963fSmrg		    func_warning "cannot determine absolute directory name of \`$dir'"
705049dc963fSmrg		    absdir="$dir"
705149dc963fSmrg		  fi
705249dc963fSmrg		  ;;
705349dc963fSmrg		esac
705449dc963fSmrg		if $GREP "^installed=no" $deplib > /dev/null; then
705549dc963fSmrg		case $host in
705649dc963fSmrg		*-*-darwin*)
705749dc963fSmrg		  depdepl=
705849dc963fSmrg		  eval deplibrary_names=`${SED} -n -e 's/^library_names=\(.*\)$/\1/p' $deplib`
705949dc963fSmrg		  if test -n "$deplibrary_names" ; then
706049dc963fSmrg		    for tmp in $deplibrary_names ; do
706149dc963fSmrg		      depdepl=$tmp
706249dc963fSmrg		    done
706349dc963fSmrg		    if test -f "$absdir/$objdir/$depdepl" ; then
706449dc963fSmrg		      depdepl="$absdir/$objdir/$depdepl"
706549dc963fSmrg		      darwin_install_name=`${OTOOL} -L $depdepl | awk '{if (NR == 2) {print $1;exit}}'`
706649dc963fSmrg                      if test -z "$darwin_install_name"; then
706749dc963fSmrg                          darwin_install_name=`${OTOOL64} -L $depdepl  | awk '{if (NR == 2) {print $1;exit}}'`
706849dc963fSmrg                      fi
70694e7590efSmrg		      func_append compiler_flags " ${wl}-dylib_file ${wl}${darwin_install_name}:${depdepl}"
70704e7590efSmrg		      func_append linker_flags " -dylib_file ${darwin_install_name}:${depdepl}"
707149dc963fSmrg		      path=
707249dc963fSmrg		    fi
707349dc963fSmrg		  fi
707449dc963fSmrg		  ;;
707549dc963fSmrg		*)
707649dc963fSmrg		  path="-L$absdir/$objdir"
707749dc963fSmrg		  ;;
707849dc963fSmrg		esac
707949dc963fSmrg		else
708049dc963fSmrg		  eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $deplib`
708149dc963fSmrg		  test -z "$libdir" && \
708249dc963fSmrg		    func_fatal_error "\`$deplib' is not a valid libtool archive"
708349dc963fSmrg		  test "$absdir" != "$libdir" && \
708449dc963fSmrg		    func_warning "\`$deplib' seems to be moved"
708549dc963fSmrg
708649dc963fSmrg		  path="-L$absdir"
708749dc963fSmrg		fi
708849dc963fSmrg		;;
708949dc963fSmrg	      esac
709049dc963fSmrg	      case " $deplibs " in
709149dc963fSmrg	      *" $path "*) ;;
709249dc963fSmrg	      *) deplibs="$path $deplibs" ;;
709349dc963fSmrg	      esac
709449dc963fSmrg	    done
709549dc963fSmrg	  fi # link_all_deplibs != no
709649dc963fSmrg	fi # linkmode = lib
709749dc963fSmrg      done # for deplib in $libs
709849dc963fSmrg      if test "$pass" = link; then
709949dc963fSmrg	if test "$linkmode" = "prog"; then
710049dc963fSmrg	  compile_deplibs="$new_inherited_linker_flags $compile_deplibs"
710149dc963fSmrg	  finalize_deplibs="$new_inherited_linker_flags $finalize_deplibs"
710249dc963fSmrg	else
71037aa89044Smrg	  compiler_flags="$compiler_flags "`$ECHO " $new_inherited_linker_flags" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'`
710449dc963fSmrg	fi
710549dc963fSmrg      fi
710649dc963fSmrg      dependency_libs="$newdependency_libs"
710749dc963fSmrg      if test "$pass" = dlpreopen; then
710849dc963fSmrg	# Link the dlpreopened libraries before other libraries
710949dc963fSmrg	for deplib in $save_deplibs; do
711049dc963fSmrg	  deplibs="$deplib $deplibs"
711149dc963fSmrg	done
711249dc963fSmrg      fi
711349dc963fSmrg      if test "$pass" != dlopen; then
711449dc963fSmrg	if test "$pass" != conv; then
711549dc963fSmrg	  # Make sure lib_search_path contains only unique directories.
711649dc963fSmrg	  lib_search_path=
711749dc963fSmrg	  for dir in $newlib_search_path; do
711849dc963fSmrg	    case "$lib_search_path " in
711949dc963fSmrg	    *" $dir "*) ;;
71204e7590efSmrg	    *) func_append lib_search_path " $dir" ;;
712149dc963fSmrg	    esac
712249dc963fSmrg	  done
712349dc963fSmrg	  newlib_search_path=
712449dc963fSmrg	fi
712549dc963fSmrg
712649dc963fSmrg	if test "$linkmode,$pass" != "prog,link"; then
712749dc963fSmrg	  vars="deplibs"
712849dc963fSmrg	else
712949dc963fSmrg	  vars="compile_deplibs finalize_deplibs"
713049dc963fSmrg	fi
713149dc963fSmrg	for var in $vars dependency_libs; do
713249dc963fSmrg	  # Add libraries to $var in reverse order
713349dc963fSmrg	  eval tmp_libs=\"\$$var\"
713449dc963fSmrg	  new_libs=
713549dc963fSmrg	  for deplib in $tmp_libs; do
713649dc963fSmrg	    # FIXME: Pedantically, this is the right thing to do, so
713749dc963fSmrg	    #        that some nasty dependency loop isn't accidentally
713849dc963fSmrg	    #        broken:
713949dc963fSmrg	    #new_libs="$deplib $new_libs"
714049dc963fSmrg	    # Pragmatically, this seems to cause very few problems in
714149dc963fSmrg	    # practice:
714249dc963fSmrg	    case $deplib in
714349dc963fSmrg	    -L*) new_libs="$deplib $new_libs" ;;
714449dc963fSmrg	    -R*) ;;
714549dc963fSmrg	    *)
714649dc963fSmrg	      # And here is the reason: when a library appears more
714749dc963fSmrg	      # than once as an explicit dependence of a library, or
714849dc963fSmrg	      # is implicitly linked in more than once by the
714949dc963fSmrg	      # compiler, it is considered special, and multiple
715049dc963fSmrg	      # occurrences thereof are not removed.  Compare this
715149dc963fSmrg	      # with having the same library being listed as a
715249dc963fSmrg	      # dependency of multiple other libraries: in this case,
715349dc963fSmrg	      # we know (pedantically, we assume) the library does not
715449dc963fSmrg	      # need to be listed more than once, so we keep only the
715549dc963fSmrg	      # last copy.  This is not always right, but it is rare
715649dc963fSmrg	      # enough that we require users that really mean to play
715749dc963fSmrg	      # such unportable linking tricks to link the library
715849dc963fSmrg	      # using -Wl,-lname, so that libtool does not consider it
715949dc963fSmrg	      # for duplicate removal.
716049dc963fSmrg	      case " $specialdeplibs " in
716149dc963fSmrg	      *" $deplib "*) new_libs="$deplib $new_libs" ;;
716249dc963fSmrg	      *)
716349dc963fSmrg		case " $new_libs " in
716449dc963fSmrg		*" $deplib "*) ;;
716549dc963fSmrg		*) new_libs="$deplib $new_libs" ;;
716649dc963fSmrg		esac
716749dc963fSmrg		;;
716849dc963fSmrg	      esac
716949dc963fSmrg	      ;;
717049dc963fSmrg	    esac
717149dc963fSmrg	  done
717249dc963fSmrg	  tmp_libs=
717349dc963fSmrg	  for deplib in $new_libs; do
717449dc963fSmrg	    case $deplib in
717549dc963fSmrg	    -L*)
717649dc963fSmrg	      case " $tmp_libs " in
717749dc963fSmrg	      *" $deplib "*) ;;
71784e7590efSmrg	      *) func_append tmp_libs " $deplib" ;;
717949dc963fSmrg	      esac
718049dc963fSmrg	      ;;
71814e7590efSmrg	    *) func_append tmp_libs " $deplib" ;;
718249dc963fSmrg	    esac
718349dc963fSmrg	  done
718449dc963fSmrg	  eval $var=\"$tmp_libs\"
718549dc963fSmrg	done # for var
718649dc963fSmrg      fi
718749dc963fSmrg      # Last step: remove runtime libs from dependency_libs
718849dc963fSmrg      # (they stay in deplibs)
718949dc963fSmrg      tmp_libs=
719049dc963fSmrg      for i in $dependency_libs ; do
719149dc963fSmrg	case " $predeps $postdeps $compiler_lib_search_path " in
719249dc963fSmrg	*" $i "*)
719349dc963fSmrg	  i=""
719449dc963fSmrg	  ;;
719549dc963fSmrg	esac
719649dc963fSmrg	if test -n "$i" ; then
71974e7590efSmrg	  func_append tmp_libs " $i"
719849dc963fSmrg	fi
719949dc963fSmrg      done
720049dc963fSmrg      dependency_libs=$tmp_libs
720149dc963fSmrg    done # for pass
720249dc963fSmrg    if test "$linkmode" = prog; then
720349dc963fSmrg      dlfiles="$newdlfiles"
720449dc963fSmrg    fi
720549dc963fSmrg    if test "$linkmode" = prog || test "$linkmode" = lib; then
720649dc963fSmrg      dlprefiles="$newdlprefiles"
720749dc963fSmrg    fi
720849dc963fSmrg
720949dc963fSmrg    case $linkmode in
721049dc963fSmrg    oldlib)
721149dc963fSmrg      if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then
721249dc963fSmrg	func_warning "\`-dlopen' is ignored for archives"
721349dc963fSmrg      fi
721449dc963fSmrg
721549dc963fSmrg      case " $deplibs" in
721649dc963fSmrg      *\ -l* | *\ -L*)
721749dc963fSmrg	func_warning "\`-l' and \`-L' are ignored for archives" ;;
721849dc963fSmrg      esac
721949dc963fSmrg
722049dc963fSmrg      test -n "$rpath" && \
722149dc963fSmrg	func_warning "\`-rpath' is ignored for archives"
722249dc963fSmrg
722349dc963fSmrg      test -n "$xrpath" && \
722449dc963fSmrg	func_warning "\`-R' is ignored for archives"
722549dc963fSmrg
722649dc963fSmrg      test -n "$vinfo" && \
722749dc963fSmrg	func_warning "\`-version-info/-version-number' is ignored for archives"
722849dc963fSmrg
722949dc963fSmrg      test -n "$release" && \
723049dc963fSmrg	func_warning "\`-release' is ignored for archives"
723149dc963fSmrg
723249dc963fSmrg      test -n "$export_symbols$export_symbols_regex" && \
723349dc963fSmrg	func_warning "\`-export-symbols' is ignored for archives"
723449dc963fSmrg
723549dc963fSmrg      # Now set the variables for building old libraries.
723649dc963fSmrg      build_libtool_libs=no
723749dc963fSmrg      oldlibs="$output"
72384e7590efSmrg      func_append objs "$old_deplibs"
723949dc963fSmrg      ;;
724049dc963fSmrg
724149dc963fSmrg    lib)
724249dc963fSmrg      # Make sure we only generate libraries of the form `libNAME.la'.
724349dc963fSmrg      case $outputname in
724449dc963fSmrg      lib*)
724549dc963fSmrg	func_stripname 'lib' '.la' "$outputname"
724649dc963fSmrg	name=$func_stripname_result
724749dc963fSmrg	eval shared_ext=\"$shrext_cmds\"
724849dc963fSmrg	eval libname=\"$libname_spec\"
724949dc963fSmrg	;;
725049dc963fSmrg      *)
725149dc963fSmrg	test "$module" = no && \
725249dc963fSmrg	  func_fatal_help "libtool library \`$output' must begin with \`lib'"
725349dc963fSmrg
725449dc963fSmrg	if test "$need_lib_prefix" != no; then
725549dc963fSmrg	  # Add the "lib" prefix for modules if required
725649dc963fSmrg	  func_stripname '' '.la' "$outputname"
725749dc963fSmrg	  name=$func_stripname_result
725849dc963fSmrg	  eval shared_ext=\"$shrext_cmds\"
725949dc963fSmrg	  eval libname=\"$libname_spec\"
726049dc963fSmrg	else
726149dc963fSmrg	  func_stripname '' '.la' "$outputname"
726249dc963fSmrg	  libname=$func_stripname_result
726349dc963fSmrg	fi
726449dc963fSmrg	;;
726549dc963fSmrg      esac
726649dc963fSmrg
726749dc963fSmrg      if test -n "$objs"; then
726849dc963fSmrg	if test "$deplibs_check_method" != pass_all; then
726949dc963fSmrg	  func_fatal_error "cannot build libtool library \`$output' from non-libtool objects on this host:$objs"
727049dc963fSmrg	else
72717aa89044Smrg	  echo
727249dc963fSmrg	  $ECHO "*** Warning: Linking the shared library $output against the non-libtool"
727349dc963fSmrg	  $ECHO "*** objects $objs is not portable!"
72744e7590efSmrg	  func_append libobjs " $objs"
727549dc963fSmrg	fi
727649dc963fSmrg      fi
727749dc963fSmrg
727849dc963fSmrg      test "$dlself" != no && \
727949dc963fSmrg	func_warning "\`-dlopen self' is ignored for libtool libraries"
728049dc963fSmrg
728149dc963fSmrg      set dummy $rpath
728249dc963fSmrg      shift
728349dc963fSmrg      test "$#" -gt 1 && \
728449dc963fSmrg	func_warning "ignoring multiple \`-rpath's for a libtool library"
728549dc963fSmrg
728649dc963fSmrg      install_libdir="$1"
728749dc963fSmrg
728849dc963fSmrg      oldlibs=
728949dc963fSmrg      if test -z "$rpath"; then
729049dc963fSmrg	if test "$build_libtool_libs" = yes; then
729149dc963fSmrg	  # Building a libtool convenience library.
729249dc963fSmrg	  # Some compilers have problems with a `.al' extension so
729349dc963fSmrg	  # convenience libraries should have the same extension an
729449dc963fSmrg	  # archive normally would.
729549dc963fSmrg	  oldlibs="$output_objdir/$libname.$libext $oldlibs"
729649dc963fSmrg	  build_libtool_libs=convenience
729749dc963fSmrg	  build_old_libs=yes
729849dc963fSmrg	fi
729949dc963fSmrg
730049dc963fSmrg	test -n "$vinfo" && \
730149dc963fSmrg	  func_warning "\`-version-info/-version-number' is ignored for convenience libraries"
730249dc963fSmrg
730349dc963fSmrg	test -n "$release" && \
730449dc963fSmrg	  func_warning "\`-release' is ignored for convenience libraries"
730549dc963fSmrg      else
730649dc963fSmrg
730749dc963fSmrg	# Parse the version information argument.
730849dc963fSmrg	save_ifs="$IFS"; IFS=':'
730949dc963fSmrg	set dummy $vinfo 0 0 0
731049dc963fSmrg	shift
731149dc963fSmrg	IFS="$save_ifs"
731249dc963fSmrg
731349dc963fSmrg	test -n "$7" && \
731449dc963fSmrg	  func_fatal_help "too many parameters to \`-version-info'"
731549dc963fSmrg
731649dc963fSmrg	# convert absolute version numbers to libtool ages
731749dc963fSmrg	# this retains compatibility with .la files and attempts
731849dc963fSmrg	# to make the code below a bit more comprehensible
731949dc963fSmrg
732049dc963fSmrg	case $vinfo_number in
732149dc963fSmrg	yes)
732249dc963fSmrg	  number_major="$1"
732349dc963fSmrg	  number_minor="$2"
732449dc963fSmrg	  number_revision="$3"
732549dc963fSmrg	  #
732649dc963fSmrg	  # There are really only two kinds -- those that
732749dc963fSmrg	  # use the current revision as the major version
732849dc963fSmrg	  # and those that subtract age and use age as
732949dc963fSmrg	  # a minor version.  But, then there is irix
733049dc963fSmrg	  # which has an extra 1 added just for fun
733149dc963fSmrg	  #
733249dc963fSmrg	  case $version_type in
73334e7590efSmrg	  # correct linux to gnu/linux during the next big refactor
733449dc963fSmrg	  darwin|linux|osf|windows|none)
733549dc963fSmrg	    func_arith $number_major + $number_minor
733649dc963fSmrg	    current=$func_arith_result
733749dc963fSmrg	    age="$number_minor"
733849dc963fSmrg	    revision="$number_revision"
733949dc963fSmrg	    ;;
73407aa89044Smrg	  freebsd-aout|freebsd-elf|qnx|sunos)
734149dc963fSmrg	    current="$number_major"
734249dc963fSmrg	    revision="$number_minor"
734349dc963fSmrg	    age="0"
734449dc963fSmrg	    ;;
734549dc963fSmrg	  irix|nonstopux)
734649dc963fSmrg	    func_arith $number_major + $number_minor
734749dc963fSmrg	    current=$func_arith_result
734849dc963fSmrg	    age="$number_minor"
734949dc963fSmrg	    revision="$number_minor"
735049dc963fSmrg	    lt_irix_increment=no
735149dc963fSmrg	    ;;
735249dc963fSmrg	  esac
735349dc963fSmrg	  ;;
735449dc963fSmrg	no)
735549dc963fSmrg	  current="$1"
735649dc963fSmrg	  revision="$2"
735749dc963fSmrg	  age="$3"
735849dc963fSmrg	  ;;
735949dc963fSmrg	esac
736049dc963fSmrg
736149dc963fSmrg	# Check that each of the things are valid numbers.
736249dc963fSmrg	case $current in
736349dc963fSmrg	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]) ;;
736449dc963fSmrg	*)
736549dc963fSmrg	  func_error "CURRENT \`$current' must be a nonnegative integer"
736649dc963fSmrg	  func_fatal_error "\`$vinfo' is not valid version information"
736749dc963fSmrg	  ;;
736849dc963fSmrg	esac
736949dc963fSmrg
737049dc963fSmrg	case $revision in
737149dc963fSmrg	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]) ;;
737249dc963fSmrg	*)
737349dc963fSmrg	  func_error "REVISION \`$revision' must be a nonnegative integer"
737449dc963fSmrg	  func_fatal_error "\`$vinfo' is not valid version information"
737549dc963fSmrg	  ;;
737649dc963fSmrg	esac
737749dc963fSmrg
737849dc963fSmrg	case $age in
737949dc963fSmrg	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]) ;;
738049dc963fSmrg	*)
738149dc963fSmrg	  func_error "AGE \`$age' must be a nonnegative integer"
738249dc963fSmrg	  func_fatal_error "\`$vinfo' is not valid version information"
738349dc963fSmrg	  ;;
738449dc963fSmrg	esac
738549dc963fSmrg
738649dc963fSmrg	if test "$age" -gt "$current"; then
738749dc963fSmrg	  func_error "AGE \`$age' is greater than the current interface number \`$current'"
738849dc963fSmrg	  func_fatal_error "\`$vinfo' is not valid version information"
738949dc963fSmrg	fi
739049dc963fSmrg
739149dc963fSmrg	# Calculate the version variables.
739249dc963fSmrg	major=
739349dc963fSmrg	versuffix=
739449dc963fSmrg	verstring=
739549dc963fSmrg	case $version_type in
739649dc963fSmrg	none) ;;
739749dc963fSmrg
739849dc963fSmrg	darwin)
739949dc963fSmrg	  # Like Linux, but with the current version available in
740049dc963fSmrg	  # verstring for coding it into the library header
740149dc963fSmrg	  func_arith $current - $age
740249dc963fSmrg	  major=.$func_arith_result
740349dc963fSmrg	  versuffix="$major.$age.$revision"
740449dc963fSmrg	  # Darwin ld doesn't like 0 for these options...
740549dc963fSmrg	  func_arith $current + 1
740649dc963fSmrg	  minor_current=$func_arith_result
740749dc963fSmrg	  xlcverstring="${wl}-compatibility_version ${wl}$minor_current ${wl}-current_version ${wl}$minor_current.$revision"
740849dc963fSmrg	  verstring="-compatibility_version $minor_current -current_version $minor_current.$revision"
740949dc963fSmrg	  ;;
741049dc963fSmrg
741149dc963fSmrg	freebsd-aout)
741249dc963fSmrg	  major=".$current"
741349dc963fSmrg	  versuffix=".$current.$revision";
741449dc963fSmrg	  ;;
741549dc963fSmrg
741649dc963fSmrg	freebsd-elf)
741749dc963fSmrg	  major=".$current"
741849dc963fSmrg	  versuffix=".$current"
741949dc963fSmrg	  ;;
742049dc963fSmrg
742149dc963fSmrg	irix | nonstopux)
742249dc963fSmrg	  if test "X$lt_irix_increment" = "Xno"; then
742349dc963fSmrg	    func_arith $current - $age
742449dc963fSmrg	  else
742549dc963fSmrg	    func_arith $current - $age + 1
742649dc963fSmrg	  fi
742749dc963fSmrg	  major=$func_arith_result
742849dc963fSmrg
742949dc963fSmrg	  case $version_type in
743049dc963fSmrg	    nonstopux) verstring_prefix=nonstopux ;;
743149dc963fSmrg	    *)         verstring_prefix=sgi ;;
743249dc963fSmrg	  esac
743349dc963fSmrg	  verstring="$verstring_prefix$major.$revision"
743449dc963fSmrg
743549dc963fSmrg	  # Add in all the interfaces that we are compatible with.
743649dc963fSmrg	  loop=$revision
743749dc963fSmrg	  while test "$loop" -ne 0; do
743849dc963fSmrg	    func_arith $revision - $loop
743949dc963fSmrg	    iface=$func_arith_result
744049dc963fSmrg	    func_arith $loop - 1
744149dc963fSmrg	    loop=$func_arith_result
744249dc963fSmrg	    verstring="$verstring_prefix$major.$iface:$verstring"
744349dc963fSmrg	  done
744449dc963fSmrg
744549dc963fSmrg	  # Before this point, $major must not contain `.'.
744649dc963fSmrg	  major=.$major
744749dc963fSmrg	  versuffix="$major.$revision"
744849dc963fSmrg	  ;;
744949dc963fSmrg
74504e7590efSmrg	linux) # correct to gnu/linux during the next big refactor
745149dc963fSmrg	  func_arith $current - $age
745249dc963fSmrg	  major=.$func_arith_result
745349dc963fSmrg	  versuffix="$major.$age.$revision"
745449dc963fSmrg	  ;;
745549dc963fSmrg
745649dc963fSmrg	osf)
745749dc963fSmrg	  func_arith $current - $age
745849dc963fSmrg	  major=.$func_arith_result
745949dc963fSmrg	  versuffix=".$current.$age.$revision"
746049dc963fSmrg	  verstring="$current.$age.$revision"
746149dc963fSmrg
746249dc963fSmrg	  # Add in all the interfaces that we are compatible with.
746349dc963fSmrg	  loop=$age
746449dc963fSmrg	  while test "$loop" -ne 0; do
746549dc963fSmrg	    func_arith $current - $loop
746649dc963fSmrg	    iface=$func_arith_result
746749dc963fSmrg	    func_arith $loop - 1
746849dc963fSmrg	    loop=$func_arith_result
746949dc963fSmrg	    verstring="$verstring:${iface}.0"
747049dc963fSmrg	  done
747149dc963fSmrg
747249dc963fSmrg	  # Make executables depend on our current version.
74734e7590efSmrg	  func_append verstring ":${current}.0"
747449dc963fSmrg	  ;;
747549dc963fSmrg
747649dc963fSmrg	qnx)
747749dc963fSmrg	  major=".$current"
747849dc963fSmrg	  versuffix=".$current"
747949dc963fSmrg	  ;;
748049dc963fSmrg
748149dc963fSmrg	sunos)
748249dc963fSmrg	  major=".$current"
748349dc963fSmrg	  versuffix=".$current.$revision"
748449dc963fSmrg	  ;;
748549dc963fSmrg
748649dc963fSmrg	windows)
748749dc963fSmrg	  # Use '-' rather than '.', since we only want one
748849dc963fSmrg	  # extension on DOS 8.3 filesystems.
748949dc963fSmrg	  func_arith $current - $age
749049dc963fSmrg	  major=$func_arith_result
749149dc963fSmrg	  versuffix="-$major"
749249dc963fSmrg	  ;;
749349dc963fSmrg
749449dc963fSmrg	*)
749549dc963fSmrg	  func_fatal_configuration "unknown library version type \`$version_type'"
749649dc963fSmrg	  ;;
749749dc963fSmrg	esac
749849dc963fSmrg
749949dc963fSmrg	# Clear the version info if we defaulted, and they specified a release.
750049dc963fSmrg	if test -z "$vinfo" && test -n "$release"; then
750149dc963fSmrg	  major=
750249dc963fSmrg	  case $version_type in
750349dc963fSmrg	  darwin)
750449dc963fSmrg	    # we can't check for "0.0" in archive_cmds due to quoting
750549dc963fSmrg	    # problems, so we reset it completely
750649dc963fSmrg	    verstring=
750749dc963fSmrg	    ;;
750849dc963fSmrg	  *)
750949dc963fSmrg	    verstring="0.0"
751049dc963fSmrg	    ;;
751149dc963fSmrg	  esac
751249dc963fSmrg	  if test "$need_version" = no; then
751349dc963fSmrg	    versuffix=
751449dc963fSmrg	  else
751549dc963fSmrg	    versuffix=".0.0"
751649dc963fSmrg	  fi
751749dc963fSmrg	fi
751849dc963fSmrg
751949dc963fSmrg	# Remove version info from name if versioning should be avoided
752049dc963fSmrg	if test "$avoid_version" = yes && test "$need_version" = no; then
752149dc963fSmrg	  major=
752249dc963fSmrg	  versuffix=
752349dc963fSmrg	  verstring=""
752449dc963fSmrg	fi
752549dc963fSmrg
752649dc963fSmrg	# Check to see if the archive will have undefined symbols.
752749dc963fSmrg	if test "$allow_undefined" = yes; then
752849dc963fSmrg	  if test "$allow_undefined_flag" = unsupported; then
752949dc963fSmrg	    func_warning "undefined symbols not allowed in $host shared libraries"
753049dc963fSmrg	    build_libtool_libs=no
753149dc963fSmrg	    build_old_libs=yes
753249dc963fSmrg	  fi
753349dc963fSmrg	else
753449dc963fSmrg	  # Don't allow undefined symbols.
753549dc963fSmrg	  allow_undefined_flag="$no_undefined_flag"
753649dc963fSmrg	fi
753749dc963fSmrg
753849dc963fSmrg      fi
753949dc963fSmrg
754049dc963fSmrg      func_generate_dlsyms "$libname" "$libname" "yes"
75414e7590efSmrg      func_append libobjs " $symfileobj"
754249dc963fSmrg      test "X$libobjs" = "X " && libobjs=
754349dc963fSmrg
75444e7590efSmrg      if test "$opt_mode" != relink; then
754549dc963fSmrg	# Remove our outputs, but don't remove object files since they
754649dc963fSmrg	# may have been created when compiling PIC objects.
754749dc963fSmrg	removelist=
754849dc963fSmrg	tempremovelist=`$ECHO "$output_objdir/*"`
754949dc963fSmrg	for p in $tempremovelist; do
755049dc963fSmrg	  case $p in
755149dc963fSmrg	    *.$objext | *.gcno)
755249dc963fSmrg	       ;;
755349dc963fSmrg	    $output_objdir/$outputname | $output_objdir/$libname.* | $output_objdir/${libname}${release}.*)
755449dc963fSmrg	       if test "X$precious_files_regex" != "X"; then
755549dc963fSmrg		 if $ECHO "$p" | $EGREP -e "$precious_files_regex" >/dev/null 2>&1
755649dc963fSmrg		 then
755749dc963fSmrg		   continue
755849dc963fSmrg		 fi
755949dc963fSmrg	       fi
75604e7590efSmrg	       func_append removelist " $p"
756149dc963fSmrg	       ;;
756249dc963fSmrg	    *) ;;
756349dc963fSmrg	  esac
756449dc963fSmrg	done
756549dc963fSmrg	test -n "$removelist" && \
756649dc963fSmrg	  func_show_eval "${RM}r \$removelist"
756749dc963fSmrg      fi
756849dc963fSmrg
756949dc963fSmrg      # Now set the variables for building old libraries.
757049dc963fSmrg      if test "$build_old_libs" = yes && test "$build_libtool_libs" != convenience ; then
75714e7590efSmrg	func_append oldlibs " $output_objdir/$libname.$libext"
757249dc963fSmrg
757349dc963fSmrg	# Transform .lo files to .o files.
75747aa89044Smrg	oldobjs="$objs "`$ECHO "$libobjs" | $SP2NL | $SED "/\.${libext}$/d; $lo2o" | $NL2SP`
757549dc963fSmrg      fi
757649dc963fSmrg
757749dc963fSmrg      # Eliminate all temporary directories.
757849dc963fSmrg      #for path in $notinst_path; do
75797aa89044Smrg      #	lib_search_path=`$ECHO "$lib_search_path " | $SED "s% $path % %g"`
75807aa89044Smrg      #	deplibs=`$ECHO "$deplibs " | $SED "s% -L$path % %g"`
75817aa89044Smrg      #	dependency_libs=`$ECHO "$dependency_libs " | $SED "s% -L$path % %g"`
758249dc963fSmrg      #done
758349dc963fSmrg
758449dc963fSmrg      if test -n "$xrpath"; then
758549dc963fSmrg	# If the user specified any rpath flags, then add them.
758649dc963fSmrg	temp_xrpath=
758749dc963fSmrg	for libdir in $xrpath; do
75884e7590efSmrg	  func_replace_sysroot "$libdir"
75894e7590efSmrg	  func_append temp_xrpath " -R$func_replace_sysroot_result"
759049dc963fSmrg	  case "$finalize_rpath " in
759149dc963fSmrg	  *" $libdir "*) ;;
75924e7590efSmrg	  *) func_append finalize_rpath " $libdir" ;;
759349dc963fSmrg	  esac
759449dc963fSmrg	done
759549dc963fSmrg	if test "$hardcode_into_libs" != yes || test "$build_old_libs" = yes; then
759649dc963fSmrg	  dependency_libs="$temp_xrpath $dependency_libs"
759749dc963fSmrg	fi
759849dc963fSmrg      fi
759949dc963fSmrg
760049dc963fSmrg      # Make sure dlfiles contains only unique files that won't be dlpreopened
760149dc963fSmrg      old_dlfiles="$dlfiles"
760249dc963fSmrg      dlfiles=
760349dc963fSmrg      for lib in $old_dlfiles; do
760449dc963fSmrg	case " $dlprefiles $dlfiles " in
760549dc963fSmrg	*" $lib "*) ;;
76064e7590efSmrg	*) func_append dlfiles " $lib" ;;
760749dc963fSmrg	esac
760849dc963fSmrg      done
760949dc963fSmrg
761049dc963fSmrg      # Make sure dlprefiles contains only unique files
761149dc963fSmrg      old_dlprefiles="$dlprefiles"
761249dc963fSmrg      dlprefiles=
761349dc963fSmrg      for lib in $old_dlprefiles; do
761449dc963fSmrg	case "$dlprefiles " in
761549dc963fSmrg	*" $lib "*) ;;
76164e7590efSmrg	*) func_append dlprefiles " $lib" ;;
761749dc963fSmrg	esac
761849dc963fSmrg      done
761949dc963fSmrg
762049dc963fSmrg      if test "$build_libtool_libs" = yes; then
762149dc963fSmrg	if test -n "$rpath"; then
762249dc963fSmrg	  case $host in
76237aa89044Smrg	  *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-*-beos* | *-cegcc* | *-*-haiku*)
762449dc963fSmrg	    # these systems don't actually have a c library (as such)!
762549dc963fSmrg	    ;;
762649dc963fSmrg	  *-*-rhapsody* | *-*-darwin1.[012])
762749dc963fSmrg	    # Rhapsody C library is in the System framework
76284e7590efSmrg	    func_append deplibs " System.ltframework"
762949dc963fSmrg	    ;;
763049dc963fSmrg	  *-*-netbsd*)
763149dc963fSmrg	    # Don't link with libc until the a.out ld.so is fixed.
763249dc963fSmrg	    ;;
763349dc963fSmrg	  *-*-openbsd* | *-*-freebsd* | *-*-dragonfly*)
763449dc963fSmrg	    # Do not include libc due to us having libc/libc_r.
763549dc963fSmrg	    ;;
763649dc963fSmrg	  *-*-sco3.2v5* | *-*-sco5v6*)
763749dc963fSmrg	    # Causes problems with __ctype
763849dc963fSmrg	    ;;
763949dc963fSmrg	  *-*-sysv4.2uw2* | *-*-sysv5* | *-*-unixware* | *-*-OpenUNIX*)
764049dc963fSmrg	    # Compiler inserts libc in the correct place for threads to work
764149dc963fSmrg	    ;;
764249dc963fSmrg	  *)
764349dc963fSmrg	    # Add libc to deplibs on all other systems if necessary.
764449dc963fSmrg	    if test "$build_libtool_need_lc" = "yes"; then
76454e7590efSmrg	      func_append deplibs " -lc"
764649dc963fSmrg	    fi
764749dc963fSmrg	    ;;
764849dc963fSmrg	  esac
764949dc963fSmrg	fi
765049dc963fSmrg
765149dc963fSmrg	# Transform deplibs into only deplibs that can be linked in shared.
765249dc963fSmrg	name_save=$name
765349dc963fSmrg	libname_save=$libname
765449dc963fSmrg	release_save=$release
765549dc963fSmrg	versuffix_save=$versuffix
765649dc963fSmrg	major_save=$major
765749dc963fSmrg	# I'm not sure if I'm treating the release correctly.  I think
765849dc963fSmrg	# release should show up in the -l (ie -lgmp5) so we don't want to
765949dc963fSmrg	# add it in twice.  Is that correct?
766049dc963fSmrg	release=""
766149dc963fSmrg	versuffix=""
766249dc963fSmrg	major=""
766349dc963fSmrg	newdeplibs=
766449dc963fSmrg	droppeddeps=no
766549dc963fSmrg	case $deplibs_check_method in
766649dc963fSmrg	pass_all)
766749dc963fSmrg	  # Don't check for shared/static.  Everything works.
766849dc963fSmrg	  # This might be a little naive.  We might want to check
766949dc963fSmrg	  # whether the library exists or not.  But this is on
767049dc963fSmrg	  # osf3 & osf4 and I'm not really sure... Just
767149dc963fSmrg	  # implementing what was already the behavior.
767249dc963fSmrg	  newdeplibs=$deplibs
767349dc963fSmrg	  ;;
767449dc963fSmrg	test_compile)
767549dc963fSmrg	  # This code stresses the "libraries are programs" paradigm to its
767649dc963fSmrg	  # limits. Maybe even breaks it.  We compile a program, linking it
767749dc963fSmrg	  # against the deplibs as a proxy for the library.  Then we can check
767849dc963fSmrg	  # whether they linked in statically or dynamically with ldd.
767949dc963fSmrg	  $opt_dry_run || $RM conftest.c
768049dc963fSmrg	  cat > conftest.c <<EOF
768149dc963fSmrg	  int main() { return 0; }
768249dc963fSmrgEOF
768349dc963fSmrg	  $opt_dry_run || $RM conftest
768449dc963fSmrg	  if $LTCC $LTCFLAGS -o conftest conftest.c $deplibs; then
768549dc963fSmrg	    ldd_output=`ldd conftest`
768649dc963fSmrg	    for i in $deplibs; do
768749dc963fSmrg	      case $i in
768849dc963fSmrg	      -l*)
768949dc963fSmrg		func_stripname -l '' "$i"
769049dc963fSmrg		name=$func_stripname_result
769149dc963fSmrg		if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then
769249dc963fSmrg		  case " $predeps $postdeps " in
769349dc963fSmrg		  *" $i "*)
76944e7590efSmrg		    func_append newdeplibs " $i"
769549dc963fSmrg		    i=""
769649dc963fSmrg		    ;;
769749dc963fSmrg		  esac
769849dc963fSmrg		fi
769949dc963fSmrg		if test -n "$i" ; then
770049dc963fSmrg		  libname=`eval "\\$ECHO \"$libname_spec\""`
770149dc963fSmrg		  deplib_matches=`eval "\\$ECHO \"$library_names_spec\""`
770249dc963fSmrg		  set dummy $deplib_matches; shift
770349dc963fSmrg		  deplib_match=$1
770449dc963fSmrg		  if test `expr "$ldd_output" : ".*$deplib_match"` -ne 0 ; then
77054e7590efSmrg		    func_append newdeplibs " $i"
770649dc963fSmrg		  else
770749dc963fSmrg		    droppeddeps=yes
77087aa89044Smrg		    echo
770949dc963fSmrg		    $ECHO "*** Warning: dynamic linker does not accept needed library $i."
77107aa89044Smrg		    echo "*** I have the capability to make that library automatically link in when"
77117aa89044Smrg		    echo "*** you link to this library.  But I can only do this if you have a"
77127aa89044Smrg		    echo "*** shared version of the library, which I believe you do not have"
77137aa89044Smrg		    echo "*** because a test_compile did reveal that the linker did not use it for"
77147aa89044Smrg		    echo "*** its dynamic dependency list that programs get resolved with at runtime."
771549dc963fSmrg		  fi
771649dc963fSmrg		fi
771749dc963fSmrg		;;
771849dc963fSmrg	      *)
77194e7590efSmrg		func_append newdeplibs " $i"
772049dc963fSmrg		;;
772149dc963fSmrg	      esac
772249dc963fSmrg	    done
772349dc963fSmrg	  else
772449dc963fSmrg	    # Error occurred in the first compile.  Let's try to salvage
772549dc963fSmrg	    # the situation: Compile a separate program for each library.
772649dc963fSmrg	    for i in $deplibs; do
772749dc963fSmrg	      case $i in
772849dc963fSmrg	      -l*)
772949dc963fSmrg		func_stripname -l '' "$i"
773049dc963fSmrg		name=$func_stripname_result
773149dc963fSmrg		$opt_dry_run || $RM conftest
773249dc963fSmrg		if $LTCC $LTCFLAGS -o conftest conftest.c $i; then
773349dc963fSmrg		  ldd_output=`ldd conftest`
773449dc963fSmrg		  if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then
773549dc963fSmrg		    case " $predeps $postdeps " in
773649dc963fSmrg		    *" $i "*)
77374e7590efSmrg		      func_append newdeplibs " $i"
773849dc963fSmrg		      i=""
773949dc963fSmrg		      ;;
774049dc963fSmrg		    esac
774149dc963fSmrg		  fi
774249dc963fSmrg		  if test -n "$i" ; then
774349dc963fSmrg		    libname=`eval "\\$ECHO \"$libname_spec\""`
774449dc963fSmrg		    deplib_matches=`eval "\\$ECHO \"$library_names_spec\""`
774549dc963fSmrg		    set dummy $deplib_matches; shift
774649dc963fSmrg		    deplib_match=$1
774749dc963fSmrg		    if test `expr "$ldd_output" : ".*$deplib_match"` -ne 0 ; then
77484e7590efSmrg		      func_append newdeplibs " $i"
774949dc963fSmrg		    else
775049dc963fSmrg		      droppeddeps=yes
77517aa89044Smrg		      echo
775249dc963fSmrg		      $ECHO "*** Warning: dynamic linker does not accept needed library $i."
77537aa89044Smrg		      echo "*** I have the capability to make that library automatically link in when"
77547aa89044Smrg		      echo "*** you link to this library.  But I can only do this if you have a"
77557aa89044Smrg		      echo "*** shared version of the library, which you do not appear to have"
77567aa89044Smrg		      echo "*** because a test_compile did reveal that the linker did not use this one"
77577aa89044Smrg		      echo "*** as a dynamic dependency that programs can get resolved with at runtime."
775849dc963fSmrg		    fi
775949dc963fSmrg		  fi
776049dc963fSmrg		else
776149dc963fSmrg		  droppeddeps=yes
77627aa89044Smrg		  echo
776349dc963fSmrg		  $ECHO "*** Warning!  Library $i is needed by this library but I was not able to"
77647aa89044Smrg		  echo "*** make it link in!  You will probably need to install it or some"
77657aa89044Smrg		  echo "*** library that it depends on before this library will be fully"
77667aa89044Smrg		  echo "*** functional.  Installing it before continuing would be even better."
776749dc963fSmrg		fi
776849dc963fSmrg		;;
776949dc963fSmrg	      *)
77704e7590efSmrg		func_append newdeplibs " $i"
777149dc963fSmrg		;;
777249dc963fSmrg	      esac
777349dc963fSmrg	    done
777449dc963fSmrg	  fi
777549dc963fSmrg	  ;;
777649dc963fSmrg	file_magic*)
777749dc963fSmrg	  set dummy $deplibs_check_method; shift
777849dc963fSmrg	  file_magic_regex=`expr "$deplibs_check_method" : "$1 \(.*\)"`
777949dc963fSmrg	  for a_deplib in $deplibs; do
778049dc963fSmrg	    case $a_deplib in
778149dc963fSmrg	    -l*)
778249dc963fSmrg	      func_stripname -l '' "$a_deplib"
778349dc963fSmrg	      name=$func_stripname_result
778449dc963fSmrg	      if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then
778549dc963fSmrg		case " $predeps $postdeps " in
778649dc963fSmrg		*" $a_deplib "*)
77874e7590efSmrg		  func_append newdeplibs " $a_deplib"
778849dc963fSmrg		  a_deplib=""
778949dc963fSmrg		  ;;
779049dc963fSmrg		esac
779149dc963fSmrg	      fi
779249dc963fSmrg	      if test -n "$a_deplib" ; then
779349dc963fSmrg		libname=`eval "\\$ECHO \"$libname_spec\""`
77944e7590efSmrg		if test -n "$file_magic_glob"; then
77954e7590efSmrg		  libnameglob=`func_echo_all "$libname" | $SED -e $file_magic_glob`
77964e7590efSmrg		else
77974e7590efSmrg		  libnameglob=$libname
77984e7590efSmrg		fi
77994e7590efSmrg		test "$want_nocaseglob" = yes && nocaseglob=`shopt -p nocaseglob`
780049dc963fSmrg		for i in $lib_search_path $sys_lib_search_path $shlib_search_path; do
78014e7590efSmrg		  if test "$want_nocaseglob" = yes; then
78024e7590efSmrg		    shopt -s nocaseglob
78034e7590efSmrg		    potential_libs=`ls $i/$libnameglob[.-]* 2>/dev/null`
78044e7590efSmrg		    $nocaseglob
78054e7590efSmrg		  else
78064e7590efSmrg		    potential_libs=`ls $i/$libnameglob[.-]* 2>/dev/null`
78074e7590efSmrg		  fi
780849dc963fSmrg		  for potent_lib in $potential_libs; do
780949dc963fSmrg		      # Follow soft links.
781049dc963fSmrg		      if ls -lLd "$potent_lib" 2>/dev/null |
781149dc963fSmrg			 $GREP " -> " >/dev/null; then
781249dc963fSmrg			continue
781349dc963fSmrg		      fi
781449dc963fSmrg		      # The statement above tries to avoid entering an
781549dc963fSmrg		      # endless loop below, in case of cyclic links.
781649dc963fSmrg		      # We might still enter an endless loop, since a link
781749dc963fSmrg		      # loop can be closed while we follow links,
781849dc963fSmrg		      # but so what?
781949dc963fSmrg		      potlib="$potent_lib"
782049dc963fSmrg		      while test -h "$potlib" 2>/dev/null; do
782149dc963fSmrg			potliblink=`ls -ld $potlib | ${SED} 's/.* -> //'`
782249dc963fSmrg			case $potliblink in
782349dc963fSmrg			[\\/]* | [A-Za-z]:[\\/]*) potlib="$potliblink";;
78247aa89044Smrg			*) potlib=`$ECHO "$potlib" | $SED 's,[^/]*$,,'`"$potliblink";;
782549dc963fSmrg			esac
782649dc963fSmrg		      done
782749dc963fSmrg		      if eval $file_magic_cmd \"\$potlib\" 2>/dev/null |
782849dc963fSmrg			 $SED -e 10q |
782949dc963fSmrg			 $EGREP "$file_magic_regex" > /dev/null; then
78304e7590efSmrg			func_append newdeplibs " $a_deplib"
783149dc963fSmrg			a_deplib=""
783249dc963fSmrg			break 2
783349dc963fSmrg		      fi
783449dc963fSmrg		  done
783549dc963fSmrg		done
783649dc963fSmrg	      fi
783749dc963fSmrg	      if test -n "$a_deplib" ; then
783849dc963fSmrg		droppeddeps=yes
78397aa89044Smrg		echo
784049dc963fSmrg		$ECHO "*** Warning: linker path does not have real file for library $a_deplib."
78417aa89044Smrg		echo "*** I have the capability to make that library automatically link in when"
78427aa89044Smrg		echo "*** you link to this library.  But I can only do this if you have a"
78437aa89044Smrg		echo "*** shared version of the library, which you do not appear to have"
78447aa89044Smrg		echo "*** because I did check the linker path looking for a file starting"
784549dc963fSmrg		if test -z "$potlib" ; then
784649dc963fSmrg		  $ECHO "*** with $libname but no candidates were found. (...for file magic test)"
784749dc963fSmrg		else
784849dc963fSmrg		  $ECHO "*** with $libname and none of the candidates passed a file format test"
784949dc963fSmrg		  $ECHO "*** using a file magic. Last file checked: $potlib"
785049dc963fSmrg		fi
785149dc963fSmrg	      fi
785249dc963fSmrg	      ;;
785349dc963fSmrg	    *)
785449dc963fSmrg	      # Add a -L argument.
78554e7590efSmrg	      func_append newdeplibs " $a_deplib"
785649dc963fSmrg	      ;;
785749dc963fSmrg	    esac
785849dc963fSmrg	  done # Gone through all deplibs.
785949dc963fSmrg	  ;;
786049dc963fSmrg	match_pattern*)
786149dc963fSmrg	  set dummy $deplibs_check_method; shift
786249dc963fSmrg	  match_pattern_regex=`expr "$deplibs_check_method" : "$1 \(.*\)"`
786349dc963fSmrg	  for a_deplib in $deplibs; do
786449dc963fSmrg	    case $a_deplib in
786549dc963fSmrg	    -l*)
786649dc963fSmrg	      func_stripname -l '' "$a_deplib"
786749dc963fSmrg	      name=$func_stripname_result
786849dc963fSmrg	      if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then
786949dc963fSmrg		case " $predeps $postdeps " in
787049dc963fSmrg		*" $a_deplib "*)
78714e7590efSmrg		  func_append newdeplibs " $a_deplib"
787249dc963fSmrg		  a_deplib=""
787349dc963fSmrg		  ;;
787449dc963fSmrg		esac
787549dc963fSmrg	      fi
787649dc963fSmrg	      if test -n "$a_deplib" ; then
787749dc963fSmrg		libname=`eval "\\$ECHO \"$libname_spec\""`
787849dc963fSmrg		for i in $lib_search_path $sys_lib_search_path $shlib_search_path; do
787949dc963fSmrg		  potential_libs=`ls $i/$libname[.-]* 2>/dev/null`
788049dc963fSmrg		  for potent_lib in $potential_libs; do
788149dc963fSmrg		    potlib="$potent_lib" # see symlink-check above in file_magic test
78827aa89044Smrg		    if eval "\$ECHO \"$potent_lib\"" 2>/dev/null | $SED 10q | \
788349dc963fSmrg		       $EGREP "$match_pattern_regex" > /dev/null; then
78844e7590efSmrg		      func_append newdeplibs " $a_deplib"
788549dc963fSmrg		      a_deplib=""
788649dc963fSmrg		      break 2
788749dc963fSmrg		    fi
788849dc963fSmrg		  done
788949dc963fSmrg		done
789049dc963fSmrg	      fi
789149dc963fSmrg	      if test -n "$a_deplib" ; then
789249dc963fSmrg		droppeddeps=yes
78937aa89044Smrg		echo
789449dc963fSmrg		$ECHO "*** Warning: linker path does not have real file for library $a_deplib."
78957aa89044Smrg		echo "*** I have the capability to make that library automatically link in when"
78967aa89044Smrg		echo "*** you link to this library.  But I can only do this if you have a"
78977aa89044Smrg		echo "*** shared version of the library, which you do not appear to have"
78987aa89044Smrg		echo "*** because I did check the linker path looking for a file starting"
789949dc963fSmrg		if test -z "$potlib" ; then
790049dc963fSmrg		  $ECHO "*** with $libname but no candidates were found. (...for regex pattern test)"
790149dc963fSmrg		else
790249dc963fSmrg		  $ECHO "*** with $libname and none of the candidates passed a file format test"
790349dc963fSmrg		  $ECHO "*** using a regex pattern. Last file checked: $potlib"
790449dc963fSmrg		fi
790549dc963fSmrg	      fi
790649dc963fSmrg	      ;;
790749dc963fSmrg	    *)
790849dc963fSmrg	      # Add a -L argument.
79094e7590efSmrg	      func_append newdeplibs " $a_deplib"
791049dc963fSmrg	      ;;
791149dc963fSmrg	    esac
791249dc963fSmrg	  done # Gone through all deplibs.
791349dc963fSmrg	  ;;
791449dc963fSmrg	none | unknown | *)
791549dc963fSmrg	  newdeplibs=""
79167aa89044Smrg	  tmp_deplibs=`$ECHO " $deplibs" | $SED 's/ -lc$//; s/ -[LR][^ ]*//g'`
791749dc963fSmrg	  if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then
791849dc963fSmrg	    for i in $predeps $postdeps ; do
791949dc963fSmrg	      # can't use Xsed below, because $i might contain '/'
79207aa89044Smrg	      tmp_deplibs=`$ECHO " $tmp_deplibs" | $SED "s,$i,,"`
792149dc963fSmrg	    done
792249dc963fSmrg	  fi
79237aa89044Smrg	  case $tmp_deplibs in
79247aa89044Smrg	  *[!\	\ ]*)
79257aa89044Smrg	    echo
792649dc963fSmrg	    if test "X$deplibs_check_method" = "Xnone"; then
79277aa89044Smrg	      echo "*** Warning: inter-library dependencies are not supported in this platform."
792849dc963fSmrg	    else
79297aa89044Smrg	      echo "*** Warning: inter-library dependencies are not known to be supported."
793049dc963fSmrg	    fi
79317aa89044Smrg	    echo "*** All declared inter-library dependencies are being dropped."
793249dc963fSmrg	    droppeddeps=yes
79337aa89044Smrg	    ;;
79347aa89044Smrg	  esac
793549dc963fSmrg	  ;;
793649dc963fSmrg	esac
793749dc963fSmrg	versuffix=$versuffix_save
793849dc963fSmrg	major=$major_save
793949dc963fSmrg	release=$release_save
794049dc963fSmrg	libname=$libname_save
794149dc963fSmrg	name=$name_save
794249dc963fSmrg
794349dc963fSmrg	case $host in
794449dc963fSmrg	*-*-rhapsody* | *-*-darwin1.[012])
794549dc963fSmrg	  # On Rhapsody replace the C library with the System framework
79467aa89044Smrg	  newdeplibs=`$ECHO " $newdeplibs" | $SED 's/ -lc / System.ltframework /'`
794749dc963fSmrg	  ;;
794849dc963fSmrg	esac
794949dc963fSmrg
795049dc963fSmrg	if test "$droppeddeps" = yes; then
795149dc963fSmrg	  if test "$module" = yes; then
79527aa89044Smrg	    echo
79537aa89044Smrg	    echo "*** Warning: libtool could not satisfy all declared inter-library"
795449dc963fSmrg	    $ECHO "*** dependencies of module $libname.  Therefore, libtool will create"
79557aa89044Smrg	    echo "*** a static module, that should work as long as the dlopening"
79567aa89044Smrg	    echo "*** application is linked with the -dlopen flag."
795749dc963fSmrg	    if test -z "$global_symbol_pipe"; then
79587aa89044Smrg	      echo
79597aa89044Smrg	      echo "*** However, this would only work if libtool was able to extract symbol"
79607aa89044Smrg	      echo "*** lists from a program, using \`nm' or equivalent, but libtool could"
79617aa89044Smrg	      echo "*** not find such a program.  So, this module is probably useless."
79627aa89044Smrg	      echo "*** \`nm' from GNU binutils and a full rebuild may help."
796349dc963fSmrg	    fi
796449dc963fSmrg	    if test "$build_old_libs" = no; then
796549dc963fSmrg	      oldlibs="$output_objdir/$libname.$libext"
796649dc963fSmrg	      build_libtool_libs=module
796749dc963fSmrg	      build_old_libs=yes
796849dc963fSmrg	    else
796949dc963fSmrg	      build_libtool_libs=no
797049dc963fSmrg	    fi
797149dc963fSmrg	  else
79727aa89044Smrg	    echo "*** The inter-library dependencies that have been dropped here will be"
79737aa89044Smrg	    echo "*** automatically added whenever a program is linked with this library"
79747aa89044Smrg	    echo "*** or is declared to -dlopen it."
797549dc963fSmrg
797649dc963fSmrg	    if test "$allow_undefined" = no; then
79777aa89044Smrg	      echo
79787aa89044Smrg	      echo "*** Since this library must not contain undefined symbols,"
79797aa89044Smrg	      echo "*** because either the platform does not support them or"
79807aa89044Smrg	      echo "*** it was explicitly requested with -no-undefined,"
79817aa89044Smrg	      echo "*** libtool will only create a static version of it."
798249dc963fSmrg	      if test "$build_old_libs" = no; then
798349dc963fSmrg		oldlibs="$output_objdir/$libname.$libext"
798449dc963fSmrg		build_libtool_libs=module
798549dc963fSmrg		build_old_libs=yes
798649dc963fSmrg	      else
798749dc963fSmrg		build_libtool_libs=no
798849dc963fSmrg	      fi
798949dc963fSmrg	    fi
799049dc963fSmrg	  fi
799149dc963fSmrg	fi
799249dc963fSmrg	# Done checking deplibs!
799349dc963fSmrg	deplibs=$newdeplibs
799449dc963fSmrg      fi
799549dc963fSmrg      # Time to change all our "foo.ltframework" stuff back to "-framework foo"
799649dc963fSmrg      case $host in
799749dc963fSmrg	*-*-darwin*)
79987aa89044Smrg	  newdeplibs=`$ECHO " $newdeplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'`
79997aa89044Smrg	  new_inherited_linker_flags=`$ECHO " $new_inherited_linker_flags" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'`
80007aa89044Smrg	  deplibs=`$ECHO " $deplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'`
800149dc963fSmrg	  ;;
800249dc963fSmrg      esac
800349dc963fSmrg
800449dc963fSmrg      # move library search paths that coincide with paths to not yet
800549dc963fSmrg      # installed libraries to the beginning of the library search list
800649dc963fSmrg      new_libs=
800749dc963fSmrg      for path in $notinst_path; do
800849dc963fSmrg	case " $new_libs " in
800949dc963fSmrg	*" -L$path/$objdir "*) ;;
801049dc963fSmrg	*)
801149dc963fSmrg	  case " $deplibs " in
801249dc963fSmrg	  *" -L$path/$objdir "*)
80134e7590efSmrg	    func_append new_libs " -L$path/$objdir" ;;
801449dc963fSmrg	  esac
801549dc963fSmrg	  ;;
801649dc963fSmrg	esac
801749dc963fSmrg      done
801849dc963fSmrg      for deplib in $deplibs; do
801949dc963fSmrg	case $deplib in
802049dc963fSmrg	-L*)
802149dc963fSmrg	  case " $new_libs " in
802249dc963fSmrg	  *" $deplib "*) ;;
80234e7590efSmrg	  *) func_append new_libs " $deplib" ;;
802449dc963fSmrg	  esac
802549dc963fSmrg	  ;;
80264e7590efSmrg	*) func_append new_libs " $deplib" ;;
802749dc963fSmrg	esac
802849dc963fSmrg      done
802949dc963fSmrg      deplibs="$new_libs"
803049dc963fSmrg
803149dc963fSmrg      # All the library-specific variables (install_libdir is set above).
803249dc963fSmrg      library_names=
803349dc963fSmrg      old_library=
803449dc963fSmrg      dlname=
803549dc963fSmrg
803649dc963fSmrg      # Test again, we may have decided not to build it any more
803749dc963fSmrg      if test "$build_libtool_libs" = yes; then
80384e7590efSmrg	# Remove ${wl} instances when linking with ld.
80394e7590efSmrg	# FIXME: should test the right _cmds variable.
80404e7590efSmrg	case $archive_cmds in
80414e7590efSmrg	  *\$LD\ *) wl= ;;
80424e7590efSmrg        esac
804349dc963fSmrg	if test "$hardcode_into_libs" = yes; then
804449dc963fSmrg	  # Hardcode the library paths
804549dc963fSmrg	  hardcode_libdirs=
804649dc963fSmrg	  dep_rpath=
804749dc963fSmrg	  rpath="$finalize_rpath"
80484e7590efSmrg	  test "$opt_mode" != relink && rpath="$compile_rpath$rpath"
804949dc963fSmrg	  for libdir in $rpath; do
805049dc963fSmrg	    if test -n "$hardcode_libdir_flag_spec"; then
805149dc963fSmrg	      if test -n "$hardcode_libdir_separator"; then
80524e7590efSmrg		func_replace_sysroot "$libdir"
80534e7590efSmrg		libdir=$func_replace_sysroot_result
805449dc963fSmrg		if test -z "$hardcode_libdirs"; then
805549dc963fSmrg		  hardcode_libdirs="$libdir"
805649dc963fSmrg		else
805749dc963fSmrg		  # Just accumulate the unique libdirs.
805849dc963fSmrg		  case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in
805949dc963fSmrg		  *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*)
806049dc963fSmrg		    ;;
806149dc963fSmrg		  *)
80624e7590efSmrg		    func_append hardcode_libdirs "$hardcode_libdir_separator$libdir"
806349dc963fSmrg		    ;;
806449dc963fSmrg		  esac
806549dc963fSmrg		fi
806649dc963fSmrg	      else
806749dc963fSmrg		eval flag=\"$hardcode_libdir_flag_spec\"
80684e7590efSmrg		func_append dep_rpath " $flag"
806949dc963fSmrg	      fi
807049dc963fSmrg	    elif test -n "$runpath_var"; then
807149dc963fSmrg	      case "$perm_rpath " in
807249dc963fSmrg	      *" $libdir "*) ;;
80734e7590efSmrg	      *) func_append perm_rpath " $libdir" ;;
807449dc963fSmrg	      esac
807549dc963fSmrg	    fi
807649dc963fSmrg	  done
807749dc963fSmrg	  # Substitute the hardcoded libdirs into the rpath.
807849dc963fSmrg	  if test -n "$hardcode_libdir_separator" &&
807949dc963fSmrg	     test -n "$hardcode_libdirs"; then
808049dc963fSmrg	    libdir="$hardcode_libdirs"
80814e7590efSmrg	    eval "dep_rpath=\"$hardcode_libdir_flag_spec\""
808249dc963fSmrg	  fi
808349dc963fSmrg	  if test -n "$runpath_var" && test -n "$perm_rpath"; then
808449dc963fSmrg	    # We should set the runpath_var.
808549dc963fSmrg	    rpath=
808649dc963fSmrg	    for dir in $perm_rpath; do
80874e7590efSmrg	      func_append rpath "$dir:"
808849dc963fSmrg	    done
808949dc963fSmrg	    eval "$runpath_var='$rpath\$$runpath_var'; export $runpath_var"
809049dc963fSmrg	  fi
809149dc963fSmrg	  test -n "$dep_rpath" && deplibs="$dep_rpath $deplibs"
809249dc963fSmrg	fi
80934b0ead49Smrg
809449dc963fSmrg	shlibpath="$finalize_shlibpath"
80954e7590efSmrg	test "$opt_mode" != relink && shlibpath="$compile_shlibpath$shlibpath"
809649dc963fSmrg	if test -n "$shlibpath"; then
809749dc963fSmrg	  eval "$shlibpath_var='$shlibpath\$$shlibpath_var'; export $shlibpath_var"
809849dc963fSmrg	fi
80994b0ead49Smrg
810049dc963fSmrg	# Get the real and link names of the library.
810149dc963fSmrg	eval shared_ext=\"$shrext_cmds\"
810249dc963fSmrg	eval library_names=\"$library_names_spec\"
810349dc963fSmrg	set dummy $library_names
810449dc963fSmrg	shift
810549dc963fSmrg	realname="$1"
810649dc963fSmrg	shift
81074b0ead49Smrg
810849dc963fSmrg	if test -n "$soname_spec"; then
810949dc963fSmrg	  eval soname=\"$soname_spec\"
811049dc963fSmrg	else
811149dc963fSmrg	  soname="$realname"
811249dc963fSmrg	fi
811349dc963fSmrg	if test -z "$dlname"; then
811449dc963fSmrg	  dlname=$soname
811549dc963fSmrg	fi
81164b0ead49Smrg
811749dc963fSmrg	lib="$output_objdir/$realname"
811849dc963fSmrg	linknames=
811949dc963fSmrg	for link
812049dc963fSmrg	do
81214e7590efSmrg	  func_append linknames " $link"
812249dc963fSmrg	done
81234b0ead49Smrg
812449dc963fSmrg	# Use standard objects if they are pic
81257aa89044Smrg	test -z "$pic_flag" && libobjs=`$ECHO "$libobjs" | $SP2NL | $SED "$lo2o" | $NL2SP`
812649dc963fSmrg	test "X$libobjs" = "X " && libobjs=
81274b0ead49Smrg
812849dc963fSmrg	delfiles=
812949dc963fSmrg	if test -n "$export_symbols" && test -n "$include_expsyms"; then
813049dc963fSmrg	  $opt_dry_run || cp "$export_symbols" "$output_objdir/$libname.uexp"
813149dc963fSmrg	  export_symbols="$output_objdir/$libname.uexp"
81324e7590efSmrg	  func_append delfiles " $export_symbols"
813349dc963fSmrg	fi
81344b0ead49Smrg
813549dc963fSmrg	orig_export_symbols=
813649dc963fSmrg	case $host_os in
813749dc963fSmrg	cygwin* | mingw* | cegcc*)
813849dc963fSmrg	  if test -n "$export_symbols" && test -z "$export_symbols_regex"; then
813949dc963fSmrg	    # exporting using user supplied symfile
814049dc963fSmrg	    if test "x`$SED 1q $export_symbols`" != xEXPORTS; then
814149dc963fSmrg	      # and it's NOT already a .def file. Must figure out
814249dc963fSmrg	      # which of the given symbols are data symbols and tag
814349dc963fSmrg	      # them as such. So, trigger use of export_symbols_cmds.
814449dc963fSmrg	      # export_symbols gets reassigned inside the "prepare
814549dc963fSmrg	      # the list of exported symbols" if statement, so the
814649dc963fSmrg	      # include_expsyms logic still works.
814749dc963fSmrg	      orig_export_symbols="$export_symbols"
814849dc963fSmrg	      export_symbols=
814949dc963fSmrg	      always_export_symbols=yes
815049dc963fSmrg	    fi
815149dc963fSmrg	  fi
815249dc963fSmrg	  ;;
815349dc963fSmrg	esac
81544b0ead49Smrg
815549dc963fSmrg	# Prepare the list of exported symbols
815649dc963fSmrg	if test -z "$export_symbols"; then
815749dc963fSmrg	  if test "$always_export_symbols" = yes || test -n "$export_symbols_regex"; then
815849dc963fSmrg	    func_verbose "generating symbol list for \`$libname.la'"
815949dc963fSmrg	    export_symbols="$output_objdir/$libname.exp"
816049dc963fSmrg	    $opt_dry_run || $RM $export_symbols
816149dc963fSmrg	    cmds=$export_symbols_cmds
816249dc963fSmrg	    save_ifs="$IFS"; IFS='~'
81634e7590efSmrg	    for cmd1 in $cmds; do
816449dc963fSmrg	      IFS="$save_ifs"
81654e7590efSmrg	      # Take the normal branch if the nm_file_list_spec branch
81664e7590efSmrg	      # doesn't work or if tool conversion is not needed.
81674e7590efSmrg	      case $nm_file_list_spec~$to_tool_file_cmd in
81684e7590efSmrg		*~func_convert_file_noop | *~func_convert_file_msys_to_w32 | ~*)
81694e7590efSmrg		  try_normal_branch=yes
81704e7590efSmrg		  eval cmd=\"$cmd1\"
81714e7590efSmrg		  func_len " $cmd"
81724e7590efSmrg		  len=$func_len_result
81734e7590efSmrg		  ;;
81744e7590efSmrg		*)
81754e7590efSmrg		  try_normal_branch=no
81764e7590efSmrg		  ;;
81774e7590efSmrg	      esac
81784e7590efSmrg	      if test "$try_normal_branch" = yes \
81794e7590efSmrg		 && { test "$len" -lt "$max_cmd_len" \
81804e7590efSmrg		      || test "$max_cmd_len" -le -1; }
81814e7590efSmrg	      then
81824e7590efSmrg		func_show_eval "$cmd" 'exit $?'
81834e7590efSmrg		skipped_export=false
81844e7590efSmrg	      elif test -n "$nm_file_list_spec"; then
81854e7590efSmrg		func_basename "$output"
81864e7590efSmrg		output_la=$func_basename_result
81874e7590efSmrg		save_libobjs=$libobjs
81884e7590efSmrg		save_output=$output
81894e7590efSmrg		output=${output_objdir}/${output_la}.nm
81904e7590efSmrg		func_to_tool_file "$output"
81914e7590efSmrg		libobjs=$nm_file_list_spec$func_to_tool_file_result
81924e7590efSmrg		func_append delfiles " $output"
81934e7590efSmrg		func_verbose "creating $NM input file list: $output"
81944e7590efSmrg		for obj in $save_libobjs; do
81954e7590efSmrg		  func_to_tool_file "$obj"
81964e7590efSmrg		  $ECHO "$func_to_tool_file_result"
81974e7590efSmrg		done > "$output"
81984e7590efSmrg		eval cmd=\"$cmd1\"
819949dc963fSmrg		func_show_eval "$cmd" 'exit $?'
82004e7590efSmrg		output=$save_output
82014e7590efSmrg		libobjs=$save_libobjs
820249dc963fSmrg		skipped_export=false
820349dc963fSmrg	      else
820449dc963fSmrg		# The command line is too long to execute in one step.
820549dc963fSmrg		func_verbose "using reloadable object file for export list..."
820649dc963fSmrg		skipped_export=:
820749dc963fSmrg		# Break out early, otherwise skipped_export may be
820849dc963fSmrg		# set to false by a later but shorter cmd.
820949dc963fSmrg		break
821049dc963fSmrg	      fi
821149dc963fSmrg	    done
821249dc963fSmrg	    IFS="$save_ifs"
821349dc963fSmrg	    if test -n "$export_symbols_regex" && test "X$skipped_export" != "X:"; then
821449dc963fSmrg	      func_show_eval '$EGREP -e "$export_symbols_regex" "$export_symbols" > "${export_symbols}T"'
821549dc963fSmrg	      func_show_eval '$MV "${export_symbols}T" "$export_symbols"'
821649dc963fSmrg	    fi
821749dc963fSmrg	  fi
82184b0ead49Smrg	fi
82194b0ead49Smrg
822049dc963fSmrg	if test -n "$export_symbols" && test -n "$include_expsyms"; then
822149dc963fSmrg	  tmp_export_symbols="$export_symbols"
822249dc963fSmrg	  test -n "$orig_export_symbols" && tmp_export_symbols="$orig_export_symbols"
82237aa89044Smrg	  $opt_dry_run || eval '$ECHO "$include_expsyms" | $SP2NL >> "$tmp_export_symbols"'
822449dc963fSmrg	fi
82254b0ead49Smrg
822649dc963fSmrg	if test "X$skipped_export" != "X:" && test -n "$orig_export_symbols"; then
822749dc963fSmrg	  # The given exports_symbols file has to be filtered, so filter it.
822849dc963fSmrg	  func_verbose "filter symbol list for \`$libname.la' to tag DATA exports"
822949dc963fSmrg	  # FIXME: $output_objdir/$libname.filter potentially contains lots of
823049dc963fSmrg	  # 's' commands which not all seds can handle. GNU sed should be fine
823149dc963fSmrg	  # though. Also, the filter scales superlinearly with the number of
823249dc963fSmrg	  # global variables. join(1) would be nice here, but unfortunately
823349dc963fSmrg	  # isn't a blessed tool.
823449dc963fSmrg	  $opt_dry_run || $SED -e '/[ ,]DATA/!d;s,\(.*\)\([ \,].*\),s|^\1$|\1\2|,' < $export_symbols > $output_objdir/$libname.filter
82354e7590efSmrg	  func_append delfiles " $export_symbols $output_objdir/$libname.filter"
823649dc963fSmrg	  export_symbols=$output_objdir/$libname.def
823749dc963fSmrg	  $opt_dry_run || $SED -f $output_objdir/$libname.filter < $orig_export_symbols > $export_symbols
823849dc963fSmrg	fi
82394b0ead49Smrg
824049dc963fSmrg	tmp_deplibs=
824149dc963fSmrg	for test_deplib in $deplibs; do
824249dc963fSmrg	  case " $convenience " in
824349dc963fSmrg	  *" $test_deplib "*) ;;
824449dc963fSmrg	  *)
82454e7590efSmrg	    func_append tmp_deplibs " $test_deplib"
824649dc963fSmrg	    ;;
824749dc963fSmrg	  esac
824849dc963fSmrg	done
824949dc963fSmrg	deplibs="$tmp_deplibs"
82504b0ead49Smrg
825149dc963fSmrg	if test -n "$convenience"; then
825249dc963fSmrg	  if test -n "$whole_archive_flag_spec" &&
825349dc963fSmrg	    test "$compiler_needs_object" = yes &&
825449dc963fSmrg	    test -z "$libobjs"; then
825549dc963fSmrg	    # extract the archives, so we have objects to list.
825649dc963fSmrg	    # TODO: could optimize this to just extract one archive.
825749dc963fSmrg	    whole_archive_flag_spec=
825849dc963fSmrg	  fi
825949dc963fSmrg	  if test -n "$whole_archive_flag_spec"; then
826049dc963fSmrg	    save_libobjs=$libobjs
826149dc963fSmrg	    eval libobjs=\"\$libobjs $whole_archive_flag_spec\"
826249dc963fSmrg	    test "X$libobjs" = "X " && libobjs=
826349dc963fSmrg	  else
826449dc963fSmrg	    gentop="$output_objdir/${outputname}x"
82654e7590efSmrg	    func_append generated " $gentop"
82664b0ead49Smrg
826749dc963fSmrg	    func_extract_archives $gentop $convenience
82684e7590efSmrg	    func_append libobjs " $func_extract_archives_result"
826949dc963fSmrg	    test "X$libobjs" = "X " && libobjs=
827049dc963fSmrg	  fi
82714b0ead49Smrg	fi
82724b0ead49Smrg
827349dc963fSmrg	if test "$thread_safe" = yes && test -n "$thread_safe_flag_spec"; then
827449dc963fSmrg	  eval flag=\"$thread_safe_flag_spec\"
82754e7590efSmrg	  func_append linker_flags " $flag"
82764b0ead49Smrg	fi
82774b0ead49Smrg
827849dc963fSmrg	# Make a backup of the uninstalled library when relinking
82794e7590efSmrg	if test "$opt_mode" = relink; then
828049dc963fSmrg	  $opt_dry_run || eval '(cd $output_objdir && $RM ${realname}U && $MV $realname ${realname}U)' || exit $?
828149dc963fSmrg	fi
82824b0ead49Smrg
828349dc963fSmrg	# Do each of the archive commands.
828449dc963fSmrg	if test "$module" = yes && test -n "$module_cmds" ; then
828549dc963fSmrg	  if test -n "$export_symbols" && test -n "$module_expsym_cmds"; then
828649dc963fSmrg	    eval test_cmds=\"$module_expsym_cmds\"
828749dc963fSmrg	    cmds=$module_expsym_cmds
828849dc963fSmrg	  else
828949dc963fSmrg	    eval test_cmds=\"$module_cmds\"
829049dc963fSmrg	    cmds=$module_cmds
829149dc963fSmrg	  fi
82924b0ead49Smrg	else
829349dc963fSmrg	  if test -n "$export_symbols" && test -n "$archive_expsym_cmds"; then
829449dc963fSmrg	    eval test_cmds=\"$archive_expsym_cmds\"
829549dc963fSmrg	    cmds=$archive_expsym_cmds
829649dc963fSmrg	  else
829749dc963fSmrg	    eval test_cmds=\"$archive_cmds\"
829849dc963fSmrg	    cmds=$archive_cmds
829949dc963fSmrg	  fi
83004b0ead49Smrg	fi
83014b0ead49Smrg
830249dc963fSmrg	if test "X$skipped_export" != "X:" &&
830349dc963fSmrg	   func_len " $test_cmds" &&
830449dc963fSmrg	   len=$func_len_result &&
830549dc963fSmrg	   test "$len" -lt "$max_cmd_len" || test "$max_cmd_len" -le -1; then
830649dc963fSmrg	  :
830749dc963fSmrg	else
830849dc963fSmrg	  # The command line is too long to link in one step, link piecewise
830949dc963fSmrg	  # or, if using GNU ld and skipped_export is not :, use a linker
831049dc963fSmrg	  # script.
83114b0ead49Smrg
831249dc963fSmrg	  # Save the value of $output and $libobjs because we want to
831349dc963fSmrg	  # use them later.  If we have whole_archive_flag_spec, we
831449dc963fSmrg	  # want to use save_libobjs as it was before
831549dc963fSmrg	  # whole_archive_flag_spec was expanded, because we can't
831649dc963fSmrg	  # assume the linker understands whole_archive_flag_spec.
831749dc963fSmrg	  # This may have to be revisited, in case too many
831849dc963fSmrg	  # convenience libraries get linked in and end up exceeding
831949dc963fSmrg	  # the spec.
832049dc963fSmrg	  if test -z "$convenience" || test -z "$whole_archive_flag_spec"; then
832149dc963fSmrg	    save_libobjs=$libobjs
832249dc963fSmrg	  fi
832349dc963fSmrg	  save_output=$output
83247aa89044Smrg	  func_basename "$output"
83257aa89044Smrg	  output_la=$func_basename_result
83264b0ead49Smrg
832749dc963fSmrg	  # Clear the reloadable object creation command queue and
832849dc963fSmrg	  # initialize k to one.
832949dc963fSmrg	  test_cmds=
833049dc963fSmrg	  concat_cmds=
833149dc963fSmrg	  objlist=
833249dc963fSmrg	  last_robj=
833349dc963fSmrg	  k=1
833449dc963fSmrg
833549dc963fSmrg	  if test -n "$save_libobjs" && test "X$skipped_export" != "X:" && test "$with_gnu_ld" = yes; then
833649dc963fSmrg	    output=${output_objdir}/${output_la}.lnkscript
833749dc963fSmrg	    func_verbose "creating GNU ld script: $output"
83387aa89044Smrg	    echo 'INPUT (' > $output
833949dc963fSmrg	    for obj in $save_libobjs
83404b0ead49Smrg	    do
83414e7590efSmrg	      func_to_tool_file "$obj"
83424e7590efSmrg	      $ECHO "$func_to_tool_file_result" >> $output
834349dc963fSmrg	    done
83447aa89044Smrg	    echo ')' >> $output
83454e7590efSmrg	    func_append delfiles " $output"
83464e7590efSmrg	    func_to_tool_file "$output"
83474e7590efSmrg	    output=$func_to_tool_file_result
834849dc963fSmrg	  elif test -n "$save_libobjs" && test "X$skipped_export" != "X:" && test "X$file_list_spec" != X; then
834949dc963fSmrg	    output=${output_objdir}/${output_la}.lnk
835049dc963fSmrg	    func_verbose "creating linker input file list: $output"
835149dc963fSmrg	    : > $output
835249dc963fSmrg	    set x $save_libobjs
835349dc963fSmrg	    shift
835449dc963fSmrg	    firstobj=
835549dc963fSmrg	    if test "$compiler_needs_object" = yes; then
835649dc963fSmrg	      firstobj="$1 "
835749dc963fSmrg	      shift
835849dc963fSmrg	    fi
835949dc963fSmrg	    for obj
836049dc963fSmrg	    do
83614e7590efSmrg	      func_to_tool_file "$obj"
83624e7590efSmrg	      $ECHO "$func_to_tool_file_result" >> $output
836349dc963fSmrg	    done
83644e7590efSmrg	    func_append delfiles " $output"
83654e7590efSmrg	    func_to_tool_file "$output"
83664e7590efSmrg	    output=$firstobj\"$file_list_spec$func_to_tool_file_result\"
836749dc963fSmrg	  else
836849dc963fSmrg	    if test -n "$save_libobjs"; then
836949dc963fSmrg	      func_verbose "creating reloadable object files..."
837049dc963fSmrg	      output=$output_objdir/$output_la-${k}.$objext
837149dc963fSmrg	      eval test_cmds=\"$reload_cmds\"
837249dc963fSmrg	      func_len " $test_cmds"
837349dc963fSmrg	      len0=$func_len_result
837449dc963fSmrg	      len=$len0
837549dc963fSmrg
837649dc963fSmrg	      # Loop over the list of objects to be linked.
837749dc963fSmrg	      for obj in $save_libobjs
837849dc963fSmrg	      do
837949dc963fSmrg		func_len " $obj"
838049dc963fSmrg		func_arith $len + $func_len_result
838149dc963fSmrg		len=$func_arith_result
838249dc963fSmrg		if test "X$objlist" = X ||
838349dc963fSmrg		   test "$len" -lt "$max_cmd_len"; then
838449dc963fSmrg		  func_append objlist " $obj"
838549dc963fSmrg		else
838649dc963fSmrg		  # The command $test_cmds is almost too long, add a
838749dc963fSmrg		  # command to the queue.
838849dc963fSmrg		  if test "$k" -eq 1 ; then
838949dc963fSmrg		    # The first file doesn't have a previous command to add.
83907aa89044Smrg		    reload_objs=$objlist
83917aa89044Smrg		    eval concat_cmds=\"$reload_cmds\"
839249dc963fSmrg		  else
839349dc963fSmrg		    # All subsequent reloadable object files will link in
839449dc963fSmrg		    # the last one created.
83957aa89044Smrg		    reload_objs="$objlist $last_robj"
83967aa89044Smrg		    eval concat_cmds=\"\$concat_cmds~$reload_cmds~\$RM $last_robj\"
839749dc963fSmrg		  fi
839849dc963fSmrg		  last_robj=$output_objdir/$output_la-${k}.$objext
839949dc963fSmrg		  func_arith $k + 1
840049dc963fSmrg		  k=$func_arith_result
840149dc963fSmrg		  output=$output_objdir/$output_la-${k}.$objext
84027aa89044Smrg		  objlist=" $obj"
840349dc963fSmrg		  func_len " $last_robj"
840449dc963fSmrg		  func_arith $len0 + $func_len_result
840549dc963fSmrg		  len=$func_arith_result
840649dc963fSmrg		fi
840749dc963fSmrg	      done
840849dc963fSmrg	      # Handle the remaining objects by creating one last
840949dc963fSmrg	      # reloadable object file.  All subsequent reloadable object
841049dc963fSmrg	      # files will link in the last one created.
841149dc963fSmrg	      test -z "$concat_cmds" || concat_cmds=$concat_cmds~
84127aa89044Smrg	      reload_objs="$objlist $last_robj"
84137aa89044Smrg	      eval concat_cmds=\"\${concat_cmds}$reload_cmds\"
841449dc963fSmrg	      if test -n "$last_robj"; then
841549dc963fSmrg	        eval concat_cmds=\"\${concat_cmds}~\$RM $last_robj\"
841649dc963fSmrg	      fi
84174e7590efSmrg	      func_append delfiles " $output"
84184b0ead49Smrg
841949dc963fSmrg	    else
842049dc963fSmrg	      output=
842149dc963fSmrg	    fi
84224b0ead49Smrg
842349dc963fSmrg	    if ${skipped_export-false}; then
842449dc963fSmrg	      func_verbose "generating symbol list for \`$libname.la'"
842549dc963fSmrg	      export_symbols="$output_objdir/$libname.exp"
842649dc963fSmrg	      $opt_dry_run || $RM $export_symbols
842749dc963fSmrg	      libobjs=$output
842849dc963fSmrg	      # Append the command to create the export file.
842949dc963fSmrg	      test -z "$concat_cmds" || concat_cmds=$concat_cmds~
843049dc963fSmrg	      eval concat_cmds=\"\$concat_cmds$export_symbols_cmds\"
843149dc963fSmrg	      if test -n "$last_robj"; then
843249dc963fSmrg		eval concat_cmds=\"\$concat_cmds~\$RM $last_robj\"
843349dc963fSmrg	      fi
84344b0ead49Smrg	    fi
84354b0ead49Smrg
843649dc963fSmrg	    test -n "$save_libobjs" &&
843749dc963fSmrg	      func_verbose "creating a temporary reloadable object file: $output"
84384b0ead49Smrg
843949dc963fSmrg	    # Loop through the commands generated above and execute them.
844049dc963fSmrg	    save_ifs="$IFS"; IFS='~'
844149dc963fSmrg	    for cmd in $concat_cmds; do
844249dc963fSmrg	      IFS="$save_ifs"
844349dc963fSmrg	      $opt_silent || {
844449dc963fSmrg		  func_quote_for_expand "$cmd"
844549dc963fSmrg		  eval "func_echo $func_quote_for_expand_result"
844649dc963fSmrg	      }
844749dc963fSmrg	      $opt_dry_run || eval "$cmd" || {
844849dc963fSmrg		lt_exit=$?
844949dc963fSmrg
845049dc963fSmrg		# Restore the uninstalled library and exit
84514e7590efSmrg		if test "$opt_mode" = relink; then
845249dc963fSmrg		  ( cd "$output_objdir" && \
845349dc963fSmrg		    $RM "${realname}T" && \
845449dc963fSmrg		    $MV "${realname}U" "$realname" )
845549dc963fSmrg		fi
84564b0ead49Smrg
845749dc963fSmrg		exit $lt_exit
845849dc963fSmrg	      }
845949dc963fSmrg	    done
846049dc963fSmrg	    IFS="$save_ifs"
84614b0ead49Smrg
846249dc963fSmrg	    if test -n "$export_symbols_regex" && ${skipped_export-false}; then
846349dc963fSmrg	      func_show_eval '$EGREP -e "$export_symbols_regex" "$export_symbols" > "${export_symbols}T"'
846449dc963fSmrg	      func_show_eval '$MV "${export_symbols}T" "$export_symbols"'
84654b0ead49Smrg	    fi
84664b0ead49Smrg	  fi
84674b0ead49Smrg
846849dc963fSmrg          if ${skipped_export-false}; then
846949dc963fSmrg	    if test -n "$export_symbols" && test -n "$include_expsyms"; then
847049dc963fSmrg	      tmp_export_symbols="$export_symbols"
847149dc963fSmrg	      test -n "$orig_export_symbols" && tmp_export_symbols="$orig_export_symbols"
84727aa89044Smrg	      $opt_dry_run || eval '$ECHO "$include_expsyms" | $SP2NL >> "$tmp_export_symbols"'
847349dc963fSmrg	    fi
84744b0ead49Smrg
847549dc963fSmrg	    if test -n "$orig_export_symbols"; then
847649dc963fSmrg	      # The given exports_symbols file has to be filtered, so filter it.
847749dc963fSmrg	      func_verbose "filter symbol list for \`$libname.la' to tag DATA exports"
847849dc963fSmrg	      # FIXME: $output_objdir/$libname.filter potentially contains lots of
847949dc963fSmrg	      # 's' commands which not all seds can handle. GNU sed should be fine
848049dc963fSmrg	      # though. Also, the filter scales superlinearly with the number of
848149dc963fSmrg	      # global variables. join(1) would be nice here, but unfortunately
848249dc963fSmrg	      # isn't a blessed tool.
848349dc963fSmrg	      $opt_dry_run || $SED -e '/[ ,]DATA/!d;s,\(.*\)\([ \,].*\),s|^\1$|\1\2|,' < $export_symbols > $output_objdir/$libname.filter
84844e7590efSmrg	      func_append delfiles " $export_symbols $output_objdir/$libname.filter"
848549dc963fSmrg	      export_symbols=$output_objdir/$libname.def
848649dc963fSmrg	      $opt_dry_run || $SED -f $output_objdir/$libname.filter < $orig_export_symbols > $export_symbols
848749dc963fSmrg	    fi
848849dc963fSmrg	  fi
84894b0ead49Smrg
849049dc963fSmrg	  libobjs=$output
849149dc963fSmrg	  # Restore the value of output.
849249dc963fSmrg	  output=$save_output
84934b0ead49Smrg
849449dc963fSmrg	  if test -n "$convenience" && test -n "$whole_archive_flag_spec"; then
849549dc963fSmrg	    eval libobjs=\"\$libobjs $whole_archive_flag_spec\"
849649dc963fSmrg	    test "X$libobjs" = "X " && libobjs=
849749dc963fSmrg	  fi
849849dc963fSmrg	  # Expand the library linking commands again to reset the
849949dc963fSmrg	  # value of $libobjs for piecewise linking.
85004b0ead49Smrg
850149dc963fSmrg	  # Do each of the archive commands.
850249dc963fSmrg	  if test "$module" = yes && test -n "$module_cmds" ; then
850349dc963fSmrg	    if test -n "$export_symbols" && test -n "$module_expsym_cmds"; then
850449dc963fSmrg	      cmds=$module_expsym_cmds
850549dc963fSmrg	    else
850649dc963fSmrg	      cmds=$module_cmds
85074b0ead49Smrg	    fi
85084b0ead49Smrg	  else
850949dc963fSmrg	    if test -n "$export_symbols" && test -n "$archive_expsym_cmds"; then
851049dc963fSmrg	      cmds=$archive_expsym_cmds
851149dc963fSmrg	    else
851249dc963fSmrg	      cmds=$archive_cmds
851349dc963fSmrg	    fi
85144b0ead49Smrg	  fi
851549dc963fSmrg	fi
85164b0ead49Smrg
851749dc963fSmrg	if test -n "$delfiles"; then
851849dc963fSmrg	  # Append the command to remove temporary files to $cmds.
851949dc963fSmrg	  eval cmds=\"\$cmds~\$RM $delfiles\"
852049dc963fSmrg	fi
85214b0ead49Smrg
852249dc963fSmrg	# Add any objects from preloaded convenience libraries
852349dc963fSmrg	if test -n "$dlprefiles"; then
852449dc963fSmrg	  gentop="$output_objdir/${outputname}x"
85254e7590efSmrg	  func_append generated " $gentop"
85264b0ead49Smrg
852749dc963fSmrg	  func_extract_archives $gentop $dlprefiles
85284e7590efSmrg	  func_append libobjs " $func_extract_archives_result"
852949dc963fSmrg	  test "X$libobjs" = "X " && libobjs=
853049dc963fSmrg	fi
85314b0ead49Smrg
853249dc963fSmrg	save_ifs="$IFS"; IFS='~'
853349dc963fSmrg	for cmd in $cmds; do
853449dc963fSmrg	  IFS="$save_ifs"
853549dc963fSmrg	  eval cmd=\"$cmd\"
853649dc963fSmrg	  $opt_silent || {
853749dc963fSmrg	    func_quote_for_expand "$cmd"
853849dc963fSmrg	    eval "func_echo $func_quote_for_expand_result"
853949dc963fSmrg	  }
854049dc963fSmrg	  $opt_dry_run || eval "$cmd" || {
854149dc963fSmrg	    lt_exit=$?
85424b0ead49Smrg
854349dc963fSmrg	    # Restore the uninstalled library and exit
85444e7590efSmrg	    if test "$opt_mode" = relink; then
854549dc963fSmrg	      ( cd "$output_objdir" && \
854649dc963fSmrg	        $RM "${realname}T" && \
854749dc963fSmrg		$MV "${realname}U" "$realname" )
854849dc963fSmrg	    fi
85494b0ead49Smrg
855049dc963fSmrg	    exit $lt_exit
855149dc963fSmrg	  }
855249dc963fSmrg	done
855349dc963fSmrg	IFS="$save_ifs"
85544b0ead49Smrg
855549dc963fSmrg	# Restore the uninstalled library and exit
85564e7590efSmrg	if test "$opt_mode" = relink; then
855749dc963fSmrg	  $opt_dry_run || eval '(cd $output_objdir && $RM ${realname}T && $MV $realname ${realname}T && $MV ${realname}U $realname)' || exit $?
85584b0ead49Smrg
855949dc963fSmrg	  if test -n "$convenience"; then
856049dc963fSmrg	    if test -z "$whole_archive_flag_spec"; then
856149dc963fSmrg	      func_show_eval '${RM}r "$gentop"'
856249dc963fSmrg	    fi
856349dc963fSmrg	  fi
85644b0ead49Smrg
856549dc963fSmrg	  exit $EXIT_SUCCESS
856649dc963fSmrg	fi
856749dc963fSmrg
856849dc963fSmrg	# Create links to the real library.
856949dc963fSmrg	for linkname in $linknames; do
857049dc963fSmrg	  if test "$realname" != "$linkname"; then
857149dc963fSmrg	    func_show_eval '(cd "$output_objdir" && $RM "$linkname" && $LN_S "$realname" "$linkname")' 'exit $?'
85724b0ead49Smrg	  fi
85734b0ead49Smrg	done
85744b0ead49Smrg
857549dc963fSmrg	# If -module or -export-dynamic was specified, set the dlname.
857649dc963fSmrg	if test "$module" = yes || test "$export_dynamic" = yes; then
857749dc963fSmrg	  # On all known operating systems, these are identical.
857849dc963fSmrg	  dlname="$soname"
857949dc963fSmrg	fi
858049dc963fSmrg      fi
85814b0ead49Smrg      ;;
85824b0ead49Smrg
858349dc963fSmrg    obj)
858449dc963fSmrg      if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then
858549dc963fSmrg	func_warning "\`-dlopen' is ignored for objects"
858649dc963fSmrg      fi
85874b0ead49Smrg
858849dc963fSmrg      case " $deplibs" in
858949dc963fSmrg      *\ -l* | *\ -L*)
859049dc963fSmrg	func_warning "\`-l' and \`-L' are ignored for objects" ;;
85914b0ead49Smrg      esac
85924b0ead49Smrg
859349dc963fSmrg      test -n "$rpath" && \
859449dc963fSmrg	func_warning "\`-rpath' is ignored for objects"
859549dc963fSmrg
859649dc963fSmrg      test -n "$xrpath" && \
859749dc963fSmrg	func_warning "\`-R' is ignored for objects"
85984b0ead49Smrg
859949dc963fSmrg      test -n "$vinfo" && \
860049dc963fSmrg	func_warning "\`-version-info' is ignored for objects"
86014b0ead49Smrg
860249dc963fSmrg      test -n "$release" && \
860349dc963fSmrg	func_warning "\`-release' is ignored for objects"
860449dc963fSmrg
860549dc963fSmrg      case $output in
860649dc963fSmrg      *.lo)
860749dc963fSmrg	test -n "$objs$old_deplibs" && \
860849dc963fSmrg	  func_fatal_error "cannot build library object \`$output' from non-libtool objects"
860949dc963fSmrg
861049dc963fSmrg	libobj=$output
861149dc963fSmrg	func_lo2o "$libobj"
861249dc963fSmrg	obj=$func_lo2o_result
86134b0ead49Smrg	;;
86144b0ead49Smrg      *)
861549dc963fSmrg	libobj=
861649dc963fSmrg	obj="$output"
86174b0ead49Smrg	;;
86184b0ead49Smrg      esac
86194b0ead49Smrg
862049dc963fSmrg      # Delete the old objects.
862149dc963fSmrg      $opt_dry_run || $RM $obj $libobj
86224b0ead49Smrg
862349dc963fSmrg      # Objects from convenience libraries.  This assumes
862449dc963fSmrg      # single-version convenience libraries.  Whenever we create
862549dc963fSmrg      # different ones for PIC/non-PIC, this we'll have to duplicate
862649dc963fSmrg      # the extraction.
862749dc963fSmrg      reload_conv_objs=
862849dc963fSmrg      gentop=
862949dc963fSmrg      # reload_cmds runs $LD directly, so let us get rid of
863049dc963fSmrg      # -Wl from whole_archive_flag_spec and hope we can get by with
863149dc963fSmrg      # turning comma into space..
863249dc963fSmrg      wl=
86334b0ead49Smrg
863449dc963fSmrg      if test -n "$convenience"; then
863549dc963fSmrg	if test -n "$whole_archive_flag_spec"; then
863649dc963fSmrg	  eval tmp_whole_archive_flags=\"$whole_archive_flag_spec\"
86377aa89044Smrg	  reload_conv_objs=$reload_objs\ `$ECHO "$tmp_whole_archive_flags" | $SED 's|,| |g'`
863849dc963fSmrg	else
863949dc963fSmrg	  gentop="$output_objdir/${obj}x"
86404e7590efSmrg	  func_append generated " $gentop"
86414b0ead49Smrg
864249dc963fSmrg	  func_extract_archives $gentop $convenience
864349dc963fSmrg	  reload_conv_objs="$reload_objs $func_extract_archives_result"
864449dc963fSmrg	fi
86454b0ead49Smrg      fi
86464b0ead49Smrg
86474e7590efSmrg      # If we're not building shared, we need to use non_pic_objs
86484e7590efSmrg      test "$build_libtool_libs" != yes && libobjs="$non_pic_objects"
86494e7590efSmrg
865049dc963fSmrg      # Create the old-style object.
86517aa89044Smrg      reload_objs="$objs$old_deplibs "`$ECHO "$libobjs" | $SP2NL | $SED "/\.${libext}$/d; /\.lib$/d; $lo2o" | $NL2SP`" $reload_conv_objs" ### testsuite: skip nested quoting test
86524b0ead49Smrg
865349dc963fSmrg      output="$obj"
865449dc963fSmrg      func_execute_cmds "$reload_cmds" 'exit $?'
86554b0ead49Smrg
865649dc963fSmrg      # Exit if we aren't doing a library object file.
865749dc963fSmrg      if test -z "$libobj"; then
865849dc963fSmrg	if test -n "$gentop"; then
865949dc963fSmrg	  func_show_eval '${RM}r "$gentop"'
866049dc963fSmrg	fi
866149dc963fSmrg
866249dc963fSmrg	exit $EXIT_SUCCESS
86634b0ead49Smrg      fi
866449dc963fSmrg
866549dc963fSmrg      if test "$build_libtool_libs" != yes; then
866649dc963fSmrg	if test -n "$gentop"; then
866749dc963fSmrg	  func_show_eval '${RM}r "$gentop"'
866849dc963fSmrg	fi
866949dc963fSmrg
867049dc963fSmrg	# Create an invalid libtool object if no PIC, so that we don't
867149dc963fSmrg	# accidentally link it into a program.
867249dc963fSmrg	# $show "echo timestamp > $libobj"
867349dc963fSmrg	# $opt_dry_run || eval "echo timestamp > $libobj" || exit $?
867449dc963fSmrg	exit $EXIT_SUCCESS
867549dc963fSmrg      fi
867649dc963fSmrg
867749dc963fSmrg      if test -n "$pic_flag" || test "$pic_mode" != default; then
867849dc963fSmrg	# Only do commands if we really have different PIC objects.
867949dc963fSmrg	reload_objs="$libobjs $reload_conv_objs"
868049dc963fSmrg	output="$libobj"
868149dc963fSmrg	func_execute_cmds "$reload_cmds" 'exit $?'
868249dc963fSmrg      fi
868349dc963fSmrg
868449dc963fSmrg      if test -n "$gentop"; then
868549dc963fSmrg	func_show_eval '${RM}r "$gentop"'
868649dc963fSmrg      fi
868749dc963fSmrg
868849dc963fSmrg      exit $EXIT_SUCCESS
86894b0ead49Smrg      ;;
86904b0ead49Smrg
869149dc963fSmrg    prog)
869249dc963fSmrg      case $host in
869349dc963fSmrg	*cygwin*) func_stripname '' '.exe' "$output"
869449dc963fSmrg	          output=$func_stripname_result.exe;;
869549dc963fSmrg      esac
869649dc963fSmrg      test -n "$vinfo" && \
869749dc963fSmrg	func_warning "\`-version-info' is ignored for programs"
86984b0ead49Smrg
869949dc963fSmrg      test -n "$release" && \
870049dc963fSmrg	func_warning "\`-release' is ignored for programs"
87014b0ead49Smrg
870249dc963fSmrg      test "$preload" = yes \
870349dc963fSmrg        && test "$dlopen_support" = unknown \
870449dc963fSmrg	&& test "$dlopen_self" = unknown \
870549dc963fSmrg	&& test "$dlopen_self_static" = unknown && \
870649dc963fSmrg	  func_warning "\`LT_INIT([dlopen])' not used. Assuming no dlopen support."
870749dc963fSmrg
870849dc963fSmrg      case $host in
870949dc963fSmrg      *-*-rhapsody* | *-*-darwin1.[012])
871049dc963fSmrg	# On Rhapsody replace the C library is the System framework
87117aa89044Smrg	compile_deplibs=`$ECHO " $compile_deplibs" | $SED 's/ -lc / System.ltframework /'`
87127aa89044Smrg	finalize_deplibs=`$ECHO " $finalize_deplibs" | $SED 's/ -lc / System.ltframework /'`
87134b0ead49Smrg	;;
871449dc963fSmrg      esac
87154b0ead49Smrg
871649dc963fSmrg      case $host in
871749dc963fSmrg      *-*-darwin*)
871849dc963fSmrg	# Don't allow lazy linking, it breaks C++ global constructors
871949dc963fSmrg	# But is supposedly fixed on 10.4 or later (yay!).
872049dc963fSmrg	if test "$tagname" = CXX ; then
872149dc963fSmrg	  case ${MACOSX_DEPLOYMENT_TARGET-10.0} in
872249dc963fSmrg	    10.[0123])
87234e7590efSmrg	      func_append compile_command " ${wl}-bind_at_load"
87244e7590efSmrg	      func_append finalize_command " ${wl}-bind_at_load"
872549dc963fSmrg	    ;;
872649dc963fSmrg	  esac
87274b0ead49Smrg	fi
872849dc963fSmrg	# Time to change all our "foo.ltframework" stuff back to "-framework foo"
87297aa89044Smrg	compile_deplibs=`$ECHO " $compile_deplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'`
87307aa89044Smrg	finalize_deplibs=`$ECHO " $finalize_deplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'`
873149dc963fSmrg	;;
873249dc963fSmrg      esac
87334b0ead49Smrg
87344b0ead49Smrg
873549dc963fSmrg      # move library search paths that coincide with paths to not yet
873649dc963fSmrg      # installed libraries to the beginning of the library search list
873749dc963fSmrg      new_libs=
873849dc963fSmrg      for path in $notinst_path; do
873949dc963fSmrg	case " $new_libs " in
874049dc963fSmrg	*" -L$path/$objdir "*) ;;
874149dc963fSmrg	*)
874249dc963fSmrg	  case " $compile_deplibs " in
874349dc963fSmrg	  *" -L$path/$objdir "*)
87444e7590efSmrg	    func_append new_libs " -L$path/$objdir" ;;
87454b0ead49Smrg	  esac
874649dc963fSmrg	  ;;
874749dc963fSmrg	esac
874849dc963fSmrg      done
874949dc963fSmrg      for deplib in $compile_deplibs; do
875049dc963fSmrg	case $deplib in
875149dc963fSmrg	-L*)
875249dc963fSmrg	  case " $new_libs " in
875349dc963fSmrg	  *" $deplib "*) ;;
87544e7590efSmrg	  *) func_append new_libs " $deplib" ;;
87554b0ead49Smrg	  esac
875649dc963fSmrg	  ;;
87574e7590efSmrg	*) func_append new_libs " $deplib" ;;
875849dc963fSmrg	esac
875949dc963fSmrg      done
876049dc963fSmrg      compile_deplibs="$new_libs"
87614b0ead49Smrg
87624b0ead49Smrg
87634e7590efSmrg      func_append compile_command " $compile_deplibs"
87644e7590efSmrg      func_append finalize_command " $finalize_deplibs"
87654b0ead49Smrg
876649dc963fSmrg      if test -n "$rpath$xrpath"; then
876749dc963fSmrg	# If the user specified any rpath flags, then add them.
876849dc963fSmrg	for libdir in $rpath $xrpath; do
876949dc963fSmrg	  # This is the magic to use -rpath.
877049dc963fSmrg	  case "$finalize_rpath " in
877149dc963fSmrg	  *" $libdir "*) ;;
87724e7590efSmrg	  *) func_append finalize_rpath " $libdir" ;;
877349dc963fSmrg	  esac
877449dc963fSmrg	done
877549dc963fSmrg      fi
87764b0ead49Smrg
877749dc963fSmrg      # Now hardcode the library paths
877849dc963fSmrg      rpath=
877949dc963fSmrg      hardcode_libdirs=
878049dc963fSmrg      for libdir in $compile_rpath $finalize_rpath; do
878149dc963fSmrg	if test -n "$hardcode_libdir_flag_spec"; then
878249dc963fSmrg	  if test -n "$hardcode_libdir_separator"; then
878349dc963fSmrg	    if test -z "$hardcode_libdirs"; then
878449dc963fSmrg	      hardcode_libdirs="$libdir"
878549dc963fSmrg	    else
878649dc963fSmrg	      # Just accumulate the unique libdirs.
878749dc963fSmrg	      case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in
878849dc963fSmrg	      *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*)
878949dc963fSmrg		;;
879049dc963fSmrg	      *)
87914e7590efSmrg		func_append hardcode_libdirs "$hardcode_libdir_separator$libdir"
879249dc963fSmrg		;;
879349dc963fSmrg	      esac
879449dc963fSmrg	    fi
87954b0ead49Smrg	  else
879649dc963fSmrg	    eval flag=\"$hardcode_libdir_flag_spec\"
87974e7590efSmrg	    func_append rpath " $flag"
87984b0ead49Smrg	  fi
879949dc963fSmrg	elif test -n "$runpath_var"; then
880049dc963fSmrg	  case "$perm_rpath " in
880149dc963fSmrg	  *" $libdir "*) ;;
88024e7590efSmrg	  *) func_append perm_rpath " $libdir" ;;
880349dc963fSmrg	  esac
880449dc963fSmrg	fi
880549dc963fSmrg	case $host in
880649dc963fSmrg	*-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-cegcc*)
880749dc963fSmrg	  testbindir=`${ECHO} "$libdir" | ${SED} -e 's*/lib$*/bin*'`
880849dc963fSmrg	  case :$dllsearchpath: in
880949dc963fSmrg	  *":$libdir:"*) ;;
881049dc963fSmrg	  ::) dllsearchpath=$libdir;;
88114e7590efSmrg	  *) func_append dllsearchpath ":$libdir";;
881249dc963fSmrg	  esac
881349dc963fSmrg	  case :$dllsearchpath: in
881449dc963fSmrg	  *":$testbindir:"*) ;;
881549dc963fSmrg	  ::) dllsearchpath=$testbindir;;
88164e7590efSmrg	  *) func_append dllsearchpath ":$testbindir";;
881749dc963fSmrg	  esac
881849dc963fSmrg	  ;;
881949dc963fSmrg	esac
882049dc963fSmrg      done
882149dc963fSmrg      # Substitute the hardcoded libdirs into the rpath.
882249dc963fSmrg      if test -n "$hardcode_libdir_separator" &&
882349dc963fSmrg	 test -n "$hardcode_libdirs"; then
882449dc963fSmrg	libdir="$hardcode_libdirs"
882549dc963fSmrg	eval rpath=\" $hardcode_libdir_flag_spec\"
882649dc963fSmrg      fi
882749dc963fSmrg      compile_rpath="$rpath"
88284b0ead49Smrg
882949dc963fSmrg      rpath=
883049dc963fSmrg      hardcode_libdirs=
883149dc963fSmrg      for libdir in $finalize_rpath; do
883249dc963fSmrg	if test -n "$hardcode_libdir_flag_spec"; then
883349dc963fSmrg	  if test -n "$hardcode_libdir_separator"; then
883449dc963fSmrg	    if test -z "$hardcode_libdirs"; then
883549dc963fSmrg	      hardcode_libdirs="$libdir"
883649dc963fSmrg	    else
883749dc963fSmrg	      # Just accumulate the unique libdirs.
883849dc963fSmrg	      case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in
883949dc963fSmrg	      *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*)
884049dc963fSmrg		;;
884149dc963fSmrg	      *)
88424e7590efSmrg		func_append hardcode_libdirs "$hardcode_libdir_separator$libdir"
884349dc963fSmrg		;;
884449dc963fSmrg	      esac
884549dc963fSmrg	    fi
88464b0ead49Smrg	  else
884749dc963fSmrg	    eval flag=\"$hardcode_libdir_flag_spec\"
88484e7590efSmrg	    func_append rpath " $flag"
88494b0ead49Smrg	  fi
885049dc963fSmrg	elif test -n "$runpath_var"; then
885149dc963fSmrg	  case "$finalize_perm_rpath " in
885249dc963fSmrg	  *" $libdir "*) ;;
88534e7590efSmrg	  *) func_append finalize_perm_rpath " $libdir" ;;
885449dc963fSmrg	  esac
88554b0ead49Smrg	fi
885649dc963fSmrg      done
885749dc963fSmrg      # Substitute the hardcoded libdirs into the rpath.
885849dc963fSmrg      if test -n "$hardcode_libdir_separator" &&
885949dc963fSmrg	 test -n "$hardcode_libdirs"; then
886049dc963fSmrg	libdir="$hardcode_libdirs"
886149dc963fSmrg	eval rpath=\" $hardcode_libdir_flag_spec\"
886249dc963fSmrg      fi
886349dc963fSmrg      finalize_rpath="$rpath"
88644b0ead49Smrg
886549dc963fSmrg      if test -n "$libobjs" && test "$build_old_libs" = yes; then
886649dc963fSmrg	# Transform all the library objects into standard objects.
88677aa89044Smrg	compile_command=`$ECHO "$compile_command" | $SP2NL | $SED "$lo2o" | $NL2SP`
88687aa89044Smrg	finalize_command=`$ECHO "$finalize_command" | $SP2NL | $SED "$lo2o" | $NL2SP`
886949dc963fSmrg      fi
88704b0ead49Smrg
887149dc963fSmrg      func_generate_dlsyms "$outputname" "@PROGRAM@" "no"
88724b0ead49Smrg
887349dc963fSmrg      # template prelinking step
887449dc963fSmrg      if test -n "$prelink_cmds"; then
887549dc963fSmrg	func_execute_cmds "$prelink_cmds" 'exit $?'
887649dc963fSmrg      fi
88774b0ead49Smrg
887849dc963fSmrg      wrappers_required=yes
887949dc963fSmrg      case $host in
88807aa89044Smrg      *cegcc* | *mingw32ce*)
88817aa89044Smrg        # Disable wrappers for cegcc and mingw32ce hosts, we are cross compiling anyway.
88827aa89044Smrg        wrappers_required=no
88837aa89044Smrg        ;;
888449dc963fSmrg      *cygwin* | *mingw* )
888549dc963fSmrg        if test "$build_libtool_libs" != yes; then
888649dc963fSmrg          wrappers_required=no
888749dc963fSmrg        fi
888849dc963fSmrg        ;;
888949dc963fSmrg      *)
889049dc963fSmrg        if test "$need_relink" = no || test "$build_libtool_libs" != yes; then
889149dc963fSmrg          wrappers_required=no
889249dc963fSmrg        fi
889349dc963fSmrg        ;;
889449dc963fSmrg      esac
889549dc963fSmrg      if test "$wrappers_required" = no; then
889649dc963fSmrg	# Replace the output file specification.
88977aa89044Smrg	compile_command=`$ECHO "$compile_command" | $SED 's%@OUTPUT@%'"$output"'%g'`
889849dc963fSmrg	link_command="$compile_command$compile_rpath"
88994b0ead49Smrg
890049dc963fSmrg	# We have no uninstalled library dependencies, so finalize right now.
890149dc963fSmrg	exit_status=0
890249dc963fSmrg	func_show_eval "$link_command" 'exit_status=$?'
89034b0ead49Smrg
89044e7590efSmrg	if test -n "$postlink_cmds"; then
89054e7590efSmrg	  func_to_tool_file "$output"
89064e7590efSmrg	  postlink_cmds=`func_echo_all "$postlink_cmds" | $SED -e 's%@OUTPUT@%'"$output"'%g' -e 's%@TOOL_OUTPUT@%'"$func_to_tool_file_result"'%g'`
89074e7590efSmrg	  func_execute_cmds "$postlink_cmds" 'exit $?'
89084e7590efSmrg	fi
89094e7590efSmrg
891049dc963fSmrg	# Delete the generated files.
891149dc963fSmrg	if test -f "$output_objdir/${outputname}S.${objext}"; then
891249dc963fSmrg	  func_show_eval '$RM "$output_objdir/${outputname}S.${objext}"'
89134b0ead49Smrg	fi
89144b0ead49Smrg
891549dc963fSmrg	exit $exit_status
891649dc963fSmrg      fi
89174b0ead49Smrg
891849dc963fSmrg      if test -n "$compile_shlibpath$finalize_shlibpath"; then
891949dc963fSmrg	compile_command="$shlibpath_var=\"$compile_shlibpath$finalize_shlibpath\$$shlibpath_var\" $compile_command"
892049dc963fSmrg      fi
892149dc963fSmrg      if test -n "$finalize_shlibpath"; then
892249dc963fSmrg	finalize_command="$shlibpath_var=\"$finalize_shlibpath\$$shlibpath_var\" $finalize_command"
892349dc963fSmrg      fi
89244b0ead49Smrg
892549dc963fSmrg      compile_var=
892649dc963fSmrg      finalize_var=
892749dc963fSmrg      if test -n "$runpath_var"; then
892849dc963fSmrg	if test -n "$perm_rpath"; then
892949dc963fSmrg	  # We should set the runpath_var.
893049dc963fSmrg	  rpath=
893149dc963fSmrg	  for dir in $perm_rpath; do
89324e7590efSmrg	    func_append rpath "$dir:"
893349dc963fSmrg	  done
893449dc963fSmrg	  compile_var="$runpath_var=\"$rpath\$$runpath_var\" "
89354b0ead49Smrg	fi
893649dc963fSmrg	if test -n "$finalize_perm_rpath"; then
893749dc963fSmrg	  # We should set the runpath_var.
893849dc963fSmrg	  rpath=
893949dc963fSmrg	  for dir in $finalize_perm_rpath; do
89404e7590efSmrg	    func_append rpath "$dir:"
894149dc963fSmrg	  done
894249dc963fSmrg	  finalize_var="$runpath_var=\"$rpath\$$runpath_var\" "
89434b0ead49Smrg	fi
894449dc963fSmrg      fi
89454b0ead49Smrg
894649dc963fSmrg      if test "$no_install" = yes; then
894749dc963fSmrg	# We don't need to create a wrapper script.
894849dc963fSmrg	link_command="$compile_var$compile_command$compile_rpath"
894949dc963fSmrg	# Replace the output file specification.
89507aa89044Smrg	link_command=`$ECHO "$link_command" | $SED 's%@OUTPUT@%'"$output"'%g'`
895149dc963fSmrg	# Delete the old output file.
895249dc963fSmrg	$opt_dry_run || $RM $output
895349dc963fSmrg	# Link the executable and exit
895449dc963fSmrg	func_show_eval "$link_command" 'exit $?'
89554e7590efSmrg
89564e7590efSmrg	if test -n "$postlink_cmds"; then
89574e7590efSmrg	  func_to_tool_file "$output"
89584e7590efSmrg	  postlink_cmds=`func_echo_all "$postlink_cmds" | $SED -e 's%@OUTPUT@%'"$output"'%g' -e 's%@TOOL_OUTPUT@%'"$func_to_tool_file_result"'%g'`
89594e7590efSmrg	  func_execute_cmds "$postlink_cmds" 'exit $?'
89604e7590efSmrg	fi
89614e7590efSmrg
89624b0ead49Smrg	exit $EXIT_SUCCESS
896349dc963fSmrg      fi
89644b0ead49Smrg
896549dc963fSmrg      if test "$hardcode_action" = relink; then
896649dc963fSmrg	# Fast installation is not supported
896749dc963fSmrg	link_command="$compile_var$compile_command$compile_rpath"
896849dc963fSmrg	relink_command="$finalize_var$finalize_command$finalize_rpath"
896949dc963fSmrg
897049dc963fSmrg	func_warning "this platform does not like uninstalled shared libraries"
897149dc963fSmrg	func_warning "\`$output' will be relinked during installation"
897249dc963fSmrg      else
897349dc963fSmrg	if test "$fast_install" != no; then
897449dc963fSmrg	  link_command="$finalize_var$compile_command$finalize_rpath"
897549dc963fSmrg	  if test "$fast_install" = yes; then
89767aa89044Smrg	    relink_command=`$ECHO "$compile_var$compile_command$compile_rpath" | $SED 's%@OUTPUT@%\$progdir/\$file%g'`
897749dc963fSmrg	  else
897849dc963fSmrg	    # fast_install is set to needless
897949dc963fSmrg	    relink_command=
898049dc963fSmrg	  fi
89814b0ead49Smrg	else
898249dc963fSmrg	  link_command="$compile_var$compile_command$compile_rpath"
898349dc963fSmrg	  relink_command="$finalize_var$finalize_command$finalize_rpath"
89844b0ead49Smrg	fi
898549dc963fSmrg      fi
89864b0ead49Smrg
898749dc963fSmrg      # Replace the output file specification.
89887aa89044Smrg      link_command=`$ECHO "$link_command" | $SED 's%@OUTPUT@%'"$output_objdir/$outputname"'%g'`
89894b0ead49Smrg
899049dc963fSmrg      # Delete the old output files.
899149dc963fSmrg      $opt_dry_run || $RM $output $output_objdir/$outputname $output_objdir/lt-$outputname
89924b0ead49Smrg
899349dc963fSmrg      func_show_eval "$link_command" 'exit $?'
89944b0ead49Smrg
89954e7590efSmrg      if test -n "$postlink_cmds"; then
89964e7590efSmrg	func_to_tool_file "$output_objdir/$outputname"
89974e7590efSmrg	postlink_cmds=`func_echo_all "$postlink_cmds" | $SED -e 's%@OUTPUT@%'"$output_objdir/$outputname"'%g' -e 's%@TOOL_OUTPUT@%'"$func_to_tool_file_result"'%g'`
89984e7590efSmrg	func_execute_cmds "$postlink_cmds" 'exit $?'
89994e7590efSmrg      fi
90004e7590efSmrg
900149dc963fSmrg      # Now create the wrapper script.
900249dc963fSmrg      func_verbose "creating $output"
90034b0ead49Smrg
900449dc963fSmrg      # Quote the relink command for shipping.
900549dc963fSmrg      if test -n "$relink_command"; then
900649dc963fSmrg	# Preserve any variables that may affect compiler behavior
900749dc963fSmrg	for var in $variables_saved_for_relink; do
900849dc963fSmrg	  if eval test -z \"\${$var+set}\"; then
900949dc963fSmrg	    relink_command="{ test -z \"\${$var+set}\" || $lt_unset $var || { $var=; export $var; }; }; $relink_command"
901049dc963fSmrg	  elif eval var_value=\$$var; test -z "$var_value"; then
901149dc963fSmrg	    relink_command="$var=; export $var; $relink_command"
90124b0ead49Smrg	  else
901349dc963fSmrg	    func_quote_for_eval "$var_value"
901449dc963fSmrg	    relink_command="$var=$func_quote_for_eval_result; export $var; $relink_command"
90154b0ead49Smrg	  fi
901649dc963fSmrg	done
901749dc963fSmrg	relink_command="(cd `pwd`; $relink_command)"
90187aa89044Smrg	relink_command=`$ECHO "$relink_command" | $SED "$sed_quote_subst"`
901949dc963fSmrg      fi
902049dc963fSmrg
902149dc963fSmrg      # Only actually do things if not in dry run mode.
902249dc963fSmrg      $opt_dry_run || {
902349dc963fSmrg	# win32 will think the script is a binary if it has
902449dc963fSmrg	# a .exe suffix, so we strip it off here.
902549dc963fSmrg	case $output in
902649dc963fSmrg	  *.exe) func_stripname '' '.exe' "$output"
902749dc963fSmrg	         output=$func_stripname_result ;;
902849dc963fSmrg	esac
902949dc963fSmrg	# test for cygwin because mv fails w/o .exe extensions
903049dc963fSmrg	case $host in
903149dc963fSmrg	  *cygwin*)
903249dc963fSmrg	    exeext=.exe
903349dc963fSmrg	    func_stripname '' '.exe' "$outputname"
903449dc963fSmrg	    outputname=$func_stripname_result ;;
903549dc963fSmrg	  *) exeext= ;;
90364b0ead49Smrg	esac
903749dc963fSmrg	case $host in
903849dc963fSmrg	  *cygwin* | *mingw* )
903949dc963fSmrg	    func_dirname_and_basename "$output" "" "."
904049dc963fSmrg	    output_name=$func_basename_result
904149dc963fSmrg	    output_path=$func_dirname_result
904249dc963fSmrg	    cwrappersource="$output_path/$objdir/lt-$output_name.c"
904349dc963fSmrg	    cwrapper="$output_path/$output_name.exe"
904449dc963fSmrg	    $RM $cwrappersource $cwrapper
904549dc963fSmrg	    trap "$RM $cwrappersource $cwrapper; exit $EXIT_FAILURE" 1 2 15
904649dc963fSmrg
904749dc963fSmrg	    func_emit_cwrapperexe_src > $cwrappersource
904849dc963fSmrg
904949dc963fSmrg	    # The wrapper executable is built using the $host compiler,
905049dc963fSmrg	    # because it contains $host paths and files. If cross-
905149dc963fSmrg	    # compiling, it, like the target executable, must be
905249dc963fSmrg	    # executed on the $host or under an emulation environment.
905349dc963fSmrg	    $opt_dry_run || {
905449dc963fSmrg	      $LTCC $LTCFLAGS -o $cwrapper $cwrappersource
905549dc963fSmrg	      $STRIP $cwrapper
905649dc963fSmrg	    }
90574b0ead49Smrg
905849dc963fSmrg	    # Now, create the wrapper script for func_source use:
905949dc963fSmrg	    func_ltwrapper_scriptname $cwrapper
906049dc963fSmrg	    $RM $func_ltwrapper_scriptname_result
906149dc963fSmrg	    trap "$RM $func_ltwrapper_scriptname_result; exit $EXIT_FAILURE" 1 2 15
906249dc963fSmrg	    $opt_dry_run || {
906349dc963fSmrg	      # note: this script will not be executed, so do not chmod.
906449dc963fSmrg	      if test "x$build" = "x$host" ; then
906549dc963fSmrg		$cwrapper --lt-dump-script > $func_ltwrapper_scriptname_result
906649dc963fSmrg	      else
906749dc963fSmrg		func_emit_wrapper no > $func_ltwrapper_scriptname_result
906849dc963fSmrg	      fi
906949dc963fSmrg	    }
907049dc963fSmrg	  ;;
907149dc963fSmrg	  * )
907249dc963fSmrg	    $RM $output
907349dc963fSmrg	    trap "$RM $output; exit $EXIT_FAILURE" 1 2 15
90744b0ead49Smrg
907549dc963fSmrg	    func_emit_wrapper no > $output
907649dc963fSmrg	    chmod +x $output
907749dc963fSmrg	  ;;
907849dc963fSmrg	esac
907949dc963fSmrg      }
908049dc963fSmrg      exit $EXIT_SUCCESS
908149dc963fSmrg      ;;
908249dc963fSmrg    esac
90834b0ead49Smrg
908449dc963fSmrg    # See if we need to build an old-fashioned archive.
908549dc963fSmrg    for oldlib in $oldlibs; do
90864b0ead49Smrg
908749dc963fSmrg      if test "$build_libtool_libs" = convenience; then
908849dc963fSmrg	oldobjs="$libobjs_save $symfileobj"
908949dc963fSmrg	addlibs="$convenience"
909049dc963fSmrg	build_libtool_libs=no
909149dc963fSmrg      else
909249dc963fSmrg	if test "$build_libtool_libs" = module; then
909349dc963fSmrg	  oldobjs="$libobjs_save"
909449dc963fSmrg	  build_libtool_libs=no
909549dc963fSmrg	else
909649dc963fSmrg	  oldobjs="$old_deplibs $non_pic_objects"
909749dc963fSmrg	  if test "$preload" = yes && test -f "$symfileobj"; then
90984e7590efSmrg	    func_append oldobjs " $symfileobj"
909949dc963fSmrg	  fi
910049dc963fSmrg	fi
910149dc963fSmrg	addlibs="$old_convenience"
91024b0ead49Smrg      fi
91034b0ead49Smrg
910449dc963fSmrg      if test -n "$addlibs"; then
910549dc963fSmrg	gentop="$output_objdir/${outputname}x"
91064e7590efSmrg	func_append generated " $gentop"
91074b0ead49Smrg
910849dc963fSmrg	func_extract_archives $gentop $addlibs
91094e7590efSmrg	func_append oldobjs " $func_extract_archives_result"
911049dc963fSmrg      fi
91114b0ead49Smrg
911249dc963fSmrg      # Do each command in the archive commands.
911349dc963fSmrg      if test -n "$old_archive_from_new_cmds" && test "$build_libtool_libs" = yes; then
911449dc963fSmrg	cmds=$old_archive_from_new_cmds
911549dc963fSmrg      else
91164b0ead49Smrg
911749dc963fSmrg	# Add any objects from preloaded convenience libraries
911849dc963fSmrg	if test -n "$dlprefiles"; then
911949dc963fSmrg	  gentop="$output_objdir/${outputname}x"
91204e7590efSmrg	  func_append generated " $gentop"
91214b0ead49Smrg
912249dc963fSmrg	  func_extract_archives $gentop $dlprefiles
91234e7590efSmrg	  func_append oldobjs " $func_extract_archives_result"
912449dc963fSmrg	fi
91254b0ead49Smrg
912649dc963fSmrg	# POSIX demands no paths to be encoded in archives.  We have
912749dc963fSmrg	# to avoid creating archives with duplicate basenames if we
912849dc963fSmrg	# might have to extract them afterwards, e.g., when creating a
912949dc963fSmrg	# static archive out of a convenience library, or when linking
913049dc963fSmrg	# the entirety of a libtool archive into another (currently
913149dc963fSmrg	# not supported by libtool).
913249dc963fSmrg	if (for obj in $oldobjs
913349dc963fSmrg	    do
913449dc963fSmrg	      func_basename "$obj"
913549dc963fSmrg	      $ECHO "$func_basename_result"
913649dc963fSmrg	    done | sort | sort -uc >/dev/null 2>&1); then
913749dc963fSmrg	  :
913849dc963fSmrg	else
91397aa89044Smrg	  echo "copying selected object files to avoid basename conflicts..."
914049dc963fSmrg	  gentop="$output_objdir/${outputname}x"
91414e7590efSmrg	  func_append generated " $gentop"
914249dc963fSmrg	  func_mkdir_p "$gentop"
914349dc963fSmrg	  save_oldobjs=$oldobjs
914449dc963fSmrg	  oldobjs=
914549dc963fSmrg	  counter=1
914649dc963fSmrg	  for obj in $save_oldobjs
914749dc963fSmrg	  do
914849dc963fSmrg	    func_basename "$obj"
914949dc963fSmrg	    objbase="$func_basename_result"
915049dc963fSmrg	    case " $oldobjs " in
915149dc963fSmrg	    " ") oldobjs=$obj ;;
915249dc963fSmrg	    *[\ /]"$objbase "*)
915349dc963fSmrg	      while :; do
915449dc963fSmrg		# Make sure we don't pick an alternate name that also
915549dc963fSmrg		# overlaps.
915649dc963fSmrg		newobj=lt$counter-$objbase
915749dc963fSmrg		func_arith $counter + 1
915849dc963fSmrg		counter=$func_arith_result
915949dc963fSmrg		case " $oldobjs " in
916049dc963fSmrg		*[\ /]"$newobj "*) ;;
916149dc963fSmrg		*) if test ! -f "$gentop/$newobj"; then break; fi ;;
916249dc963fSmrg		esac
916349dc963fSmrg	      done
916449dc963fSmrg	      func_show_eval "ln $obj $gentop/$newobj || cp $obj $gentop/$newobj"
91654e7590efSmrg	      func_append oldobjs " $gentop/$newobj"
916649dc963fSmrg	      ;;
91674e7590efSmrg	    *) func_append oldobjs " $obj" ;;
916849dc963fSmrg	    esac
91694b0ead49Smrg	  done
91704b0ead49Smrg	fi
91714e7590efSmrg	func_to_tool_file "$oldlib" func_convert_file_msys_to_w32
91724e7590efSmrg	tool_oldlib=$func_to_tool_file_result
917349dc963fSmrg	eval cmds=\"$old_archive_cmds\"
91744b0ead49Smrg
917549dc963fSmrg	func_len " $cmds"
917649dc963fSmrg	len=$func_len_result
917749dc963fSmrg	if test "$len" -lt "$max_cmd_len" || test "$max_cmd_len" -le -1; then
917849dc963fSmrg	  cmds=$old_archive_cmds
91794e7590efSmrg	elif test -n "$archiver_list_spec"; then
91804e7590efSmrg	  func_verbose "using command file archive linking..."
91814e7590efSmrg	  for obj in $oldobjs
91824e7590efSmrg	  do
91834e7590efSmrg	    func_to_tool_file "$obj"
91844e7590efSmrg	    $ECHO "$func_to_tool_file_result"
91854e7590efSmrg	  done > $output_objdir/$libname.libcmd
91864e7590efSmrg	  func_to_tool_file "$output_objdir/$libname.libcmd"
91874e7590efSmrg	  oldobjs=" $archiver_list_spec$func_to_tool_file_result"
91884e7590efSmrg	  cmds=$old_archive_cmds
918949dc963fSmrg	else
919049dc963fSmrg	  # the command line is too long to link in one step, link in parts
919149dc963fSmrg	  func_verbose "using piecewise archive linking..."
919249dc963fSmrg	  save_RANLIB=$RANLIB
919349dc963fSmrg	  RANLIB=:
919449dc963fSmrg	  objlist=
919549dc963fSmrg	  concat_cmds=
919649dc963fSmrg	  save_oldobjs=$oldobjs
919749dc963fSmrg	  oldobjs=
919849dc963fSmrg	  # Is there a better way of finding the last object in the list?
919949dc963fSmrg	  for obj in $save_oldobjs
920049dc963fSmrg	  do
920149dc963fSmrg	    last_oldobj=$obj
920249dc963fSmrg	  done
920349dc963fSmrg	  eval test_cmds=\"$old_archive_cmds\"
920449dc963fSmrg	  func_len " $test_cmds"
920549dc963fSmrg	  len0=$func_len_result
920649dc963fSmrg	  len=$len0
920749dc963fSmrg	  for obj in $save_oldobjs
920849dc963fSmrg	  do
920949dc963fSmrg	    func_len " $obj"
921049dc963fSmrg	    func_arith $len + $func_len_result
921149dc963fSmrg	    len=$func_arith_result
921249dc963fSmrg	    func_append objlist " $obj"
921349dc963fSmrg	    if test "$len" -lt "$max_cmd_len"; then
921449dc963fSmrg	      :
921549dc963fSmrg	    else
921649dc963fSmrg	      # the above command should be used before it gets too long
921749dc963fSmrg	      oldobjs=$objlist
921849dc963fSmrg	      if test "$obj" = "$last_oldobj" ; then
921949dc963fSmrg		RANLIB=$save_RANLIB
922049dc963fSmrg	      fi
922149dc963fSmrg	      test -z "$concat_cmds" || concat_cmds=$concat_cmds~
922249dc963fSmrg	      eval concat_cmds=\"\${concat_cmds}$old_archive_cmds\"
922349dc963fSmrg	      objlist=
922449dc963fSmrg	      len=$len0
922549dc963fSmrg	    fi
922649dc963fSmrg	  done
922749dc963fSmrg	  RANLIB=$save_RANLIB
922849dc963fSmrg	  oldobjs=$objlist
922949dc963fSmrg	  if test "X$oldobjs" = "X" ; then
923049dc963fSmrg	    eval cmds=\"\$concat_cmds\"
923149dc963fSmrg	  else
923249dc963fSmrg	    eval cmds=\"\$concat_cmds~\$old_archive_cmds\"
923349dc963fSmrg	  fi
923449dc963fSmrg	fi
923549dc963fSmrg      fi
923649dc963fSmrg      func_execute_cmds "$cmds" 'exit $?'
92374b0ead49Smrg    done
92384b0ead49Smrg
923949dc963fSmrg    test -n "$generated" && \
924049dc963fSmrg      func_show_eval "${RM}r$generated"
92414b0ead49Smrg
924249dc963fSmrg    # Now create the libtool archive.
924349dc963fSmrg    case $output in
924449dc963fSmrg    *.la)
924549dc963fSmrg      old_library=
924649dc963fSmrg      test "$build_old_libs" = yes && old_library="$libname.$libext"
924749dc963fSmrg      func_verbose "creating $output"
92484b0ead49Smrg
924949dc963fSmrg      # Preserve any variables that may affect compiler behavior
925049dc963fSmrg      for var in $variables_saved_for_relink; do
925149dc963fSmrg	if eval test -z \"\${$var+set}\"; then
925249dc963fSmrg	  relink_command="{ test -z \"\${$var+set}\" || $lt_unset $var || { $var=; export $var; }; }; $relink_command"
925349dc963fSmrg	elif eval var_value=\$$var; test -z "$var_value"; then
925449dc963fSmrg	  relink_command="$var=; export $var; $relink_command"
92554b0ead49Smrg	else
925649dc963fSmrg	  func_quote_for_eval "$var_value"
925749dc963fSmrg	  relink_command="$var=$func_quote_for_eval_result; export $var; $relink_command"
92584b0ead49Smrg	fi
925949dc963fSmrg      done
926049dc963fSmrg      # Quote the link command for shipping.
926149dc963fSmrg      relink_command="(cd `pwd`; $SHELL $progpath $preserve_args --mode=relink $libtool_args @inst_prefix_dir@)"
92627aa89044Smrg      relink_command=`$ECHO "$relink_command" | $SED "$sed_quote_subst"`
926349dc963fSmrg      if test "$hardcode_automatic" = yes ; then
926449dc963fSmrg	relink_command=
926549dc963fSmrg      fi
92664b0ead49Smrg
926749dc963fSmrg      # Only create the output if not a dry run.
926849dc963fSmrg      $opt_dry_run || {
926949dc963fSmrg	for installed in no yes; do
927049dc963fSmrg	  if test "$installed" = yes; then
927149dc963fSmrg	    if test -z "$install_libdir"; then
927249dc963fSmrg	      break
927349dc963fSmrg	    fi
927449dc963fSmrg	    output="$output_objdir/$outputname"i
927549dc963fSmrg	    # Replace all uninstalled libtool libraries with the installed ones
927649dc963fSmrg	    newdependency_libs=
927749dc963fSmrg	    for deplib in $dependency_libs; do
927849dc963fSmrg	      case $deplib in
927949dc963fSmrg	      *.la)
928049dc963fSmrg		func_basename "$deplib"
928149dc963fSmrg		name="$func_basename_result"
92824e7590efSmrg		func_resolve_sysroot "$deplib"
92834e7590efSmrg		eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $func_resolve_sysroot_result`
928449dc963fSmrg		test -z "$libdir" && \
928549dc963fSmrg		  func_fatal_error "\`$deplib' is not a valid libtool archive"
92864e7590efSmrg		func_append newdependency_libs " ${lt_sysroot:+=}$libdir/$name"
92874e7590efSmrg		;;
92884e7590efSmrg	      -L*)
92894e7590efSmrg		func_stripname -L '' "$deplib"
92904e7590efSmrg		func_replace_sysroot "$func_stripname_result"
92914e7590efSmrg		func_append newdependency_libs " -L$func_replace_sysroot_result"
92924e7590efSmrg		;;
92934e7590efSmrg	      -R*)
92944e7590efSmrg		func_stripname -R '' "$deplib"
92954e7590efSmrg		func_replace_sysroot "$func_stripname_result"
92964e7590efSmrg		func_append newdependency_libs " -R$func_replace_sysroot_result"
929749dc963fSmrg		;;
92984e7590efSmrg	      *) func_append newdependency_libs " $deplib" ;;
929949dc963fSmrg	      esac
930049dc963fSmrg	    done
930149dc963fSmrg	    dependency_libs="$newdependency_libs"
930249dc963fSmrg	    newdlfiles=
930349dc963fSmrg
930449dc963fSmrg	    for lib in $dlfiles; do
930549dc963fSmrg	      case $lib in
930649dc963fSmrg	      *.la)
930749dc963fSmrg	        func_basename "$lib"
930849dc963fSmrg		name="$func_basename_result"
930949dc963fSmrg		eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $lib`
931049dc963fSmrg		test -z "$libdir" && \
931149dc963fSmrg		  func_fatal_error "\`$lib' is not a valid libtool archive"
93124e7590efSmrg		func_append newdlfiles " ${lt_sysroot:+=}$libdir/$name"
931349dc963fSmrg		;;
93144e7590efSmrg	      *) func_append newdlfiles " $lib" ;;
931549dc963fSmrg	      esac
931649dc963fSmrg	    done
931749dc963fSmrg	    dlfiles="$newdlfiles"
931849dc963fSmrg	    newdlprefiles=
931949dc963fSmrg	    for lib in $dlprefiles; do
932049dc963fSmrg	      case $lib in
932149dc963fSmrg	      *.la)
932249dc963fSmrg		# Only pass preopened files to the pseudo-archive (for
932349dc963fSmrg		# eventual linking with the app. that links it) if we
932449dc963fSmrg		# didn't already link the preopened objects directly into
932549dc963fSmrg		# the library:
932649dc963fSmrg		func_basename "$lib"
932749dc963fSmrg		name="$func_basename_result"
932849dc963fSmrg		eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $lib`
932949dc963fSmrg		test -z "$libdir" && \
933049dc963fSmrg		  func_fatal_error "\`$lib' is not a valid libtool archive"
93314e7590efSmrg		func_append newdlprefiles " ${lt_sysroot:+=}$libdir/$name"
933249dc963fSmrg		;;
933349dc963fSmrg	      esac
933449dc963fSmrg	    done
933549dc963fSmrg	    dlprefiles="$newdlprefiles"
933649dc963fSmrg	  else
933749dc963fSmrg	    newdlfiles=
933849dc963fSmrg	    for lib in $dlfiles; do
933949dc963fSmrg	      case $lib in
934049dc963fSmrg		[\\/]* | [A-Za-z]:[\\/]*) abs="$lib" ;;
934149dc963fSmrg		*) abs=`pwd`"/$lib" ;;
934249dc963fSmrg	      esac
93434e7590efSmrg	      func_append newdlfiles " $abs"
934449dc963fSmrg	    done
934549dc963fSmrg	    dlfiles="$newdlfiles"
934649dc963fSmrg	    newdlprefiles=
934749dc963fSmrg	    for lib in $dlprefiles; do
934849dc963fSmrg	      case $lib in
934949dc963fSmrg		[\\/]* | [A-Za-z]:[\\/]*) abs="$lib" ;;
935049dc963fSmrg		*) abs=`pwd`"/$lib" ;;
935149dc963fSmrg	      esac
93524e7590efSmrg	      func_append newdlprefiles " $abs"
935349dc963fSmrg	    done
935449dc963fSmrg	    dlprefiles="$newdlprefiles"
935549dc963fSmrg	  fi
935649dc963fSmrg	  $RM $output
935749dc963fSmrg	  # place dlname in correct position for cygwin
93587aa89044Smrg	  # In fact, it would be nice if we could use this code for all target
93597aa89044Smrg	  # systems that can't hard-code library paths into their executables
93607aa89044Smrg	  # and that have no shared library path variable independent of PATH,
93617aa89044Smrg	  # but it turns out we can't easily determine that from inspecting
93627aa89044Smrg	  # libtool variables, so we have to hard-code the OSs to which it
93637aa89044Smrg	  # applies here; at the moment, that means platforms that use the PE
93647aa89044Smrg	  # object format with DLL files.  See the long comment at the top of
93657aa89044Smrg	  # tests/bindir.at for full details.
936649dc963fSmrg	  tdlname=$dlname
936749dc963fSmrg	  case $host,$output,$installed,$module,$dlname in
93687aa89044Smrg	    *cygwin*,*lai,yes,no,*.dll | *mingw*,*lai,yes,no,*.dll | *cegcc*,*lai,yes,no,*.dll)
93697aa89044Smrg	      # If a -bindir argument was supplied, place the dll there.
93707aa89044Smrg	      if test "x$bindir" != x ;
93717aa89044Smrg	      then
93727aa89044Smrg		func_relative_path "$install_libdir" "$bindir"
93737aa89044Smrg		tdlname=$func_relative_path_result$dlname
93747aa89044Smrg	      else
93757aa89044Smrg		# Otherwise fall back on heuristic.
93767aa89044Smrg		tdlname=../bin/$dlname
93777aa89044Smrg	      fi
93787aa89044Smrg	      ;;
937949dc963fSmrg	  esac
938049dc963fSmrg	  $ECHO > $output "\
938149dc963fSmrg# $outputname - a libtool library file
938249dc963fSmrg# Generated by $PROGRAM (GNU $PACKAGE$TIMESTAMP) $VERSION
938349dc963fSmrg#
938449dc963fSmrg# Please DO NOT delete this file!
938549dc963fSmrg# It is necessary for linking the library.
93864b0ead49Smrg
938749dc963fSmrg# The name that we can dlopen(3).
938849dc963fSmrgdlname='$tdlname'
93894b0ead49Smrg
939049dc963fSmrg# Names of this library.
939149dc963fSmrglibrary_names='$library_names'
93924b0ead49Smrg
939349dc963fSmrg# The name of the static archive.
939449dc963fSmrgold_library='$old_library'
93954b0ead49Smrg
939649dc963fSmrg# Linker flags that can not go in dependency_libs.
939749dc963fSmrginherited_linker_flags='$new_inherited_linker_flags'
93984b0ead49Smrg
939949dc963fSmrg# Libraries that this one depends upon.
940049dc963fSmrgdependency_libs='$dependency_libs'
94014b0ead49Smrg
940249dc963fSmrg# Names of additional weak libraries provided by this library
940349dc963fSmrgweak_library_names='$weak_libs'
94044b0ead49Smrg
940549dc963fSmrg# Version information for $libname.
940649dc963fSmrgcurrent=$current
940749dc963fSmrgage=$age
940849dc963fSmrgrevision=$revision
94094b0ead49Smrg
941049dc963fSmrg# Is this an already installed library?
941149dc963fSmrginstalled=$installed
94124b0ead49Smrg
941349dc963fSmrg# Should we warn about portability when linking against -modules?
941449dc963fSmrgshouldnotlink=$module
94154b0ead49Smrg
941649dc963fSmrg# Files to dlopen/dlpreopen
941749dc963fSmrgdlopen='$dlfiles'
941849dc963fSmrgdlpreopen='$dlprefiles'
94194b0ead49Smrg
942049dc963fSmrg# Directory that this library needs to be installed in:
942149dc963fSmrglibdir='$install_libdir'"
942249dc963fSmrg	  if test "$installed" = no && test "$need_relink" = yes; then
942349dc963fSmrg	    $ECHO >> $output "\
942449dc963fSmrgrelink_command=\"$relink_command\""
942549dc963fSmrg	  fi
942649dc963fSmrg	done
942749dc963fSmrg      }
94284b0ead49Smrg
942949dc963fSmrg      # Do a symbolic link so that the libtool archive can be found in
943049dc963fSmrg      # LD_LIBRARY_PATH before the program is installed.
943149dc963fSmrg      func_show_eval '( cd "$output_objdir" && $RM "$outputname" && $LN_S "../$outputname" "$outputname" )' 'exit $?'
943249dc963fSmrg      ;;
943349dc963fSmrg    esac
943449dc963fSmrg    exit $EXIT_SUCCESS
943549dc963fSmrg}
94364b0ead49Smrg
94374e7590efSmrg{ test "$opt_mode" = link || test "$opt_mode" = relink; } &&
943849dc963fSmrg    func_mode_link ${1+"$@"}
94394b0ead49Smrg
94404b0ead49Smrg
944149dc963fSmrg# func_mode_uninstall arg...
944249dc963fSmrgfunc_mode_uninstall ()
944349dc963fSmrg{
944449dc963fSmrg    $opt_debug
944549dc963fSmrg    RM="$nonopt"
94464b0ead49Smrg    files=
94474b0ead49Smrg    rmforce=
94484b0ead49Smrg    exit_status=0
94494b0ead49Smrg
94504b0ead49Smrg    # This variable tells wrapper scripts just to set variables rather
94514b0ead49Smrg    # than running their programs.
94524b0ead49Smrg    libtool_install_magic="$magic"
94534b0ead49Smrg
94544b0ead49Smrg    for arg
94554b0ead49Smrg    do
94564b0ead49Smrg      case $arg in
94574e7590efSmrg      -f) func_append RM " $arg"; rmforce=yes ;;
94584e7590efSmrg      -*) func_append RM " $arg" ;;
94594e7590efSmrg      *) func_append files " $arg" ;;
94604b0ead49Smrg      esac
94614b0ead49Smrg    done
94624b0ead49Smrg
946349dc963fSmrg    test -z "$RM" && \
946449dc963fSmrg      func_fatal_help "you must specify an RM program"
94654b0ead49Smrg
94664b0ead49Smrg    rmdirs=
94674b0ead49Smrg
94684b0ead49Smrg    for file in $files; do
946949dc963fSmrg      func_dirname "$file" "" "."
947049dc963fSmrg      dir="$func_dirname_result"
947149dc963fSmrg      if test "X$dir" = X.; then
94724e7590efSmrg	odir="$objdir"
94734b0ead49Smrg      else
94744e7590efSmrg	odir="$dir/$objdir"
94754b0ead49Smrg      fi
947649dc963fSmrg      func_basename "$file"
947749dc963fSmrg      name="$func_basename_result"
94784e7590efSmrg      test "$opt_mode" = uninstall && odir="$dir"
94794b0ead49Smrg
94804e7590efSmrg      # Remember odir for removal later, being careful to avoid duplicates
94814e7590efSmrg      if test "$opt_mode" = clean; then
94824b0ead49Smrg	case " $rmdirs " in
94834e7590efSmrg	  *" $odir "*) ;;
94844e7590efSmrg	  *) func_append rmdirs " $odir" ;;
94854b0ead49Smrg	esac
94864b0ead49Smrg      fi
94874b0ead49Smrg
94884b0ead49Smrg      # Don't error if the file doesn't exist and rm -f was used.
948949dc963fSmrg      if { test -L "$file"; } >/dev/null 2>&1 ||
949049dc963fSmrg	 { test -h "$file"; } >/dev/null 2>&1 ||
949149dc963fSmrg	 test -f "$file"; then
94924b0ead49Smrg	:
94934b0ead49Smrg      elif test -d "$file"; then
94944b0ead49Smrg	exit_status=1
94954b0ead49Smrg	continue
94964b0ead49Smrg      elif test "$rmforce" = yes; then
94974b0ead49Smrg	continue
94984b0ead49Smrg      fi
94994b0ead49Smrg
95004b0ead49Smrg      rmfiles="$file"
95014b0ead49Smrg
95024b0ead49Smrg      case $name in
95034b0ead49Smrg      *.la)
95044b0ead49Smrg	# Possibly a libtool archive, so verify it.
950549dc963fSmrg	if func_lalib_p "$file"; then
950649dc963fSmrg	  func_source $dir/$name
95074b0ead49Smrg
95084b0ead49Smrg	  # Delete the libtool libraries and symlinks.
95094b0ead49Smrg	  for n in $library_names; do
95104e7590efSmrg	    func_append rmfiles " $odir/$n"
95114b0ead49Smrg	  done
95124e7590efSmrg	  test -n "$old_library" && func_append rmfiles " $odir/$old_library"
95134b0ead49Smrg
95144e7590efSmrg	  case "$opt_mode" in
95154b0ead49Smrg	  clean)
95164e7590efSmrg	    case " $library_names " in
95174b0ead49Smrg	    *" $dlname "*) ;;
95184e7590efSmrg	    *) test -n "$dlname" && func_append rmfiles " $odir/$dlname" ;;
95194b0ead49Smrg	    esac
95204e7590efSmrg	    test -n "$libdir" && func_append rmfiles " $odir/$name $odir/${name}i"
95214b0ead49Smrg	    ;;
95224b0ead49Smrg	  uninstall)
95234b0ead49Smrg	    if test -n "$library_names"; then
95244b0ead49Smrg	      # Do each command in the postuninstall commands.
952549dc963fSmrg	      func_execute_cmds "$postuninstall_cmds" 'test "$rmforce" = yes || exit_status=1'
95264b0ead49Smrg	    fi
95274b0ead49Smrg
95284b0ead49Smrg	    if test -n "$old_library"; then
95294b0ead49Smrg	      # Do each command in the old_postuninstall commands.
953049dc963fSmrg	      func_execute_cmds "$old_postuninstall_cmds" 'test "$rmforce" = yes || exit_status=1'
95314b0ead49Smrg	    fi
95324b0ead49Smrg	    # FIXME: should reinstall the best remaining shared library.
95334b0ead49Smrg	    ;;
95344b0ead49Smrg	  esac
95354b0ead49Smrg	fi
95364b0ead49Smrg	;;
95374b0ead49Smrg
95384b0ead49Smrg      *.lo)
95394b0ead49Smrg	# Possibly a libtool object, so verify it.
954049dc963fSmrg	if func_lalib_p "$file"; then
95414b0ead49Smrg
95424b0ead49Smrg	  # Read the .lo file
954349dc963fSmrg	  func_source $dir/$name
95444b0ead49Smrg
95454b0ead49Smrg	  # Add PIC object to the list of files to remove.
954649dc963fSmrg	  if test -n "$pic_object" &&
954749dc963fSmrg	     test "$pic_object" != none; then
95484e7590efSmrg	    func_append rmfiles " $dir/$pic_object"
95494b0ead49Smrg	  fi
95504b0ead49Smrg
95514b0ead49Smrg	  # Add non-PIC object to the list of files to remove.
955249dc963fSmrg	  if test -n "$non_pic_object" &&
955349dc963fSmrg	     test "$non_pic_object" != none; then
95544e7590efSmrg	    func_append rmfiles " $dir/$non_pic_object"
95554b0ead49Smrg	  fi
95564b0ead49Smrg	fi
95574b0ead49Smrg	;;
95584b0ead49Smrg
95594b0ead49Smrg      *)
95604e7590efSmrg	if test "$opt_mode" = clean ; then
95614b0ead49Smrg	  noexename=$name
95624b0ead49Smrg	  case $file in
95634b0ead49Smrg	  *.exe)
956449dc963fSmrg	    func_stripname '' '.exe' "$file"
956549dc963fSmrg	    file=$func_stripname_result
956649dc963fSmrg	    func_stripname '' '.exe' "$name"
956749dc963fSmrg	    noexename=$func_stripname_result
95684b0ead49Smrg	    # $file with .exe has already been added to rmfiles,
95694b0ead49Smrg	    # add $file without .exe
95704e7590efSmrg	    func_append rmfiles " $file"
95714b0ead49Smrg	    ;;
95724b0ead49Smrg	  esac
95734b0ead49Smrg	  # Do a test to see if this is a libtool program.
957449dc963fSmrg	  if func_ltwrapper_p "$file"; then
957549dc963fSmrg	    if func_ltwrapper_executable_p "$file"; then
957649dc963fSmrg	      func_ltwrapper_scriptname "$file"
957749dc963fSmrg	      relink_command=
957849dc963fSmrg	      func_source $func_ltwrapper_scriptname_result
95794e7590efSmrg	      func_append rmfiles " $func_ltwrapper_scriptname_result"
958049dc963fSmrg	    else
958149dc963fSmrg	      relink_command=
958249dc963fSmrg	      func_source $dir/$noexename
958349dc963fSmrg	    fi
95844b0ead49Smrg
95854b0ead49Smrg	    # note $name still contains .exe if it was in $file originally
95864b0ead49Smrg	    # as does the version of $file that was added into $rmfiles
95874e7590efSmrg	    func_append rmfiles " $odir/$name $odir/${name}S.${objext}"
95884b0ead49Smrg	    if test "$fast_install" = yes && test -n "$relink_command"; then
95894e7590efSmrg	      func_append rmfiles " $odir/lt-$name"
95904b0ead49Smrg	    fi
95914b0ead49Smrg	    if test "X$noexename" != "X$name" ; then
95924e7590efSmrg	      func_append rmfiles " $odir/lt-${noexename}.c"
95934b0ead49Smrg	    fi
95944b0ead49Smrg	  fi
95954b0ead49Smrg	fi
95964b0ead49Smrg	;;
95974b0ead49Smrg      esac
959849dc963fSmrg      func_show_eval "$RM $rmfiles" 'exit_status=1'
95994b0ead49Smrg    done
96004b0ead49Smrg
96014b0ead49Smrg    # Try to remove the ${objdir}s in the directories where we deleted files
96024b0ead49Smrg    for dir in $rmdirs; do
96034b0ead49Smrg      if test -d "$dir"; then
960449dc963fSmrg	func_show_eval "rmdir $dir >/dev/null 2>&1"
96054b0ead49Smrg      fi
96064b0ead49Smrg    done
96074b0ead49Smrg
96084b0ead49Smrg    exit $exit_status
960949dc963fSmrg}
96104b0ead49Smrg
96114e7590efSmrg{ test "$opt_mode" = uninstall || test "$opt_mode" = clean; } &&
961249dc963fSmrg    func_mode_uninstall ${1+"$@"}
96134b0ead49Smrg
96144e7590efSmrgtest -z "$opt_mode" && {
961549dc963fSmrg  help="$generic_help"
961649dc963fSmrg  func_fatal_help "you must specify a MODE"
961749dc963fSmrg}
961849dc963fSmrg
961949dc963fSmrgtest -z "$exec_cmd" && \
96204e7590efSmrg  func_fatal_help "invalid operation mode \`$opt_mode'"
96214b0ead49Smrg
96224b0ead49Smrgif test -n "$exec_cmd"; then
962349dc963fSmrg  eval exec "$exec_cmd"
96244b0ead49Smrg  exit $EXIT_FAILURE
96254b0ead49Smrgfi
96264b0ead49Smrg
962749dc963fSmrgexit $exit_status
96284b0ead49Smrg
96294b0ead49Smrg
96304b0ead49Smrg# The TAGs below are defined such that we never get into a situation
96314b0ead49Smrg# in which we disable both kinds of libraries.  Given conflicting
96324b0ead49Smrg# choices, we go for a static library, that is the most portable,
96334b0ead49Smrg# since we can't tell whether shared libraries were disabled because
96344b0ead49Smrg# the user asked for that or because the platform doesn't support
96354b0ead49Smrg# them.  This is particularly important on AIX, because we don't
96364b0ead49Smrg# support having both static and shared libraries enabled at the same
96374b0ead49Smrg# time on that platform, so we default to a shared-only configuration.
96384b0ead49Smrg# If a disable-shared tag is given, we'll fallback to a static-only
96394b0ead49Smrg# configuration.  But we'll never go from static-only to shared-only.
96404b0ead49Smrg
96414b0ead49Smrg# ### BEGIN LIBTOOL TAG CONFIG: disable-shared
964249dc963fSmrgbuild_libtool_libs=no
964349dc963fSmrgbuild_old_libs=yes
96444b0ead49Smrg# ### END LIBTOOL TAG CONFIG: disable-shared
96454b0ead49Smrg
96464b0ead49Smrg# ### BEGIN LIBTOOL TAG CONFIG: disable-static
964749dc963fSmrgbuild_old_libs=`case $build_libtool_libs in yes) echo no;; *) echo yes;; esac`
96484b0ead49Smrg# ### END LIBTOOL TAG CONFIG: disable-static
96494b0ead49Smrg
96504b0ead49Smrg# Local Variables:
96514b0ead49Smrg# mode:shell-script
96524b0ead49Smrg# sh-indentation:2
96534b0ead49Smrg# End:
965449dc963fSmrg# vi:sw=2
965549dc963fSmrg
9656