ltmain.sh revision 95b7a5c8
195b7a5c8Smrg#! /usr/bin/env sh
27cea3689Smrg## DO NOT EDIT - This file generated from ./build-aux/ltmain.in
395b7a5c8Smrg##               by inline-source v2019-02-19.15
4e19dfac4Smrg
595b7a5c8Smrg# libtool (GNU libtool) 2.4.7
67cea3689Smrg# Provide generalized library-building support services.
7e19dfac4Smrg# Written by Gordon Matzigkeit <gord@gnu.ai.mit.edu>, 1996
8e19dfac4Smrg
995b7a5c8Smrg# Copyright (C) 1996-2019, 2021-2022 Free Software Foundation, Inc.
10e19dfac4Smrg# This is free software; see the source for copying conditions.  There is NO
11e19dfac4Smrg# warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
12e19dfac4Smrg
13e19dfac4Smrg# GNU Libtool is free software; you can redistribute it and/or modify
1427702724Smrg# it under the terms of the GNU General Public License as published by
1527702724Smrg# the Free Software Foundation; either version 2 of the License, or
1627702724Smrg# (at your option) any later version.
1727702724Smrg#
18e19dfac4Smrg# As a special exception to the GNU General Public License,
19e19dfac4Smrg# if you distribute this file as part of a program or library that
20e19dfac4Smrg# is built using GNU Libtool, you may include this file under the
21e19dfac4Smrg# same distribution terms that you use for the rest of that program.
22e19dfac4Smrg#
23e19dfac4Smrg# GNU Libtool is distributed in the hope that it will be useful, but
2427702724Smrg# WITHOUT ANY WARRANTY; without even the implied warranty of
2527702724Smrg# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
2627702724Smrg# General Public License for more details.
2727702724Smrg#
2827702724Smrg# You should have received a copy of the GNU General Public License
297cea3689Smrg# along with this program.  If not, see <http://www.gnu.org/licenses/>.
30e19dfac4Smrg
31e19dfac4Smrg
32313a12fdSmrgPROGRAM=libtool
33e19dfac4SmrgPACKAGE=libtool
3495b7a5c8SmrgVERSION=2.4.7
3595b7a5c8Smrgpackage_revision=2.4.7
36e19dfac4Smrg
377cea3689Smrg
387cea3689Smrg## ------ ##
397cea3689Smrg## Usage. ##
407cea3689Smrg## ------ ##
417cea3689Smrg
427cea3689Smrg# Run './libtool --help' for help with using this script from the
437cea3689Smrg# command line.
447cea3689Smrg
457cea3689Smrg
467cea3689Smrg## ------------------------------- ##
477cea3689Smrg## User overridable command paths. ##
487cea3689Smrg## ------------------------------- ##
497cea3689Smrg
507cea3689Smrg# After configure completes, it has a better idea of some of the
517cea3689Smrg# shell tools we need than the defaults used by the functions shared
527cea3689Smrg# with bootstrap, so set those here where they can still be over-
537cea3689Smrg# ridden by the user, but otherwise take precedence.
547cea3689Smrg
557cea3689Smrg: ${AUTOCONF="autoconf"}
567cea3689Smrg: ${AUTOMAKE="automake"}
577cea3689Smrg
587cea3689Smrg
597cea3689Smrg## -------------------------- ##
607cea3689Smrg## Source external libraries. ##
617cea3689Smrg## -------------------------- ##
627cea3689Smrg
637cea3689Smrg# Much of our low-level functionality needs to be sourced from external
647cea3689Smrg# libraries, which are installed to $pkgauxdir.
657cea3689Smrg
667cea3689Smrg# Set a version string for this script.
6795b7a5c8Smrgscriptversion=2019-02-19.15; # UTC
687cea3689Smrg
697cea3689Smrg# General shell script boiler plate, and helper functions.
707cea3689Smrg# Written by Gary V. Vaughan, 2004
717cea3689Smrg
7295b7a5c8Smrg# This is free software.  There is NO warranty; not even for
7395b7a5c8Smrg# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
7495b7a5c8Smrg#
7595b7a5c8Smrg# Copyright (C) 2004-2019, 2021 Bootstrap Authors
7695b7a5c8Smrg#
7795b7a5c8Smrg# This file is dual licensed under the terms of the MIT license
7895b7a5c8Smrg# <https://opensource.org/license/MIT>, and GPL version 2 or later
7995b7a5c8Smrg# <http://www.gnu.org/licenses/gpl-2.0.html>.  You must apply one of
8095b7a5c8Smrg# these licenses when using or redistributing this software or any of
8195b7a5c8Smrg# the files within it.  See the URLs above, or the file `LICENSE`
8295b7a5c8Smrg# included in the Bootstrap distribution for the full license texts.
837cea3689Smrg
8495b7a5c8Smrg# Please report bugs or propose patches to:
8595b7a5c8Smrg# <https://github.com/gnulib-modules/bootstrap/issues>
867cea3689Smrg
877cea3689Smrg
887cea3689Smrg## ------ ##
897cea3689Smrg## Usage. ##
907cea3689Smrg## ------ ##
917cea3689Smrg
927cea3689Smrg# Evaluate this file near the top of your script to gain access to
937cea3689Smrg# the functions and variables defined here:
947cea3689Smrg#
957cea3689Smrg#   . `echo "$0" | ${SED-sed} 's|[^/]*$||'`/build-aux/funclib.sh
967cea3689Smrg#
977cea3689Smrg# If you need to override any of the default environment variable
987cea3689Smrg# settings, do that before evaluating this file.
997cea3689Smrg
1007cea3689Smrg
1017cea3689Smrg## -------------------- ##
1027cea3689Smrg## Shell normalisation. ##
1037cea3689Smrg## -------------------- ##
1047cea3689Smrg
1057cea3689Smrg# Some shells need a little help to be as Bourne compatible as possible.
1067cea3689Smrg# Before doing anything else, make sure all that help has been provided!
1077cea3689Smrg
1087cea3689SmrgDUALCASE=1; export DUALCASE # for MKS sh
1097cea3689Smrgif test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then :
110e19dfac4Smrg  emulate sh
111e19dfac4Smrg  NULLCMD=:
1127cea3689Smrg  # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which
113e19dfac4Smrg  # is contrary to our usage.  Disable this feature.
114e19dfac4Smrg  alias -g '${1+"$@"}'='"$@"'
115e19dfac4Smrg  setopt NO_GLOB_SUBST
116e19dfac4Smrgelse
1177cea3689Smrg  case `(set -o) 2>/dev/null` in *posix*) set -o posix ;; esac
118e19dfac4Smrgfi
119313a12fdSmrg
1207cea3689Smrg# NLS nuisances: We save the old values in case they are required later.
1217cea3689Smrg_G_user_locale=
1227cea3689Smrg_G_safe_locale=
1237cea3689Smrgfor _G_var in LANG LANGUAGE LC_ALL LC_CTYPE LC_COLLATE LC_MESSAGES
124e19dfac4Smrgdo
1257cea3689Smrg  eval "if test set = \"\${$_G_var+set}\"; then
1267cea3689Smrg          save_$_G_var=\$$_G_var
1277cea3689Smrg          $_G_var=C
1287cea3689Smrg	  export $_G_var
1297cea3689Smrg	  _G_user_locale=\"$_G_var=\\\$save_\$_G_var; \$_G_user_locale\"
1307cea3689Smrg	  _G_safe_locale=\"$_G_var=C; \$_G_safe_locale\"
131e19dfac4Smrg	fi"
132e19dfac4Smrgdone
13395b7a5c8Smrg# These NLS vars are set unconditionally (bootstrap issue #24).  Unset those
13495b7a5c8Smrg# in case the environment reset is needed later and the $save_* variant is not
13595b7a5c8Smrg# defined (see the code above).
13695b7a5c8SmrgLC_ALL=C
13795b7a5c8SmrgLANGUAGE=C
13895b7a5c8Smrgexport LANGUAGE LC_ALL
139e19dfac4Smrg
1407cea3689Smrg# Make sure IFS has a sensible default
1417cea3689Smrgsp=' '
1427cea3689Smrgnl='
1437cea3689Smrg'
1447cea3689SmrgIFS="$sp	$nl"
1457cea3689Smrg
1467cea3689Smrg# There are apparently some retarded systems that use ';' as a PATH separator!
1477cea3689Smrgif test "${PATH_SEPARATOR+set}" != set; then
1487cea3689Smrg  PATH_SEPARATOR=:
1497cea3689Smrg  (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && {
1507cea3689Smrg    (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 ||
1517cea3689Smrg      PATH_SEPARATOR=';'
1527cea3689Smrg  }
1537cea3689Smrgfi
154e19dfac4Smrg
155e19dfac4Smrg
15695b7a5c8Smrg# func_unset VAR
15795b7a5c8Smrg# --------------
15895b7a5c8Smrg# Portably unset VAR.
15995b7a5c8Smrg# In some shells, an 'unset VAR' statement leaves a non-zero return
16095b7a5c8Smrg# status if VAR is already unset, which might be problematic if the
16195b7a5c8Smrg# statement is used at the end of a function (thus poisoning its return
16295b7a5c8Smrg# value) or when 'set -e' is active (causing even a spurious abort of
16395b7a5c8Smrg# the script in this case).
16495b7a5c8Smrgfunc_unset ()
16595b7a5c8Smrg{
16695b7a5c8Smrg    { eval $1=; (eval unset $1) >/dev/null 2>&1 && eval unset $1 || : ; }
16795b7a5c8Smrg}
16895b7a5c8Smrg
16995b7a5c8Smrg
17095b7a5c8Smrg# Make sure CDPATH doesn't cause `cd` commands to output the target dir.
17195b7a5c8Smrgfunc_unset CDPATH
17295b7a5c8Smrg
17395b7a5c8Smrg# Make sure ${,E,F}GREP behave sanely.
17495b7a5c8Smrgfunc_unset GREP_OPTIONS
17595b7a5c8Smrg
176e19dfac4Smrg
1777cea3689Smrg## ------------------------- ##
1787cea3689Smrg## Locate command utilities. ##
1797cea3689Smrg## ------------------------- ##
1807cea3689Smrg
1817cea3689Smrg
1827cea3689Smrg# func_executable_p FILE
1837cea3689Smrg# ----------------------
1847cea3689Smrg# Check that FILE is an executable regular file.
1857cea3689Smrgfunc_executable_p ()
1867cea3689Smrg{
1877cea3689Smrg    test -f "$1" && test -x "$1"
1887cea3689Smrg}
1897cea3689Smrg
1907cea3689Smrg
1917cea3689Smrg# func_path_progs PROGS_LIST CHECK_FUNC [PATH]
1927cea3689Smrg# --------------------------------------------
1937cea3689Smrg# Search for either a program that responds to --version with output
1947cea3689Smrg# containing "GNU", or else returned by CHECK_FUNC otherwise, by
1957cea3689Smrg# trying all the directories in PATH with each of the elements of
1967cea3689Smrg# PROGS_LIST.
1977cea3689Smrg#
1987cea3689Smrg# CHECK_FUNC should accept the path to a candidate program, and
1997cea3689Smrg# set $func_check_prog_result if it truncates its output less than
2007cea3689Smrg# $_G_path_prog_max characters.
2017cea3689Smrgfunc_path_progs ()
2027cea3689Smrg{
2037cea3689Smrg    _G_progs_list=$1
2047cea3689Smrg    _G_check_func=$2
2057cea3689Smrg    _G_PATH=${3-"$PATH"}
2067cea3689Smrg
2077cea3689Smrg    _G_path_prog_max=0
2087cea3689Smrg    _G_path_prog_found=false
2097cea3689Smrg    _G_save_IFS=$IFS; IFS=${PATH_SEPARATOR-:}
2107cea3689Smrg    for _G_dir in $_G_PATH; do
2117cea3689Smrg      IFS=$_G_save_IFS
2127cea3689Smrg      test -z "$_G_dir" && _G_dir=.
2137cea3689Smrg      for _G_prog_name in $_G_progs_list; do
2147cea3689Smrg        for _exeext in '' .EXE; do
2157cea3689Smrg          _G_path_prog=$_G_dir/$_G_prog_name$_exeext
2167cea3689Smrg          func_executable_p "$_G_path_prog" || continue
2177cea3689Smrg          case `"$_G_path_prog" --version 2>&1` in
2187cea3689Smrg            *GNU*) func_path_progs_result=$_G_path_prog _G_path_prog_found=: ;;
2197cea3689Smrg            *)     $_G_check_func $_G_path_prog
2207cea3689Smrg		   func_path_progs_result=$func_check_prog_result
2217cea3689Smrg		   ;;
2227cea3689Smrg          esac
2237cea3689Smrg          $_G_path_prog_found && break 3
2247cea3689Smrg        done
2257cea3689Smrg      done
2267cea3689Smrg    done
2277cea3689Smrg    IFS=$_G_save_IFS
2287cea3689Smrg    test -z "$func_path_progs_result" && {
2297cea3689Smrg      echo "no acceptable sed could be found in \$PATH" >&2
2307cea3689Smrg      exit 1
2317cea3689Smrg    }
2327cea3689Smrg}
2337cea3689Smrg
2347cea3689Smrg
2357cea3689Smrg# We want to be able to use the functions in this file before configure
2367cea3689Smrg# has figured out where the best binaries are kept, which means we have
2377cea3689Smrg# to search for them ourselves - except when the results are already set
2387cea3689Smrg# where we skip the searches.
2397cea3689Smrg
2407cea3689Smrg# Unless the user overrides by setting SED, search the path for either GNU
2417cea3689Smrg# sed, or the sed that truncates its output the least.
2427cea3689Smrgtest -z "$SED" && {
2437cea3689Smrg  _G_sed_script=s/aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa/bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb/
2447cea3689Smrg  for _G_i in 1 2 3 4 5 6 7; do
2457cea3689Smrg    _G_sed_script=$_G_sed_script$nl$_G_sed_script
2467cea3689Smrg  done
2477cea3689Smrg  echo "$_G_sed_script" 2>/dev/null | sed 99q >conftest.sed
2487cea3689Smrg  _G_sed_script=
2497cea3689Smrg
2507cea3689Smrg  func_check_prog_sed ()
2517cea3689Smrg  {
2527cea3689Smrg    _G_path_prog=$1
2537cea3689Smrg
2547cea3689Smrg    _G_count=0
2557cea3689Smrg    printf 0123456789 >conftest.in
2567cea3689Smrg    while :
2577cea3689Smrg    do
2587cea3689Smrg      cat conftest.in conftest.in >conftest.tmp
2597cea3689Smrg      mv conftest.tmp conftest.in
2607cea3689Smrg      cp conftest.in conftest.nl
2617cea3689Smrg      echo '' >> conftest.nl
2627cea3689Smrg      "$_G_path_prog" -f conftest.sed <conftest.nl >conftest.out 2>/dev/null || break
2637cea3689Smrg      diff conftest.out conftest.nl >/dev/null 2>&1 || break
2647cea3689Smrg      _G_count=`expr $_G_count + 1`
2657cea3689Smrg      if test "$_G_count" -gt "$_G_path_prog_max"; then
2667cea3689Smrg        # Best one so far, save it but keep looking for a better one
2677cea3689Smrg        func_check_prog_result=$_G_path_prog
2687cea3689Smrg        _G_path_prog_max=$_G_count
2697cea3689Smrg      fi
2707cea3689Smrg      # 10*(2^10) chars as input seems more than enough
2717cea3689Smrg      test 10 -lt "$_G_count" && break
2727cea3689Smrg    done
2737cea3689Smrg    rm -f conftest.in conftest.tmp conftest.nl conftest.out
2747cea3689Smrg  }
2757cea3689Smrg
27695b7a5c8Smrg  func_path_progs "sed gsed" func_check_prog_sed "$PATH:/usr/xpg4/bin"
2777cea3689Smrg  rm -f conftest.sed
2787cea3689Smrg  SED=$func_path_progs_result
2797cea3689Smrg}
2807cea3689Smrg
2817cea3689Smrg
2827cea3689Smrg# Unless the user overrides by setting GREP, search the path for either GNU
2837cea3689Smrg# grep, or the grep that truncates its output the least.
2847cea3689Smrgtest -z "$GREP" && {
2857cea3689Smrg  func_check_prog_grep ()
2867cea3689Smrg  {
2877cea3689Smrg    _G_path_prog=$1
2887cea3689Smrg
2897cea3689Smrg    _G_count=0
2907cea3689Smrg    _G_path_prog_max=0
2917cea3689Smrg    printf 0123456789 >conftest.in
2927cea3689Smrg    while :
2937cea3689Smrg    do
2947cea3689Smrg      cat conftest.in conftest.in >conftest.tmp
2957cea3689Smrg      mv conftest.tmp conftest.in
2967cea3689Smrg      cp conftest.in conftest.nl
2977cea3689Smrg      echo 'GREP' >> conftest.nl
2987cea3689Smrg      "$_G_path_prog" -e 'GREP$' -e '-(cannot match)-' <conftest.nl >conftest.out 2>/dev/null || break
2997cea3689Smrg      diff conftest.out conftest.nl >/dev/null 2>&1 || break
3007cea3689Smrg      _G_count=`expr $_G_count + 1`
3017cea3689Smrg      if test "$_G_count" -gt "$_G_path_prog_max"; then
3027cea3689Smrg        # Best one so far, save it but keep looking for a better one
3037cea3689Smrg        func_check_prog_result=$_G_path_prog
3047cea3689Smrg        _G_path_prog_max=$_G_count
3057cea3689Smrg      fi
3067cea3689Smrg      # 10*(2^10) chars as input seems more than enough
3077cea3689Smrg      test 10 -lt "$_G_count" && break
3087cea3689Smrg    done
3097cea3689Smrg    rm -f conftest.in conftest.tmp conftest.nl conftest.out
3107cea3689Smrg  }
3117cea3689Smrg
31295b7a5c8Smrg  func_path_progs "grep ggrep" func_check_prog_grep "$PATH:/usr/xpg4/bin"
3137cea3689Smrg  GREP=$func_path_progs_result
3147cea3689Smrg}
3157cea3689Smrg
3167cea3689Smrg
3177cea3689Smrg## ------------------------------- ##
3187cea3689Smrg## User overridable command paths. ##
3197cea3689Smrg## ------------------------------- ##
3207cea3689Smrg
3217cea3689Smrg# All uppercase variable names are used for environment variables.  These
3227cea3689Smrg# variables can be overridden by the user before calling a script that
3237cea3689Smrg# uses them if a suitable command of that name is not already available
3247cea3689Smrg# in the command search PATH.
325e19dfac4Smrg
326e19dfac4Smrg: ${CP="cp -f"}
3277cea3689Smrg: ${ECHO="printf %s\n"}
3287cea3689Smrg: ${EGREP="$GREP -E"}
3297cea3689Smrg: ${FGREP="$GREP -F"}
3307cea3689Smrg: ${LN_S="ln -s"}
331e19dfac4Smrg: ${MAKE="make"}
332e19dfac4Smrg: ${MKDIR="mkdir"}
333e19dfac4Smrg: ${MV="mv -f"}
334e19dfac4Smrg: ${RM="rm -f"}
335e19dfac4Smrg: ${SHELL="${CONFIG_SHELL-/bin/sh}"}
336e19dfac4Smrg
337e19dfac4Smrg
3387cea3689Smrg## -------------------- ##
3397cea3689Smrg## Useful sed snippets. ##
3407cea3689Smrg## -------------------- ##
341313a12fdSmrg
3427cea3689Smrgsed_dirname='s|/[^/]*$||'
3437cea3689Smrgsed_basename='s|^.*/||'
344313a12fdSmrg
3457cea3689Smrg# Sed substitution that helps us do robust quoting.  It backslashifies
3467cea3689Smrg# metacharacters that are still active within double-quoted strings.
3477cea3689Smrgsed_quote_subst='s|\([`"$\\]\)|\\\1|g'
348313a12fdSmrg
3497cea3689Smrg# Same as above, but do not quote variable references.
3507cea3689Smrgsed_double_quote_subst='s/\(["`\\]\)/\\\1/g'
351313a12fdSmrg
3527cea3689Smrg# Sed substitution that turns a string into a regex matching for the
3537cea3689Smrg# string literally.
3547cea3689Smrgsed_make_literal_regex='s|[].[^$\\*\/]|\\&|g'
355313a12fdSmrg
3567cea3689Smrg# Sed substitution that converts a w32 file name or path
3577cea3689Smrg# that contains forward slashes, into one that contains
3587cea3689Smrg# (escaped) backslashes.  A very naive implementation.
3597cea3689Smrgsed_naive_backslashify='s|\\\\*|\\|g;s|/|\\|g;s|\\|\\\\|g'
3607cea3689Smrg
3617cea3689Smrg# Re-'\' parameter expansions in output of sed_double_quote_subst that
3627cea3689Smrg# were '\'-ed in input to the same.  If an odd number of '\' preceded a
3637cea3689Smrg# '$' in input to sed_double_quote_subst, that '$' was protected from
3647cea3689Smrg# expansion.  Since each input '\' is now two '\'s, look for any number
3657cea3689Smrg# of runs of four '\'s followed by two '\'s and then a '$'.  '\' that '$'.
3667cea3689Smrg_G_bs='\\'
3677cea3689Smrg_G_bs2='\\\\'
3687cea3689Smrg_G_bs4='\\\\\\\\'
3697cea3689Smrg_G_dollar='\$'
3707cea3689Smrgsed_double_backslash="\
3717cea3689Smrg  s/$_G_bs4/&\\
3727cea3689Smrg/g
3737cea3689Smrg  s/^$_G_bs2$_G_dollar/$_G_bs&/
3747cea3689Smrg  s/\\([^$_G_bs]\\)$_G_bs2$_G_dollar/\\1$_G_bs2$_G_bs$_G_dollar/g
3757cea3689Smrg  s/\n//g"
376313a12fdSmrg
37795b7a5c8Smrg# require_check_ifs_backslash
37895b7a5c8Smrg# ---------------------------
37995b7a5c8Smrg# Check if we can use backslash as IFS='\' separator, and set
38095b7a5c8Smrg# $check_ifs_backshlash_broken to ':' or 'false'.
38195b7a5c8Smrgrequire_check_ifs_backslash=func_require_check_ifs_backslash
38295b7a5c8Smrgfunc_require_check_ifs_backslash ()
38395b7a5c8Smrg{
38495b7a5c8Smrg  _G_save_IFS=$IFS
38595b7a5c8Smrg  IFS='\'
38695b7a5c8Smrg  _G_check_ifs_backshlash='a\\b'
38795b7a5c8Smrg  for _G_i in $_G_check_ifs_backshlash
38895b7a5c8Smrg  do
38995b7a5c8Smrg  case $_G_i in
39095b7a5c8Smrg  a)
39195b7a5c8Smrg    check_ifs_backshlash_broken=false
39295b7a5c8Smrg    ;;
39395b7a5c8Smrg  '')
39495b7a5c8Smrg    break
39595b7a5c8Smrg    ;;
39695b7a5c8Smrg  *)
39795b7a5c8Smrg    check_ifs_backshlash_broken=:
39895b7a5c8Smrg    break
39995b7a5c8Smrg    ;;
40095b7a5c8Smrg  esac
40195b7a5c8Smrg  done
40295b7a5c8Smrg  IFS=$_G_save_IFS
40395b7a5c8Smrg  require_check_ifs_backslash=:
40495b7a5c8Smrg}
40595b7a5c8Smrg
406313a12fdSmrg
4077cea3689Smrg## ----------------- ##
4087cea3689Smrg## Global variables. ##
4097cea3689Smrg## ----------------- ##
410313a12fdSmrg
4117cea3689Smrg# Except for the global variables explicitly listed below, the following
4127cea3689Smrg# functions in the '^func_' namespace, and the '^require_' namespace
4137cea3689Smrg# variables initialised in the 'Resource management' section, sourcing
4147cea3689Smrg# this file will not pollute your global namespace with anything
4157cea3689Smrg# else. There's no portable way to scope variables in Bourne shell
4167cea3689Smrg# though, so actually running these functions will sometimes place
4177cea3689Smrg# results into a variable named after the function, and often use
4187cea3689Smrg# temporary variables in the '^_G_' namespace. If you are careful to
4197cea3689Smrg# avoid using those namespaces casually in your sourcing script, things
4207cea3689Smrg# should continue to work as you expect. And, of course, you can freely
4217cea3689Smrg# overwrite any of the functions or variables defined here before
4227cea3689Smrg# calling anything to customize them.
423313a12fdSmrg
4247cea3689SmrgEXIT_SUCCESS=0
4257cea3689SmrgEXIT_FAILURE=1
4267cea3689SmrgEXIT_MISMATCH=63  # $? = 63 is used to indicate version mismatch to missing.
4277cea3689SmrgEXIT_SKIP=77	  # $? = 77 is used to indicate a skipped test to automake.
428e19dfac4Smrg
4297cea3689Smrg# Allow overriding, eg assuming that you follow the convention of
4307cea3689Smrg# putting '$debug_cmd' at the start of all your functions, you can get
4317cea3689Smrg# bash to show function call trace with:
4327cea3689Smrg#
4337cea3689Smrg#    debug_cmd='eval echo "${FUNCNAME[0]} $*" >&2' bash your-script-name
4347cea3689Smrgdebug_cmd=${debug_cmd-":"}
4357cea3689Smrgexit_cmd=:
43627702724Smrg
4377cea3689Smrg# By convention, finish your script with:
4387cea3689Smrg#
4397cea3689Smrg#    exit $exit_status
4407cea3689Smrg#
4417cea3689Smrg# so that you can set exit_status to non-zero if you want to indicate
4427cea3689Smrg# something went wrong during execution without actually bailing out at
4437cea3689Smrg# the point of failure.
4447cea3689Smrgexit_status=$EXIT_SUCCESS
445313a12fdSmrg
4467cea3689Smrg# Work around backward compatibility issue on IRIX 6.5. On IRIX 6.4+, sh
4477cea3689Smrg# is ksh but when the shell is invoked as "sh" and the current value of
4487cea3689Smrg# the _XPG environment variable is not equal to 1 (one), the special
4497cea3689Smrg# positional parameter $0, within a function call, is the name of the
4507cea3689Smrg# function.
4517cea3689Smrgprogpath=$0
45227702724Smrg
4537cea3689Smrg# The name of this program.
4547cea3689Smrgprogname=`$ECHO "$progpath" |$SED "$sed_basename"`
45527702724Smrg
4567cea3689Smrg# Make sure we have an absolute progpath for reexecution:
457e19dfac4Smrgcase $progpath in
458e19dfac4Smrg  [\\/]*|[A-Za-z]:\\*) ;;
459e19dfac4Smrg  *[\\/]*)
4607cea3689Smrg     progdir=`$ECHO "$progpath" |$SED "$sed_dirname"`
461e19dfac4Smrg     progdir=`cd "$progdir" && pwd`
4627cea3689Smrg     progpath=$progdir/$progname
463e19dfac4Smrg     ;;
464e19dfac4Smrg  *)
4657cea3689Smrg     _G_IFS=$IFS
466313a12fdSmrg     IFS=${PATH_SEPARATOR-:}
467e19dfac4Smrg     for progdir in $PATH; do
4687cea3689Smrg       IFS=$_G_IFS
469e19dfac4Smrg       test -x "$progdir/$progname" && break
470e19dfac4Smrg     done
4717cea3689Smrg     IFS=$_G_IFS
472e19dfac4Smrg     test -n "$progdir" || progdir=`pwd`
4737cea3689Smrg     progpath=$progdir/$progname
474e19dfac4Smrg     ;;
475e19dfac4Smrgesac
47627702724Smrg
477e19dfac4Smrg
4787cea3689Smrg## ----------------- ##
4797cea3689Smrg## Standard options. ##
4807cea3689Smrg## ----------------- ##
481313a12fdSmrg
4827cea3689Smrg# The following options affect the operation of the functions defined
4837cea3689Smrg# below, and should be set appropriately depending on run-time para-
4847cea3689Smrg# meters passed on the command line.
485e19dfac4Smrg
486e19dfac4Smrgopt_dry_run=false
487e19dfac4Smrgopt_quiet=false
488e19dfac4Smrgopt_verbose=false
489e19dfac4Smrg
4907cea3689Smrg# Categories 'all' and 'none' are always available.  Append any others
4917cea3689Smrg# you will pass as the first argument to func_warning from your own
4927cea3689Smrg# code.
4937cea3689Smrgwarning_categories=
49427702724Smrg
4957cea3689Smrg# By default, display warnings according to 'opt_warning_types'.  Set
4967cea3689Smrg# 'warning_func'  to ':' to elide all warnings, or func_fatal_error to
4977cea3689Smrg# treat the next displayed warning as a fatal error.
4987cea3689Smrgwarning_func=func_warn_and_continue
49927702724Smrg
5007cea3689Smrg# Set to 'all' to display all warnings, 'none' to suppress all
5017cea3689Smrg# warnings, or a space delimited list of some subset of
5027cea3689Smrg# 'warning_categories' to display only the listed warnings.
5037cea3689Smrgopt_warning_types=all
50427702724Smrg
505313a12fdSmrg
5067cea3689Smrg## -------------------- ##
5077cea3689Smrg## Resource management. ##
5087cea3689Smrg## -------------------- ##
50927702724Smrg
5107cea3689Smrg# This section contains definitions for functions that each ensure a
5117cea3689Smrg# particular resource (a file, or a non-empty configuration variable for
5127cea3689Smrg# example) is available, and if appropriate to extract default values
5137cea3689Smrg# from pertinent package files. Call them using their associated
5147cea3689Smrg# 'require_*' variable to ensure that they are executed, at most, once.
5157cea3689Smrg#
5167cea3689Smrg# It's entirely deliberate that calling these functions can set
5177cea3689Smrg# variables that don't obey the namespace limitations obeyed by the rest
5187cea3689Smrg# of this file, in order that that they be as useful as possible to
5197cea3689Smrg# callers.
52027702724Smrg
52127702724Smrg
5227cea3689Smrg# require_term_colors
5237cea3689Smrg# -------------------
5247cea3689Smrg# Allow display of bold text on terminals that support it.
5257cea3689Smrgrequire_term_colors=func_require_term_colors
5267cea3689Smrgfunc_require_term_colors ()
527e19dfac4Smrg{
5287cea3689Smrg    $debug_cmd
5297cea3689Smrg
5307cea3689Smrg    test -t 1 && {
5317cea3689Smrg      # COLORTERM and USE_ANSI_COLORS environment variables take
5327cea3689Smrg      # precedence, because most terminfo databases neglect to describe
5337cea3689Smrg      # whether color sequences are supported.
5347cea3689Smrg      test -n "${COLORTERM+set}" && : ${USE_ANSI_COLORS="1"}
5357cea3689Smrg
5367cea3689Smrg      if test 1 = "$USE_ANSI_COLORS"; then
5377cea3689Smrg        # Standard ANSI escape sequences
5387cea3689Smrg        tc_reset='[0m'
5397cea3689Smrg        tc_bold='[1m';   tc_standout='[7m'
5407cea3689Smrg        tc_red='[31m';   tc_green='[32m'
5417cea3689Smrg        tc_blue='[34m';  tc_cyan='[36m'
5427cea3689Smrg      else
5437cea3689Smrg        # Otherwise trust the terminfo database after all.
5447cea3689Smrg        test -n "`tput sgr0 2>/dev/null`" && {
5457cea3689Smrg          tc_reset=`tput sgr0`
5467cea3689Smrg          test -n "`tput bold 2>/dev/null`" && tc_bold=`tput bold`
5477cea3689Smrg          tc_standout=$tc_bold
5487cea3689Smrg          test -n "`tput smso 2>/dev/null`" && tc_standout=`tput smso`
5497cea3689Smrg          test -n "`tput setaf 1 2>/dev/null`" && tc_red=`tput setaf 1`
5507cea3689Smrg          test -n "`tput setaf 2 2>/dev/null`" && tc_green=`tput setaf 2`
5517cea3689Smrg          test -n "`tput setaf 4 2>/dev/null`" && tc_blue=`tput setaf 4`
5527cea3689Smrg          test -n "`tput setaf 5 2>/dev/null`" && tc_cyan=`tput setaf 5`
5537cea3689Smrg        }
5547cea3689Smrg      fi
5557cea3689Smrg    }
55627702724Smrg
5577cea3689Smrg    require_term_colors=:
558e19dfac4Smrg}
55927702724Smrg
56027702724Smrg
5617cea3689Smrg## ----------------- ##
5627cea3689Smrg## Function library. ##
5637cea3689Smrg## ----------------- ##
5647cea3689Smrg
5657cea3689Smrg# This section contains a variety of useful functions to call in your
5667cea3689Smrg# scripts. Take note of the portable wrappers for features provided by
5677cea3689Smrg# some modern shells, which will fall back to slower equivalents on
5687cea3689Smrg# less featureful shells.
5697cea3689Smrg
5707cea3689Smrg
5717cea3689Smrg# func_append VAR VALUE
5727cea3689Smrg# ---------------------
5737cea3689Smrg# Append VALUE onto the existing contents of VAR.
5747cea3689Smrg
5757cea3689Smrg  # We should try to minimise forks, especially on Windows where they are
5767cea3689Smrg  # unreasonably slow, so skip the feature probes when bash or zsh are
5777cea3689Smrg  # being used:
5787cea3689Smrg  if test set = "${BASH_VERSION+set}${ZSH_VERSION+set}"; then
5797cea3689Smrg    : ${_G_HAVE_ARITH_OP="yes"}
5807cea3689Smrg    : ${_G_HAVE_XSI_OPS="yes"}
5817cea3689Smrg    # The += operator was introduced in bash 3.1
5827cea3689Smrg    case $BASH_VERSION in
5837cea3689Smrg      [12].* | 3.0 | 3.0*) ;;
5847cea3689Smrg      *)
5857cea3689Smrg        : ${_G_HAVE_PLUSEQ_OP="yes"}
5867cea3689Smrg        ;;
5877cea3689Smrg    esac
5887cea3689Smrg  fi
5897cea3689Smrg
5907cea3689Smrg  # _G_HAVE_PLUSEQ_OP
5917cea3689Smrg  # Can be empty, in which case the shell is probed, "yes" if += is
5927cea3689Smrg  # useable or anything else if it does not work.
5937cea3689Smrg  test -z "$_G_HAVE_PLUSEQ_OP" \
5947cea3689Smrg    && (eval 'x=a; x+=" b"; test "a b" = "$x"') 2>/dev/null \
5957cea3689Smrg    && _G_HAVE_PLUSEQ_OP=yes
5967cea3689Smrg
5977cea3689Smrgif test yes = "$_G_HAVE_PLUSEQ_OP"
5987cea3689Smrgthen
5997cea3689Smrg  # This is an XSI compatible shell, allowing a faster implementation...
6007cea3689Smrg  eval 'func_append ()
6017cea3689Smrg  {
6027cea3689Smrg    $debug_cmd
6037cea3689Smrg
6047cea3689Smrg    eval "$1+=\$2"
6057cea3689Smrg  }'
6067cea3689Smrgelse
6077cea3689Smrg  # ...otherwise fall back to using expr, which is often a shell builtin.
6087cea3689Smrg  func_append ()
6097cea3689Smrg  {
6107cea3689Smrg    $debug_cmd
6117cea3689Smrg
6127cea3689Smrg    eval "$1=\$$1\$2"
6137cea3689Smrg  }
6147cea3689Smrgfi
6157cea3689Smrg
6167cea3689Smrg
6177cea3689Smrg# func_append_quoted VAR VALUE
6187cea3689Smrg# ----------------------------
6197cea3689Smrg# Quote VALUE and append to the end of shell variable VAR, separated
6207cea3689Smrg# by a space.
6217cea3689Smrgif test yes = "$_G_HAVE_PLUSEQ_OP"; then
6227cea3689Smrg  eval 'func_append_quoted ()
6237cea3689Smrg  {
6247cea3689Smrg    $debug_cmd
6257cea3689Smrg
62695b7a5c8Smrg    func_quote_arg pretty "$2"
62795b7a5c8Smrg    eval "$1+=\\ \$func_quote_arg_result"
6287cea3689Smrg  }'
6297cea3689Smrgelse
6307cea3689Smrg  func_append_quoted ()
6317cea3689Smrg  {
6327cea3689Smrg    $debug_cmd
6337cea3689Smrg
63495b7a5c8Smrg    func_quote_arg pretty "$2"
63595b7a5c8Smrg    eval "$1=\$$1\\ \$func_quote_arg_result"
6367cea3689Smrg  }
6377cea3689Smrgfi
6387cea3689Smrg
6397cea3689Smrg
6407cea3689Smrg# func_append_uniq VAR VALUE
6417cea3689Smrg# --------------------------
6427cea3689Smrg# Append unique VALUE onto the existing contents of VAR, assuming
6437cea3689Smrg# entries are delimited by the first character of VALUE.  For example:
6447cea3689Smrg#
6457cea3689Smrg#   func_append_uniq options " --another-option option-argument"
6467cea3689Smrg#
6477cea3689Smrg# will only append to $options if " --another-option option-argument "
6487cea3689Smrg# is not already present somewhere in $options already (note spaces at
6497cea3689Smrg# each end implied by leading space in second argument).
6507cea3689Smrgfunc_append_uniq ()
6517cea3689Smrg{
6527cea3689Smrg    $debug_cmd
6537cea3689Smrg
6547cea3689Smrg    eval _G_current_value='`$ECHO $'$1'`'
6557cea3689Smrg    _G_delim=`expr "$2" : '\(.\)'`
6567cea3689Smrg
6577cea3689Smrg    case $_G_delim$_G_current_value$_G_delim in
6587cea3689Smrg      *"$2$_G_delim"*) ;;
6597cea3689Smrg      *) func_append "$@" ;;
6607cea3689Smrg    esac
6617cea3689Smrg}
6627cea3689Smrg
6637cea3689Smrg
6647cea3689Smrg# func_arith TERM...
6657cea3689Smrg# ------------------
6667cea3689Smrg# Set func_arith_result to the result of evaluating TERMs.
6677cea3689Smrg  test -z "$_G_HAVE_ARITH_OP" \
6687cea3689Smrg    && (eval 'test 2 = $(( 1 + 1 ))') 2>/dev/null \
6697cea3689Smrg    && _G_HAVE_ARITH_OP=yes
6707cea3689Smrg
6717cea3689Smrgif test yes = "$_G_HAVE_ARITH_OP"; then
6727cea3689Smrg  eval 'func_arith ()
6737cea3689Smrg  {
6747cea3689Smrg    $debug_cmd
6757cea3689Smrg
6767cea3689Smrg    func_arith_result=$(( $* ))
6777cea3689Smrg  }'
6787cea3689Smrgelse
6797cea3689Smrg  func_arith ()
6807cea3689Smrg  {
6817cea3689Smrg    $debug_cmd
6827cea3689Smrg
6837cea3689Smrg    func_arith_result=`expr "$@"`
6847cea3689Smrg  }
6857cea3689Smrgfi
6867cea3689Smrg
6877cea3689Smrg
6887cea3689Smrg# func_basename FILE
6897cea3689Smrg# ------------------
6907cea3689Smrg# Set func_basename_result to FILE with everything up to and including
6917cea3689Smrg# the last / stripped.
6927cea3689Smrgif test yes = "$_G_HAVE_XSI_OPS"; then
6937cea3689Smrg  # If this shell supports suffix pattern removal, then use it to avoid
6947cea3689Smrg  # forking. Hide the definitions single quotes in case the shell chokes
6957cea3689Smrg  # on unsupported syntax...
6967cea3689Smrg  _b='func_basename_result=${1##*/}'
6977cea3689Smrg  _d='case $1 in
6987cea3689Smrg        */*) func_dirname_result=${1%/*}$2 ;;
6997cea3689Smrg        *  ) func_dirname_result=$3        ;;
7007cea3689Smrg      esac'
7017cea3689Smrg
7027cea3689Smrgelse
7037cea3689Smrg  # ...otherwise fall back to using sed.
7047cea3689Smrg  _b='func_basename_result=`$ECHO "$1" |$SED "$sed_basename"`'
7057cea3689Smrg  _d='func_dirname_result=`$ECHO "$1"  |$SED "$sed_dirname"`
7067cea3689Smrg      if test "X$func_dirname_result" = "X$1"; then
7077cea3689Smrg        func_dirname_result=$3
7087cea3689Smrg      else
7097cea3689Smrg        func_append func_dirname_result "$2"
7107cea3689Smrg      fi'
7117cea3689Smrgfi
7127cea3689Smrg
7137cea3689Smrgeval 'func_basename ()
7147cea3689Smrg{
7157cea3689Smrg    $debug_cmd
7167cea3689Smrg
7177cea3689Smrg    '"$_b"'
7187cea3689Smrg}'
7197cea3689Smrg
7207cea3689Smrg
7217cea3689Smrg# func_dirname FILE APPEND NONDIR_REPLACEMENT
7227cea3689Smrg# -------------------------------------------
7237cea3689Smrg# Compute the dirname of FILE.  If nonempty, add APPEND to the result,
7247cea3689Smrg# otherwise set result to NONDIR_REPLACEMENT.
7257cea3689Smrgeval 'func_dirname ()
7267cea3689Smrg{
7277cea3689Smrg    $debug_cmd
7287cea3689Smrg
7297cea3689Smrg    '"$_d"'
7307cea3689Smrg}'
7317cea3689Smrg
7327cea3689Smrg
7337cea3689Smrg# func_dirname_and_basename FILE APPEND NONDIR_REPLACEMENT
7347cea3689Smrg# --------------------------------------------------------
7357cea3689Smrg# Perform func_basename and func_dirname in a single function
7367cea3689Smrg# call:
7377cea3689Smrg#   dirname:  Compute the dirname of FILE.  If nonempty,
7387cea3689Smrg#             add APPEND to the result, otherwise set result
7397cea3689Smrg#             to NONDIR_REPLACEMENT.
7407cea3689Smrg#             value returned in "$func_dirname_result"
7417cea3689Smrg#   basename: Compute filename of FILE.
7427cea3689Smrg#             value retuned in "$func_basename_result"
7437cea3689Smrg# For efficiency, we do not delegate to the functions above but instead
7447cea3689Smrg# duplicate the functionality here.
7457cea3689Smrgeval 'func_dirname_and_basename ()
7467cea3689Smrg{
7477cea3689Smrg    $debug_cmd
7487cea3689Smrg
7497cea3689Smrg    '"$_b"'
7507cea3689Smrg    '"$_d"'
7517cea3689Smrg}'
7527cea3689Smrg
7537cea3689Smrg
7547cea3689Smrg# func_echo ARG...
7557cea3689Smrg# ----------------
7567cea3689Smrg# Echo program name prefixed message.
7577cea3689Smrgfunc_echo ()
7587cea3689Smrg{
7597cea3689Smrg    $debug_cmd
7607cea3689Smrg
7617cea3689Smrg    _G_message=$*
7627cea3689Smrg
7637cea3689Smrg    func_echo_IFS=$IFS
7647cea3689Smrg    IFS=$nl
7657cea3689Smrg    for _G_line in $_G_message; do
7667cea3689Smrg      IFS=$func_echo_IFS
7677cea3689Smrg      $ECHO "$progname: $_G_line"
7687cea3689Smrg    done
7697cea3689Smrg    IFS=$func_echo_IFS
7707cea3689Smrg}
7717cea3689Smrg
7727cea3689Smrg
7737cea3689Smrg# func_echo_all ARG...
7747cea3689Smrg# --------------------
7757cea3689Smrg# Invoke $ECHO with all args, space-separated.
7767cea3689Smrgfunc_echo_all ()
7777cea3689Smrg{
7787cea3689Smrg    $ECHO "$*"
7797cea3689Smrg}
7807cea3689Smrg
7817cea3689Smrg
7827cea3689Smrg# func_echo_infix_1 INFIX ARG...
7837cea3689Smrg# ------------------------------
7847cea3689Smrg# Echo program name, followed by INFIX on the first line, with any
7857cea3689Smrg# additional lines not showing INFIX.
7867cea3689Smrgfunc_echo_infix_1 ()
7877cea3689Smrg{
7887cea3689Smrg    $debug_cmd
7897cea3689Smrg
7907cea3689Smrg    $require_term_colors
7917cea3689Smrg
7927cea3689Smrg    _G_infix=$1; shift
7937cea3689Smrg    _G_indent=$_G_infix
7947cea3689Smrg    _G_prefix="$progname: $_G_infix: "
7957cea3689Smrg    _G_message=$*
7967cea3689Smrg
7977cea3689Smrg    # Strip color escape sequences before counting printable length
7987cea3689Smrg    for _G_tc in "$tc_reset" "$tc_bold" "$tc_standout" "$tc_red" "$tc_green" "$tc_blue" "$tc_cyan"
7997cea3689Smrg    do
8007cea3689Smrg      test -n "$_G_tc" && {
8017cea3689Smrg        _G_esc_tc=`$ECHO "$_G_tc" | $SED "$sed_make_literal_regex"`
8027cea3689Smrg        _G_indent=`$ECHO "$_G_indent" | $SED "s|$_G_esc_tc||g"`
8037cea3689Smrg      }
8047cea3689Smrg    done
8057cea3689Smrg    _G_indent="$progname: "`echo "$_G_indent" | $SED 's|.| |g'`"  " ## exclude from sc_prohibit_nested_quotes
8067cea3689Smrg
8077cea3689Smrg    func_echo_infix_1_IFS=$IFS
8087cea3689Smrg    IFS=$nl
8097cea3689Smrg    for _G_line in $_G_message; do
8107cea3689Smrg      IFS=$func_echo_infix_1_IFS
8117cea3689Smrg      $ECHO "$_G_prefix$tc_bold$_G_line$tc_reset" >&2
8127cea3689Smrg      _G_prefix=$_G_indent
8137cea3689Smrg    done
8147cea3689Smrg    IFS=$func_echo_infix_1_IFS
8157cea3689Smrg}
8167cea3689Smrg
8177cea3689Smrg
8187cea3689Smrg# func_error ARG...
8197cea3689Smrg# -----------------
8207cea3689Smrg# Echo program name prefixed message to standard error.
8217cea3689Smrgfunc_error ()
8227cea3689Smrg{
8237cea3689Smrg    $debug_cmd
8247cea3689Smrg
8257cea3689Smrg    $require_term_colors
8267cea3689Smrg
8277cea3689Smrg    func_echo_infix_1 "  $tc_standout${tc_red}error$tc_reset" "$*" >&2
8287cea3689Smrg}
8297cea3689Smrg
8307cea3689Smrg
8317cea3689Smrg# func_fatal_error ARG...
8327cea3689Smrg# -----------------------
8337cea3689Smrg# Echo program name prefixed message to standard error, and exit.
8347cea3689Smrgfunc_fatal_error ()
8357cea3689Smrg{
8367cea3689Smrg    $debug_cmd
8377cea3689Smrg
8387cea3689Smrg    func_error "$*"
8397cea3689Smrg    exit $EXIT_FAILURE
8407cea3689Smrg}
8417cea3689Smrg
8427cea3689Smrg
8437cea3689Smrg# func_grep EXPRESSION FILENAME
8447cea3689Smrg# -----------------------------
845e19dfac4Smrg# Check whether EXPRESSION matches any line of FILENAME, without output.
846e19dfac4Smrgfunc_grep ()
847e19dfac4Smrg{
8487cea3689Smrg    $debug_cmd
8497cea3689Smrg
850e19dfac4Smrg    $GREP "$1" "$2" >/dev/null 2>&1
851e19dfac4Smrg}
852e19dfac4Smrg
853e19dfac4Smrg
8547cea3689Smrg# func_len STRING
8557cea3689Smrg# ---------------
8567cea3689Smrg# Set func_len_result to the length of STRING. STRING may not
8577cea3689Smrg# start with a hyphen.
8587cea3689Smrg  test -z "$_G_HAVE_XSI_OPS" \
8597cea3689Smrg    && (eval 'x=a/b/c;
8607cea3689Smrg      test 5aa/bb/cc = "${#x}${x%%/*}${x%/*}${x#*/}${x##*/}"') 2>/dev/null \
8617cea3689Smrg    && _G_HAVE_XSI_OPS=yes
8627cea3689Smrg
8637cea3689Smrgif test yes = "$_G_HAVE_XSI_OPS"; then
8647cea3689Smrg  eval 'func_len ()
8657cea3689Smrg  {
8667cea3689Smrg    $debug_cmd
8677cea3689Smrg
8687cea3689Smrg    func_len_result=${#1}
8697cea3689Smrg  }'
8707cea3689Smrgelse
8717cea3689Smrg  func_len ()
8727cea3689Smrg  {
8737cea3689Smrg    $debug_cmd
8747cea3689Smrg
8757cea3689Smrg    func_len_result=`expr "$1" : ".*" 2>/dev/null || echo $max_cmd_len`
8767cea3689Smrg  }
8777cea3689Smrgfi
8787cea3689Smrg
8797cea3689Smrg
8807cea3689Smrg# func_mkdir_p DIRECTORY-PATH
8817cea3689Smrg# ---------------------------
882e19dfac4Smrg# Make sure the entire path to DIRECTORY-PATH is available.
883e19dfac4Smrgfunc_mkdir_p ()
884e19dfac4Smrg{
8857cea3689Smrg    $debug_cmd
886e19dfac4Smrg
8877cea3689Smrg    _G_directory_path=$1
8887cea3689Smrg    _G_dir_list=
889e19dfac4Smrg
8907cea3689Smrg    if test -n "$_G_directory_path" && test : != "$opt_dry_run"; then
8917cea3689Smrg
8927cea3689Smrg      # Protect directory names starting with '-'
8937cea3689Smrg      case $_G_directory_path in
8947cea3689Smrg        -*) _G_directory_path=./$_G_directory_path ;;
895e19dfac4Smrg      esac
896e19dfac4Smrg
897e19dfac4Smrg      # While some portion of DIR does not yet exist...
8987cea3689Smrg      while test ! -d "$_G_directory_path"; do
899e19dfac4Smrg        # ...make a list in topmost first order.  Use a colon delimited
900e19dfac4Smrg	# list incase some portion of path contains whitespace.
9017cea3689Smrg        _G_dir_list=$_G_directory_path:$_G_dir_list
902e19dfac4Smrg
903e19dfac4Smrg        # If the last portion added has no slash in it, the list is done
9047cea3689Smrg        case $_G_directory_path in */*) ;; *) break ;; esac
905e19dfac4Smrg
906e19dfac4Smrg        # ...otherwise throw away the child directory and loop
9077cea3689Smrg        _G_directory_path=`$ECHO "$_G_directory_path" | $SED -e "$sed_dirname"`
908e19dfac4Smrg      done
9097cea3689Smrg      _G_dir_list=`$ECHO "$_G_dir_list" | $SED 's|:*$||'`
910e19dfac4Smrg
9117cea3689Smrg      func_mkdir_p_IFS=$IFS; IFS=:
9127cea3689Smrg      for _G_dir in $_G_dir_list; do
9137cea3689Smrg	IFS=$func_mkdir_p_IFS
9147cea3689Smrg        # mkdir can fail with a 'File exist' error if two processes
915e19dfac4Smrg        # try to create one of the directories concurrently.  Don't
916e19dfac4Smrg        # stop in that case!
9177cea3689Smrg        $MKDIR "$_G_dir" 2>/dev/null || :
918e19dfac4Smrg      done
9197cea3689Smrg      IFS=$func_mkdir_p_IFS
920e19dfac4Smrg
921e19dfac4Smrg      # Bail out if we (or some other process) failed to create a directory.
9227cea3689Smrg      test -d "$_G_directory_path" || \
9237cea3689Smrg        func_fatal_error "Failed to create '$1'"
924e19dfac4Smrg    fi
925e19dfac4Smrg}
92627702724Smrg
92727702724Smrg
9287cea3689Smrg# func_mktempdir [BASENAME]
9297cea3689Smrg# -------------------------
93027702724Smrg# Make a temporary directory that won't clash with other running
93127702724Smrg# libtool processes, and avoids race conditions if possible.  If
9327cea3689Smrg# given, BASENAME is the basename for that directory.
93327702724Smrgfunc_mktempdir ()
93427702724Smrg{
9357cea3689Smrg    $debug_cmd
9367cea3689Smrg
9377cea3689Smrg    _G_template=${TMPDIR-/tmp}/${1-$progname}
93827702724Smrg
9397cea3689Smrg    if test : = "$opt_dry_run"; then
94027702724Smrg      # Return a directory name, but don't create it in dry-run mode
9417cea3689Smrg      _G_tmpdir=$_G_template-$$
94227702724Smrg    else
94327702724Smrg
94427702724Smrg      # If mktemp works, use that first and foremost
9457cea3689Smrg      _G_tmpdir=`mktemp -d "$_G_template-XXXXXXXX" 2>/dev/null`
94627702724Smrg
9477cea3689Smrg      if test ! -d "$_G_tmpdir"; then
948e19dfac4Smrg        # Failing that, at least try and use $RANDOM to avoid a race
9497cea3689Smrg        _G_tmpdir=$_G_template-${RANDOM-0}$$
95027702724Smrg
9517cea3689Smrg        func_mktempdir_umask=`umask`
952e19dfac4Smrg        umask 0077
9537cea3689Smrg        $MKDIR "$_G_tmpdir"
9547cea3689Smrg        umask $func_mktempdir_umask
95527702724Smrg      fi
95627702724Smrg
95727702724Smrg      # If we're not in dry-run mode, bomb out on failure
9587cea3689Smrg      test -d "$_G_tmpdir" || \
9597cea3689Smrg        func_fatal_error "cannot create temporary directory '$_G_tmpdir'"
9607cea3689Smrg    fi
9617cea3689Smrg
9627cea3689Smrg    $ECHO "$_G_tmpdir"
9637cea3689Smrg}
9647cea3689Smrg
9657cea3689Smrg
9667cea3689Smrg# func_normal_abspath PATH
9677cea3689Smrg# ------------------------
9687cea3689Smrg# Remove doubled-up and trailing slashes, "." path components,
9697cea3689Smrg# and cancel out any ".." path components in PATH after making
9707cea3689Smrg# it an absolute path.
9717cea3689Smrgfunc_normal_abspath ()
9727cea3689Smrg{
9737cea3689Smrg    $debug_cmd
9747cea3689Smrg
9757cea3689Smrg    # These SED scripts presuppose an absolute path with a trailing slash.
9767cea3689Smrg    _G_pathcar='s|^/\([^/]*\).*$|\1|'
9777cea3689Smrg    _G_pathcdr='s|^/[^/]*||'
9787cea3689Smrg    _G_removedotparts=':dotsl
9797cea3689Smrg		s|/\./|/|g
9807cea3689Smrg		t dotsl
9817cea3689Smrg		s|/\.$|/|'
9827cea3689Smrg    _G_collapseslashes='s|/\{1,\}|/|g'
9837cea3689Smrg    _G_finalslash='s|/*$|/|'
9847cea3689Smrg
9857cea3689Smrg    # Start from root dir and reassemble the path.
9867cea3689Smrg    func_normal_abspath_result=
9877cea3689Smrg    func_normal_abspath_tpath=$1
9887cea3689Smrg    func_normal_abspath_altnamespace=
9897cea3689Smrg    case $func_normal_abspath_tpath in
9907cea3689Smrg      "")
9917cea3689Smrg        # Empty path, that just means $cwd.
9927cea3689Smrg        func_stripname '' '/' "`pwd`"
9937cea3689Smrg        func_normal_abspath_result=$func_stripname_result
9947cea3689Smrg        return
9957cea3689Smrg        ;;
9967cea3689Smrg      # The next three entries are used to spot a run of precisely
9977cea3689Smrg      # two leading slashes without using negated character classes;
9987cea3689Smrg      # we take advantage of case's first-match behaviour.
9997cea3689Smrg      ///*)
10007cea3689Smrg        # Unusual form of absolute path, do nothing.
10017cea3689Smrg        ;;
10027cea3689Smrg      //*)
10037cea3689Smrg        # Not necessarily an ordinary path; POSIX reserves leading '//'
10047cea3689Smrg        # and for example Cygwin uses it to access remote file shares
10057cea3689Smrg        # over CIFS/SMB, so we conserve a leading double slash if found.
10067cea3689Smrg        func_normal_abspath_altnamespace=/
10077cea3689Smrg        ;;
10087cea3689Smrg      /*)
10097cea3689Smrg        # Absolute path, do nothing.
10107cea3689Smrg        ;;
10117cea3689Smrg      *)
10127cea3689Smrg        # Relative path, prepend $cwd.
10137cea3689Smrg        func_normal_abspath_tpath=`pwd`/$func_normal_abspath_tpath
10147cea3689Smrg        ;;
10157cea3689Smrg    esac
10167cea3689Smrg
10177cea3689Smrg    # Cancel out all the simple stuff to save iterations.  We also want
10187cea3689Smrg    # the path to end with a slash for ease of parsing, so make sure
10197cea3689Smrg    # there is one (and only one) here.
10207cea3689Smrg    func_normal_abspath_tpath=`$ECHO "$func_normal_abspath_tpath" | $SED \
10217cea3689Smrg          -e "$_G_removedotparts" -e "$_G_collapseslashes" -e "$_G_finalslash"`
10227cea3689Smrg    while :; do
10237cea3689Smrg      # Processed it all yet?
10247cea3689Smrg      if test / = "$func_normal_abspath_tpath"; then
10257cea3689Smrg        # If we ascended to the root using ".." the result may be empty now.
10267cea3689Smrg        if test -z "$func_normal_abspath_result"; then
10277cea3689Smrg          func_normal_abspath_result=/
10287cea3689Smrg        fi
10297cea3689Smrg        break
10307cea3689Smrg      fi
10317cea3689Smrg      func_normal_abspath_tcomponent=`$ECHO "$func_normal_abspath_tpath" | $SED \
10327cea3689Smrg          -e "$_G_pathcar"`
10337cea3689Smrg      func_normal_abspath_tpath=`$ECHO "$func_normal_abspath_tpath" | $SED \
10347cea3689Smrg          -e "$_G_pathcdr"`
10357cea3689Smrg      # Figure out what to do with it
10367cea3689Smrg      case $func_normal_abspath_tcomponent in
10377cea3689Smrg        "")
10387cea3689Smrg          # Trailing empty path component, ignore it.
10397cea3689Smrg          ;;
10407cea3689Smrg        ..)
10417cea3689Smrg          # Parent dir; strip last assembled component from result.
10427cea3689Smrg          func_dirname "$func_normal_abspath_result"
10437cea3689Smrg          func_normal_abspath_result=$func_dirname_result
10447cea3689Smrg          ;;
10457cea3689Smrg        *)
10467cea3689Smrg          # Actual path component, append it.
10477cea3689Smrg          func_append func_normal_abspath_result "/$func_normal_abspath_tcomponent"
10487cea3689Smrg          ;;
10497cea3689Smrg      esac
10507cea3689Smrg    done
10517cea3689Smrg    # Restore leading double-slash if one was found on entry.
10527cea3689Smrg    func_normal_abspath_result=$func_normal_abspath_altnamespace$func_normal_abspath_result
10537cea3689Smrg}
10547cea3689Smrg
10557cea3689Smrg
10567cea3689Smrg# func_notquiet ARG...
10577cea3689Smrg# --------------------
10587cea3689Smrg# Echo program name prefixed message only when not in quiet mode.
10597cea3689Smrgfunc_notquiet ()
10607cea3689Smrg{
10617cea3689Smrg    $debug_cmd
10627cea3689Smrg
10637cea3689Smrg    $opt_quiet || func_echo ${1+"$@"}
10647cea3689Smrg
10657cea3689Smrg    # A bug in bash halts the script if the last line of a function
10667cea3689Smrg    # fails when set -e is in force, so we need another command to
10677cea3689Smrg    # work around that:
10687cea3689Smrg    :
10697cea3689Smrg}
10707cea3689Smrg
10717cea3689Smrg
10727cea3689Smrg# func_relative_path SRCDIR DSTDIR
10737cea3689Smrg# --------------------------------
10747cea3689Smrg# Set func_relative_path_result to the relative path from SRCDIR to DSTDIR.
10757cea3689Smrgfunc_relative_path ()
10767cea3689Smrg{
10777cea3689Smrg    $debug_cmd
10787cea3689Smrg
10797cea3689Smrg    func_relative_path_result=
10807cea3689Smrg    func_normal_abspath "$1"
10817cea3689Smrg    func_relative_path_tlibdir=$func_normal_abspath_result
10827cea3689Smrg    func_normal_abspath "$2"
10837cea3689Smrg    func_relative_path_tbindir=$func_normal_abspath_result
10847cea3689Smrg
10857cea3689Smrg    # Ascend the tree starting from libdir
10867cea3689Smrg    while :; do
10877cea3689Smrg      # check if we have found a prefix of bindir
10887cea3689Smrg      case $func_relative_path_tbindir in
10897cea3689Smrg        $func_relative_path_tlibdir)
10907cea3689Smrg          # found an exact match
10917cea3689Smrg          func_relative_path_tcancelled=
10927cea3689Smrg          break
10937cea3689Smrg          ;;
10947cea3689Smrg        $func_relative_path_tlibdir*)
10957cea3689Smrg          # found a matching prefix
10967cea3689Smrg          func_stripname "$func_relative_path_tlibdir" '' "$func_relative_path_tbindir"
10977cea3689Smrg          func_relative_path_tcancelled=$func_stripname_result
10987cea3689Smrg          if test -z "$func_relative_path_result"; then
10997cea3689Smrg            func_relative_path_result=.
11007cea3689Smrg          fi
11017cea3689Smrg          break
11027cea3689Smrg          ;;
11037cea3689Smrg        *)
11047cea3689Smrg          func_dirname $func_relative_path_tlibdir
11057cea3689Smrg          func_relative_path_tlibdir=$func_dirname_result
11067cea3689Smrg          if test -z "$func_relative_path_tlibdir"; then
11077cea3689Smrg            # Have to descend all the way to the root!
11087cea3689Smrg            func_relative_path_result=../$func_relative_path_result
11097cea3689Smrg            func_relative_path_tcancelled=$func_relative_path_tbindir
11107cea3689Smrg            break
11117cea3689Smrg          fi
11127cea3689Smrg          func_relative_path_result=../$func_relative_path_result
11137cea3689Smrg          ;;
11147cea3689Smrg      esac
11157cea3689Smrg    done
11167cea3689Smrg
11177cea3689Smrg    # Now calculate path; take care to avoid doubling-up slashes.
11187cea3689Smrg    func_stripname '' '/' "$func_relative_path_result"
11197cea3689Smrg    func_relative_path_result=$func_stripname_result
11207cea3689Smrg    func_stripname '/' '/' "$func_relative_path_tcancelled"
11217cea3689Smrg    if test -n "$func_stripname_result"; then
11227cea3689Smrg      func_append func_relative_path_result "/$func_stripname_result"
11237cea3689Smrg    fi
11247cea3689Smrg
11257cea3689Smrg    # Normalisation. If bindir is libdir, return '.' else relative path.
11267cea3689Smrg    if test -n "$func_relative_path_result"; then
11277cea3689Smrg      func_stripname './' '' "$func_relative_path_result"
11287cea3689Smrg      func_relative_path_result=$func_stripname_result
112927702724Smrg    fi
113027702724Smrg
11317cea3689Smrg    test -n "$func_relative_path_result" || func_relative_path_result=.
11327cea3689Smrg
11337cea3689Smrg    :
11347cea3689Smrg}
11357cea3689Smrg
11367cea3689Smrg
113795b7a5c8Smrg# func_quote_portable EVAL ARG
113895b7a5c8Smrg# ----------------------------
113995b7a5c8Smrg# Internal function to portably implement func_quote_arg.  Note that we still
114095b7a5c8Smrg# keep attention to performance here so we as much as possible try to avoid
114195b7a5c8Smrg# calling sed binary (so far O(N) complexity as long as func_append is O(1)).
114295b7a5c8Smrgfunc_quote_portable ()
11437cea3689Smrg{
11447cea3689Smrg    $debug_cmd
11457cea3689Smrg
114695b7a5c8Smrg    $require_check_ifs_backslash
114795b7a5c8Smrg
114895b7a5c8Smrg    func_quote_portable_result=$2
114995b7a5c8Smrg
115095b7a5c8Smrg    # one-time-loop (easy break)
115195b7a5c8Smrg    while true
115295b7a5c8Smrg    do
115395b7a5c8Smrg      if $1; then
115495b7a5c8Smrg        func_quote_portable_result=`$ECHO "$2" | $SED \
115595b7a5c8Smrg          -e "$sed_double_quote_subst" -e "$sed_double_backslash"`
115695b7a5c8Smrg        break
11577cea3689Smrg      fi
11587cea3689Smrg
115995b7a5c8Smrg      # Quote for eval.
116095b7a5c8Smrg      case $func_quote_portable_result in
116195b7a5c8Smrg        *[\\\`\"\$]*)
116295b7a5c8Smrg          # Fallback to sed for $func_check_bs_ifs_broken=:, or when the string
116395b7a5c8Smrg          # contains the shell wildcard characters.
116495b7a5c8Smrg          case $check_ifs_backshlash_broken$func_quote_portable_result in
116595b7a5c8Smrg            :*|*[\[\*\?]*)
116695b7a5c8Smrg              func_quote_portable_result=`$ECHO "$func_quote_portable_result" \
116795b7a5c8Smrg                  | $SED "$sed_quote_subst"`
116895b7a5c8Smrg              break
116995b7a5c8Smrg              ;;
117095b7a5c8Smrg          esac
117195b7a5c8Smrg
117295b7a5c8Smrg          func_quote_portable_old_IFS=$IFS
117395b7a5c8Smrg          for _G_char in '\' '`' '"' '$'
117495b7a5c8Smrg          do
117595b7a5c8Smrg            # STATE($1) PREV($2) SEPARATOR($3)
117695b7a5c8Smrg            set start "" ""
117795b7a5c8Smrg            func_quote_portable_result=dummy"$_G_char$func_quote_portable_result$_G_char"dummy
117895b7a5c8Smrg            IFS=$_G_char
117995b7a5c8Smrg            for _G_part in $func_quote_portable_result
118095b7a5c8Smrg            do
118195b7a5c8Smrg              case $1 in
118295b7a5c8Smrg              quote)
118395b7a5c8Smrg                func_append func_quote_portable_result "$3$2"
118495b7a5c8Smrg                set quote "$_G_part" "\\$_G_char"
118595b7a5c8Smrg                ;;
118695b7a5c8Smrg              start)
118795b7a5c8Smrg                set first "" ""
118895b7a5c8Smrg                func_quote_portable_result=
118995b7a5c8Smrg                ;;
119095b7a5c8Smrg              first)
119195b7a5c8Smrg                set quote "$_G_part" ""
119295b7a5c8Smrg                ;;
119395b7a5c8Smrg              esac
119495b7a5c8Smrg            done
119595b7a5c8Smrg          done
119695b7a5c8Smrg          IFS=$func_quote_portable_old_IFS
11977cea3689Smrg          ;;
119895b7a5c8Smrg        *) ;;
11997cea3689Smrg      esac
120095b7a5c8Smrg      break
12017cea3689Smrg    done
120295b7a5c8Smrg
120395b7a5c8Smrg    func_quote_portable_unquoted_result=$func_quote_portable_result
120495b7a5c8Smrg    case $func_quote_portable_result in
120595b7a5c8Smrg      # double-quote args containing shell metacharacters to delay
120695b7a5c8Smrg      # word splitting, command substitution and variable expansion
120795b7a5c8Smrg      # for a subsequent eval.
120895b7a5c8Smrg      # many bourne shells cannot handle close brackets correctly
120995b7a5c8Smrg      # in scan sets, so we specify it separately.
121095b7a5c8Smrg      *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \	]*|*]*|"")
121195b7a5c8Smrg        func_quote_portable_result=\"$func_quote_portable_result\"
121295b7a5c8Smrg        ;;
121395b7a5c8Smrg    esac
12147cea3689Smrg}
12157cea3689Smrg
12167cea3689Smrg
121795b7a5c8Smrg# func_quotefast_eval ARG
121895b7a5c8Smrg# -----------------------
121995b7a5c8Smrg# Quote one ARG (internal).  This is equivalent to 'func_quote_arg eval ARG',
122095b7a5c8Smrg# but optimized for speed.  Result is stored in $func_quotefast_eval.
122195b7a5c8Smrgif test xyes = `(x=; printf -v x %q yes; echo x"$x") 2>/dev/null`; then
122295b7a5c8Smrg  printf -v _GL_test_printf_tilde %q '~'
122395b7a5c8Smrg  if test '\~' = "$_GL_test_printf_tilde"; then
122495b7a5c8Smrg    func_quotefast_eval ()
122595b7a5c8Smrg    {
122695b7a5c8Smrg      printf -v func_quotefast_eval_result %q "$1"
122795b7a5c8Smrg    }
122895b7a5c8Smrg  else
122995b7a5c8Smrg    # Broken older Bash implementations.  Make those faster too if possible.
123095b7a5c8Smrg    func_quotefast_eval ()
123195b7a5c8Smrg    {
123295b7a5c8Smrg      case $1 in
123395b7a5c8Smrg        '~'*)
123495b7a5c8Smrg          func_quote_portable false "$1"
123595b7a5c8Smrg          func_quotefast_eval_result=$func_quote_portable_result
123695b7a5c8Smrg          ;;
123795b7a5c8Smrg        *)
123895b7a5c8Smrg          printf -v func_quotefast_eval_result %q "$1"
123995b7a5c8Smrg          ;;
124095b7a5c8Smrg      esac
124195b7a5c8Smrg    }
124295b7a5c8Smrg  fi
124395b7a5c8Smrgelse
124495b7a5c8Smrg  func_quotefast_eval ()
124595b7a5c8Smrg  {
124695b7a5c8Smrg    func_quote_portable false "$1"
124795b7a5c8Smrg    func_quotefast_eval_result=$func_quote_portable_result
124895b7a5c8Smrg  }
124995b7a5c8Smrgfi
12507cea3689Smrg
125195b7a5c8Smrg
125295b7a5c8Smrg# func_quote_arg MODEs ARG
125395b7a5c8Smrg# ------------------------
125495b7a5c8Smrg# Quote one ARG to be evaled later.  MODEs argument may contain zero or more
125595b7a5c8Smrg# specifiers listed below separated by ',' character.  This function returns two
125695b7a5c8Smrg# values:
125795b7a5c8Smrg#   i) func_quote_arg_result
125895b7a5c8Smrg#      double-quoted (when needed), suitable for a subsequent eval
125995b7a5c8Smrg#  ii) func_quote_arg_unquoted_result
126095b7a5c8Smrg#      has all characters that are still active within double
126195b7a5c8Smrg#      quotes backslashified.  Available only if 'unquoted' is specified.
126295b7a5c8Smrg#
126395b7a5c8Smrg# Available modes:
126495b7a5c8Smrg# ----------------
126595b7a5c8Smrg# 'eval' (default)
126695b7a5c8Smrg#       - escape shell special characters
126795b7a5c8Smrg# 'expand'
126895b7a5c8Smrg#       - the same as 'eval';  but do not quote variable references
126995b7a5c8Smrg# 'pretty'
127095b7a5c8Smrg#       - request aesthetic output, i.e. '"a b"' instead of 'a\ b'.  This might
127195b7a5c8Smrg#         be used later in func_quote to get output like: 'echo "a b"' instead
127295b7a5c8Smrg#         of 'echo a\ b'.  This is slower than default on some shells.
127395b7a5c8Smrg# 'unquoted'
127495b7a5c8Smrg#       - produce also $func_quote_arg_unquoted_result which does not contain
127595b7a5c8Smrg#         wrapping double-quotes.
127695b7a5c8Smrg#
127795b7a5c8Smrg# Examples for 'func_quote_arg pretty,unquoted string':
127895b7a5c8Smrg#
127995b7a5c8Smrg#   string      | *_result              | *_unquoted_result
128095b7a5c8Smrg#   ------------+-----------------------+-------------------
128195b7a5c8Smrg#   "           | \"                    | \"
128295b7a5c8Smrg#   a b         | "a b"                 | a b
128395b7a5c8Smrg#   "a b"       | "\"a b\""             | \"a b\"
128495b7a5c8Smrg#   *           | "*"                   | *
128595b7a5c8Smrg#   z="${x-$y}" | "z=\"\${x-\$y}\""     | z=\"\${x-\$y}\"
128695b7a5c8Smrg#
128795b7a5c8Smrg# Examples for 'func_quote_arg pretty,unquoted,expand string':
128895b7a5c8Smrg#
128995b7a5c8Smrg#   string        |   *_result          |  *_unquoted_result
129095b7a5c8Smrg#   --------------+---------------------+--------------------
129195b7a5c8Smrg#   z="${x-$y}"   | "z=\"${x-$y}\""     | z=\"${x-$y}\"
129295b7a5c8Smrgfunc_quote_arg ()
129395b7a5c8Smrg{
129495b7a5c8Smrg    _G_quote_expand=false
129595b7a5c8Smrg    case ,$1, in
129695b7a5c8Smrg      *,expand,*)
129795b7a5c8Smrg        _G_quote_expand=:
129895b7a5c8Smrg        ;;
12997cea3689Smrg    esac
13007cea3689Smrg
130195b7a5c8Smrg    case ,$1, in
130295b7a5c8Smrg      *,pretty,*|*,expand,*|*,unquoted,*)
130395b7a5c8Smrg        func_quote_portable $_G_quote_expand "$2"
130495b7a5c8Smrg        func_quote_arg_result=$func_quote_portable_result
130595b7a5c8Smrg        func_quote_arg_unquoted_result=$func_quote_portable_unquoted_result
130695b7a5c8Smrg        ;;
130795b7a5c8Smrg      *)
130895b7a5c8Smrg        # Faster quote-for-eval for some shells.
130995b7a5c8Smrg        func_quotefast_eval "$2"
131095b7a5c8Smrg        func_quote_arg_result=$func_quotefast_eval_result
13117cea3689Smrg        ;;
13127cea3689Smrg    esac
131395b7a5c8Smrg}
131495b7a5c8Smrg
13157cea3689Smrg
131695b7a5c8Smrg# func_quote MODEs ARGs...
131795b7a5c8Smrg# ------------------------
131895b7a5c8Smrg# Quote all ARGs to be evaled later and join them into single command.  See
131995b7a5c8Smrg# func_quote_arg's description for more info.
132095b7a5c8Smrgfunc_quote ()
132195b7a5c8Smrg{
132295b7a5c8Smrg    $debug_cmd
132395b7a5c8Smrg    _G_func_quote_mode=$1 ; shift
132495b7a5c8Smrg    func_quote_result=
132595b7a5c8Smrg    while test 0 -lt $#; do
132695b7a5c8Smrg      func_quote_arg "$_G_func_quote_mode" "$1"
132795b7a5c8Smrg      if test -n "$func_quote_result"; then
132895b7a5c8Smrg        func_append func_quote_result " $func_quote_arg_result"
132995b7a5c8Smrg      else
133095b7a5c8Smrg        func_append func_quote_result "$func_quote_arg_result"
133195b7a5c8Smrg      fi
133295b7a5c8Smrg      shift
133395b7a5c8Smrg    done
13347cea3689Smrg}
13357cea3689Smrg
13367cea3689Smrg
13377cea3689Smrg# func_stripname PREFIX SUFFIX NAME
13387cea3689Smrg# ---------------------------------
13397cea3689Smrg# strip PREFIX and SUFFIX from NAME, and store in func_stripname_result.
13407cea3689Smrg# PREFIX and SUFFIX must not contain globbing or regex special
13417cea3689Smrg# characters, hashes, percent signs, but SUFFIX may contain a leading
13427cea3689Smrg# dot (in which case that matches only a dot).
13437cea3689Smrgif test yes = "$_G_HAVE_XSI_OPS"; then
13447cea3689Smrg  eval 'func_stripname ()
13457cea3689Smrg  {
13467cea3689Smrg    $debug_cmd
13477cea3689Smrg
13487cea3689Smrg    # pdksh 5.2.14 does not do ${X%$Y} correctly if both X and Y are
13497cea3689Smrg    # positional parameters, so assign one to ordinary variable first.
13507cea3689Smrg    func_stripname_result=$3
13517cea3689Smrg    func_stripname_result=${func_stripname_result#"$1"}
13527cea3689Smrg    func_stripname_result=${func_stripname_result%"$2"}
13537cea3689Smrg  }'
13547cea3689Smrgelse
13557cea3689Smrg  func_stripname ()
13567cea3689Smrg  {
13577cea3689Smrg    $debug_cmd
13587cea3689Smrg
13597cea3689Smrg    case $2 in
13607cea3689Smrg      .*) func_stripname_result=`$ECHO "$3" | $SED -e "s%^$1%%" -e "s%\\\\$2\$%%"`;;
13617cea3689Smrg      *)  func_stripname_result=`$ECHO "$3" | $SED -e "s%^$1%%" -e "s%$2\$%%"`;;
13627cea3689Smrg    esac
13637cea3689Smrg  }
13647cea3689Smrgfi
13657cea3689Smrg
13667cea3689Smrg
13677cea3689Smrg# func_show_eval CMD [FAIL_EXP]
13687cea3689Smrg# -----------------------------
13697cea3689Smrg# Unless opt_quiet is true, then output CMD.  Then, if opt_dryrun is
13707cea3689Smrg# not true, evaluate CMD.  If the evaluation of CMD fails, and FAIL_EXP
13717cea3689Smrg# is given, then evaluate it.
13727cea3689Smrgfunc_show_eval ()
13737cea3689Smrg{
13747cea3689Smrg    $debug_cmd
13757cea3689Smrg
13767cea3689Smrg    _G_cmd=$1
13777cea3689Smrg    _G_fail_exp=${2-':'}
13787cea3689Smrg
137995b7a5c8Smrg    func_quote_arg pretty,expand "$_G_cmd"
138095b7a5c8Smrg    eval "func_notquiet $func_quote_arg_result"
13817cea3689Smrg
13827cea3689Smrg    $opt_dry_run || {
13837cea3689Smrg      eval "$_G_cmd"
13847cea3689Smrg      _G_status=$?
13857cea3689Smrg      if test 0 -ne "$_G_status"; then
13867cea3689Smrg	eval "(exit $_G_status); $_G_fail_exp"
13877cea3689Smrg      fi
13887cea3689Smrg    }
13897cea3689Smrg}
13907cea3689Smrg
13917cea3689Smrg
13927cea3689Smrg# func_show_eval_locale CMD [FAIL_EXP]
13937cea3689Smrg# ------------------------------------
13947cea3689Smrg# Unless opt_quiet is true, then output CMD.  Then, if opt_dryrun is
13957cea3689Smrg# not true, evaluate CMD.  If the evaluation of CMD fails, and FAIL_EXP
13967cea3689Smrg# is given, then evaluate it.  Use the saved locale for evaluation.
13977cea3689Smrgfunc_show_eval_locale ()
13987cea3689Smrg{
13997cea3689Smrg    $debug_cmd
14007cea3689Smrg
14017cea3689Smrg    _G_cmd=$1
14027cea3689Smrg    _G_fail_exp=${2-':'}
14037cea3689Smrg
14047cea3689Smrg    $opt_quiet || {
140595b7a5c8Smrg      func_quote_arg expand,pretty "$_G_cmd"
140695b7a5c8Smrg      eval "func_echo $func_quote_arg_result"
14077cea3689Smrg    }
14087cea3689Smrg
14097cea3689Smrg    $opt_dry_run || {
14107cea3689Smrg      eval "$_G_user_locale
14117cea3689Smrg	    $_G_cmd"
14127cea3689Smrg      _G_status=$?
14137cea3689Smrg      eval "$_G_safe_locale"
14147cea3689Smrg      if test 0 -ne "$_G_status"; then
14157cea3689Smrg	eval "(exit $_G_status); $_G_fail_exp"
14167cea3689Smrg      fi
14177cea3689Smrg    }
14187cea3689Smrg}
14197cea3689Smrg
14207cea3689Smrg
14217cea3689Smrg# func_tr_sh
14227cea3689Smrg# ----------
14237cea3689Smrg# Turn $1 into a string suitable for a shell variable name.
14247cea3689Smrg# Result is stored in $func_tr_sh_result.  All characters
14257cea3689Smrg# not in the set a-zA-Z0-9_ are replaced with '_'. Further,
14267cea3689Smrg# if $1 begins with a digit, a '_' is prepended as well.
14277cea3689Smrgfunc_tr_sh ()
14287cea3689Smrg{
14297cea3689Smrg    $debug_cmd
14307cea3689Smrg
14317cea3689Smrg    case $1 in
14327cea3689Smrg    [0-9]* | *[!a-zA-Z0-9_]*)
14337cea3689Smrg      func_tr_sh_result=`$ECHO "$1" | $SED -e 's/^\([0-9]\)/_\1/' -e 's/[^a-zA-Z0-9_]/_/g'`
14347cea3689Smrg      ;;
14357cea3689Smrg    * )
14367cea3689Smrg      func_tr_sh_result=$1
14377cea3689Smrg      ;;
14387cea3689Smrg    esac
14397cea3689Smrg}
14407cea3689Smrg
14417cea3689Smrg
14427cea3689Smrg# func_verbose ARG...
14437cea3689Smrg# -------------------
14447cea3689Smrg# Echo program name prefixed message in verbose mode only.
14457cea3689Smrgfunc_verbose ()
14467cea3689Smrg{
14477cea3689Smrg    $debug_cmd
14487cea3689Smrg
14497cea3689Smrg    $opt_verbose && func_echo "$*"
14507cea3689Smrg
14517cea3689Smrg    :
14527cea3689Smrg}
14537cea3689Smrg
14547cea3689Smrg
14557cea3689Smrg# func_warn_and_continue ARG...
14567cea3689Smrg# -----------------------------
14577cea3689Smrg# Echo program name prefixed warning message to standard error.
14587cea3689Smrgfunc_warn_and_continue ()
14597cea3689Smrg{
14607cea3689Smrg    $debug_cmd
14617cea3689Smrg
14627cea3689Smrg    $require_term_colors
14637cea3689Smrg
14647cea3689Smrg    func_echo_infix_1 "${tc_red}warning$tc_reset" "$*" >&2
14657cea3689Smrg}
14667cea3689Smrg
14677cea3689Smrg
14687cea3689Smrg# func_warning CATEGORY ARG...
14697cea3689Smrg# ----------------------------
14707cea3689Smrg# Echo program name prefixed warning message to standard error. Warning
14717cea3689Smrg# messages can be filtered according to CATEGORY, where this function
14727cea3689Smrg# elides messages where CATEGORY is not listed in the global variable
14737cea3689Smrg# 'opt_warning_types'.
14747cea3689Smrgfunc_warning ()
14757cea3689Smrg{
14767cea3689Smrg    $debug_cmd
14777cea3689Smrg
14787cea3689Smrg    # CATEGORY must be in the warning_categories list!
14797cea3689Smrg    case " $warning_categories " in
14807cea3689Smrg      *" $1 "*) ;;
14817cea3689Smrg      *) func_internal_error "invalid warning category '$1'" ;;
14827cea3689Smrg    esac
14837cea3689Smrg
14847cea3689Smrg    _G_category=$1
14857cea3689Smrg    shift
14867cea3689Smrg
14877cea3689Smrg    case " $opt_warning_types " in
14887cea3689Smrg      *" $_G_category "*) $warning_func ${1+"$@"} ;;
14897cea3689Smrg    esac
14907cea3689Smrg}
14917cea3689Smrg
14927cea3689Smrg
14937cea3689Smrg# func_sort_ver VER1 VER2
14947cea3689Smrg# -----------------------
14957cea3689Smrg# 'sort -V' is not generally available.
14967cea3689Smrg# Note this deviates from the version comparison in automake
14977cea3689Smrg# in that it treats 1.5 < 1.5.0, and treats 1.4.4a < 1.4-p3a
14987cea3689Smrg# but this should suffice as we won't be specifying old
14997cea3689Smrg# version formats or redundant trailing .0 in bootstrap.conf.
15007cea3689Smrg# If we did want full compatibility then we should probably
15017cea3689Smrg# use m4_version_compare from autoconf.
15027cea3689Smrgfunc_sort_ver ()
15037cea3689Smrg{
15047cea3689Smrg    $debug_cmd
15057cea3689Smrg
15067cea3689Smrg    printf '%s\n%s\n' "$1" "$2" \
15077cea3689Smrg      | sort -t. -k 1,1n -k 2,2n -k 3,3n -k 4,4n -k 5,5n -k 6,6n -k 7,7n -k 8,8n -k 9,9n
15087cea3689Smrg}
15097cea3689Smrg
15107cea3689Smrg# func_lt_ver PREV CURR
15117cea3689Smrg# ---------------------
15127cea3689Smrg# Return true if PREV and CURR are in the correct order according to
15137cea3689Smrg# func_sort_ver, otherwise false.  Use it like this:
15147cea3689Smrg#
15157cea3689Smrg#  func_lt_ver "$prev_ver" "$proposed_ver" || func_fatal_error "..."
15167cea3689Smrgfunc_lt_ver ()
15177cea3689Smrg{
15187cea3689Smrg    $debug_cmd
15197cea3689Smrg
15207cea3689Smrg    test "x$1" = x`func_sort_ver "$1" "$2" | $SED 1q`
15217cea3689Smrg}
15227cea3689Smrg
15237cea3689Smrg
15247cea3689Smrg# Local variables:
15257cea3689Smrg# mode: shell-script
15267cea3689Smrg# sh-indentation: 2
15277cea3689Smrg# eval: (add-hook 'before-save-hook 'time-stamp)
15287cea3689Smrg# time-stamp-pattern: "10/scriptversion=%:y-%02m-%02d.%02H; # UTC"
15297cea3689Smrg# time-stamp-time-zone: "UTC"
15307cea3689Smrg# End:
15317cea3689Smrg#! /bin/sh
15327cea3689Smrg
15337cea3689Smrg# A portable, pluggable option parser for Bourne shell.
15347cea3689Smrg# Written by Gary V. Vaughan, 2010
15357cea3689Smrg
153695b7a5c8Smrg# This is free software.  There is NO warranty; not even for
153795b7a5c8Smrg# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
153895b7a5c8Smrg#
153995b7a5c8Smrg# Copyright (C) 2010-2019, 2021 Bootstrap Authors
154095b7a5c8Smrg#
154195b7a5c8Smrg# This file is dual licensed under the terms of the MIT license
154295b7a5c8Smrg# <https://opensource.org/license/MIT>, and GPL version 2 or later
154395b7a5c8Smrg# <http://www.gnu.org/licenses/gpl-2.0.html>.  You must apply one of
154495b7a5c8Smrg# these licenses when using or redistributing this software or any of
154595b7a5c8Smrg# the files within it.  See the URLs above, or the file `LICENSE`
154695b7a5c8Smrg# included in the Bootstrap distribution for the full license texts.
15477cea3689Smrg
154895b7a5c8Smrg# Please report bugs or propose patches to:
154995b7a5c8Smrg# <https://github.com/gnulib-modules/bootstrap/issues>
15507cea3689Smrg
155195b7a5c8Smrg# Set a version string for this script.
155295b7a5c8Smrgscriptversion=2019-02-19.15; # UTC
15537cea3689Smrg
15547cea3689Smrg
15557cea3689Smrg## ------ ##
15567cea3689Smrg## Usage. ##
15577cea3689Smrg## ------ ##
15587cea3689Smrg
15597cea3689Smrg# This file is a library for parsing options in your shell scripts along
15607cea3689Smrg# with assorted other useful supporting features that you can make use
15617cea3689Smrg# of too.
15627cea3689Smrg#
15637cea3689Smrg# For the simplest scripts you might need only:
15647cea3689Smrg#
15657cea3689Smrg#   #!/bin/sh
15667cea3689Smrg#   . relative/path/to/funclib.sh
15677cea3689Smrg#   . relative/path/to/options-parser
15687cea3689Smrg#   scriptversion=1.0
15697cea3689Smrg#   func_options ${1+"$@"}
15707cea3689Smrg#   eval set dummy "$func_options_result"; shift
15717cea3689Smrg#   ...rest of your script...
15727cea3689Smrg#
15737cea3689Smrg# In order for the '--version' option to work, you will need to have a
15747cea3689Smrg# suitably formatted comment like the one at the top of this file
157595b7a5c8Smrg# starting with '# Written by ' and ending with '# Copyright'.
15767cea3689Smrg#
15777cea3689Smrg# For '-h' and '--help' to work, you will also need a one line
15787cea3689Smrg# description of your script's purpose in a comment directly above the
15797cea3689Smrg# '# Written by ' line, like the one at the top of this file.
15807cea3689Smrg#
15817cea3689Smrg# The default options also support '--debug', which will turn on shell
15827cea3689Smrg# execution tracing (see the comment above debug_cmd below for another
15837cea3689Smrg# use), and '--verbose' and the func_verbose function to allow your script
15847cea3689Smrg# to display verbose messages only when your user has specified
15857cea3689Smrg# '--verbose'.
15867cea3689Smrg#
158795b7a5c8Smrg# After sourcing this file, you can plug in processing for additional
15887cea3689Smrg# options by amending the variables from the 'Configuration' section
15897cea3689Smrg# below, and following the instructions in the 'Option parsing'
15907cea3689Smrg# section further down.
15917cea3689Smrg
15927cea3689Smrg## -------------- ##
15937cea3689Smrg## Configuration. ##
15947cea3689Smrg## -------------- ##
15957cea3689Smrg
15967cea3689Smrg# You should override these variables in your script after sourcing this
15977cea3689Smrg# file so that they reflect the customisations you have added to the
15987cea3689Smrg# option parser.
15997cea3689Smrg
16007cea3689Smrg# The usage line for option parsing errors and the start of '-h' and
16017cea3689Smrg# '--help' output messages. You can embed shell variables for delayed
16027cea3689Smrg# expansion at the time the message is displayed, but you will need to
16037cea3689Smrg# quote other shell meta-characters carefully to prevent them being
16047cea3689Smrg# expanded when the contents are evaled.
16057cea3689Smrgusage='$progpath [OPTION]...'
16067cea3689Smrg
16077cea3689Smrg# Short help message in response to '-h' and '--help'.  Add to this or
16087cea3689Smrg# override it after sourcing this library to reflect the full set of
16097cea3689Smrg# options your script accepts.
16107cea3689Smrgusage_message="\
16117cea3689Smrg       --debug        enable verbose shell tracing
16127cea3689Smrg   -W, --warnings=CATEGORY
16137cea3689Smrg                      report the warnings falling in CATEGORY [all]
16147cea3689Smrg   -v, --verbose      verbosely report processing
16157cea3689Smrg       --version      print version information and exit
16167cea3689Smrg   -h, --help         print short or long help message and exit
16177cea3689Smrg"
16187cea3689Smrg
16197cea3689Smrg# Additional text appended to 'usage_message' in response to '--help'.
16207cea3689Smrglong_help_message="
16217cea3689SmrgWarning categories include:
16227cea3689Smrg       'all'          show all warnings
16237cea3689Smrg       'none'         turn off all the warnings
16247cea3689Smrg       'error'        warnings are treated as fatal errors"
16257cea3689Smrg
16267cea3689Smrg# Help message printed before fatal option parsing errors.
16277cea3689Smrgfatal_help="Try '\$progname --help' for more information."
16287cea3689Smrg
16297cea3689Smrg
16307cea3689Smrg
16317cea3689Smrg## ------------------------- ##
16327cea3689Smrg## Hook function management. ##
16337cea3689Smrg## ------------------------- ##
16347cea3689Smrg
16357cea3689Smrg# This section contains functions for adding, removing, and running hooks
163695b7a5c8Smrg# in the main code.  A hook is just a list of function names that can be
163795b7a5c8Smrg# run in order later on.
16387cea3689Smrg
16397cea3689Smrg# func_hookable FUNC_NAME
16407cea3689Smrg# -----------------------
16417cea3689Smrg# Declare that FUNC_NAME will run hooks added with
16427cea3689Smrg# 'func_add_hook FUNC_NAME ...'.
16437cea3689Smrgfunc_hookable ()
16447cea3689Smrg{
16457cea3689Smrg    $debug_cmd
16467cea3689Smrg
16477cea3689Smrg    func_append hookable_fns " $1"
16487cea3689Smrg}
16497cea3689Smrg
16507cea3689Smrg
16517cea3689Smrg# func_add_hook FUNC_NAME HOOK_FUNC
16527cea3689Smrg# ---------------------------------
16537cea3689Smrg# Request that FUNC_NAME call HOOK_FUNC before it returns.  FUNC_NAME must
16547cea3689Smrg# first have been declared "hookable" by a call to 'func_hookable'.
16557cea3689Smrgfunc_add_hook ()
16567cea3689Smrg{
16577cea3689Smrg    $debug_cmd
16587cea3689Smrg
16597cea3689Smrg    case " $hookable_fns " in
16607cea3689Smrg      *" $1 "*) ;;
16617cea3689Smrg      *) func_fatal_error "'$1' does not accept hook functions." ;;
16627cea3689Smrg    esac
16637cea3689Smrg
16647cea3689Smrg    eval func_append ${1}_hooks '" $2"'
16657cea3689Smrg}
16667cea3689Smrg
16677cea3689Smrg
16687cea3689Smrg# func_remove_hook FUNC_NAME HOOK_FUNC
16697cea3689Smrg# ------------------------------------
167095b7a5c8Smrg# Remove HOOK_FUNC from the list of hook functions to be called by
167195b7a5c8Smrg# FUNC_NAME.
16727cea3689Smrgfunc_remove_hook ()
16737cea3689Smrg{
16747cea3689Smrg    $debug_cmd
16757cea3689Smrg
16767cea3689Smrg    eval ${1}_hooks='`$ECHO "\$'$1'_hooks" |$SED "s| '$2'||"`'
16777cea3689Smrg}
16787cea3689Smrg
16797cea3689Smrg
168095b7a5c8Smrg# func_propagate_result FUNC_NAME_A FUNC_NAME_B
168195b7a5c8Smrg# ---------------------------------------------
168295b7a5c8Smrg# If the *_result variable of FUNC_NAME_A _is set_, assign its value to
168395b7a5c8Smrg# *_result variable of FUNC_NAME_B.
168495b7a5c8Smrgfunc_propagate_result ()
168595b7a5c8Smrg{
168695b7a5c8Smrg    $debug_cmd
168795b7a5c8Smrg
168895b7a5c8Smrg    func_propagate_result_result=:
168995b7a5c8Smrg    if eval "test \"\${${1}_result+set}\" = set"
169095b7a5c8Smrg    then
169195b7a5c8Smrg      eval "${2}_result=\$${1}_result"
169295b7a5c8Smrg    else
169395b7a5c8Smrg      func_propagate_result_result=false
169495b7a5c8Smrg    fi
169595b7a5c8Smrg}
169695b7a5c8Smrg
169795b7a5c8Smrg
16987cea3689Smrg# func_run_hooks FUNC_NAME [ARG]...
16997cea3689Smrg# ---------------------------------
17007cea3689Smrg# Run all hook functions registered to FUNC_NAME.
170195b7a5c8Smrg# It's assumed that the list of hook functions contains nothing more
17027cea3689Smrg# than a whitespace-delimited list of legal shell function names, and
17037cea3689Smrg# no effort is wasted trying to catch shell meta-characters or preserve
17047cea3689Smrg# whitespace.
17057cea3689Smrgfunc_run_hooks ()
17067cea3689Smrg{
17077cea3689Smrg    $debug_cmd
17087cea3689Smrg
17097cea3689Smrg    case " $hookable_fns " in
17107cea3689Smrg      *" $1 "*) ;;
171195b7a5c8Smrg      *) func_fatal_error "'$1' does not support hook functions." ;;
17127cea3689Smrg    esac
17137cea3689Smrg
17147cea3689Smrg    eval _G_hook_fns=\$$1_hooks; shift
17157cea3689Smrg
17167cea3689Smrg    for _G_hook in $_G_hook_fns; do
171795b7a5c8Smrg      func_unset "${_G_hook}_result"
171895b7a5c8Smrg      eval $_G_hook '${1+"$@"}'
171995b7a5c8Smrg      func_propagate_result $_G_hook func_run_hooks
172095b7a5c8Smrg      if $func_propagate_result_result; then
172195b7a5c8Smrg        eval set dummy "$func_run_hooks_result"; shift
172295b7a5c8Smrg      fi
17237cea3689Smrg    done
17247cea3689Smrg}
17257cea3689Smrg
17267cea3689Smrg
17277cea3689Smrg
17287cea3689Smrg## --------------- ##
17297cea3689Smrg## Option parsing. ##
17307cea3689Smrg## --------------- ##
17317cea3689Smrg
17327cea3689Smrg# In order to add your own option parsing hooks, you must accept the
173395b7a5c8Smrg# full positional parameter list from your hook function.  You may remove
173495b7a5c8Smrg# or edit any options that you action, and then pass back the remaining
173595b7a5c8Smrg# unprocessed options in '<hooked_function_name>_result', escaped
173695b7a5c8Smrg# suitably for 'eval'.
173795b7a5c8Smrg#
173895b7a5c8Smrg# The '<hooked_function_name>_result' variable is automatically unset
173995b7a5c8Smrg# before your hook gets called; for best performance, only set the
174095b7a5c8Smrg# *_result variable when necessary (i.e. don't call the 'func_quote'
174195b7a5c8Smrg# function unnecessarily because it can be an expensive operation on some
174295b7a5c8Smrg# machines).
174395b7a5c8Smrg#
174495b7a5c8Smrg# Like this:
17457cea3689Smrg#
17467cea3689Smrg#    my_options_prep ()
17477cea3689Smrg#    {
17487cea3689Smrg#        $debug_cmd
17497cea3689Smrg#
17507cea3689Smrg#        # Extend the existing usage message.
17517cea3689Smrg#        usage_message=$usage_message'
17527cea3689Smrg#      -s, --silent       don'\''t print informational messages
17537cea3689Smrg#    '
175495b7a5c8Smrg#        # No change in '$@' (ignored completely by this hook).  Leave
175595b7a5c8Smrg#        # my_options_prep_result variable intact.
17567cea3689Smrg#    }
17577cea3689Smrg#    func_add_hook func_options_prep my_options_prep
17587cea3689Smrg#
17597cea3689Smrg#
17607cea3689Smrg#    my_silent_option ()
17617cea3689Smrg#    {
17627cea3689Smrg#        $debug_cmd
17637cea3689Smrg#
176495b7a5c8Smrg#        args_changed=false
176595b7a5c8Smrg#
176695b7a5c8Smrg#        # Note that, for efficiency, we parse as many options as we can
17677cea3689Smrg#        # recognise in a loop before passing the remainder back to the
17687cea3689Smrg#        # caller on the first unrecognised argument we encounter.
17697cea3689Smrg#        while test $# -gt 0; do
17707cea3689Smrg#          opt=$1; shift
17717cea3689Smrg#          case $opt in
177295b7a5c8Smrg#            --silent|-s) opt_silent=:
177395b7a5c8Smrg#                         args_changed=:
177495b7a5c8Smrg#                         ;;
17757cea3689Smrg#            # Separate non-argument short options:
17767cea3689Smrg#            -s*)         func_split_short_opt "$_G_opt"
17777cea3689Smrg#                         set dummy "$func_split_short_opt_name" \
17787cea3689Smrg#                             "-$func_split_short_opt_arg" ${1+"$@"}
17797cea3689Smrg#                         shift
178095b7a5c8Smrg#                         args_changed=:
17817cea3689Smrg#                         ;;
178295b7a5c8Smrg#            *)           # Make sure the first unrecognised option "$_G_opt"
178395b7a5c8Smrg#                         # is added back to "$@" in case we need it later,
178495b7a5c8Smrg#                         # if $args_changed was set to 'true'.
178595b7a5c8Smrg#                         set dummy "$_G_opt" ${1+"$@"}; shift; break ;;
17867cea3689Smrg#          esac
17877cea3689Smrg#        done
17887cea3689Smrg#
178995b7a5c8Smrg#        # Only call 'func_quote' here if we processed at least one argument.
179095b7a5c8Smrg#        if $args_changed; then
179195b7a5c8Smrg#          func_quote eval ${1+"$@"}
179295b7a5c8Smrg#          my_silent_option_result=$func_quote_result
179395b7a5c8Smrg#        fi
17947cea3689Smrg#    }
17957cea3689Smrg#    func_add_hook func_parse_options my_silent_option
17967cea3689Smrg#
17977cea3689Smrg#
17987cea3689Smrg#    my_option_validation ()
17997cea3689Smrg#    {
18007cea3689Smrg#        $debug_cmd
18017cea3689Smrg#
18027cea3689Smrg#        $opt_silent && $opt_verbose && func_fatal_help "\
18037cea3689Smrg#    '--silent' and '--verbose' options are mutually exclusive."
18047cea3689Smrg#    }
18057cea3689Smrg#    func_add_hook func_validate_options my_option_validation
18067cea3689Smrg#
180795b7a5c8Smrg# You'll also need to manually amend $usage_message to reflect the extra
18087cea3689Smrg# options you parse.  It's preferable to append if you can, so that
18097cea3689Smrg# multiple option parsing hooks can be added safely.
18107cea3689Smrg
18117cea3689Smrg
181295b7a5c8Smrg# func_options_finish [ARG]...
181395b7a5c8Smrg# ----------------------------
181495b7a5c8Smrg# Finishing the option parse loop (call 'func_options' hooks ATM).
181595b7a5c8Smrgfunc_options_finish ()
181695b7a5c8Smrg{
181795b7a5c8Smrg    $debug_cmd
181895b7a5c8Smrg
181995b7a5c8Smrg    func_run_hooks func_options ${1+"$@"}
182095b7a5c8Smrg    func_propagate_result func_run_hooks func_options_finish
182195b7a5c8Smrg}
182295b7a5c8Smrg
182395b7a5c8Smrg
18247cea3689Smrg# func_options [ARG]...
18257cea3689Smrg# ---------------------
18267cea3689Smrg# All the functions called inside func_options are hookable. See the
18277cea3689Smrg# individual implementations for details.
18287cea3689Smrgfunc_hookable func_options
18297cea3689Smrgfunc_options ()
18307cea3689Smrg{
18317cea3689Smrg    $debug_cmd
18327cea3689Smrg
183395b7a5c8Smrg    _G_options_quoted=false
18347cea3689Smrg
183595b7a5c8Smrg    for my_func in options_prep parse_options validate_options options_finish
183695b7a5c8Smrg    do
183795b7a5c8Smrg      func_unset func_${my_func}_result
183895b7a5c8Smrg      func_unset func_run_hooks_result
183995b7a5c8Smrg      eval func_$my_func '${1+"$@"}'
184095b7a5c8Smrg      func_propagate_result func_$my_func func_options
184195b7a5c8Smrg      if $func_propagate_result_result; then
184295b7a5c8Smrg        eval set dummy "$func_options_result"; shift
184395b7a5c8Smrg        _G_options_quoted=:
184495b7a5c8Smrg      fi
184595b7a5c8Smrg    done
18467cea3689Smrg
184795b7a5c8Smrg    $_G_options_quoted || {
184895b7a5c8Smrg      # As we (func_options) are top-level options-parser function and
184995b7a5c8Smrg      # nobody quoted "$@" for us yet, we need to do it explicitly for
185095b7a5c8Smrg      # caller.
185195b7a5c8Smrg      func_quote eval ${1+"$@"}
185295b7a5c8Smrg      func_options_result=$func_quote_result
185395b7a5c8Smrg    }
185427702724Smrg}
185527702724Smrg
185627702724Smrg
18577cea3689Smrg# func_options_prep [ARG]...
18587cea3689Smrg# --------------------------
18597cea3689Smrg# All initialisations required before starting the option parse loop.
18607cea3689Smrg# Note that when calling hook functions, we pass through the list of
18617cea3689Smrg# positional parameters.  If a hook function modifies that list, and
186295b7a5c8Smrg# needs to propagate that back to rest of this script, then the complete
186395b7a5c8Smrg# modified list must be put in 'func_run_hooks_result' before returning.
18647cea3689Smrgfunc_hookable func_options_prep
18657cea3689Smrgfunc_options_prep ()
186627702724Smrg{
18677cea3689Smrg    $debug_cmd
1868e19dfac4Smrg
18697cea3689Smrg    # Option defaults:
18707cea3689Smrg    opt_verbose=false
18717cea3689Smrg    opt_warning_types=
18727cea3689Smrg
18737cea3689Smrg    func_run_hooks func_options_prep ${1+"$@"}
187495b7a5c8Smrg    func_propagate_result func_run_hooks func_options_prep
187527702724Smrg}
187627702724Smrg
187727702724Smrg
18787cea3689Smrg# func_parse_options [ARG]...
18797cea3689Smrg# ---------------------------
18807cea3689Smrg# The main option parsing loop.
18817cea3689Smrgfunc_hookable func_parse_options
18827cea3689Smrgfunc_parse_options ()
188327702724Smrg{
18847cea3689Smrg    $debug_cmd
1885e19dfac4Smrg
188695b7a5c8Smrg    _G_parse_options_requote=false
18877cea3689Smrg    # this just eases exit handling
18887cea3689Smrg    while test $# -gt 0; do
18897cea3689Smrg      # Defer to hook functions for initial option parsing, so they
18907cea3689Smrg      # get priority in the event of reusing an option name.
18917cea3689Smrg      func_run_hooks func_parse_options ${1+"$@"}
189295b7a5c8Smrg      func_propagate_result func_run_hooks func_parse_options
189395b7a5c8Smrg      if $func_propagate_result_result; then
189495b7a5c8Smrg        eval set dummy "$func_parse_options_result"; shift
189595b7a5c8Smrg        # Even though we may have changed "$@", we passed the "$@" array
189695b7a5c8Smrg        # down into the hook and it quoted it for us (because we are in
189795b7a5c8Smrg        # this if-branch).  No need to quote it again.
189895b7a5c8Smrg        _G_parse_options_requote=false
189995b7a5c8Smrg      fi
190027702724Smrg
19017cea3689Smrg      # Break out of the loop if we already parsed every option.
19027cea3689Smrg      test $# -gt 0 || break
190327702724Smrg
190495b7a5c8Smrg      # We expect that one of the options parsed in this function matches
190595b7a5c8Smrg      # and thus we remove _G_opt from "$@" and need to re-quote.
190695b7a5c8Smrg      _G_match_parse_options=:
19077cea3689Smrg      _G_opt=$1
19087cea3689Smrg      shift
19097cea3689Smrg      case $_G_opt in
19107cea3689Smrg        --debug|-x)   debug_cmd='set -x'
191195b7a5c8Smrg                      func_echo "enabling shell trace mode" >&2
19127cea3689Smrg                      $debug_cmd
19137cea3689Smrg                      ;;
19147cea3689Smrg
19157cea3689Smrg        --no-warnings|--no-warning|--no-warn)
19167cea3689Smrg                      set dummy --warnings none ${1+"$@"}
19177cea3689Smrg                      shift
19187cea3689Smrg		      ;;
1919e19dfac4Smrg
19207cea3689Smrg        --warnings|--warning|-W)
192195b7a5c8Smrg                      if test $# = 0 && func_missing_arg $_G_opt; then
192295b7a5c8Smrg                        _G_parse_options_requote=:
192395b7a5c8Smrg                        break
192495b7a5c8Smrg                      fi
19257cea3689Smrg                      case " $warning_categories $1" in
19267cea3689Smrg                        *" $1 "*)
19277cea3689Smrg                          # trailing space prevents matching last $1 above
19287cea3689Smrg                          func_append_uniq opt_warning_types " $1"
19297cea3689Smrg                          ;;
19307cea3689Smrg                        *all)
19317cea3689Smrg                          opt_warning_types=$warning_categories
19327cea3689Smrg                          ;;
19337cea3689Smrg                        *none)
19347cea3689Smrg                          opt_warning_types=none
19357cea3689Smrg                          warning_func=:
19367cea3689Smrg                          ;;
19377cea3689Smrg                        *error)
19387cea3689Smrg                          opt_warning_types=$warning_categories
19397cea3689Smrg                          warning_func=func_fatal_error
19407cea3689Smrg                          ;;
19417cea3689Smrg                        *)
19427cea3689Smrg                          func_fatal_error \
19437cea3689Smrg                             "unsupported warning category: '$1'"
19447cea3689Smrg                          ;;
19457cea3689Smrg                      esac
19467cea3689Smrg                      shift
19477cea3689Smrg                      ;;
19487cea3689Smrg
19497cea3689Smrg        --verbose|-v) opt_verbose=: ;;
19507cea3689Smrg        --version)    func_version ;;
19517cea3689Smrg        -\?|-h)       func_usage ;;
19527cea3689Smrg        --help)       func_help ;;
19537cea3689Smrg
19547cea3689Smrg	# Separate optargs to long options (plugins may need this):
19557cea3689Smrg	--*=*)        func_split_equals "$_G_opt"
19567cea3689Smrg	              set dummy "$func_split_equals_lhs" \
19577cea3689Smrg                          "$func_split_equals_rhs" ${1+"$@"}
19587cea3689Smrg                      shift
19597cea3689Smrg                      ;;
19607cea3689Smrg
19617cea3689Smrg       # Separate optargs to short options:
19627cea3689Smrg        -W*)
19637cea3689Smrg                      func_split_short_opt "$_G_opt"
19647cea3689Smrg                      set dummy "$func_split_short_opt_name" \
19657cea3689Smrg                          "$func_split_short_opt_arg" ${1+"$@"}
19667cea3689Smrg                      shift
19677cea3689Smrg                      ;;
19687cea3689Smrg
19697cea3689Smrg        # Separate non-argument short options:
19707cea3689Smrg        -\?*|-h*|-v*|-x*)
19717cea3689Smrg                      func_split_short_opt "$_G_opt"
19727cea3689Smrg                      set dummy "$func_split_short_opt_name" \
19737cea3689Smrg                          "-$func_split_short_opt_arg" ${1+"$@"}
19747cea3689Smrg                      shift
19757cea3689Smrg                      ;;
19767cea3689Smrg
197795b7a5c8Smrg        --)           _G_parse_options_requote=: ; break ;;
19787cea3689Smrg        -*)           func_fatal_help "unrecognised option: '$_G_opt'" ;;
197995b7a5c8Smrg        *)            set dummy "$_G_opt" ${1+"$@"}; shift
198095b7a5c8Smrg                      _G_match_parse_options=false
198195b7a5c8Smrg                      break
198295b7a5c8Smrg                      ;;
19837cea3689Smrg      esac
198495b7a5c8Smrg
198595b7a5c8Smrg      if $_G_match_parse_options; then
198695b7a5c8Smrg        _G_parse_options_requote=:
198795b7a5c8Smrg      fi
19887cea3689Smrg    done
19897cea3689Smrg
199095b7a5c8Smrg    if $_G_parse_options_requote; then
199195b7a5c8Smrg      # save modified positional parameters for caller
199295b7a5c8Smrg      func_quote eval ${1+"$@"}
199395b7a5c8Smrg      func_parse_options_result=$func_quote_result
199495b7a5c8Smrg    fi
199527702724Smrg}
199627702724Smrg
1997e19dfac4Smrg
19987cea3689Smrg# func_validate_options [ARG]...
19997cea3689Smrg# ------------------------------
20007cea3689Smrg# Perform any sanity checks on option settings and/or unconsumed
20017cea3689Smrg# arguments.
20027cea3689Smrgfunc_hookable func_validate_options
20037cea3689Smrgfunc_validate_options ()
200427702724Smrg{
20057cea3689Smrg    $debug_cmd
200627702724Smrg
20077cea3689Smrg    # Display all warnings if -W was not given.
20087cea3689Smrg    test -n "$opt_warning_types" || opt_warning_types=" $warning_categories"
2009e19dfac4Smrg
20107cea3689Smrg    func_run_hooks func_validate_options ${1+"$@"}
201195b7a5c8Smrg    func_propagate_result func_run_hooks func_validate_options
201227702724Smrg
20137cea3689Smrg    # Bail if the options were screwed!
20147cea3689Smrg    $exit_cmd $EXIT_FAILURE
2015313a12fdSmrg}
2016e19dfac4Smrg
2017e19dfac4Smrg
2018313a12fdSmrg
20197cea3689Smrg## ----------------- ##
20207cea3689Smrg## Helper functions. ##
20217cea3689Smrg## ----------------- ##
2022e19dfac4Smrg
20237cea3689Smrg# This section contains the helper functions used by the rest of the
20247cea3689Smrg# hookable option parser framework in ascii-betical order.
20257cea3689Smrg
20267cea3689Smrg
20277cea3689Smrg# func_fatal_help ARG...
20287cea3689Smrg# ----------------------
20297cea3689Smrg# Echo program name prefixed message to standard error, followed by
20307cea3689Smrg# a help hint, and exit.
20317cea3689Smrgfunc_fatal_help ()
2032e19dfac4Smrg{
20337cea3689Smrg    $debug_cmd
2034313a12fdSmrg
20357cea3689Smrg    eval \$ECHO \""Usage: $usage"\"
20367cea3689Smrg    eval \$ECHO \""$fatal_help"\"
20377cea3689Smrg    func_error ${1+"$@"}
20387cea3689Smrg    exit $EXIT_FAILURE
2039e19dfac4Smrg}
2040e19dfac4Smrg
20417cea3689Smrg
20427cea3689Smrg# func_help
20437cea3689Smrg# ---------
20447cea3689Smrg# Echo long help message to standard output and exit.
2045e19dfac4Smrgfunc_help ()
2046e19dfac4Smrg{
20477cea3689Smrg    $debug_cmd
20487cea3689Smrg
20497cea3689Smrg    func_usage_message
20507cea3689Smrg    $ECHO "$long_help_message"
20517cea3689Smrg    exit 0
2052e19dfac4Smrg}
2053e19dfac4Smrg
20547cea3689Smrg
20557cea3689Smrg# func_missing_arg ARGNAME
20567cea3689Smrg# ------------------------
2057e19dfac4Smrg# Echo program name prefixed message to standard error and set global
2058e19dfac4Smrg# exit_cmd.
2059e19dfac4Smrgfunc_missing_arg ()
2060e19dfac4Smrg{
20617cea3689Smrg    $debug_cmd
2062313a12fdSmrg
20637cea3689Smrg    func_error "Missing argument for '$1'."
2064e19dfac4Smrg    exit_cmd=exit
2065e19dfac4Smrg}
2066e19dfac4Smrg
2067e19dfac4Smrg
20687cea3689Smrg# func_split_equals STRING
20697cea3689Smrg# ------------------------
207095b7a5c8Smrg# Set func_split_equals_lhs and func_split_equals_rhs shell variables
207195b7a5c8Smrg# after splitting STRING at the '=' sign.
20727cea3689Smrgtest -z "$_G_HAVE_XSI_OPS" \
20737cea3689Smrg    && (eval 'x=a/b/c;
20747cea3689Smrg      test 5aa/bb/cc = "${#x}${x%%/*}${x%/*}${x#*/}${x##*/}"') 2>/dev/null \
20757cea3689Smrg    && _G_HAVE_XSI_OPS=yes
20767cea3689Smrg
20777cea3689Smrgif test yes = "$_G_HAVE_XSI_OPS"
20787cea3689Smrgthen
20797cea3689Smrg  # This is an XSI compatible shell, allowing a faster implementation...
20807cea3689Smrg  eval 'func_split_equals ()
20817cea3689Smrg  {
20827cea3689Smrg      $debug_cmd
20837cea3689Smrg
20847cea3689Smrg      func_split_equals_lhs=${1%%=*}
20857cea3689Smrg      func_split_equals_rhs=${1#*=}
208695b7a5c8Smrg      if test "x$func_split_equals_lhs" = "x$1"; then
208795b7a5c8Smrg        func_split_equals_rhs=
208895b7a5c8Smrg      fi
20897cea3689Smrg  }'
20907cea3689Smrgelse
20917cea3689Smrg  # ...otherwise fall back to using expr, which is often a shell builtin.
20927cea3689Smrg  func_split_equals ()
20937cea3689Smrg  {
20947cea3689Smrg      $debug_cmd
20957cea3689Smrg
20967cea3689Smrg      func_split_equals_lhs=`expr "x$1" : 'x\([^=]*\)'`
20977cea3689Smrg      func_split_equals_rhs=
209895b7a5c8Smrg      test "x$func_split_equals_lhs=" = "x$1" \
20997cea3689Smrg        || func_split_equals_rhs=`expr "x$1" : 'x[^=]*=\(.*\)$'`
21007cea3689Smrg  }
21017cea3689Smrgfi #func_split_equals
21027cea3689Smrg
21037cea3689Smrg
21047cea3689Smrg# func_split_short_opt SHORTOPT
21057cea3689Smrg# -----------------------------
2106313a12fdSmrg# Set func_split_short_opt_name and func_split_short_opt_arg shell
2107313a12fdSmrg# variables after splitting SHORTOPT after the 2nd character.
21087cea3689Smrgif test yes = "$_G_HAVE_XSI_OPS"
21097cea3689Smrgthen
21107cea3689Smrg  # This is an XSI compatible shell, allowing a faster implementation...
21117cea3689Smrg  eval 'func_split_short_opt ()
21127cea3689Smrg  {
21137cea3689Smrg      $debug_cmd
21147cea3689Smrg
21157cea3689Smrg      func_split_short_opt_arg=${1#??}
21167cea3689Smrg      func_split_short_opt_name=${1%"$func_split_short_opt_arg"}
21177cea3689Smrg  }'
21187cea3689Smrgelse
21197cea3689Smrg  # ...otherwise fall back to using expr, which is often a shell builtin.
21207cea3689Smrg  func_split_short_opt ()
21217cea3689Smrg  {
21227cea3689Smrg      $debug_cmd
21237cea3689Smrg
212495b7a5c8Smrg      func_split_short_opt_name=`expr "x$1" : 'x\(-.\)'`
21257cea3689Smrg      func_split_short_opt_arg=`expr "x$1" : 'x-.\(.*\)$'`
21267cea3689Smrg  }
21277cea3689Smrgfi #func_split_short_opt
21287cea3689Smrg
21297cea3689Smrg
21307cea3689Smrg# func_usage
21317cea3689Smrg# ----------
21327cea3689Smrg# Echo short help message to standard output and exit.
21337cea3689Smrgfunc_usage ()
2134313a12fdSmrg{
21357cea3689Smrg    $debug_cmd
2136313a12fdSmrg
21377cea3689Smrg    func_usage_message
21387cea3689Smrg    $ECHO "Run '$progname --help |${PAGER-more}' for full usage"
21397cea3689Smrg    exit 0
21407cea3689Smrg}
2141e19dfac4Smrg
2142e19dfac4Smrg
21437cea3689Smrg# func_usage_message
21447cea3689Smrg# ------------------
21457cea3689Smrg# Echo short help message to standard output.
21467cea3689Smrgfunc_usage_message ()
2147313a12fdSmrg{
21487cea3689Smrg    $debug_cmd
2149313a12fdSmrg
21507cea3689Smrg    eval \$ECHO \""Usage: $usage"\"
21517cea3689Smrg    echo
21527cea3689Smrg    $SED -n 's|^# ||
21537cea3689Smrg        /^Written by/{
21547cea3689Smrg          x;p;x
21557cea3689Smrg        }
21567cea3689Smrg	h
21577cea3689Smrg	/^Written by/q' < "$progpath"
21587cea3689Smrg    echo
21597cea3689Smrg    eval \$ECHO \""$usage_message"\"
21607cea3689Smrg}
2161313a12fdSmrg
2162313a12fdSmrg
21637cea3689Smrg# func_version
21647cea3689Smrg# ------------
21657cea3689Smrg# Echo version message to standard output and exit.
216695b7a5c8Smrg# The version message is extracted from the calling file's header
216795b7a5c8Smrg# comments, with leading '# ' stripped:
216895b7a5c8Smrg#   1. First display the progname and version
216995b7a5c8Smrg#   2. Followed by the header comment line matching  /^# Written by /
217095b7a5c8Smrg#   3. Then a blank line followed by the first following line matching
217195b7a5c8Smrg#      /^# Copyright /
217295b7a5c8Smrg#   4. Immediately followed by any lines between the previous matches,
217395b7a5c8Smrg#      except lines preceding the intervening completely blank line.
217495b7a5c8Smrg# For example, see the header comments of this file.
21757cea3689Smrgfunc_version ()
21767cea3689Smrg{
21777cea3689Smrg    $debug_cmd
2178e19dfac4Smrg
21797cea3689Smrg    printf '%s\n' "$progname $scriptversion"
21807cea3689Smrg    $SED -n '
218195b7a5c8Smrg        /^# Written by /!b
218295b7a5c8Smrg        s|^# ||; p; n
218395b7a5c8Smrg
218495b7a5c8Smrg        :fwd2blnk
218595b7a5c8Smrg        /./ {
218695b7a5c8Smrg          n
218795b7a5c8Smrg          b fwd2blnk
21887cea3689Smrg        }
218995b7a5c8Smrg        p; n
219095b7a5c8Smrg
219195b7a5c8Smrg        :holdwrnt
219295b7a5c8Smrg        s|^# ||
219395b7a5c8Smrg        s|^# *$||
219495b7a5c8Smrg        /^Copyright /!{
219595b7a5c8Smrg          /./H
219695b7a5c8Smrg          n
219795b7a5c8Smrg          b holdwrnt
21987cea3689Smrg        }
219995b7a5c8Smrg
220095b7a5c8Smrg        s|\((C)\)[ 0-9,-]*[ ,-]\([1-9][0-9]* \)|\1 \2|
220195b7a5c8Smrg        G
220295b7a5c8Smrg        s|\(\n\)\n*|\1|g
220395b7a5c8Smrg        p; q' < "$progpath"
2204e19dfac4Smrg
22057cea3689Smrg    exit $?
22067cea3689Smrg}
220727702724Smrg
220827702724Smrg
22097cea3689Smrg# Local variables:
22107cea3689Smrg# mode: shell-script
22117cea3689Smrg# sh-indentation: 2
22127cea3689Smrg# eval: (add-hook 'before-save-hook 'time-stamp)
221395b7a5c8Smrg# time-stamp-pattern: "30/scriptversion=%:y-%02m-%02d.%02H; # UTC"
22147cea3689Smrg# time-stamp-time-zone: "UTC"
22157cea3689Smrg# End:
221627702724Smrg
22177cea3689Smrg# Set a version string.
221895b7a5c8Smrgscriptversion='(GNU libtool) 2.4.7'
221927702724Smrg
222027702724Smrg
22217cea3689Smrg# func_echo ARG...
22227cea3689Smrg# ----------------
22237cea3689Smrg# Libtool also displays the current mode in messages, so override
22247cea3689Smrg# funclib.sh func_echo with this custom definition.
22257cea3689Smrgfunc_echo ()
2226313a12fdSmrg{
22277cea3689Smrg    $debug_cmd
2228313a12fdSmrg
22297cea3689Smrg    _G_message=$*
2230313a12fdSmrg
22317cea3689Smrg    func_echo_IFS=$IFS
22327cea3689Smrg    IFS=$nl
22337cea3689Smrg    for _G_line in $_G_message; do
22347cea3689Smrg      IFS=$func_echo_IFS
22357cea3689Smrg      $ECHO "$progname${opt_mode+: $opt_mode}: $_G_line"
22367cea3689Smrg    done
22377cea3689Smrg    IFS=$func_echo_IFS
22387cea3689Smrg}
2239313a12fdSmrg
22407cea3689Smrg
22417cea3689Smrg# func_warning ARG...
22427cea3689Smrg# -------------------
22437cea3689Smrg# Libtool warnings are not categorized, so override funclib.sh
22447cea3689Smrg# func_warning with this simpler definition.
22457cea3689Smrgfunc_warning ()
2246313a12fdSmrg{
22477cea3689Smrg    $debug_cmd
2248313a12fdSmrg
22497cea3689Smrg    $warning_func ${1+"$@"}
22507cea3689Smrg}
2251313a12fdSmrg
2252313a12fdSmrg
22537cea3689Smrg## ---------------- ##
22547cea3689Smrg## Options parsing. ##
22557cea3689Smrg## ---------------- ##
22567cea3689Smrg
22577cea3689Smrg# Hook in the functions to make sure our own options are parsed during
22587cea3689Smrg# the option parsing loop.
22597cea3689Smrg
22607cea3689Smrgusage='$progpath [OPTION]... [MODE-ARG]...'
22617cea3689Smrg
22627cea3689Smrg# Short help message in response to '-h'.
22637cea3689Smrgusage_message="Options:
22647cea3689Smrg       --config             show all configuration variables
22657cea3689Smrg       --debug              enable verbose shell tracing
22667cea3689Smrg   -n, --dry-run            display commands without modifying any files
22677cea3689Smrg       --features           display basic configuration information and exit
22687cea3689Smrg       --mode=MODE          use operation mode MODE
22697cea3689Smrg       --no-warnings        equivalent to '-Wnone'
22707cea3689Smrg       --preserve-dup-deps  don't remove duplicate dependency libraries
22717cea3689Smrg       --quiet, --silent    don't print informational messages
22727cea3689Smrg       --tag=TAG            use configuration variables from tag TAG
22737cea3689Smrg   -v, --verbose            print more informational messages than default
22747cea3689Smrg       --version            print version information
22757cea3689Smrg   -W, --warnings=CATEGORY  report the warnings falling in CATEGORY [all]
22767cea3689Smrg   -h, --help, --help-all   print short, long, or detailed help message
22777cea3689Smrg"
2278313a12fdSmrg
22797cea3689Smrg# Additional text appended to 'usage_message' in response to '--help'.
22807cea3689Smrgfunc_help ()
2281313a12fdSmrg{
22827cea3689Smrg    $debug_cmd
22837cea3689Smrg
22847cea3689Smrg    func_usage_message
22857cea3689Smrg    $ECHO "$long_help_message
22867cea3689Smrg
22877cea3689SmrgMODE must be one of the following:
22887cea3689Smrg
22897cea3689Smrg       clean           remove files from the build directory
22907cea3689Smrg       compile         compile a source file into a libtool object
22917cea3689Smrg       execute         automatically set library path, then run a program
22927cea3689Smrg       finish          complete the installation of libtool libraries
22937cea3689Smrg       install         install libraries or executables
22947cea3689Smrg       link            create a library or an executable
22957cea3689Smrg       uninstall       remove libraries from an installed directory
22967cea3689Smrg
22977cea3689SmrgMODE-ARGS vary depending on the MODE.  When passed as first option,
22987cea3689Smrg'--mode=MODE' may be abbreviated as 'MODE' or a unique abbreviation of that.
22997cea3689SmrgTry '$progname --help --mode=MODE' for a more detailed description of MODE.
23007cea3689Smrg
23017cea3689SmrgWhen reporting a bug, please describe a test case to reproduce it and
23027cea3689Smrginclude the following information:
23037cea3689Smrg
23047cea3689Smrg       host-triplet:   $host
23057cea3689Smrg       shell:          $SHELL
23067cea3689Smrg       compiler:       $LTCC
23077cea3689Smrg       compiler flags: $LTCFLAGS
23087cea3689Smrg       linker:         $LD (gnu? $with_gnu_ld)
230995b7a5c8Smrg       version:        $progname (GNU libtool) 2.4.7
23107cea3689Smrg       automake:       `($AUTOMAKE --version) 2>/dev/null |$SED 1q`
23117cea3689Smrg       autoconf:       `($AUTOCONF --version) 2>/dev/null |$SED 1q`
23127cea3689Smrg
23137cea3689SmrgReport bugs to <bug-libtool@gnu.org>.
231495b7a5c8SmrgGNU libtool home page: <http://www.gnu.org/software/libtool/>.
23157cea3689SmrgGeneral help using GNU software: <http://www.gnu.org/gethelp/>."
23167cea3689Smrg    exit 0
23177cea3689Smrg}
2318313a12fdSmrg
2319313a12fdSmrg
23207cea3689Smrg# func_lo2o OBJECT-NAME
23217cea3689Smrg# ---------------------
23227cea3689Smrg# Transform OBJECT-NAME from a '.lo' suffix to the platform specific
23237cea3689Smrg# object suffix.
23247cea3689Smrg
23257cea3689Smrglo2o=s/\\.lo\$/.$objext/
23267cea3689Smrgo2lo=s/\\.$objext\$/.lo/
23277cea3689Smrg
23287cea3689Smrgif test yes = "$_G_HAVE_XSI_OPS"; then
23297cea3689Smrg  eval 'func_lo2o ()
23307cea3689Smrg  {
23317cea3689Smrg    case $1 in
23327cea3689Smrg      *.lo) func_lo2o_result=${1%.lo}.$objext ;;
23337cea3689Smrg      *   ) func_lo2o_result=$1               ;;
23347cea3689Smrg    esac
23357cea3689Smrg  }'
23367cea3689Smrg
23377cea3689Smrg  # func_xform LIBOBJ-OR-SOURCE
23387cea3689Smrg  # ---------------------------
23397cea3689Smrg  # Transform LIBOBJ-OR-SOURCE from a '.o' or '.c' (or otherwise)
23407cea3689Smrg  # suffix to a '.lo' libtool-object suffix.
23417cea3689Smrg  eval 'func_xform ()
23427cea3689Smrg  {
23437cea3689Smrg    func_xform_result=${1%.*}.lo
23447cea3689Smrg  }'
23457cea3689Smrgelse
23467cea3689Smrg  # ...otherwise fall back to using sed.
23477cea3689Smrg  func_lo2o ()
23487cea3689Smrg  {
23497cea3689Smrg    func_lo2o_result=`$ECHO "$1" | $SED "$lo2o"`
23507cea3689Smrg  }
23517cea3689Smrg
23527cea3689Smrg  func_xform ()
23537cea3689Smrg  {
23547cea3689Smrg    func_xform_result=`$ECHO "$1" | $SED 's|\.[^.]*$|.lo|'`
23557cea3689Smrg  }
23567cea3689Smrgfi
2357313a12fdSmrg
2358313a12fdSmrg
23597cea3689Smrg# func_fatal_configuration ARG...
23607cea3689Smrg# -------------------------------
2361e19dfac4Smrg# Echo program name prefixed message to standard error, followed by
2362e19dfac4Smrg# a configuration failure hint, and exit.
2363e19dfac4Smrgfunc_fatal_configuration ()
2364e19dfac4Smrg{
236595b7a5c8Smrg    func_fatal_error ${1+"$@"} \
23667cea3689Smrg      "See the $PACKAGE documentation for more information." \
23677cea3689Smrg      "Fatal configuration error."
2368e19dfac4Smrg}
2369e19dfac4Smrg
2370e19dfac4Smrg
2371e19dfac4Smrg# func_config
23727cea3689Smrg# -----------
2373e19dfac4Smrg# Display the configuration for all the tags in this script.
2374e19dfac4Smrgfunc_config ()
2375e19dfac4Smrg{
2376e19dfac4Smrg    re_begincf='^# ### BEGIN LIBTOOL'
2377e19dfac4Smrg    re_endcf='^# ### END LIBTOOL'
2378e19dfac4Smrg
2379e19dfac4Smrg    # Default configuration.
2380e19dfac4Smrg    $SED "1,/$re_begincf CONFIG/d;/$re_endcf CONFIG/,\$d" < "$progpath"
238127702724Smrg
238227702724Smrg    # Now print the configurations for the tags.
238327702724Smrg    for tagname in $taglist; do
2384e19dfac4Smrg      $SED -n "/$re_begincf TAG CONFIG: $tagname\$/,/$re_endcf TAG CONFIG: $tagname\$/p" < "$progpath"
238527702724Smrg    done
238627702724Smrg
2387e19dfac4Smrg    exit $?
2388e19dfac4Smrg}
238927702724Smrg
23907cea3689Smrg
2391e19dfac4Smrg# func_features
23927cea3689Smrg# -------------
2393e19dfac4Smrg# Display the features supported by this script.
2394e19dfac4Smrgfunc_features ()
2395e19dfac4Smrg{
2396313a12fdSmrg    echo "host: $host"
23977cea3689Smrg    if test yes = "$build_libtool_libs"; then
2398313a12fdSmrg      echo "enable shared libraries"
239927702724Smrg    else
2400313a12fdSmrg      echo "disable shared libraries"
240127702724Smrg    fi
24027cea3689Smrg    if test yes = "$build_old_libs"; then
2403313a12fdSmrg      echo "enable static libraries"
240427702724Smrg    else
2405313a12fdSmrg      echo "disable static libraries"
240627702724Smrg    fi
2407e19dfac4Smrg
240827702724Smrg    exit $?
2409e19dfac4Smrg}
2410e19dfac4Smrg
24117cea3689Smrg
24127cea3689Smrg# func_enable_tag TAGNAME
24137cea3689Smrg# -----------------------
2414e19dfac4Smrg# Verify that TAGNAME is valid, and either flag an error and exit, or
2415e19dfac4Smrg# enable the TAGNAME tag.  We also add TAGNAME to the global $taglist
2416e19dfac4Smrg# variable here.
2417e19dfac4Smrgfunc_enable_tag ()
2418e19dfac4Smrg{
24197cea3689Smrg    # Global variable:
24207cea3689Smrg    tagname=$1
242127702724Smrg
24227cea3689Smrg    re_begincf="^# ### BEGIN LIBTOOL TAG CONFIG: $tagname\$"
24237cea3689Smrg    re_endcf="^# ### END LIBTOOL TAG CONFIG: $tagname\$"
24247cea3689Smrg    sed_extractcf=/$re_begincf/,/$re_endcf/p
242527702724Smrg
24267cea3689Smrg    # Validate tagname.
24277cea3689Smrg    case $tagname in
24287cea3689Smrg      *[!-_A-Za-z0-9,/]*)
24297cea3689Smrg        func_fatal_error "invalid tag name: $tagname"
24307cea3689Smrg        ;;
24317cea3689Smrg    esac
243227702724Smrg
24337cea3689Smrg    # Don't test for the "default" C tag, as we know it's
24347cea3689Smrg    # there but not specially marked.
24357cea3689Smrg    case $tagname in
24367cea3689Smrg        CC) ;;
2437e19dfac4Smrg    *)
24387cea3689Smrg        if $GREP "$re_begincf" "$progpath" >/dev/null 2>&1; then
24397cea3689Smrg	  taglist="$taglist $tagname"
24407cea3689Smrg
24417cea3689Smrg	  # Evaluate the configuration.  Be careful to quote the path
24427cea3689Smrg	  # and the sed script, to avoid splitting on whitespace, but
24437cea3689Smrg	  # also don't use non-portable quotes within backquotes within
24447cea3689Smrg	  # quotes we have to do it in 2 steps:
24457cea3689Smrg	  extractedcf=`$SED -n -e "$sed_extractcf" < "$progpath"`
24467cea3689Smrg	  eval "$extractedcf"
24477cea3689Smrg        else
24487cea3689Smrg	  func_error "ignoring unknown tag $tagname"
24497cea3689Smrg        fi
24507cea3689Smrg        ;;
24517cea3689Smrg    esac
2452e19dfac4Smrg}
245327702724Smrg
24547cea3689Smrg
2455313a12fdSmrg# func_check_version_match
24567cea3689Smrg# ------------------------
2457313a12fdSmrg# Ensure that we are using m4 macros, and libtool script from the same
2458313a12fdSmrg# release of libtool.
2459313a12fdSmrgfunc_check_version_match ()
2460e19dfac4Smrg{
24617cea3689Smrg    if test "$package_revision" != "$macro_revision"; then
24627cea3689Smrg      if test "$VERSION" != "$macro_version"; then
24637cea3689Smrg        if test -z "$macro_version"; then
24647cea3689Smrg          cat >&2 <<_LT_EOF
2465313a12fdSmrg$progname: Version mismatch error.  This is $PACKAGE $VERSION, but the
2466313a12fdSmrg$progname: definition of this LT_INIT comes from an older release.
2467313a12fdSmrg$progname: You should recreate aclocal.m4 with macros from $PACKAGE $VERSION
2468313a12fdSmrg$progname: and run autoconf again.
2469313a12fdSmrg_LT_EOF
24707cea3689Smrg        else
24717cea3689Smrg          cat >&2 <<_LT_EOF
2472313a12fdSmrg$progname: Version mismatch error.  This is $PACKAGE $VERSION, but the
2473313a12fdSmrg$progname: definition of this LT_INIT comes from $PACKAGE $macro_version.
2474313a12fdSmrg$progname: You should recreate aclocal.m4 with macros from $PACKAGE $VERSION
2475313a12fdSmrg$progname: and run autoconf again.
2476313a12fdSmrg_LT_EOF
24777cea3689Smrg        fi
24787cea3689Smrg      else
24797cea3689Smrg        cat >&2 <<_LT_EOF
2480313a12fdSmrg$progname: Version mismatch error.  This is $PACKAGE $VERSION, revision $package_revision,
2481313a12fdSmrg$progname: but the definition of this LT_INIT comes from revision $macro_revision.
2482313a12fdSmrg$progname: You should recreate aclocal.m4 with macros from revision $package_revision
2483313a12fdSmrg$progname: of $PACKAGE $VERSION and run autoconf again.
2484313a12fdSmrg_LT_EOF
24857cea3689Smrg      fi
2486313a12fdSmrg
24877cea3689Smrg      exit $EXIT_MISMATCH
24887cea3689Smrg    fi
2489313a12fdSmrg}
2490313a12fdSmrg
2491313a12fdSmrg
24927cea3689Smrg# libtool_options_prep [ARG]...
24937cea3689Smrg# -----------------------------
24947cea3689Smrg# Preparation for options parsed by libtool.
24957cea3689Smrglibtool_options_prep ()
24967cea3689Smrg{
24977cea3689Smrg    $debug_mode
249827702724Smrg
24997cea3689Smrg    # Option defaults:
25007cea3689Smrg    opt_config=false
25017cea3689Smrg    opt_dlopen=
25027cea3689Smrg    opt_dry_run=false
25037cea3689Smrg    opt_help=false
25047cea3689Smrg    opt_mode=
25057cea3689Smrg    opt_preserve_dup_deps=false
25067cea3689Smrg    opt_quiet=false
250727702724Smrg
25087cea3689Smrg    nonopt=
25097cea3689Smrg    preserve_args=
2510313a12fdSmrg
251195b7a5c8Smrg    _G_rc_lt_options_prep=:
251295b7a5c8Smrg
25137cea3689Smrg    # Shorthand for --mode=foo, only valid as the first argument
25147cea3689Smrg    case $1 in
25157cea3689Smrg    clean|clea|cle|cl)
25167cea3689Smrg      shift; set dummy --mode clean ${1+"$@"}; shift
25177cea3689Smrg      ;;
25187cea3689Smrg    compile|compil|compi|comp|com|co|c)
25197cea3689Smrg      shift; set dummy --mode compile ${1+"$@"}; shift
25207cea3689Smrg      ;;
25217cea3689Smrg    execute|execut|execu|exec|exe|ex|e)
25227cea3689Smrg      shift; set dummy --mode execute ${1+"$@"}; shift
25237cea3689Smrg      ;;
25247cea3689Smrg    finish|finis|fini|fin|fi|f)
25257cea3689Smrg      shift; set dummy --mode finish ${1+"$@"}; shift
25267cea3689Smrg      ;;
25277cea3689Smrg    install|instal|insta|inst|ins|in|i)
25287cea3689Smrg      shift; set dummy --mode install ${1+"$@"}; shift
25297cea3689Smrg      ;;
25307cea3689Smrg    link|lin|li|l)
25317cea3689Smrg      shift; set dummy --mode link ${1+"$@"}; shift
25327cea3689Smrg      ;;
25337cea3689Smrg    uninstall|uninstal|uninsta|uninst|unins|unin|uni|un|u)
25347cea3689Smrg      shift; set dummy --mode uninstall ${1+"$@"}; shift
25357cea3689Smrg      ;;
253695b7a5c8Smrg    *)
253795b7a5c8Smrg      _G_rc_lt_options_prep=false
253895b7a5c8Smrg      ;;
25397cea3689Smrg    esac
25407cea3689Smrg
254195b7a5c8Smrg    if $_G_rc_lt_options_prep; then
254295b7a5c8Smrg      # Pass back the list of options.
254395b7a5c8Smrg      func_quote eval ${1+"$@"}
254495b7a5c8Smrg      libtool_options_prep_result=$func_quote_result
254595b7a5c8Smrg    fi
25467cea3689Smrg}
25477cea3689Smrgfunc_add_hook func_options_prep libtool_options_prep
2548313a12fdSmrg
2549313a12fdSmrg
25507cea3689Smrg# libtool_parse_options [ARG]...
25517cea3689Smrg# ---------------------------------
25527cea3689Smrg# Provide handling for libtool specific options.
25537cea3689Smrglibtool_parse_options ()
2554313a12fdSmrg{
25557cea3689Smrg    $debug_cmd
2556e19dfac4Smrg
255795b7a5c8Smrg    _G_rc_lt_parse_options=false
255895b7a5c8Smrg
25597cea3689Smrg    # Perform our own loop to consume as many options as possible in
25607cea3689Smrg    # each iteration.
25617cea3689Smrg    while test $# -gt 0; do
256295b7a5c8Smrg      _G_match_lt_parse_options=:
25637cea3689Smrg      _G_opt=$1
25647cea3689Smrg      shift
25657cea3689Smrg      case $_G_opt in
25667cea3689Smrg        --dry-run|--dryrun|-n)
25677cea3689Smrg                        opt_dry_run=:
25687cea3689Smrg                        ;;
25697cea3689Smrg
25707cea3689Smrg        --config)       func_config ;;
25717cea3689Smrg
25727cea3689Smrg        --dlopen|-dlopen)
25737cea3689Smrg                        opt_dlopen="${opt_dlopen+$opt_dlopen
25747cea3689Smrg}$1"
25757cea3689Smrg                        shift
25767cea3689Smrg                        ;;
25777cea3689Smrg
25787cea3689Smrg        --preserve-dup-deps)
25797cea3689Smrg                        opt_preserve_dup_deps=: ;;
25807cea3689Smrg
25817cea3689Smrg        --features)     func_features ;;
25827cea3689Smrg
25837cea3689Smrg        --finish)       set dummy --mode finish ${1+"$@"}; shift ;;
25847cea3689Smrg
25857cea3689Smrg        --help)         opt_help=: ;;
25867cea3689Smrg
25877cea3689Smrg        --help-all)     opt_help=': help-all' ;;
25887cea3689Smrg
25897cea3689Smrg        --mode)         test $# = 0 && func_missing_arg $_G_opt && break
25907cea3689Smrg                        opt_mode=$1
25917cea3689Smrg                        case $1 in
25927cea3689Smrg                          # Valid mode arguments:
25937cea3689Smrg                          clean|compile|execute|finish|install|link|relink|uninstall) ;;
25947cea3689Smrg
25957cea3689Smrg                          # Catch anything else as an error
25967cea3689Smrg                          *) func_error "invalid argument for $_G_opt"
25977cea3689Smrg                             exit_cmd=exit
25987cea3689Smrg                             break
25997cea3689Smrg                             ;;
26007cea3689Smrg                        esac
26017cea3689Smrg                        shift
26027cea3689Smrg                        ;;
26037cea3689Smrg
26047cea3689Smrg        --no-silent|--no-quiet)
26057cea3689Smrg                        opt_quiet=false
26067cea3689Smrg                        func_append preserve_args " $_G_opt"
26077cea3689Smrg                        ;;
26087cea3689Smrg
26097cea3689Smrg        --no-warnings|--no-warning|--no-warn)
26107cea3689Smrg                        opt_warning=false
26117cea3689Smrg                        func_append preserve_args " $_G_opt"
26127cea3689Smrg                        ;;
26137cea3689Smrg
26147cea3689Smrg        --no-verbose)
26157cea3689Smrg                        opt_verbose=false
26167cea3689Smrg                        func_append preserve_args " $_G_opt"
26177cea3689Smrg                        ;;
26187cea3689Smrg
26197cea3689Smrg        --silent|--quiet)
26207cea3689Smrg                        opt_quiet=:
26217cea3689Smrg                        opt_verbose=false
26227cea3689Smrg                        func_append preserve_args " $_G_opt"
26237cea3689Smrg                        ;;
26247cea3689Smrg
26257cea3689Smrg        --tag)          test $# = 0 && func_missing_arg $_G_opt && break
26267cea3689Smrg                        opt_tag=$1
26277cea3689Smrg                        func_append preserve_args " $_G_opt $1"
26287cea3689Smrg                        func_enable_tag "$1"
26297cea3689Smrg                        shift
26307cea3689Smrg                        ;;
26317cea3689Smrg
26327cea3689Smrg        --verbose|-v)   opt_quiet=false
26337cea3689Smrg                        opt_verbose=:
26347cea3689Smrg                        func_append preserve_args " $_G_opt"
26357cea3689Smrg                        ;;
26367cea3689Smrg
263795b7a5c8Smrg        # An option not handled by this hook function:
263895b7a5c8Smrg        *)              set dummy "$_G_opt" ${1+"$@"} ; shift
263995b7a5c8Smrg                        _G_match_lt_parse_options=false
264095b7a5c8Smrg                        break
264195b7a5c8Smrg                        ;;
26427cea3689Smrg      esac
264395b7a5c8Smrg      $_G_match_lt_parse_options && _G_rc_lt_parse_options=:
26447cea3689Smrg    done
2645313a12fdSmrg
264695b7a5c8Smrg    if $_G_rc_lt_parse_options; then
264795b7a5c8Smrg      # save modified positional parameters for caller
264895b7a5c8Smrg      func_quote eval ${1+"$@"}
264995b7a5c8Smrg      libtool_parse_options_result=$func_quote_result
265095b7a5c8Smrg    fi
26517cea3689Smrg}
26527cea3689Smrgfunc_add_hook func_parse_options libtool_parse_options
2653e19dfac4Smrg
265427702724Smrg
2655e19dfac4Smrg
26567cea3689Smrg# libtool_validate_options [ARG]...
26577cea3689Smrg# ---------------------------------
26587cea3689Smrg# Perform any sanity checks on option settings and/or unconsumed
26597cea3689Smrg# arguments.
26607cea3689Smrglibtool_validate_options ()
26617cea3689Smrg{
26627cea3689Smrg    # save first non-option argument
26637cea3689Smrg    if test 0 -lt $#; then
26647cea3689Smrg      nonopt=$1
26657cea3689Smrg      shift
2666e19dfac4Smrg    fi
2667e19dfac4Smrg
26687cea3689Smrg    # preserve --debug
26697cea3689Smrg    test : = "$debug_cmd" || func_append preserve_args " --debug"
2670e19dfac4Smrg
26717cea3689Smrg    case $host in
26727cea3689Smrg      # Solaris2 added to fix http://debbugs.gnu.org/cgi/bugreport.cgi?bug=16452
26737cea3689Smrg      # see also: http://gcc.gnu.org/bugzilla/show_bug.cgi?id=59788
26747cea3689Smrg      *cygwin* | *mingw* | *pw32* | *cegcc* | *solaris2* | *os2*)
26757cea3689Smrg        # don't eliminate duplications in $postdeps and $predeps
26767cea3689Smrg        opt_duplicate_compiler_generated_deps=:
26777cea3689Smrg        ;;
26787cea3689Smrg      *)
26797cea3689Smrg        opt_duplicate_compiler_generated_deps=$opt_preserve_dup_deps
26807cea3689Smrg        ;;
26817cea3689Smrg    esac
268227702724Smrg
26837cea3689Smrg    $opt_help || {
26847cea3689Smrg      # Sanity checks first:
26857cea3689Smrg      func_check_version_match
26867cea3689Smrg
26877cea3689Smrg      test yes != "$build_libtool_libs" \
26887cea3689Smrg        && test yes != "$build_old_libs" \
26897cea3689Smrg        && func_fatal_configuration "not configured to build any kind of library"
26907cea3689Smrg
26917cea3689Smrg      # Darwin sucks
26927cea3689Smrg      eval std_shrext=\"$shrext_cmds\"
26937cea3689Smrg
26947cea3689Smrg      # Only execute mode is allowed to have -dlopen flags.
26957cea3689Smrg      if test -n "$opt_dlopen" && test execute != "$opt_mode"; then
26967cea3689Smrg        func_error "unrecognized option '-dlopen'"
26977cea3689Smrg        $ECHO "$help" 1>&2
26987cea3689Smrg        exit $EXIT_FAILURE
26997cea3689Smrg      fi
2700e19dfac4Smrg
27017cea3689Smrg      # Change the help message to a mode-specific one.
27027cea3689Smrg      generic_help=$help
27037cea3689Smrg      help="Try '$progname --help --mode=$opt_mode' for more information."
27047cea3689Smrg    }
2705e19dfac4Smrg
27067cea3689Smrg    # Pass back the unparsed argument list
270795b7a5c8Smrg    func_quote eval ${1+"$@"}
270895b7a5c8Smrg    libtool_validate_options_result=$func_quote_result
2709313a12fdSmrg}
27107cea3689Smrgfunc_add_hook func_validate_options libtool_validate_options
2711e19dfac4Smrg
2712e19dfac4Smrg
27137cea3689Smrg# Process options as early as possible so that --help and --version
27147cea3689Smrg# can return quickly.
27157cea3689Smrgfunc_options ${1+"$@"}
27167cea3689Smrgeval set dummy "$func_options_result"; shift
27177cea3689Smrg
271827702724Smrg
271927702724Smrg
2720313a12fdSmrg## ----------- ##
2721313a12fdSmrg##    Main.    ##
2722313a12fdSmrg## ----------- ##
272327702724Smrg
27247cea3689Smrgmagic='%%%MAGIC variable%%%'
27257cea3689Smrgmagic_exe='%%%MAGIC EXE variable%%%'
27267cea3689Smrg
27277cea3689Smrg# Global variables.
27287cea3689Smrgextracted_archives=
27297cea3689Smrgextracted_serial=0
27307cea3689Smrg
27317cea3689Smrg# If this variable is set in any of the actions, the command in it
27327cea3689Smrg# will be execed at the end.  This prevents here-documents from being
27337cea3689Smrg# left over by shells.
27347cea3689Smrgexec_cmd=
27357cea3689Smrg
27367cea3689Smrg
27377cea3689Smrg# A function that is used when there is no print builtin or printf.
27387cea3689Smrgfunc_fallback_echo ()
27397cea3689Smrg{
27407cea3689Smrg  eval 'cat <<_LTECHO_EOF
27417cea3689Smrg$1
27427cea3689Smrg_LTECHO_EOF'
27437cea3689Smrg}
27447cea3689Smrg
27457cea3689Smrg# func_generated_by_libtool
27467cea3689Smrg# True iff stdin has been generated by Libtool. This function is only
27477cea3689Smrg# a basic sanity check; it will hardly flush out determined imposters.
27487cea3689Smrgfunc_generated_by_libtool_p ()
27497cea3689Smrg{
27507cea3689Smrg  $GREP "^# Generated by .*$PACKAGE" > /dev/null 2>&1
27517cea3689Smrg}
27527cea3689Smrg
2753e19dfac4Smrg# func_lalib_p file
27547cea3689Smrg# True iff FILE is a libtool '.la' library or '.lo' object file.
2755e19dfac4Smrg# This function is only a basic sanity check; it will hardly flush out
2756e19dfac4Smrg# determined imposters.
2757e19dfac4Smrgfunc_lalib_p ()
2758e19dfac4Smrg{
2759e19dfac4Smrg    test -f "$1" &&
27607cea3689Smrg      $SED -e 4q "$1" 2>/dev/null | func_generated_by_libtool_p
2761e19dfac4Smrg}
276227702724Smrg
2763e19dfac4Smrg# func_lalib_unsafe_p file
27647cea3689Smrg# True iff FILE is a libtool '.la' library or '.lo' object file.
2765e19dfac4Smrg# This function implements the same check as func_lalib_p without
2766e19dfac4Smrg# resorting to external programs.  To this end, it redirects stdin and
2767e19dfac4Smrg# closes it afterwards, without saving the original file descriptor.
2768e19dfac4Smrg# As a safety measure, use it only where a negative result would be
27697cea3689Smrg# fatal anyway.  Works if 'file' does not exist.
2770e19dfac4Smrgfunc_lalib_unsafe_p ()
2771e19dfac4Smrg{
2772e19dfac4Smrg    lalib_p=no
2773e19dfac4Smrg    if test -f "$1" && test -r "$1" && exec 5<&0 <"$1"; then
2774e19dfac4Smrg	for lalib_p_l in 1 2 3 4
2775e19dfac4Smrg	do
2776e19dfac4Smrg	    read lalib_p_line
27777cea3689Smrg	    case $lalib_p_line in
2778e19dfac4Smrg		\#\ Generated\ by\ *$PACKAGE* ) lalib_p=yes; break;;
2779e19dfac4Smrg	    esac
2780e19dfac4Smrg	done
2781e19dfac4Smrg	exec 0<&5 5<&-
2782e19dfac4Smrg    fi
27837cea3689Smrg    test yes = "$lalib_p"
2784e19dfac4Smrg}
278527702724Smrg
2786e19dfac4Smrg# func_ltwrapper_script_p file
2787e19dfac4Smrg# True iff FILE is a libtool wrapper script
2788e19dfac4Smrg# This function is only a basic sanity check; it will hardly flush out
2789e19dfac4Smrg# determined imposters.
2790e19dfac4Smrgfunc_ltwrapper_script_p ()
2791e19dfac4Smrg{
27927cea3689Smrg    test -f "$1" &&
27937cea3689Smrg      $lt_truncate_bin < "$1" 2>/dev/null | func_generated_by_libtool_p
2794e19dfac4Smrg}
279527702724Smrg
2796e19dfac4Smrg# func_ltwrapper_executable_p file
2797e19dfac4Smrg# True iff FILE is a libtool wrapper executable
2798e19dfac4Smrg# This function is only a basic sanity check; it will hardly flush out
2799e19dfac4Smrg# determined imposters.
2800e19dfac4Smrgfunc_ltwrapper_executable_p ()
2801e19dfac4Smrg{
2802e19dfac4Smrg    func_ltwrapper_exec_suffix=
2803e19dfac4Smrg    case $1 in
2804e19dfac4Smrg    *.exe) ;;
2805e19dfac4Smrg    *) func_ltwrapper_exec_suffix=.exe ;;
2806e19dfac4Smrg    esac
2807e19dfac4Smrg    $GREP "$magic_exe" "$1$func_ltwrapper_exec_suffix" >/dev/null 2>&1
2808e19dfac4Smrg}
280927702724Smrg
2810e19dfac4Smrg# func_ltwrapper_scriptname file
2811e19dfac4Smrg# Assumes file is an ltwrapper_executable
2812e19dfac4Smrg# uses $file to determine the appropriate filename for a
2813e19dfac4Smrg# temporary ltwrapper_script.
2814e19dfac4Smrgfunc_ltwrapper_scriptname ()
2815e19dfac4Smrg{
2816313a12fdSmrg    func_dirname_and_basename "$1" "" "."
2817313a12fdSmrg    func_stripname '' '.exe' "$func_basename_result"
28187cea3689Smrg    func_ltwrapper_scriptname_result=$func_dirname_result/$objdir/${func_stripname_result}_ltshwrapper
2819e19dfac4Smrg}
282027702724Smrg
2821e19dfac4Smrg# func_ltwrapper_p file
2822e19dfac4Smrg# True iff FILE is a libtool wrapper script or wrapper executable
2823e19dfac4Smrg# This function is only a basic sanity check; it will hardly flush out
2824e19dfac4Smrg# determined imposters.
2825e19dfac4Smrgfunc_ltwrapper_p ()
2826e19dfac4Smrg{
2827e19dfac4Smrg    func_ltwrapper_script_p "$1" || func_ltwrapper_executable_p "$1"
2828e19dfac4Smrg}
282927702724Smrg
283027702724Smrg
2831e19dfac4Smrg# func_execute_cmds commands fail_cmd
2832e19dfac4Smrg# Execute tilde-delimited COMMANDS.
2833e19dfac4Smrg# If FAIL_CMD is given, eval that upon failure.
2834e19dfac4Smrg# FAIL_CMD may read-access the current command in variable CMD!
2835e19dfac4Smrgfunc_execute_cmds ()
2836e19dfac4Smrg{
28377cea3689Smrg    $debug_cmd
28387cea3689Smrg
2839e19dfac4Smrg    save_ifs=$IFS; IFS='~'
2840e19dfac4Smrg    for cmd in $1; do
28417cea3689Smrg      IFS=$sp$nl
2842e19dfac4Smrg      eval cmd=\"$cmd\"
28437cea3689Smrg      IFS=$save_ifs
2844e19dfac4Smrg      func_show_eval "$cmd" "${2-:}"
2845e19dfac4Smrg    done
2846e19dfac4Smrg    IFS=$save_ifs
2847e19dfac4Smrg}
2848e19dfac4Smrg
2849e19dfac4Smrg
2850e19dfac4Smrg# func_source file
2851e19dfac4Smrg# Source FILE, adding directory component if necessary.
2852e19dfac4Smrg# Note that it is not necessary on cygwin/mingw to append a dot to
2853e19dfac4Smrg# FILE even if both FILE and FILE.exe exist: automatic-append-.exe
2854e19dfac4Smrg# behavior happens only for exec(3), not for open(2)!  Also, sourcing
28557cea3689Smrg# 'FILE.' does not work on cygwin managed mounts.
2856e19dfac4Smrgfunc_source ()
2857e19dfac4Smrg{
28587cea3689Smrg    $debug_cmd
28597cea3689Smrg
2860e19dfac4Smrg    case $1 in
2861e19dfac4Smrg    */* | *\\*)	. "$1" ;;
2862e19dfac4Smrg    *)		. "./$1" ;;
2863e19dfac4Smrg    esac
2864e19dfac4Smrg}
2865e19dfac4Smrg
2866e19dfac4Smrg
2867313a12fdSmrg# func_resolve_sysroot PATH
2868313a12fdSmrg# Replace a leading = in PATH with a sysroot.  Store the result into
2869313a12fdSmrg# func_resolve_sysroot_result
2870313a12fdSmrgfunc_resolve_sysroot ()
2871313a12fdSmrg{
2872313a12fdSmrg  func_resolve_sysroot_result=$1
2873313a12fdSmrg  case $func_resolve_sysroot_result in
2874313a12fdSmrg  =*)
2875313a12fdSmrg    func_stripname '=' '' "$func_resolve_sysroot_result"
2876313a12fdSmrg    func_resolve_sysroot_result=$lt_sysroot$func_stripname_result
2877313a12fdSmrg    ;;
2878313a12fdSmrg  esac
2879313a12fdSmrg}
2880313a12fdSmrg
2881313a12fdSmrg# func_replace_sysroot PATH
2882313a12fdSmrg# If PATH begins with the sysroot, replace it with = and
2883313a12fdSmrg# store the result into func_replace_sysroot_result.
2884313a12fdSmrgfunc_replace_sysroot ()
2885313a12fdSmrg{
28867cea3689Smrg  case $lt_sysroot:$1 in
2887313a12fdSmrg  ?*:"$lt_sysroot"*)
2888313a12fdSmrg    func_stripname "$lt_sysroot" '' "$1"
28897cea3689Smrg    func_replace_sysroot_result='='$func_stripname_result
2890313a12fdSmrg    ;;
2891313a12fdSmrg  *)
2892313a12fdSmrg    # Including no sysroot.
2893313a12fdSmrg    func_replace_sysroot_result=$1
2894313a12fdSmrg    ;;
2895313a12fdSmrg  esac
2896313a12fdSmrg}
2897313a12fdSmrg
2898e19dfac4Smrg# func_infer_tag arg
2899e19dfac4Smrg# Infer tagged configuration to use if any are available and
2900e19dfac4Smrg# if one wasn't chosen via the "--tag" command line option.
2901e19dfac4Smrg# Only attempt this if the compiler in the base compile
2902e19dfac4Smrg# command doesn't match the default compiler.
2903e19dfac4Smrg# arg is usually of the form 'gcc ...'
2904e19dfac4Smrgfunc_infer_tag ()
2905e19dfac4Smrg{
29067cea3689Smrg    $debug_cmd
29077cea3689Smrg
2908e19dfac4Smrg    if test -n "$available_tags" && test -z "$tagname"; then
2909e19dfac4Smrg      CC_quoted=
2910e19dfac4Smrg      for arg in $CC; do
2911313a12fdSmrg	func_append_quoted CC_quoted "$arg"
2912e19dfac4Smrg      done
2913313a12fdSmrg      CC_expanded=`func_echo_all $CC`
2914313a12fdSmrg      CC_quoted_expanded=`func_echo_all $CC_quoted`
2915e19dfac4Smrg      case $@ in
2916e19dfac4Smrg      # Blanks in the command may have been stripped by the calling shell,
2917e19dfac4Smrg      # but not from the CC environment variable when configure was run.
2918313a12fdSmrg      " $CC "* | "$CC "* | " $CC_expanded "* | "$CC_expanded "* | \
2919313a12fdSmrg      " $CC_quoted"* | "$CC_quoted "* | " $CC_quoted_expanded "* | "$CC_quoted_expanded "*) ;;
2920e19dfac4Smrg      # Blanks at the start of $base_compile will cause this to fail
2921e19dfac4Smrg      # if we don't check for them as well.
2922e19dfac4Smrg      *)
2923e19dfac4Smrg	for z in $available_tags; do
2924e19dfac4Smrg	  if $GREP "^# ### BEGIN LIBTOOL TAG CONFIG: $z$" < "$progpath" > /dev/null; then
2925e19dfac4Smrg	    # Evaluate the configuration.
29267cea3689Smrg	    eval "`$SED -n -e '/^# ### BEGIN LIBTOOL TAG CONFIG: '$z'$/,/^# ### END LIBTOOL TAG CONFIG: '$z'$/p' < $progpath`"
2927e19dfac4Smrg	    CC_quoted=
2928e19dfac4Smrg	    for arg in $CC; do
2929e19dfac4Smrg	      # Double-quote args containing other shell metacharacters.
2930313a12fdSmrg	      func_append_quoted CC_quoted "$arg"
2931e19dfac4Smrg	    done
2932313a12fdSmrg	    CC_expanded=`func_echo_all $CC`
2933313a12fdSmrg	    CC_quoted_expanded=`func_echo_all $CC_quoted`
2934e19dfac4Smrg	    case "$@ " in
2935313a12fdSmrg	    " $CC "* | "$CC "* | " $CC_expanded "* | "$CC_expanded "* | \
2936313a12fdSmrg	    " $CC_quoted"* | "$CC_quoted "* | " $CC_quoted_expanded "* | "$CC_quoted_expanded "*)
2937e19dfac4Smrg	      # The compiler in the base compile command matches
2938e19dfac4Smrg	      # the one in the tagged configuration.
2939e19dfac4Smrg	      # Assume this is the tagged configuration we want.
2940e19dfac4Smrg	      tagname=$z
2941e19dfac4Smrg	      break
2942e19dfac4Smrg	      ;;
294327702724Smrg	    esac
2944e19dfac4Smrg	  fi
2945e19dfac4Smrg	done
2946e19dfac4Smrg	# If $tagname still isn't set, then no tagged configuration
2947e19dfac4Smrg	# was found and let the user know that the "--tag" command
2948e19dfac4Smrg	# line option must be used.
2949e19dfac4Smrg	if test -z "$tagname"; then
2950e19dfac4Smrg	  func_echo "unable to infer tagged configuration"
29517cea3689Smrg	  func_fatal_error "specify a tag with '--tag'"
2952e19dfac4Smrg#	else
2953e19dfac4Smrg#	  func_verbose "using $tagname tagged configuration"
2954e19dfac4Smrg	fi
2955e19dfac4Smrg	;;
2956e19dfac4Smrg      esac
2957e19dfac4Smrg    fi
2958e19dfac4Smrg}
2959e19dfac4Smrg
2960e19dfac4Smrg
2961e19dfac4Smrg
2962e19dfac4Smrg# func_write_libtool_object output_name pic_name nonpic_name
2963e19dfac4Smrg# Create a libtool object file (analogous to a ".la" file),
2964e19dfac4Smrg# but don't create it if we're doing a dry run.
2965e19dfac4Smrgfunc_write_libtool_object ()
2966e19dfac4Smrg{
29677cea3689Smrg    write_libobj=$1
29687cea3689Smrg    if test yes = "$build_libtool_libs"; then
29697cea3689Smrg      write_lobj=\'$2\'
2970e19dfac4Smrg    else
2971e19dfac4Smrg      write_lobj=none
2972e19dfac4Smrg    fi
2973e19dfac4Smrg
29747cea3689Smrg    if test yes = "$build_old_libs"; then
29757cea3689Smrg      write_oldobj=\'$3\'
2976e19dfac4Smrg    else
2977e19dfac4Smrg      write_oldobj=none
2978e19dfac4Smrg    fi
2979e19dfac4Smrg
2980e19dfac4Smrg    $opt_dry_run || {
2981e19dfac4Smrg      cat >${write_libobj}T <<EOF
2982e19dfac4Smrg# $write_libobj - a libtool object file
29837cea3689Smrg# Generated by $PROGRAM (GNU $PACKAGE) $VERSION
2984e19dfac4Smrg#
2985e19dfac4Smrg# Please DO NOT delete this file!
2986e19dfac4Smrg# It is necessary for linking the library.
2987e19dfac4Smrg
2988e19dfac4Smrg# Name of the PIC object.
2989e19dfac4Smrgpic_object=$write_lobj
2990e19dfac4Smrg
2991e19dfac4Smrg# Name of the non-PIC object
2992e19dfac4Smrgnon_pic_object=$write_oldobj
2993e19dfac4Smrg
2994e19dfac4SmrgEOF
29957cea3689Smrg      $MV "${write_libobj}T" "$write_libobj"
2996e19dfac4Smrg    }
2997e19dfac4Smrg}
2998e19dfac4Smrg
2999313a12fdSmrg
3000313a12fdSmrg##################################################
3001313a12fdSmrg# FILE NAME AND PATH CONVERSION HELPER FUNCTIONS #
3002313a12fdSmrg##################################################
3003313a12fdSmrg
3004313a12fdSmrg# func_convert_core_file_wine_to_w32 ARG
3005313a12fdSmrg# Helper function used by file name conversion functions when $build is *nix,
3006313a12fdSmrg# and $host is mingw, cygwin, or some other w32 environment. Relies on a
3007313a12fdSmrg# correctly configured wine environment available, with the winepath program
3008313a12fdSmrg# in $build's $PATH.
3009313a12fdSmrg#
3010313a12fdSmrg# ARG is the $build file name to be converted to w32 format.
3011313a12fdSmrg# Result is available in $func_convert_core_file_wine_to_w32_result, and will
3012313a12fdSmrg# be empty on error (or when ARG is empty)
3013313a12fdSmrgfunc_convert_core_file_wine_to_w32 ()
3014313a12fdSmrg{
30157cea3689Smrg  $debug_cmd
30167cea3689Smrg
30177cea3689Smrg  func_convert_core_file_wine_to_w32_result=$1
3018313a12fdSmrg  if test -n "$1"; then
3019313a12fdSmrg    # Unfortunately, winepath does not exit with a non-zero error code, so we
3020313a12fdSmrg    # are forced to check the contents of stdout. On the other hand, if the
3021313a12fdSmrg    # command is not found, the shell will set an exit code of 127 and print
3022313a12fdSmrg    # *an error message* to stdout. So we must check for both error code of
3023313a12fdSmrg    # zero AND non-empty stdout, which explains the odd construction:
3024313a12fdSmrg    func_convert_core_file_wine_to_w32_tmp=`winepath -w "$1" 2>/dev/null`
30257cea3689Smrg    if test "$?" -eq 0 && test -n "$func_convert_core_file_wine_to_w32_tmp"; then
3026313a12fdSmrg      func_convert_core_file_wine_to_w32_result=`$ECHO "$func_convert_core_file_wine_to_w32_tmp" |
30277cea3689Smrg        $SED -e "$sed_naive_backslashify"`
3028313a12fdSmrg    else
3029313a12fdSmrg      func_convert_core_file_wine_to_w32_result=
3030313a12fdSmrg    fi
3031313a12fdSmrg  fi
3032313a12fdSmrg}
3033313a12fdSmrg# end: func_convert_core_file_wine_to_w32
3034313a12fdSmrg
3035313a12fdSmrg
3036313a12fdSmrg# func_convert_core_path_wine_to_w32 ARG
3037313a12fdSmrg# Helper function used by path conversion functions when $build is *nix, and
3038313a12fdSmrg# $host is mingw, cygwin, or some other w32 environment. Relies on a correctly
3039313a12fdSmrg# configured wine environment available, with the winepath program in $build's
3040313a12fdSmrg# $PATH. Assumes ARG has no leading or trailing path separator characters.
3041313a12fdSmrg#
3042313a12fdSmrg# ARG is path to be converted from $build format to win32.
3043313a12fdSmrg# Result is available in $func_convert_core_path_wine_to_w32_result.
3044313a12fdSmrg# Unconvertible file (directory) names in ARG are skipped; if no directory names
3045313a12fdSmrg# are convertible, then the result may be empty.
3046313a12fdSmrgfunc_convert_core_path_wine_to_w32 ()
3047313a12fdSmrg{
30487cea3689Smrg  $debug_cmd
30497cea3689Smrg
3050313a12fdSmrg  # unfortunately, winepath doesn't convert paths, only file names
30517cea3689Smrg  func_convert_core_path_wine_to_w32_result=
3052313a12fdSmrg  if test -n "$1"; then
3053313a12fdSmrg    oldIFS=$IFS
3054313a12fdSmrg    IFS=:
3055313a12fdSmrg    for func_convert_core_path_wine_to_w32_f in $1; do
3056313a12fdSmrg      IFS=$oldIFS
3057313a12fdSmrg      func_convert_core_file_wine_to_w32 "$func_convert_core_path_wine_to_w32_f"
30587cea3689Smrg      if test -n "$func_convert_core_file_wine_to_w32_result"; then
3059313a12fdSmrg        if test -z "$func_convert_core_path_wine_to_w32_result"; then
30607cea3689Smrg          func_convert_core_path_wine_to_w32_result=$func_convert_core_file_wine_to_w32_result
3061313a12fdSmrg        else
3062313a12fdSmrg          func_append func_convert_core_path_wine_to_w32_result ";$func_convert_core_file_wine_to_w32_result"
3063313a12fdSmrg        fi
3064313a12fdSmrg      fi
3065313a12fdSmrg    done
3066313a12fdSmrg    IFS=$oldIFS
3067313a12fdSmrg  fi
3068313a12fdSmrg}
3069313a12fdSmrg# end: func_convert_core_path_wine_to_w32
3070313a12fdSmrg
3071313a12fdSmrg
3072313a12fdSmrg# func_cygpath ARGS...
3073313a12fdSmrg# Wrapper around calling the cygpath program via LT_CYGPATH. This is used when
3074313a12fdSmrg# when (1) $build is *nix and Cygwin is hosted via a wine environment; or (2)
3075313a12fdSmrg# $build is MSYS and $host is Cygwin, or (3) $build is Cygwin. In case (1) or
3076313a12fdSmrg# (2), returns the Cygwin file name or path in func_cygpath_result (input
3077313a12fdSmrg# file name or path is assumed to be in w32 format, as previously converted
3078313a12fdSmrg# from $build's *nix or MSYS format). In case (3), returns the w32 file name
3079313a12fdSmrg# or path in func_cygpath_result (input file name or path is assumed to be in
3080313a12fdSmrg# Cygwin format). Returns an empty string on error.
3081313a12fdSmrg#
3082313a12fdSmrg# ARGS are passed to cygpath, with the last one being the file name or path to
3083313a12fdSmrg# be converted.
3084313a12fdSmrg#
3085313a12fdSmrg# Specify the absolute *nix (or w32) name to cygpath in the LT_CYGPATH
3086313a12fdSmrg# environment variable; do not put it in $PATH.
3087313a12fdSmrgfunc_cygpath ()
3088313a12fdSmrg{
30897cea3689Smrg  $debug_cmd
30907cea3689Smrg
3091313a12fdSmrg  if test -n "$LT_CYGPATH" && test -f "$LT_CYGPATH"; then
3092313a12fdSmrg    func_cygpath_result=`$LT_CYGPATH "$@" 2>/dev/null`
3093313a12fdSmrg    if test "$?" -ne 0; then
3094313a12fdSmrg      # on failure, ensure result is empty
3095313a12fdSmrg      func_cygpath_result=
3096313a12fdSmrg    fi
3097313a12fdSmrg  else
3098313a12fdSmrg    func_cygpath_result=
30997cea3689Smrg    func_error "LT_CYGPATH is empty or specifies non-existent file: '$LT_CYGPATH'"
3100313a12fdSmrg  fi
3101313a12fdSmrg}
3102313a12fdSmrg#end: func_cygpath
3103313a12fdSmrg
3104313a12fdSmrg
3105313a12fdSmrg# func_convert_core_msys_to_w32 ARG
3106313a12fdSmrg# Convert file name or path ARG from MSYS format to w32 format.  Return
3107313a12fdSmrg# result in func_convert_core_msys_to_w32_result.
3108313a12fdSmrgfunc_convert_core_msys_to_w32 ()
3109313a12fdSmrg{
31107cea3689Smrg  $debug_cmd
31117cea3689Smrg
3112313a12fdSmrg  # awkward: cmd appends spaces to result
3113313a12fdSmrg  func_convert_core_msys_to_w32_result=`( cmd //c echo "$1" ) 2>/dev/null |
31147cea3689Smrg    $SED -e 's/[ ]*$//' -e "$sed_naive_backslashify"`
3115313a12fdSmrg}
3116313a12fdSmrg#end: func_convert_core_msys_to_w32
3117313a12fdSmrg
3118313a12fdSmrg
3119313a12fdSmrg# func_convert_file_check ARG1 ARG2
3120313a12fdSmrg# Verify that ARG1 (a file name in $build format) was converted to $host
3121313a12fdSmrg# format in ARG2. Otherwise, emit an error message, but continue (resetting
3122313a12fdSmrg# func_to_host_file_result to ARG1).
3123313a12fdSmrgfunc_convert_file_check ()
3124313a12fdSmrg{
31257cea3689Smrg  $debug_cmd
31267cea3689Smrg
31277cea3689Smrg  if test -z "$2" && test -n "$1"; then
3128313a12fdSmrg    func_error "Could not determine host file name corresponding to"
31297cea3689Smrg    func_error "  '$1'"
3130313a12fdSmrg    func_error "Continuing, but uninstalled executables may not work."
3131313a12fdSmrg    # Fallback:
31327cea3689Smrg    func_to_host_file_result=$1
3133313a12fdSmrg  fi
3134313a12fdSmrg}
3135313a12fdSmrg# end func_convert_file_check
3136313a12fdSmrg
3137313a12fdSmrg
3138313a12fdSmrg# func_convert_path_check FROM_PATHSEP TO_PATHSEP FROM_PATH TO_PATH
3139313a12fdSmrg# Verify that FROM_PATH (a path in $build format) was converted to $host
3140313a12fdSmrg# format in TO_PATH. Otherwise, emit an error message, but continue, resetting
3141313a12fdSmrg# func_to_host_file_result to a simplistic fallback value (see below).
3142313a12fdSmrgfunc_convert_path_check ()
3143313a12fdSmrg{
31447cea3689Smrg  $debug_cmd
31457cea3689Smrg
3146313a12fdSmrg  if test -z "$4" && test -n "$3"; then
3147313a12fdSmrg    func_error "Could not determine the host path corresponding to"
31487cea3689Smrg    func_error "  '$3'"
3149313a12fdSmrg    func_error "Continuing, but uninstalled executables may not work."
3150313a12fdSmrg    # Fallback.  This is a deliberately simplistic "conversion" and
3151313a12fdSmrg    # should not be "improved".  See libtool.info.
3152313a12fdSmrg    if test "x$1" != "x$2"; then
3153313a12fdSmrg      lt_replace_pathsep_chars="s|$1|$2|g"
3154313a12fdSmrg      func_to_host_path_result=`echo "$3" |
3155313a12fdSmrg        $SED -e "$lt_replace_pathsep_chars"`
3156313a12fdSmrg    else
31577cea3689Smrg      func_to_host_path_result=$3
3158313a12fdSmrg    fi
3159313a12fdSmrg  fi
3160313a12fdSmrg}
3161313a12fdSmrg# end func_convert_path_check
3162313a12fdSmrg
3163313a12fdSmrg
3164313a12fdSmrg# func_convert_path_front_back_pathsep FRONTPAT BACKPAT REPL ORIG
3165313a12fdSmrg# Modifies func_to_host_path_result by prepending REPL if ORIG matches FRONTPAT
3166313a12fdSmrg# and appending REPL if ORIG matches BACKPAT.
3167313a12fdSmrgfunc_convert_path_front_back_pathsep ()
3168313a12fdSmrg{
31697cea3689Smrg  $debug_cmd
31707cea3689Smrg
3171313a12fdSmrg  case $4 in
31727cea3689Smrg  $1 ) func_to_host_path_result=$3$func_to_host_path_result
3173313a12fdSmrg    ;;
3174313a12fdSmrg  esac
3175313a12fdSmrg  case $4 in
3176313a12fdSmrg  $2 ) func_append func_to_host_path_result "$3"
3177313a12fdSmrg    ;;
3178313a12fdSmrg  esac
3179313a12fdSmrg}
3180313a12fdSmrg# end func_convert_path_front_back_pathsep
3181313a12fdSmrg
3182313a12fdSmrg
3183313a12fdSmrg##################################################
3184313a12fdSmrg# $build to $host FILE NAME CONVERSION FUNCTIONS #
3185313a12fdSmrg##################################################
31867cea3689Smrg# invoked via '$to_host_file_cmd ARG'
3187313a12fdSmrg#
3188313a12fdSmrg# In each case, ARG is the path to be converted from $build to $host format.
3189313a12fdSmrg# Result will be available in $func_to_host_file_result.
3190313a12fdSmrg
3191313a12fdSmrg
3192313a12fdSmrg# func_to_host_file ARG
3193313a12fdSmrg# Converts the file name ARG from $build format to $host format. Return result
3194313a12fdSmrg# in func_to_host_file_result.
3195313a12fdSmrgfunc_to_host_file ()
3196313a12fdSmrg{
31977cea3689Smrg  $debug_cmd
31987cea3689Smrg
3199313a12fdSmrg  $to_host_file_cmd "$1"
3200313a12fdSmrg}
3201313a12fdSmrg# end func_to_host_file
3202313a12fdSmrg
3203313a12fdSmrg
3204313a12fdSmrg# func_to_tool_file ARG LAZY
3205313a12fdSmrg# converts the file name ARG from $build format to toolchain format. Return
3206313a12fdSmrg# result in func_to_tool_file_result.  If the conversion in use is listed
3207313a12fdSmrg# in (the comma separated) LAZY, no conversion takes place.
3208313a12fdSmrgfunc_to_tool_file ()
3209313a12fdSmrg{
32107cea3689Smrg  $debug_cmd
32117cea3689Smrg
3212313a12fdSmrg  case ,$2, in
3213313a12fdSmrg    *,"$to_tool_file_cmd",*)
3214313a12fdSmrg      func_to_tool_file_result=$1
3215313a12fdSmrg      ;;
3216313a12fdSmrg    *)
3217313a12fdSmrg      $to_tool_file_cmd "$1"
3218313a12fdSmrg      func_to_tool_file_result=$func_to_host_file_result
3219313a12fdSmrg      ;;
3220313a12fdSmrg  esac
3221313a12fdSmrg}
3222313a12fdSmrg# end func_to_tool_file
3223313a12fdSmrg
3224313a12fdSmrg
3225313a12fdSmrg# func_convert_file_noop ARG
3226313a12fdSmrg# Copy ARG to func_to_host_file_result.
3227313a12fdSmrgfunc_convert_file_noop ()
3228313a12fdSmrg{
32297cea3689Smrg  func_to_host_file_result=$1
3230313a12fdSmrg}
3231313a12fdSmrg# end func_convert_file_noop
3232313a12fdSmrg
3233313a12fdSmrg
3234313a12fdSmrg# func_convert_file_msys_to_w32 ARG
3235313a12fdSmrg# Convert file name ARG from (mingw) MSYS to (mingw) w32 format; automatic
3236313a12fdSmrg# conversion to w32 is not available inside the cwrapper.  Returns result in
3237313a12fdSmrg# func_to_host_file_result.
3238313a12fdSmrgfunc_convert_file_msys_to_w32 ()
3239313a12fdSmrg{
32407cea3689Smrg  $debug_cmd
32417cea3689Smrg
32427cea3689Smrg  func_to_host_file_result=$1
3243313a12fdSmrg  if test -n "$1"; then
3244313a12fdSmrg    func_convert_core_msys_to_w32 "$1"
32457cea3689Smrg    func_to_host_file_result=$func_convert_core_msys_to_w32_result
3246313a12fdSmrg  fi
3247313a12fdSmrg  func_convert_file_check "$1" "$func_to_host_file_result"
3248313a12fdSmrg}
3249313a12fdSmrg# end func_convert_file_msys_to_w32
3250313a12fdSmrg
3251313a12fdSmrg
3252313a12fdSmrg# func_convert_file_cygwin_to_w32 ARG
3253313a12fdSmrg# Convert file name ARG from Cygwin to w32 format.  Returns result in
3254313a12fdSmrg# func_to_host_file_result.
3255313a12fdSmrgfunc_convert_file_cygwin_to_w32 ()
3256313a12fdSmrg{
32577cea3689Smrg  $debug_cmd
32587cea3689Smrg
32597cea3689Smrg  func_to_host_file_result=$1
3260313a12fdSmrg  if test -n "$1"; then
3261313a12fdSmrg    # because $build is cygwin, we call "the" cygpath in $PATH; no need to use
3262313a12fdSmrg    # LT_CYGPATH in this case.
3263313a12fdSmrg    func_to_host_file_result=`cygpath -m "$1"`
3264313a12fdSmrg  fi
3265313a12fdSmrg  func_convert_file_check "$1" "$func_to_host_file_result"
3266313a12fdSmrg}
3267313a12fdSmrg# end func_convert_file_cygwin_to_w32
3268313a12fdSmrg
3269313a12fdSmrg
3270313a12fdSmrg# func_convert_file_nix_to_w32 ARG
3271313a12fdSmrg# Convert file name ARG from *nix to w32 format.  Requires a wine environment
3272313a12fdSmrg# and a working winepath. Returns result in func_to_host_file_result.
3273313a12fdSmrgfunc_convert_file_nix_to_w32 ()
3274313a12fdSmrg{
32757cea3689Smrg  $debug_cmd
32767cea3689Smrg
32777cea3689Smrg  func_to_host_file_result=$1
3278313a12fdSmrg  if test -n "$1"; then
3279313a12fdSmrg    func_convert_core_file_wine_to_w32 "$1"
32807cea3689Smrg    func_to_host_file_result=$func_convert_core_file_wine_to_w32_result
3281313a12fdSmrg  fi
3282313a12fdSmrg  func_convert_file_check "$1" "$func_to_host_file_result"
3283313a12fdSmrg}
3284313a12fdSmrg# end func_convert_file_nix_to_w32
3285313a12fdSmrg
3286313a12fdSmrg
3287313a12fdSmrg# func_convert_file_msys_to_cygwin ARG
3288313a12fdSmrg# Convert file name ARG from MSYS to Cygwin format.  Requires LT_CYGPATH set.
3289313a12fdSmrg# Returns result in func_to_host_file_result.
3290313a12fdSmrgfunc_convert_file_msys_to_cygwin ()
3291313a12fdSmrg{
32927cea3689Smrg  $debug_cmd
32937cea3689Smrg
32947cea3689Smrg  func_to_host_file_result=$1
3295313a12fdSmrg  if test -n "$1"; then
3296313a12fdSmrg    func_convert_core_msys_to_w32 "$1"
3297313a12fdSmrg    func_cygpath -u "$func_convert_core_msys_to_w32_result"
32987cea3689Smrg    func_to_host_file_result=$func_cygpath_result
3299313a12fdSmrg  fi
3300313a12fdSmrg  func_convert_file_check "$1" "$func_to_host_file_result"
3301313a12fdSmrg}
3302313a12fdSmrg# end func_convert_file_msys_to_cygwin
3303313a12fdSmrg
3304313a12fdSmrg
3305313a12fdSmrg# func_convert_file_nix_to_cygwin ARG
3306313a12fdSmrg# Convert file name ARG from *nix to Cygwin format.  Requires Cygwin installed
3307313a12fdSmrg# in a wine environment, working winepath, and LT_CYGPATH set.  Returns result
3308313a12fdSmrg# in func_to_host_file_result.
3309313a12fdSmrgfunc_convert_file_nix_to_cygwin ()
3310313a12fdSmrg{
33117cea3689Smrg  $debug_cmd
33127cea3689Smrg
33137cea3689Smrg  func_to_host_file_result=$1
3314313a12fdSmrg  if test -n "$1"; then
3315313a12fdSmrg    # convert from *nix to w32, then use cygpath to convert from w32 to cygwin.
3316313a12fdSmrg    func_convert_core_file_wine_to_w32 "$1"
3317313a12fdSmrg    func_cygpath -u "$func_convert_core_file_wine_to_w32_result"
33187cea3689Smrg    func_to_host_file_result=$func_cygpath_result
3319313a12fdSmrg  fi
3320313a12fdSmrg  func_convert_file_check "$1" "$func_to_host_file_result"
3321313a12fdSmrg}
3322313a12fdSmrg# end func_convert_file_nix_to_cygwin
3323313a12fdSmrg
3324313a12fdSmrg
3325313a12fdSmrg#############################################
3326313a12fdSmrg# $build to $host PATH CONVERSION FUNCTIONS #
3327313a12fdSmrg#############################################
33287cea3689Smrg# invoked via '$to_host_path_cmd ARG'
3329313a12fdSmrg#
3330313a12fdSmrg# In each case, ARG is the path to be converted from $build to $host format.
3331313a12fdSmrg# The result will be available in $func_to_host_path_result.
3332313a12fdSmrg#
3333313a12fdSmrg# Path separators are also converted from $build format to $host format.  If
3334313a12fdSmrg# ARG begins or ends with a path separator character, it is preserved (but
3335313a12fdSmrg# converted to $host format) on output.
3336313a12fdSmrg#
3337313a12fdSmrg# All path conversion functions are named using the following convention:
3338313a12fdSmrg#   file name conversion function    : func_convert_file_X_to_Y ()
3339313a12fdSmrg#   path conversion function         : func_convert_path_X_to_Y ()
3340313a12fdSmrg# where, for any given $build/$host combination the 'X_to_Y' value is the
3341313a12fdSmrg# same.  If conversion functions are added for new $build/$host combinations,
3342313a12fdSmrg# the two new functions must follow this pattern, or func_init_to_host_path_cmd
3343313a12fdSmrg# will break.
3344313a12fdSmrg
3345313a12fdSmrg
3346313a12fdSmrg# func_init_to_host_path_cmd
3347313a12fdSmrg# Ensures that function "pointer" variable $to_host_path_cmd is set to the
3348313a12fdSmrg# appropriate value, based on the value of $to_host_file_cmd.
3349313a12fdSmrgto_host_path_cmd=
3350313a12fdSmrgfunc_init_to_host_path_cmd ()
3351313a12fdSmrg{
33527cea3689Smrg  $debug_cmd
33537cea3689Smrg
3354313a12fdSmrg  if test -z "$to_host_path_cmd"; then
3355313a12fdSmrg    func_stripname 'func_convert_file_' '' "$to_host_file_cmd"
33567cea3689Smrg    to_host_path_cmd=func_convert_path_$func_stripname_result
3357313a12fdSmrg  fi
3358313a12fdSmrg}
3359313a12fdSmrg
3360313a12fdSmrg
3361313a12fdSmrg# func_to_host_path ARG
3362313a12fdSmrg# Converts the path ARG from $build format to $host format. Return result
3363313a12fdSmrg# in func_to_host_path_result.
3364313a12fdSmrgfunc_to_host_path ()
3365313a12fdSmrg{
33667cea3689Smrg  $debug_cmd
33677cea3689Smrg
3368313a12fdSmrg  func_init_to_host_path_cmd
3369313a12fdSmrg  $to_host_path_cmd "$1"
3370313a12fdSmrg}
3371313a12fdSmrg# end func_to_host_path
3372313a12fdSmrg
3373313a12fdSmrg
3374313a12fdSmrg# func_convert_path_noop ARG
3375313a12fdSmrg# Copy ARG to func_to_host_path_result.
3376313a12fdSmrgfunc_convert_path_noop ()
3377313a12fdSmrg{
33787cea3689Smrg  func_to_host_path_result=$1
3379313a12fdSmrg}
3380313a12fdSmrg# end func_convert_path_noop
3381313a12fdSmrg
3382313a12fdSmrg
3383313a12fdSmrg# func_convert_path_msys_to_w32 ARG
3384313a12fdSmrg# Convert path ARG from (mingw) MSYS to (mingw) w32 format; automatic
3385313a12fdSmrg# conversion to w32 is not available inside the cwrapper.  Returns result in
3386313a12fdSmrg# func_to_host_path_result.
3387313a12fdSmrgfunc_convert_path_msys_to_w32 ()
3388313a12fdSmrg{
33897cea3689Smrg  $debug_cmd
33907cea3689Smrg
33917cea3689Smrg  func_to_host_path_result=$1
3392313a12fdSmrg  if test -n "$1"; then
3393313a12fdSmrg    # Remove leading and trailing path separator characters from ARG.  MSYS
3394313a12fdSmrg    # behavior is inconsistent here; cygpath turns them into '.;' and ';.';
3395313a12fdSmrg    # and winepath ignores them completely.
3396313a12fdSmrg    func_stripname : : "$1"
3397313a12fdSmrg    func_to_host_path_tmp1=$func_stripname_result
3398313a12fdSmrg    func_convert_core_msys_to_w32 "$func_to_host_path_tmp1"
33997cea3689Smrg    func_to_host_path_result=$func_convert_core_msys_to_w32_result
3400313a12fdSmrg    func_convert_path_check : ";" \
3401313a12fdSmrg      "$func_to_host_path_tmp1" "$func_to_host_path_result"
3402313a12fdSmrg    func_convert_path_front_back_pathsep ":*" "*:" ";" "$1"
3403313a12fdSmrg  fi
3404313a12fdSmrg}
3405313a12fdSmrg# end func_convert_path_msys_to_w32
3406313a12fdSmrg
3407313a12fdSmrg
3408313a12fdSmrg# func_convert_path_cygwin_to_w32 ARG
3409313a12fdSmrg# Convert path ARG from Cygwin to w32 format.  Returns result in
3410313a12fdSmrg# func_to_host_file_result.
3411313a12fdSmrgfunc_convert_path_cygwin_to_w32 ()
3412313a12fdSmrg{
34137cea3689Smrg  $debug_cmd
34147cea3689Smrg
34157cea3689Smrg  func_to_host_path_result=$1
3416313a12fdSmrg  if test -n "$1"; then
3417313a12fdSmrg    # See func_convert_path_msys_to_w32:
3418313a12fdSmrg    func_stripname : : "$1"
3419313a12fdSmrg    func_to_host_path_tmp1=$func_stripname_result
3420313a12fdSmrg    func_to_host_path_result=`cygpath -m -p "$func_to_host_path_tmp1"`
3421313a12fdSmrg    func_convert_path_check : ";" \
3422313a12fdSmrg      "$func_to_host_path_tmp1" "$func_to_host_path_result"
3423313a12fdSmrg    func_convert_path_front_back_pathsep ":*" "*:" ";" "$1"
3424313a12fdSmrg  fi
3425313a12fdSmrg}
3426313a12fdSmrg# end func_convert_path_cygwin_to_w32
3427313a12fdSmrg
3428313a12fdSmrg
3429313a12fdSmrg# func_convert_path_nix_to_w32 ARG
3430313a12fdSmrg# Convert path ARG from *nix to w32 format.  Requires a wine environment and
3431313a12fdSmrg# a working winepath.  Returns result in func_to_host_file_result.
3432313a12fdSmrgfunc_convert_path_nix_to_w32 ()
3433313a12fdSmrg{
34347cea3689Smrg  $debug_cmd
34357cea3689Smrg
34367cea3689Smrg  func_to_host_path_result=$1
3437313a12fdSmrg  if test -n "$1"; then
3438313a12fdSmrg    # See func_convert_path_msys_to_w32:
3439313a12fdSmrg    func_stripname : : "$1"
3440313a12fdSmrg    func_to_host_path_tmp1=$func_stripname_result
3441313a12fdSmrg    func_convert_core_path_wine_to_w32 "$func_to_host_path_tmp1"
34427cea3689Smrg    func_to_host_path_result=$func_convert_core_path_wine_to_w32_result
3443313a12fdSmrg    func_convert_path_check : ";" \
3444313a12fdSmrg      "$func_to_host_path_tmp1" "$func_to_host_path_result"
3445313a12fdSmrg    func_convert_path_front_back_pathsep ":*" "*:" ";" "$1"
3446313a12fdSmrg  fi
3447313a12fdSmrg}
3448313a12fdSmrg# end func_convert_path_nix_to_w32
3449313a12fdSmrg
3450313a12fdSmrg
3451313a12fdSmrg# func_convert_path_msys_to_cygwin ARG
3452313a12fdSmrg# Convert path ARG from MSYS to Cygwin format.  Requires LT_CYGPATH set.
3453313a12fdSmrg# Returns result in func_to_host_file_result.
3454313a12fdSmrgfunc_convert_path_msys_to_cygwin ()
3455313a12fdSmrg{
34567cea3689Smrg  $debug_cmd
34577cea3689Smrg
34587cea3689Smrg  func_to_host_path_result=$1
3459313a12fdSmrg  if test -n "$1"; then
3460313a12fdSmrg    # See func_convert_path_msys_to_w32:
3461313a12fdSmrg    func_stripname : : "$1"
3462313a12fdSmrg    func_to_host_path_tmp1=$func_stripname_result
3463313a12fdSmrg    func_convert_core_msys_to_w32 "$func_to_host_path_tmp1"
3464313a12fdSmrg    func_cygpath -u -p "$func_convert_core_msys_to_w32_result"
34657cea3689Smrg    func_to_host_path_result=$func_cygpath_result
3466313a12fdSmrg    func_convert_path_check : : \
3467313a12fdSmrg      "$func_to_host_path_tmp1" "$func_to_host_path_result"
3468313a12fdSmrg    func_convert_path_front_back_pathsep ":*" "*:" : "$1"
3469313a12fdSmrg  fi
3470313a12fdSmrg}
3471313a12fdSmrg# end func_convert_path_msys_to_cygwin
3472313a12fdSmrg
3473313a12fdSmrg
3474313a12fdSmrg# func_convert_path_nix_to_cygwin ARG
3475313a12fdSmrg# Convert path ARG from *nix to Cygwin format.  Requires Cygwin installed in a
3476313a12fdSmrg# a wine environment, working winepath, and LT_CYGPATH set.  Returns result in
3477313a12fdSmrg# func_to_host_file_result.
3478313a12fdSmrgfunc_convert_path_nix_to_cygwin ()
3479313a12fdSmrg{
34807cea3689Smrg  $debug_cmd
34817cea3689Smrg
34827cea3689Smrg  func_to_host_path_result=$1
3483313a12fdSmrg  if test -n "$1"; then
3484313a12fdSmrg    # Remove leading and trailing path separator characters from
3485313a12fdSmrg    # ARG. msys behavior is inconsistent here, cygpath turns them
3486313a12fdSmrg    # into '.;' and ';.', and winepath ignores them completely.
3487313a12fdSmrg    func_stripname : : "$1"
3488313a12fdSmrg    func_to_host_path_tmp1=$func_stripname_result
3489313a12fdSmrg    func_convert_core_path_wine_to_w32 "$func_to_host_path_tmp1"
3490313a12fdSmrg    func_cygpath -u -p "$func_convert_core_path_wine_to_w32_result"
34917cea3689Smrg    func_to_host_path_result=$func_cygpath_result
3492313a12fdSmrg    func_convert_path_check : : \
3493313a12fdSmrg      "$func_to_host_path_tmp1" "$func_to_host_path_result"
3494313a12fdSmrg    func_convert_path_front_back_pathsep ":*" "*:" : "$1"
3495313a12fdSmrg  fi
3496313a12fdSmrg}
3497313a12fdSmrg# end func_convert_path_nix_to_cygwin
3498313a12fdSmrg
3499313a12fdSmrg
35007cea3689Smrg# func_dll_def_p FILE
35017cea3689Smrg# True iff FILE is a Windows DLL '.def' file.
35027cea3689Smrg# Keep in sync with _LT_DLL_DEF_P in libtool.m4
35037cea3689Smrgfunc_dll_def_p ()
35047cea3689Smrg{
35057cea3689Smrg  $debug_cmd
35067cea3689Smrg
35077cea3689Smrg  func_dll_def_p_tmp=`$SED -n \
35087cea3689Smrg    -e 's/^[	 ]*//' \
35097cea3689Smrg    -e '/^\(;.*\)*$/d' \
35107cea3689Smrg    -e 's/^\(EXPORTS\|LIBRARY\)\([	 ].*\)*$/DEF/p' \
35117cea3689Smrg    -e q \
35127cea3689Smrg    "$1"`
35137cea3689Smrg  test DEF = "$func_dll_def_p_tmp"
35147cea3689Smrg}
35157cea3689Smrg
35167cea3689Smrg
3517e19dfac4Smrg# func_mode_compile arg...
3518e19dfac4Smrgfunc_mode_compile ()
3519e19dfac4Smrg{
35207cea3689Smrg    $debug_cmd
35217cea3689Smrg
3522e19dfac4Smrg    # Get the compilation command and the source file.
3523e19dfac4Smrg    base_compile=
35247cea3689Smrg    srcfile=$nonopt  #  always keep a non-empty value in "srcfile"
3525e19dfac4Smrg    suppress_opt=yes
3526e19dfac4Smrg    suppress_output=
3527e19dfac4Smrg    arg_mode=normal
3528e19dfac4Smrg    libobj=
3529e19dfac4Smrg    later=
3530e19dfac4Smrg    pie_flag=
3531e19dfac4Smrg
3532e19dfac4Smrg    for arg
3533e19dfac4Smrg    do
3534e19dfac4Smrg      case $arg_mode in
3535e19dfac4Smrg      arg  )
3536e19dfac4Smrg	# do not "continue".  Instead, add this to base_compile
35377cea3689Smrg	lastarg=$arg
3538e19dfac4Smrg	arg_mode=normal
3539e19dfac4Smrg	;;
3540e19dfac4Smrg
3541e19dfac4Smrg      target )
35427cea3689Smrg	libobj=$arg
3543e19dfac4Smrg	arg_mode=normal
3544e19dfac4Smrg	continue
3545e19dfac4Smrg	;;
3546e19dfac4Smrg
3547e19dfac4Smrg      normal )
3548e19dfac4Smrg	# Accept any command-line options.
3549e19dfac4Smrg	case $arg in
3550e19dfac4Smrg	-o)
3551e19dfac4Smrg	  test -n "$libobj" && \
35527cea3689Smrg	    func_fatal_error "you cannot specify '-o' more than once"
3553e19dfac4Smrg	  arg_mode=target
3554e19dfac4Smrg	  continue
3555e19dfac4Smrg	  ;;
3556e19dfac4Smrg
3557e19dfac4Smrg	-pie | -fpie | -fPIE)
3558313a12fdSmrg          func_append pie_flag " $arg"
3559e19dfac4Smrg	  continue
3560e19dfac4Smrg	  ;;
3561e19dfac4Smrg
3562e19dfac4Smrg	-shared | -static | -prefer-pic | -prefer-non-pic)
3563313a12fdSmrg	  func_append later " $arg"
3564e19dfac4Smrg	  continue
3565e19dfac4Smrg	  ;;
3566e19dfac4Smrg
3567e19dfac4Smrg	-no-suppress)
3568e19dfac4Smrg	  suppress_opt=no
3569e19dfac4Smrg	  continue
3570e19dfac4Smrg	  ;;
3571e19dfac4Smrg
3572e19dfac4Smrg	-Xcompiler)
3573e19dfac4Smrg	  arg_mode=arg  #  the next one goes into the "base_compile" arg list
3574e19dfac4Smrg	  continue      #  The current "srcfile" will either be retained or
3575e19dfac4Smrg	  ;;            #  replaced later.  I would guess that would be a bug.
3576e19dfac4Smrg
3577e19dfac4Smrg	-Wc,*)
3578e19dfac4Smrg	  func_stripname '-Wc,' '' "$arg"
3579e19dfac4Smrg	  args=$func_stripname_result
3580e19dfac4Smrg	  lastarg=
35817cea3689Smrg	  save_ifs=$IFS; IFS=,
3582e19dfac4Smrg	  for arg in $args; do
35837cea3689Smrg	    IFS=$save_ifs
3584313a12fdSmrg	    func_append_quoted lastarg "$arg"
358527702724Smrg	  done
35867cea3689Smrg	  IFS=$save_ifs
3587e19dfac4Smrg	  func_stripname ' ' '' "$lastarg"
3588e19dfac4Smrg	  lastarg=$func_stripname_result
358927702724Smrg
359027702724Smrg	  # Add the arguments to base_compile.
3591313a12fdSmrg	  func_append base_compile " $lastarg"
359227702724Smrg	  continue
359327702724Smrg	  ;;
359427702724Smrg
3595e19dfac4Smrg	*)
359627702724Smrg	  # Accept the current argument as the source file.
359727702724Smrg	  # The previous "srcfile" becomes the current argument.
359827702724Smrg	  #
35997cea3689Smrg	  lastarg=$srcfile
36007cea3689Smrg	  srcfile=$arg
360127702724Smrg	  ;;
360227702724Smrg	esac  #  case $arg
360327702724Smrg	;;
360427702724Smrg      esac    #  case $arg_mode
360527702724Smrg
360627702724Smrg      # Aesthetically quote the previous argument.
3607313a12fdSmrg      func_append_quoted base_compile "$lastarg"
360827702724Smrg    done # for arg
360927702724Smrg
361027702724Smrg    case $arg_mode in
361127702724Smrg    arg)
3612e19dfac4Smrg      func_fatal_error "you must specify an argument for -Xcompile"
361327702724Smrg      ;;
361427702724Smrg    target)
36157cea3689Smrg      func_fatal_error "you must specify a target with '-o'"
361627702724Smrg      ;;
361727702724Smrg    *)
361827702724Smrg      # Get the name of the library object.
3619e19dfac4Smrg      test -z "$libobj" && {
3620e19dfac4Smrg	func_basename "$srcfile"
36217cea3689Smrg	libobj=$func_basename_result
3622e19dfac4Smrg      }
362327702724Smrg      ;;
362427702724Smrg    esac
362527702724Smrg
362627702724Smrg    # Recognize several different file suffixes.
362727702724Smrg    # If the user specifies -o file.o, it is replaced with file.lo
362827702724Smrg    case $libobj in
3629e19dfac4Smrg    *.[cCFSifmso] | \
3630e19dfac4Smrg    *.ada | *.adb | *.ads | *.asm | \
3631e19dfac4Smrg    *.c++ | *.cc | *.ii | *.class | *.cpp | *.cxx | \
3632313a12fdSmrg    *.[fF][09]? | *.for | *.java | *.go | *.obj | *.sx | *.cu | *.cup)
3633e19dfac4Smrg      func_xform "$libobj"
3634e19dfac4Smrg      libobj=$func_xform_result
3635e19dfac4Smrg      ;;
363627702724Smrg    esac
363727702724Smrg
363827702724Smrg    case $libobj in
3639e19dfac4Smrg    *.lo) func_lo2o "$libobj"; obj=$func_lo2o_result ;;
364027702724Smrg    *)
36417cea3689Smrg      func_fatal_error "cannot determine name of library object from '$libobj'"
364227702724Smrg      ;;
364327702724Smrg    esac
364427702724Smrg
364527702724Smrg    func_infer_tag $base_compile
364627702724Smrg
364727702724Smrg    for arg in $later; do
364827702724Smrg      case $arg in
3649e19dfac4Smrg      -shared)
36507cea3689Smrg	test yes = "$build_libtool_libs" \
36517cea3689Smrg	  || func_fatal_configuration "cannot build a shared library"
3652e19dfac4Smrg	build_old_libs=no
3653e19dfac4Smrg	continue
3654e19dfac4Smrg	;;
3655e19dfac4Smrg
365627702724Smrg      -static)
3657e19dfac4Smrg	build_libtool_libs=no
365827702724Smrg	build_old_libs=yes
365927702724Smrg	continue
366027702724Smrg	;;
366127702724Smrg
366227702724Smrg      -prefer-pic)
366327702724Smrg	pic_mode=yes
366427702724Smrg	continue
366527702724Smrg	;;
366627702724Smrg
366727702724Smrg      -prefer-non-pic)
366827702724Smrg	pic_mode=no
366927702724Smrg	continue
367027702724Smrg	;;
367127702724Smrg      esac
367227702724Smrg    done
367327702724Smrg
367495b7a5c8Smrg    func_quote_arg pretty "$libobj"
367595b7a5c8Smrg    test "X$libobj" != "X$func_quote_arg_result" \
3676e19dfac4Smrg      && $ECHO "X$libobj" | $GREP '[]~#^*{};<>?"'"'"'	 &()|`$[]' \
36777cea3689Smrg      && func_warning "libobj name '$libobj' may not contain shell special characters."
3678e19dfac4Smrg    func_dirname_and_basename "$obj" "/" ""
36797cea3689Smrg    objname=$func_basename_result
36807cea3689Smrg    xdir=$func_dirname_result
36817cea3689Smrg    lobj=$xdir$objdir/$objname
368227702724Smrg
3683e19dfac4Smrg    test -z "$base_compile" && \
3684e19dfac4Smrg      func_fatal_help "you must specify a compilation command"
368527702724Smrg
368627702724Smrg    # Delete any leftover library objects.
36877cea3689Smrg    if test yes = "$build_old_libs"; then
368827702724Smrg      removelist="$obj $lobj $libobj ${libobj}T"
368927702724Smrg    else
369027702724Smrg      removelist="$lobj $libobj ${libobj}T"
369127702724Smrg    fi
369227702724Smrg
369327702724Smrg    # On Cygwin there's no "real" PIC flag so we must build both object types
369427702724Smrg    case $host_os in
3695e19dfac4Smrg    cygwin* | mingw* | pw32* | os2* | cegcc*)
369627702724Smrg      pic_mode=default
369727702724Smrg      ;;
369827702724Smrg    esac
36997cea3689Smrg    if test no = "$pic_mode" && test pass_all != "$deplibs_check_method"; then
370027702724Smrg      # non-PIC code in shared libraries is not supported
370127702724Smrg      pic_mode=default
370227702724Smrg    fi
370327702724Smrg
370427702724Smrg    # Calculate the filename of the output object if compiler does
370527702724Smrg    # not support -o with -c
37067cea3689Smrg    if test no = "$compiler_c_o"; then
37077cea3689Smrg      output_obj=`$ECHO "$srcfile" | $SED 's%^.*/%%; s%\.[^.]*$%%'`.$objext
37087cea3689Smrg      lockfile=$output_obj.lock
370927702724Smrg    else
371027702724Smrg      output_obj=
371127702724Smrg      need_locks=no
371227702724Smrg      lockfile=
371327702724Smrg    fi
371427702724Smrg
371527702724Smrg    # Lock this critical section if it is needed
371627702724Smrg    # We use this script file to make the link, it avoids creating a new file
37177cea3689Smrg    if test yes = "$need_locks"; then
3718e19dfac4Smrg      until $opt_dry_run || ln "$progpath" "$lockfile" 2>/dev/null; do
3719e19dfac4Smrg	func_echo "Waiting for $lockfile to be removed"
372027702724Smrg	sleep 2
372127702724Smrg      done
37227cea3689Smrg    elif test warn = "$need_locks"; then
372327702724Smrg      if test -f "$lockfile"; then
3724e19dfac4Smrg	$ECHO "\
372527702724Smrg*** ERROR, $lockfile exists and contains:
372627702724Smrg`cat $lockfile 2>/dev/null`
372727702724Smrg
372827702724SmrgThis indicates that another process is trying to use the same
372927702724Smrgtemporary object file, and libtool could not work around it because
37307cea3689Smrgyour compiler does not support '-c' and '-o' together.  If you
373127702724Smrgrepeat this compilation, it may succeed, by chance, but you had better
373227702724Smrgavoid parallel builds (make -j) in this platform, or get a better
373327702724Smrgcompiler."
373427702724Smrg
3735e19dfac4Smrg	$opt_dry_run || $RM $removelist
373627702724Smrg	exit $EXIT_FAILURE
373727702724Smrg      fi
3738313a12fdSmrg      func_append removelist " $output_obj"
3739e19dfac4Smrg      $ECHO "$srcfile" > "$lockfile"
374027702724Smrg    fi
374127702724Smrg
3742e19dfac4Smrg    $opt_dry_run || $RM $removelist
3743313a12fdSmrg    func_append removelist " $lockfile"
3744e19dfac4Smrg    trap '$opt_dry_run || $RM $removelist; exit $EXIT_FAILURE' 1 2 15
3745e19dfac4Smrg
3746313a12fdSmrg    func_to_tool_file "$srcfile" func_convert_file_msys_to_w32
3747313a12fdSmrg    srcfile=$func_to_tool_file_result
374895b7a5c8Smrg    func_quote_arg pretty "$srcfile"
374995b7a5c8Smrg    qsrcfile=$func_quote_arg_result
375027702724Smrg
375127702724Smrg    # Only build a PIC object if we are building libtool libraries.
37527cea3689Smrg    if test yes = "$build_libtool_libs"; then
375327702724Smrg      # Without this assignment, base_compile gets emptied.
375427702724Smrg      fbsd_hideous_sh_bug=$base_compile
375527702724Smrg
37567cea3689Smrg      if test no != "$pic_mode"; then
375727702724Smrg	command="$base_compile $qsrcfile $pic_flag"
375827702724Smrg      else
375927702724Smrg	# Don't build PIC code
376027702724Smrg	command="$base_compile $qsrcfile"
376127702724Smrg      fi
376227702724Smrg
3763e19dfac4Smrg      func_mkdir_p "$xdir$objdir"
376427702724Smrg
376527702724Smrg      if test -z "$output_obj"; then
376627702724Smrg	# Place PIC objects in $objdir
3767313a12fdSmrg	func_append command " -o $lobj"
376827702724Smrg      fi
376927702724Smrg
3770e19dfac4Smrg      func_show_eval_locale "$command"	\
3771e19dfac4Smrg          'test -n "$output_obj" && $RM $removelist; exit $EXIT_FAILURE'
377227702724Smrg
37737cea3689Smrg      if test warn = "$need_locks" &&
377427702724Smrg	 test "X`cat $lockfile 2>/dev/null`" != "X$srcfile"; then
3775e19dfac4Smrg	$ECHO "\
377627702724Smrg*** ERROR, $lockfile contains:
377727702724Smrg`cat $lockfile 2>/dev/null`
377827702724Smrg
377927702724Smrgbut it should contain:
378027702724Smrg$srcfile
378127702724Smrg
378227702724SmrgThis indicates that another process is trying to use the same
378327702724Smrgtemporary object file, and libtool could not work around it because
37847cea3689Smrgyour compiler does not support '-c' and '-o' together.  If you
378527702724Smrgrepeat this compilation, it may succeed, by chance, but you had better
378627702724Smrgavoid parallel builds (make -j) in this platform, or get a better
378727702724Smrgcompiler."
378827702724Smrg
3789e19dfac4Smrg	$opt_dry_run || $RM $removelist
379027702724Smrg	exit $EXIT_FAILURE
379127702724Smrg      fi
379227702724Smrg
379327702724Smrg      # Just move the object if needed, then go on to compile the next one
379427702724Smrg      if test -n "$output_obj" && test "X$output_obj" != "X$lobj"; then
3795e19dfac4Smrg	func_show_eval '$MV "$output_obj" "$lobj"' \
3796e19dfac4Smrg	  'error=$?; $opt_dry_run || $RM $removelist; exit $error'
379727702724Smrg      fi
379827702724Smrg
379927702724Smrg      # Allow error messages only from the first compilation.
38007cea3689Smrg      if test yes = "$suppress_opt"; then
3801e19dfac4Smrg	suppress_output=' >/dev/null 2>&1'
380227702724Smrg      fi
380327702724Smrg    fi
380427702724Smrg
380527702724Smrg    # Only build a position-dependent object if we build old libraries.
38067cea3689Smrg    if test yes = "$build_old_libs"; then
38077cea3689Smrg      if test yes != "$pic_mode"; then
380827702724Smrg	# Don't build PIC code
3809e19dfac4Smrg	command="$base_compile $qsrcfile$pie_flag"
381027702724Smrg      else
381127702724Smrg	command="$base_compile $qsrcfile $pic_flag"
381227702724Smrg      fi
38137cea3689Smrg      if test yes = "$compiler_c_o"; then
3814313a12fdSmrg	func_append command " -o $obj"
381527702724Smrg      fi
381627702724Smrg
381727702724Smrg      # Suppress compiler output if we already did a PIC compilation.
3818313a12fdSmrg      func_append command "$suppress_output"
3819e19dfac4Smrg      func_show_eval_locale "$command" \
3820e19dfac4Smrg        '$opt_dry_run || $RM $removelist; exit $EXIT_FAILURE'
382127702724Smrg
38227cea3689Smrg      if test warn = "$need_locks" &&
382327702724Smrg	 test "X`cat $lockfile 2>/dev/null`" != "X$srcfile"; then
3824e19dfac4Smrg	$ECHO "\
382527702724Smrg*** ERROR, $lockfile contains:
382627702724Smrg`cat $lockfile 2>/dev/null`
382727702724Smrg
382827702724Smrgbut it should contain:
382927702724Smrg$srcfile
383027702724Smrg
383127702724SmrgThis indicates that another process is trying to use the same
383227702724Smrgtemporary object file, and libtool could not work around it because
38337cea3689Smrgyour compiler does not support '-c' and '-o' together.  If you
383427702724Smrgrepeat this compilation, it may succeed, by chance, but you had better
383527702724Smrgavoid parallel builds (make -j) in this platform, or get a better
383627702724Smrgcompiler."
383727702724Smrg
3838e19dfac4Smrg	$opt_dry_run || $RM $removelist
383927702724Smrg	exit $EXIT_FAILURE
384027702724Smrg      fi
384127702724Smrg
384227702724Smrg      # Just move the object if needed
384327702724Smrg      if test -n "$output_obj" && test "X$output_obj" != "X$obj"; then
3844e19dfac4Smrg	func_show_eval '$MV "$output_obj" "$obj"' \
3845e19dfac4Smrg	  'error=$?; $opt_dry_run || $RM $removelist; exit $error'
384627702724Smrg      fi
384727702724Smrg    fi
384827702724Smrg
3849e19dfac4Smrg    $opt_dry_run || {
3850e19dfac4Smrg      func_write_libtool_object "$libobj" "$objdir/$objname" "$objname"
385127702724Smrg
3852e19dfac4Smrg      # Unlock the critical section if it was locked
38537cea3689Smrg      if test no != "$need_locks"; then
3854e19dfac4Smrg	removelist=$lockfile
3855e19dfac4Smrg        $RM "$lockfile"
3856e19dfac4Smrg      fi
3857e19dfac4Smrg    }
385827702724Smrg
385927702724Smrg    exit $EXIT_SUCCESS
3860e19dfac4Smrg}
386127702724Smrg
3862e19dfac4Smrg$opt_help || {
38637cea3689Smrg  test compile = "$opt_mode" && func_mode_compile ${1+"$@"}
3864e19dfac4Smrg}
386527702724Smrg
3866e19dfac4Smrgfunc_mode_help ()
3867e19dfac4Smrg{
3868e19dfac4Smrg    # We need to display help for each of the modes.
3869313a12fdSmrg    case $opt_mode in
3870e19dfac4Smrg      "")
3871e19dfac4Smrg        # Generic help is extracted from the usage comments
3872e19dfac4Smrg        # at the start of this file.
3873e19dfac4Smrg        func_help
3874e19dfac4Smrg        ;;
387527702724Smrg
3876e19dfac4Smrg      clean)
3877e19dfac4Smrg        $ECHO \
3878e19dfac4Smrg"Usage: $progname [OPTION]... --mode=clean RM [RM-OPTION]... FILE...
387927702724Smrg
3880e19dfac4SmrgRemove files from the build directory.
388127702724Smrg
3882e19dfac4SmrgRM is the name of the program to use to delete files associated with each FILE
38837cea3689Smrg(typically '/bin/rm').  RM-OPTIONS are options (such as '-f') to be passed
3884e19dfac4Smrgto RM.
388527702724Smrg
3886e19dfac4SmrgIf FILE is a libtool library, object or program, all the files associated
3887e19dfac4Smrgwith it are deleted. Otherwise, only FILE itself is deleted using RM."
3888e19dfac4Smrg        ;;
388927702724Smrg
3890e19dfac4Smrg      compile)
3891e19dfac4Smrg      $ECHO \
3892e19dfac4Smrg"Usage: $progname [OPTION]... --mode=compile COMPILE-COMMAND... SOURCEFILE
389327702724Smrg
3894e19dfac4SmrgCompile a source file into a libtool library object.
389527702724Smrg
3896e19dfac4SmrgThis mode accepts the following additional options:
389727702724Smrg
3898e19dfac4Smrg  -o OUTPUT-FILE    set the output file name to OUTPUT-FILE
3899e19dfac4Smrg  -no-suppress      do not suppress compiler output for multiple passes
3900313a12fdSmrg  -prefer-pic       try to build PIC objects only
3901313a12fdSmrg  -prefer-non-pic   try to build non-PIC objects only
39027cea3689Smrg  -shared           do not build a '.o' file suitable for static linking
39037cea3689Smrg  -static           only build a '.o' file suitable for static linking
390495b7a5c8Smrg  -Wc,FLAG
390595b7a5c8Smrg  -Xcompiler FLAG   pass FLAG directly to the compiler
390627702724Smrg
39077cea3689SmrgCOMPILE-COMMAND is a command to be used in creating a 'standard' object file
3908e19dfac4Smrgfrom the given SOURCEFILE.
390927702724Smrg
3910e19dfac4SmrgThe output file name is determined by removing the directory component from
39117cea3689SmrgSOURCEFILE, then substituting the C source code suffix '.c' with the
39127cea3689Smrglibrary object suffix, '.lo'."
3913e19dfac4Smrg        ;;
391427702724Smrg
3915e19dfac4Smrg      execute)
3916e19dfac4Smrg        $ECHO \
3917e19dfac4Smrg"Usage: $progname [OPTION]... --mode=execute COMMAND [ARGS]...
391827702724Smrg
3919e19dfac4SmrgAutomatically set library path, then run a program.
392027702724Smrg
3921e19dfac4SmrgThis mode accepts the following additional options:
392227702724Smrg
3923e19dfac4Smrg  -dlopen FILE      add the directory containing FILE to the library path
392427702724Smrg
39257cea3689SmrgThis mode sets the library path environment variable according to '-dlopen'
3926e19dfac4Smrgflags.
392727702724Smrg
3928e19dfac4SmrgIf any of the ARGS are libtool executable wrappers, then they are translated
3929e19dfac4Smrginto their corresponding uninstalled binary, and any of their required library
3930e19dfac4Smrgdirectories are added to the library path.
393127702724Smrg
3932e19dfac4SmrgThen, COMMAND is executed, with ARGS as arguments."
3933e19dfac4Smrg        ;;
393427702724Smrg
3935e19dfac4Smrg      finish)
3936e19dfac4Smrg        $ECHO \
3937e19dfac4Smrg"Usage: $progname [OPTION]... --mode=finish [LIBDIR]...
393827702724Smrg
3939e19dfac4SmrgComplete the installation of libtool libraries.
394027702724Smrg
3941e19dfac4SmrgEach LIBDIR is a directory that contains libtool libraries.
394227702724Smrg
3943e19dfac4SmrgThe commands that this mode executes may require superuser privileges.  Use
39447cea3689Smrgthe '--dry-run' option if you just want to see what would be executed."
3945e19dfac4Smrg        ;;
394627702724Smrg
3947e19dfac4Smrg      install)
3948e19dfac4Smrg        $ECHO \
3949e19dfac4Smrg"Usage: $progname [OPTION]... --mode=install INSTALL-COMMAND...
395027702724Smrg
3951e19dfac4SmrgInstall executables or libraries.
395227702724Smrg
3953e19dfac4SmrgINSTALL-COMMAND is the installation command.  The first component should be
39547cea3689Smrgeither the 'install' or 'cp' program.
395527702724Smrg
3956e19dfac4SmrgThe following components of INSTALL-COMMAND are treated specially:
395727702724Smrg
3958313a12fdSmrg  -inst-prefix-dir PREFIX-DIR  Use PREFIX-DIR as a staging area for installation
395927702724Smrg
3960e19dfac4SmrgThe rest of the components are interpreted as arguments to that command (only
3961e19dfac4SmrgBSD-compatible install options are recognized)."
3962e19dfac4Smrg        ;;
396327702724Smrg
3964e19dfac4Smrg      link)
3965e19dfac4Smrg        $ECHO \
3966e19dfac4Smrg"Usage: $progname [OPTION]... --mode=link LINK-COMMAND...
396727702724Smrg
3968e19dfac4SmrgLink object files or libraries together to form another library, or to
3969e19dfac4Smrgcreate an executable program.
397027702724Smrg
3971e19dfac4SmrgLINK-COMMAND is a command using the C compiler that you would use to create
3972e19dfac4Smrga program from several object files.
397327702724Smrg
3974e19dfac4SmrgThe following components of LINK-COMMAND are treated specially:
397527702724Smrg
3976e19dfac4Smrg  -all-static       do not do any dynamic linking at all
3977e19dfac4Smrg  -avoid-version    do not add a version suffix if possible
3978313a12fdSmrg  -bindir BINDIR    specify path to binaries directory (for systems where
3979313a12fdSmrg                    libraries must be found in the PATH setting at runtime)
39807cea3689Smrg  -dlopen FILE      '-dlpreopen' FILE if it cannot be dlopened at runtime
3981e19dfac4Smrg  -dlpreopen FILE   link in FILE and add its symbols to lt_preloaded_symbols
3982e19dfac4Smrg  -export-dynamic   allow symbols from OUTPUT-FILE to be resolved with dlsym(3)
3983e19dfac4Smrg  -export-symbols SYMFILE
3984e19dfac4Smrg                    try to export only the symbols listed in SYMFILE
3985e19dfac4Smrg  -export-symbols-regex REGEX
3986e19dfac4Smrg                    try to export only the symbols matching REGEX
3987e19dfac4Smrg  -LLIBDIR          search LIBDIR for required installed libraries
3988e19dfac4Smrg  -lNAME            OUTPUT-FILE requires the installed library libNAME
3989e19dfac4Smrg  -module           build a library that can dlopened
3990e19dfac4Smrg  -no-fast-install  disable the fast-install mode
3991e19dfac4Smrg  -no-install       link a not-installable executable
3992e19dfac4Smrg  -no-undefined     declare that a library does not refer to external symbols
3993e19dfac4Smrg  -o OUTPUT-FILE    create OUTPUT-FILE from the specified objects
39947cea3689Smrg  -objectlist FILE  use a list of object files found in FILE to specify objects
39957cea3689Smrg  -os2dllname NAME  force a short DLL name on OS/2 (no effect on other OSes)
3996e19dfac4Smrg  -precious-files-regex REGEX
3997e19dfac4Smrg                    don't remove output files matching REGEX
3998e19dfac4Smrg  -release RELEASE  specify package release information
3999e19dfac4Smrg  -rpath LIBDIR     the created library will eventually be installed in LIBDIR
4000e19dfac4Smrg  -R[ ]LIBDIR       add LIBDIR to the runtime path of programs and libraries
4001e19dfac4Smrg  -shared           only do dynamic linking of libtool libraries
4002e19dfac4Smrg  -shrext SUFFIX    override the standard shared library file extension
4003e19dfac4Smrg  -static           do not do any dynamic linking of uninstalled libtool libraries
4004e19dfac4Smrg  -static-libtool-libs
4005e19dfac4Smrg                    do not do any dynamic linking of libtool libraries
4006e19dfac4Smrg  -version-info CURRENT[:REVISION[:AGE]]
4007e19dfac4Smrg                    specify library version info [each variable defaults to 0]
4008e19dfac4Smrg  -weak LIBNAME     declare that the target provides the LIBNAME interface
4009313a12fdSmrg  -Wc,FLAG
4010313a12fdSmrg  -Xcompiler FLAG   pass linker-specific FLAG directly to the compiler
401195b7a5c8Smrg  -Wa,FLAG
401295b7a5c8Smrg  -Xassembler FLAG  pass linker-specific FLAG directly to the assembler
4013313a12fdSmrg  -Wl,FLAG
4014313a12fdSmrg  -Xlinker FLAG     pass linker-specific FLAG directly to the linker
4015313a12fdSmrg  -XCClinker FLAG   pass link-specific FLAG to the compiler driver (CC)
401627702724Smrg
40177cea3689SmrgAll other options (arguments beginning with '-') are ignored.
401827702724Smrg
40197cea3689SmrgEvery other argument is treated as a filename.  Files ending in '.la' are
4020e19dfac4Smrgtreated as uninstalled libtool libraries, other files are standard or library
4021e19dfac4Smrgobject files.
402227702724Smrg
40237cea3689SmrgIf the OUTPUT-FILE ends in '.la', then a libtool library is created,
40247cea3689Smrgonly library objects ('.lo' files) may be specified, and '-rpath' is
4025e19dfac4Smrgrequired, except when creating a convenience library.
402627702724Smrg
40277cea3689SmrgIf OUTPUT-FILE ends in '.a' or '.lib', then a standard library is created
40287cea3689Smrgusing 'ar' and 'ranlib', or on Windows using 'lib'.
402927702724Smrg
40307cea3689SmrgIf OUTPUT-FILE ends in '.lo' or '.$objext', then a reloadable object file
4031e19dfac4Smrgis created, otherwise an executable program is created."
403227702724Smrg        ;;
403327702724Smrg
4034e19dfac4Smrg      uninstall)
4035e19dfac4Smrg        $ECHO \
4036e19dfac4Smrg"Usage: $progname [OPTION]... --mode=uninstall RM [RM-OPTION]... FILE...
403727702724Smrg
4038e19dfac4SmrgRemove libraries from an installation directory.
403927702724Smrg
4040e19dfac4SmrgRM is the name of the program to use to delete files associated with each FILE
40417cea3689Smrg(typically '/bin/rm').  RM-OPTIONS are options (such as '-f') to be passed
4042e19dfac4Smrgto RM.
404327702724Smrg
4044e19dfac4SmrgIf FILE is a libtool library, all the files associated with it are deleted.
4045e19dfac4SmrgOtherwise, only FILE itself is deleted using RM."
4046e19dfac4Smrg        ;;
404727702724Smrg
4048e19dfac4Smrg      *)
40497cea3689Smrg        func_fatal_help "invalid operation mode '$opt_mode'"
4050e19dfac4Smrg        ;;
4051e19dfac4Smrg    esac
405227702724Smrg
4053313a12fdSmrg    echo
40547cea3689Smrg    $ECHO "Try '$progname --help' for more information about other modes."
4055e19dfac4Smrg}
405627702724Smrg
4057313a12fdSmrg# Now that we've collected a possible --mode arg, show help if necessary
4058313a12fdSmrgif $opt_help; then
40597cea3689Smrg  if test : = "$opt_help"; then
4060313a12fdSmrg    func_mode_help
4061313a12fdSmrg  else
4062313a12fdSmrg    {
4063313a12fdSmrg      func_help noexit
4064313a12fdSmrg      for opt_mode in compile link execute install finish uninstall clean; do
4065313a12fdSmrg	func_mode_help
4066313a12fdSmrg      done
40677cea3689Smrg    } | $SED -n '1p; 2,$s/^Usage:/  or: /p'
4068313a12fdSmrg    {
4069313a12fdSmrg      func_help noexit
4070313a12fdSmrg      for opt_mode in compile link execute install finish uninstall clean; do
4071313a12fdSmrg	echo
4072313a12fdSmrg	func_mode_help
4073313a12fdSmrg      done
4074313a12fdSmrg    } |
40757cea3689Smrg    $SED '1d
4076313a12fdSmrg      /^When reporting/,/^Report/{
4077313a12fdSmrg	H
4078313a12fdSmrg	d
4079313a12fdSmrg      }
4080313a12fdSmrg      $x
4081313a12fdSmrg      /information about other modes/d
4082313a12fdSmrg      /more detailed .*MODE/d
4083313a12fdSmrg      s/^Usage:.*--mode=\([^ ]*\) .*/Description of \1 mode:/'
4084313a12fdSmrg  fi
4085313a12fdSmrg  exit $?
4086313a12fdSmrgfi
408727702724Smrg
408827702724Smrg
4089e19dfac4Smrg# func_mode_execute arg...
4090e19dfac4Smrgfunc_mode_execute ()
4091e19dfac4Smrg{
40927cea3689Smrg    $debug_cmd
40937cea3689Smrg
4094e19dfac4Smrg    # The first argument is the command name.
40957cea3689Smrg    cmd=$nonopt
4096e19dfac4Smrg    test -z "$cmd" && \
4097e19dfac4Smrg      func_fatal_help "you must specify a COMMAND"
409827702724Smrg
4099e19dfac4Smrg    # Handle -dlopen flags immediately.
4100313a12fdSmrg    for file in $opt_dlopen; do
4101e19dfac4Smrg      test -f "$file" \
41027cea3689Smrg	|| func_fatal_help "'$file' is not a file"
410327702724Smrg
4104e19dfac4Smrg      dir=
4105e19dfac4Smrg      case $file in
4106e19dfac4Smrg      *.la)
4107313a12fdSmrg	func_resolve_sysroot "$file"
4108313a12fdSmrg	file=$func_resolve_sysroot_result
4109313a12fdSmrg
4110e19dfac4Smrg	# Check to see that this really is a libtool archive.
4111e19dfac4Smrg	func_lalib_unsafe_p "$file" \
41127cea3689Smrg	  || func_fatal_help "'$lib' is not a valid libtool archive"
411327702724Smrg
4114e19dfac4Smrg	# Read the libtool library.
4115e19dfac4Smrg	dlname=
4116e19dfac4Smrg	library_names=
4117e19dfac4Smrg	func_source "$file"
411827702724Smrg
4119e19dfac4Smrg	# Skip this library if it cannot be dlopened.
4120e19dfac4Smrg	if test -z "$dlname"; then
4121e19dfac4Smrg	  # Warn if it was a shared library.
4122e19dfac4Smrg	  test -n "$library_names" && \
41237cea3689Smrg	    func_warning "'$file' was not linked with '-export-dynamic'"
4124e19dfac4Smrg	  continue
4125e19dfac4Smrg	fi
412627702724Smrg
4127e19dfac4Smrg	func_dirname "$file" "" "."
41287cea3689Smrg	dir=$func_dirname_result
412927702724Smrg
4130e19dfac4Smrg	if test -f "$dir/$objdir/$dlname"; then
4131313a12fdSmrg	  func_append dir "/$objdir"
4132e19dfac4Smrg	else
4133e19dfac4Smrg	  if test ! -f "$dir/$dlname"; then
41347cea3689Smrg	    func_fatal_error "cannot find '$dlname' in '$dir' or '$dir/$objdir'"
4135e19dfac4Smrg	  fi
4136e19dfac4Smrg	fi
413727702724Smrg	;;
413827702724Smrg
4139e19dfac4Smrg      *.lo)
4140e19dfac4Smrg	# Just add the directory containing the .lo file.
4141e19dfac4Smrg	func_dirname "$file" "" "."
41427cea3689Smrg	dir=$func_dirname_result
414327702724Smrg	;;
414427702724Smrg
4145e19dfac4Smrg      *)
41467cea3689Smrg	func_warning "'-dlopen' is ignored for non-libtool libraries and objects"
414727702724Smrg	continue
414827702724Smrg	;;
4149e19dfac4Smrg      esac
415027702724Smrg
4151e19dfac4Smrg      # Get the absolute pathname.
4152e19dfac4Smrg      absdir=`cd "$dir" && pwd`
41537cea3689Smrg      test -n "$absdir" && dir=$absdir
415427702724Smrg
4155e19dfac4Smrg      # Now add the directory to shlibpath_var.
4156e19dfac4Smrg      if eval "test -z \"\$$shlibpath_var\""; then
4157e19dfac4Smrg	eval "$shlibpath_var=\"\$dir\""
4158e19dfac4Smrg      else
4159e19dfac4Smrg	eval "$shlibpath_var=\"\$dir:\$$shlibpath_var\""
4160e19dfac4Smrg      fi
4161e19dfac4Smrg    done
416227702724Smrg
4163e19dfac4Smrg    # This variable tells wrapper scripts just to set shlibpath_var
4164e19dfac4Smrg    # rather than running their programs.
41657cea3689Smrg    libtool_execute_magic=$magic
416627702724Smrg
4167e19dfac4Smrg    # Check if any of the arguments is a wrapper script.
4168e19dfac4Smrg    args=
4169e19dfac4Smrg    for file
4170e19dfac4Smrg    do
4171e19dfac4Smrg      case $file in
4172313a12fdSmrg      -* | *.la | *.lo ) ;;
4173e19dfac4Smrg      *)
4174e19dfac4Smrg	# Do a test to see if this is really a libtool program.
4175e19dfac4Smrg	if func_ltwrapper_script_p "$file"; then
4176e19dfac4Smrg	  func_source "$file"
4177e19dfac4Smrg	  # Transform arg to wrapped name.
41787cea3689Smrg	  file=$progdir/$program
4179e19dfac4Smrg	elif func_ltwrapper_executable_p "$file"; then
4180e19dfac4Smrg	  func_ltwrapper_scriptname "$file"
4181e19dfac4Smrg	  func_source "$func_ltwrapper_scriptname_result"
4182e19dfac4Smrg	  # Transform arg to wrapped name.
41837cea3689Smrg	  file=$progdir/$program
4184e19dfac4Smrg	fi
4185e19dfac4Smrg	;;
4186e19dfac4Smrg      esac
4187e19dfac4Smrg      # Quote arguments (to preserve shell metacharacters).
4188313a12fdSmrg      func_append_quoted args "$file"
4189e19dfac4Smrg    done
419027702724Smrg
41917cea3689Smrg    if $opt_dry_run; then
41927cea3689Smrg      # Display what would be done.
41937cea3689Smrg      if test -n "$shlibpath_var"; then
41947cea3689Smrg	eval "\$ECHO \"\$shlibpath_var=\$$shlibpath_var\""
41957cea3689Smrg	echo "export $shlibpath_var"
41967cea3689Smrg      fi
41977cea3689Smrg      $ECHO "$cmd$args"
41987cea3689Smrg      exit $EXIT_SUCCESS
41997cea3689Smrg    else
4200e19dfac4Smrg      if test -n "$shlibpath_var"; then
4201e19dfac4Smrg	# Export the shlibpath_var.
4202e19dfac4Smrg	eval "export $shlibpath_var"
4203e19dfac4Smrg      fi
420427702724Smrg
4205e19dfac4Smrg      # Restore saved environment variables
4206e19dfac4Smrg      for lt_var in LANG LANGUAGE LC_ALL LC_CTYPE LC_COLLATE LC_MESSAGES
4207e19dfac4Smrg      do
4208e19dfac4Smrg	eval "if test \"\${save_$lt_var+set}\" = set; then
4209e19dfac4Smrg                $lt_var=\$save_$lt_var; export $lt_var
4210e19dfac4Smrg	      else
4211e19dfac4Smrg		$lt_unset $lt_var
4212e19dfac4Smrg	      fi"
4213e19dfac4Smrg      done
421427702724Smrg
4215e19dfac4Smrg      # Now prepare to actually exec the command.
42167cea3689Smrg      exec_cmd=\$cmd$args
4217e19dfac4Smrg    fi
4218e19dfac4Smrg}
421927702724Smrg
42207cea3689Smrgtest execute = "$opt_mode" && func_mode_execute ${1+"$@"}
422127702724Smrg
422227702724Smrg
4223e19dfac4Smrg# func_mode_finish arg...
4224e19dfac4Smrgfunc_mode_finish ()
4225e19dfac4Smrg{
42267cea3689Smrg    $debug_cmd
42277cea3689Smrg
4228313a12fdSmrg    libs=
4229313a12fdSmrg    libdirs=
4230e19dfac4Smrg    admincmds=
423127702724Smrg
4232313a12fdSmrg    for opt in "$nonopt" ${1+"$@"}
4233313a12fdSmrg    do
4234313a12fdSmrg      if test -d "$opt"; then
4235313a12fdSmrg	func_append libdirs " $opt"
4236313a12fdSmrg
4237313a12fdSmrg      elif test -f "$opt"; then
4238313a12fdSmrg	if func_lalib_unsafe_p "$opt"; then
4239313a12fdSmrg	  func_append libs " $opt"
4240313a12fdSmrg	else
42417cea3689Smrg	  func_warning "'$opt' is not a valid libtool archive"
4242313a12fdSmrg	fi
4243313a12fdSmrg
4244313a12fdSmrg      else
42457cea3689Smrg	func_fatal_error "invalid argument '$opt'"
4246313a12fdSmrg      fi
4247313a12fdSmrg    done
4248313a12fdSmrg
4249313a12fdSmrg    if test -n "$libs"; then
4250313a12fdSmrg      if test -n "$lt_sysroot"; then
4251313a12fdSmrg        sysroot_regex=`$ECHO "$lt_sysroot" | $SED "$sed_make_literal_regex"`
4252313a12fdSmrg        sysroot_cmd="s/\([ ']\)$sysroot_regex/\1/g;"
4253313a12fdSmrg      else
4254313a12fdSmrg        sysroot_cmd=
4255313a12fdSmrg      fi
4256313a12fdSmrg
4257313a12fdSmrg      # Remove sysroot references
4258313a12fdSmrg      if $opt_dry_run; then
4259313a12fdSmrg        for lib in $libs; do
42607cea3689Smrg          echo "removing references to $lt_sysroot and '=' prefixes from $lib"
4261313a12fdSmrg        done
4262313a12fdSmrg      else
4263313a12fdSmrg        tmpdir=`func_mktempdir`
4264313a12fdSmrg        for lib in $libs; do
42657cea3689Smrg	  $SED -e "$sysroot_cmd s/\([ ']-[LR]\)=/\1/g; s/\([ ']\)=/\1/g" $lib \
4266313a12fdSmrg	    > $tmpdir/tmp-la
4267313a12fdSmrg	  mv -f $tmpdir/tmp-la $lib
4268313a12fdSmrg	done
4269313a12fdSmrg        ${RM}r "$tmpdir"
4270313a12fdSmrg      fi
4271313a12fdSmrg    fi
427227702724Smrg
4273313a12fdSmrg    if test -n "$finish_cmds$finish_eval" && test -n "$libdirs"; then
4274e19dfac4Smrg      for libdir in $libdirs; do
4275e19dfac4Smrg	if test -n "$finish_cmds"; then
4276e19dfac4Smrg	  # Do each command in the finish commands.
4277e19dfac4Smrg	  func_execute_cmds "$finish_cmds" 'admincmds="$admincmds
4278e19dfac4Smrg'"$cmd"'"'
4279e19dfac4Smrg	fi
4280e19dfac4Smrg	if test -n "$finish_eval"; then
4281e19dfac4Smrg	  # Do the single finish_eval.
4282e19dfac4Smrg	  eval cmds=\"$finish_eval\"
4283313a12fdSmrg	  $opt_dry_run || eval "$cmds" || func_append admincmds "
4284e19dfac4Smrg       $cmds"
4285e19dfac4Smrg	fi
4286e19dfac4Smrg      done
4287e19dfac4Smrg    fi
428827702724Smrg
4289e19dfac4Smrg    # Exit here if they wanted silent mode.
42907cea3689Smrg    $opt_quiet && exit $EXIT_SUCCESS
429127702724Smrg
4292313a12fdSmrg    if test -n "$finish_cmds$finish_eval" && test -n "$libdirs"; then
4293313a12fdSmrg      echo "----------------------------------------------------------------------"
4294313a12fdSmrg      echo "Libraries have been installed in:"
4295313a12fdSmrg      for libdir in $libdirs; do
4296313a12fdSmrg	$ECHO "   $libdir"
4297313a12fdSmrg      done
4298313a12fdSmrg      echo
4299313a12fdSmrg      echo "If you ever happen to want to link against installed libraries"
4300313a12fdSmrg      echo "in a given directory, LIBDIR, you must either use libtool, and"
43017cea3689Smrg      echo "specify the full pathname of the library, or use the '-LLIBDIR'"
4302313a12fdSmrg      echo "flag during linking and do at least one of the following:"
4303313a12fdSmrg      if test -n "$shlibpath_var"; then
43047cea3689Smrg	echo "   - add LIBDIR to the '$shlibpath_var' environment variable"
4305313a12fdSmrg	echo "     during execution"
4306313a12fdSmrg      fi
4307313a12fdSmrg      if test -n "$runpath_var"; then
43087cea3689Smrg	echo "   - add LIBDIR to the '$runpath_var' environment variable"
4309313a12fdSmrg	echo "     during linking"
4310313a12fdSmrg      fi
4311313a12fdSmrg      if test -n "$hardcode_libdir_flag_spec"; then
4312313a12fdSmrg	libdir=LIBDIR
4313313a12fdSmrg	eval flag=\"$hardcode_libdir_flag_spec\"
4314313a12fdSmrg
43157cea3689Smrg	$ECHO "   - use the '$flag' linker flag"
4316313a12fdSmrg      fi
4317313a12fdSmrg      if test -n "$admincmds"; then
4318313a12fdSmrg	$ECHO "   - have your system administrator run these commands:$admincmds"
4319313a12fdSmrg      fi
4320313a12fdSmrg      if test -f /etc/ld.so.conf; then
43217cea3689Smrg	echo "   - have your system administrator add LIBDIR to '/etc/ld.so.conf'"
4322313a12fdSmrg      fi
4323313a12fdSmrg      echo
432427702724Smrg
4325313a12fdSmrg      echo "See any operating system documentation about shared libraries for"
4326313a12fdSmrg      case $host in
4327313a12fdSmrg	solaris2.[6789]|solaris2.1[0-9])
4328313a12fdSmrg	  echo "more information, such as the ld(1), crle(1) and ld.so(8) manual"
4329313a12fdSmrg	  echo "pages."
4330313a12fdSmrg	  ;;
4331313a12fdSmrg	*)
4332313a12fdSmrg	  echo "more information, such as the ld(1) and ld.so(8) manual pages."
4333313a12fdSmrg	  ;;
4334313a12fdSmrg      esac
4335313a12fdSmrg      echo "----------------------------------------------------------------------"
4336e19dfac4Smrg    fi
4337e19dfac4Smrg    exit $EXIT_SUCCESS
4338e19dfac4Smrg}
433927702724Smrg
43407cea3689Smrgtest finish = "$opt_mode" && func_mode_finish ${1+"$@"}
434127702724Smrg
434227702724Smrg
4343e19dfac4Smrg# func_mode_install arg...
4344e19dfac4Smrgfunc_mode_install ()
4345e19dfac4Smrg{
43467cea3689Smrg    $debug_cmd
43477cea3689Smrg
4348e19dfac4Smrg    # There may be an optional sh(1) argument at the beginning of
4349e19dfac4Smrg    # install_prog (especially on Windows NT).
43507cea3689Smrg    if test "$SHELL" = "$nonopt" || test /bin/sh = "$nonopt" ||
4351e19dfac4Smrg       # Allow the use of GNU shtool's install command.
43527cea3689Smrg       case $nonopt in *shtool*) :;; *) false;; esac
43537cea3689Smrg    then
4354e19dfac4Smrg      # Aesthetically quote it.
435595b7a5c8Smrg      func_quote_arg pretty "$nonopt"
435695b7a5c8Smrg      install_prog="$func_quote_arg_result "
4357e19dfac4Smrg      arg=$1
4358e19dfac4Smrg      shift
4359e19dfac4Smrg    else
4360e19dfac4Smrg      install_prog=
4361e19dfac4Smrg      arg=$nonopt
4362e19dfac4Smrg    fi
436327702724Smrg
4364e19dfac4Smrg    # The real first argument should be the name of the installation program.
4365e19dfac4Smrg    # Aesthetically quote it.
436695b7a5c8Smrg    func_quote_arg pretty "$arg"
436795b7a5c8Smrg    func_append install_prog "$func_quote_arg_result"
4368313a12fdSmrg    install_shared_prog=$install_prog
4369313a12fdSmrg    case " $install_prog " in
4370313a12fdSmrg      *[\\\ /]cp\ *) install_cp=: ;;
4371313a12fdSmrg      *) install_cp=false ;;
4372313a12fdSmrg    esac
4373e19dfac4Smrg
4374e19dfac4Smrg    # We need to accept at least all the BSD install flags.
4375e19dfac4Smrg    dest=
4376e19dfac4Smrg    files=
4377e19dfac4Smrg    opts=
4378e19dfac4Smrg    prev=
4379e19dfac4Smrg    install_type=
43807cea3689Smrg    isdir=false
4381e19dfac4Smrg    stripme=
4382313a12fdSmrg    no_mode=:
4383e19dfac4Smrg    for arg
4384e19dfac4Smrg    do
4385313a12fdSmrg      arg2=
4386e19dfac4Smrg      if test -n "$dest"; then
4387313a12fdSmrg	func_append files " $dest"
4388e19dfac4Smrg	dest=$arg
4389e19dfac4Smrg	continue
439027702724Smrg      fi
439127702724Smrg
4392e19dfac4Smrg      case $arg in
43937cea3689Smrg      -d) isdir=: ;;
4394e19dfac4Smrg      -f)
4395313a12fdSmrg	if $install_cp; then :; else
4396313a12fdSmrg	  prev=$arg
4397313a12fdSmrg	fi
4398e19dfac4Smrg	;;
4399e19dfac4Smrg      -g | -m | -o)
4400e19dfac4Smrg	prev=$arg
4401e19dfac4Smrg	;;
4402e19dfac4Smrg      -s)
4403e19dfac4Smrg	stripme=" -s"
4404e19dfac4Smrg	continue
4405e19dfac4Smrg	;;
4406e19dfac4Smrg      -*)
4407e19dfac4Smrg	;;
4408e19dfac4Smrg      *)
4409e19dfac4Smrg	# If the previous option needed an argument, then skip it.
4410e19dfac4Smrg	if test -n "$prev"; then
44117cea3689Smrg	  if test X-m = "X$prev" && test -n "$install_override_mode"; then
4412313a12fdSmrg	    arg2=$install_override_mode
4413313a12fdSmrg	    no_mode=false
4414313a12fdSmrg	  fi
4415e19dfac4Smrg	  prev=
4416e19dfac4Smrg	else
4417e19dfac4Smrg	  dest=$arg
4418e19dfac4Smrg	  continue
4419e19dfac4Smrg	fi
4420e19dfac4Smrg	;;
4421e19dfac4Smrg      esac
442227702724Smrg
4423e19dfac4Smrg      # Aesthetically quote the argument.
442495b7a5c8Smrg      func_quote_arg pretty "$arg"
442595b7a5c8Smrg      func_append install_prog " $func_quote_arg_result"
4426313a12fdSmrg      if test -n "$arg2"; then
442795b7a5c8Smrg	func_quote_arg pretty "$arg2"
4428313a12fdSmrg      fi
442995b7a5c8Smrg      func_append install_shared_prog " $func_quote_arg_result"
4430e19dfac4Smrg    done
443127702724Smrg
4432e19dfac4Smrg    test -z "$install_prog" && \
4433e19dfac4Smrg      func_fatal_help "you must specify an install program"
443427702724Smrg
4435e19dfac4Smrg    test -n "$prev" && \
44367cea3689Smrg      func_fatal_help "the '$prev' option requires an argument"
443727702724Smrg
4438313a12fdSmrg    if test -n "$install_override_mode" && $no_mode; then
4439313a12fdSmrg      if $install_cp; then :; else
444095b7a5c8Smrg	func_quote_arg pretty "$install_override_mode"
444195b7a5c8Smrg	func_append install_shared_prog " -m $func_quote_arg_result"
4442313a12fdSmrg      fi
4443313a12fdSmrg    fi
4444313a12fdSmrg
4445e19dfac4Smrg    if test -z "$files"; then
4446e19dfac4Smrg      if test -z "$dest"; then
4447e19dfac4Smrg	func_fatal_help "no file or destination specified"
4448e19dfac4Smrg      else
4449e19dfac4Smrg	func_fatal_help "you must specify a destination"
445027702724Smrg      fi
445127702724Smrg    fi
445227702724Smrg
4453e19dfac4Smrg    # Strip any trailing slash from the destination.
4454e19dfac4Smrg    func_stripname '' '/' "$dest"
4455e19dfac4Smrg    dest=$func_stripname_result
445627702724Smrg
4457e19dfac4Smrg    # Check to see that the destination is a directory.
44587cea3689Smrg    test -d "$dest" && isdir=:
44597cea3689Smrg    if $isdir; then
44607cea3689Smrg      destdir=$dest
4461e19dfac4Smrg      destname=
4462e19dfac4Smrg    else
4463e19dfac4Smrg      func_dirname_and_basename "$dest" "" "."
44647cea3689Smrg      destdir=$func_dirname_result
44657cea3689Smrg      destname=$func_basename_result
4466e19dfac4Smrg
4467e19dfac4Smrg      # Not a directory, so check to see that there is only one file specified.
4468e19dfac4Smrg      set dummy $files; shift
4469e19dfac4Smrg      test "$#" -gt 1 && \
44707cea3689Smrg	func_fatal_help "'$dest' is not a directory"
4471e19dfac4Smrg    fi
4472e19dfac4Smrg    case $destdir in
4473e19dfac4Smrg    [\\/]* | [A-Za-z]:[\\/]*) ;;
447427702724Smrg    *)
4475e19dfac4Smrg      for file in $files; do
4476e19dfac4Smrg	case $file in
4477e19dfac4Smrg	*.lo) ;;
4478e19dfac4Smrg	*)
44797cea3689Smrg	  func_fatal_help "'$destdir' must be an absolute directory name"
4480e19dfac4Smrg	  ;;
4481e19dfac4Smrg	esac
4482e19dfac4Smrg      done
448327702724Smrg      ;;
448427702724Smrg    esac
448527702724Smrg
4486e19dfac4Smrg    # This variable tells wrapper scripts just to set variables rather
4487e19dfac4Smrg    # than running their programs.
44887cea3689Smrg    libtool_install_magic=$magic
448927702724Smrg
4490e19dfac4Smrg    staticlibs=
4491e19dfac4Smrg    future_libdirs=
4492e19dfac4Smrg    current_libdirs=
4493e19dfac4Smrg    for file in $files; do
449427702724Smrg
4495e19dfac4Smrg      # Do each installation.
4496e19dfac4Smrg      case $file in
4497e19dfac4Smrg      *.$libext)
4498e19dfac4Smrg	# Do the static libraries later.
4499313a12fdSmrg	func_append staticlibs " $file"
4500e19dfac4Smrg	;;
4501e19dfac4Smrg
4502e19dfac4Smrg      *.la)
4503313a12fdSmrg	func_resolve_sysroot "$file"
4504313a12fdSmrg	file=$func_resolve_sysroot_result
4505313a12fdSmrg
4506e19dfac4Smrg	# Check to see that this really is a libtool archive.
4507e19dfac4Smrg	func_lalib_unsafe_p "$file" \
45087cea3689Smrg	  || func_fatal_help "'$file' is not a valid libtool archive"
4509e19dfac4Smrg
4510e19dfac4Smrg	library_names=
4511e19dfac4Smrg	old_library=
4512e19dfac4Smrg	relink_command=
4513e19dfac4Smrg	func_source "$file"
4514e19dfac4Smrg
4515e19dfac4Smrg	# Add the libdir to current_libdirs if it is the destination.
4516e19dfac4Smrg	if test "X$destdir" = "X$libdir"; then
4517e19dfac4Smrg	  case "$current_libdirs " in
4518e19dfac4Smrg	  *" $libdir "*) ;;
4519313a12fdSmrg	  *) func_append current_libdirs " $libdir" ;;
452027702724Smrg	  esac
4521e19dfac4Smrg	else
4522e19dfac4Smrg	  # Note the libdir as a future libdir.
4523e19dfac4Smrg	  case "$future_libdirs " in
4524e19dfac4Smrg	  *" $libdir "*) ;;
4525313a12fdSmrg	  *) func_append future_libdirs " $libdir" ;;
4526e19dfac4Smrg	  esac
4527e19dfac4Smrg	fi
452827702724Smrg
4529e19dfac4Smrg	func_dirname "$file" "/" ""
45307cea3689Smrg	dir=$func_dirname_result
4531313a12fdSmrg	func_append dir "$objdir"
4532e19dfac4Smrg
4533e19dfac4Smrg	if test -n "$relink_command"; then
4534e19dfac4Smrg	  # Determine the prefix the user has applied to our future dir.
4535313a12fdSmrg	  inst_prefix_dir=`$ECHO "$destdir" | $SED -e "s%$libdir\$%%"`
4536e19dfac4Smrg
4537e19dfac4Smrg	  # Don't allow the user to place us outside of our expected
4538e19dfac4Smrg	  # location b/c this prevents finding dependent libraries that
4539e19dfac4Smrg	  # are installed to the same prefix.
4540e19dfac4Smrg	  # At present, this check doesn't affect windows .dll's that
4541e19dfac4Smrg	  # are installed into $libdir/../bin (currently, that works fine)
4542e19dfac4Smrg	  # but it's something to keep an eye on.
4543e19dfac4Smrg	  test "$inst_prefix_dir" = "$destdir" && \
45447cea3689Smrg	    func_fatal_error "error: cannot install '$file' to a directory not ending in $libdir"
4545e19dfac4Smrg
4546e19dfac4Smrg	  if test -n "$inst_prefix_dir"; then
4547e19dfac4Smrg	    # Stick the inst_prefix_dir data into the link command.
4548313a12fdSmrg	    relink_command=`$ECHO "$relink_command" | $SED "s%@inst_prefix_dir@%-inst-prefix-dir $inst_prefix_dir%"`
4549e19dfac4Smrg	  else
4550313a12fdSmrg	    relink_command=`$ECHO "$relink_command" | $SED "s%@inst_prefix_dir@%%"`
4551e19dfac4Smrg	  fi
4552e19dfac4Smrg
45537cea3689Smrg	  func_warning "relinking '$file'"
4554e19dfac4Smrg	  func_show_eval "$relink_command" \
45557cea3689Smrg	    'func_fatal_error "error: relink '\''$file'\'' with the above command before installing it"'
4556e19dfac4Smrg	fi
4557e19dfac4Smrg
4558e19dfac4Smrg	# See the names of the shared library.
4559e19dfac4Smrg	set dummy $library_names; shift
4560e19dfac4Smrg	if test -n "$1"; then
45617cea3689Smrg	  realname=$1
4562e19dfac4Smrg	  shift
4563e19dfac4Smrg
45647cea3689Smrg	  srcname=$realname
45657cea3689Smrg	  test -n "$relink_command" && srcname=${realname}T
4566e19dfac4Smrg
4567e19dfac4Smrg	  # Install the shared library and build the symlinks.
4568313a12fdSmrg	  func_show_eval "$install_shared_prog $dir/$srcname $destdir/$realname" \
4569e19dfac4Smrg	      'exit $?'
45707cea3689Smrg	  tstripme=$stripme
4571e19dfac4Smrg	  case $host_os in
4572e19dfac4Smrg	  cygwin* | mingw* | pw32* | cegcc*)
4573e19dfac4Smrg	    case $realname in
4574e19dfac4Smrg	    *.dll.a)
45757cea3689Smrg	      tstripme=
45767cea3689Smrg	      ;;
45777cea3689Smrg	    esac
45787cea3689Smrg	    ;;
45797cea3689Smrg	  os2*)
45807cea3689Smrg	    case $realname in
45817cea3689Smrg	    *_dll.a)
45827cea3689Smrg	      tstripme=
4583e19dfac4Smrg	      ;;
4584e19dfac4Smrg	    esac
458527702724Smrg	    ;;
458627702724Smrg	  esac
4587e19dfac4Smrg	  if test -n "$tstripme" && test -n "$striplib"; then
4588e19dfac4Smrg	    func_show_eval "$striplib $destdir/$realname" 'exit $?'
458927702724Smrg	  fi
4590e19dfac4Smrg
4591e19dfac4Smrg	  if test "$#" -gt 0; then
4592e19dfac4Smrg	    # Delete the old symlinks, and create new ones.
45937cea3689Smrg	    # Try 'ln -sf' first, because the 'ln' binary might depend on
4594e19dfac4Smrg	    # the symlink we replace!  Solaris /bin/ln does not understand -f,
4595e19dfac4Smrg	    # so we also need to try rm && ln -s.
4596e19dfac4Smrg	    for linkname
4597e19dfac4Smrg	    do
4598e19dfac4Smrg	      test "$linkname" != "$realname" \
4599e19dfac4Smrg		&& func_show_eval "(cd $destdir && { $LN_S -f $realname $linkname || { $RM $linkname && $LN_S $realname $linkname; }; })"
460027702724Smrg	    done
460127702724Smrg	  fi
460227702724Smrg
4603e19dfac4Smrg	  # Do each command in the postinstall commands.
46047cea3689Smrg	  lib=$destdir/$realname
4605e19dfac4Smrg	  func_execute_cmds "$postinstall_cmds" 'exit $?'
460627702724Smrg	fi
460727702724Smrg
4608e19dfac4Smrg	# Install the pseudo-library for information purposes.
4609e19dfac4Smrg	func_basename "$file"
46107cea3689Smrg	name=$func_basename_result
46117cea3689Smrg	instname=$dir/${name}i
4612e19dfac4Smrg	func_show_eval "$install_prog $instname $destdir/$name" 'exit $?'
461327702724Smrg
4614e19dfac4Smrg	# Maybe install the static library, too.
4615313a12fdSmrg	test -n "$old_library" && func_append staticlibs " $dir/$old_library"
4616e19dfac4Smrg	;;
461727702724Smrg
4618e19dfac4Smrg      *.lo)
4619e19dfac4Smrg	# Install (i.e. copy) a libtool object.
462027702724Smrg
4621e19dfac4Smrg	# Figure out destination file name, if it wasn't already specified.
4622e19dfac4Smrg	if test -n "$destname"; then
46237cea3689Smrg	  destfile=$destdir/$destname
4624e19dfac4Smrg	else
4625e19dfac4Smrg	  func_basename "$file"
46267cea3689Smrg	  destfile=$func_basename_result
46277cea3689Smrg	  destfile=$destdir/$destfile
4628e19dfac4Smrg	fi
4629e19dfac4Smrg
4630e19dfac4Smrg	# Deduce the name of the destination old-style object file.
4631e19dfac4Smrg	case $destfile in
4632e19dfac4Smrg	*.lo)
4633e19dfac4Smrg	  func_lo2o "$destfile"
4634e19dfac4Smrg	  staticdest=$func_lo2o_result
4635e19dfac4Smrg	  ;;
4636e19dfac4Smrg	*.$objext)
46377cea3689Smrg	  staticdest=$destfile
4638e19dfac4Smrg	  destfile=
4639e19dfac4Smrg	  ;;
4640e19dfac4Smrg	*)
46417cea3689Smrg	  func_fatal_help "cannot copy a libtool object to '$destfile'"
4642e19dfac4Smrg	  ;;
464327702724Smrg	esac
464427702724Smrg
4645e19dfac4Smrg	# Install the libtool object if requested.
4646e19dfac4Smrg	test -n "$destfile" && \
4647e19dfac4Smrg	  func_show_eval "$install_prog $file $destfile" 'exit $?'
4648e19dfac4Smrg
4649e19dfac4Smrg	# Install the old object if enabled.
46507cea3689Smrg	if test yes = "$build_old_libs"; then
4651e19dfac4Smrg	  # Deduce the name of the old-style object file.
4652e19dfac4Smrg	  func_lo2o "$file"
4653e19dfac4Smrg	  staticobj=$func_lo2o_result
4654e19dfac4Smrg	  func_show_eval "$install_prog \$staticobj \$staticdest" 'exit $?'
465527702724Smrg	fi
4656e19dfac4Smrg	exit $EXIT_SUCCESS
4657e19dfac4Smrg	;;
465827702724Smrg
4659e19dfac4Smrg      *)
4660e19dfac4Smrg	# Figure out destination file name, if it wasn't already specified.
4661e19dfac4Smrg	if test -n "$destname"; then
46627cea3689Smrg	  destfile=$destdir/$destname
4663e19dfac4Smrg	else
4664e19dfac4Smrg	  func_basename "$file"
46657cea3689Smrg	  destfile=$func_basename_result
46667cea3689Smrg	  destfile=$destdir/$destfile
4667e19dfac4Smrg	fi
4668e19dfac4Smrg
4669e19dfac4Smrg	# If the file is missing, and there is a .exe on the end, strip it
4670e19dfac4Smrg	# because it is most likely a libtool script we actually want to
4671e19dfac4Smrg	# install
46727cea3689Smrg	stripped_ext=
4673e19dfac4Smrg	case $file in
4674e19dfac4Smrg	  *.exe)
4675e19dfac4Smrg	    if test ! -f "$file"; then
4676e19dfac4Smrg	      func_stripname '' '.exe' "$file"
4677e19dfac4Smrg	      file=$func_stripname_result
46787cea3689Smrg	      stripped_ext=.exe
467927702724Smrg	    fi
4680e19dfac4Smrg	    ;;
4681e19dfac4Smrg	esac
468227702724Smrg
4683e19dfac4Smrg	# Do a test to see if this is really a libtool program.
4684e19dfac4Smrg	case $host in
4685e19dfac4Smrg	*cygwin* | *mingw*)
4686e19dfac4Smrg	    if func_ltwrapper_executable_p "$file"; then
4687e19dfac4Smrg	      func_ltwrapper_scriptname "$file"
4688e19dfac4Smrg	      wrapper=$func_ltwrapper_scriptname_result
4689e19dfac4Smrg	    else
4690e19dfac4Smrg	      func_stripname '' '.exe' "$file"
4691e19dfac4Smrg	      wrapper=$func_stripname_result
4692e19dfac4Smrg	    fi
4693e19dfac4Smrg	    ;;
4694e19dfac4Smrg	*)
4695e19dfac4Smrg	    wrapper=$file
4696e19dfac4Smrg	    ;;
4697e19dfac4Smrg	esac
4698e19dfac4Smrg	if func_ltwrapper_script_p "$wrapper"; then
4699e19dfac4Smrg	  notinst_deplibs=
4700e19dfac4Smrg	  relink_command=
470127702724Smrg
4702e19dfac4Smrg	  func_source "$wrapper"
470327702724Smrg
4704e19dfac4Smrg	  # Check the variables that should have been set.
4705e19dfac4Smrg	  test -z "$generated_by_libtool_version" && \
47067cea3689Smrg	    func_fatal_error "invalid libtool wrapper script '$wrapper'"
4707e19dfac4Smrg
47087cea3689Smrg	  finalize=:
4709e19dfac4Smrg	  for lib in $notinst_deplibs; do
4710e19dfac4Smrg	    # Check to see that each library is installed.
4711e19dfac4Smrg	    libdir=
4712e19dfac4Smrg	    if test -f "$lib"; then
4713e19dfac4Smrg	      func_source "$lib"
4714e19dfac4Smrg	    fi
47157cea3689Smrg	    libfile=$libdir/`$ECHO "$lib" | $SED 's%^.*/%%g'`
4716e19dfac4Smrg	    if test -n "$libdir" && test ! -f "$libfile"; then
47177cea3689Smrg	      func_warning "'$lib' has not been installed in '$libdir'"
47187cea3689Smrg	      finalize=false
4719e19dfac4Smrg	    fi
4720e19dfac4Smrg	  done
4721e19dfac4Smrg
4722e19dfac4Smrg	  relink_command=
4723e19dfac4Smrg	  func_source "$wrapper"
4724e19dfac4Smrg
4725e19dfac4Smrg	  outputname=
47267cea3689Smrg	  if test no = "$fast_install" && test -n "$relink_command"; then
4727e19dfac4Smrg	    $opt_dry_run || {
47287cea3689Smrg	      if $finalize; then
4729e19dfac4Smrg	        tmpdir=`func_mktempdir`
4730e19dfac4Smrg		func_basename "$file$stripped_ext"
47317cea3689Smrg		file=$func_basename_result
47327cea3689Smrg	        outputname=$tmpdir/$file
4733e19dfac4Smrg	        # Replace the output file specification.
4734313a12fdSmrg	        relink_command=`$ECHO "$relink_command" | $SED 's%@OUTPUT@%'"$outputname"'%g'`
4735e19dfac4Smrg
47367cea3689Smrg	        $opt_quiet || {
473795b7a5c8Smrg	          func_quote_arg expand,pretty "$relink_command"
473895b7a5c8Smrg		  eval "func_echo $func_quote_arg_result"
4739e19dfac4Smrg	        }
4740e19dfac4Smrg	        if eval "$relink_command"; then :
4741e19dfac4Smrg	          else
47427cea3689Smrg		  func_error "error: relink '$file' with the above command before installing it"
4743e19dfac4Smrg		  $opt_dry_run || ${RM}r "$tmpdir"
4744e19dfac4Smrg		  continue
4745e19dfac4Smrg	        fi
47467cea3689Smrg	        file=$outputname
4747e19dfac4Smrg	      else
47487cea3689Smrg	        func_warning "cannot relink '$file'"
4749e19dfac4Smrg	      fi
4750e19dfac4Smrg	    }
475127702724Smrg	  else
4752e19dfac4Smrg	    # Install the binary that we compiled earlier.
4753313a12fdSmrg	    file=`$ECHO "$file$stripped_ext" | $SED "s%\([^/]*\)$%$objdir/\1%"`
475427702724Smrg	  fi
4755e19dfac4Smrg	fi
475627702724Smrg
4757e19dfac4Smrg	# remove .exe since cygwin /usr/bin/install will append another
4758e19dfac4Smrg	# one anyway
4759e19dfac4Smrg	case $install_prog,$host in
4760e19dfac4Smrg	*/usr/bin/install*,*cygwin*)
4761e19dfac4Smrg	  case $file:$destfile in
4762e19dfac4Smrg	  *.exe:*.exe)
4763e19dfac4Smrg	    # this is ok
4764e19dfac4Smrg	    ;;
4765e19dfac4Smrg	  *.exe:*)
4766e19dfac4Smrg	    destfile=$destfile.exe
4767e19dfac4Smrg	    ;;
4768e19dfac4Smrg	  *:*.exe)
4769e19dfac4Smrg	    func_stripname '' '.exe' "$destfile"
4770e19dfac4Smrg	    destfile=$func_stripname_result
4771e19dfac4Smrg	    ;;
4772e19dfac4Smrg	  esac
477327702724Smrg	  ;;
477427702724Smrg	esac
4775e19dfac4Smrg	func_show_eval "$install_prog\$stripme \$file \$destfile" 'exit $?'
4776e19dfac4Smrg	$opt_dry_run || if test -n "$outputname"; then
4777e19dfac4Smrg	  ${RM}r "$tmpdir"
4778e19dfac4Smrg	fi
4779e19dfac4Smrg	;;
4780e19dfac4Smrg      esac
4781e19dfac4Smrg    done
478227702724Smrg
4783e19dfac4Smrg    for file in $staticlibs; do
4784e19dfac4Smrg      func_basename "$file"
47857cea3689Smrg      name=$func_basename_result
478627702724Smrg
4787e19dfac4Smrg      # Set up the ranlib parameters.
47887cea3689Smrg      oldlib=$destdir/$name
4789313a12fdSmrg      func_to_tool_file "$oldlib" func_convert_file_msys_to_w32
4790313a12fdSmrg      tool_oldlib=$func_to_tool_file_result
479127702724Smrg
4792e19dfac4Smrg      func_show_eval "$install_prog \$file \$oldlib" 'exit $?'
479327702724Smrg
4794e19dfac4Smrg      if test -n "$stripme" && test -n "$old_striplib"; then
4795313a12fdSmrg	func_show_eval "$old_striplib $tool_oldlib" 'exit $?'
4796e19dfac4Smrg      fi
479727702724Smrg
4798e19dfac4Smrg      # Do each command in the postinstall commands.
4799e19dfac4Smrg      func_execute_cmds "$old_postinstall_cmds" 'exit $?'
4800e19dfac4Smrg    done
480127702724Smrg
4802e19dfac4Smrg    test -n "$future_libdirs" && \
48037cea3689Smrg      func_warning "remember to run '$progname --finish$future_libdirs'"
480427702724Smrg
4805e19dfac4Smrg    if test -n "$current_libdirs"; then
4806e19dfac4Smrg      # Maybe just do a dry run.
4807e19dfac4Smrg      $opt_dry_run && current_libdirs=" -n$current_libdirs"
48087cea3689Smrg      exec_cmd='$SHELL "$progpath" $preserve_args --finish$current_libdirs'
4809e19dfac4Smrg    else
4810e19dfac4Smrg      exit $EXIT_SUCCESS
4811e19dfac4Smrg    fi
4812e19dfac4Smrg}
481327702724Smrg
48147cea3689Smrgtest install = "$opt_mode" && func_mode_install ${1+"$@"}
481527702724Smrg
481627702724Smrg
4817e19dfac4Smrg# func_generate_dlsyms outputname originator pic_p
4818e19dfac4Smrg# Extract symbols from dlprefiles and create ${outputname}S.o with
4819e19dfac4Smrg# a dlpreopen symbol table.
4820e19dfac4Smrgfunc_generate_dlsyms ()
4821e19dfac4Smrg{
48227cea3689Smrg    $debug_cmd
48237cea3689Smrg
48247cea3689Smrg    my_outputname=$1
48257cea3689Smrg    my_originator=$2
48267cea3689Smrg    my_pic_p=${3-false}
48277cea3689Smrg    my_prefix=`$ECHO "$my_originator" | $SED 's%[^a-zA-Z0-9]%_%g'`
4828e19dfac4Smrg    my_dlsyms=
4829e19dfac4Smrg
48307cea3689Smrg    if test -n "$dlfiles$dlprefiles" || test no != "$dlself"; then
4831e19dfac4Smrg      if test -n "$NM" && test -n "$global_symbol_pipe"; then
48327cea3689Smrg	my_dlsyms=${my_outputname}S.c
4833e19dfac4Smrg      else
4834e19dfac4Smrg	func_error "not configured to extract global symbols from dlpreopened files"
4835e19dfac4Smrg      fi
4836e19dfac4Smrg    fi
483727702724Smrg
4838e19dfac4Smrg    if test -n "$my_dlsyms"; then
4839e19dfac4Smrg      case $my_dlsyms in
4840e19dfac4Smrg      "") ;;
4841e19dfac4Smrg      *.c)
4842e19dfac4Smrg	# Discover the nlist of each of the dlfiles.
48437cea3689Smrg	nlist=$output_objdir/$my_outputname.nm
4844e19dfac4Smrg
4845e19dfac4Smrg	func_show_eval "$RM $nlist ${nlist}S ${nlist}T"
4846e19dfac4Smrg
4847e19dfac4Smrg	# Parse the name list into a source file.
4848e19dfac4Smrg	func_verbose "creating $output_objdir/$my_dlsyms"
4849e19dfac4Smrg
4850e19dfac4Smrg	$opt_dry_run || $ECHO > "$output_objdir/$my_dlsyms" "\
48517cea3689Smrg/* $my_dlsyms - symbol resolution table for '$my_outputname' dlsym emulation. */
48527cea3689Smrg/* Generated by $PROGRAM (GNU $PACKAGE) $VERSION */
4853e19dfac4Smrg
4854e19dfac4Smrg#ifdef __cplusplus
4855e19dfac4Smrgextern \"C\" {
4856e19dfac4Smrg#endif
4857e19dfac4Smrg
48587cea3689Smrg#if defined __GNUC__ && (((__GNUC__ == 4) && (__GNUC_MINOR__ >= 4)) || (__GNUC__ > 4))
4859313a12fdSmrg#pragma GCC diagnostic ignored \"-Wstrict-prototypes\"
4860313a12fdSmrg#endif
4861313a12fdSmrg
4862313a12fdSmrg/* Keep this code in sync between libtool.m4, ltmain, lt_system.h, and tests.  */
48637cea3689Smrg#if defined _WIN32 || defined __CYGWIN__ || defined _WIN32_WCE
48647cea3689Smrg/* DATA imports from DLLs on WIN32 can't be const, because runtime
4865313a12fdSmrg   relocations are performed -- see ld's documentation on pseudo-relocs.  */
4866313a12fdSmrg# define LT_DLSYM_CONST
48677cea3689Smrg#elif defined __osf__
4868313a12fdSmrg/* This system does not cope well with relocations in const data.  */
4869313a12fdSmrg# define LT_DLSYM_CONST
4870313a12fdSmrg#else
4871313a12fdSmrg# define LT_DLSYM_CONST const
4872313a12fdSmrg#endif
4873313a12fdSmrg
48747cea3689Smrg#define STREQ(s1, s2) (strcmp ((s1), (s2)) == 0)
48757cea3689Smrg
4876e19dfac4Smrg/* External symbol declarations for the compiler. */\
4877e19dfac4Smrg"
4878e19dfac4Smrg
48797cea3689Smrg	if test yes = "$dlself"; then
48807cea3689Smrg	  func_verbose "generating symbol list for '$output'"
4881e19dfac4Smrg
4882e19dfac4Smrg	  $opt_dry_run || echo ': @PROGRAM@ ' > "$nlist"
4883e19dfac4Smrg
4884e19dfac4Smrg	  # Add our own program objects to the symbol list.
4885313a12fdSmrg	  progfiles=`$ECHO "$objs$old_deplibs" | $SP2NL | $SED "$lo2o" | $NL2SP`
4886e19dfac4Smrg	  for progfile in $progfiles; do
4887313a12fdSmrg	    func_to_tool_file "$progfile" func_convert_file_msys_to_w32
48887cea3689Smrg	    func_verbose "extracting global C symbols from '$func_to_tool_file_result'"
4889313a12fdSmrg	    $opt_dry_run || eval "$NM $func_to_tool_file_result | $global_symbol_pipe >> '$nlist'"
4890e19dfac4Smrg	  done
4891e19dfac4Smrg
4892e19dfac4Smrg	  if test -n "$exclude_expsyms"; then
4893e19dfac4Smrg	    $opt_dry_run || {
4894e19dfac4Smrg	      eval '$EGREP -v " ($exclude_expsyms)$" "$nlist" > "$nlist"T'
4895e19dfac4Smrg	      eval '$MV "$nlist"T "$nlist"'
4896e19dfac4Smrg	    }
489727702724Smrg	  fi
489827702724Smrg
4899e19dfac4Smrg	  if test -n "$export_symbols_regex"; then
4900e19dfac4Smrg	    $opt_dry_run || {
4901e19dfac4Smrg	      eval '$EGREP -e "$export_symbols_regex" "$nlist" > "$nlist"T'
4902e19dfac4Smrg	      eval '$MV "$nlist"T "$nlist"'
4903e19dfac4Smrg	    }
490427702724Smrg	  fi
4905e19dfac4Smrg
4906e19dfac4Smrg	  # Prepare the list of exported symbols
4907e19dfac4Smrg	  if test -z "$export_symbols"; then
49087cea3689Smrg	    export_symbols=$output_objdir/$outputname.exp
4909e19dfac4Smrg	    $opt_dry_run || {
4910e19dfac4Smrg	      $RM $export_symbols
49117cea3689Smrg	      eval "$SED -n -e '/^: @PROGRAM@ $/d' -e 's/^.* \(.*\)$/\1/p' "'< "$nlist" > "$export_symbols"'
4912e19dfac4Smrg	      case $host in
4913e19dfac4Smrg	      *cygwin* | *mingw* | *cegcc* )
4914e19dfac4Smrg                eval "echo EXPORTS "'> "$output_objdir/$outputname.def"'
4915e19dfac4Smrg                eval 'cat "$export_symbols" >> "$output_objdir/$outputname.def"'
4916e19dfac4Smrg	        ;;
491727702724Smrg	      esac
4918e19dfac4Smrg	    }
4919e19dfac4Smrg	  else
4920e19dfac4Smrg	    $opt_dry_run || {
49217cea3689Smrg	      eval "$SED -e 's/\([].[*^$]\)/\\\\\1/g' -e 's/^/ /' -e 's/$/$/'"' < "$export_symbols" > "$output_objdir/$outputname.exp"'
4922e19dfac4Smrg	      eval '$GREP -f "$output_objdir/$outputname.exp" < "$nlist" > "$nlist"T'
4923e19dfac4Smrg	      eval '$MV "$nlist"T "$nlist"'
4924e19dfac4Smrg	      case $host in
4925313a12fdSmrg	        *cygwin* | *mingw* | *cegcc* )
4926e19dfac4Smrg	          eval "echo EXPORTS "'> "$output_objdir/$outputname.def"'
4927e19dfac4Smrg	          eval 'cat "$nlist" >> "$output_objdir/$outputname.def"'
4928e19dfac4Smrg	          ;;
492927702724Smrg	      esac
4930e19dfac4Smrg	    }
493127702724Smrg	  fi
4932e19dfac4Smrg	fi
493327702724Smrg
4934e19dfac4Smrg	for dlprefile in $dlprefiles; do
49357cea3689Smrg	  func_verbose "extracting global C symbols from '$dlprefile'"
4936e19dfac4Smrg	  func_basename "$dlprefile"
49377cea3689Smrg	  name=$func_basename_result
4938313a12fdSmrg          case $host in
4939313a12fdSmrg	    *cygwin* | *mingw* | *cegcc* )
4940313a12fdSmrg	      # if an import library, we need to obtain dlname
4941313a12fdSmrg	      if func_win32_import_lib_p "$dlprefile"; then
4942313a12fdSmrg	        func_tr_sh "$dlprefile"
4943313a12fdSmrg	        eval "curr_lafile=\$libfile_$func_tr_sh_result"
49447cea3689Smrg	        dlprefile_dlbasename=
4945313a12fdSmrg	        if test -n "$curr_lafile" && func_lalib_p "$curr_lafile"; then
4946313a12fdSmrg	          # Use subshell, to avoid clobbering current variable values
4947313a12fdSmrg	          dlprefile_dlname=`source "$curr_lafile" && echo "$dlname"`
49487cea3689Smrg	          if test -n "$dlprefile_dlname"; then
4949313a12fdSmrg	            func_basename "$dlprefile_dlname"
49507cea3689Smrg	            dlprefile_dlbasename=$func_basename_result
4951313a12fdSmrg	          else
4952313a12fdSmrg	            # no lafile. user explicitly requested -dlpreopen <import library>.
4953313a12fdSmrg	            $sharedlib_from_linklib_cmd "$dlprefile"
4954313a12fdSmrg	            dlprefile_dlbasename=$sharedlib_from_linklib_result
4955313a12fdSmrg	          fi
4956313a12fdSmrg	        fi
4957313a12fdSmrg	        $opt_dry_run || {
49587cea3689Smrg	          if test -n "$dlprefile_dlbasename"; then
4959313a12fdSmrg	            eval '$ECHO ": $dlprefile_dlbasename" >> "$nlist"'
4960313a12fdSmrg	          else
4961313a12fdSmrg	            func_warning "Could not compute DLL name from $name"
4962313a12fdSmrg	            eval '$ECHO ": $name " >> "$nlist"'
4963313a12fdSmrg	          fi
4964313a12fdSmrg	          func_to_tool_file "$dlprefile" func_convert_file_msys_to_w32
4965313a12fdSmrg	          eval "$NM \"$func_to_tool_file_result\" 2>/dev/null | $global_symbol_pipe |
4966313a12fdSmrg	            $SED -e '/I __imp/d' -e 's/I __nm_/D /;s/_nm__//' >> '$nlist'"
4967313a12fdSmrg	        }
4968313a12fdSmrg	      else # not an import lib
4969313a12fdSmrg	        $opt_dry_run || {
4970313a12fdSmrg	          eval '$ECHO ": $name " >> "$nlist"'
4971313a12fdSmrg	          func_to_tool_file "$dlprefile" func_convert_file_msys_to_w32
4972313a12fdSmrg	          eval "$NM \"$func_to_tool_file_result\" 2>/dev/null | $global_symbol_pipe >> '$nlist'"
4973313a12fdSmrg	        }
4974313a12fdSmrg	      fi
4975313a12fdSmrg	    ;;
4976313a12fdSmrg	    *)
4977313a12fdSmrg	      $opt_dry_run || {
4978313a12fdSmrg	        eval '$ECHO ": $name " >> "$nlist"'
4979313a12fdSmrg	        func_to_tool_file "$dlprefile" func_convert_file_msys_to_w32
4980313a12fdSmrg	        eval "$NM \"$func_to_tool_file_result\" 2>/dev/null | $global_symbol_pipe >> '$nlist'"
4981313a12fdSmrg	      }
4982313a12fdSmrg	    ;;
4983313a12fdSmrg          esac
4984e19dfac4Smrg	done
498527702724Smrg
4986e19dfac4Smrg	$opt_dry_run || {
4987e19dfac4Smrg	  # Make sure we have at least an empty file.
4988e19dfac4Smrg	  test -f "$nlist" || : > "$nlist"
498927702724Smrg
4990e19dfac4Smrg	  if test -n "$exclude_expsyms"; then
4991e19dfac4Smrg	    $EGREP -v " ($exclude_expsyms)$" "$nlist" > "$nlist"T
4992e19dfac4Smrg	    $MV "$nlist"T "$nlist"
499327702724Smrg	  fi
499427702724Smrg
4995e19dfac4Smrg	  # Try sorting and uniquifying the output.
4996e19dfac4Smrg	  if $GREP -v "^: " < "$nlist" |
4997e19dfac4Smrg	      if sort -k 3 </dev/null >/dev/null 2>&1; then
4998e19dfac4Smrg		sort -k 3
499927702724Smrg	      else
5000e19dfac4Smrg		sort +2
5001e19dfac4Smrg	      fi |
5002e19dfac4Smrg	      uniq > "$nlist"S; then
5003e19dfac4Smrg	    :
500427702724Smrg	  else
5005e19dfac4Smrg	    $GREP -v "^: " < "$nlist" > "$nlist"S
500627702724Smrg	  fi
500727702724Smrg
5008e19dfac4Smrg	  if test -f "$nlist"S; then
5009e19dfac4Smrg	    eval "$global_symbol_to_cdecl"' < "$nlist"S >> "$output_objdir/$my_dlsyms"'
501027702724Smrg	  else
5011313a12fdSmrg	    echo '/* NONE */' >> "$output_objdir/$my_dlsyms"
501227702724Smrg	  fi
501327702724Smrg
50147cea3689Smrg	  func_show_eval '$RM "${nlist}I"'
50157cea3689Smrg	  if test -n "$global_symbol_to_import"; then
50167cea3689Smrg	    eval "$global_symbol_to_import"' < "$nlist"S > "$nlist"I'
50177cea3689Smrg	  fi
50187cea3689Smrg
5019313a12fdSmrg	  echo >> "$output_objdir/$my_dlsyms" "\
502027702724Smrg
5021e19dfac4Smrg/* The mapping between symbol names and symbols.  */
5022e19dfac4Smrgtypedef struct {
5023e19dfac4Smrg  const char *name;
5024e19dfac4Smrg  void *address;
5025e19dfac4Smrg} lt_dlsymlist;
5026313a12fdSmrgextern LT_DLSYM_CONST lt_dlsymlist
50277cea3689Smrglt_${my_prefix}_LTX_preloaded_symbols[];\
50287cea3689Smrg"
50297cea3689Smrg
50307cea3689Smrg	  if test -s "$nlist"I; then
50317cea3689Smrg	    echo >> "$output_objdir/$my_dlsyms" "\
50327cea3689Smrgstatic void lt_syminit(void)
50337cea3689Smrg{
50347cea3689Smrg  LT_DLSYM_CONST lt_dlsymlist *symbol = lt_${my_prefix}_LTX_preloaded_symbols;
50357cea3689Smrg  for (; symbol->name; ++symbol)
50367cea3689Smrg    {"
50377cea3689Smrg	    $SED 's/.*/      if (STREQ (symbol->name, \"&\")) symbol->address = (void *) \&&;/' < "$nlist"I >> "$output_objdir/$my_dlsyms"
50387cea3689Smrg	    echo >> "$output_objdir/$my_dlsyms" "\
50397cea3689Smrg    }
50407cea3689Smrg}"
50417cea3689Smrg	  fi
50427cea3689Smrg	  echo >> "$output_objdir/$my_dlsyms" "\
5043313a12fdSmrgLT_DLSYM_CONST lt_dlsymlist
5044e19dfac4Smrglt_${my_prefix}_LTX_preloaded_symbols[] =
50457cea3689Smrg{ {\"$my_originator\", (void *) 0},"
50467cea3689Smrg
50477cea3689Smrg	  if test -s "$nlist"I; then
50487cea3689Smrg	    echo >> "$output_objdir/$my_dlsyms" "\
50497cea3689Smrg  {\"@INIT@\", (void *) &lt_syminit},"
50507cea3689Smrg	  fi
5051e19dfac4Smrg
5052e19dfac4Smrg	  case $need_lib_prefix in
5053e19dfac4Smrg	  no)
5054e19dfac4Smrg	    eval "$global_symbol_to_c_name_address" < "$nlist" >> "$output_objdir/$my_dlsyms"
5055e19dfac4Smrg	    ;;
5056e19dfac4Smrg	  *)
5057e19dfac4Smrg	    eval "$global_symbol_to_c_name_address_lib_prefix" < "$nlist" >> "$output_objdir/$my_dlsyms"
5058e19dfac4Smrg	    ;;
5059e19dfac4Smrg	  esac
5060313a12fdSmrg	  echo >> "$output_objdir/$my_dlsyms" "\
5061e19dfac4Smrg  {0, (void *) 0}
5062e19dfac4Smrg};
5063e19dfac4Smrg
5064e19dfac4Smrg/* This works around a problem in FreeBSD linker */
5065e19dfac4Smrg#ifdef FREEBSD_WORKAROUND
5066e19dfac4Smrgstatic const void *lt_preloaded_setup() {
5067e19dfac4Smrg  return lt_${my_prefix}_LTX_preloaded_symbols;
5068e19dfac4Smrg}
5069e19dfac4Smrg#endif
5070e19dfac4Smrg
5071e19dfac4Smrg#ifdef __cplusplus
5072e19dfac4Smrg}
5073e19dfac4Smrg#endif\
5074e19dfac4Smrg"
5075e19dfac4Smrg	} # !$opt_dry_run
5076e19dfac4Smrg
5077e19dfac4Smrg	pic_flag_for_symtable=
5078e19dfac4Smrg	case "$compile_command " in
5079e19dfac4Smrg	*" -static "*) ;;
5080e19dfac4Smrg	*)
5081e19dfac4Smrg	  case $host in
5082e19dfac4Smrg	  # compiling the symbol table file with pic_flag works around
5083e19dfac4Smrg	  # a FreeBSD bug that causes programs to crash when -lm is
5084e19dfac4Smrg	  # linked before any other PIC object.  But we must not use
5085e19dfac4Smrg	  # pic_flag when linking with -static.  The problem exists in
5086e19dfac4Smrg	  # FreeBSD 2.2.6 and is fixed in FreeBSD 3.1.
5087313a12fdSmrg	  *-*-freebsd2.*|*-*-freebsd3.0*|*-*-freebsdelf3.0*)
5088e19dfac4Smrg	    pic_flag_for_symtable=" $pic_flag -DFREEBSD_WORKAROUND" ;;
5089e19dfac4Smrg	  *-*-hpux*)
5090e19dfac4Smrg	    pic_flag_for_symtable=" $pic_flag"  ;;
5091e19dfac4Smrg	  *)
50927cea3689Smrg	    $my_pic_p && pic_flag_for_symtable=" $pic_flag"
5093e19dfac4Smrg	    ;;
5094e19dfac4Smrg	  esac
5095e19dfac4Smrg	  ;;
5096e19dfac4Smrg	esac
5097e19dfac4Smrg	symtab_cflags=
5098e19dfac4Smrg	for arg in $LTCFLAGS; do
5099e19dfac4Smrg	  case $arg in
5100e19dfac4Smrg	  -pie | -fpie | -fPIE) ;;
5101313a12fdSmrg	  *) func_append symtab_cflags " $arg" ;;
5102e19dfac4Smrg	  esac
5103e19dfac4Smrg	done
510427702724Smrg
5105e19dfac4Smrg	# Now compile the dynamic symbol file.
5106e19dfac4Smrg	func_show_eval '(cd $output_objdir && $LTCC$symtab_cflags -c$no_builtin_flag$pic_flag_for_symtable "$my_dlsyms")' 'exit $?'
510727702724Smrg
5108e19dfac4Smrg	# Clean up the generated files.
51097cea3689Smrg	func_show_eval '$RM "$output_objdir/$my_dlsyms" "$nlist" "${nlist}S" "${nlist}T" "${nlist}I"'
5110e19dfac4Smrg
5111e19dfac4Smrg	# Transform the symbol file into the correct name.
51127cea3689Smrg	symfileobj=$output_objdir/${my_outputname}S.$objext
5113e19dfac4Smrg	case $host in
5114e19dfac4Smrg	*cygwin* | *mingw* | *cegcc* )
5115e19dfac4Smrg	  if test -f "$output_objdir/$my_outputname.def"; then
5116313a12fdSmrg	    compile_command=`$ECHO "$compile_command" | $SED "s%@SYMFILE@%$output_objdir/$my_outputname.def $symfileobj%"`
5117313a12fdSmrg	    finalize_command=`$ECHO "$finalize_command" | $SED "s%@SYMFILE@%$output_objdir/$my_outputname.def $symfileobj%"`
5118e19dfac4Smrg	  else
5119313a12fdSmrg	    compile_command=`$ECHO "$compile_command" | $SED "s%@SYMFILE@%$symfileobj%"`
5120313a12fdSmrg	    finalize_command=`$ECHO "$finalize_command" | $SED "s%@SYMFILE@%$symfileobj%"`
5121e19dfac4Smrg	  fi
5122e19dfac4Smrg	  ;;
5123e19dfac4Smrg	*)
5124313a12fdSmrg	  compile_command=`$ECHO "$compile_command" | $SED "s%@SYMFILE@%$symfileobj%"`
5125313a12fdSmrg	  finalize_command=`$ECHO "$finalize_command" | $SED "s%@SYMFILE@%$symfileobj%"`
512627702724Smrg	  ;;
512727702724Smrg	esac
5128e19dfac4Smrg	;;
5129e19dfac4Smrg      *)
51307cea3689Smrg	func_fatal_error "unknown suffix for '$my_dlsyms'"
5131e19dfac4Smrg	;;
5132e19dfac4Smrg      esac
5133e19dfac4Smrg    else
5134e19dfac4Smrg      # We keep going just in case the user didn't refer to
5135e19dfac4Smrg      # lt_preloaded_symbols.  The linker will fail if global_symbol_pipe
5136e19dfac4Smrg      # really was required.
5137e19dfac4Smrg
5138e19dfac4Smrg      # Nullify the symbol file.
5139313a12fdSmrg      compile_command=`$ECHO "$compile_command" | $SED "s% @SYMFILE@%%"`
5140313a12fdSmrg      finalize_command=`$ECHO "$finalize_command" | $SED "s% @SYMFILE@%%"`
514127702724Smrg    fi
5142e19dfac4Smrg}
514327702724Smrg
51447cea3689Smrg# func_cygming_gnu_implib_p ARG
51457cea3689Smrg# This predicate returns with zero status (TRUE) if
51467cea3689Smrg# ARG is a GNU/binutils-style import library. Returns
51477cea3689Smrg# with nonzero status (FALSE) otherwise.
51487cea3689Smrgfunc_cygming_gnu_implib_p ()
51497cea3689Smrg{
51507cea3689Smrg  $debug_cmd
51517cea3689Smrg
51527cea3689Smrg  func_to_tool_file "$1" func_convert_file_msys_to_w32
51537cea3689Smrg  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)$'`
51547cea3689Smrg  test -n "$func_cygming_gnu_implib_tmp"
51557cea3689Smrg}
51567cea3689Smrg
51577cea3689Smrg# func_cygming_ms_implib_p ARG
51587cea3689Smrg# This predicate returns with zero status (TRUE) if
51597cea3689Smrg# ARG is an MS-style import library. Returns
51607cea3689Smrg# with nonzero status (FALSE) otherwise.
51617cea3689Smrgfunc_cygming_ms_implib_p ()
51627cea3689Smrg{
51637cea3689Smrg  $debug_cmd
51647cea3689Smrg
51657cea3689Smrg  func_to_tool_file "$1" func_convert_file_msys_to_w32
51667cea3689Smrg  func_cygming_ms_implib_tmp=`$NM "$func_to_tool_file_result" | eval "$global_symbol_pipe" | $GREP '_NULL_IMPORT_DESCRIPTOR'`
51677cea3689Smrg  test -n "$func_cygming_ms_implib_tmp"
51687cea3689Smrg}
51697cea3689Smrg
5170e19dfac4Smrg# func_win32_libid arg
5171e19dfac4Smrg# return the library type of file 'arg'
5172e19dfac4Smrg#
5173e19dfac4Smrg# Need a lot of goo to handle *both* DLLs and import libs
5174e19dfac4Smrg# Has to be a shell function in order to 'eat' the argument
5175e19dfac4Smrg# that is supplied when $file_magic_command is called.
5176313a12fdSmrg# Despite the name, also deal with 64 bit binaries.
5177e19dfac4Smrgfunc_win32_libid ()
5178e19dfac4Smrg{
51797cea3689Smrg  $debug_cmd
51807cea3689Smrg
51817cea3689Smrg  win32_libid_type=unknown
5182e19dfac4Smrg  win32_fileres=`file -L $1 2>/dev/null`
5183e19dfac4Smrg  case $win32_fileres in
5184e19dfac4Smrg  *ar\ archive\ import\ library*) # definitely import
5185e19dfac4Smrg    win32_libid_type="x86 archive import"
5186e19dfac4Smrg    ;;
5187e19dfac4Smrg  *ar\ archive*) # could be an import, or static
5188313a12fdSmrg    # Keep the egrep pattern in sync with the one in _LT_CHECK_MAGIC_METHOD.
5189e19dfac4Smrg    if eval $OBJDUMP -f $1 | $SED -e '10q' 2>/dev/null |
5190313a12fdSmrg       $EGREP 'file format (pei*-i386(.*architecture: i386)?|pe-arm-wince|pe-x86-64)' >/dev/null; then
51917cea3689Smrg      case $nm_interface in
51927cea3689Smrg      "MS dumpbin")
51937cea3689Smrg	if func_cygming_ms_implib_p "$1" ||
51947cea3689Smrg	   func_cygming_gnu_implib_p "$1"
51957cea3689Smrg	then
51967cea3689Smrg	  win32_nmres=import
51977cea3689Smrg	else
51987cea3689Smrg	  win32_nmres=
51997cea3689Smrg	fi
52007cea3689Smrg	;;
52017cea3689Smrg      *)
52027cea3689Smrg	func_to_tool_file "$1" func_convert_file_msys_to_w32
52037cea3689Smrg	win32_nmres=`eval $NM -f posix -A \"$func_to_tool_file_result\" |
52047cea3689Smrg	  $SED -n -e '
5205e19dfac4Smrg	    1,100{
5206e19dfac4Smrg		/ I /{
52077cea3689Smrg		    s|.*|import|
5208e19dfac4Smrg		    p
5209e19dfac4Smrg		    q
5210e19dfac4Smrg		}
5211e19dfac4Smrg	    }'`
52127cea3689Smrg	;;
52137cea3689Smrg      esac
5214e19dfac4Smrg      case $win32_nmres in
5215e19dfac4Smrg      import*)  win32_libid_type="x86 archive import";;
5216e19dfac4Smrg      *)        win32_libid_type="x86 archive static";;
5217e19dfac4Smrg      esac
5218e19dfac4Smrg    fi
5219e19dfac4Smrg    ;;
5220e19dfac4Smrg  *DLL*)
5221e19dfac4Smrg    win32_libid_type="x86 DLL"
5222e19dfac4Smrg    ;;
5223e19dfac4Smrg  *executable*) # but shell scripts are "executable" too...
5224e19dfac4Smrg    case $win32_fileres in
5225e19dfac4Smrg    *MS\ Windows\ PE\ Intel*)
5226e19dfac4Smrg      win32_libid_type="x86 DLL"
5227e19dfac4Smrg      ;;
5228e19dfac4Smrg    esac
5229e19dfac4Smrg    ;;
5230e19dfac4Smrg  esac
5231e19dfac4Smrg  $ECHO "$win32_libid_type"
5232e19dfac4Smrg}
523327702724Smrg
5234313a12fdSmrg# func_cygming_dll_for_implib ARG
5235313a12fdSmrg#
5236313a12fdSmrg# Platform-specific function to extract the
5237313a12fdSmrg# name of the DLL associated with the specified
5238313a12fdSmrg# import library ARG.
5239313a12fdSmrg# Invoked by eval'ing the libtool variable
5240313a12fdSmrg#    $sharedlib_from_linklib_cmd
5241313a12fdSmrg# Result is available in the variable
5242313a12fdSmrg#    $sharedlib_from_linklib_result
5243313a12fdSmrgfunc_cygming_dll_for_implib ()
5244313a12fdSmrg{
52457cea3689Smrg  $debug_cmd
52467cea3689Smrg
5247313a12fdSmrg  sharedlib_from_linklib_result=`$DLLTOOL --identify-strict --identify "$1"`
5248313a12fdSmrg}
5249313a12fdSmrg
5250313a12fdSmrg# func_cygming_dll_for_implib_fallback_core SECTION_NAME LIBNAMEs
5251313a12fdSmrg#
5252313a12fdSmrg# The is the core of a fallback implementation of a
5253313a12fdSmrg# platform-specific function to extract the name of the
5254313a12fdSmrg# DLL associated with the specified import library LIBNAME.
5255313a12fdSmrg#
5256313a12fdSmrg# SECTION_NAME is either .idata$6 or .idata$7, depending
5257313a12fdSmrg# on the platform and compiler that created the implib.
5258313a12fdSmrg#
5259313a12fdSmrg# Echos the name of the DLL associated with the
5260313a12fdSmrg# specified import library.
5261313a12fdSmrgfunc_cygming_dll_for_implib_fallback_core ()
5262313a12fdSmrg{
52637cea3689Smrg  $debug_cmd
52647cea3689Smrg
5265313a12fdSmrg  match_literal=`$ECHO "$1" | $SED "$sed_make_literal_regex"`
5266313a12fdSmrg  $OBJDUMP -s --section "$1" "$2" 2>/dev/null |
5267313a12fdSmrg    $SED '/^Contents of section '"$match_literal"':/{
5268313a12fdSmrg      # Place marker at beginning of archive member dllname section
5269313a12fdSmrg      s/.*/====MARK====/
5270313a12fdSmrg      p
5271313a12fdSmrg      d
5272313a12fdSmrg    }
5273313a12fdSmrg    # These lines can sometimes be longer than 43 characters, but
5274313a12fdSmrg    # are always uninteresting
5275313a12fdSmrg    /:[	 ]*file format pe[i]\{,1\}-/d
5276313a12fdSmrg    /^In archive [^:]*:/d
5277313a12fdSmrg    # Ensure marker is printed
5278313a12fdSmrg    /^====MARK====/p
5279313a12fdSmrg    # Remove all lines with less than 43 characters
5280313a12fdSmrg    /^.\{43\}/!d
5281313a12fdSmrg    # From remaining lines, remove first 43 characters
5282313a12fdSmrg    s/^.\{43\}//' |
5283313a12fdSmrg    $SED -n '
5284313a12fdSmrg      # Join marker and all lines until next marker into a single line
5285313a12fdSmrg      /^====MARK====/ b para
5286313a12fdSmrg      H
5287313a12fdSmrg      $ b para
5288313a12fdSmrg      b
5289313a12fdSmrg      :para
5290313a12fdSmrg      x
5291313a12fdSmrg      s/\n//g
5292313a12fdSmrg      # Remove the marker
5293313a12fdSmrg      s/^====MARK====//
5294313a12fdSmrg      # Remove trailing dots and whitespace
5295313a12fdSmrg      s/[\. \t]*$//
5296313a12fdSmrg      # Print
5297313a12fdSmrg      /./p' |
5298313a12fdSmrg    # we now have a list, one entry per line, of the stringified
5299313a12fdSmrg    # contents of the appropriate section of all members of the
53007cea3689Smrg    # archive that possess that section. Heuristic: eliminate
53017cea3689Smrg    # all those that have a first or second character that is
5302313a12fdSmrg    # a '.' (that is, objdump's representation of an unprintable
5303313a12fdSmrg    # character.) This should work for all archives with less than
5304313a12fdSmrg    # 0x302f exports -- but will fail for DLLs whose name actually
5305313a12fdSmrg    # begins with a literal '.' or a single character followed by
5306313a12fdSmrg    # a '.'.
5307313a12fdSmrg    #
5308313a12fdSmrg    # Of those that remain, print the first one.
5309313a12fdSmrg    $SED -e '/^\./d;/^.\./d;q'
5310313a12fdSmrg}
5311313a12fdSmrg
5312313a12fdSmrg# func_cygming_dll_for_implib_fallback ARG
5313313a12fdSmrg# Platform-specific function to extract the
5314313a12fdSmrg# name of the DLL associated with the specified
5315313a12fdSmrg# import library ARG.
5316313a12fdSmrg#
5317313a12fdSmrg# This fallback implementation is for use when $DLLTOOL
5318313a12fdSmrg# does not support the --identify-strict option.
5319313a12fdSmrg# Invoked by eval'ing the libtool variable
5320313a12fdSmrg#    $sharedlib_from_linklib_cmd
5321313a12fdSmrg# Result is available in the variable
5322313a12fdSmrg#    $sharedlib_from_linklib_result
5323313a12fdSmrgfunc_cygming_dll_for_implib_fallback ()
5324313a12fdSmrg{
53257cea3689Smrg  $debug_cmd
53267cea3689Smrg
53277cea3689Smrg  if func_cygming_gnu_implib_p "$1"; then
5328313a12fdSmrg    # binutils import library
5329313a12fdSmrg    sharedlib_from_linklib_result=`func_cygming_dll_for_implib_fallback_core '.idata$7' "$1"`
53307cea3689Smrg  elif func_cygming_ms_implib_p "$1"; then
5331313a12fdSmrg    # ms-generated import library
5332313a12fdSmrg    sharedlib_from_linklib_result=`func_cygming_dll_for_implib_fallback_core '.idata$6' "$1"`
5333313a12fdSmrg  else
5334313a12fdSmrg    # unknown
53357cea3689Smrg    sharedlib_from_linklib_result=
5336313a12fdSmrg  fi
5337313a12fdSmrg}
533827702724Smrg
533927702724Smrg
5340e19dfac4Smrg# func_extract_an_archive dir oldlib
5341e19dfac4Smrgfunc_extract_an_archive ()
5342e19dfac4Smrg{
53437cea3689Smrg    $debug_cmd
53447cea3689Smrg
53457cea3689Smrg    f_ex_an_ar_dir=$1; shift
53467cea3689Smrg    f_ex_an_ar_oldlib=$1
53477cea3689Smrg    if test yes = "$lock_old_archive_extraction"; then
5348313a12fdSmrg      lockfile=$f_ex_an_ar_oldlib.lock
5349313a12fdSmrg      until $opt_dry_run || ln "$progpath" "$lockfile" 2>/dev/null; do
5350313a12fdSmrg	func_echo "Waiting for $lockfile to be removed"
5351313a12fdSmrg	sleep 2
5352313a12fdSmrg      done
5353313a12fdSmrg    fi
5354313a12fdSmrg    func_show_eval "(cd \$f_ex_an_ar_dir && $AR x \"\$f_ex_an_ar_oldlib\")" \
5355313a12fdSmrg		   'stat=$?; rm -f "$lockfile"; exit $stat'
53567cea3689Smrg    if test yes = "$lock_old_archive_extraction"; then
5357313a12fdSmrg      $opt_dry_run || rm -f "$lockfile"
5358313a12fdSmrg    fi
5359e19dfac4Smrg    if ($AR t "$f_ex_an_ar_oldlib" | sort | sort -uc >/dev/null 2>&1); then
5360e19dfac4Smrg     :
5361e19dfac4Smrg    else
5362e19dfac4Smrg      func_fatal_error "object name conflicts in archive: $f_ex_an_ar_dir/$f_ex_an_ar_oldlib"
5363e19dfac4Smrg    fi
5364e19dfac4Smrg}
536527702724Smrg
536627702724Smrg
5367e19dfac4Smrg# func_extract_archives gentop oldlib ...
5368e19dfac4Smrgfunc_extract_archives ()
5369e19dfac4Smrg{
53707cea3689Smrg    $debug_cmd
53717cea3689Smrg
53727cea3689Smrg    my_gentop=$1; shift
5373e19dfac4Smrg    my_oldlibs=${1+"$@"}
53747cea3689Smrg    my_oldobjs=
53757cea3689Smrg    my_xlib=
53767cea3689Smrg    my_xabs=
53777cea3689Smrg    my_xdir=
537827702724Smrg
5379e19dfac4Smrg    for my_xlib in $my_oldlibs; do
5380e19dfac4Smrg      # Extract the objects.
5381e19dfac4Smrg      case $my_xlib in
53827cea3689Smrg	[\\/]* | [A-Za-z]:[\\/]*) my_xabs=$my_xlib ;;
5383e19dfac4Smrg	*) my_xabs=`pwd`"/$my_xlib" ;;
5384e19dfac4Smrg      esac
5385e19dfac4Smrg      func_basename "$my_xlib"
53867cea3689Smrg      my_xlib=$func_basename_result
5387e19dfac4Smrg      my_xlib_u=$my_xlib
5388e19dfac4Smrg      while :; do
5389e19dfac4Smrg        case " $extracted_archives " in
5390e19dfac4Smrg	*" $my_xlib_u "*)
5391e19dfac4Smrg	  func_arith $extracted_serial + 1
5392e19dfac4Smrg	  extracted_serial=$func_arith_result
5393e19dfac4Smrg	  my_xlib_u=lt$extracted_serial-$my_xlib ;;
5394e19dfac4Smrg	*) break ;;
5395e19dfac4Smrg	esac
5396e19dfac4Smrg      done
5397e19dfac4Smrg      extracted_archives="$extracted_archives $my_xlib_u"
53987cea3689Smrg      my_xdir=$my_gentop/$my_xlib_u
539927702724Smrg
5400e19dfac4Smrg      func_mkdir_p "$my_xdir"
540127702724Smrg
5402e19dfac4Smrg      case $host in
5403e19dfac4Smrg      *-darwin*)
5404e19dfac4Smrg	func_verbose "Extracting $my_xabs"
5405e19dfac4Smrg	# Do not bother doing anything if just a dry run
5406e19dfac4Smrg	$opt_dry_run || {
5407e19dfac4Smrg	  darwin_orig_dir=`pwd`
5408e19dfac4Smrg	  cd $my_xdir || exit $?
5409e19dfac4Smrg	  darwin_archive=$my_xabs
5410e19dfac4Smrg	  darwin_curdir=`pwd`
54117cea3689Smrg	  func_basename "$darwin_archive"
54127cea3689Smrg	  darwin_base_archive=$func_basename_result
5413e19dfac4Smrg	  darwin_arches=`$LIPO -info "$darwin_archive" 2>/dev/null | $GREP Architectures 2>/dev/null || true`
5414e19dfac4Smrg	  if test -n "$darwin_arches"; then
5415e19dfac4Smrg	    darwin_arches=`$ECHO "$darwin_arches" | $SED -e 's/.*are://'`
5416e19dfac4Smrg	    darwin_arch=
5417e19dfac4Smrg	    func_verbose "$darwin_base_archive has multiple architectures $darwin_arches"
54187cea3689Smrg	    for darwin_arch in  $darwin_arches; do
54197cea3689Smrg	      func_mkdir_p "unfat-$$/$darwin_base_archive-$darwin_arch"
54207cea3689Smrg	      $LIPO -thin $darwin_arch -output "unfat-$$/$darwin_base_archive-$darwin_arch/$darwin_base_archive" "$darwin_archive"
54217cea3689Smrg	      cd "unfat-$$/$darwin_base_archive-$darwin_arch"
54227cea3689Smrg	      func_extract_an_archive "`pwd`" "$darwin_base_archive"
5423e19dfac4Smrg	      cd "$darwin_curdir"
54247cea3689Smrg	      $RM "unfat-$$/$darwin_base_archive-$darwin_arch/$darwin_base_archive"
5425e19dfac4Smrg	    done # $darwin_arches
5426e19dfac4Smrg            ## Okay now we've a bunch of thin objects, gotta fatten them up :)
54277cea3689Smrg	    darwin_filelist=`find unfat-$$ -type f -name \*.o -print -o -name \*.lo -print | $SED -e "$sed_basename" | sort -u`
5428e19dfac4Smrg	    darwin_file=
5429e19dfac4Smrg	    darwin_files=
5430e19dfac4Smrg	    for darwin_file in $darwin_filelist; do
5431313a12fdSmrg	      darwin_files=`find unfat-$$ -name $darwin_file -print | sort | $NL2SP`
5432e19dfac4Smrg	      $LIPO -create -output "$darwin_file" $darwin_files
5433e19dfac4Smrg	    done # $darwin_filelist
5434e19dfac4Smrg	    $RM -rf unfat-$$
5435e19dfac4Smrg	    cd "$darwin_orig_dir"
5436e19dfac4Smrg	  else
5437e19dfac4Smrg	    cd $darwin_orig_dir
5438e19dfac4Smrg	    func_extract_an_archive "$my_xdir" "$my_xabs"
5439e19dfac4Smrg	  fi # $darwin_arches
5440e19dfac4Smrg	} # !$opt_dry_run
5441e19dfac4Smrg	;;
5442e19dfac4Smrg      *)
5443e19dfac4Smrg        func_extract_an_archive "$my_xdir" "$my_xabs"
5444e19dfac4Smrg	;;
544527702724Smrg      esac
5446313a12fdSmrg      my_oldobjs="$my_oldobjs "`find $my_xdir -name \*.$objext -print -o -name \*.lo -print | sort | $NL2SP`
5447e19dfac4Smrg    done
544827702724Smrg
54497cea3689Smrg    func_extract_archives_result=$my_oldobjs
5450e19dfac4Smrg}
545127702724Smrg
545227702724Smrg
5453313a12fdSmrg# func_emit_wrapper [arg=no]
5454313a12fdSmrg#
5455313a12fdSmrg# Emit a libtool wrapper script on stdout.
5456313a12fdSmrg# Don't directly open a file because we may want to
5457313a12fdSmrg# incorporate the script contents within a cygwin/mingw
5458313a12fdSmrg# wrapper executable.  Must ONLY be called from within
5459313a12fdSmrg# func_mode_link because it depends on a number of variables
5460313a12fdSmrg# set therein.
5461e19dfac4Smrg#
5462313a12fdSmrg# ARG is the value that the WRAPPER_SCRIPT_BELONGS_IN_OBJDIR
5463313a12fdSmrg# variable will take.  If 'yes', then the emitted script
54647cea3689Smrg# will assume that the directory where it is stored is
5465313a12fdSmrg# the $objdir directory.  This is a cygwin/mingw-specific
5466313a12fdSmrg# behavior.
5467313a12fdSmrgfunc_emit_wrapper ()
5468e19dfac4Smrg{
5469313a12fdSmrg	func_emit_wrapper_arg1=${1-no}
547027702724Smrg
5471e19dfac4Smrg	$ECHO "\
5472e19dfac4Smrg#! $SHELL
547327702724Smrg
5474e19dfac4Smrg# $output - temporary wrapper script for $objdir/$outputname
54757cea3689Smrg# Generated by $PROGRAM (GNU $PACKAGE) $VERSION
5476e19dfac4Smrg#
5477e19dfac4Smrg# The $output program cannot be directly executed until all the libtool
5478e19dfac4Smrg# libraries that it depends on are installed.
5479e19dfac4Smrg#
5480e19dfac4Smrg# This wrapper script should never be moved out of the build directory.
5481e19dfac4Smrg# If it is, it will not operate correctly.
548227702724Smrg
5483e19dfac4Smrg# Sed substitution that helps us do robust quoting.  It backslashifies
5484e19dfac4Smrg# metacharacters that are still active within double-quoted strings.
5485e19dfac4Smrgsed_quote_subst='$sed_quote_subst'
548627702724Smrg
5487e19dfac4Smrg# Be Bourne compatible
5488e19dfac4Smrgif test -n \"\${ZSH_VERSION+set}\" && (emulate sh) >/dev/null 2>&1; then
5489e19dfac4Smrg  emulate sh
5490e19dfac4Smrg  NULLCMD=:
5491e19dfac4Smrg  # Zsh 3.x and 4.x performs word splitting on \${1+\"\$@\"}, which
5492e19dfac4Smrg  # is contrary to our usage.  Disable this feature.
5493e19dfac4Smrg  alias -g '\${1+\"\$@\"}'='\"\$@\"'
5494e19dfac4Smrg  setopt NO_GLOB_SUBST
5495e19dfac4Smrgelse
5496e19dfac4Smrg  case \`(set -o) 2>/dev/null\` in *posix*) set -o posix;; esac
5497e19dfac4Smrgfi
5498e19dfac4SmrgBIN_SH=xpg4; export BIN_SH # for Tru64
5499e19dfac4SmrgDUALCASE=1; export DUALCASE # for MKS sh
550027702724Smrg
5501e19dfac4Smrg# The HP-UX ksh and POSIX shell print the target directory to stdout
5502e19dfac4Smrg# if CDPATH is set.
5503e19dfac4Smrg(unset CDPATH) >/dev/null 2>&1 && unset CDPATH
550427702724Smrg
5505e19dfac4Smrgrelink_command=\"$relink_command\"
550627702724Smrg
5507e19dfac4Smrg# This environment variable determines our operation mode.
5508e19dfac4Smrgif test \"\$libtool_install_magic\" = \"$magic\"; then
5509e19dfac4Smrg  # install mode needs the following variables:
5510e19dfac4Smrg  generated_by_libtool_version='$macro_version'
5511e19dfac4Smrg  notinst_deplibs='$notinst_deplibs'
5512e19dfac4Smrgelse
5513e19dfac4Smrg  # When we are sourced in execute mode, \$file and \$ECHO are already set.
5514e19dfac4Smrg  if test \"\$libtool_execute_magic\" != \"$magic\"; then
5515313a12fdSmrg    file=\"\$0\""
5516313a12fdSmrg
551795b7a5c8Smrg    func_quote_arg pretty "$ECHO"
551895b7a5c8Smrg    qECHO=$func_quote_arg_result
5519313a12fdSmrg    $ECHO "\
5520313a12fdSmrg
5521313a12fdSmrg# A function that is used when there is no print builtin or printf.
5522313a12fdSmrgfunc_fallback_echo ()
5523313a12fdSmrg{
5524313a12fdSmrg  eval 'cat <<_LTECHO_EOF
5525313a12fdSmrg\$1
5526313a12fdSmrg_LTECHO_EOF'
5527313a12fdSmrg}
552895b7a5c8Smrg    ECHO=$qECHO
5529313a12fdSmrg  fi
5530313a12fdSmrg
5531313a12fdSmrg# Very basic option parsing. These options are (a) specific to
5532313a12fdSmrg# the libtool wrapper, (b) are identical between the wrapper
55337cea3689Smrg# /script/ and the wrapper /executable/ that is used only on
5534313a12fdSmrg# windows platforms, and (c) all begin with the string "--lt-"
55357cea3689Smrg# (application programs are unlikely to have options that match
5536313a12fdSmrg# this pattern).
5537313a12fdSmrg#
5538313a12fdSmrg# There are only two supported options: --lt-debug and
5539313a12fdSmrg# --lt-dump-script. There is, deliberately, no --lt-help.
5540313a12fdSmrg#
5541313a12fdSmrg# The first argument to this parsing function should be the
5542313a12fdSmrg# script's $0 value, followed by "$@".
5543313a12fdSmrglt_option_debug=
5544313a12fdSmrgfunc_parse_lt_options ()
5545313a12fdSmrg{
5546313a12fdSmrg  lt_script_arg0=\$0
5547313a12fdSmrg  shift
5548313a12fdSmrg  for lt_opt
5549313a12fdSmrg  do
5550313a12fdSmrg    case \"\$lt_opt\" in
5551313a12fdSmrg    --lt-debug) lt_option_debug=1 ;;
5552313a12fdSmrg    --lt-dump-script)
5553313a12fdSmrg        lt_dump_D=\`\$ECHO \"X\$lt_script_arg0\" | $SED -e 's/^X//' -e 's%/[^/]*$%%'\`
5554313a12fdSmrg        test \"X\$lt_dump_D\" = \"X\$lt_script_arg0\" && lt_dump_D=.
5555313a12fdSmrg        lt_dump_F=\`\$ECHO \"X\$lt_script_arg0\" | $SED -e 's/^X//' -e 's%^.*/%%'\`
5556313a12fdSmrg        cat \"\$lt_dump_D/\$lt_dump_F\"
5557313a12fdSmrg        exit 0
5558313a12fdSmrg      ;;
5559313a12fdSmrg    --lt-*)
5560313a12fdSmrg        \$ECHO \"Unrecognized --lt- option: '\$lt_opt'\" 1>&2
5561313a12fdSmrg        exit 1
5562313a12fdSmrg      ;;
5563313a12fdSmrg    esac
5564313a12fdSmrg  done
5565313a12fdSmrg
5566313a12fdSmrg  # Print the debug banner immediately:
5567313a12fdSmrg  if test -n \"\$lt_option_debug\"; then
55687cea3689Smrg    echo \"$outputname:$output:\$LINENO: libtool wrapper (GNU $PACKAGE) $VERSION\" 1>&2
5569313a12fdSmrg  fi
5570313a12fdSmrg}
5571313a12fdSmrg
5572313a12fdSmrg# Used when --lt-debug. Prints its arguments to stdout
5573313a12fdSmrg# (redirection is the responsibility of the caller)
5574313a12fdSmrgfunc_lt_dump_args ()
5575313a12fdSmrg{
5576313a12fdSmrg  lt_dump_args_N=1;
5577313a12fdSmrg  for lt_arg
5578313a12fdSmrg  do
55797cea3689Smrg    \$ECHO \"$outputname:$output:\$LINENO: newargv[\$lt_dump_args_N]: \$lt_arg\"
5580313a12fdSmrg    lt_dump_args_N=\`expr \$lt_dump_args_N + 1\`
5581313a12fdSmrg  done
5582313a12fdSmrg}
5583313a12fdSmrg
5584313a12fdSmrg# Core function for launching the target application
5585313a12fdSmrgfunc_exec_program_core ()
5586313a12fdSmrg{
5587e19dfac4Smrg"
5588313a12fdSmrg  case $host in
5589313a12fdSmrg  # Backslashes separate directories on plain windows
5590313a12fdSmrg  *-*-mingw | *-*-os2* | *-cegcc*)
5591313a12fdSmrg    $ECHO "\
5592313a12fdSmrg      if test -n \"\$lt_option_debug\"; then
55937cea3689Smrg        \$ECHO \"$outputname:$output:\$LINENO: newargv[0]: \$progdir\\\\\$program\" 1>&2
5594313a12fdSmrg        func_lt_dump_args \${1+\"\$@\"} 1>&2
5595313a12fdSmrg      fi
5596313a12fdSmrg      exec \"\$progdir\\\\\$program\" \${1+\"\$@\"}
5597313a12fdSmrg"
5598313a12fdSmrg    ;;
5599313a12fdSmrg
5600313a12fdSmrg  *)
5601313a12fdSmrg    $ECHO "\
5602313a12fdSmrg      if test -n \"\$lt_option_debug\"; then
56037cea3689Smrg        \$ECHO \"$outputname:$output:\$LINENO: newargv[0]: \$progdir/\$program\" 1>&2
5604313a12fdSmrg        func_lt_dump_args \${1+\"\$@\"} 1>&2
5605313a12fdSmrg      fi
5606313a12fdSmrg      exec \"\$progdir/\$program\" \${1+\"\$@\"}
5607313a12fdSmrg"
5608313a12fdSmrg    ;;
5609313a12fdSmrg  esac
5610313a12fdSmrg  $ECHO "\
5611313a12fdSmrg      \$ECHO \"\$0: cannot exec \$program \$*\" 1>&2
5612313a12fdSmrg      exit 1
5613313a12fdSmrg}
5614313a12fdSmrg
5615313a12fdSmrg# A function to encapsulate launching the target application
5616313a12fdSmrg# Strips options in the --lt-* namespace from \$@ and
5617313a12fdSmrg# launches target application with the remaining arguments.
5618313a12fdSmrgfunc_exec_program ()
5619313a12fdSmrg{
5620313a12fdSmrg  case \" \$* \" in
5621313a12fdSmrg  *\\ --lt-*)
5622313a12fdSmrg    for lt_wr_arg
5623313a12fdSmrg    do
5624313a12fdSmrg      case \$lt_wr_arg in
5625313a12fdSmrg      --lt-*) ;;
5626313a12fdSmrg      *) set x \"\$@\" \"\$lt_wr_arg\"; shift;;
5627313a12fdSmrg      esac
5628313a12fdSmrg      shift
5629313a12fdSmrg    done ;;
5630313a12fdSmrg  esac
5631313a12fdSmrg  func_exec_program_core \${1+\"\$@\"}
5632313a12fdSmrg}
5633313a12fdSmrg
5634313a12fdSmrg  # Parse options
5635313a12fdSmrg  func_parse_lt_options \"\$0\" \${1+\"\$@\"}
563627702724Smrg
5637e19dfac4Smrg  # Find the directory that this script lives in.
5638313a12fdSmrg  thisdir=\`\$ECHO \"\$file\" | $SED 's%/[^/]*$%%'\`
5639e19dfac4Smrg  test \"x\$thisdir\" = \"x\$file\" && thisdir=.
564027702724Smrg
5641e19dfac4Smrg  # Follow symbolic links until we get to the real thisdir.
5642313a12fdSmrg  file=\`ls -ld \"\$file\" | $SED -n 's/.*-> //p'\`
5643e19dfac4Smrg  while test -n \"\$file\"; do
5644313a12fdSmrg    destdir=\`\$ECHO \"\$file\" | $SED 's%/[^/]*\$%%'\`
564527702724Smrg
5646e19dfac4Smrg    # If there was a directory component, then change thisdir.
5647e19dfac4Smrg    if test \"x\$destdir\" != \"x\$file\"; then
5648e19dfac4Smrg      case \"\$destdir\" in
5649e19dfac4Smrg      [\\\\/]* | [A-Za-z]:[\\\\/]*) thisdir=\"\$destdir\" ;;
5650e19dfac4Smrg      *) thisdir=\"\$thisdir/\$destdir\" ;;
5651e19dfac4Smrg      esac
5652e19dfac4Smrg    fi
565327702724Smrg
5654313a12fdSmrg    file=\`\$ECHO \"\$file\" | $SED 's%^.*/%%'\`
5655313a12fdSmrg    file=\`ls -ld \"\$thisdir/\$file\" | $SED -n 's/.*-> //p'\`
5656e19dfac4Smrg  done
565727702724Smrg
5658e19dfac4Smrg  # Usually 'no', except on cygwin/mingw when embedded into
5659e19dfac4Smrg  # the cwrapper.
5660313a12fdSmrg  WRAPPER_SCRIPT_BELONGS_IN_OBJDIR=$func_emit_wrapper_arg1
5661e19dfac4Smrg  if test \"\$WRAPPER_SCRIPT_BELONGS_IN_OBJDIR\" = \"yes\"; then
5662e19dfac4Smrg    # special case for '.'
5663e19dfac4Smrg    if test \"\$thisdir\" = \".\"; then
5664e19dfac4Smrg      thisdir=\`pwd\`
5665e19dfac4Smrg    fi
5666e19dfac4Smrg    # remove .libs from thisdir
5667e19dfac4Smrg    case \"\$thisdir\" in
5668313a12fdSmrg    *[\\\\/]$objdir ) thisdir=\`\$ECHO \"\$thisdir\" | $SED 's%[\\\\/][^\\\\/]*$%%'\` ;;
5669e19dfac4Smrg    $objdir )   thisdir=. ;;
5670e19dfac4Smrg    esac
5671e19dfac4Smrg  fi
567227702724Smrg
5673e19dfac4Smrg  # Try to get the absolute directory name.
5674e19dfac4Smrg  absdir=\`cd \"\$thisdir\" && pwd\`
5675e19dfac4Smrg  test -n \"\$absdir\" && thisdir=\"\$absdir\"
5676e19dfac4Smrg"
567727702724Smrg
56787cea3689Smrg	if test yes = "$fast_install"; then
5679e19dfac4Smrg	  $ECHO "\
5680e19dfac4Smrg  program=lt-'$outputname'$exeext
5681e19dfac4Smrg  progdir=\"\$thisdir/$objdir\"
568227702724Smrg
5683e19dfac4Smrg  if test ! -f \"\$progdir/\$program\" ||
56847cea3689Smrg     { file=\`ls -1dt \"\$progdir/\$program\" \"\$progdir/../\$program\" 2>/dev/null | $SED 1q\`; \\
5685e19dfac4Smrg       test \"X\$file\" != \"X\$progdir/\$program\"; }; then
568627702724Smrg
5687e19dfac4Smrg    file=\"\$\$-\$program\"
568827702724Smrg
5689e19dfac4Smrg    if test ! -d \"\$progdir\"; then
5690e19dfac4Smrg      $MKDIR \"\$progdir\"
5691e19dfac4Smrg    else
5692e19dfac4Smrg      $RM \"\$progdir/\$file\"
5693e19dfac4Smrg    fi"
569427702724Smrg
5695e19dfac4Smrg	  $ECHO "\
569627702724Smrg
5697e19dfac4Smrg    # relink executable if necessary
5698e19dfac4Smrg    if test -n \"\$relink_command\"; then
5699e19dfac4Smrg      if relink_command_output=\`eval \$relink_command 2>&1\`; then :
5700e19dfac4Smrg      else
57017cea3689Smrg	\$ECHO \"\$relink_command_output\" >&2
5702e19dfac4Smrg	$RM \"\$progdir/\$file\"
5703e19dfac4Smrg	exit 1
5704e19dfac4Smrg      fi
5705e19dfac4Smrg    fi
570627702724Smrg
5707e19dfac4Smrg    $MV \"\$progdir/\$file\" \"\$progdir/\$program\" 2>/dev/null ||
5708e19dfac4Smrg    { $RM \"\$progdir/\$program\";
5709e19dfac4Smrg      $MV \"\$progdir/\$file\" \"\$progdir/\$program\"; }
5710e19dfac4Smrg    $RM \"\$progdir/\$file\"
5711e19dfac4Smrg  fi"
5712e19dfac4Smrg	else
5713e19dfac4Smrg	  $ECHO "\
5714e19dfac4Smrg  program='$outputname'
5715e19dfac4Smrg  progdir=\"\$thisdir/$objdir\"
5716e19dfac4Smrg"
5717e19dfac4Smrg	fi
571827702724Smrg
5719e19dfac4Smrg	$ECHO "\
572027702724Smrg
5721e19dfac4Smrg  if test -f \"\$progdir/\$program\"; then"
572227702724Smrg
5723313a12fdSmrg	# fixup the dll searchpath if we need to.
5724313a12fdSmrg	#
5725313a12fdSmrg	# Fix the DLL searchpath if we need to.  Do this before prepending
5726313a12fdSmrg	# to shlibpath, because on Windows, both are PATH and uninstalled
5727313a12fdSmrg	# libraries must come first.
5728313a12fdSmrg	if test -n "$dllsearchpath"; then
5729313a12fdSmrg	  $ECHO "\
5730313a12fdSmrg    # Add the dll search path components to the executable PATH
5731313a12fdSmrg    PATH=$dllsearchpath:\$PATH
5732313a12fdSmrg"
5733313a12fdSmrg	fi
5734313a12fdSmrg
5735e19dfac4Smrg	# Export our shlibpath_var if we have one.
57367cea3689Smrg	if test yes = "$shlibpath_overrides_runpath" && test -n "$shlibpath_var" && test -n "$temp_rpath"; then
5737e19dfac4Smrg	  $ECHO "\
5738e19dfac4Smrg    # Add our own library path to $shlibpath_var
5739e19dfac4Smrg    $shlibpath_var=\"$temp_rpath\$$shlibpath_var\"
574027702724Smrg
5741e19dfac4Smrg    # Some systems cannot cope with colon-terminated $shlibpath_var
5742e19dfac4Smrg    # The second colon is a workaround for a bug in BeOS R4 sed
5743313a12fdSmrg    $shlibpath_var=\`\$ECHO \"\$$shlibpath_var\" | $SED 's/::*\$//'\`
574427702724Smrg
5745e19dfac4Smrg    export $shlibpath_var
5746e19dfac4Smrg"
574727702724Smrg	fi
574827702724Smrg
5749e19dfac4Smrg	$ECHO "\
5750e19dfac4Smrg    if test \"\$libtool_execute_magic\" != \"$magic\"; then
5751e19dfac4Smrg      # Run the actual program with our arguments.
5752313a12fdSmrg      func_exec_program \${1+\"\$@\"}
5753e19dfac4Smrg    fi
5754e19dfac4Smrg  else
5755e19dfac4Smrg    # The program doesn't exist.
57567cea3689Smrg    \$ECHO \"\$0: error: '\$progdir/\$program' does not exist\" 1>&2
5757e19dfac4Smrg    \$ECHO \"This script is just a wrapper for \$program.\" 1>&2
5758313a12fdSmrg    \$ECHO \"See the $PACKAGE documentation for more information.\" 1>&2
5759e19dfac4Smrg    exit 1
5760e19dfac4Smrg  fi
5761e19dfac4Smrgfi\
5762e19dfac4Smrg"
5763e19dfac4Smrg}
576427702724Smrg
576527702724Smrg
5766e19dfac4Smrg# func_emit_cwrapperexe_src
5767e19dfac4Smrg# emit the source code for a wrapper executable on stdout
5768e19dfac4Smrg# Must ONLY be called from within func_mode_link because
5769e19dfac4Smrg# it depends on a number of variable set therein.
5770e19dfac4Smrgfunc_emit_cwrapperexe_src ()
5771e19dfac4Smrg{
5772e19dfac4Smrg	cat <<EOF
577327702724Smrg
5774e19dfac4Smrg/* $cwrappersource - temporary wrapper executable for $objdir/$outputname
57757cea3689Smrg   Generated by $PROGRAM (GNU $PACKAGE) $VERSION
577627702724Smrg
5777e19dfac4Smrg   The $output program cannot be directly executed until all the libtool
5778e19dfac4Smrg   libraries that it depends on are installed.
577927702724Smrg
5780e19dfac4Smrg   This wrapper executable should never be moved out of the build directory.
5781e19dfac4Smrg   If it is, it will not operate correctly.
5782e19dfac4Smrg*/
5783e19dfac4SmrgEOF
5784e19dfac4Smrg	    cat <<"EOF"
5785313a12fdSmrg#ifdef _MSC_VER
5786313a12fdSmrg# define _CRT_SECURE_NO_DEPRECATE 1
5787313a12fdSmrg#endif
5788e19dfac4Smrg#include <stdio.h>
5789e19dfac4Smrg#include <stdlib.h>
5790e19dfac4Smrg#ifdef _MSC_VER
5791e19dfac4Smrg# include <direct.h>
5792e19dfac4Smrg# include <process.h>
5793e19dfac4Smrg# include <io.h>
5794e19dfac4Smrg#else
5795e19dfac4Smrg# include <unistd.h>
5796e19dfac4Smrg# include <stdint.h>
5797e19dfac4Smrg# ifdef __CYGWIN__
5798e19dfac4Smrg#  include <io.h>
5799e19dfac4Smrg# endif
5800e19dfac4Smrg#endif
5801e19dfac4Smrg#include <malloc.h>
5802e19dfac4Smrg#include <stdarg.h>
5803e19dfac4Smrg#include <assert.h>
5804e19dfac4Smrg#include <string.h>
5805e19dfac4Smrg#include <ctype.h>
5806e19dfac4Smrg#include <errno.h>
5807e19dfac4Smrg#include <fcntl.h>
5808e19dfac4Smrg#include <sys/stat.h>
5809e19dfac4Smrg
58107cea3689Smrg#define STREQ(s1, s2) (strcmp ((s1), (s2)) == 0)
58117cea3689Smrg
5812313a12fdSmrg/* declarations of non-ANSI functions */
58137cea3689Smrg#if defined __MINGW32__
5814313a12fdSmrg# ifdef __STRICT_ANSI__
5815313a12fdSmrgint _putenv (const char *);
5816313a12fdSmrg# endif
58177cea3689Smrg#elif defined __CYGWIN__
5818313a12fdSmrg# ifdef __STRICT_ANSI__
5819313a12fdSmrgchar *realpath (const char *, char *);
5820313a12fdSmrgint putenv (char *);
5821313a12fdSmrgint setenv (const char *, const char *, int);
5822313a12fdSmrg# endif
58237cea3689Smrg/* #elif defined other_platform || defined ... */
5824313a12fdSmrg#endif
5825313a12fdSmrg
5826313a12fdSmrg/* portability defines, excluding path handling macros */
58277cea3689Smrg#if defined _MSC_VER
5828313a12fdSmrg# define setmode _setmode
5829313a12fdSmrg# define stat    _stat
5830313a12fdSmrg# define chmod   _chmod
5831313a12fdSmrg# define getcwd  _getcwd
5832313a12fdSmrg# define putenv  _putenv
5833313a12fdSmrg# define S_IXUSR _S_IEXEC
58347cea3689Smrg#elif defined __MINGW32__
5835313a12fdSmrg# define setmode _setmode
5836313a12fdSmrg# define stat    _stat
5837313a12fdSmrg# define chmod   _chmod
5838313a12fdSmrg# define getcwd  _getcwd
5839313a12fdSmrg# define putenv  _putenv
58407cea3689Smrg#elif defined __CYGWIN__
5841313a12fdSmrg# define HAVE_SETENV
5842313a12fdSmrg# define FOPEN_WB "wb"
58437cea3689Smrg/* #elif defined other platforms ... */
5844313a12fdSmrg#endif
5845313a12fdSmrg
58467cea3689Smrg#if defined PATH_MAX
5847e19dfac4Smrg# define LT_PATHMAX PATH_MAX
58487cea3689Smrg#elif defined MAXPATHLEN
5849e19dfac4Smrg# define LT_PATHMAX MAXPATHLEN
5850e19dfac4Smrg#else
5851e19dfac4Smrg# define LT_PATHMAX 1024
5852e19dfac4Smrg#endif
5853e19dfac4Smrg
5854e19dfac4Smrg#ifndef S_IXOTH
5855e19dfac4Smrg# define S_IXOTH 0
5856e19dfac4Smrg#endif
5857e19dfac4Smrg#ifndef S_IXGRP
5858e19dfac4Smrg# define S_IXGRP 0
5859e19dfac4Smrg#endif
5860e19dfac4Smrg
5861313a12fdSmrg/* path handling portability macros */
5862e19dfac4Smrg#ifndef DIR_SEPARATOR
5863e19dfac4Smrg# define DIR_SEPARATOR '/'
5864e19dfac4Smrg# define PATH_SEPARATOR ':'
5865e19dfac4Smrg#endif
5866e19dfac4Smrg
58677cea3689Smrg#if defined _WIN32 || defined __MSDOS__ || defined __DJGPP__ || \
58687cea3689Smrg  defined __OS2__
5869e19dfac4Smrg# define HAVE_DOS_BASED_FILE_SYSTEM
5870e19dfac4Smrg# define FOPEN_WB "wb"
5871e19dfac4Smrg# ifndef DIR_SEPARATOR_2
5872e19dfac4Smrg#  define DIR_SEPARATOR_2 '\\'
5873e19dfac4Smrg# endif
5874e19dfac4Smrg# ifndef PATH_SEPARATOR_2
5875e19dfac4Smrg#  define PATH_SEPARATOR_2 ';'
5876e19dfac4Smrg# endif
5877e19dfac4Smrg#endif
5878e19dfac4Smrg
5879e19dfac4Smrg#ifndef DIR_SEPARATOR_2
5880e19dfac4Smrg# define IS_DIR_SEPARATOR(ch) ((ch) == DIR_SEPARATOR)
5881e19dfac4Smrg#else /* DIR_SEPARATOR_2 */
5882e19dfac4Smrg# define IS_DIR_SEPARATOR(ch) \
5883e19dfac4Smrg	(((ch) == DIR_SEPARATOR) || ((ch) == DIR_SEPARATOR_2))
5884e19dfac4Smrg#endif /* DIR_SEPARATOR_2 */
5885e19dfac4Smrg
5886e19dfac4Smrg#ifndef PATH_SEPARATOR_2
5887e19dfac4Smrg# define IS_PATH_SEPARATOR(ch) ((ch) == PATH_SEPARATOR)
5888e19dfac4Smrg#else /* PATH_SEPARATOR_2 */
5889e19dfac4Smrg# define IS_PATH_SEPARATOR(ch) ((ch) == PATH_SEPARATOR_2)
5890e19dfac4Smrg#endif /* PATH_SEPARATOR_2 */
5891e19dfac4Smrg
5892e19dfac4Smrg#ifndef FOPEN_WB
5893e19dfac4Smrg# define FOPEN_WB "w"
5894e19dfac4Smrg#endif
5895e19dfac4Smrg#ifndef _O_BINARY
5896e19dfac4Smrg# define _O_BINARY 0
5897e19dfac4Smrg#endif
5898e19dfac4Smrg
5899e19dfac4Smrg#define XMALLOC(type, num)      ((type *) xmalloc ((num) * sizeof(type)))
5900e19dfac4Smrg#define XFREE(stale) do { \
59017cea3689Smrg  if (stale) { free (stale); stale = 0; } \
5902e19dfac4Smrg} while (0)
5903e19dfac4Smrg
59047cea3689Smrg#if defined LT_DEBUGWRAPPER
5905313a12fdSmrgstatic int lt_debug = 1;
5906e19dfac4Smrg#else
5907313a12fdSmrgstatic int lt_debug = 0;
5908e19dfac4Smrg#endif
5909e19dfac4Smrg
5910313a12fdSmrgconst char *program_name = "libtool-wrapper"; /* in case xstrdup fails */
5911e19dfac4Smrg
5912e19dfac4Smrgvoid *xmalloc (size_t num);
5913e19dfac4Smrgchar *xstrdup (const char *string);
5914e19dfac4Smrgconst char *base_name (const char *name);
5915e19dfac4Smrgchar *find_executable (const char *wrapper);
5916e19dfac4Smrgchar *chase_symlinks (const char *pathspec);
5917e19dfac4Smrgint make_executable (const char *path);
5918e19dfac4Smrgint check_executable (const char *path);
5919e19dfac4Smrgchar *strendzap (char *str, const char *pat);
5920313a12fdSmrgvoid lt_debugprintf (const char *file, int line, const char *fmt, ...);
5921313a12fdSmrgvoid lt_fatal (const char *file, int line, const char *message, ...);
5922313a12fdSmrgstatic const char *nonnull (const char *s);
5923313a12fdSmrgstatic const char *nonempty (const char *s);
5924e19dfac4Smrgvoid lt_setenv (const char *name, const char *value);
5925e19dfac4Smrgchar *lt_extend_str (const char *orig_value, const char *add, int to_end);
5926e19dfac4Smrgvoid lt_update_exe_path (const char *name, const char *value);
5927e19dfac4Smrgvoid lt_update_lib_path (const char *name, const char *value);
5928313a12fdSmrgchar **prepare_spawn (char **argv);
5929313a12fdSmrgvoid lt_dump_script (FILE *f);
5930e19dfac4SmrgEOF
5931e19dfac4Smrg
5932e19dfac4Smrg	    cat <<EOF
59337cea3689Smrg#if __GNUC__ < 4 || (__GNUC__ == 4 && __GNUC_MINOR__ < 5)
59347cea3689Smrg# define externally_visible volatile
59357cea3689Smrg#else
59367cea3689Smrg# define externally_visible __attribute__((externally_visible)) volatile
59377cea3689Smrg#endif
59387cea3689Smrgexternally_visible const char * MAGIC_EXE = "$magic_exe";
5939e19dfac4Smrgconst char * LIB_PATH_VARNAME = "$shlibpath_var";
5940e19dfac4SmrgEOF
5941e19dfac4Smrg
59427cea3689Smrg	    if test yes = "$shlibpath_overrides_runpath" && test -n "$shlibpath_var" && test -n "$temp_rpath"; then
5943313a12fdSmrg              func_to_host_path "$temp_rpath"
5944e19dfac4Smrg	      cat <<EOF
5945313a12fdSmrgconst char * LIB_PATH_VALUE   = "$func_to_host_path_result";
594627702724SmrgEOF
594727702724Smrg	    else
5948e19dfac4Smrg	      cat <<"EOF"
5949e19dfac4Smrgconst char * LIB_PATH_VALUE   = "";
5950e19dfac4SmrgEOF
595127702724Smrg	    fi
5952e19dfac4Smrg
5953e19dfac4Smrg	    if test -n "$dllsearchpath"; then
5954313a12fdSmrg              func_to_host_path "$dllsearchpath:"
5955e19dfac4Smrg	      cat <<EOF
5956e19dfac4Smrgconst char * EXE_PATH_VARNAME = "PATH";
5957313a12fdSmrgconst char * EXE_PATH_VALUE   = "$func_to_host_path_result";
5958e19dfac4SmrgEOF
595927702724Smrg	    else
5960e19dfac4Smrg	      cat <<"EOF"
5961e19dfac4Smrgconst char * EXE_PATH_VARNAME = "";
5962e19dfac4Smrgconst char * EXE_PATH_VALUE   = "";
5963e19dfac4SmrgEOF
596427702724Smrg	    fi
5965e19dfac4Smrg
59667cea3689Smrg	    if test yes = "$fast_install"; then
5967e19dfac4Smrg	      cat <<EOF
5968e19dfac4Smrgconst char * TARGET_PROGRAM_NAME = "lt-$outputname"; /* hopefully, no .exe */
5969e19dfac4SmrgEOF
597027702724Smrg	    else
5971e19dfac4Smrg	      cat <<EOF
5972e19dfac4Smrgconst char * TARGET_PROGRAM_NAME = "$outputname"; /* hopefully, no .exe */
5973e19dfac4SmrgEOF
597427702724Smrg	    fi
597527702724Smrg
597627702724Smrg
5977e19dfac4Smrg	    cat <<"EOF"
597827702724Smrg
5979e19dfac4Smrg#define LTWRAPPER_OPTION_PREFIX         "--lt-"
598027702724Smrg
5981e19dfac4Smrgstatic const char *ltwrapper_option_prefix = LTWRAPPER_OPTION_PREFIX;
5982e19dfac4Smrgstatic const char *dumpscript_opt       = LTWRAPPER_OPTION_PREFIX "dump-script";
5983313a12fdSmrgstatic const char *debug_opt            = LTWRAPPER_OPTION_PREFIX "debug";
598427702724Smrg
5985e19dfac4Smrgint
5986e19dfac4Smrgmain (int argc, char *argv[])
5987e19dfac4Smrg{
5988e19dfac4Smrg  char **newargz;
5989e19dfac4Smrg  int  newargc;
5990e19dfac4Smrg  char *tmp_pathspec;
5991e19dfac4Smrg  char *actual_cwrapper_path;
5992e19dfac4Smrg  char *actual_cwrapper_name;
5993e19dfac4Smrg  char *target_name;
5994e19dfac4Smrg  char *lt_argv_zero;
59957cea3689Smrg  int rval = 127;
599627702724Smrg
5997e19dfac4Smrg  int i;
599827702724Smrg
5999e19dfac4Smrg  program_name = (char *) xstrdup (base_name (argv[0]));
60007cea3689Smrg  newargz = XMALLOC (char *, (size_t) argc + 1);
600127702724Smrg
6002313a12fdSmrg  /* very simple arg parsing; don't want to rely on getopt
6003313a12fdSmrg   * also, copy all non cwrapper options to newargz, except
6004313a12fdSmrg   * argz[0], which is handled differently
6005313a12fdSmrg   */
6006313a12fdSmrg  newargc=0;
6007e19dfac4Smrg  for (i = 1; i < argc; i++)
6008e19dfac4Smrg    {
60097cea3689Smrg      if (STREQ (argv[i], dumpscript_opt))
6010e19dfac4Smrg	{
6011e19dfac4SmrgEOF
60127cea3689Smrg	    case $host in
6013e19dfac4Smrg	      *mingw* | *cygwin* )
6014e19dfac4Smrg		# make stdout use "unix" line endings
6015e19dfac4Smrg		echo "          setmode(1,_O_BINARY);"
6016e19dfac4Smrg		;;
6017e19dfac4Smrg	      esac
601827702724Smrg
6019e19dfac4Smrg	    cat <<"EOF"
6020313a12fdSmrg	  lt_dump_script (stdout);
6021e19dfac4Smrg	  return 0;
6022e19dfac4Smrg	}
60237cea3689Smrg      if (STREQ (argv[i], debug_opt))
6024313a12fdSmrg	{
6025313a12fdSmrg          lt_debug = 1;
6026313a12fdSmrg          continue;
6027313a12fdSmrg	}
60287cea3689Smrg      if (STREQ (argv[i], ltwrapper_option_prefix))
6029313a12fdSmrg        {
6030313a12fdSmrg          /* however, if there is an option in the LTWRAPPER_OPTION_PREFIX
6031313a12fdSmrg             namespace, but it is not one of the ones we know about and
6032313a12fdSmrg             have already dealt with, above (inluding dump-script), then
6033313a12fdSmrg             report an error. Otherwise, targets might begin to believe
6034313a12fdSmrg             they are allowed to use options in the LTWRAPPER_OPTION_PREFIX
6035313a12fdSmrg             namespace. The first time any user complains about this, we'll
6036313a12fdSmrg             need to make LTWRAPPER_OPTION_PREFIX a configure-time option
6037313a12fdSmrg             or a configure.ac-settable value.
6038313a12fdSmrg           */
6039313a12fdSmrg          lt_fatal (__FILE__, __LINE__,
6040313a12fdSmrg		    "unrecognized %s option: '%s'",
6041313a12fdSmrg                    ltwrapper_option_prefix, argv[i]);
6042313a12fdSmrg        }
6043313a12fdSmrg      /* otherwise ... */
6044313a12fdSmrg      newargz[++newargc] = xstrdup (argv[i]);
6045e19dfac4Smrg    }
6046313a12fdSmrg  newargz[++newargc] = NULL;
6047313a12fdSmrg
6048313a12fdSmrgEOF
6049313a12fdSmrg	    cat <<EOF
6050313a12fdSmrg  /* The GNU banner must be the first non-error debug message */
60517cea3689Smrg  lt_debugprintf (__FILE__, __LINE__, "libtool wrapper (GNU $PACKAGE) $VERSION\n");
6052313a12fdSmrgEOF
6053313a12fdSmrg	    cat <<"EOF"
6054313a12fdSmrg  lt_debugprintf (__FILE__, __LINE__, "(main) argv[0]: %s\n", argv[0]);
6055313a12fdSmrg  lt_debugprintf (__FILE__, __LINE__, "(main) program_name: %s\n", program_name);
605627702724Smrg
6057e19dfac4Smrg  tmp_pathspec = find_executable (argv[0]);
6058e19dfac4Smrg  if (tmp_pathspec == NULL)
6059313a12fdSmrg    lt_fatal (__FILE__, __LINE__, "couldn't find %s", argv[0]);
6060313a12fdSmrg  lt_debugprintf (__FILE__, __LINE__,
6061313a12fdSmrg                  "(main) found exe (before symlink chase) at: %s\n",
6062313a12fdSmrg		  tmp_pathspec);
6063e19dfac4Smrg
6064e19dfac4Smrg  actual_cwrapper_path = chase_symlinks (tmp_pathspec);
6065313a12fdSmrg  lt_debugprintf (__FILE__, __LINE__,
6066313a12fdSmrg                  "(main) found exe (after symlink chase) at: %s\n",
6067313a12fdSmrg		  actual_cwrapper_path);
6068e19dfac4Smrg  XFREE (tmp_pathspec);
6069e19dfac4Smrg
6070313a12fdSmrg  actual_cwrapper_name = xstrdup (base_name (actual_cwrapper_path));
6071e19dfac4Smrg  strendzap (actual_cwrapper_path, actual_cwrapper_name);
6072e19dfac4Smrg
6073e19dfac4Smrg  /* wrapper name transforms */
6074e19dfac4Smrg  strendzap (actual_cwrapper_name, ".exe");
6075e19dfac4Smrg  tmp_pathspec = lt_extend_str (actual_cwrapper_name, ".exe", 1);
6076e19dfac4Smrg  XFREE (actual_cwrapper_name);
6077e19dfac4Smrg  actual_cwrapper_name = tmp_pathspec;
6078e19dfac4Smrg  tmp_pathspec = 0;
6079e19dfac4Smrg
6080e19dfac4Smrg  /* target_name transforms -- use actual target program name; might have lt- prefix */
6081e19dfac4Smrg  target_name = xstrdup (base_name (TARGET_PROGRAM_NAME));
6082e19dfac4Smrg  strendzap (target_name, ".exe");
6083e19dfac4Smrg  tmp_pathspec = lt_extend_str (target_name, ".exe", 1);
6084e19dfac4Smrg  XFREE (target_name);
6085e19dfac4Smrg  target_name = tmp_pathspec;
6086e19dfac4Smrg  tmp_pathspec = 0;
6087e19dfac4Smrg
6088313a12fdSmrg  lt_debugprintf (__FILE__, __LINE__,
6089313a12fdSmrg		  "(main) libtool target name: %s\n",
6090313a12fdSmrg		  target_name);
6091e19dfac4SmrgEOF
609227702724Smrg
6093e19dfac4Smrg	    cat <<EOF
6094e19dfac4Smrg  newargz[0] =
6095e19dfac4Smrg    XMALLOC (char, (strlen (actual_cwrapper_path) +
6096e19dfac4Smrg		    strlen ("$objdir") + 1 + strlen (actual_cwrapper_name) + 1));
6097e19dfac4Smrg  strcpy (newargz[0], actual_cwrapper_path);
6098e19dfac4Smrg  strcat (newargz[0], "$objdir");
6099e19dfac4Smrg  strcat (newargz[0], "/");
6100e19dfac4SmrgEOF
610127702724Smrg
6102e19dfac4Smrg	    cat <<"EOF"
6103e19dfac4Smrg  /* stop here, and copy so we don't have to do this twice */
6104e19dfac4Smrg  tmp_pathspec = xstrdup (newargz[0]);
610527702724Smrg
6106e19dfac4Smrg  /* do NOT want the lt- prefix here, so use actual_cwrapper_name */
6107e19dfac4Smrg  strcat (newargz[0], actual_cwrapper_name);
610827702724Smrg
6109e19dfac4Smrg  /* DO want the lt- prefix here if it exists, so use target_name */
6110e19dfac4Smrg  lt_argv_zero = lt_extend_str (tmp_pathspec, target_name, 1);
6111e19dfac4Smrg  XFREE (tmp_pathspec);
6112e19dfac4Smrg  tmp_pathspec = NULL;
6113e19dfac4SmrgEOF
611427702724Smrg
6115e19dfac4Smrg	    case $host_os in
6116e19dfac4Smrg	      mingw*)
6117e19dfac4Smrg	    cat <<"EOF"
6118e19dfac4Smrg  {
6119e19dfac4Smrg    char* p;
6120e19dfac4Smrg    while ((p = strchr (newargz[0], '\\')) != NULL)
6121e19dfac4Smrg      {
6122e19dfac4Smrg	*p = '/';
6123e19dfac4Smrg      }
6124e19dfac4Smrg    while ((p = strchr (lt_argv_zero, '\\')) != NULL)
6125e19dfac4Smrg      {
6126e19dfac4Smrg	*p = '/';
6127e19dfac4Smrg      }
6128e19dfac4Smrg  }
6129e19dfac4SmrgEOF
6130e19dfac4Smrg	    ;;
6131e19dfac4Smrg	    esac
613227702724Smrg
6133e19dfac4Smrg	    cat <<"EOF"
6134e19dfac4Smrg  XFREE (target_name);
6135e19dfac4Smrg  XFREE (actual_cwrapper_path);
6136e19dfac4Smrg  XFREE (actual_cwrapper_name);
613727702724Smrg
6138e19dfac4Smrg  lt_setenv ("BIN_SH", "xpg4"); /* for Tru64 */
6139e19dfac4Smrg  lt_setenv ("DUALCASE", "1");  /* for MSK sh */
6140313a12fdSmrg  /* Update the DLL searchpath.  EXE_PATH_VALUE ($dllsearchpath) must
6141313a12fdSmrg     be prepended before (that is, appear after) LIB_PATH_VALUE ($temp_rpath)
6142313a12fdSmrg     because on Windows, both *_VARNAMEs are PATH but uninstalled
6143313a12fdSmrg     libraries must come first. */
6144e19dfac4Smrg  lt_update_exe_path (EXE_PATH_VARNAME, EXE_PATH_VALUE);
6145313a12fdSmrg  lt_update_lib_path (LIB_PATH_VARNAME, LIB_PATH_VALUE);
614627702724Smrg
6147313a12fdSmrg  lt_debugprintf (__FILE__, __LINE__, "(main) lt_argv_zero: %s\n",
6148313a12fdSmrg		  nonnull (lt_argv_zero));
6149e19dfac4Smrg  for (i = 0; i < newargc; i++)
6150e19dfac4Smrg    {
6151313a12fdSmrg      lt_debugprintf (__FILE__, __LINE__, "(main) newargz[%d]: %s\n",
6152313a12fdSmrg		      i, nonnull (newargz[i]));
6153e19dfac4Smrg    }
615427702724Smrg
6155e19dfac4SmrgEOF
615627702724Smrg
6157e19dfac4Smrg	    case $host_os in
6158e19dfac4Smrg	      mingw*)
6159e19dfac4Smrg		cat <<"EOF"
6160e19dfac4Smrg  /* execv doesn't actually work on mingw as expected on unix */
6161313a12fdSmrg  newargz = prepare_spawn (newargz);
61627cea3689Smrg  rval = (int) _spawnv (_P_WAIT, lt_argv_zero, (const char * const *) newargz);
6163e19dfac4Smrg  if (rval == -1)
6164e19dfac4Smrg    {
6165e19dfac4Smrg      /* failed to start process */
6166313a12fdSmrg      lt_debugprintf (__FILE__, __LINE__,
6167313a12fdSmrg		      "(main) failed to launch target \"%s\": %s\n",
6168313a12fdSmrg		      lt_argv_zero, nonnull (strerror (errno)));
6169e19dfac4Smrg      return 127;
6170e19dfac4Smrg    }
6171e19dfac4Smrg  return rval;
6172e19dfac4SmrgEOF
6173e19dfac4Smrg		;;
6174e19dfac4Smrg	      *)
6175e19dfac4Smrg		cat <<"EOF"
6176e19dfac4Smrg  execv (lt_argv_zero, newargz);
6177e19dfac4Smrg  return rval; /* =127, but avoids unused variable warning */
6178e19dfac4SmrgEOF
6179e19dfac4Smrg		;;
6180e19dfac4Smrg	    esac
618127702724Smrg
6182e19dfac4Smrg	    cat <<"EOF"
6183e19dfac4Smrg}
618427702724Smrg
6185e19dfac4Smrgvoid *
6186e19dfac4Smrgxmalloc (size_t num)
6187e19dfac4Smrg{
6188e19dfac4Smrg  void *p = (void *) malloc (num);
6189e19dfac4Smrg  if (!p)
6190313a12fdSmrg    lt_fatal (__FILE__, __LINE__, "memory exhausted");
619127702724Smrg
6192e19dfac4Smrg  return p;
6193e19dfac4Smrg}
619427702724Smrg
6195e19dfac4Smrgchar *
6196e19dfac4Smrgxstrdup (const char *string)
6197e19dfac4Smrg{
6198e19dfac4Smrg  return string ? strcpy ((char *) xmalloc (strlen (string) + 1),
6199e19dfac4Smrg			  string) : NULL;
6200e19dfac4Smrg}
620127702724Smrg
6202e19dfac4Smrgconst char *
6203e19dfac4Smrgbase_name (const char *name)
6204e19dfac4Smrg{
6205e19dfac4Smrg  const char *base;
620627702724Smrg
62077cea3689Smrg#if defined HAVE_DOS_BASED_FILE_SYSTEM
6208e19dfac4Smrg  /* Skip over the disk name in MSDOS pathnames. */
6209e19dfac4Smrg  if (isalpha ((unsigned char) name[0]) && name[1] == ':')
6210e19dfac4Smrg    name += 2;
6211e19dfac4Smrg#endif
621227702724Smrg
6213e19dfac4Smrg  for (base = name; *name; name++)
6214e19dfac4Smrg    if (IS_DIR_SEPARATOR (*name))
6215e19dfac4Smrg      base = name + 1;
6216e19dfac4Smrg  return base;
6217e19dfac4Smrg}
621827702724Smrg
6219e19dfac4Smrgint
6220e19dfac4Smrgcheck_executable (const char *path)
6221e19dfac4Smrg{
6222e19dfac4Smrg  struct stat st;
622327702724Smrg
6224313a12fdSmrg  lt_debugprintf (__FILE__, __LINE__, "(check_executable): %s\n",
6225313a12fdSmrg                  nonempty (path));
6226e19dfac4Smrg  if ((!path) || (!*path))
6227e19dfac4Smrg    return 0;
622827702724Smrg
6229e19dfac4Smrg  if ((stat (path, &st) >= 0)
6230e19dfac4Smrg      && (st.st_mode & (S_IXUSR | S_IXGRP | S_IXOTH)))
6231e19dfac4Smrg    return 1;
6232e19dfac4Smrg  else
6233e19dfac4Smrg    return 0;
6234e19dfac4Smrg}
623527702724Smrg
6236e19dfac4Smrgint
6237e19dfac4Smrgmake_executable (const char *path)
6238e19dfac4Smrg{
6239e19dfac4Smrg  int rval = 0;
6240e19dfac4Smrg  struct stat st;
624127702724Smrg
6242313a12fdSmrg  lt_debugprintf (__FILE__, __LINE__, "(make_executable): %s\n",
6243313a12fdSmrg                  nonempty (path));
6244e19dfac4Smrg  if ((!path) || (!*path))
6245e19dfac4Smrg    return 0;
624627702724Smrg
6247e19dfac4Smrg  if (stat (path, &st) >= 0)
6248e19dfac4Smrg    {
6249e19dfac4Smrg      rval = chmod (path, st.st_mode | S_IXOTH | S_IXGRP | S_IXUSR);
6250e19dfac4Smrg    }
6251e19dfac4Smrg  return rval;
6252e19dfac4Smrg}
625327702724Smrg
6254e19dfac4Smrg/* Searches for the full path of the wrapper.  Returns
6255e19dfac4Smrg   newly allocated full path name if found, NULL otherwise
6256e19dfac4Smrg   Does not chase symlinks, even on platforms that support them.
6257e19dfac4Smrg*/
6258e19dfac4Smrgchar *
6259e19dfac4Smrgfind_executable (const char *wrapper)
6260e19dfac4Smrg{
6261e19dfac4Smrg  int has_slash = 0;
6262e19dfac4Smrg  const char *p;
6263e19dfac4Smrg  const char *p_next;
6264e19dfac4Smrg  /* static buffer for getcwd */
6265e19dfac4Smrg  char tmp[LT_PATHMAX + 1];
62667cea3689Smrg  size_t tmp_len;
6267e19dfac4Smrg  char *concat_name;
626827702724Smrg
6269313a12fdSmrg  lt_debugprintf (__FILE__, __LINE__, "(find_executable): %s\n",
6270313a12fdSmrg                  nonempty (wrapper));
627127702724Smrg
6272e19dfac4Smrg  if ((wrapper == NULL) || (*wrapper == '\0'))
6273e19dfac4Smrg    return NULL;
627427702724Smrg
6275e19dfac4Smrg  /* Absolute path? */
62767cea3689Smrg#if defined HAVE_DOS_BASED_FILE_SYSTEM
6277e19dfac4Smrg  if (isalpha ((unsigned char) wrapper[0]) && wrapper[1] == ':')
6278e19dfac4Smrg    {
6279e19dfac4Smrg      concat_name = xstrdup (wrapper);
6280e19dfac4Smrg      if (check_executable (concat_name))
6281e19dfac4Smrg	return concat_name;
6282e19dfac4Smrg      XFREE (concat_name);
6283e19dfac4Smrg    }
6284e19dfac4Smrg  else
6285e19dfac4Smrg    {
6286e19dfac4Smrg#endif
6287e19dfac4Smrg      if (IS_DIR_SEPARATOR (wrapper[0]))
6288e19dfac4Smrg	{
6289e19dfac4Smrg	  concat_name = xstrdup (wrapper);
6290e19dfac4Smrg	  if (check_executable (concat_name))
6291e19dfac4Smrg	    return concat_name;
6292e19dfac4Smrg	  XFREE (concat_name);
6293e19dfac4Smrg	}
62947cea3689Smrg#if defined HAVE_DOS_BASED_FILE_SYSTEM
6295e19dfac4Smrg    }
6296e19dfac4Smrg#endif
629727702724Smrg
6298e19dfac4Smrg  for (p = wrapper; *p; p++)
6299e19dfac4Smrg    if (*p == '/')
6300e19dfac4Smrg      {
6301e19dfac4Smrg	has_slash = 1;
6302e19dfac4Smrg	break;
6303e19dfac4Smrg      }
6304e19dfac4Smrg  if (!has_slash)
6305e19dfac4Smrg    {
6306e19dfac4Smrg      /* no slashes; search PATH */
6307e19dfac4Smrg      const char *path = getenv ("PATH");
6308e19dfac4Smrg      if (path != NULL)
6309e19dfac4Smrg	{
6310e19dfac4Smrg	  for (p = path; *p; p = p_next)
6311e19dfac4Smrg	    {
6312e19dfac4Smrg	      const char *q;
6313e19dfac4Smrg	      size_t p_len;
6314e19dfac4Smrg	      for (q = p; *q; q++)
6315e19dfac4Smrg		if (IS_PATH_SEPARATOR (*q))
6316e19dfac4Smrg		  break;
63177cea3689Smrg	      p_len = (size_t) (q - p);
6318e19dfac4Smrg	      p_next = (*q == '\0' ? q : q + 1);
6319e19dfac4Smrg	      if (p_len == 0)
6320e19dfac4Smrg		{
6321e19dfac4Smrg		  /* empty path: current directory */
6322e19dfac4Smrg		  if (getcwd (tmp, LT_PATHMAX) == NULL)
6323313a12fdSmrg		    lt_fatal (__FILE__, __LINE__, "getcwd failed: %s",
6324313a12fdSmrg                              nonnull (strerror (errno)));
6325e19dfac4Smrg		  tmp_len = strlen (tmp);
6326e19dfac4Smrg		  concat_name =
6327e19dfac4Smrg		    XMALLOC (char, tmp_len + 1 + strlen (wrapper) + 1);
6328e19dfac4Smrg		  memcpy (concat_name, tmp, tmp_len);
6329e19dfac4Smrg		  concat_name[tmp_len] = '/';
6330e19dfac4Smrg		  strcpy (concat_name + tmp_len + 1, wrapper);
6331e19dfac4Smrg		}
6332e19dfac4Smrg	      else
6333e19dfac4Smrg		{
6334e19dfac4Smrg		  concat_name =
6335e19dfac4Smrg		    XMALLOC (char, p_len + 1 + strlen (wrapper) + 1);
6336e19dfac4Smrg		  memcpy (concat_name, p, p_len);
6337e19dfac4Smrg		  concat_name[p_len] = '/';
6338e19dfac4Smrg		  strcpy (concat_name + p_len + 1, wrapper);
6339e19dfac4Smrg		}
6340e19dfac4Smrg	      if (check_executable (concat_name))
6341e19dfac4Smrg		return concat_name;
6342e19dfac4Smrg	      XFREE (concat_name);
6343e19dfac4Smrg	    }
6344e19dfac4Smrg	}
6345e19dfac4Smrg      /* not found in PATH; assume curdir */
6346e19dfac4Smrg    }
6347e19dfac4Smrg  /* Relative path | not found in path: prepend cwd */
6348e19dfac4Smrg  if (getcwd (tmp, LT_PATHMAX) == NULL)
6349313a12fdSmrg    lt_fatal (__FILE__, __LINE__, "getcwd failed: %s",
6350313a12fdSmrg              nonnull (strerror (errno)));
6351e19dfac4Smrg  tmp_len = strlen (tmp);
6352e19dfac4Smrg  concat_name = XMALLOC (char, tmp_len + 1 + strlen (wrapper) + 1);
6353e19dfac4Smrg  memcpy (concat_name, tmp, tmp_len);
6354e19dfac4Smrg  concat_name[tmp_len] = '/';
6355e19dfac4Smrg  strcpy (concat_name + tmp_len + 1, wrapper);
635627702724Smrg
6357e19dfac4Smrg  if (check_executable (concat_name))
6358e19dfac4Smrg    return concat_name;
6359e19dfac4Smrg  XFREE (concat_name);
6360e19dfac4Smrg  return NULL;
6361e19dfac4Smrg}
636227702724Smrg
6363e19dfac4Smrgchar *
6364e19dfac4Smrgchase_symlinks (const char *pathspec)
6365e19dfac4Smrg{
6366e19dfac4Smrg#ifndef S_ISLNK
6367e19dfac4Smrg  return xstrdup (pathspec);
6368e19dfac4Smrg#else
6369e19dfac4Smrg  char buf[LT_PATHMAX];
6370e19dfac4Smrg  struct stat s;
6371e19dfac4Smrg  char *tmp_pathspec = xstrdup (pathspec);
6372e19dfac4Smrg  char *p;
6373e19dfac4Smrg  int has_symlinks = 0;
6374e19dfac4Smrg  while (strlen (tmp_pathspec) && !has_symlinks)
6375e19dfac4Smrg    {
6376313a12fdSmrg      lt_debugprintf (__FILE__, __LINE__,
6377313a12fdSmrg		      "checking path component for symlinks: %s\n",
6378313a12fdSmrg		      tmp_pathspec);
6379e19dfac4Smrg      if (lstat (tmp_pathspec, &s) == 0)
6380e19dfac4Smrg	{
6381e19dfac4Smrg	  if (S_ISLNK (s.st_mode) != 0)
6382e19dfac4Smrg	    {
6383e19dfac4Smrg	      has_symlinks = 1;
6384e19dfac4Smrg	      break;
6385e19dfac4Smrg	    }
638627702724Smrg
6387e19dfac4Smrg	  /* search backwards for last DIR_SEPARATOR */
6388e19dfac4Smrg	  p = tmp_pathspec + strlen (tmp_pathspec) - 1;
6389e19dfac4Smrg	  while ((p > tmp_pathspec) && (!IS_DIR_SEPARATOR (*p)))
6390e19dfac4Smrg	    p--;
6391e19dfac4Smrg	  if ((p == tmp_pathspec) && (!IS_DIR_SEPARATOR (*p)))
6392e19dfac4Smrg	    {
6393e19dfac4Smrg	      /* no more DIR_SEPARATORS left */
6394e19dfac4Smrg	      break;
6395e19dfac4Smrg	    }
6396e19dfac4Smrg	  *p = '\0';
6397e19dfac4Smrg	}
6398e19dfac4Smrg      else
6399e19dfac4Smrg	{
6400313a12fdSmrg	  lt_fatal (__FILE__, __LINE__,
6401313a12fdSmrg		    "error accessing file \"%s\": %s",
6402313a12fdSmrg		    tmp_pathspec, nonnull (strerror (errno)));
6403e19dfac4Smrg	}
6404e19dfac4Smrg    }
6405e19dfac4Smrg  XFREE (tmp_pathspec);
640627702724Smrg
6407e19dfac4Smrg  if (!has_symlinks)
6408e19dfac4Smrg    {
6409e19dfac4Smrg      return xstrdup (pathspec);
6410e19dfac4Smrg    }
641127702724Smrg
6412e19dfac4Smrg  tmp_pathspec = realpath (pathspec, buf);
6413e19dfac4Smrg  if (tmp_pathspec == 0)
6414e19dfac4Smrg    {
6415313a12fdSmrg      lt_fatal (__FILE__, __LINE__,
6416313a12fdSmrg		"could not follow symlinks for %s", pathspec);
6417e19dfac4Smrg    }
6418e19dfac4Smrg  return xstrdup (tmp_pathspec);
6419e19dfac4Smrg#endif
6420e19dfac4Smrg}
642127702724Smrg
6422e19dfac4Smrgchar *
6423e19dfac4Smrgstrendzap (char *str, const char *pat)
6424e19dfac4Smrg{
6425e19dfac4Smrg  size_t len, patlen;
642627702724Smrg
6427e19dfac4Smrg  assert (str != NULL);
6428e19dfac4Smrg  assert (pat != NULL);
642927702724Smrg
6430e19dfac4Smrg  len = strlen (str);
6431e19dfac4Smrg  patlen = strlen (pat);
643227702724Smrg
6433e19dfac4Smrg  if (patlen <= len)
6434e19dfac4Smrg    {
6435e19dfac4Smrg      str += len - patlen;
64367cea3689Smrg      if (STREQ (str, pat))
6437e19dfac4Smrg	*str = '\0';
6438e19dfac4Smrg    }
6439e19dfac4Smrg  return str;
6440e19dfac4Smrg}
644127702724Smrg
6442313a12fdSmrgvoid
6443313a12fdSmrglt_debugprintf (const char *file, int line, const char *fmt, ...)
6444313a12fdSmrg{
6445313a12fdSmrg  va_list args;
6446313a12fdSmrg  if (lt_debug)
6447313a12fdSmrg    {
6448313a12fdSmrg      (void) fprintf (stderr, "%s:%s:%d: ", program_name, file, line);
6449313a12fdSmrg      va_start (args, fmt);
6450313a12fdSmrg      (void) vfprintf (stderr, fmt, args);
6451313a12fdSmrg      va_end (args);
6452313a12fdSmrg    }
6453313a12fdSmrg}
6454313a12fdSmrg
6455e19dfac4Smrgstatic void
6456313a12fdSmrglt_error_core (int exit_status, const char *file,
6457313a12fdSmrg	       int line, const char *mode,
6458e19dfac4Smrg	       const char *message, va_list ap)
6459e19dfac4Smrg{
6460313a12fdSmrg  fprintf (stderr, "%s:%s:%d: %s: ", program_name, file, line, mode);
6461e19dfac4Smrg  vfprintf (stderr, message, ap);
6462e19dfac4Smrg  fprintf (stderr, ".\n");
646327702724Smrg
6464e19dfac4Smrg  if (exit_status >= 0)
6465e19dfac4Smrg    exit (exit_status);
6466e19dfac4Smrg}
646727702724Smrg
6468e19dfac4Smrgvoid
6469313a12fdSmrglt_fatal (const char *file, int line, const char *message, ...)
6470e19dfac4Smrg{
6471e19dfac4Smrg  va_list ap;
6472e19dfac4Smrg  va_start (ap, message);
6473313a12fdSmrg  lt_error_core (EXIT_FAILURE, file, line, "FATAL", message, ap);
6474e19dfac4Smrg  va_end (ap);
6475e19dfac4Smrg}
647627702724Smrg
6477313a12fdSmrgstatic const char *
6478313a12fdSmrgnonnull (const char *s)
6479313a12fdSmrg{
6480313a12fdSmrg  return s ? s : "(null)";
6481313a12fdSmrg}
6482313a12fdSmrg
6483313a12fdSmrgstatic const char *
6484313a12fdSmrgnonempty (const char *s)
6485313a12fdSmrg{
6486313a12fdSmrg  return (s && !*s) ? "(empty)" : nonnull (s);
6487313a12fdSmrg}
6488313a12fdSmrg
6489e19dfac4Smrgvoid
6490e19dfac4Smrglt_setenv (const char *name, const char *value)
6491e19dfac4Smrg{
6492313a12fdSmrg  lt_debugprintf (__FILE__, __LINE__,
6493313a12fdSmrg		  "(lt_setenv) setting '%s' to '%s'\n",
6494313a12fdSmrg                  nonnull (name), nonnull (value));
6495e19dfac4Smrg  {
6496e19dfac4Smrg#ifdef HAVE_SETENV
6497e19dfac4Smrg    /* always make a copy, for consistency with !HAVE_SETENV */
6498e19dfac4Smrg    char *str = xstrdup (value);
6499e19dfac4Smrg    setenv (name, str, 1);
6500e19dfac4Smrg#else
65017cea3689Smrg    size_t len = strlen (name) + 1 + strlen (value) + 1;
6502e19dfac4Smrg    char *str = XMALLOC (char, len);
6503e19dfac4Smrg    sprintf (str, "%s=%s", name, value);
6504e19dfac4Smrg    if (putenv (str) != EXIT_SUCCESS)
6505e19dfac4Smrg      {
6506e19dfac4Smrg        XFREE (str);
6507e19dfac4Smrg      }
6508e19dfac4Smrg#endif
6509e19dfac4Smrg  }
6510e19dfac4Smrg}
651127702724Smrg
6512e19dfac4Smrgchar *
6513e19dfac4Smrglt_extend_str (const char *orig_value, const char *add, int to_end)
6514e19dfac4Smrg{
6515e19dfac4Smrg  char *new_value;
6516e19dfac4Smrg  if (orig_value && *orig_value)
6517e19dfac4Smrg    {
65187cea3689Smrg      size_t orig_value_len = strlen (orig_value);
65197cea3689Smrg      size_t add_len = strlen (add);
6520e19dfac4Smrg      new_value = XMALLOC (char, add_len + orig_value_len + 1);
6521e19dfac4Smrg      if (to_end)
6522e19dfac4Smrg        {
6523e19dfac4Smrg          strcpy (new_value, orig_value);
6524e19dfac4Smrg          strcpy (new_value + orig_value_len, add);
6525e19dfac4Smrg        }
6526e19dfac4Smrg      else
6527e19dfac4Smrg        {
6528e19dfac4Smrg          strcpy (new_value, add);
6529e19dfac4Smrg          strcpy (new_value + add_len, orig_value);
6530e19dfac4Smrg        }
6531e19dfac4Smrg    }
6532e19dfac4Smrg  else
6533e19dfac4Smrg    {
6534e19dfac4Smrg      new_value = xstrdup (add);
6535e19dfac4Smrg    }
6536e19dfac4Smrg  return new_value;
6537e19dfac4Smrg}
653827702724Smrg
6539e19dfac4Smrgvoid
6540e19dfac4Smrglt_update_exe_path (const char *name, const char *value)
6541e19dfac4Smrg{
6542313a12fdSmrg  lt_debugprintf (__FILE__, __LINE__,
6543313a12fdSmrg		  "(lt_update_exe_path) modifying '%s' by prepending '%s'\n",
6544313a12fdSmrg                  nonnull (name), nonnull (value));
654527702724Smrg
6546e19dfac4Smrg  if (name && *name && value && *value)
6547e19dfac4Smrg    {
6548e19dfac4Smrg      char *new_value = lt_extend_str (getenv (name), value, 0);
6549e19dfac4Smrg      /* some systems can't cope with a ':'-terminated path #' */
65507cea3689Smrg      size_t len = strlen (new_value);
65517cea3689Smrg      while ((len > 0) && IS_PATH_SEPARATOR (new_value[len-1]))
6552e19dfac4Smrg        {
65537cea3689Smrg          new_value[--len] = '\0';
6554e19dfac4Smrg        }
6555e19dfac4Smrg      lt_setenv (name, new_value);
6556e19dfac4Smrg      XFREE (new_value);
6557e19dfac4Smrg    }
6558e19dfac4Smrg}
655927702724Smrg
6560e19dfac4Smrgvoid
6561e19dfac4Smrglt_update_lib_path (const char *name, const char *value)
6562e19dfac4Smrg{
6563313a12fdSmrg  lt_debugprintf (__FILE__, __LINE__,
6564313a12fdSmrg		  "(lt_update_lib_path) modifying '%s' by prepending '%s'\n",
6565313a12fdSmrg                  nonnull (name), nonnull (value));
656627702724Smrg
6567e19dfac4Smrg  if (name && *name && value && *value)
6568e19dfac4Smrg    {
6569e19dfac4Smrg      char *new_value = lt_extend_str (getenv (name), value, 0);
6570e19dfac4Smrg      lt_setenv (name, new_value);
6571e19dfac4Smrg      XFREE (new_value);
6572e19dfac4Smrg    }
6573e19dfac4Smrg}
657427702724Smrg
6575313a12fdSmrgEOF
6576313a12fdSmrg	    case $host_os in
6577313a12fdSmrg	      mingw*)
6578313a12fdSmrg		cat <<"EOF"
6579313a12fdSmrg
6580313a12fdSmrg/* Prepares an argument vector before calling spawn().
6581313a12fdSmrg   Note that spawn() does not by itself call the command interpreter
6582313a12fdSmrg     (getenv ("COMSPEC") != NULL ? getenv ("COMSPEC") :
6583313a12fdSmrg      ({ OSVERSIONINFO v; v.dwOSVersionInfoSize = sizeof(OSVERSIONINFO);
6584313a12fdSmrg         GetVersionEx(&v);
6585313a12fdSmrg         v.dwPlatformId == VER_PLATFORM_WIN32_NT;
6586313a12fdSmrg      }) ? "cmd.exe" : "command.com").
6587313a12fdSmrg   Instead it simply concatenates the arguments, separated by ' ', and calls
6588313a12fdSmrg   CreateProcess().  We must quote the arguments since Win32 CreateProcess()
6589313a12fdSmrg   interprets characters like ' ', '\t', '\\', '"' (but not '<' and '>') in a
6590313a12fdSmrg   special way:
6591313a12fdSmrg   - Space and tab are interpreted as delimiters. They are not treated as
6592313a12fdSmrg     delimiters if they are surrounded by double quotes: "...".
6593313a12fdSmrg   - Unescaped double quotes are removed from the input. Their only effect is
6594313a12fdSmrg     that within double quotes, space and tab are treated like normal
6595313a12fdSmrg     characters.
6596313a12fdSmrg   - Backslashes not followed by double quotes are not special.
6597313a12fdSmrg   - But 2*n+1 backslashes followed by a double quote become
6598313a12fdSmrg     n backslashes followed by a double quote (n >= 0):
6599313a12fdSmrg       \" -> "
6600313a12fdSmrg       \\\" -> \"
6601313a12fdSmrg       \\\\\" -> \\"
6602313a12fdSmrg */
6603313a12fdSmrg#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"
6604313a12fdSmrg#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"
6605313a12fdSmrgchar **
6606313a12fdSmrgprepare_spawn (char **argv)
6607313a12fdSmrg{
6608313a12fdSmrg  size_t argc;
6609313a12fdSmrg  char **new_argv;
6610313a12fdSmrg  size_t i;
6611313a12fdSmrg
6612313a12fdSmrg  /* Count number of arguments.  */
6613313a12fdSmrg  for (argc = 0; argv[argc] != NULL; argc++)
6614313a12fdSmrg    ;
6615313a12fdSmrg
6616313a12fdSmrg  /* Allocate new argument vector.  */
6617313a12fdSmrg  new_argv = XMALLOC (char *, argc + 1);
6618313a12fdSmrg
6619313a12fdSmrg  /* Put quoted arguments into the new argument vector.  */
6620313a12fdSmrg  for (i = 0; i < argc; i++)
6621313a12fdSmrg    {
6622313a12fdSmrg      const char *string = argv[i];
6623313a12fdSmrg
6624313a12fdSmrg      if (string[0] == '\0')
6625313a12fdSmrg	new_argv[i] = xstrdup ("\"\"");
6626313a12fdSmrg      else if (strpbrk (string, SHELL_SPECIAL_CHARS) != NULL)
6627313a12fdSmrg	{
6628313a12fdSmrg	  int quote_around = (strpbrk (string, SHELL_SPACE_CHARS) != NULL);
6629313a12fdSmrg	  size_t length;
6630313a12fdSmrg	  unsigned int backslashes;
6631313a12fdSmrg	  const char *s;
6632313a12fdSmrg	  char *quoted_string;
6633313a12fdSmrg	  char *p;
6634313a12fdSmrg
6635313a12fdSmrg	  length = 0;
6636313a12fdSmrg	  backslashes = 0;
6637313a12fdSmrg	  if (quote_around)
6638313a12fdSmrg	    length++;
6639313a12fdSmrg	  for (s = string; *s != '\0'; s++)
6640313a12fdSmrg	    {
6641313a12fdSmrg	      char c = *s;
6642313a12fdSmrg	      if (c == '"')
6643313a12fdSmrg		length += backslashes + 1;
6644313a12fdSmrg	      length++;
6645313a12fdSmrg	      if (c == '\\')
6646313a12fdSmrg		backslashes++;
6647313a12fdSmrg	      else
6648313a12fdSmrg		backslashes = 0;
6649313a12fdSmrg	    }
6650313a12fdSmrg	  if (quote_around)
6651313a12fdSmrg	    length += backslashes + 1;
6652313a12fdSmrg
6653313a12fdSmrg	  quoted_string = XMALLOC (char, length + 1);
6654313a12fdSmrg
6655313a12fdSmrg	  p = quoted_string;
6656313a12fdSmrg	  backslashes = 0;
6657313a12fdSmrg	  if (quote_around)
6658313a12fdSmrg	    *p++ = '"';
6659313a12fdSmrg	  for (s = string; *s != '\0'; s++)
6660313a12fdSmrg	    {
6661313a12fdSmrg	      char c = *s;
6662313a12fdSmrg	      if (c == '"')
6663313a12fdSmrg		{
6664313a12fdSmrg		  unsigned int j;
6665313a12fdSmrg		  for (j = backslashes + 1; j > 0; j--)
6666313a12fdSmrg		    *p++ = '\\';
6667313a12fdSmrg		}
6668313a12fdSmrg	      *p++ = c;
6669313a12fdSmrg	      if (c == '\\')
6670313a12fdSmrg		backslashes++;
6671313a12fdSmrg	      else
6672313a12fdSmrg		backslashes = 0;
6673313a12fdSmrg	    }
6674313a12fdSmrg	  if (quote_around)
6675313a12fdSmrg	    {
6676313a12fdSmrg	      unsigned int j;
6677313a12fdSmrg	      for (j = backslashes; j > 0; j--)
6678313a12fdSmrg		*p++ = '\\';
6679313a12fdSmrg	      *p++ = '"';
6680313a12fdSmrg	    }
6681313a12fdSmrg	  *p = '\0';
6682313a12fdSmrg
6683313a12fdSmrg	  new_argv[i] = quoted_string;
6684313a12fdSmrg	}
6685313a12fdSmrg      else
6686313a12fdSmrg	new_argv[i] = (char *) string;
6687313a12fdSmrg    }
6688313a12fdSmrg  new_argv[argc] = NULL;
6689313a12fdSmrg
6690313a12fdSmrg  return new_argv;
6691313a12fdSmrg}
6692313a12fdSmrgEOF
6693313a12fdSmrg		;;
6694313a12fdSmrg	    esac
669527702724Smrg
6696313a12fdSmrg            cat <<"EOF"
6697313a12fdSmrgvoid lt_dump_script (FILE* f)
6698313a12fdSmrg{
6699313a12fdSmrgEOF
6700313a12fdSmrg	    func_emit_wrapper yes |
6701313a12fdSmrg	      $SED -n -e '
6702313a12fdSmrgs/^\(.\{79\}\)\(..*\)/\1\
6703313a12fdSmrg\2/
6704313a12fdSmrgh
6705313a12fdSmrgs/\([\\"]\)/\\\1/g
6706313a12fdSmrgs/$/\\n/
6707313a12fdSmrgs/\([^\n]*\).*/  fputs ("\1", f);/p
6708313a12fdSmrgg
6709313a12fdSmrgD'
6710313a12fdSmrg            cat <<"EOF"
6711313a12fdSmrg}
6712e19dfac4SmrgEOF
6713e19dfac4Smrg}
6714e19dfac4Smrg# end: func_emit_cwrapperexe_src
671527702724Smrg
6716313a12fdSmrg# func_win32_import_lib_p ARG
6717313a12fdSmrg# True if ARG is an import lib, as indicated by $file_magic_cmd
6718313a12fdSmrgfunc_win32_import_lib_p ()
6719313a12fdSmrg{
67207cea3689Smrg    $debug_cmd
67217cea3689Smrg
6722313a12fdSmrg    case `eval $file_magic_cmd \"\$1\" 2>/dev/null | $SED -e 10q` in
6723313a12fdSmrg    *import*) : ;;
6724313a12fdSmrg    *) false ;;
6725313a12fdSmrg    esac
6726313a12fdSmrg}
6727313a12fdSmrg
67287cea3689Smrg# func_suncc_cstd_abi
67297cea3689Smrg# !!ONLY CALL THIS FOR SUN CC AFTER $compile_command IS FULLY EXPANDED!!
67307cea3689Smrg# Several compiler flags select an ABI that is incompatible with the
67317cea3689Smrg# Cstd library. Avoid specifying it if any are in CXXFLAGS.
67327cea3689Smrgfunc_suncc_cstd_abi ()
67337cea3689Smrg{
67347cea3689Smrg    $debug_cmd
67357cea3689Smrg
67367cea3689Smrg    case " $compile_command " in
67377cea3689Smrg    *" -compat=g "*|*\ -std=c++[0-9][0-9]\ *|*" -library=stdcxx4 "*|*" -library=stlport4 "*)
67387cea3689Smrg      suncc_use_cstd_abi=no
67397cea3689Smrg      ;;
67407cea3689Smrg    *)
67417cea3689Smrg      suncc_use_cstd_abi=yes
67427cea3689Smrg      ;;
67437cea3689Smrg    esac
67447cea3689Smrg}
67457cea3689Smrg
6746e19dfac4Smrg# func_mode_link arg...
6747e19dfac4Smrgfunc_mode_link ()
6748e19dfac4Smrg{
67497cea3689Smrg    $debug_cmd
67507cea3689Smrg
6751e19dfac4Smrg    case $host in
6752e19dfac4Smrg    *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-cegcc*)
6753e19dfac4Smrg      # It is impossible to link a dll without this setting, and
6754e19dfac4Smrg      # we shouldn't force the makefile maintainer to figure out
67557cea3689Smrg      # what system we are compiling for in order to pass an extra
6756e19dfac4Smrg      # flag for every libtool invocation.
6757e19dfac4Smrg      # allow_undefined=no
675827702724Smrg
6759e19dfac4Smrg      # FIXME: Unfortunately, there are problems with the above when trying
67607cea3689Smrg      # to make a dll that has undefined symbols, in which case not
6761e19dfac4Smrg      # even a static library is built.  For now, we need to specify
6762e19dfac4Smrg      # -no-undefined on the libtool link line when we can be certain
6763e19dfac4Smrg      # that all symbols are satisfied, otherwise we get a static library.
6764e19dfac4Smrg      allow_undefined=yes
6765e19dfac4Smrg      ;;
6766e19dfac4Smrg    *)
6767e19dfac4Smrg      allow_undefined=yes
6768e19dfac4Smrg      ;;
6769e19dfac4Smrg    esac
6770e19dfac4Smrg    libtool_args=$nonopt
6771e19dfac4Smrg    base_compile="$nonopt $@"
6772e19dfac4Smrg    compile_command=$nonopt
6773e19dfac4Smrg    finalize_command=$nonopt
677427702724Smrg
6775e19dfac4Smrg    compile_rpath=
6776e19dfac4Smrg    finalize_rpath=
6777e19dfac4Smrg    compile_shlibpath=
6778e19dfac4Smrg    finalize_shlibpath=
6779e19dfac4Smrg    convenience=
6780e19dfac4Smrg    old_convenience=
6781e19dfac4Smrg    deplibs=
6782e19dfac4Smrg    old_deplibs=
6783e19dfac4Smrg    compiler_flags=
6784e19dfac4Smrg    linker_flags=
6785e19dfac4Smrg    dllsearchpath=
6786e19dfac4Smrg    lib_search_path=`pwd`
6787e19dfac4Smrg    inst_prefix_dir=
6788e19dfac4Smrg    new_inherited_linker_flags=
678927702724Smrg
6790e19dfac4Smrg    avoid_version=no
6791313a12fdSmrg    bindir=
6792e19dfac4Smrg    dlfiles=
6793e19dfac4Smrg    dlprefiles=
6794e19dfac4Smrg    dlself=no
6795e19dfac4Smrg    export_dynamic=no
6796e19dfac4Smrg    export_symbols=
6797e19dfac4Smrg    export_symbols_regex=
6798e19dfac4Smrg    generated=
6799e19dfac4Smrg    libobjs=
6800e19dfac4Smrg    ltlibs=
6801e19dfac4Smrg    module=no
6802e19dfac4Smrg    no_install=no
6803e19dfac4Smrg    objs=
68047cea3689Smrg    os2dllname=
6805e19dfac4Smrg    non_pic_objects=
6806e19dfac4Smrg    precious_files_regex=
6807e19dfac4Smrg    prefer_static_libs=no
68087cea3689Smrg    preload=false
6809e19dfac4Smrg    prev=
6810e19dfac4Smrg    prevarg=
6811e19dfac4Smrg    release=
6812e19dfac4Smrg    rpath=
6813e19dfac4Smrg    xrpath=
6814e19dfac4Smrg    perm_rpath=
6815e19dfac4Smrg    temp_rpath=
6816e19dfac4Smrg    thread_safe=no
6817e19dfac4Smrg    vinfo=
6818e19dfac4Smrg    vinfo_number=no
6819e19dfac4Smrg    weak_libs=
68207cea3689Smrg    single_module=$wl-single_module
6821e19dfac4Smrg    func_infer_tag $base_compile
682227702724Smrg
6823e19dfac4Smrg    # We need to know -static, to get the right output filenames.
6824e19dfac4Smrg    for arg
6825e19dfac4Smrg    do
6826e19dfac4Smrg      case $arg in
6827e19dfac4Smrg      -shared)
68287cea3689Smrg	test yes != "$build_libtool_libs" \
68297cea3689Smrg	  && func_fatal_configuration "cannot build a shared library"
6830e19dfac4Smrg	build_old_libs=no
6831e19dfac4Smrg	break
6832e19dfac4Smrg	;;
6833e19dfac4Smrg      -all-static | -static | -static-libtool-libs)
6834e19dfac4Smrg	case $arg in
6835e19dfac4Smrg	-all-static)
68367cea3689Smrg	  if test yes = "$build_libtool_libs" && test -z "$link_static_flag"; then
6837e19dfac4Smrg	    func_warning "complete static linking is impossible in this configuration"
683827702724Smrg	  fi
6839e19dfac4Smrg	  if test -n "$link_static_flag"; then
6840e19dfac4Smrg	    dlopen_self=$dlopen_self_static
684127702724Smrg	  fi
6842e19dfac4Smrg	  prefer_static_libs=yes
684327702724Smrg	  ;;
6844e19dfac4Smrg	-static)
6845e19dfac4Smrg	  if test -z "$pic_flag" && test -n "$link_static_flag"; then
6846e19dfac4Smrg	    dlopen_self=$dlopen_self_static
6847e19dfac4Smrg	  fi
6848e19dfac4Smrg	  prefer_static_libs=built
6849e19dfac4Smrg	  ;;
6850e19dfac4Smrg	-static-libtool-libs)
6851e19dfac4Smrg	  if test -z "$pic_flag" && test -n "$link_static_flag"; then
6852e19dfac4Smrg	    dlopen_self=$dlopen_self_static
6853e19dfac4Smrg	  fi
6854e19dfac4Smrg	  prefer_static_libs=yes
685527702724Smrg	  ;;
685627702724Smrg	esac
6857e19dfac4Smrg	build_libtool_libs=no
6858e19dfac4Smrg	build_old_libs=yes
6859e19dfac4Smrg	break
6860e19dfac4Smrg	;;
6861e19dfac4Smrg      esac
6862e19dfac4Smrg    done
686327702724Smrg
6864e19dfac4Smrg    # See if our shared archives depend on static archives.
6865e19dfac4Smrg    test -n "$old_archive_from_new_cmds" && build_old_libs=yes
686627702724Smrg
6867e19dfac4Smrg    # Go through the arguments, transforming them on the way.
6868e19dfac4Smrg    while test "$#" -gt 0; do
68697cea3689Smrg      arg=$1
6870e19dfac4Smrg      shift
687195b7a5c8Smrg      func_quote_arg pretty,unquoted "$arg"
687295b7a5c8Smrg      qarg=$func_quote_arg_unquoted_result
687395b7a5c8Smrg      func_append libtool_args " $func_quote_arg_result"
687427702724Smrg
6875e19dfac4Smrg      # If the previous option needs an argument, assign it.
6876e19dfac4Smrg      if test -n "$prev"; then
6877e19dfac4Smrg	case $prev in
6878e19dfac4Smrg	output)
6879e19dfac4Smrg	  func_append compile_command " @OUTPUT@"
6880e19dfac4Smrg	  func_append finalize_command " @OUTPUT@"
6881e19dfac4Smrg	  ;;
6882e19dfac4Smrg	esac
688327702724Smrg
6884e19dfac4Smrg	case $prev in
6885313a12fdSmrg	bindir)
68867cea3689Smrg	  bindir=$arg
6887313a12fdSmrg	  prev=
6888313a12fdSmrg	  continue
6889313a12fdSmrg	  ;;
6890e19dfac4Smrg	dlfiles|dlprefiles)
68917cea3689Smrg	  $preload || {
6892e19dfac4Smrg	    # Add the symbol object into the linking commands.
6893e19dfac4Smrg	    func_append compile_command " @SYMFILE@"
6894e19dfac4Smrg	    func_append finalize_command " @SYMFILE@"
68957cea3689Smrg	    preload=:
68967cea3689Smrg	  }
6897e19dfac4Smrg	  case $arg in
6898e19dfac4Smrg	  *.la | *.lo) ;;  # We handle these cases below.
6899e19dfac4Smrg	  force)
69007cea3689Smrg	    if test no = "$dlself"; then
6901e19dfac4Smrg	      dlself=needless
6902e19dfac4Smrg	      export_dynamic=yes
6903e19dfac4Smrg	    fi
6904e19dfac4Smrg	    prev=
6905e19dfac4Smrg	    continue
6906e19dfac4Smrg	    ;;
6907e19dfac4Smrg	  self)
69087cea3689Smrg	    if test dlprefiles = "$prev"; then
6909e19dfac4Smrg	      dlself=yes
69107cea3689Smrg	    elif test dlfiles = "$prev" && test yes != "$dlopen_self"; then
6911e19dfac4Smrg	      dlself=yes
6912e19dfac4Smrg	    else
6913e19dfac4Smrg	      dlself=needless
6914e19dfac4Smrg	      export_dynamic=yes
6915e19dfac4Smrg	    fi
6916e19dfac4Smrg	    prev=
6917e19dfac4Smrg	    continue
691827702724Smrg	    ;;
691927702724Smrg	  *)
69207cea3689Smrg	    if test dlfiles = "$prev"; then
6921313a12fdSmrg	      func_append dlfiles " $arg"
6922e19dfac4Smrg	    else
6923313a12fdSmrg	      func_append dlprefiles " $arg"
6924e19dfac4Smrg	    fi
6925e19dfac4Smrg	    prev=
6926e19dfac4Smrg	    continue
692727702724Smrg	    ;;
692827702724Smrg	  esac
6929e19dfac4Smrg	  ;;
6930e19dfac4Smrg	expsyms)
69317cea3689Smrg	  export_symbols=$arg
6932e19dfac4Smrg	  test -f "$arg" \
69337cea3689Smrg	    || func_fatal_error "symbol file '$arg' does not exist"
6934e19dfac4Smrg	  prev=
6935e19dfac4Smrg	  continue
6936e19dfac4Smrg	  ;;
6937e19dfac4Smrg	expsyms_regex)
69387cea3689Smrg	  export_symbols_regex=$arg
6939e19dfac4Smrg	  prev=
6940e19dfac4Smrg	  continue
6941e19dfac4Smrg	  ;;
6942e19dfac4Smrg	framework)
6943e19dfac4Smrg	  case $host in
6944e19dfac4Smrg	    *-*-darwin*)
6945e19dfac4Smrg	      case "$deplibs " in
6946e19dfac4Smrg		*" $qarg.ltframework "*) ;;
6947313a12fdSmrg		*) func_append deplibs " $qarg.ltframework" # this is fixed later
6948e19dfac4Smrg		   ;;
6949e19dfac4Smrg	      esac
6950e19dfac4Smrg	      ;;
6951e19dfac4Smrg	  esac
6952e19dfac4Smrg	  prev=
6953e19dfac4Smrg	  continue
6954e19dfac4Smrg	  ;;
6955e19dfac4Smrg	inst_prefix)
69567cea3689Smrg	  inst_prefix_dir=$arg
69577cea3689Smrg	  prev=
69587cea3689Smrg	  continue
69597cea3689Smrg	  ;;
69607cea3689Smrg	mllvm)
69617cea3689Smrg	  # Clang does not use LLVM to link, so we can simply discard any
69627cea3689Smrg	  # '-mllvm $arg' options when doing the link step.
6963e19dfac4Smrg	  prev=
6964e19dfac4Smrg	  continue
6965e19dfac4Smrg	  ;;
6966e19dfac4Smrg	objectlist)
6967e19dfac4Smrg	  if test -f "$arg"; then
6968e19dfac4Smrg	    save_arg=$arg
6969e19dfac4Smrg	    moreargs=
6970e19dfac4Smrg	    for fil in `cat "$save_arg"`
6971e19dfac4Smrg	    do
6972313a12fdSmrg#	      func_append moreargs " $fil"
6973e19dfac4Smrg	      arg=$fil
6974e19dfac4Smrg	      # A libtool-controlled object.
697527702724Smrg
6976e19dfac4Smrg	      # Check to see that this really is a libtool object.
6977e19dfac4Smrg	      if func_lalib_unsafe_p "$arg"; then
6978e19dfac4Smrg		pic_object=
6979e19dfac4Smrg		non_pic_object=
698027702724Smrg
6981e19dfac4Smrg		# Read the .lo file
6982e19dfac4Smrg		func_source "$arg"
698327702724Smrg
6984e19dfac4Smrg		if test -z "$pic_object" ||
6985e19dfac4Smrg		   test -z "$non_pic_object" ||
69867cea3689Smrg		   test none = "$pic_object" &&
69877cea3689Smrg		   test none = "$non_pic_object"; then
69887cea3689Smrg		  func_fatal_error "cannot find name of object for '$arg'"
6989e19dfac4Smrg		fi
699027702724Smrg
6991e19dfac4Smrg		# Extract subdirectory from the argument.
6992e19dfac4Smrg		func_dirname "$arg" "/" ""
69937cea3689Smrg		xdir=$func_dirname_result
699427702724Smrg
69957cea3689Smrg		if test none != "$pic_object"; then
6996e19dfac4Smrg		  # Prepend the subdirectory the object is found in.
69977cea3689Smrg		  pic_object=$xdir$pic_object
699827702724Smrg
69997cea3689Smrg		  if test dlfiles = "$prev"; then
70007cea3689Smrg		    if test yes = "$build_libtool_libs" && test yes = "$dlopen_support"; then
7001313a12fdSmrg		      func_append dlfiles " $pic_object"
7002e19dfac4Smrg		      prev=
7003e19dfac4Smrg		      continue
7004e19dfac4Smrg		    else
7005e19dfac4Smrg		      # If libtool objects are unsupported, then we need to preload.
7006e19dfac4Smrg		      prev=dlprefiles
7007e19dfac4Smrg		    fi
7008e19dfac4Smrg		  fi
700927702724Smrg
7010e19dfac4Smrg		  # CHECK ME:  I think I busted this.  -Ossama
70117cea3689Smrg		  if test dlprefiles = "$prev"; then
7012e19dfac4Smrg		    # Preload the old-style object.
7013313a12fdSmrg		    func_append dlprefiles " $pic_object"
7014e19dfac4Smrg		    prev=
7015e19dfac4Smrg		  fi
701627702724Smrg
7017e19dfac4Smrg		  # A PIC object.
7018e19dfac4Smrg		  func_append libobjs " $pic_object"
70197cea3689Smrg		  arg=$pic_object
7020e19dfac4Smrg		fi
702127702724Smrg
7022e19dfac4Smrg		# Non-PIC object.
70237cea3689Smrg		if test none != "$non_pic_object"; then
7024e19dfac4Smrg		  # Prepend the subdirectory the object is found in.
70257cea3689Smrg		  non_pic_object=$xdir$non_pic_object
702627702724Smrg
7027e19dfac4Smrg		  # A standard non-PIC object
7028e19dfac4Smrg		  func_append non_pic_objects " $non_pic_object"
70297cea3689Smrg		  if test -z "$pic_object" || test none = "$pic_object"; then
70307cea3689Smrg		    arg=$non_pic_object
7031e19dfac4Smrg		  fi
7032e19dfac4Smrg		else
7033e19dfac4Smrg		  # If the PIC object exists, use it instead.
7034e19dfac4Smrg		  # $xdir was prepended to $pic_object above.
70357cea3689Smrg		  non_pic_object=$pic_object
7036e19dfac4Smrg		  func_append non_pic_objects " $non_pic_object"
7037e19dfac4Smrg		fi
7038e19dfac4Smrg	      else
7039e19dfac4Smrg		# Only an error if not doing a dry-run.
7040e19dfac4Smrg		if $opt_dry_run; then
7041e19dfac4Smrg		  # Extract subdirectory from the argument.
7042e19dfac4Smrg		  func_dirname "$arg" "/" ""
70437cea3689Smrg		  xdir=$func_dirname_result
7044e19dfac4Smrg
7045e19dfac4Smrg		  func_lo2o "$arg"
7046e19dfac4Smrg		  pic_object=$xdir$objdir/$func_lo2o_result
7047e19dfac4Smrg		  non_pic_object=$xdir$func_lo2o_result
7048e19dfac4Smrg		  func_append libobjs " $pic_object"
7049e19dfac4Smrg		  func_append non_pic_objects " $non_pic_object"
7050e19dfac4Smrg	        else
70517cea3689Smrg		  func_fatal_error "'$arg' is not a valid libtool object"
7052e19dfac4Smrg		fi
7053e19dfac4Smrg	      fi
7054e19dfac4Smrg	    done
7055e19dfac4Smrg	  else
70567cea3689Smrg	    func_fatal_error "link input file '$arg' does not exist"
7057e19dfac4Smrg	  fi
7058e19dfac4Smrg	  arg=$save_arg
7059e19dfac4Smrg	  prev=
7060e19dfac4Smrg	  continue
7061e19dfac4Smrg	  ;;
70627cea3689Smrg	os2dllname)
70637cea3689Smrg	  os2dllname=$arg
70647cea3689Smrg	  prev=
70657cea3689Smrg	  continue
70667cea3689Smrg	  ;;
7067e19dfac4Smrg	precious_regex)
70687cea3689Smrg	  precious_files_regex=$arg
7069e19dfac4Smrg	  prev=
7070e19dfac4Smrg	  continue
7071e19dfac4Smrg	  ;;
7072e19dfac4Smrg	release)
70737cea3689Smrg	  release=-$arg
7074e19dfac4Smrg	  prev=
7075e19dfac4Smrg	  continue
7076e19dfac4Smrg	  ;;
7077e19dfac4Smrg	rpath | xrpath)
7078e19dfac4Smrg	  # We need an absolute path.
7079e19dfac4Smrg	  case $arg in
7080e19dfac4Smrg	  [\\/]* | [A-Za-z]:[\\/]*) ;;
7081e19dfac4Smrg	  *)
7082e19dfac4Smrg	    func_fatal_error "only absolute run-paths are allowed"
7083e19dfac4Smrg	    ;;
7084e19dfac4Smrg	  esac
70857cea3689Smrg	  if test rpath = "$prev"; then
7086e19dfac4Smrg	    case "$rpath " in
7087e19dfac4Smrg	    *" $arg "*) ;;
7088313a12fdSmrg	    *) func_append rpath " $arg" ;;
7089e19dfac4Smrg	    esac
7090e19dfac4Smrg	  else
7091e19dfac4Smrg	    case "$xrpath " in
7092e19dfac4Smrg	    *" $arg "*) ;;
7093313a12fdSmrg	    *) func_append xrpath " $arg" ;;
7094e19dfac4Smrg	    esac
7095e19dfac4Smrg	  fi
7096e19dfac4Smrg	  prev=
7097e19dfac4Smrg	  continue
7098e19dfac4Smrg	  ;;
7099e19dfac4Smrg	shrext)
71007cea3689Smrg	  shrext_cmds=$arg
7101e19dfac4Smrg	  prev=
7102e19dfac4Smrg	  continue
7103e19dfac4Smrg	  ;;
7104e19dfac4Smrg	weak)
7105313a12fdSmrg	  func_append weak_libs " $arg"
7106e19dfac4Smrg	  prev=
7107e19dfac4Smrg	  continue
7108e19dfac4Smrg	  ;;
710995b7a5c8Smrg	xassembler)
711095b7a5c8Smrg	  func_append compiler_flags " -Xassembler $qarg"
711195b7a5c8Smrg	  prev=
711295b7a5c8Smrg	  func_append compile_command " -Xassembler $qarg"
711395b7a5c8Smrg	  func_append finalize_command " -Xassembler $qarg"
711495b7a5c8Smrg	  continue
711595b7a5c8Smrg	  ;;
7116e19dfac4Smrg	xcclinker)
7117313a12fdSmrg	  func_append linker_flags " $qarg"
7118313a12fdSmrg	  func_append compiler_flags " $qarg"
7119e19dfac4Smrg	  prev=
7120e19dfac4Smrg	  func_append compile_command " $qarg"
7121e19dfac4Smrg	  func_append finalize_command " $qarg"
7122e19dfac4Smrg	  continue
7123e19dfac4Smrg	  ;;
7124e19dfac4Smrg	xcompiler)
7125313a12fdSmrg	  func_append compiler_flags " $qarg"
7126e19dfac4Smrg	  prev=
7127e19dfac4Smrg	  func_append compile_command " $qarg"
7128e19dfac4Smrg	  func_append finalize_command " $qarg"
7129e19dfac4Smrg	  continue
7130e19dfac4Smrg	  ;;
7131e19dfac4Smrg	xlinker)
7132313a12fdSmrg	  func_append linker_flags " $qarg"
7133313a12fdSmrg	  func_append compiler_flags " $wl$qarg"
7134e19dfac4Smrg	  prev=
7135e19dfac4Smrg	  func_append compile_command " $wl$qarg"
7136e19dfac4Smrg	  func_append finalize_command " $wl$qarg"
7137e19dfac4Smrg	  continue
7138e19dfac4Smrg	  ;;
7139e19dfac4Smrg	*)
7140e19dfac4Smrg	  eval "$prev=\"\$arg\""
7141e19dfac4Smrg	  prev=
7142e19dfac4Smrg	  continue
7143e19dfac4Smrg	  ;;
714427702724Smrg	esac
7145e19dfac4Smrg      fi # test -n "$prev"
714627702724Smrg
71477cea3689Smrg      prevarg=$arg
714827702724Smrg
7149e19dfac4Smrg      case $arg in
7150e19dfac4Smrg      -all-static)
7151e19dfac4Smrg	if test -n "$link_static_flag"; then
7152e19dfac4Smrg	  # See comment for -static flag below, for more details.
7153e19dfac4Smrg	  func_append compile_command " $link_static_flag"
7154e19dfac4Smrg	  func_append finalize_command " $link_static_flag"
7155e19dfac4Smrg	fi
7156e19dfac4Smrg	continue
7157e19dfac4Smrg	;;
715827702724Smrg
7159e19dfac4Smrg      -allow-undefined)
7160e19dfac4Smrg	# FIXME: remove this flag sometime in the future.
71617cea3689Smrg	func_fatal_error "'-allow-undefined' must not be used because it is the default"
7162e19dfac4Smrg	;;
716327702724Smrg
7164e19dfac4Smrg      -avoid-version)
7165e19dfac4Smrg	avoid_version=yes
7166e19dfac4Smrg	continue
7167e19dfac4Smrg	;;
716827702724Smrg
7169313a12fdSmrg      -bindir)
7170313a12fdSmrg	prev=bindir
7171313a12fdSmrg	continue
7172313a12fdSmrg	;;
7173313a12fdSmrg
7174e19dfac4Smrg      -dlopen)
7175e19dfac4Smrg	prev=dlfiles
7176e19dfac4Smrg	continue
7177e19dfac4Smrg	;;
717827702724Smrg
7179e19dfac4Smrg      -dlpreopen)
7180e19dfac4Smrg	prev=dlprefiles
7181e19dfac4Smrg	continue
7182e19dfac4Smrg	;;
718327702724Smrg
7184e19dfac4Smrg      -export-dynamic)
7185e19dfac4Smrg	export_dynamic=yes
7186e19dfac4Smrg	continue
7187e19dfac4Smrg	;;
718827702724Smrg
7189e19dfac4Smrg      -export-symbols | -export-symbols-regex)
7190e19dfac4Smrg	if test -n "$export_symbols" || test -n "$export_symbols_regex"; then
7191e19dfac4Smrg	  func_fatal_error "more than one -exported-symbols argument is not allowed"
7192e19dfac4Smrg	fi
71937cea3689Smrg	if test X-export-symbols = "X$arg"; then
7194e19dfac4Smrg	  prev=expsyms
7195e19dfac4Smrg	else
7196e19dfac4Smrg	  prev=expsyms_regex
7197e19dfac4Smrg	fi
7198e19dfac4Smrg	continue
7199e19dfac4Smrg	;;
720027702724Smrg
7201e19dfac4Smrg      -framework)
7202e19dfac4Smrg	prev=framework
7203e19dfac4Smrg	continue
7204e19dfac4Smrg	;;
720527702724Smrg
7206e19dfac4Smrg      -inst-prefix-dir)
7207e19dfac4Smrg	prev=inst_prefix
7208e19dfac4Smrg	continue
7209e19dfac4Smrg	;;
721027702724Smrg
7211e19dfac4Smrg      # The native IRIX linker understands -LANG:*, -LIST:* and -LNO:*
7212e19dfac4Smrg      # so, if we see these flags be careful not to treat them like -L
7213e19dfac4Smrg      -L[A-Z][A-Z]*:*)
7214e19dfac4Smrg	case $with_gcc/$host in
7215e19dfac4Smrg	no/*-*-irix* | /*-*-irix*)
7216e19dfac4Smrg	  func_append compile_command " $arg"
7217e19dfac4Smrg	  func_append finalize_command " $arg"
7218e19dfac4Smrg	  ;;
7219e19dfac4Smrg	esac
7220e19dfac4Smrg	continue
7221e19dfac4Smrg	;;
722227702724Smrg
7223e19dfac4Smrg      -L*)
7224313a12fdSmrg	func_stripname "-L" '' "$arg"
7225313a12fdSmrg	if test -z "$func_stripname_result"; then
7226e19dfac4Smrg	  if test "$#" -gt 0; then
72277cea3689Smrg	    func_fatal_error "require no space between '-L' and '$1'"
7228e19dfac4Smrg	  else
72297cea3689Smrg	    func_fatal_error "need path for '-L' option"
7230e19dfac4Smrg	  fi
7231e19dfac4Smrg	fi
7232313a12fdSmrg	func_resolve_sysroot "$func_stripname_result"
7233313a12fdSmrg	dir=$func_resolve_sysroot_result
7234e19dfac4Smrg	# We need an absolute path.
7235e19dfac4Smrg	case $dir in
7236e19dfac4Smrg	[\\/]* | [A-Za-z]:[\\/]*) ;;
7237e19dfac4Smrg	*)
7238e19dfac4Smrg	  absdir=`cd "$dir" && pwd`
7239e19dfac4Smrg	  test -z "$absdir" && \
72407cea3689Smrg	    func_fatal_error "cannot determine absolute directory name of '$dir'"
72417cea3689Smrg	  dir=$absdir
7242e19dfac4Smrg	  ;;
7243e19dfac4Smrg	esac
7244e19dfac4Smrg	case "$deplibs " in
7245313a12fdSmrg	*" -L$dir "* | *" $arg "*)
7246313a12fdSmrg	  # Will only happen for absolute or sysroot arguments
7247313a12fdSmrg	  ;;
7248e19dfac4Smrg	*)
7249313a12fdSmrg	  # Preserve sysroot, but never include relative directories
7250313a12fdSmrg	  case $dir in
7251313a12fdSmrg	    [\\/]* | [A-Za-z]:[\\/]* | =*) func_append deplibs " $arg" ;;
7252313a12fdSmrg	    *) func_append deplibs " -L$dir" ;;
7253313a12fdSmrg	  esac
7254313a12fdSmrg	  func_append lib_search_path " $dir"
7255e19dfac4Smrg	  ;;
7256e19dfac4Smrg	esac
7257e19dfac4Smrg	case $host in
7258e19dfac4Smrg	*-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-cegcc*)
7259313a12fdSmrg	  testbindir=`$ECHO "$dir" | $SED 's*/lib$*/bin*'`
7260e19dfac4Smrg	  case :$dllsearchpath: in
7261e19dfac4Smrg	  *":$dir:"*) ;;
7262e19dfac4Smrg	  ::) dllsearchpath=$dir;;
7263313a12fdSmrg	  *) func_append dllsearchpath ":$dir";;
7264e19dfac4Smrg	  esac
7265e19dfac4Smrg	  case :$dllsearchpath: in
7266e19dfac4Smrg	  *":$testbindir:"*) ;;
7267e19dfac4Smrg	  ::) dllsearchpath=$testbindir;;
7268313a12fdSmrg	  *) func_append dllsearchpath ":$testbindir";;
7269e19dfac4Smrg	  esac
7270e19dfac4Smrg	  ;;
7271e19dfac4Smrg	esac
7272e19dfac4Smrg	continue
7273e19dfac4Smrg	;;
727427702724Smrg
7275e19dfac4Smrg      -l*)
72767cea3689Smrg	if test X-lc = "X$arg" || test X-lm = "X$arg"; then
7277e19dfac4Smrg	  case $host in
7278313a12fdSmrg	  *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-beos* | *-cegcc* | *-*-haiku*)
7279e19dfac4Smrg	    # These systems don't actually have a C or math library (as such)
7280e19dfac4Smrg	    continue
7281e19dfac4Smrg	    ;;
7282e19dfac4Smrg	  *-*-os2*)
7283e19dfac4Smrg	    # These systems don't actually have a C library (as such)
72847cea3689Smrg	    test X-lc = "X$arg" && continue
7285e19dfac4Smrg	    ;;
728695b7a5c8Smrg	  *-*-openbsd* | *-*-freebsd* | *-*-dragonfly* | *-*-bitrig* | *-*-midnightbsd*)
7287e19dfac4Smrg	    # Do not include libc due to us having libc/libc_r.
72887cea3689Smrg	    test X-lc = "X$arg" && continue
7289e19dfac4Smrg	    ;;
7290e19dfac4Smrg	  *-*-rhapsody* | *-*-darwin1.[012])
7291e19dfac4Smrg	    # Rhapsody C and math libraries are in the System framework
7292313a12fdSmrg	    func_append deplibs " System.ltframework"
7293e19dfac4Smrg	    continue
7294e19dfac4Smrg	    ;;
7295e19dfac4Smrg	  *-*-sco3.2v5* | *-*-sco5v6*)
7296e19dfac4Smrg	    # Causes problems with __ctype
72977cea3689Smrg	    test X-lc = "X$arg" && continue
7298e19dfac4Smrg	    ;;
7299e19dfac4Smrg	  *-*-sysv4.2uw2* | *-*-sysv5* | *-*-unixware* | *-*-OpenUNIX*)
7300e19dfac4Smrg	    # Compiler inserts libc in the correct place for threads to work
73017cea3689Smrg	    test X-lc = "X$arg" && continue
7302e19dfac4Smrg	    ;;
7303e19dfac4Smrg	  esac
73047cea3689Smrg	elif test X-lc_r = "X$arg"; then
7305e19dfac4Smrg	 case $host in
730695b7a5c8Smrg	 *-*-openbsd* | *-*-freebsd* | *-*-dragonfly* | *-*-bitrig* | *-*-midnightbsd*)
7307e19dfac4Smrg	   # Do not include libc_r directly, use -pthread flag.
7308e19dfac4Smrg	   continue
7309e19dfac4Smrg	   ;;
7310e19dfac4Smrg	 esac
7311e19dfac4Smrg	fi
7312313a12fdSmrg	func_append deplibs " $arg"
7313e19dfac4Smrg	continue
7314e19dfac4Smrg	;;
731527702724Smrg
73167cea3689Smrg      -mllvm)
73177cea3689Smrg	prev=mllvm
73187cea3689Smrg	continue
73197cea3689Smrg	;;
73207cea3689Smrg
7321e19dfac4Smrg      -module)
7322e19dfac4Smrg	module=yes
7323e19dfac4Smrg	continue
7324e19dfac4Smrg	;;
732527702724Smrg
7326e19dfac4Smrg      # Tru64 UNIX uses -model [arg] to determine the layout of C++
7327e19dfac4Smrg      # classes, name mangling, and exception handling.
7328e19dfac4Smrg      # Darwin uses the -arch flag to determine output architecture.
7329313a12fdSmrg      -model|-arch|-isysroot|--sysroot)
7330313a12fdSmrg	func_append compiler_flags " $arg"
7331e19dfac4Smrg	func_append compile_command " $arg"
7332e19dfac4Smrg	func_append finalize_command " $arg"
7333e19dfac4Smrg	prev=xcompiler
7334e19dfac4Smrg	continue
7335e19dfac4Smrg	;;
733695b7a5c8Smrg     # Solaris ld rejects as of 11.4. Refer to Oracle bug 22985199.
733795b7a5c8Smrg     -pthread)
733895b7a5c8Smrg	case $host in
733995b7a5c8Smrg	  *solaris2*) ;;
734095b7a5c8Smrg	  *)
734195b7a5c8Smrg	    case "$new_inherited_linker_flags " in
734295b7a5c8Smrg	        *" $arg "*) ;;
734395b7a5c8Smrg	        * ) func_append new_inherited_linker_flags " $arg" ;;
734495b7a5c8Smrg	    esac
734595b7a5c8Smrg	  ;;
734695b7a5c8Smrg	esac
734795b7a5c8Smrg	continue
734895b7a5c8Smrg	;;
734995b7a5c8Smrg      -mt|-mthreads|-kthread|-Kthread|-pthreads|--thread-safe \
7350313a12fdSmrg      |-threads|-fopenmp|-openmp|-mp|-xopenmp|-omp|-qsmp=*)
7351313a12fdSmrg	func_append compiler_flags " $arg"
7352e19dfac4Smrg	func_append compile_command " $arg"
7353e19dfac4Smrg	func_append finalize_command " $arg"
7354e19dfac4Smrg	case "$new_inherited_linker_flags " in
7355e19dfac4Smrg	    *" $arg "*) ;;
7356313a12fdSmrg	    * ) func_append new_inherited_linker_flags " $arg" ;;
7357e19dfac4Smrg	esac
7358e19dfac4Smrg	continue
7359e19dfac4Smrg	;;
736027702724Smrg
7361e19dfac4Smrg      -multi_module)
73627cea3689Smrg	single_module=$wl-multi_module
7363e19dfac4Smrg	continue
7364e19dfac4Smrg	;;
736527702724Smrg
7366e19dfac4Smrg      -no-fast-install)
7367e19dfac4Smrg	fast_install=no
7368e19dfac4Smrg	continue
7369e19dfac4Smrg	;;
737027702724Smrg
7371e19dfac4Smrg      -no-install)
7372e19dfac4Smrg	case $host in
7373e19dfac4Smrg	*-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-*-darwin* | *-cegcc*)
7374e19dfac4Smrg	  # The PATH hackery in wrapper scripts is required on Windows
7375e19dfac4Smrg	  # and Darwin in order for the loader to find any dlls it needs.
73767cea3689Smrg	  func_warning "'-no-install' is ignored for $host"
73777cea3689Smrg	  func_warning "assuming '-no-fast-install' instead"
7378e19dfac4Smrg	  fast_install=no
7379e19dfac4Smrg	  ;;
7380e19dfac4Smrg	*) no_install=yes ;;
7381e19dfac4Smrg	esac
7382e19dfac4Smrg	continue
7383e19dfac4Smrg	;;
738427702724Smrg
7385e19dfac4Smrg      -no-undefined)
7386e19dfac4Smrg	allow_undefined=no
7387e19dfac4Smrg	continue
7388e19dfac4Smrg	;;
738927702724Smrg
7390e19dfac4Smrg      -objectlist)
7391e19dfac4Smrg	prev=objectlist
7392e19dfac4Smrg	continue
7393e19dfac4Smrg	;;
739427702724Smrg
73957cea3689Smrg      -os2dllname)
73967cea3689Smrg	prev=os2dllname
73977cea3689Smrg	continue
73987cea3689Smrg	;;
73997cea3689Smrg
7400e19dfac4Smrg      -o) prev=output ;;
740127702724Smrg
7402e19dfac4Smrg      -precious-files-regex)
7403e19dfac4Smrg	prev=precious_regex
7404e19dfac4Smrg	continue
7405e19dfac4Smrg	;;
740627702724Smrg
7407e19dfac4Smrg      -release)
7408e19dfac4Smrg	prev=release
7409e19dfac4Smrg	continue
7410e19dfac4Smrg	;;
741127702724Smrg
7412e19dfac4Smrg      -rpath)
7413e19dfac4Smrg	prev=rpath
7414e19dfac4Smrg	continue
7415e19dfac4Smrg	;;
741627702724Smrg
7417e19dfac4Smrg      -R)
7418e19dfac4Smrg	prev=xrpath
7419e19dfac4Smrg	continue
7420e19dfac4Smrg	;;
742127702724Smrg
7422e19dfac4Smrg      -R*)
7423e19dfac4Smrg	func_stripname '-R' '' "$arg"
7424e19dfac4Smrg	dir=$func_stripname_result
7425e19dfac4Smrg	# We need an absolute path.
7426e19dfac4Smrg	case $dir in
7427e19dfac4Smrg	[\\/]* | [A-Za-z]:[\\/]*) ;;
7428313a12fdSmrg	=*)
7429313a12fdSmrg	  func_stripname '=' '' "$dir"
7430313a12fdSmrg	  dir=$lt_sysroot$func_stripname_result
7431313a12fdSmrg	  ;;
7432e19dfac4Smrg	*)
7433e19dfac4Smrg	  func_fatal_error "only absolute run-paths are allowed"
7434e19dfac4Smrg	  ;;
7435e19dfac4Smrg	esac
7436e19dfac4Smrg	case "$xrpath " in
7437e19dfac4Smrg	*" $dir "*) ;;
7438313a12fdSmrg	*) func_append xrpath " $dir" ;;
7439e19dfac4Smrg	esac
7440e19dfac4Smrg	continue
7441e19dfac4Smrg	;;
744227702724Smrg
7443e19dfac4Smrg      -shared)
7444e19dfac4Smrg	# The effects of -shared are defined in a previous loop.
7445e19dfac4Smrg	continue
7446e19dfac4Smrg	;;
744727702724Smrg
7448e19dfac4Smrg      -shrext)
7449e19dfac4Smrg	prev=shrext
7450e19dfac4Smrg	continue
7451e19dfac4Smrg	;;
745227702724Smrg
7453e19dfac4Smrg      -static | -static-libtool-libs)
7454e19dfac4Smrg	# The effects of -static are defined in a previous loop.
7455e19dfac4Smrg	# We used to do the same as -all-static on platforms that
7456e19dfac4Smrg	# didn't have a PIC flag, but the assumption that the effects
7457e19dfac4Smrg	# would be equivalent was wrong.  It would break on at least
7458e19dfac4Smrg	# Digital Unix and AIX.
7459e19dfac4Smrg	continue
7460e19dfac4Smrg	;;
746127702724Smrg
7462e19dfac4Smrg      -thread-safe)
7463e19dfac4Smrg	thread_safe=yes
7464e19dfac4Smrg	continue
7465e19dfac4Smrg	;;
746627702724Smrg
7467e19dfac4Smrg      -version-info)
7468e19dfac4Smrg	prev=vinfo
7469e19dfac4Smrg	continue
7470e19dfac4Smrg	;;
747127702724Smrg
7472e19dfac4Smrg      -version-number)
7473e19dfac4Smrg	prev=vinfo
7474e19dfac4Smrg	vinfo_number=yes
7475e19dfac4Smrg	continue
7476e19dfac4Smrg	;;
747727702724Smrg
7478e19dfac4Smrg      -weak)
7479e19dfac4Smrg        prev=weak
7480e19dfac4Smrg	continue
7481e19dfac4Smrg	;;
748227702724Smrg
7483e19dfac4Smrg      -Wc,*)
7484e19dfac4Smrg	func_stripname '-Wc,' '' "$arg"
7485e19dfac4Smrg	args=$func_stripname_result
7486e19dfac4Smrg	arg=
74877cea3689Smrg	save_ifs=$IFS; IFS=,
7488e19dfac4Smrg	for flag in $args; do
74897cea3689Smrg	  IFS=$save_ifs
749095b7a5c8Smrg          func_quote_arg pretty "$flag"
749195b7a5c8Smrg	  func_append arg " $func_quote_arg_result"
749295b7a5c8Smrg	  func_append compiler_flags " $func_quote_arg_result"
7493e19dfac4Smrg	done
74947cea3689Smrg	IFS=$save_ifs
7495e19dfac4Smrg	func_stripname ' ' '' "$arg"
7496e19dfac4Smrg	arg=$func_stripname_result
7497e19dfac4Smrg	;;
749827702724Smrg
7499e19dfac4Smrg      -Wl,*)
7500e19dfac4Smrg	func_stripname '-Wl,' '' "$arg"
7501e19dfac4Smrg	args=$func_stripname_result
7502e19dfac4Smrg	arg=
75037cea3689Smrg	save_ifs=$IFS; IFS=,
7504e19dfac4Smrg	for flag in $args; do
75057cea3689Smrg	  IFS=$save_ifs
750695b7a5c8Smrg          func_quote_arg pretty "$flag"
750795b7a5c8Smrg	  func_append arg " $wl$func_quote_arg_result"
750895b7a5c8Smrg	  func_append compiler_flags " $wl$func_quote_arg_result"
750995b7a5c8Smrg	  func_append linker_flags " $func_quote_arg_result"
7510e19dfac4Smrg	done
75117cea3689Smrg	IFS=$save_ifs
7512e19dfac4Smrg	func_stripname ' ' '' "$arg"
7513e19dfac4Smrg	arg=$func_stripname_result
7514e19dfac4Smrg	;;
751527702724Smrg
751695b7a5c8Smrg      -Xassembler)
751795b7a5c8Smrg        prev=xassembler
751895b7a5c8Smrg        continue
751995b7a5c8Smrg        ;;
752095b7a5c8Smrg
7521e19dfac4Smrg      -Xcompiler)
7522e19dfac4Smrg	prev=xcompiler
7523e19dfac4Smrg	continue
7524e19dfac4Smrg	;;
752527702724Smrg
7526e19dfac4Smrg      -Xlinker)
7527e19dfac4Smrg	prev=xlinker
7528e19dfac4Smrg	continue
7529e19dfac4Smrg	;;
753027702724Smrg
7531e19dfac4Smrg      -XCClinker)
7532e19dfac4Smrg	prev=xcclinker
7533e19dfac4Smrg	continue
7534e19dfac4Smrg	;;
753527702724Smrg
7536e19dfac4Smrg      # -msg_* for osf cc
7537e19dfac4Smrg      -msg_*)
753895b7a5c8Smrg	func_quote_arg pretty "$arg"
753995b7a5c8Smrg	arg=$func_quote_arg_result
7540e19dfac4Smrg	;;
754127702724Smrg
7542313a12fdSmrg      # Flags to be passed through unchanged, with rationale:
7543313a12fdSmrg      # -64, -mips[0-9]      enable 64-bit mode for the SGI compiler
7544313a12fdSmrg      # -r[0-9][0-9]*        specify processor for the SGI compiler
7545313a12fdSmrg      # -xarch=*, -xtarget=* enable 64-bit mode for the Sun compiler
7546313a12fdSmrg      # +DA*, +DD*           enable 64-bit mode for the HP compiler
7547313a12fdSmrg      # -q*                  compiler args for the IBM compiler
7548313a12fdSmrg      # -m*, -t[45]*, -txscale* architecture-specific flags for GCC
7549313a12fdSmrg      # -F/path              path to uninstalled frameworks, gcc on darwin
7550313a12fdSmrg      # -p, -pg, --coverage, -fprofile-*  profiling flags for GCC
75517cea3689Smrg      # -fstack-protector*   stack protector flags for GCC
7552313a12fdSmrg      # @file                GCC response files
7553313a12fdSmrg      # -tp=*                Portland pgcc target processor selection
7554313a12fdSmrg      # --sysroot=*          for sysroot support
75557cea3689Smrg      # -O*, -g*, -flto*, -fwhopr*, -fuse-linker-plugin GCC link-time optimization
755695b7a5c8Smrg      # -specs=*             GCC specs files
75577cea3689Smrg      # -stdlib=*            select c++ std lib with clang
755895b7a5c8Smrg      # -fsanitize=*         Clang/GCC memory and address sanitizer
755995b7a5c8Smrg      # -fuse-ld=*           Linker select flags for GCC
756095b7a5c8Smrg      # -Wa,*                Pass flags directly to the assembler
7561e19dfac4Smrg      -64|-mips[0-9]|-r[0-9][0-9]*|-xarch=*|-xtarget=*|+DA*|+DD*|-q*|-m*| \
7562313a12fdSmrg      -t[45]*|-txscale*|-p|-pg|--coverage|-fprofile-*|-F*|@*|-tp=*|--sysroot=*| \
756395b7a5c8Smrg      -O*|-g*|-flto*|-fwhopr*|-fuse-linker-plugin|-fstack-protector*|-stdlib=*| \
756495b7a5c8Smrg      -specs=*|-fsanitize=*|-fuse-ld=*|-Wa,*)
756595b7a5c8Smrg        func_quote_arg pretty "$arg"
756695b7a5c8Smrg	arg=$func_quote_arg_result
7567e19dfac4Smrg        func_append compile_command " $arg"
7568e19dfac4Smrg        func_append finalize_command " $arg"
7569313a12fdSmrg        func_append compiler_flags " $arg"
7570e19dfac4Smrg        continue
7571e19dfac4Smrg        ;;
757227702724Smrg
75737cea3689Smrg      -Z*)
75747cea3689Smrg        if test os2 = "`expr $host : '.*\(os2\)'`"; then
75757cea3689Smrg          # OS/2 uses -Zxxx to specify OS/2-specific options
75767cea3689Smrg	  compiler_flags="$compiler_flags $arg"
75777cea3689Smrg	  func_append compile_command " $arg"
75787cea3689Smrg	  func_append finalize_command " $arg"
75797cea3689Smrg	  case $arg in
75807cea3689Smrg	  -Zlinker | -Zstack)
75817cea3689Smrg	    prev=xcompiler
75827cea3689Smrg	    ;;
75837cea3689Smrg	  esac
75847cea3689Smrg	  continue
75857cea3689Smrg        else
75867cea3689Smrg	  # Otherwise treat like 'Some other compiler flag' below
758795b7a5c8Smrg	  func_quote_arg pretty "$arg"
758895b7a5c8Smrg	  arg=$func_quote_arg_result
75897cea3689Smrg        fi
75907cea3689Smrg	;;
75917cea3689Smrg
7592e19dfac4Smrg      # Some other compiler flag.
7593e19dfac4Smrg      -* | +*)
759495b7a5c8Smrg        func_quote_arg pretty "$arg"
759595b7a5c8Smrg	arg=$func_quote_arg_result
7596e19dfac4Smrg	;;
759727702724Smrg
7598e19dfac4Smrg      *.$objext)
7599e19dfac4Smrg	# A standard object.
7600313a12fdSmrg	func_append objs " $arg"
7601e19dfac4Smrg	;;
760227702724Smrg
7603e19dfac4Smrg      *.lo)
7604e19dfac4Smrg	# A libtool-controlled object.
760527702724Smrg
7606e19dfac4Smrg	# Check to see that this really is a libtool object.
7607e19dfac4Smrg	if func_lalib_unsafe_p "$arg"; then
7608e19dfac4Smrg	  pic_object=
7609e19dfac4Smrg	  non_pic_object=
7610e19dfac4Smrg
7611e19dfac4Smrg	  # Read the .lo file
7612e19dfac4Smrg	  func_source "$arg"
7613e19dfac4Smrg
7614e19dfac4Smrg	  if test -z "$pic_object" ||
7615e19dfac4Smrg	     test -z "$non_pic_object" ||
76167cea3689Smrg	     test none = "$pic_object" &&
76177cea3689Smrg	     test none = "$non_pic_object"; then
76187cea3689Smrg	    func_fatal_error "cannot find name of object for '$arg'"
7619e19dfac4Smrg	  fi
7620e19dfac4Smrg
7621e19dfac4Smrg	  # Extract subdirectory from the argument.
7622e19dfac4Smrg	  func_dirname "$arg" "/" ""
76237cea3689Smrg	  xdir=$func_dirname_result
7624e19dfac4Smrg
76257cea3689Smrg	  test none = "$pic_object" || {
7626e19dfac4Smrg	    # Prepend the subdirectory the object is found in.
76277cea3689Smrg	    pic_object=$xdir$pic_object
7628e19dfac4Smrg
76297cea3689Smrg	    if test dlfiles = "$prev"; then
76307cea3689Smrg	      if test yes = "$build_libtool_libs" && test yes = "$dlopen_support"; then
7631313a12fdSmrg		func_append dlfiles " $pic_object"
7632e19dfac4Smrg		prev=
7633e19dfac4Smrg		continue
7634e19dfac4Smrg	      else
7635e19dfac4Smrg		# If libtool objects are unsupported, then we need to preload.
7636e19dfac4Smrg		prev=dlprefiles
7637e19dfac4Smrg	      fi
7638e19dfac4Smrg	    fi
7639e19dfac4Smrg
7640e19dfac4Smrg	    # CHECK ME:  I think I busted this.  -Ossama
76417cea3689Smrg	    if test dlprefiles = "$prev"; then
7642e19dfac4Smrg	      # Preload the old-style object.
7643313a12fdSmrg	      func_append dlprefiles " $pic_object"
7644e19dfac4Smrg	      prev=
7645e19dfac4Smrg	    fi
7646e19dfac4Smrg
7647e19dfac4Smrg	    # A PIC object.
7648e19dfac4Smrg	    func_append libobjs " $pic_object"
76497cea3689Smrg	    arg=$pic_object
76507cea3689Smrg	  }
7651e19dfac4Smrg
7652e19dfac4Smrg	  # Non-PIC object.
76537cea3689Smrg	  if test none != "$non_pic_object"; then
7654e19dfac4Smrg	    # Prepend the subdirectory the object is found in.
76557cea3689Smrg	    non_pic_object=$xdir$non_pic_object
7656e19dfac4Smrg
7657e19dfac4Smrg	    # A standard non-PIC object
7658e19dfac4Smrg	    func_append non_pic_objects " $non_pic_object"
76597cea3689Smrg	    if test -z "$pic_object" || test none = "$pic_object"; then
76607cea3689Smrg	      arg=$non_pic_object
7661e19dfac4Smrg	    fi
7662e19dfac4Smrg	  else
7663e19dfac4Smrg	    # If the PIC object exists, use it instead.
7664e19dfac4Smrg	    # $xdir was prepended to $pic_object above.
76657cea3689Smrg	    non_pic_object=$pic_object
7666e19dfac4Smrg	    func_append non_pic_objects " $non_pic_object"
7667e19dfac4Smrg	  fi
7668e19dfac4Smrg	else
7669e19dfac4Smrg	  # Only an error if not doing a dry-run.
7670e19dfac4Smrg	  if $opt_dry_run; then
7671e19dfac4Smrg	    # Extract subdirectory from the argument.
7672e19dfac4Smrg	    func_dirname "$arg" "/" ""
76737cea3689Smrg	    xdir=$func_dirname_result
7674e19dfac4Smrg
7675e19dfac4Smrg	    func_lo2o "$arg"
7676e19dfac4Smrg	    pic_object=$xdir$objdir/$func_lo2o_result
7677e19dfac4Smrg	    non_pic_object=$xdir$func_lo2o_result
7678e19dfac4Smrg	    func_append libobjs " $pic_object"
7679e19dfac4Smrg	    func_append non_pic_objects " $non_pic_object"
7680e19dfac4Smrg	  else
76817cea3689Smrg	    func_fatal_error "'$arg' is not a valid libtool object"
7682e19dfac4Smrg	  fi
7683e19dfac4Smrg	fi
7684e19dfac4Smrg	;;
7685e19dfac4Smrg
7686e19dfac4Smrg      *.$libext)
7687e19dfac4Smrg	# An archive.
7688313a12fdSmrg	func_append deplibs " $arg"
7689313a12fdSmrg	func_append old_deplibs " $arg"
7690e19dfac4Smrg	continue
7691e19dfac4Smrg	;;
7692e19dfac4Smrg
7693e19dfac4Smrg      *.la)
7694e19dfac4Smrg	# A libtool-controlled library.
7695e19dfac4Smrg
7696313a12fdSmrg	func_resolve_sysroot "$arg"
76977cea3689Smrg	if test dlfiles = "$prev"; then
7698e19dfac4Smrg	  # This library was specified with -dlopen.
7699313a12fdSmrg	  func_append dlfiles " $func_resolve_sysroot_result"
7700e19dfac4Smrg	  prev=
77017cea3689Smrg	elif test dlprefiles = "$prev"; then
7702e19dfac4Smrg	  # The library was specified with -dlpreopen.
7703313a12fdSmrg	  func_append dlprefiles " $func_resolve_sysroot_result"
7704e19dfac4Smrg	  prev=
7705e19dfac4Smrg	else
7706313a12fdSmrg	  func_append deplibs " $func_resolve_sysroot_result"
7707e19dfac4Smrg	fi
7708e19dfac4Smrg	continue
7709e19dfac4Smrg	;;
7710e19dfac4Smrg
7711e19dfac4Smrg      # Some other compiler argument.
7712e19dfac4Smrg      *)
7713e19dfac4Smrg	# Unknown arguments in both finalize_command and compile_command need
7714e19dfac4Smrg	# to be aesthetically quoted because they are evaled later.
771595b7a5c8Smrg	func_quote_arg pretty "$arg"
771695b7a5c8Smrg	arg=$func_quote_arg_result
7717e19dfac4Smrg	;;
7718e19dfac4Smrg      esac # arg
7719e19dfac4Smrg
7720e19dfac4Smrg      # Now actually substitute the argument into the commands.
7721e19dfac4Smrg      if test -n "$arg"; then
7722e19dfac4Smrg	func_append compile_command " $arg"
7723e19dfac4Smrg	func_append finalize_command " $arg"
7724e19dfac4Smrg      fi
7725e19dfac4Smrg    done # argument parsing loop
7726e19dfac4Smrg
7727e19dfac4Smrg    test -n "$prev" && \
77287cea3689Smrg      func_fatal_help "the '$prevarg' option requires an argument"
7729e19dfac4Smrg
77307cea3689Smrg    if test yes = "$export_dynamic" && test -n "$export_dynamic_flag_spec"; then
7731e19dfac4Smrg      eval arg=\"$export_dynamic_flag_spec\"
7732e19dfac4Smrg      func_append compile_command " $arg"
7733e19dfac4Smrg      func_append finalize_command " $arg"
7734e19dfac4Smrg    fi
7735e19dfac4Smrg
7736e19dfac4Smrg    oldlibs=
7737e19dfac4Smrg    # calculate the name of the file, without its directory
7738e19dfac4Smrg    func_basename "$output"
77397cea3689Smrg    outputname=$func_basename_result
77407cea3689Smrg    libobjs_save=$libobjs
7741e19dfac4Smrg
7742e19dfac4Smrg    if test -n "$shlibpath_var"; then
7743e19dfac4Smrg      # get the directories listed in $shlibpath_var
77447cea3689Smrg      eval shlib_search_path=\`\$ECHO \"\$$shlibpath_var\" \| \$SED \'s/:/ /g\'\`
774527702724Smrg    else
7746e19dfac4Smrg      shlib_search_path=
774727702724Smrg    fi
7748e19dfac4Smrg    eval sys_lib_search_path=\"$sys_lib_search_path_spec\"
7749e19dfac4Smrg    eval sys_lib_dlsearch_path=\"$sys_lib_dlsearch_path_spec\"
775027702724Smrg
77517cea3689Smrg    # Definition is injected by LT_CONFIG during libtool generation.
77527cea3689Smrg    func_munge_path_list sys_lib_dlsearch_path "$LT_SYS_LIBRARY_PATH"
77537cea3689Smrg
7754e19dfac4Smrg    func_dirname "$output" "/" ""
77557cea3689Smrg    output_objdir=$func_dirname_result$objdir
7756313a12fdSmrg    func_to_tool_file "$output_objdir/"
7757313a12fdSmrg    tool_output_objdir=$func_to_tool_file_result
7758e19dfac4Smrg    # Create the object directory.
7759e19dfac4Smrg    func_mkdir_p "$output_objdir"
776027702724Smrg
7761e19dfac4Smrg    # Determine the type of output
7762e19dfac4Smrg    case $output in
7763e19dfac4Smrg    "")
7764e19dfac4Smrg      func_fatal_help "you must specify an output file"
7765e19dfac4Smrg      ;;
7766e19dfac4Smrg    *.$libext) linkmode=oldlib ;;
7767e19dfac4Smrg    *.lo | *.$objext) linkmode=obj ;;
7768e19dfac4Smrg    *.la) linkmode=lib ;;
7769e19dfac4Smrg    *) linkmode=prog ;; # Anything else should be a program.
7770e19dfac4Smrg    esac
7771e19dfac4Smrg
7772e19dfac4Smrg    specialdeplibs=
7773e19dfac4Smrg
7774e19dfac4Smrg    libs=
7775e19dfac4Smrg    # Find all interdependent deplibs by searching for libraries
7776e19dfac4Smrg    # that are linked more than once (e.g. -la -lb -la)
7777e19dfac4Smrg    for deplib in $deplibs; do
77787cea3689Smrg      if $opt_preserve_dup_deps; then
7779e19dfac4Smrg	case "$libs " in
7780313a12fdSmrg	*" $deplib "*) func_append specialdeplibs " $deplib" ;;
7781e19dfac4Smrg	esac
7782e19dfac4Smrg      fi
7783313a12fdSmrg      func_append libs " $deplib"
7784e19dfac4Smrg    done
7785e19dfac4Smrg
77867cea3689Smrg    if test lib = "$linkmode"; then
7787e19dfac4Smrg      libs="$predeps $libs $compiler_lib_search_path $postdeps"
7788e19dfac4Smrg
7789e19dfac4Smrg      # Compute libraries that are listed more than once in $predeps
7790e19dfac4Smrg      # $postdeps and mark them as special (i.e., whose duplicates are
7791e19dfac4Smrg      # not to be eliminated).
7792e19dfac4Smrg      pre_post_deps=
7793e19dfac4Smrg      if $opt_duplicate_compiler_generated_deps; then
7794e19dfac4Smrg	for pre_post_dep in $predeps $postdeps; do
7795e19dfac4Smrg	  case "$pre_post_deps " in
7796313a12fdSmrg	  *" $pre_post_dep "*) func_append specialdeplibs " $pre_post_deps" ;;
7797e19dfac4Smrg	  esac
7798313a12fdSmrg	  func_append pre_post_deps " $pre_post_dep"
7799e19dfac4Smrg	done
7800e19dfac4Smrg      fi
7801e19dfac4Smrg      pre_post_deps=
7802e19dfac4Smrg    fi
7803e19dfac4Smrg
7804e19dfac4Smrg    deplibs=
7805e19dfac4Smrg    newdependency_libs=
7806e19dfac4Smrg    newlib_search_path=
7807e19dfac4Smrg    need_relink=no # whether we're linking any uninstalled libtool libraries
7808e19dfac4Smrg    notinst_deplibs= # not-installed libtool libraries
7809e19dfac4Smrg    notinst_path= # paths that contain not-installed libtool libraries
7810e19dfac4Smrg
7811e19dfac4Smrg    case $linkmode in
7812e19dfac4Smrg    lib)
7813e19dfac4Smrg	passes="conv dlpreopen link"
7814e19dfac4Smrg	for file in $dlfiles $dlprefiles; do
7815e19dfac4Smrg	  case $file in
7816e19dfac4Smrg	  *.la) ;;
7817e19dfac4Smrg	  *)
78187cea3689Smrg	    func_fatal_help "libraries can '-dlopen' only libtool libraries: $file"
7819e19dfac4Smrg	    ;;
7820e19dfac4Smrg	  esac
7821e19dfac4Smrg	done
7822e19dfac4Smrg	;;
7823e19dfac4Smrg    prog)
7824e19dfac4Smrg	compile_deplibs=
7825e19dfac4Smrg	finalize_deplibs=
78267cea3689Smrg	alldeplibs=false
7827e19dfac4Smrg	newdlfiles=
7828e19dfac4Smrg	newdlprefiles=
7829e19dfac4Smrg	passes="conv scan dlopen dlpreopen link"
7830e19dfac4Smrg	;;
7831e19dfac4Smrg    *)  passes="conv"
7832e19dfac4Smrg	;;
7833e19dfac4Smrg    esac
7834e19dfac4Smrg
7835e19dfac4Smrg    for pass in $passes; do
7836e19dfac4Smrg      # The preopen pass in lib mode reverses $deplibs; put it back here
7837e19dfac4Smrg      # so that -L comes before libs that need it for instance...
78387cea3689Smrg      if test lib,link = "$linkmode,$pass"; then
7839e19dfac4Smrg	## FIXME: Find the place where the list is rebuilt in the wrong
7840e19dfac4Smrg	##        order, and fix it there properly
7841e19dfac4Smrg        tmp_deplibs=
7842e19dfac4Smrg	for deplib in $deplibs; do
7843e19dfac4Smrg	  tmp_deplibs="$deplib $tmp_deplibs"
7844e19dfac4Smrg	done
78457cea3689Smrg	deplibs=$tmp_deplibs
7846e19dfac4Smrg      fi
7847e19dfac4Smrg
78487cea3689Smrg      if test lib,link = "$linkmode,$pass" ||
78497cea3689Smrg	 test prog,scan = "$linkmode,$pass"; then
78507cea3689Smrg	libs=$deplibs
7851e19dfac4Smrg	deplibs=
7852e19dfac4Smrg      fi
78537cea3689Smrg      if test prog = "$linkmode"; then
7854e19dfac4Smrg	case $pass in
78557cea3689Smrg	dlopen) libs=$dlfiles ;;
78567cea3689Smrg	dlpreopen) libs=$dlprefiles ;;
7857313a12fdSmrg	link) libs="$deplibs %DEPLIBS% $dependency_libs" ;;
7858e19dfac4Smrg	esac
7859e19dfac4Smrg      fi
78607cea3689Smrg      if test lib,dlpreopen = "$linkmode,$pass"; then
7861e19dfac4Smrg	# Collect and forward deplibs of preopened libtool libs
7862e19dfac4Smrg	for lib in $dlprefiles; do
7863e19dfac4Smrg	  # Ignore non-libtool-libs
7864e19dfac4Smrg	  dependency_libs=
7865313a12fdSmrg	  func_resolve_sysroot "$lib"
7866e19dfac4Smrg	  case $lib in
7867313a12fdSmrg	  *.la)	func_source "$func_resolve_sysroot_result" ;;
7868e19dfac4Smrg	  esac
7869e19dfac4Smrg
7870e19dfac4Smrg	  # Collect preopened libtool deplibs, except any this library
7871e19dfac4Smrg	  # has declared as weak libs
7872e19dfac4Smrg	  for deplib in $dependency_libs; do
7873313a12fdSmrg	    func_basename "$deplib"
7874313a12fdSmrg            deplib_base=$func_basename_result
7875e19dfac4Smrg	    case " $weak_libs " in
7876e19dfac4Smrg	    *" $deplib_base "*) ;;
7877313a12fdSmrg	    *) func_append deplibs " $deplib" ;;
7878e19dfac4Smrg	    esac
7879e19dfac4Smrg	  done
7880e19dfac4Smrg	done
78817cea3689Smrg	libs=$dlprefiles
7882e19dfac4Smrg      fi
78837cea3689Smrg      if test dlopen = "$pass"; then
7884e19dfac4Smrg	# Collect dlpreopened libraries
78857cea3689Smrg	save_deplibs=$deplibs
7886e19dfac4Smrg	deplibs=
7887e19dfac4Smrg      fi
7888e19dfac4Smrg
7889e19dfac4Smrg      for deplib in $libs; do
7890e19dfac4Smrg	lib=
78917cea3689Smrg	found=false
7892e19dfac4Smrg	case $deplib in
7893313a12fdSmrg	-mt|-mthreads|-kthread|-Kthread|-pthread|-pthreads|--thread-safe \
7894313a12fdSmrg        |-threads|-fopenmp|-openmp|-mp|-xopenmp|-omp|-qsmp=*)
78957cea3689Smrg	  if test prog,link = "$linkmode,$pass"; then
7896e19dfac4Smrg	    compile_deplibs="$deplib $compile_deplibs"
7897e19dfac4Smrg	    finalize_deplibs="$deplib $finalize_deplibs"
7898e19dfac4Smrg	  else
7899313a12fdSmrg	    func_append compiler_flags " $deplib"
79007cea3689Smrg	    if test lib = "$linkmode"; then
7901e19dfac4Smrg		case "$new_inherited_linker_flags " in
7902e19dfac4Smrg		    *" $deplib "*) ;;
7903313a12fdSmrg		    * ) func_append new_inherited_linker_flags " $deplib" ;;
7904e19dfac4Smrg		esac
7905e19dfac4Smrg	    fi
7906e19dfac4Smrg	  fi
7907e19dfac4Smrg	  continue
7908e19dfac4Smrg	  ;;
7909e19dfac4Smrg	-l*)
79107cea3689Smrg	  if test lib != "$linkmode" && test prog != "$linkmode"; then
79117cea3689Smrg	    func_warning "'-l' is ignored for archives/objects"
7912e19dfac4Smrg	    continue
7913e19dfac4Smrg	  fi
7914e19dfac4Smrg	  func_stripname '-l' '' "$deplib"
7915e19dfac4Smrg	  name=$func_stripname_result
79167cea3689Smrg	  if test lib = "$linkmode"; then
7917e19dfac4Smrg	    searchdirs="$newlib_search_path $lib_search_path $compiler_lib_search_dirs $sys_lib_search_path $shlib_search_path"
7918e19dfac4Smrg	  else
7919e19dfac4Smrg	    searchdirs="$newlib_search_path $lib_search_path $sys_lib_search_path $shlib_search_path"
7920e19dfac4Smrg	  fi
7921e19dfac4Smrg	  for searchdir in $searchdirs; do
7922e19dfac4Smrg	    for search_ext in .la $std_shrext .so .a; do
7923e19dfac4Smrg	      # Search the libtool library
79247cea3689Smrg	      lib=$searchdir/lib$name$search_ext
7925e19dfac4Smrg	      if test -f "$lib"; then
79267cea3689Smrg		if test .la = "$search_ext"; then
79277cea3689Smrg		  found=:
7928e19dfac4Smrg		else
79297cea3689Smrg		  found=false
7930e19dfac4Smrg		fi
7931e19dfac4Smrg		break 2
7932e19dfac4Smrg	      fi
7933e19dfac4Smrg	    done
7934e19dfac4Smrg	  done
79357cea3689Smrg	  if $found; then
79367cea3689Smrg	    # deplib is a libtool library
7937e19dfac4Smrg	    # If $allow_libtool_libs_with_static_runtimes && $deplib is a stdlib,
7938e19dfac4Smrg	    # We need to do some special things here, and not later.
79397cea3689Smrg	    if test yes = "$allow_libtool_libs_with_static_runtimes"; then
7940e19dfac4Smrg	      case " $predeps $postdeps " in
7941e19dfac4Smrg	      *" $deplib "*)
7942e19dfac4Smrg		if func_lalib_p "$lib"; then
7943e19dfac4Smrg		  library_names=
7944e19dfac4Smrg		  old_library=
7945e19dfac4Smrg		  func_source "$lib"
7946e19dfac4Smrg		  for l in $old_library $library_names; do
79477cea3689Smrg		    ll=$l
7948e19dfac4Smrg		  done
79497cea3689Smrg		  if test "X$ll" = "X$old_library"; then # only static version available
79507cea3689Smrg		    found=false
7951e19dfac4Smrg		    func_dirname "$lib" "" "."
79527cea3689Smrg		    ladir=$func_dirname_result
7953e19dfac4Smrg		    lib=$ladir/$old_library
79547cea3689Smrg		    if test prog,link = "$linkmode,$pass"; then
7955e19dfac4Smrg		      compile_deplibs="$deplib $compile_deplibs"
7956e19dfac4Smrg		      finalize_deplibs="$deplib $finalize_deplibs"
7957e19dfac4Smrg		    else
7958e19dfac4Smrg		      deplibs="$deplib $deplibs"
79597cea3689Smrg		      test lib = "$linkmode" && newdependency_libs="$deplib $newdependency_libs"
7960e19dfac4Smrg		    fi
7961e19dfac4Smrg		    continue
7962e19dfac4Smrg		  fi
7963e19dfac4Smrg		fi
7964e19dfac4Smrg		;;
7965e19dfac4Smrg	      *) ;;
7966e19dfac4Smrg	      esac
7967e19dfac4Smrg	    fi
79687cea3689Smrg	  else
79697cea3689Smrg	    # deplib doesn't seem to be a libtool library
79707cea3689Smrg	    if test prog,link = "$linkmode,$pass"; then
79717cea3689Smrg	      compile_deplibs="$deplib $compile_deplibs"
79727cea3689Smrg	      finalize_deplibs="$deplib $finalize_deplibs"
79737cea3689Smrg	    else
79747cea3689Smrg	      deplibs="$deplib $deplibs"
79757cea3689Smrg	      test lib = "$linkmode" && newdependency_libs="$deplib $newdependency_libs"
79767cea3689Smrg	    fi
79777cea3689Smrg	    continue
7978e19dfac4Smrg	  fi
7979e19dfac4Smrg	  ;; # -l
7980e19dfac4Smrg	*.ltframework)
79817cea3689Smrg	  if test prog,link = "$linkmode,$pass"; then
7982e19dfac4Smrg	    compile_deplibs="$deplib $compile_deplibs"
7983e19dfac4Smrg	    finalize_deplibs="$deplib $finalize_deplibs"
7984e19dfac4Smrg	  else
7985e19dfac4Smrg	    deplibs="$deplib $deplibs"
79867cea3689Smrg	    if test lib = "$linkmode"; then
7987e19dfac4Smrg		case "$new_inherited_linker_flags " in
7988e19dfac4Smrg		    *" $deplib "*) ;;
7989313a12fdSmrg		    * ) func_append new_inherited_linker_flags " $deplib" ;;
7990e19dfac4Smrg		esac
7991e19dfac4Smrg	    fi
7992e19dfac4Smrg	  fi
7993e19dfac4Smrg	  continue
7994e19dfac4Smrg	  ;;
7995e19dfac4Smrg	-L*)
7996e19dfac4Smrg	  case $linkmode in
7997e19dfac4Smrg	  lib)
7998e19dfac4Smrg	    deplibs="$deplib $deplibs"
79997cea3689Smrg	    test conv = "$pass" && continue
8000e19dfac4Smrg	    newdependency_libs="$deplib $newdependency_libs"
8001e19dfac4Smrg	    func_stripname '-L' '' "$deplib"
8002313a12fdSmrg	    func_resolve_sysroot "$func_stripname_result"
8003313a12fdSmrg	    func_append newlib_search_path " $func_resolve_sysroot_result"
8004e19dfac4Smrg	    ;;
8005e19dfac4Smrg	  prog)
80067cea3689Smrg	    if test conv = "$pass"; then
8007e19dfac4Smrg	      deplibs="$deplib $deplibs"
8008e19dfac4Smrg	      continue
8009e19dfac4Smrg	    fi
80107cea3689Smrg	    if test scan = "$pass"; then
8011e19dfac4Smrg	      deplibs="$deplib $deplibs"
8012e19dfac4Smrg	    else
8013e19dfac4Smrg	      compile_deplibs="$deplib $compile_deplibs"
8014e19dfac4Smrg	      finalize_deplibs="$deplib $finalize_deplibs"
8015e19dfac4Smrg	    fi
8016e19dfac4Smrg	    func_stripname '-L' '' "$deplib"
8017313a12fdSmrg	    func_resolve_sysroot "$func_stripname_result"
8018313a12fdSmrg	    func_append newlib_search_path " $func_resolve_sysroot_result"
8019e19dfac4Smrg	    ;;
8020e19dfac4Smrg	  *)
80217cea3689Smrg	    func_warning "'-L' is ignored for archives/objects"
8022e19dfac4Smrg	    ;;
8023e19dfac4Smrg	  esac # linkmode
8024e19dfac4Smrg	  continue
8025e19dfac4Smrg	  ;; # -L
8026e19dfac4Smrg	-R*)
80277cea3689Smrg	  if test link = "$pass"; then
8028e19dfac4Smrg	    func_stripname '-R' '' "$deplib"
8029313a12fdSmrg	    func_resolve_sysroot "$func_stripname_result"
8030313a12fdSmrg	    dir=$func_resolve_sysroot_result
8031e19dfac4Smrg	    # Make sure the xrpath contains only unique directories.
8032e19dfac4Smrg	    case "$xrpath " in
8033e19dfac4Smrg	    *" $dir "*) ;;
8034313a12fdSmrg	    *) func_append xrpath " $dir" ;;
8035e19dfac4Smrg	    esac
8036e19dfac4Smrg	  fi
8037e19dfac4Smrg	  deplibs="$deplib $deplibs"
8038e19dfac4Smrg	  continue
8039e19dfac4Smrg	  ;;
8040313a12fdSmrg	*.la)
8041313a12fdSmrg	  func_resolve_sysroot "$deplib"
8042313a12fdSmrg	  lib=$func_resolve_sysroot_result
8043313a12fdSmrg	  ;;
8044e19dfac4Smrg	*.$libext)
80457cea3689Smrg	  if test conv = "$pass"; then
8046e19dfac4Smrg	    deplibs="$deplib $deplibs"
8047e19dfac4Smrg	    continue
8048e19dfac4Smrg	  fi
8049e19dfac4Smrg	  case $linkmode in
8050e19dfac4Smrg	  lib)
8051e19dfac4Smrg	    # Linking convenience modules into shared libraries is allowed,
8052e19dfac4Smrg	    # but linking other static libraries is non-portable.
8053e19dfac4Smrg	    case " $dlpreconveniencelibs " in
8054e19dfac4Smrg	    *" $deplib "*) ;;
8055e19dfac4Smrg	    *)
80567cea3689Smrg	      valid_a_lib=false
8057e19dfac4Smrg	      case $deplibs_check_method in
8058e19dfac4Smrg		match_pattern*)
8059e19dfac4Smrg		  set dummy $deplibs_check_method; shift
8060e19dfac4Smrg		  match_pattern_regex=`expr "$deplibs_check_method" : "$1 \(.*\)"`
8061313a12fdSmrg		  if eval "\$ECHO \"$deplib\"" 2>/dev/null | $SED 10q \
8062e19dfac4Smrg		    | $EGREP "$match_pattern_regex" > /dev/null; then
80637cea3689Smrg		    valid_a_lib=:
8064e19dfac4Smrg		  fi
8065e19dfac4Smrg		;;
8066e19dfac4Smrg		pass_all)
80677cea3689Smrg		  valid_a_lib=:
8068e19dfac4Smrg		;;
8069e19dfac4Smrg	      esac
80707cea3689Smrg	      if $valid_a_lib; then
80717cea3689Smrg		echo
80727cea3689Smrg		$ECHO "*** Warning: Linking the shared library $output against the"
80737cea3689Smrg		$ECHO "*** static library $deplib is not portable!"
80747cea3689Smrg		deplibs="$deplib $deplibs"
80757cea3689Smrg	      else
8076313a12fdSmrg		echo
8077e19dfac4Smrg		$ECHO "*** Warning: Trying to link with static lib archive $deplib."
8078313a12fdSmrg		echo "*** I have the capability to make that library automatically link in when"
8079313a12fdSmrg		echo "*** you link to this library.  But I can only do this if you have a"
8080313a12fdSmrg		echo "*** shared version of the library, which you do not appear to have"
8081313a12fdSmrg		echo "*** because the file extensions .$libext of this argument makes me believe"
8082313a12fdSmrg		echo "*** that it is just a static archive that I should not use here."
8083e19dfac4Smrg	      fi
8084e19dfac4Smrg	      ;;
8085e19dfac4Smrg	    esac
8086e19dfac4Smrg	    continue
8087e19dfac4Smrg	    ;;
8088e19dfac4Smrg	  prog)
80897cea3689Smrg	    if test link != "$pass"; then
8090e19dfac4Smrg	      deplibs="$deplib $deplibs"
8091e19dfac4Smrg	    else
8092e19dfac4Smrg	      compile_deplibs="$deplib $compile_deplibs"
8093e19dfac4Smrg	      finalize_deplibs="$deplib $finalize_deplibs"
8094e19dfac4Smrg	    fi
8095e19dfac4Smrg	    continue
8096e19dfac4Smrg	    ;;
8097e19dfac4Smrg	  esac # linkmode
8098e19dfac4Smrg	  ;; # *.$libext
8099e19dfac4Smrg	*.lo | *.$objext)
81007cea3689Smrg	  if test conv = "$pass"; then
8101e19dfac4Smrg	    deplibs="$deplib $deplibs"
81027cea3689Smrg	  elif test prog = "$linkmode"; then
81037cea3689Smrg	    if test dlpreopen = "$pass" || test yes != "$dlopen_support" || test no = "$build_libtool_libs"; then
8104e19dfac4Smrg	      # If there is no dlopen support or we're linking statically,
8105e19dfac4Smrg	      # we need to preload.
8106313a12fdSmrg	      func_append newdlprefiles " $deplib"
8107e19dfac4Smrg	      compile_deplibs="$deplib $compile_deplibs"
8108e19dfac4Smrg	      finalize_deplibs="$deplib $finalize_deplibs"
8109e19dfac4Smrg	    else
8110313a12fdSmrg	      func_append newdlfiles " $deplib"
8111e19dfac4Smrg	    fi
8112e19dfac4Smrg	  fi
8113e19dfac4Smrg	  continue
8114e19dfac4Smrg	  ;;
8115e19dfac4Smrg	%DEPLIBS%)
81167cea3689Smrg	  alldeplibs=:
8117e19dfac4Smrg	  continue
8118e19dfac4Smrg	  ;;
8119e19dfac4Smrg	esac # case $deplib
8120e19dfac4Smrg
81217cea3689Smrg	$found || test -f "$lib" \
81227cea3689Smrg	  || func_fatal_error "cannot find the library '$lib' or unhandled argument '$deplib'"
8123e19dfac4Smrg
8124e19dfac4Smrg	# Check to see that this really is a libtool archive.
8125e19dfac4Smrg	func_lalib_unsafe_p "$lib" \
81267cea3689Smrg	  || func_fatal_error "'$lib' is not a valid libtool archive"
8127e19dfac4Smrg
8128e19dfac4Smrg	func_dirname "$lib" "" "."
81297cea3689Smrg	ladir=$func_dirname_result
8130e19dfac4Smrg
8131e19dfac4Smrg	dlname=
8132e19dfac4Smrg	dlopen=
8133e19dfac4Smrg	dlpreopen=
8134e19dfac4Smrg	libdir=
8135e19dfac4Smrg	library_names=
8136e19dfac4Smrg	old_library=
8137e19dfac4Smrg	inherited_linker_flags=
8138e19dfac4Smrg	# If the library was installed with an old release of libtool,
8139e19dfac4Smrg	# it will not redefine variables installed, or shouldnotlink
8140e19dfac4Smrg	installed=yes
8141e19dfac4Smrg	shouldnotlink=no
8142e19dfac4Smrg	avoidtemprpath=
8143e19dfac4Smrg
8144e19dfac4Smrg
8145e19dfac4Smrg	# Read the .la file
8146e19dfac4Smrg	func_source "$lib"
8147e19dfac4Smrg
8148e19dfac4Smrg	# Convert "-framework foo" to "foo.ltframework"
8149e19dfac4Smrg	if test -n "$inherited_linker_flags"; then
8150313a12fdSmrg	  tmp_inherited_linker_flags=`$ECHO "$inherited_linker_flags" | $SED 's/-framework \([^ $]*\)/\1.ltframework/g'`
8151e19dfac4Smrg	  for tmp_inherited_linker_flag in $tmp_inherited_linker_flags; do
8152e19dfac4Smrg	    case " $new_inherited_linker_flags " in
8153e19dfac4Smrg	      *" $tmp_inherited_linker_flag "*) ;;
8154313a12fdSmrg	      *) func_append new_inherited_linker_flags " $tmp_inherited_linker_flag";;
8155e19dfac4Smrg	    esac
8156e19dfac4Smrg	  done
8157e19dfac4Smrg	fi
8158313a12fdSmrg	dependency_libs=`$ECHO " $dependency_libs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'`
81597cea3689Smrg	if test lib,link = "$linkmode,$pass" ||
81607cea3689Smrg	   test prog,scan = "$linkmode,$pass" ||
81617cea3689Smrg	   { test prog != "$linkmode" && test lib != "$linkmode"; }; then
8162313a12fdSmrg	  test -n "$dlopen" && func_append dlfiles " $dlopen"
8163313a12fdSmrg	  test -n "$dlpreopen" && func_append dlprefiles " $dlpreopen"
8164e19dfac4Smrg	fi
8165e19dfac4Smrg
81667cea3689Smrg	if test conv = "$pass"; then
8167e19dfac4Smrg	  # Only check for convenience libraries
8168e19dfac4Smrg	  deplibs="$lib $deplibs"
8169e19dfac4Smrg	  if test -z "$libdir"; then
8170e19dfac4Smrg	    if test -z "$old_library"; then
81717cea3689Smrg	      func_fatal_error "cannot find name of link library for '$lib'"
8172e19dfac4Smrg	    fi
8173e19dfac4Smrg	    # It is a libtool convenience library, so add in its objects.
8174313a12fdSmrg	    func_append convenience " $ladir/$objdir/$old_library"
8175313a12fdSmrg	    func_append old_convenience " $ladir/$objdir/$old_library"
81767cea3689Smrg	  elif test prog != "$linkmode" && test lib != "$linkmode"; then
81777cea3689Smrg	    func_fatal_error "'$lib' is not a convenience library"
8178e19dfac4Smrg	  fi
8179313a12fdSmrg	  tmp_libs=
8180313a12fdSmrg	  for deplib in $dependency_libs; do
8181313a12fdSmrg	    deplibs="$deplib $deplibs"
81827cea3689Smrg	    if $opt_preserve_dup_deps; then
8183313a12fdSmrg	      case "$tmp_libs " in
8184313a12fdSmrg	      *" $deplib "*) func_append specialdeplibs " $deplib" ;;
8185313a12fdSmrg	      esac
8186313a12fdSmrg	    fi
8187313a12fdSmrg	    func_append tmp_libs " $deplib"
8188313a12fdSmrg	  done
8189e19dfac4Smrg	  continue
8190e19dfac4Smrg	fi # $pass = conv
8191e19dfac4Smrg
8192e19dfac4Smrg
8193e19dfac4Smrg	# Get the name of the library we link against.
8194e19dfac4Smrg	linklib=
8195313a12fdSmrg	if test -n "$old_library" &&
81967cea3689Smrg	   { test yes = "$prefer_static_libs" ||
81977cea3689Smrg	     test built,no = "$prefer_static_libs,$installed"; }; then
8198313a12fdSmrg	  linklib=$old_library
8199313a12fdSmrg	else
8200313a12fdSmrg	  for l in $old_library $library_names; do
82017cea3689Smrg	    linklib=$l
8202313a12fdSmrg	  done
8203313a12fdSmrg	fi
8204e19dfac4Smrg	if test -z "$linklib"; then
82057cea3689Smrg	  func_fatal_error "cannot find name of link library for '$lib'"
8206e19dfac4Smrg	fi
8207e19dfac4Smrg
8208e19dfac4Smrg	# This library was specified with -dlopen.
82097cea3689Smrg	if test dlopen = "$pass"; then
82107cea3689Smrg	  test -z "$libdir" \
82117cea3689Smrg	    && func_fatal_error "cannot -dlopen a convenience library: '$lib'"
8212e19dfac4Smrg	  if test -z "$dlname" ||
82137cea3689Smrg	     test yes != "$dlopen_support" ||
82147cea3689Smrg	     test no = "$build_libtool_libs"
82157cea3689Smrg	  then
8216e19dfac4Smrg	    # If there is no dlname, no dlopen support or we're linking
8217e19dfac4Smrg	    # statically, we need to preload.  We also need to preload any
8218e19dfac4Smrg	    # dependent libraries so libltdl's deplib preloader doesn't
8219e19dfac4Smrg	    # bomb out in the load deplibs phase.
8220313a12fdSmrg	    func_append dlprefiles " $lib $dependency_libs"
8221e19dfac4Smrg	  else
8222313a12fdSmrg	    func_append newdlfiles " $lib"
8223e19dfac4Smrg	  fi
8224e19dfac4Smrg	  continue
8225e19dfac4Smrg	fi # $pass = dlopen
8226e19dfac4Smrg
8227e19dfac4Smrg	# We need an absolute path.
8228e19dfac4Smrg	case $ladir in
82297cea3689Smrg	[\\/]* | [A-Za-z]:[\\/]*) abs_ladir=$ladir ;;
8230e19dfac4Smrg	*)
8231e19dfac4Smrg	  abs_ladir=`cd "$ladir" && pwd`
8232e19dfac4Smrg	  if test -z "$abs_ladir"; then
82337cea3689Smrg	    func_warning "cannot determine absolute directory name of '$ladir'"
8234e19dfac4Smrg	    func_warning "passing it literally to the linker, although it might fail"
82357cea3689Smrg	    abs_ladir=$ladir
8236e19dfac4Smrg	  fi
8237e19dfac4Smrg	  ;;
8238e19dfac4Smrg	esac
8239e19dfac4Smrg	func_basename "$lib"
82407cea3689Smrg	laname=$func_basename_result
8241e19dfac4Smrg
8242e19dfac4Smrg	# Find the relevant object directory and library name.
82437cea3689Smrg	if test yes = "$installed"; then
8244313a12fdSmrg	  if test ! -f "$lt_sysroot$libdir/$linklib" && test -f "$abs_ladir/$linklib"; then
82457cea3689Smrg	    func_warning "library '$lib' was moved."
82467cea3689Smrg	    dir=$ladir
82477cea3689Smrg	    absdir=$abs_ladir
82487cea3689Smrg	    libdir=$abs_ladir
8249e19dfac4Smrg	  else
82507cea3689Smrg	    dir=$lt_sysroot$libdir
82517cea3689Smrg	    absdir=$lt_sysroot$libdir
8252e19dfac4Smrg	  fi
82537cea3689Smrg	  test yes = "$hardcode_automatic" && avoidtemprpath=yes
8254e19dfac4Smrg	else
8255e19dfac4Smrg	  if test ! -f "$ladir/$objdir/$linklib" && test -f "$abs_ladir/$linklib"; then
82567cea3689Smrg	    dir=$ladir
82577cea3689Smrg	    absdir=$abs_ladir
8258e19dfac4Smrg	    # Remove this search path later
8259313a12fdSmrg	    func_append notinst_path " $abs_ladir"
8260e19dfac4Smrg	  else
82617cea3689Smrg	    dir=$ladir/$objdir
82627cea3689Smrg	    absdir=$abs_ladir/$objdir
8263e19dfac4Smrg	    # Remove this search path later
8264313a12fdSmrg	    func_append notinst_path " $abs_ladir"
8265e19dfac4Smrg	  fi
8266e19dfac4Smrg	fi # $installed = yes
8267e19dfac4Smrg	func_stripname 'lib' '.la' "$laname"
8268e19dfac4Smrg	name=$func_stripname_result
8269e19dfac4Smrg
8270e19dfac4Smrg	# This library was specified with -dlpreopen.
82717cea3689Smrg	if test dlpreopen = "$pass"; then
82727cea3689Smrg	  if test -z "$libdir" && test prog = "$linkmode"; then
82737cea3689Smrg	    func_fatal_error "only libraries may -dlpreopen a convenience library: '$lib'"
8274e19dfac4Smrg	  fi
82757cea3689Smrg	  case $host in
8276313a12fdSmrg	    # special handling for platforms with PE-DLLs.
8277313a12fdSmrg	    *cygwin* | *mingw* | *cegcc* )
8278313a12fdSmrg	      # Linker will automatically link against shared library if both
8279313a12fdSmrg	      # static and shared are present.  Therefore, ensure we extract
8280313a12fdSmrg	      # symbols from the import library if a shared library is present
8281313a12fdSmrg	      # (otherwise, the dlopen module name will be incorrect).  We do
8282313a12fdSmrg	      # this by putting the import library name into $newdlprefiles.
8283313a12fdSmrg	      # We recover the dlopen module name by 'saving' the la file
8284313a12fdSmrg	      # name in a special purpose variable, and (later) extracting the
8285313a12fdSmrg	      # dlname from the la file.
8286313a12fdSmrg	      if test -n "$dlname"; then
8287313a12fdSmrg	        func_tr_sh "$dir/$linklib"
8288313a12fdSmrg	        eval "libfile_$func_tr_sh_result=\$abs_ladir/\$laname"
8289313a12fdSmrg	        func_append newdlprefiles " $dir/$linklib"
8290313a12fdSmrg	      else
8291313a12fdSmrg	        func_append newdlprefiles " $dir/$old_library"
8292313a12fdSmrg	        # Keep a list of preopened convenience libraries to check
8293313a12fdSmrg	        # that they are being used correctly in the link pass.
8294313a12fdSmrg	        test -z "$libdir" && \
8295313a12fdSmrg	          func_append dlpreconveniencelibs " $dir/$old_library"
8296313a12fdSmrg	      fi
8297313a12fdSmrg	    ;;
8298313a12fdSmrg	    * )
8299313a12fdSmrg	      # Prefer using a static library (so that no silly _DYNAMIC symbols
8300313a12fdSmrg	      # are required to link).
8301313a12fdSmrg	      if test -n "$old_library"; then
8302313a12fdSmrg	        func_append newdlprefiles " $dir/$old_library"
8303313a12fdSmrg	        # Keep a list of preopened convenience libraries to check
8304313a12fdSmrg	        # that they are being used correctly in the link pass.
8305313a12fdSmrg	        test -z "$libdir" && \
8306313a12fdSmrg	          func_append dlpreconveniencelibs " $dir/$old_library"
8307313a12fdSmrg	      # Otherwise, use the dlname, so that lt_dlopen finds it.
8308313a12fdSmrg	      elif test -n "$dlname"; then
8309313a12fdSmrg	        func_append newdlprefiles " $dir/$dlname"
8310313a12fdSmrg	      else
8311313a12fdSmrg	        func_append newdlprefiles " $dir/$linklib"
8312313a12fdSmrg	      fi
8313313a12fdSmrg	    ;;
8314313a12fdSmrg	  esac
8315e19dfac4Smrg	fi # $pass = dlpreopen
8316e19dfac4Smrg
8317e19dfac4Smrg	if test -z "$libdir"; then
8318e19dfac4Smrg	  # Link the convenience library
83197cea3689Smrg	  if test lib = "$linkmode"; then
8320e19dfac4Smrg	    deplibs="$dir/$old_library $deplibs"
83217cea3689Smrg	  elif test prog,link = "$linkmode,$pass"; then
8322e19dfac4Smrg	    compile_deplibs="$dir/$old_library $compile_deplibs"
8323e19dfac4Smrg	    finalize_deplibs="$dir/$old_library $finalize_deplibs"
8324e19dfac4Smrg	  else
8325e19dfac4Smrg	    deplibs="$lib $deplibs" # used for prog,scan pass
8326e19dfac4Smrg	  fi
8327e19dfac4Smrg	  continue
8328e19dfac4Smrg	fi
8329e19dfac4Smrg
8330e19dfac4Smrg
83317cea3689Smrg	if test prog = "$linkmode" && test link != "$pass"; then
8332313a12fdSmrg	  func_append newlib_search_path " $ladir"
8333e19dfac4Smrg	  deplibs="$lib $deplibs"
8334e19dfac4Smrg
83357cea3689Smrg	  linkalldeplibs=false
83367cea3689Smrg	  if test no != "$link_all_deplibs" || test -z "$library_names" ||
83377cea3689Smrg	     test no = "$build_libtool_libs"; then
83387cea3689Smrg	    linkalldeplibs=:
8339e19dfac4Smrg	  fi
8340e19dfac4Smrg
8341e19dfac4Smrg	  tmp_libs=
8342e19dfac4Smrg	  for deplib in $dependency_libs; do
8343e19dfac4Smrg	    case $deplib in
8344e19dfac4Smrg	    -L*) func_stripname '-L' '' "$deplib"
8345313a12fdSmrg	         func_resolve_sysroot "$func_stripname_result"
8346313a12fdSmrg	         func_append newlib_search_path " $func_resolve_sysroot_result"
8347e19dfac4Smrg		 ;;
8348e19dfac4Smrg	    esac
8349e19dfac4Smrg	    # Need to link against all dependency_libs?
83507cea3689Smrg	    if $linkalldeplibs; then
8351e19dfac4Smrg	      deplibs="$deplib $deplibs"
8352e19dfac4Smrg	    else
8353e19dfac4Smrg	      # Need to hardcode shared library paths
8354e19dfac4Smrg	      # or/and link against static libraries
8355e19dfac4Smrg	      newdependency_libs="$deplib $newdependency_libs"
8356e19dfac4Smrg	    fi
83577cea3689Smrg	    if $opt_preserve_dup_deps; then
8358e19dfac4Smrg	      case "$tmp_libs " in
8359313a12fdSmrg	      *" $deplib "*) func_append specialdeplibs " $deplib" ;;
8360e19dfac4Smrg	      esac
8361e19dfac4Smrg	    fi
8362313a12fdSmrg	    func_append tmp_libs " $deplib"
8363e19dfac4Smrg	  done # for deplib
8364e19dfac4Smrg	  continue
8365e19dfac4Smrg	fi # $linkmode = prog...
8366e19dfac4Smrg
83677cea3689Smrg	if test prog,link = "$linkmode,$pass"; then
8368e19dfac4Smrg	  if test -n "$library_names" &&
83697cea3689Smrg	     { { test no = "$prefer_static_libs" ||
83707cea3689Smrg	         test built,yes = "$prefer_static_libs,$installed"; } ||
8371e19dfac4Smrg	       test -z "$old_library"; }; then
8372e19dfac4Smrg	    # We need to hardcode the library path
83737cea3689Smrg	    if test -n "$shlibpath_var" && test -z "$avoidtemprpath"; then
8374e19dfac4Smrg	      # Make sure the rpath contains only unique directories.
83757cea3689Smrg	      case $temp_rpath: in
8376e19dfac4Smrg	      *"$absdir:"*) ;;
8377313a12fdSmrg	      *) func_append temp_rpath "$absdir:" ;;
8378e19dfac4Smrg	      esac
8379e19dfac4Smrg	    fi
8380e19dfac4Smrg
8381e19dfac4Smrg	    # Hardcode the library path.
8382e19dfac4Smrg	    # Skip directories that are in the system default run-time
8383e19dfac4Smrg	    # search path.
8384e19dfac4Smrg	    case " $sys_lib_dlsearch_path " in
8385e19dfac4Smrg	    *" $absdir "*) ;;
8386e19dfac4Smrg	    *)
8387e19dfac4Smrg	      case "$compile_rpath " in
8388e19dfac4Smrg	      *" $absdir "*) ;;
8389313a12fdSmrg	      *) func_append compile_rpath " $absdir" ;;
8390e19dfac4Smrg	      esac
8391e19dfac4Smrg	      ;;
8392e19dfac4Smrg	    esac
8393e19dfac4Smrg	    case " $sys_lib_dlsearch_path " in
8394e19dfac4Smrg	    *" $libdir "*) ;;
8395e19dfac4Smrg	    *)
8396e19dfac4Smrg	      case "$finalize_rpath " in
8397e19dfac4Smrg	      *" $libdir "*) ;;
8398313a12fdSmrg	      *) func_append finalize_rpath " $libdir" ;;
8399e19dfac4Smrg	      esac
8400e19dfac4Smrg	      ;;
8401e19dfac4Smrg	    esac
8402e19dfac4Smrg	  fi # $linkmode,$pass = prog,link...
8403e19dfac4Smrg
84047cea3689Smrg	  if $alldeplibs &&
84057cea3689Smrg	     { test pass_all = "$deplibs_check_method" ||
84067cea3689Smrg	       { test yes = "$build_libtool_libs" &&
8407e19dfac4Smrg		 test -n "$library_names"; }; }; then
8408e19dfac4Smrg	    # We only need to search for static libraries
8409e19dfac4Smrg	    continue
8410e19dfac4Smrg	  fi
8411e19dfac4Smrg	fi
8412e19dfac4Smrg
8413e19dfac4Smrg	link_static=no # Whether the deplib will be linked statically
8414e19dfac4Smrg	use_static_libs=$prefer_static_libs
84157cea3689Smrg	if test built = "$use_static_libs" && test yes = "$installed"; then
8416e19dfac4Smrg	  use_static_libs=no
8417e19dfac4Smrg	fi
8418e19dfac4Smrg	if test -n "$library_names" &&
84197cea3689Smrg	   { test no = "$use_static_libs" || test -z "$old_library"; }; then
8420e19dfac4Smrg	  case $host in
84217cea3689Smrg	  *cygwin* | *mingw* | *cegcc* | *os2*)
8422e19dfac4Smrg	      # No point in relinking DLLs because paths are not encoded
8423313a12fdSmrg	      func_append notinst_deplibs " $lib"
8424e19dfac4Smrg	      need_relink=no
8425e19dfac4Smrg	    ;;
8426e19dfac4Smrg	  *)
84277cea3689Smrg	    if test no = "$installed"; then
8428313a12fdSmrg	      func_append notinst_deplibs " $lib"
8429e19dfac4Smrg	      need_relink=yes
8430e19dfac4Smrg	    fi
8431e19dfac4Smrg	    ;;
8432e19dfac4Smrg	  esac
8433e19dfac4Smrg	  # This is a shared library
8434e19dfac4Smrg
8435e19dfac4Smrg	  # Warn about portability, can't link against -module's on some
8436e19dfac4Smrg	  # systems (darwin).  Don't bleat about dlopened modules though!
84377cea3689Smrg	  dlopenmodule=
8438e19dfac4Smrg	  for dlpremoduletest in $dlprefiles; do
8439e19dfac4Smrg	    if test "X$dlpremoduletest" = "X$lib"; then
84407cea3689Smrg	      dlopenmodule=$dlpremoduletest
8441e19dfac4Smrg	      break
8442e19dfac4Smrg	    fi
8443e19dfac4Smrg	  done
84447cea3689Smrg	  if test -z "$dlopenmodule" && test yes = "$shouldnotlink" && test link = "$pass"; then
8445313a12fdSmrg	    echo
84467cea3689Smrg	    if test prog = "$linkmode"; then
8447e19dfac4Smrg	      $ECHO "*** Warning: Linking the executable $output against the loadable module"
8448e19dfac4Smrg	    else
8449e19dfac4Smrg	      $ECHO "*** Warning: Linking the shared library $output against the loadable module"
8450e19dfac4Smrg	    fi
8451e19dfac4Smrg	    $ECHO "*** $linklib is not portable!"
8452e19dfac4Smrg	  fi
84537cea3689Smrg	  if test lib = "$linkmode" &&
84547cea3689Smrg	     test yes = "$hardcode_into_libs"; then
8455e19dfac4Smrg	    # Hardcode the library path.
8456e19dfac4Smrg	    # Skip directories that are in the system default run-time
8457e19dfac4Smrg	    # search path.
8458e19dfac4Smrg	    case " $sys_lib_dlsearch_path " in
8459e19dfac4Smrg	    *" $absdir "*) ;;
8460e19dfac4Smrg	    *)
8461e19dfac4Smrg	      case "$compile_rpath " in
8462e19dfac4Smrg	      *" $absdir "*) ;;
8463313a12fdSmrg	      *) func_append compile_rpath " $absdir" ;;
8464e19dfac4Smrg	      esac
8465e19dfac4Smrg	      ;;
8466e19dfac4Smrg	    esac
8467e19dfac4Smrg	    case " $sys_lib_dlsearch_path " in
8468e19dfac4Smrg	    *" $libdir "*) ;;
8469e19dfac4Smrg	    *)
8470e19dfac4Smrg	      case "$finalize_rpath " in
8471e19dfac4Smrg	      *" $libdir "*) ;;
8472313a12fdSmrg	      *) func_append finalize_rpath " $libdir" ;;
8473e19dfac4Smrg	      esac
8474e19dfac4Smrg	      ;;
8475e19dfac4Smrg	    esac
8476e19dfac4Smrg	  fi
8477e19dfac4Smrg
8478e19dfac4Smrg	  if test -n "$old_archive_from_expsyms_cmds"; then
8479e19dfac4Smrg	    # figure out the soname
8480e19dfac4Smrg	    set dummy $library_names
8481e19dfac4Smrg	    shift
84827cea3689Smrg	    realname=$1
8483e19dfac4Smrg	    shift
8484e19dfac4Smrg	    libname=`eval "\\$ECHO \"$libname_spec\""`
8485e19dfac4Smrg	    # use dlname if we got it. it's perfectly good, no?
8486e19dfac4Smrg	    if test -n "$dlname"; then
84877cea3689Smrg	      soname=$dlname
8488e19dfac4Smrg	    elif test -n "$soname_spec"; then
8489e19dfac4Smrg	      # bleh windows
8490e19dfac4Smrg	      case $host in
84917cea3689Smrg	      *cygwin* | mingw* | *cegcc* | *os2*)
8492e19dfac4Smrg	        func_arith $current - $age
8493e19dfac4Smrg		major=$func_arith_result
84947cea3689Smrg		versuffix=-$major
8495e19dfac4Smrg		;;
8496e19dfac4Smrg	      esac
8497e19dfac4Smrg	      eval soname=\"$soname_spec\"
8498e19dfac4Smrg	    else
84997cea3689Smrg	      soname=$realname
8500e19dfac4Smrg	    fi
8501e19dfac4Smrg
8502e19dfac4Smrg	    # Make a new name for the extract_expsyms_cmds to use
85037cea3689Smrg	    soroot=$soname
8504e19dfac4Smrg	    func_basename "$soroot"
85057cea3689Smrg	    soname=$func_basename_result
8506e19dfac4Smrg	    func_stripname 'lib' '.dll' "$soname"
8507e19dfac4Smrg	    newlib=libimp-$func_stripname_result.a
8508e19dfac4Smrg
8509e19dfac4Smrg	    # If the library has no export list, then create one now
8510e19dfac4Smrg	    if test -f "$output_objdir/$soname-def"; then :
8511e19dfac4Smrg	    else
85127cea3689Smrg	      func_verbose "extracting exported symbol list from '$soname'"
8513e19dfac4Smrg	      func_execute_cmds "$extract_expsyms_cmds" 'exit $?'
8514e19dfac4Smrg	    fi
8515e19dfac4Smrg
8516e19dfac4Smrg	    # Create $newlib
8517e19dfac4Smrg	    if test -f "$output_objdir/$newlib"; then :; else
85187cea3689Smrg	      func_verbose "generating import library for '$soname'"
8519e19dfac4Smrg	      func_execute_cmds "$old_archive_from_expsyms_cmds" 'exit $?'
8520e19dfac4Smrg	    fi
8521e19dfac4Smrg	    # make sure the library variables are pointing to the new library
8522e19dfac4Smrg	    dir=$output_objdir
8523e19dfac4Smrg	    linklib=$newlib
8524e19dfac4Smrg	  fi # test -n "$old_archive_from_expsyms_cmds"
8525e19dfac4Smrg
85267cea3689Smrg	  if test prog = "$linkmode" || test relink != "$opt_mode"; then
8527e19dfac4Smrg	    add_shlibpath=
8528e19dfac4Smrg	    add_dir=
8529e19dfac4Smrg	    add=
8530e19dfac4Smrg	    lib_linked=yes
8531e19dfac4Smrg	    case $hardcode_action in
8532e19dfac4Smrg	    immediate | unsupported)
85337cea3689Smrg	      if test no = "$hardcode_direct"; then
85347cea3689Smrg		add=$dir/$linklib
8535e19dfac4Smrg		case $host in
85367cea3689Smrg		  *-*-sco3.2v5.0.[024]*) add_dir=-L$dir ;;
85377cea3689Smrg		  *-*-sysv4*uw2*) add_dir=-L$dir ;;
8538e19dfac4Smrg		  *-*-sysv5OpenUNIX* | *-*-sysv5UnixWare7.[01].[10]* | \
85397cea3689Smrg		    *-*-unixware7*) add_dir=-L$dir ;;
8540e19dfac4Smrg		  *-*-darwin* )
85417cea3689Smrg		    # if the lib is a (non-dlopened) module then we cannot
8542e19dfac4Smrg		    # link against it, someone is ignoring the earlier warnings
8543e19dfac4Smrg		    if /usr/bin/file -L $add 2> /dev/null |
85447cea3689Smrg			 $GREP ": [^:]* bundle" >/dev/null; then
8545e19dfac4Smrg		      if test "X$dlopenmodule" != "X$lib"; then
8546e19dfac4Smrg			$ECHO "*** Warning: lib $linklib is a module, not a shared library"
85477cea3689Smrg			if test -z "$old_library"; then
8548313a12fdSmrg			  echo
8549313a12fdSmrg			  echo "*** And there doesn't seem to be a static archive available"
8550313a12fdSmrg			  echo "*** The link will probably fail, sorry"
8551e19dfac4Smrg			else
85527cea3689Smrg			  add=$dir/$old_library
8553e19dfac4Smrg			fi
8554e19dfac4Smrg		      elif test -n "$old_library"; then
85557cea3689Smrg			add=$dir/$old_library
8556e19dfac4Smrg		      fi
8557e19dfac4Smrg		    fi
8558e19dfac4Smrg		esac
85597cea3689Smrg	      elif test no = "$hardcode_minus_L"; then
8560e19dfac4Smrg		case $host in
85617cea3689Smrg		*-*-sunos*) add_shlibpath=$dir ;;
8562e19dfac4Smrg		esac
85637cea3689Smrg		add_dir=-L$dir
85647cea3689Smrg		add=-l$name
85657cea3689Smrg	      elif test no = "$hardcode_shlibpath_var"; then
85667cea3689Smrg		add_shlibpath=$dir
85677cea3689Smrg		add=-l$name
8568e19dfac4Smrg	      else
8569e19dfac4Smrg		lib_linked=no
8570e19dfac4Smrg	      fi
8571e19dfac4Smrg	      ;;
8572e19dfac4Smrg	    relink)
85737cea3689Smrg	      if test yes = "$hardcode_direct" &&
85747cea3689Smrg	         test no = "$hardcode_direct_absolute"; then
85757cea3689Smrg		add=$dir/$linklib
85767cea3689Smrg	      elif test yes = "$hardcode_minus_L"; then
85777cea3689Smrg		add_dir=-L$absdir
8578e19dfac4Smrg		# Try looking first in the location we're being installed to.
8579e19dfac4Smrg		if test -n "$inst_prefix_dir"; then
8580e19dfac4Smrg		  case $libdir in
8581e19dfac4Smrg		    [\\/]*)
8582313a12fdSmrg		      func_append add_dir " -L$inst_prefix_dir$libdir"
8583e19dfac4Smrg		      ;;
8584e19dfac4Smrg		  esac
8585e19dfac4Smrg		fi
85867cea3689Smrg		add=-l$name
85877cea3689Smrg	      elif test yes = "$hardcode_shlibpath_var"; then
85887cea3689Smrg		add_shlibpath=$dir
85897cea3689Smrg		add=-l$name
8590e19dfac4Smrg	      else
8591e19dfac4Smrg		lib_linked=no
8592e19dfac4Smrg	      fi
8593e19dfac4Smrg	      ;;
8594e19dfac4Smrg	    *) lib_linked=no ;;
8595e19dfac4Smrg	    esac
8596e19dfac4Smrg
85977cea3689Smrg	    if test yes != "$lib_linked"; then
8598e19dfac4Smrg	      func_fatal_configuration "unsupported hardcode properties"
8599e19dfac4Smrg	    fi
8600e19dfac4Smrg
8601e19dfac4Smrg	    if test -n "$add_shlibpath"; then
8602e19dfac4Smrg	      case :$compile_shlibpath: in
8603e19dfac4Smrg	      *":$add_shlibpath:"*) ;;
8604313a12fdSmrg	      *) func_append compile_shlibpath "$add_shlibpath:" ;;
8605e19dfac4Smrg	      esac
8606e19dfac4Smrg	    fi
86077cea3689Smrg	    if test prog = "$linkmode"; then
8608e19dfac4Smrg	      test -n "$add_dir" && compile_deplibs="$add_dir $compile_deplibs"
8609e19dfac4Smrg	      test -n "$add" && compile_deplibs="$add $compile_deplibs"
8610e19dfac4Smrg	    else
8611e19dfac4Smrg	      test -n "$add_dir" && deplibs="$add_dir $deplibs"
8612e19dfac4Smrg	      test -n "$add" && deplibs="$add $deplibs"
86137cea3689Smrg	      if test yes != "$hardcode_direct" &&
86147cea3689Smrg		 test yes != "$hardcode_minus_L" &&
86157cea3689Smrg		 test yes = "$hardcode_shlibpath_var"; then
8616e19dfac4Smrg		case :$finalize_shlibpath: in
8617e19dfac4Smrg		*":$libdir:"*) ;;
8618313a12fdSmrg		*) func_append finalize_shlibpath "$libdir:" ;;
8619e19dfac4Smrg		esac
8620e19dfac4Smrg	      fi
8621e19dfac4Smrg	    fi
8622e19dfac4Smrg	  fi
8623e19dfac4Smrg
86247cea3689Smrg	  if test prog = "$linkmode" || test relink = "$opt_mode"; then
8625e19dfac4Smrg	    add_shlibpath=
8626e19dfac4Smrg	    add_dir=
8627e19dfac4Smrg	    add=
8628e19dfac4Smrg	    # Finalize command for both is simple: just hardcode it.
86297cea3689Smrg	    if test yes = "$hardcode_direct" &&
86307cea3689Smrg	       test no = "$hardcode_direct_absolute"; then
86317cea3689Smrg	      add=$libdir/$linklib
86327cea3689Smrg	    elif test yes = "$hardcode_minus_L"; then
86337cea3689Smrg	      add_dir=-L$libdir
86347cea3689Smrg	      add=-l$name
86357cea3689Smrg	    elif test yes = "$hardcode_shlibpath_var"; then
8636e19dfac4Smrg	      case :$finalize_shlibpath: in
8637e19dfac4Smrg	      *":$libdir:"*) ;;
8638313a12fdSmrg	      *) func_append finalize_shlibpath "$libdir:" ;;
8639e19dfac4Smrg	      esac
86407cea3689Smrg	      add=-l$name
86417cea3689Smrg	    elif test yes = "$hardcode_automatic"; then
8642e19dfac4Smrg	      if test -n "$inst_prefix_dir" &&
86437cea3689Smrg		 test -f "$inst_prefix_dir$libdir/$linklib"; then
86447cea3689Smrg		add=$inst_prefix_dir$libdir/$linklib
8645e19dfac4Smrg	      else
86467cea3689Smrg		add=$libdir/$linklib
8647e19dfac4Smrg	      fi
8648e19dfac4Smrg	    else
8649e19dfac4Smrg	      # We cannot seem to hardcode it, guess we'll fake it.
86507cea3689Smrg	      add_dir=-L$libdir
8651e19dfac4Smrg	      # Try looking first in the location we're being installed to.
8652e19dfac4Smrg	      if test -n "$inst_prefix_dir"; then
8653e19dfac4Smrg		case $libdir in
8654e19dfac4Smrg		  [\\/]*)
8655313a12fdSmrg		    func_append add_dir " -L$inst_prefix_dir$libdir"
8656e19dfac4Smrg		    ;;
8657e19dfac4Smrg		esac
8658e19dfac4Smrg	      fi
86597cea3689Smrg	      add=-l$name
8660e19dfac4Smrg	    fi
8661e19dfac4Smrg
86627cea3689Smrg	    if test prog = "$linkmode"; then
8663e19dfac4Smrg	      test -n "$add_dir" && finalize_deplibs="$add_dir $finalize_deplibs"
8664e19dfac4Smrg	      test -n "$add" && finalize_deplibs="$add $finalize_deplibs"
8665e19dfac4Smrg	    else
8666e19dfac4Smrg	      test -n "$add_dir" && deplibs="$add_dir $deplibs"
8667e19dfac4Smrg	      test -n "$add" && deplibs="$add $deplibs"
8668e19dfac4Smrg	    fi
8669e19dfac4Smrg	  fi
86707cea3689Smrg	elif test prog = "$linkmode"; then
8671e19dfac4Smrg	  # Here we assume that one of hardcode_direct or hardcode_minus_L
8672e19dfac4Smrg	  # is not unsupported.  This is valid on all known static and
8673e19dfac4Smrg	  # shared platforms.
86747cea3689Smrg	  if test unsupported != "$hardcode_direct"; then
86757cea3689Smrg	    test -n "$old_library" && linklib=$old_library
8676e19dfac4Smrg	    compile_deplibs="$dir/$linklib $compile_deplibs"
8677e19dfac4Smrg	    finalize_deplibs="$dir/$linklib $finalize_deplibs"
8678e19dfac4Smrg	  else
8679e19dfac4Smrg	    compile_deplibs="-l$name -L$dir $compile_deplibs"
8680e19dfac4Smrg	    finalize_deplibs="-l$name -L$dir $finalize_deplibs"
8681e19dfac4Smrg	  fi
86827cea3689Smrg	elif test yes = "$build_libtool_libs"; then
8683e19dfac4Smrg	  # Not a shared library
86847cea3689Smrg	  if test pass_all != "$deplibs_check_method"; then
8685e19dfac4Smrg	    # We're trying link a shared library against a static one
8686e19dfac4Smrg	    # but the system doesn't support it.
8687e19dfac4Smrg
8688e19dfac4Smrg	    # Just print a warning and add the library to dependency_libs so
8689e19dfac4Smrg	    # that the program can be linked against the static library.
8690313a12fdSmrg	    echo
86917cea3689Smrg	    $ECHO "*** Warning: This system cannot link to static lib archive $lib."
8692313a12fdSmrg	    echo "*** I have the capability to make that library automatically link in when"
8693313a12fdSmrg	    echo "*** you link to this library.  But I can only do this if you have a"
8694313a12fdSmrg	    echo "*** shared version of the library, which you do not appear to have."
86957cea3689Smrg	    if test yes = "$module"; then
8696313a12fdSmrg	      echo "*** But as you try to build a module library, libtool will still create "
8697313a12fdSmrg	      echo "*** a static module, that should work as long as the dlopening application"
8698313a12fdSmrg	      echo "*** is linked with the -dlopen flag to resolve symbols at runtime."
8699e19dfac4Smrg	      if test -z "$global_symbol_pipe"; then
8700313a12fdSmrg		echo
8701313a12fdSmrg		echo "*** However, this would only work if libtool was able to extract symbol"
87027cea3689Smrg		echo "*** lists from a program, using 'nm' or equivalent, but libtool could"
8703313a12fdSmrg		echo "*** not find such a program.  So, this module is probably useless."
87047cea3689Smrg		echo "*** 'nm' from GNU binutils and a full rebuild may help."
8705e19dfac4Smrg	      fi
87067cea3689Smrg	      if test no = "$build_old_libs"; then
8707e19dfac4Smrg		build_libtool_libs=module
8708e19dfac4Smrg		build_old_libs=yes
8709e19dfac4Smrg	      else
8710e19dfac4Smrg		build_libtool_libs=no
8711e19dfac4Smrg	      fi
8712e19dfac4Smrg	    fi
8713e19dfac4Smrg	  else
8714e19dfac4Smrg	    deplibs="$dir/$old_library $deplibs"
8715e19dfac4Smrg	    link_static=yes
8716e19dfac4Smrg	  fi
8717e19dfac4Smrg	fi # link shared/static library?
8718e19dfac4Smrg
87197cea3689Smrg	if test lib = "$linkmode"; then
8720e19dfac4Smrg	  if test -n "$dependency_libs" &&
87217cea3689Smrg	     { test yes != "$hardcode_into_libs" ||
87227cea3689Smrg	       test yes = "$build_old_libs" ||
87237cea3689Smrg	       test yes = "$link_static"; }; then
8724e19dfac4Smrg	    # Extract -R from dependency_libs
8725e19dfac4Smrg	    temp_deplibs=
8726e19dfac4Smrg	    for libdir in $dependency_libs; do
8727e19dfac4Smrg	      case $libdir in
8728e19dfac4Smrg	      -R*) func_stripname '-R' '' "$libdir"
8729e19dfac4Smrg	           temp_xrpath=$func_stripname_result
8730e19dfac4Smrg		   case " $xrpath " in
8731e19dfac4Smrg		   *" $temp_xrpath "*) ;;
8732313a12fdSmrg		   *) func_append xrpath " $temp_xrpath";;
8733e19dfac4Smrg		   esac;;
8734313a12fdSmrg	      *) func_append temp_deplibs " $libdir";;
8735e19dfac4Smrg	      esac
8736e19dfac4Smrg	    done
87377cea3689Smrg	    dependency_libs=$temp_deplibs
8738e19dfac4Smrg	  fi
8739e19dfac4Smrg
8740313a12fdSmrg	  func_append newlib_search_path " $absdir"
8741e19dfac4Smrg	  # Link against this library
87427cea3689Smrg	  test no = "$link_static" && newdependency_libs="$abs_ladir/$laname $newdependency_libs"
8743e19dfac4Smrg	  # ... and its dependency_libs
8744e19dfac4Smrg	  tmp_libs=
8745e19dfac4Smrg	  for deplib in $dependency_libs; do
8746e19dfac4Smrg	    newdependency_libs="$deplib $newdependency_libs"
8747313a12fdSmrg	    case $deplib in
8748313a12fdSmrg              -L*) func_stripname '-L' '' "$deplib"
8749313a12fdSmrg                   func_resolve_sysroot "$func_stripname_result";;
8750313a12fdSmrg              *) func_resolve_sysroot "$deplib" ;;
8751313a12fdSmrg            esac
87527cea3689Smrg	    if $opt_preserve_dup_deps; then
8753e19dfac4Smrg	      case "$tmp_libs " in
8754313a12fdSmrg	      *" $func_resolve_sysroot_result "*)
8755313a12fdSmrg                func_append specialdeplibs " $func_resolve_sysroot_result" ;;
8756e19dfac4Smrg	      esac
8757e19dfac4Smrg	    fi
8758313a12fdSmrg	    func_append tmp_libs " $func_resolve_sysroot_result"
8759e19dfac4Smrg	  done
8760e19dfac4Smrg
87617cea3689Smrg	  if test no != "$link_all_deplibs"; then
8762e19dfac4Smrg	    # Add the search paths of all dependency libraries
8763e19dfac4Smrg	    for deplib in $dependency_libs; do
876400084f2cSmrg	      path=
8765e19dfac4Smrg	      case $deplib in
87667cea3689Smrg	      -L*) path=$deplib ;;
8767e19dfac4Smrg	      *.la)
8768313a12fdSmrg	        func_resolve_sysroot "$deplib"
8769313a12fdSmrg	        deplib=$func_resolve_sysroot_result
8770e19dfac4Smrg	        func_dirname "$deplib" "" "."
8771313a12fdSmrg		dir=$func_dirname_result
8772e19dfac4Smrg		# We need an absolute path.
8773e19dfac4Smrg		case $dir in
87747cea3689Smrg		[\\/]* | [A-Za-z]:[\\/]*) absdir=$dir ;;
8775e19dfac4Smrg		*)
8776e19dfac4Smrg		  absdir=`cd "$dir" && pwd`
8777e19dfac4Smrg		  if test -z "$absdir"; then
87787cea3689Smrg		    func_warning "cannot determine absolute directory name of '$dir'"
87797cea3689Smrg		    absdir=$dir
8780e19dfac4Smrg		  fi
8781e19dfac4Smrg		  ;;
8782e19dfac4Smrg		esac
8783e19dfac4Smrg		if $GREP "^installed=no" $deplib > /dev/null; then
8784e19dfac4Smrg		case $host in
8785e19dfac4Smrg		*-*-darwin*)
8786e19dfac4Smrg		  depdepl=
87877cea3689Smrg		  eval deplibrary_names=`$SED -n -e 's/^library_names=\(.*\)$/\1/p' $deplib`
87887cea3689Smrg		  if test -n "$deplibrary_names"; then
87897cea3689Smrg		    for tmp in $deplibrary_names; do
8790e19dfac4Smrg		      depdepl=$tmp
8791e19dfac4Smrg		    done
87927cea3689Smrg		    if test -f "$absdir/$objdir/$depdepl"; then
87937cea3689Smrg		      depdepl=$absdir/$objdir/$depdepl
87947cea3689Smrg		      darwin_install_name=`$OTOOL -L $depdepl | awk '{if (NR == 2) {print $1;exit}}'`
8795e19dfac4Smrg                      if test -z "$darwin_install_name"; then
87967cea3689Smrg                          darwin_install_name=`$OTOOL64 -L $depdepl  | awk '{if (NR == 2) {print $1;exit}}'`
8797e19dfac4Smrg                      fi
87987cea3689Smrg		      func_append compiler_flags " $wl-dylib_file $wl$darwin_install_name:$depdepl"
87997cea3689Smrg		      func_append linker_flags " -dylib_file $darwin_install_name:$depdepl"
8800e19dfac4Smrg		      path=
8801e19dfac4Smrg		    fi
8802e19dfac4Smrg		  fi
8803e19dfac4Smrg		  ;;
8804e19dfac4Smrg		*)
88057cea3689Smrg		  path=-L$absdir/$objdir
8806e19dfac4Smrg		  ;;
8807e19dfac4Smrg		esac
8808e19dfac4Smrg		else
88097cea3689Smrg		  eval libdir=`$SED -n -e 's/^libdir=\(.*\)$/\1/p' $deplib`
8810e19dfac4Smrg		  test -z "$libdir" && \
88117cea3689Smrg		    func_fatal_error "'$deplib' is not a valid libtool archive"
8812e19dfac4Smrg		  test "$absdir" != "$libdir" && \
88137cea3689Smrg		    func_warning "'$deplib' seems to be moved"
8814e19dfac4Smrg
88157cea3689Smrg		  path=-L$absdir
8816e19dfac4Smrg		fi
8817e19dfac4Smrg		;;
8818e19dfac4Smrg	      esac
8819e19dfac4Smrg	      case " $deplibs " in
8820e19dfac4Smrg	      *" $path "*) ;;
8821e19dfac4Smrg	      *) deplibs="$path $deplibs" ;;
8822e19dfac4Smrg	      esac
8823e19dfac4Smrg	    done
8824e19dfac4Smrg	  fi # link_all_deplibs != no
8825e19dfac4Smrg	fi # linkmode = lib
8826e19dfac4Smrg      done # for deplib in $libs
88277cea3689Smrg      if test link = "$pass"; then
88287cea3689Smrg	if test prog = "$linkmode"; then
8829e19dfac4Smrg	  compile_deplibs="$new_inherited_linker_flags $compile_deplibs"
8830e19dfac4Smrg	  finalize_deplibs="$new_inherited_linker_flags $finalize_deplibs"
8831e19dfac4Smrg	else
8832313a12fdSmrg	  compiler_flags="$compiler_flags "`$ECHO " $new_inherited_linker_flags" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'`
8833e19dfac4Smrg	fi
8834e19dfac4Smrg      fi
88357cea3689Smrg      dependency_libs=$newdependency_libs
88367cea3689Smrg      if test dlpreopen = "$pass"; then
8837e19dfac4Smrg	# Link the dlpreopened libraries before other libraries
8838e19dfac4Smrg	for deplib in $save_deplibs; do
8839e19dfac4Smrg	  deplibs="$deplib $deplibs"
8840e19dfac4Smrg	done
8841e19dfac4Smrg      fi
88427cea3689Smrg      if test dlopen != "$pass"; then
88437cea3689Smrg	test conv = "$pass" || {
8844e19dfac4Smrg	  # Make sure lib_search_path contains only unique directories.
8845e19dfac4Smrg	  lib_search_path=
8846e19dfac4Smrg	  for dir in $newlib_search_path; do
8847e19dfac4Smrg	    case "$lib_search_path " in
8848e19dfac4Smrg	    *" $dir "*) ;;
8849313a12fdSmrg	    *) func_append lib_search_path " $dir" ;;
8850e19dfac4Smrg	    esac
8851e19dfac4Smrg	  done
8852e19dfac4Smrg	  newlib_search_path=
88537cea3689Smrg	}
8854e19dfac4Smrg
88557cea3689Smrg	if test prog,link = "$linkmode,$pass"; then
8856e19dfac4Smrg	  vars="compile_deplibs finalize_deplibs"
88577cea3689Smrg	else
88587cea3689Smrg	  vars=deplibs
8859e19dfac4Smrg	fi
8860e19dfac4Smrg	for var in $vars dependency_libs; do
8861e19dfac4Smrg	  # Add libraries to $var in reverse order
8862e19dfac4Smrg	  eval tmp_libs=\"\$$var\"
8863e19dfac4Smrg	  new_libs=
8864e19dfac4Smrg	  for deplib in $tmp_libs; do
8865e19dfac4Smrg	    # FIXME: Pedantically, this is the right thing to do, so
8866e19dfac4Smrg	    #        that some nasty dependency loop isn't accidentally
8867e19dfac4Smrg	    #        broken:
8868e19dfac4Smrg	    #new_libs="$deplib $new_libs"
8869e19dfac4Smrg	    # Pragmatically, this seems to cause very few problems in
8870e19dfac4Smrg	    # practice:
8871e19dfac4Smrg	    case $deplib in
8872e19dfac4Smrg	    -L*) new_libs="$deplib $new_libs" ;;
8873e19dfac4Smrg	    -R*) ;;
8874e19dfac4Smrg	    *)
8875e19dfac4Smrg	      # And here is the reason: when a library appears more
8876e19dfac4Smrg	      # than once as an explicit dependence of a library, or
8877e19dfac4Smrg	      # is implicitly linked in more than once by the
8878e19dfac4Smrg	      # compiler, it is considered special, and multiple
8879e19dfac4Smrg	      # occurrences thereof are not removed.  Compare this
8880e19dfac4Smrg	      # with having the same library being listed as a
8881e19dfac4Smrg	      # dependency of multiple other libraries: in this case,
8882e19dfac4Smrg	      # we know (pedantically, we assume) the library does not
8883e19dfac4Smrg	      # need to be listed more than once, so we keep only the
8884e19dfac4Smrg	      # last copy.  This is not always right, but it is rare
8885e19dfac4Smrg	      # enough that we require users that really mean to play
8886e19dfac4Smrg	      # such unportable linking tricks to link the library
8887e19dfac4Smrg	      # using -Wl,-lname, so that libtool does not consider it
8888e19dfac4Smrg	      # for duplicate removal.
8889e19dfac4Smrg	      case " $specialdeplibs " in
8890e19dfac4Smrg	      *" $deplib "*) new_libs="$deplib $new_libs" ;;
8891e19dfac4Smrg	      *)
8892e19dfac4Smrg		case " $new_libs " in
8893e19dfac4Smrg		*" $deplib "*) ;;
8894e19dfac4Smrg		*) new_libs="$deplib $new_libs" ;;
8895e19dfac4Smrg		esac
8896e19dfac4Smrg		;;
8897e19dfac4Smrg	      esac
8898e19dfac4Smrg	      ;;
8899e19dfac4Smrg	    esac
8900e19dfac4Smrg	  done
8901e19dfac4Smrg	  tmp_libs=
8902e19dfac4Smrg	  for deplib in $new_libs; do
8903e19dfac4Smrg	    case $deplib in
8904e19dfac4Smrg	    -L*)
8905e19dfac4Smrg	      case " $tmp_libs " in
8906e19dfac4Smrg	      *" $deplib "*) ;;
8907313a12fdSmrg	      *) func_append tmp_libs " $deplib" ;;
8908e19dfac4Smrg	      esac
8909e19dfac4Smrg	      ;;
8910313a12fdSmrg	    *) func_append tmp_libs " $deplib" ;;
8911e19dfac4Smrg	    esac
8912e19dfac4Smrg	  done
8913e19dfac4Smrg	  eval $var=\"$tmp_libs\"
8914e19dfac4Smrg	done # for var
8915e19dfac4Smrg      fi
89167cea3689Smrg
89177cea3689Smrg      # Add Sun CC postdeps if required:
89187cea3689Smrg      test CXX = "$tagname" && {
89197cea3689Smrg        case $host_os in
89207cea3689Smrg        linux*)
892195b7a5c8Smrg          case `$CC -V 2>&1 | $SED 5q` in
89227cea3689Smrg          *Sun\ C*) # Sun C++ 5.9
89237cea3689Smrg            func_suncc_cstd_abi
89247cea3689Smrg
89257cea3689Smrg            if test no != "$suncc_use_cstd_abi"; then
89267cea3689Smrg              func_append postdeps ' -library=Cstd -library=Crun'
89277cea3689Smrg            fi
89287cea3689Smrg            ;;
89297cea3689Smrg          esac
89307cea3689Smrg          ;;
89317cea3689Smrg
89327cea3689Smrg        solaris*)
89337cea3689Smrg          func_cc_basename "$CC"
89347cea3689Smrg          case $func_cc_basename_result in
89357cea3689Smrg          CC* | sunCC*)
89367cea3689Smrg            func_suncc_cstd_abi
89377cea3689Smrg
89387cea3689Smrg            if test no != "$suncc_use_cstd_abi"; then
89397cea3689Smrg              func_append postdeps ' -library=Cstd -library=Crun'
89407cea3689Smrg            fi
89417cea3689Smrg            ;;
89427cea3689Smrg          esac
89437cea3689Smrg          ;;
89447cea3689Smrg        esac
89457cea3689Smrg      }
89467cea3689Smrg
8947e19dfac4Smrg      # Last step: remove runtime libs from dependency_libs
8948e19dfac4Smrg      # (they stay in deplibs)
8949e19dfac4Smrg      tmp_libs=
89507cea3689Smrg      for i in $dependency_libs; do
8951e19dfac4Smrg	case " $predeps $postdeps $compiler_lib_search_path " in
8952e19dfac4Smrg	*" $i "*)
89537cea3689Smrg	  i=
8954e19dfac4Smrg	  ;;
8955e19dfac4Smrg	esac
89567cea3689Smrg	if test -n "$i"; then
8957313a12fdSmrg	  func_append tmp_libs " $i"
8958e19dfac4Smrg	fi
8959e19dfac4Smrg      done
8960e19dfac4Smrg      dependency_libs=$tmp_libs
8961e19dfac4Smrg    done # for pass
89627cea3689Smrg    if test prog = "$linkmode"; then
89637cea3689Smrg      dlfiles=$newdlfiles
8964e19dfac4Smrg    fi
89657cea3689Smrg    if test prog = "$linkmode" || test lib = "$linkmode"; then
89667cea3689Smrg      dlprefiles=$newdlprefiles
8967e19dfac4Smrg    fi
8968e19dfac4Smrg
8969e19dfac4Smrg    case $linkmode in
8970e19dfac4Smrg    oldlib)
89717cea3689Smrg      if test -n "$dlfiles$dlprefiles" || test no != "$dlself"; then
89727cea3689Smrg	func_warning "'-dlopen' is ignored for archives"
8973e19dfac4Smrg      fi
8974e19dfac4Smrg
8975e19dfac4Smrg      case " $deplibs" in
8976e19dfac4Smrg      *\ -l* | *\ -L*)
89777cea3689Smrg	func_warning "'-l' and '-L' are ignored for archives" ;;
8978e19dfac4Smrg      esac
8979e19dfac4Smrg
8980e19dfac4Smrg      test -n "$rpath" && \
89817cea3689Smrg	func_warning "'-rpath' is ignored for archives"
8982e19dfac4Smrg
8983e19dfac4Smrg      test -n "$xrpath" && \
89847cea3689Smrg	func_warning "'-R' is ignored for archives"
8985e19dfac4Smrg
8986e19dfac4Smrg      test -n "$vinfo" && \
89877cea3689Smrg	func_warning "'-version-info/-version-number' is ignored for archives"
8988e19dfac4Smrg
8989e19dfac4Smrg      test -n "$release" && \
89907cea3689Smrg	func_warning "'-release' is ignored for archives"
8991e19dfac4Smrg
8992e19dfac4Smrg      test -n "$export_symbols$export_symbols_regex" && \
89937cea3689Smrg	func_warning "'-export-symbols' is ignored for archives"
8994e19dfac4Smrg
8995e19dfac4Smrg      # Now set the variables for building old libraries.
8996e19dfac4Smrg      build_libtool_libs=no
89977cea3689Smrg      oldlibs=$output
8998313a12fdSmrg      func_append objs "$old_deplibs"
8999e19dfac4Smrg      ;;
9000e19dfac4Smrg
9001e19dfac4Smrg    lib)
90027cea3689Smrg      # Make sure we only generate libraries of the form 'libNAME.la'.
9003e19dfac4Smrg      case $outputname in
9004e19dfac4Smrg      lib*)
9005e19dfac4Smrg	func_stripname 'lib' '.la' "$outputname"
9006e19dfac4Smrg	name=$func_stripname_result
9007e19dfac4Smrg	eval shared_ext=\"$shrext_cmds\"
9008e19dfac4Smrg	eval libname=\"$libname_spec\"
9009e19dfac4Smrg	;;
9010e19dfac4Smrg      *)
90117cea3689Smrg	test no = "$module" \
90127cea3689Smrg	  && func_fatal_help "libtool library '$output' must begin with 'lib'"
9013e19dfac4Smrg
90147cea3689Smrg	if test no != "$need_lib_prefix"; then
9015e19dfac4Smrg	  # Add the "lib" prefix for modules if required
9016e19dfac4Smrg	  func_stripname '' '.la' "$outputname"
9017e19dfac4Smrg	  name=$func_stripname_result
9018e19dfac4Smrg	  eval shared_ext=\"$shrext_cmds\"
9019e19dfac4Smrg	  eval libname=\"$libname_spec\"
9020e19dfac4Smrg	else
9021e19dfac4Smrg	  func_stripname '' '.la' "$outputname"
9022e19dfac4Smrg	  libname=$func_stripname_result
9023e19dfac4Smrg	fi
9024e19dfac4Smrg	;;
9025e19dfac4Smrg      esac
9026e19dfac4Smrg
9027e19dfac4Smrg      if test -n "$objs"; then
90287cea3689Smrg	if test pass_all != "$deplibs_check_method"; then
90297cea3689Smrg	  func_fatal_error "cannot build libtool library '$output' from non-libtool objects on this host:$objs"
9030e19dfac4Smrg	else
9031313a12fdSmrg	  echo
9032e19dfac4Smrg	  $ECHO "*** Warning: Linking the shared library $output against the non-libtool"
9033e19dfac4Smrg	  $ECHO "*** objects $objs is not portable!"
9034313a12fdSmrg	  func_append libobjs " $objs"
9035e19dfac4Smrg	fi
9036e19dfac4Smrg      fi
9037e19dfac4Smrg
90387cea3689Smrg      test no = "$dlself" \
90397cea3689Smrg	|| func_warning "'-dlopen self' is ignored for libtool libraries"
9040e19dfac4Smrg
9041e19dfac4Smrg      set dummy $rpath
9042e19dfac4Smrg      shift
90437cea3689Smrg      test 1 -lt "$#" \
90447cea3689Smrg	&& func_warning "ignoring multiple '-rpath's for a libtool library"
9045e19dfac4Smrg
90467cea3689Smrg      install_libdir=$1
9047e19dfac4Smrg
9048e19dfac4Smrg      oldlibs=
9049e19dfac4Smrg      if test -z "$rpath"; then
90507cea3689Smrg	if test yes = "$build_libtool_libs"; then
9051e19dfac4Smrg	  # Building a libtool convenience library.
90527cea3689Smrg	  # Some compilers have problems with a '.al' extension so
9053e19dfac4Smrg	  # convenience libraries should have the same extension an
9054e19dfac4Smrg	  # archive normally would.
9055e19dfac4Smrg	  oldlibs="$output_objdir/$libname.$libext $oldlibs"
9056e19dfac4Smrg	  build_libtool_libs=convenience
9057e19dfac4Smrg	  build_old_libs=yes
9058e19dfac4Smrg	fi
9059e19dfac4Smrg
9060e19dfac4Smrg	test -n "$vinfo" && \
90617cea3689Smrg	  func_warning "'-version-info/-version-number' is ignored for convenience libraries"
9062e19dfac4Smrg
9063e19dfac4Smrg	test -n "$release" && \
90647cea3689Smrg	  func_warning "'-release' is ignored for convenience libraries"
9065e19dfac4Smrg      else
9066e19dfac4Smrg
9067e19dfac4Smrg	# Parse the version information argument.
90687cea3689Smrg	save_ifs=$IFS; IFS=:
9069e19dfac4Smrg	set dummy $vinfo 0 0 0
9070e19dfac4Smrg	shift
90717cea3689Smrg	IFS=$save_ifs
9072e19dfac4Smrg
9073e19dfac4Smrg	test -n "$7" && \
90747cea3689Smrg	  func_fatal_help "too many parameters to '-version-info'"
9075e19dfac4Smrg
9076e19dfac4Smrg	# convert absolute version numbers to libtool ages
9077e19dfac4Smrg	# this retains compatibility with .la files and attempts
9078e19dfac4Smrg	# to make the code below a bit more comprehensible
9079e19dfac4Smrg
9080e19dfac4Smrg	case $vinfo_number in
9081e19dfac4Smrg	yes)
90827cea3689Smrg	  number_major=$1
90837cea3689Smrg	  number_minor=$2
90847cea3689Smrg	  number_revision=$3
9085e19dfac4Smrg	  #
9086e19dfac4Smrg	  # There are really only two kinds -- those that
9087e19dfac4Smrg	  # use the current revision as the major version
9088e19dfac4Smrg	  # and those that subtract age and use age as
9089e19dfac4Smrg	  # a minor version.  But, then there is irix
90907cea3689Smrg	  # that has an extra 1 added just for fun
9091e19dfac4Smrg	  #
9092e19dfac4Smrg	  case $version_type in
9093313a12fdSmrg	  # correct linux to gnu/linux during the next big refactor
909495b7a5c8Smrg	  darwin|freebsd-elf|linux|midnightbsd-elf|osf|windows|none)
9095e19dfac4Smrg	    func_arith $number_major + $number_minor
9096e19dfac4Smrg	    current=$func_arith_result
90977cea3689Smrg	    age=$number_minor
90987cea3689Smrg	    revision=$number_revision
9099e19dfac4Smrg	    ;;
91007cea3689Smrg	  freebsd-aout|qnx|sunos)
91017cea3689Smrg	    current=$number_major
91027cea3689Smrg	    revision=$number_minor
91037cea3689Smrg	    age=0
9104e19dfac4Smrg	    ;;
9105e19dfac4Smrg	  irix|nonstopux)
9106e19dfac4Smrg	    func_arith $number_major + $number_minor
9107e19dfac4Smrg	    current=$func_arith_result
91087cea3689Smrg	    age=$number_minor
91097cea3689Smrg	    revision=$number_minor
9110e19dfac4Smrg	    lt_irix_increment=no
9111e19dfac4Smrg	    ;;
9112e19dfac4Smrg	  esac
9113e19dfac4Smrg	  ;;
9114e19dfac4Smrg	no)
91157cea3689Smrg	  current=$1
91167cea3689Smrg	  revision=$2
91177cea3689Smrg	  age=$3
9118e19dfac4Smrg	  ;;
9119e19dfac4Smrg	esac
9120e19dfac4Smrg
9121e19dfac4Smrg	# Check that each of the things are valid numbers.
9122e19dfac4Smrg	case $current in
9123e19dfac4Smrg	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]) ;;
9124e19dfac4Smrg	*)
91257cea3689Smrg	  func_error "CURRENT '$current' must be a nonnegative integer"
91267cea3689Smrg	  func_fatal_error "'$vinfo' is not valid version information"
9127e19dfac4Smrg	  ;;
9128e19dfac4Smrg	esac
9129e19dfac4Smrg
9130e19dfac4Smrg	case $revision in
9131e19dfac4Smrg	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]) ;;
9132e19dfac4Smrg	*)
91337cea3689Smrg	  func_error "REVISION '$revision' must be a nonnegative integer"
91347cea3689Smrg	  func_fatal_error "'$vinfo' is not valid version information"
9135e19dfac4Smrg	  ;;
9136e19dfac4Smrg	esac
9137e19dfac4Smrg
9138e19dfac4Smrg	case $age in
9139e19dfac4Smrg	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]) ;;
9140e19dfac4Smrg	*)
91417cea3689Smrg	  func_error "AGE '$age' must be a nonnegative integer"
91427cea3689Smrg	  func_fatal_error "'$vinfo' is not valid version information"
9143e19dfac4Smrg	  ;;
9144e19dfac4Smrg	esac
9145e19dfac4Smrg
9146e19dfac4Smrg	if test "$age" -gt "$current"; then
91477cea3689Smrg	  func_error "AGE '$age' is greater than the current interface number '$current'"
91487cea3689Smrg	  func_fatal_error "'$vinfo' is not valid version information"
9149e19dfac4Smrg	fi
9150e19dfac4Smrg
9151e19dfac4Smrg	# Calculate the version variables.
9152e19dfac4Smrg	major=
9153e19dfac4Smrg	versuffix=
9154e19dfac4Smrg	verstring=
9155e19dfac4Smrg	case $version_type in
9156e19dfac4Smrg	none) ;;
9157e19dfac4Smrg
9158e19dfac4Smrg	darwin)
9159e19dfac4Smrg	  # Like Linux, but with the current version available in
9160e19dfac4Smrg	  # verstring for coding it into the library header
9161e19dfac4Smrg	  func_arith $current - $age
9162e19dfac4Smrg	  major=.$func_arith_result
91637cea3689Smrg	  versuffix=$major.$age.$revision
9164e19dfac4Smrg	  # Darwin ld doesn't like 0 for these options...
9165e19dfac4Smrg	  func_arith $current + 1
9166e19dfac4Smrg	  minor_current=$func_arith_result
91677cea3689Smrg	  xlcverstring="$wl-compatibility_version $wl$minor_current $wl-current_version $wl$minor_current.$revision"
9168e19dfac4Smrg	  verstring="-compatibility_version $minor_current -current_version $minor_current.$revision"
91697cea3689Smrg          # On Darwin other compilers
91707cea3689Smrg          case $CC in
91717cea3689Smrg              nagfor*)
91727cea3689Smrg                  verstring="$wl-compatibility_version $wl$minor_current $wl-current_version $wl$minor_current.$revision"
91737cea3689Smrg                  ;;
91747cea3689Smrg              *)
91757cea3689Smrg                  verstring="-compatibility_version $minor_current -current_version $minor_current.$revision"
91767cea3689Smrg                  ;;
91777cea3689Smrg          esac
9178e19dfac4Smrg	  ;;
9179e19dfac4Smrg
9180e19dfac4Smrg	freebsd-aout)
91817cea3689Smrg	  major=.$current
91827cea3689Smrg	  versuffix=.$current.$revision
9183e19dfac4Smrg	  ;;
9184e19dfac4Smrg
918595b7a5c8Smrg	freebsd-elf | midnightbsd-elf)
91867cea3689Smrg	  func_arith $current - $age
91877cea3689Smrg	  major=.$func_arith_result
91887cea3689Smrg	  versuffix=$major.$age.$revision
9189e19dfac4Smrg	  ;;
9190e19dfac4Smrg
9191e19dfac4Smrg	irix | nonstopux)
91927cea3689Smrg	  if test no = "$lt_irix_increment"; then
9193e19dfac4Smrg	    func_arith $current - $age
9194e19dfac4Smrg	  else
9195e19dfac4Smrg	    func_arith $current - $age + 1
9196e19dfac4Smrg	  fi
9197e19dfac4Smrg	  major=$func_arith_result
9198e19dfac4Smrg
9199e19dfac4Smrg	  case $version_type in
9200e19dfac4Smrg	    nonstopux) verstring_prefix=nonstopux ;;
9201e19dfac4Smrg	    *)         verstring_prefix=sgi ;;
9202e19dfac4Smrg	  esac
92037cea3689Smrg	  verstring=$verstring_prefix$major.$revision
9204e19dfac4Smrg
9205e19dfac4Smrg	  # Add in all the interfaces that we are compatible with.
9206e19dfac4Smrg	  loop=$revision
92077cea3689Smrg	  while test 0 -ne "$loop"; do
9208e19dfac4Smrg	    func_arith $revision - $loop
9209e19dfac4Smrg	    iface=$func_arith_result
9210e19dfac4Smrg	    func_arith $loop - 1
9211e19dfac4Smrg	    loop=$func_arith_result
92127cea3689Smrg	    verstring=$verstring_prefix$major.$iface:$verstring
9213e19dfac4Smrg	  done
9214e19dfac4Smrg
92157cea3689Smrg	  # Before this point, $major must not contain '.'.
9216e19dfac4Smrg	  major=.$major
92177cea3689Smrg	  versuffix=$major.$revision
9218e19dfac4Smrg	  ;;
9219e19dfac4Smrg
9220313a12fdSmrg	linux) # correct to gnu/linux during the next big refactor
9221e19dfac4Smrg	  func_arith $current - $age
9222e19dfac4Smrg	  major=.$func_arith_result
92237cea3689Smrg	  versuffix=$major.$age.$revision
9224e19dfac4Smrg	  ;;
9225e19dfac4Smrg
9226e19dfac4Smrg	osf)
9227e19dfac4Smrg	  func_arith $current - $age
9228e19dfac4Smrg	  major=.$func_arith_result
92297cea3689Smrg	  versuffix=.$current.$age.$revision
92307cea3689Smrg	  verstring=$current.$age.$revision
9231e19dfac4Smrg
9232e19dfac4Smrg	  # Add in all the interfaces that we are compatible with.
9233e19dfac4Smrg	  loop=$age
92347cea3689Smrg	  while test 0 -ne "$loop"; do
9235e19dfac4Smrg	    func_arith $current - $loop
9236e19dfac4Smrg	    iface=$func_arith_result
9237e19dfac4Smrg	    func_arith $loop - 1
9238e19dfac4Smrg	    loop=$func_arith_result
92397cea3689Smrg	    verstring=$verstring:$iface.0
9240e19dfac4Smrg	  done
9241e19dfac4Smrg
9242e19dfac4Smrg	  # Make executables depend on our current version.
92437cea3689Smrg	  func_append verstring ":$current.0"
9244e19dfac4Smrg	  ;;
9245e19dfac4Smrg
9246e19dfac4Smrg	qnx)
92477cea3689Smrg	  major=.$current
92487cea3689Smrg	  versuffix=.$current
92497cea3689Smrg	  ;;
92507cea3689Smrg
92517cea3689Smrg	sco)
92527cea3689Smrg	  major=.$current
92537cea3689Smrg	  versuffix=.$current
9254e19dfac4Smrg	  ;;
9255e19dfac4Smrg
9256e19dfac4Smrg	sunos)
92577cea3689Smrg	  major=.$current
92587cea3689Smrg	  versuffix=.$current.$revision
9259e19dfac4Smrg	  ;;
9260e19dfac4Smrg
9261e19dfac4Smrg	windows)
9262e19dfac4Smrg	  # Use '-' rather than '.', since we only want one
92637cea3689Smrg	  # extension on DOS 8.3 file systems.
9264e19dfac4Smrg	  func_arith $current - $age
9265e19dfac4Smrg	  major=$func_arith_result
92667cea3689Smrg	  versuffix=-$major
9267e19dfac4Smrg	  ;;
9268e19dfac4Smrg
9269e19dfac4Smrg	*)
92707cea3689Smrg	  func_fatal_configuration "unknown library version type '$version_type'"
9271e19dfac4Smrg	  ;;
9272e19dfac4Smrg	esac
9273e19dfac4Smrg
9274e19dfac4Smrg	# Clear the version info if we defaulted, and they specified a release.
9275e19dfac4Smrg	if test -z "$vinfo" && test -n "$release"; then
9276e19dfac4Smrg	  major=
9277e19dfac4Smrg	  case $version_type in
9278e19dfac4Smrg	  darwin)
9279e19dfac4Smrg	    # we can't check for "0.0" in archive_cmds due to quoting
9280e19dfac4Smrg	    # problems, so we reset it completely
9281e19dfac4Smrg	    verstring=
9282e19dfac4Smrg	    ;;
9283e19dfac4Smrg	  *)
92847cea3689Smrg	    verstring=0.0
9285e19dfac4Smrg	    ;;
9286e19dfac4Smrg	  esac
92877cea3689Smrg	  if test no = "$need_version"; then
9288e19dfac4Smrg	    versuffix=
9289e19dfac4Smrg	  else
92907cea3689Smrg	    versuffix=.0.0
9291e19dfac4Smrg	  fi
9292e19dfac4Smrg	fi
9293e19dfac4Smrg
9294e19dfac4Smrg	# Remove version info from name if versioning should be avoided
92957cea3689Smrg	if test yes,no = "$avoid_version,$need_version"; then
9296e19dfac4Smrg	  major=
9297e19dfac4Smrg	  versuffix=
92987cea3689Smrg	  verstring=
9299e19dfac4Smrg	fi
9300e19dfac4Smrg
9301e19dfac4Smrg	# Check to see if the archive will have undefined symbols.
93027cea3689Smrg	if test yes = "$allow_undefined"; then
93037cea3689Smrg	  if test unsupported = "$allow_undefined_flag"; then
93047cea3689Smrg	    if test yes = "$build_old_libs"; then
93057cea3689Smrg	      func_warning "undefined symbols not allowed in $host shared libraries; building static only"
93067cea3689Smrg	      build_libtool_libs=no
93077cea3689Smrg	    else
93087cea3689Smrg	      func_fatal_error "can't build $host shared library unless -no-undefined is specified"
93097cea3689Smrg	    fi
9310e19dfac4Smrg	  fi
9311e19dfac4Smrg	else
9312e19dfac4Smrg	  # Don't allow undefined symbols.
93137cea3689Smrg	  allow_undefined_flag=$no_undefined_flag
9314e19dfac4Smrg	fi
9315e19dfac4Smrg
9316e19dfac4Smrg      fi
9317e19dfac4Smrg
93187cea3689Smrg      func_generate_dlsyms "$libname" "$libname" :
9319313a12fdSmrg      func_append libobjs " $symfileobj"
93207cea3689Smrg      test " " = "$libobjs" && libobjs=
9321e19dfac4Smrg
93227cea3689Smrg      if test relink != "$opt_mode"; then
9323e19dfac4Smrg	# Remove our outputs, but don't remove object files since they
9324e19dfac4Smrg	# may have been created when compiling PIC objects.
9325e19dfac4Smrg	removelist=
9326e19dfac4Smrg	tempremovelist=`$ECHO "$output_objdir/*"`
9327e19dfac4Smrg	for p in $tempremovelist; do
9328e19dfac4Smrg	  case $p in
9329e19dfac4Smrg	    *.$objext | *.gcno)
9330e19dfac4Smrg	       ;;
93317cea3689Smrg	    $output_objdir/$outputname | $output_objdir/$libname.* | $output_objdir/$libname$release.*)
93327cea3689Smrg	       if test -n "$precious_files_regex"; then
9333e19dfac4Smrg		 if $ECHO "$p" | $EGREP -e "$precious_files_regex" >/dev/null 2>&1
9334e19dfac4Smrg		 then
9335e19dfac4Smrg		   continue
9336e19dfac4Smrg		 fi
9337e19dfac4Smrg	       fi
9338313a12fdSmrg	       func_append removelist " $p"
9339e19dfac4Smrg	       ;;
9340e19dfac4Smrg	    *) ;;
9341e19dfac4Smrg	  esac
9342e19dfac4Smrg	done
9343e19dfac4Smrg	test -n "$removelist" && \
9344e19dfac4Smrg	  func_show_eval "${RM}r \$removelist"
9345e19dfac4Smrg      fi
9346e19dfac4Smrg
9347e19dfac4Smrg      # Now set the variables for building old libraries.
93487cea3689Smrg      if test yes = "$build_old_libs" && test convenience != "$build_libtool_libs"; then
9349313a12fdSmrg	func_append oldlibs " $output_objdir/$libname.$libext"
9350e19dfac4Smrg
9351e19dfac4Smrg	# Transform .lo files to .o files.
93527cea3689Smrg	oldobjs="$objs "`$ECHO "$libobjs" | $SP2NL | $SED "/\.$libext$/d; $lo2o" | $NL2SP`
9353e19dfac4Smrg      fi
9354e19dfac4Smrg
9355e19dfac4Smrg      # Eliminate all temporary directories.
9356e19dfac4Smrg      #for path in $notinst_path; do
9357313a12fdSmrg      #	lib_search_path=`$ECHO "$lib_search_path " | $SED "s% $path % %g"`
9358313a12fdSmrg      #	deplibs=`$ECHO "$deplibs " | $SED "s% -L$path % %g"`
9359313a12fdSmrg      #	dependency_libs=`$ECHO "$dependency_libs " | $SED "s% -L$path % %g"`
9360e19dfac4Smrg      #done
9361e19dfac4Smrg
9362e19dfac4Smrg      if test -n "$xrpath"; then
9363e19dfac4Smrg	# If the user specified any rpath flags, then add them.
9364e19dfac4Smrg	temp_xrpath=
9365e19dfac4Smrg	for libdir in $xrpath; do
9366313a12fdSmrg	  func_replace_sysroot "$libdir"
9367313a12fdSmrg	  func_append temp_xrpath " -R$func_replace_sysroot_result"
9368e19dfac4Smrg	  case "$finalize_rpath " in
9369e19dfac4Smrg	  *" $libdir "*) ;;
9370313a12fdSmrg	  *) func_append finalize_rpath " $libdir" ;;
9371e19dfac4Smrg	  esac
9372e19dfac4Smrg	done
93737cea3689Smrg	if test yes != "$hardcode_into_libs" || test yes = "$build_old_libs"; then
9374e19dfac4Smrg	  dependency_libs="$temp_xrpath $dependency_libs"
9375e19dfac4Smrg	fi
9376e19dfac4Smrg      fi
9377e19dfac4Smrg
9378e19dfac4Smrg      # Make sure dlfiles contains only unique files that won't be dlpreopened
93797cea3689Smrg      old_dlfiles=$dlfiles
9380e19dfac4Smrg      dlfiles=
9381e19dfac4Smrg      for lib in $old_dlfiles; do
9382e19dfac4Smrg	case " $dlprefiles $dlfiles " in
9383e19dfac4Smrg	*" $lib "*) ;;
9384313a12fdSmrg	*) func_append dlfiles " $lib" ;;
9385e19dfac4Smrg	esac
9386e19dfac4Smrg      done
9387e19dfac4Smrg
9388e19dfac4Smrg      # Make sure dlprefiles contains only unique files
93897cea3689Smrg      old_dlprefiles=$dlprefiles
9390e19dfac4Smrg      dlprefiles=
9391e19dfac4Smrg      for lib in $old_dlprefiles; do
9392e19dfac4Smrg	case "$dlprefiles " in
9393e19dfac4Smrg	*" $lib "*) ;;
9394313a12fdSmrg	*) func_append dlprefiles " $lib" ;;
9395e19dfac4Smrg	esac
9396e19dfac4Smrg      done
9397e19dfac4Smrg
93987cea3689Smrg      if test yes = "$build_libtool_libs"; then
9399e19dfac4Smrg	if test -n "$rpath"; then
9400e19dfac4Smrg	  case $host in
9401313a12fdSmrg	  *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-*-beos* | *-cegcc* | *-*-haiku*)
9402e19dfac4Smrg	    # these systems don't actually have a c library (as such)!
9403e19dfac4Smrg	    ;;
9404e19dfac4Smrg	  *-*-rhapsody* | *-*-darwin1.[012])
9405e19dfac4Smrg	    # Rhapsody C library is in the System framework
9406313a12fdSmrg	    func_append deplibs " System.ltframework"
9407e19dfac4Smrg	    ;;
9408e19dfac4Smrg	  *-*-netbsd*)
9409e19dfac4Smrg	    # Don't link with libc until the a.out ld.so is fixed.
9410e19dfac4Smrg	    ;;
941195b7a5c8Smrg	  *-*-openbsd* | *-*-freebsd* | *-*-dragonfly* | *-*-midnightbsd*)
9412e19dfac4Smrg	    # Do not include libc due to us having libc/libc_r.
9413e19dfac4Smrg	    ;;
9414e19dfac4Smrg	  *-*-sco3.2v5* | *-*-sco5v6*)
9415e19dfac4Smrg	    # Causes problems with __ctype
9416e19dfac4Smrg	    ;;
9417e19dfac4Smrg	  *-*-sysv4.2uw2* | *-*-sysv5* | *-*-unixware* | *-*-OpenUNIX*)
9418e19dfac4Smrg	    # Compiler inserts libc in the correct place for threads to work
9419e19dfac4Smrg	    ;;
9420e19dfac4Smrg	  *)
9421e19dfac4Smrg	    # Add libc to deplibs on all other systems if necessary.
94227cea3689Smrg	    if test yes = "$build_libtool_need_lc"; then
9423313a12fdSmrg	      func_append deplibs " -lc"
9424e19dfac4Smrg	    fi
9425e19dfac4Smrg	    ;;
9426e19dfac4Smrg	  esac
9427e19dfac4Smrg	fi
9428e19dfac4Smrg
9429e19dfac4Smrg	# Transform deplibs into only deplibs that can be linked in shared.
9430e19dfac4Smrg	name_save=$name
9431e19dfac4Smrg	libname_save=$libname
9432e19dfac4Smrg	release_save=$release
9433e19dfac4Smrg	versuffix_save=$versuffix
9434e19dfac4Smrg	major_save=$major
9435e19dfac4Smrg	# I'm not sure if I'm treating the release correctly.  I think
9436e19dfac4Smrg	# release should show up in the -l (ie -lgmp5) so we don't want to
9437e19dfac4Smrg	# add it in twice.  Is that correct?
94387cea3689Smrg	release=
94397cea3689Smrg	versuffix=
94407cea3689Smrg	major=
9441e19dfac4Smrg	newdeplibs=
9442e19dfac4Smrg	droppeddeps=no
9443e19dfac4Smrg	case $deplibs_check_method in
9444e19dfac4Smrg	pass_all)
9445e19dfac4Smrg	  # Don't check for shared/static.  Everything works.
9446e19dfac4Smrg	  # This might be a little naive.  We might want to check
9447e19dfac4Smrg	  # whether the library exists or not.  But this is on
9448e19dfac4Smrg	  # osf3 & osf4 and I'm not really sure... Just
9449e19dfac4Smrg	  # implementing what was already the behavior.
9450e19dfac4Smrg	  newdeplibs=$deplibs
9451e19dfac4Smrg	  ;;
9452e19dfac4Smrg	test_compile)
9453e19dfac4Smrg	  # This code stresses the "libraries are programs" paradigm to its
9454e19dfac4Smrg	  # limits. Maybe even breaks it.  We compile a program, linking it
9455e19dfac4Smrg	  # against the deplibs as a proxy for the library.  Then we can check
9456e19dfac4Smrg	  # whether they linked in statically or dynamically with ldd.
9457e19dfac4Smrg	  $opt_dry_run || $RM conftest.c
9458e19dfac4Smrg	  cat > conftest.c <<EOF
9459e19dfac4Smrg	  int main() { return 0; }
9460e19dfac4SmrgEOF
9461e19dfac4Smrg	  $opt_dry_run || $RM conftest
9462e19dfac4Smrg	  if $LTCC $LTCFLAGS -o conftest conftest.c $deplibs; then
9463e19dfac4Smrg	    ldd_output=`ldd conftest`
9464e19dfac4Smrg	    for i in $deplibs; do
9465e19dfac4Smrg	      case $i in
9466e19dfac4Smrg	      -l*)
9467e19dfac4Smrg		func_stripname -l '' "$i"
9468e19dfac4Smrg		name=$func_stripname_result
94697cea3689Smrg		if test yes = "$allow_libtool_libs_with_static_runtimes"; then
9470e19dfac4Smrg		  case " $predeps $postdeps " in
9471e19dfac4Smrg		  *" $i "*)
9472313a12fdSmrg		    func_append newdeplibs " $i"
94737cea3689Smrg		    i=
9474e19dfac4Smrg		    ;;
9475e19dfac4Smrg		  esac
9476e19dfac4Smrg		fi
94777cea3689Smrg		if test -n "$i"; then
9478e19dfac4Smrg		  libname=`eval "\\$ECHO \"$libname_spec\""`
9479e19dfac4Smrg		  deplib_matches=`eval "\\$ECHO \"$library_names_spec\""`
9480e19dfac4Smrg		  set dummy $deplib_matches; shift
9481e19dfac4Smrg		  deplib_match=$1
94827cea3689Smrg		  if test `expr "$ldd_output" : ".*$deplib_match"` -ne 0; then
9483313a12fdSmrg		    func_append newdeplibs " $i"
9484e19dfac4Smrg		  else
9485e19dfac4Smrg		    droppeddeps=yes
9486313a12fdSmrg		    echo
9487e19dfac4Smrg		    $ECHO "*** Warning: dynamic linker does not accept needed library $i."
9488313a12fdSmrg		    echo "*** I have the capability to make that library automatically link in when"
9489313a12fdSmrg		    echo "*** you link to this library.  But I can only do this if you have a"
9490313a12fdSmrg		    echo "*** shared version of the library, which I believe you do not have"
9491313a12fdSmrg		    echo "*** because a test_compile did reveal that the linker did not use it for"
9492313a12fdSmrg		    echo "*** its dynamic dependency list that programs get resolved with at runtime."
9493e19dfac4Smrg		  fi
9494e19dfac4Smrg		fi
9495e19dfac4Smrg		;;
9496e19dfac4Smrg	      *)
9497313a12fdSmrg		func_append newdeplibs " $i"
9498e19dfac4Smrg		;;
9499e19dfac4Smrg	      esac
9500e19dfac4Smrg	    done
9501e19dfac4Smrg	  else
9502e19dfac4Smrg	    # Error occurred in the first compile.  Let's try to salvage
9503e19dfac4Smrg	    # the situation: Compile a separate program for each library.
9504e19dfac4Smrg	    for i in $deplibs; do
9505e19dfac4Smrg	      case $i in
9506e19dfac4Smrg	      -l*)
9507e19dfac4Smrg		func_stripname -l '' "$i"
9508e19dfac4Smrg		name=$func_stripname_result
9509e19dfac4Smrg		$opt_dry_run || $RM conftest
9510e19dfac4Smrg		if $LTCC $LTCFLAGS -o conftest conftest.c $i; then
9511e19dfac4Smrg		  ldd_output=`ldd conftest`
95127cea3689Smrg		  if test yes = "$allow_libtool_libs_with_static_runtimes"; then
9513e19dfac4Smrg		    case " $predeps $postdeps " in
9514e19dfac4Smrg		    *" $i "*)
9515313a12fdSmrg		      func_append newdeplibs " $i"
95167cea3689Smrg		      i=
9517e19dfac4Smrg		      ;;
9518e19dfac4Smrg		    esac
9519e19dfac4Smrg		  fi
95207cea3689Smrg		  if test -n "$i"; then
9521e19dfac4Smrg		    libname=`eval "\\$ECHO \"$libname_spec\""`
9522e19dfac4Smrg		    deplib_matches=`eval "\\$ECHO \"$library_names_spec\""`
9523e19dfac4Smrg		    set dummy $deplib_matches; shift
9524e19dfac4Smrg		    deplib_match=$1
95257cea3689Smrg		    if test `expr "$ldd_output" : ".*$deplib_match"` -ne 0; then
9526313a12fdSmrg		      func_append newdeplibs " $i"
9527e19dfac4Smrg		    else
9528e19dfac4Smrg		      droppeddeps=yes
9529313a12fdSmrg		      echo
9530e19dfac4Smrg		      $ECHO "*** Warning: dynamic linker does not accept needed library $i."
9531313a12fdSmrg		      echo "*** I have the capability to make that library automatically link in when"
9532313a12fdSmrg		      echo "*** you link to this library.  But I can only do this if you have a"
9533313a12fdSmrg		      echo "*** shared version of the library, which you do not appear to have"
9534313a12fdSmrg		      echo "*** because a test_compile did reveal that the linker did not use this one"
9535313a12fdSmrg		      echo "*** as a dynamic dependency that programs can get resolved with at runtime."
9536e19dfac4Smrg		    fi
9537e19dfac4Smrg		  fi
9538e19dfac4Smrg		else
9539e19dfac4Smrg		  droppeddeps=yes
9540313a12fdSmrg		  echo
9541e19dfac4Smrg		  $ECHO "*** Warning!  Library $i is needed by this library but I was not able to"
9542313a12fdSmrg		  echo "*** make it link in!  You will probably need to install it or some"
9543313a12fdSmrg		  echo "*** library that it depends on before this library will be fully"
9544313a12fdSmrg		  echo "*** functional.  Installing it before continuing would be even better."
9545e19dfac4Smrg		fi
9546e19dfac4Smrg		;;
9547e19dfac4Smrg	      *)
9548313a12fdSmrg		func_append newdeplibs " $i"
9549e19dfac4Smrg		;;
9550e19dfac4Smrg	      esac
9551e19dfac4Smrg	    done
9552e19dfac4Smrg	  fi
9553e19dfac4Smrg	  ;;
9554e19dfac4Smrg	file_magic*)
9555e19dfac4Smrg	  set dummy $deplibs_check_method; shift
9556e19dfac4Smrg	  file_magic_regex=`expr "$deplibs_check_method" : "$1 \(.*\)"`
9557e19dfac4Smrg	  for a_deplib in $deplibs; do
9558e19dfac4Smrg	    case $a_deplib in
9559e19dfac4Smrg	    -l*)
9560e19dfac4Smrg	      func_stripname -l '' "$a_deplib"
9561e19dfac4Smrg	      name=$func_stripname_result
95627cea3689Smrg	      if test yes = "$allow_libtool_libs_with_static_runtimes"; then
9563e19dfac4Smrg		case " $predeps $postdeps " in
9564e19dfac4Smrg		*" $a_deplib "*)
9565313a12fdSmrg		  func_append newdeplibs " $a_deplib"
95667cea3689Smrg		  a_deplib=
9567e19dfac4Smrg		  ;;
9568e19dfac4Smrg		esac
9569e19dfac4Smrg	      fi
95707cea3689Smrg	      if test -n "$a_deplib"; then
9571e19dfac4Smrg		libname=`eval "\\$ECHO \"$libname_spec\""`
9572313a12fdSmrg		if test -n "$file_magic_glob"; then
9573313a12fdSmrg		  libnameglob=`func_echo_all "$libname" | $SED -e $file_magic_glob`
9574313a12fdSmrg		else
9575313a12fdSmrg		  libnameglob=$libname
9576313a12fdSmrg		fi
95777cea3689Smrg		test yes = "$want_nocaseglob" && nocaseglob=`shopt -p nocaseglob`
9578e19dfac4Smrg		for i in $lib_search_path $sys_lib_search_path $shlib_search_path; do
95797cea3689Smrg		  if test yes = "$want_nocaseglob"; then
9580313a12fdSmrg		    shopt -s nocaseglob
9581313a12fdSmrg		    potential_libs=`ls $i/$libnameglob[.-]* 2>/dev/null`
9582313a12fdSmrg		    $nocaseglob
9583313a12fdSmrg		  else
9584313a12fdSmrg		    potential_libs=`ls $i/$libnameglob[.-]* 2>/dev/null`
9585313a12fdSmrg		  fi
9586e19dfac4Smrg		  for potent_lib in $potential_libs; do
9587e19dfac4Smrg		      # Follow soft links.
9588e19dfac4Smrg		      if ls -lLd "$potent_lib" 2>/dev/null |
9589e19dfac4Smrg			 $GREP " -> " >/dev/null; then
9590e19dfac4Smrg			continue
9591e19dfac4Smrg		      fi
9592e19dfac4Smrg		      # The statement above tries to avoid entering an
9593e19dfac4Smrg		      # endless loop below, in case of cyclic links.
9594e19dfac4Smrg		      # We might still enter an endless loop, since a link
9595e19dfac4Smrg		      # loop can be closed while we follow links,
9596e19dfac4Smrg		      # but so what?
95977cea3689Smrg		      potlib=$potent_lib
9598e19dfac4Smrg		      while test -h "$potlib" 2>/dev/null; do
95997cea3689Smrg			potliblink=`ls -ld $potlib | $SED 's/.* -> //'`
9600e19dfac4Smrg			case $potliblink in
96017cea3689Smrg			[\\/]* | [A-Za-z]:[\\/]*) potlib=$potliblink;;
96027cea3689Smrg			*) potlib=`$ECHO "$potlib" | $SED 's|[^/]*$||'`"$potliblink";;
9603e19dfac4Smrg			esac
9604e19dfac4Smrg		      done
9605e19dfac4Smrg		      if eval $file_magic_cmd \"\$potlib\" 2>/dev/null |
9606e19dfac4Smrg			 $SED -e 10q |
9607e19dfac4Smrg			 $EGREP "$file_magic_regex" > /dev/null; then
9608313a12fdSmrg			func_append newdeplibs " $a_deplib"
96097cea3689Smrg			a_deplib=
9610e19dfac4Smrg			break 2
9611e19dfac4Smrg		      fi
9612e19dfac4Smrg		  done
9613e19dfac4Smrg		done
9614e19dfac4Smrg	      fi
96157cea3689Smrg	      if test -n "$a_deplib"; then
9616e19dfac4Smrg		droppeddeps=yes
9617313a12fdSmrg		echo
9618e19dfac4Smrg		$ECHO "*** Warning: linker path does not have real file for library $a_deplib."
9619313a12fdSmrg		echo "*** I have the capability to make that library automatically link in when"
9620313a12fdSmrg		echo "*** you link to this library.  But I can only do this if you have a"
9621313a12fdSmrg		echo "*** shared version of the library, which you do not appear to have"
9622313a12fdSmrg		echo "*** because I did check the linker path looking for a file starting"
96237cea3689Smrg		if test -z "$potlib"; then
9624e19dfac4Smrg		  $ECHO "*** with $libname but no candidates were found. (...for file magic test)"
9625e19dfac4Smrg		else
9626e19dfac4Smrg		  $ECHO "*** with $libname and none of the candidates passed a file format test"
9627e19dfac4Smrg		  $ECHO "*** using a file magic. Last file checked: $potlib"
9628e19dfac4Smrg		fi
9629e19dfac4Smrg	      fi
9630e19dfac4Smrg	      ;;
9631e19dfac4Smrg	    *)
9632e19dfac4Smrg	      # Add a -L argument.
9633313a12fdSmrg	      func_append newdeplibs " $a_deplib"
9634e19dfac4Smrg	      ;;
9635e19dfac4Smrg	    esac
9636e19dfac4Smrg	  done # Gone through all deplibs.
9637e19dfac4Smrg	  ;;
9638e19dfac4Smrg	match_pattern*)
9639e19dfac4Smrg	  set dummy $deplibs_check_method; shift
9640e19dfac4Smrg	  match_pattern_regex=`expr "$deplibs_check_method" : "$1 \(.*\)"`
9641e19dfac4Smrg	  for a_deplib in $deplibs; do
9642e19dfac4Smrg	    case $a_deplib in
9643e19dfac4Smrg	    -l*)
9644e19dfac4Smrg	      func_stripname -l '' "$a_deplib"
9645e19dfac4Smrg	      name=$func_stripname_result
96467cea3689Smrg	      if test yes = "$allow_libtool_libs_with_static_runtimes"; then
9647e19dfac4Smrg		case " $predeps $postdeps " in
9648e19dfac4Smrg		*" $a_deplib "*)
9649313a12fdSmrg		  func_append newdeplibs " $a_deplib"
96507cea3689Smrg		  a_deplib=
9651e19dfac4Smrg		  ;;
9652e19dfac4Smrg		esac
9653e19dfac4Smrg	      fi
96547cea3689Smrg	      if test -n "$a_deplib"; then
9655e19dfac4Smrg		libname=`eval "\\$ECHO \"$libname_spec\""`
9656e19dfac4Smrg		for i in $lib_search_path $sys_lib_search_path $shlib_search_path; do
9657e19dfac4Smrg		  potential_libs=`ls $i/$libname[.-]* 2>/dev/null`
9658e19dfac4Smrg		  for potent_lib in $potential_libs; do
96597cea3689Smrg		    potlib=$potent_lib # see symlink-check above in file_magic test
9660313a12fdSmrg		    if eval "\$ECHO \"$potent_lib\"" 2>/dev/null | $SED 10q | \
9661e19dfac4Smrg		       $EGREP "$match_pattern_regex" > /dev/null; then
9662313a12fdSmrg		      func_append newdeplibs " $a_deplib"
96637cea3689Smrg		      a_deplib=
9664e19dfac4Smrg		      break 2
9665e19dfac4Smrg		    fi
9666e19dfac4Smrg		  done
9667e19dfac4Smrg		done
9668e19dfac4Smrg	      fi
96697cea3689Smrg	      if test -n "$a_deplib"; then
9670e19dfac4Smrg		droppeddeps=yes
9671313a12fdSmrg		echo
9672e19dfac4Smrg		$ECHO "*** Warning: linker path does not have real file for library $a_deplib."
9673313a12fdSmrg		echo "*** I have the capability to make that library automatically link in when"
9674313a12fdSmrg		echo "*** you link to this library.  But I can only do this if you have a"
9675313a12fdSmrg		echo "*** shared version of the library, which you do not appear to have"
9676313a12fdSmrg		echo "*** because I did check the linker path looking for a file starting"
96777cea3689Smrg		if test -z "$potlib"; then
9678e19dfac4Smrg		  $ECHO "*** with $libname but no candidates were found. (...for regex pattern test)"
9679e19dfac4Smrg		else
9680e19dfac4Smrg		  $ECHO "*** with $libname and none of the candidates passed a file format test"
9681e19dfac4Smrg		  $ECHO "*** using a regex pattern. Last file checked: $potlib"
9682e19dfac4Smrg		fi
9683e19dfac4Smrg	      fi
9684e19dfac4Smrg	      ;;
9685e19dfac4Smrg	    *)
9686e19dfac4Smrg	      # Add a -L argument.
9687313a12fdSmrg	      func_append newdeplibs " $a_deplib"
9688e19dfac4Smrg	      ;;
9689e19dfac4Smrg	    esac
9690e19dfac4Smrg	  done # Gone through all deplibs.
9691e19dfac4Smrg	  ;;
9692e19dfac4Smrg	none | unknown | *)
96937cea3689Smrg	  newdeplibs=
9694313a12fdSmrg	  tmp_deplibs=`$ECHO " $deplibs" | $SED 's/ -lc$//; s/ -[LR][^ ]*//g'`
96957cea3689Smrg	  if test yes = "$allow_libtool_libs_with_static_runtimes"; then
96967cea3689Smrg	    for i in $predeps $postdeps; do
9697e19dfac4Smrg	      # can't use Xsed below, because $i might contain '/'
96987cea3689Smrg	      tmp_deplibs=`$ECHO " $tmp_deplibs" | $SED "s|$i||"`
9699e19dfac4Smrg	    done
9700e19dfac4Smrg	  fi
9701313a12fdSmrg	  case $tmp_deplibs in
9702313a12fdSmrg	  *[!\	\ ]*)
9703313a12fdSmrg	    echo
97047cea3689Smrg	    if test none = "$deplibs_check_method"; then
9705313a12fdSmrg	      echo "*** Warning: inter-library dependencies are not supported in this platform."
9706e19dfac4Smrg	    else
9707313a12fdSmrg	      echo "*** Warning: inter-library dependencies are not known to be supported."
9708e19dfac4Smrg	    fi
9709313a12fdSmrg	    echo "*** All declared inter-library dependencies are being dropped."
9710e19dfac4Smrg	    droppeddeps=yes
9711313a12fdSmrg	    ;;
9712313a12fdSmrg	  esac
9713e19dfac4Smrg	  ;;
9714e19dfac4Smrg	esac
9715e19dfac4Smrg	versuffix=$versuffix_save
9716e19dfac4Smrg	major=$major_save
9717e19dfac4Smrg	release=$release_save
9718e19dfac4Smrg	libname=$libname_save
9719e19dfac4Smrg	name=$name_save
9720e19dfac4Smrg
9721e19dfac4Smrg	case $host in
9722e19dfac4Smrg	*-*-rhapsody* | *-*-darwin1.[012])
9723e19dfac4Smrg	  # On Rhapsody replace the C library with the System framework
9724313a12fdSmrg	  newdeplibs=`$ECHO " $newdeplibs" | $SED 's/ -lc / System.ltframework /'`
9725e19dfac4Smrg	  ;;
9726e19dfac4Smrg	esac
9727e19dfac4Smrg
97287cea3689Smrg	if test yes = "$droppeddeps"; then
97297cea3689Smrg	  if test yes = "$module"; then
9730313a12fdSmrg	    echo
9731313a12fdSmrg	    echo "*** Warning: libtool could not satisfy all declared inter-library"
9732e19dfac4Smrg	    $ECHO "*** dependencies of module $libname.  Therefore, libtool will create"
9733313a12fdSmrg	    echo "*** a static module, that should work as long as the dlopening"
9734313a12fdSmrg	    echo "*** application is linked with the -dlopen flag."
9735e19dfac4Smrg	    if test -z "$global_symbol_pipe"; then
9736313a12fdSmrg	      echo
9737313a12fdSmrg	      echo "*** However, this would only work if libtool was able to extract symbol"
97387cea3689Smrg	      echo "*** lists from a program, using 'nm' or equivalent, but libtool could"
9739313a12fdSmrg	      echo "*** not find such a program.  So, this module is probably useless."
97407cea3689Smrg	      echo "*** 'nm' from GNU binutils and a full rebuild may help."
9741e19dfac4Smrg	    fi
97427cea3689Smrg	    if test no = "$build_old_libs"; then
97437cea3689Smrg	      oldlibs=$output_objdir/$libname.$libext
9744e19dfac4Smrg	      build_libtool_libs=module
9745e19dfac4Smrg	      build_old_libs=yes
9746e19dfac4Smrg	    else
9747e19dfac4Smrg	      build_libtool_libs=no
9748e19dfac4Smrg	    fi
9749e19dfac4Smrg	  else
9750313a12fdSmrg	    echo "*** The inter-library dependencies that have been dropped here will be"
9751313a12fdSmrg	    echo "*** automatically added whenever a program is linked with this library"
9752313a12fdSmrg	    echo "*** or is declared to -dlopen it."
9753e19dfac4Smrg
97547cea3689Smrg	    if test no = "$allow_undefined"; then
9755313a12fdSmrg	      echo
9756313a12fdSmrg	      echo "*** Since this library must not contain undefined symbols,"
9757313a12fdSmrg	      echo "*** because either the platform does not support them or"
9758313a12fdSmrg	      echo "*** it was explicitly requested with -no-undefined,"
9759313a12fdSmrg	      echo "*** libtool will only create a static version of it."
97607cea3689Smrg	      if test no = "$build_old_libs"; then
97617cea3689Smrg		oldlibs=$output_objdir/$libname.$libext
9762e19dfac4Smrg		build_libtool_libs=module
9763e19dfac4Smrg		build_old_libs=yes
9764e19dfac4Smrg	      else
9765e19dfac4Smrg		build_libtool_libs=no
9766e19dfac4Smrg	      fi
9767e19dfac4Smrg	    fi
9768e19dfac4Smrg	  fi
9769e19dfac4Smrg	fi
9770e19dfac4Smrg	# Done checking deplibs!
9771e19dfac4Smrg	deplibs=$newdeplibs
9772e19dfac4Smrg      fi
9773e19dfac4Smrg      # Time to change all our "foo.ltframework" stuff back to "-framework foo"
9774e19dfac4Smrg      case $host in
9775e19dfac4Smrg	*-*-darwin*)
9776313a12fdSmrg	  newdeplibs=`$ECHO " $newdeplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'`
9777313a12fdSmrg	  new_inherited_linker_flags=`$ECHO " $new_inherited_linker_flags" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'`
9778313a12fdSmrg	  deplibs=`$ECHO " $deplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'`
9779e19dfac4Smrg	  ;;
9780e19dfac4Smrg      esac
9781e19dfac4Smrg
9782e19dfac4Smrg      # move library search paths that coincide with paths to not yet
9783e19dfac4Smrg      # installed libraries to the beginning of the library search list
9784e19dfac4Smrg      new_libs=
9785e19dfac4Smrg      for path in $notinst_path; do
9786e19dfac4Smrg	case " $new_libs " in
9787e19dfac4Smrg	*" -L$path/$objdir "*) ;;
9788e19dfac4Smrg	*)
9789e19dfac4Smrg	  case " $deplibs " in
9790e19dfac4Smrg	  *" -L$path/$objdir "*)
9791313a12fdSmrg	    func_append new_libs " -L$path/$objdir" ;;
9792e19dfac4Smrg	  esac
9793e19dfac4Smrg	  ;;
9794e19dfac4Smrg	esac
9795e19dfac4Smrg      done
9796e19dfac4Smrg      for deplib in $deplibs; do
9797e19dfac4Smrg	case $deplib in
9798e19dfac4Smrg	-L*)
9799e19dfac4Smrg	  case " $new_libs " in
9800e19dfac4Smrg	  *" $deplib "*) ;;
9801313a12fdSmrg	  *) func_append new_libs " $deplib" ;;
9802e19dfac4Smrg	  esac
9803e19dfac4Smrg	  ;;
9804313a12fdSmrg	*) func_append new_libs " $deplib" ;;
9805e19dfac4Smrg	esac
9806e19dfac4Smrg      done
98077cea3689Smrg      deplibs=$new_libs
9808e19dfac4Smrg
9809e19dfac4Smrg      # All the library-specific variables (install_libdir is set above).
9810e19dfac4Smrg      library_names=
9811e19dfac4Smrg      old_library=
9812e19dfac4Smrg      dlname=
9813e19dfac4Smrg
9814e19dfac4Smrg      # Test again, we may have decided not to build it any more
98157cea3689Smrg      if test yes = "$build_libtool_libs"; then
98167cea3689Smrg	# Remove $wl instances when linking with ld.
9817313a12fdSmrg	# FIXME: should test the right _cmds variable.
9818313a12fdSmrg	case $archive_cmds in
9819313a12fdSmrg	  *\$LD\ *) wl= ;;
9820313a12fdSmrg        esac
98217cea3689Smrg	if test yes = "$hardcode_into_libs"; then
9822e19dfac4Smrg	  # Hardcode the library paths
9823e19dfac4Smrg	  hardcode_libdirs=
9824e19dfac4Smrg	  dep_rpath=
98257cea3689Smrg	  rpath=$finalize_rpath
98267cea3689Smrg	  test relink = "$opt_mode" || rpath=$compile_rpath$rpath
9827e19dfac4Smrg	  for libdir in $rpath; do
9828e19dfac4Smrg	    if test -n "$hardcode_libdir_flag_spec"; then
9829e19dfac4Smrg	      if test -n "$hardcode_libdir_separator"; then
9830313a12fdSmrg		func_replace_sysroot "$libdir"
9831313a12fdSmrg		libdir=$func_replace_sysroot_result
9832e19dfac4Smrg		if test -z "$hardcode_libdirs"; then
98337cea3689Smrg		  hardcode_libdirs=$libdir
9834e19dfac4Smrg		else
9835e19dfac4Smrg		  # Just accumulate the unique libdirs.
9836e19dfac4Smrg		  case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in
9837e19dfac4Smrg		  *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*)
9838e19dfac4Smrg		    ;;
9839e19dfac4Smrg		  *)
9840313a12fdSmrg		    func_append hardcode_libdirs "$hardcode_libdir_separator$libdir"
9841e19dfac4Smrg		    ;;
9842e19dfac4Smrg		  esac
9843e19dfac4Smrg		fi
9844e19dfac4Smrg	      else
9845e19dfac4Smrg		eval flag=\"$hardcode_libdir_flag_spec\"
9846313a12fdSmrg		func_append dep_rpath " $flag"
9847e19dfac4Smrg	      fi
9848e19dfac4Smrg	    elif test -n "$runpath_var"; then
9849e19dfac4Smrg	      case "$perm_rpath " in
9850e19dfac4Smrg	      *" $libdir "*) ;;
9851313a12fdSmrg	      *) func_append perm_rpath " $libdir" ;;
9852e19dfac4Smrg	      esac
9853e19dfac4Smrg	    fi
9854e19dfac4Smrg	  done
9855e19dfac4Smrg	  # Substitute the hardcoded libdirs into the rpath.
9856e19dfac4Smrg	  if test -n "$hardcode_libdir_separator" &&
9857e19dfac4Smrg	     test -n "$hardcode_libdirs"; then
98587cea3689Smrg	    libdir=$hardcode_libdirs
9859313a12fdSmrg	    eval "dep_rpath=\"$hardcode_libdir_flag_spec\""
9860e19dfac4Smrg	  fi
9861e19dfac4Smrg	  if test -n "$runpath_var" && test -n "$perm_rpath"; then
9862e19dfac4Smrg	    # We should set the runpath_var.
9863e19dfac4Smrg	    rpath=
9864e19dfac4Smrg	    for dir in $perm_rpath; do
9865313a12fdSmrg	      func_append rpath "$dir:"
9866e19dfac4Smrg	    done
9867e19dfac4Smrg	    eval "$runpath_var='$rpath\$$runpath_var'; export $runpath_var"
9868e19dfac4Smrg	  fi
9869e19dfac4Smrg	  test -n "$dep_rpath" && deplibs="$dep_rpath $deplibs"
9870e19dfac4Smrg	fi
987127702724Smrg
98727cea3689Smrg	shlibpath=$finalize_shlibpath
98737cea3689Smrg	test relink = "$opt_mode" || shlibpath=$compile_shlibpath$shlibpath
9874e19dfac4Smrg	if test -n "$shlibpath"; then
9875e19dfac4Smrg	  eval "$shlibpath_var='$shlibpath\$$shlibpath_var'; export $shlibpath_var"
9876e19dfac4Smrg	fi
987727702724Smrg
9878e19dfac4Smrg	# Get the real and link names of the library.
9879e19dfac4Smrg	eval shared_ext=\"$shrext_cmds\"
9880e19dfac4Smrg	eval library_names=\"$library_names_spec\"
9881e19dfac4Smrg	set dummy $library_names
9882e19dfac4Smrg	shift
98837cea3689Smrg	realname=$1
9884e19dfac4Smrg	shift
988527702724Smrg
9886e19dfac4Smrg	if test -n "$soname_spec"; then
9887e19dfac4Smrg	  eval soname=\"$soname_spec\"
9888e19dfac4Smrg	else
98897cea3689Smrg	  soname=$realname
9890e19dfac4Smrg	fi
9891e19dfac4Smrg	if test -z "$dlname"; then
9892e19dfac4Smrg	  dlname=$soname
9893e19dfac4Smrg	fi
989427702724Smrg
98957cea3689Smrg	lib=$output_objdir/$realname
9896e19dfac4Smrg	linknames=
9897e19dfac4Smrg	for link
9898e19dfac4Smrg	do
9899313a12fdSmrg	  func_append linknames " $link"
9900e19dfac4Smrg	done
990127702724Smrg
9902e19dfac4Smrg	# Use standard objects if they are pic
9903313a12fdSmrg	test -z "$pic_flag" && libobjs=`$ECHO "$libobjs" | $SP2NL | $SED "$lo2o" | $NL2SP`
9904e19dfac4Smrg	test "X$libobjs" = "X " && libobjs=
990527702724Smrg
9906e19dfac4Smrg	delfiles=
9907e19dfac4Smrg	if test -n "$export_symbols" && test -n "$include_expsyms"; then
9908e19dfac4Smrg	  $opt_dry_run || cp "$export_symbols" "$output_objdir/$libname.uexp"
99097cea3689Smrg	  export_symbols=$output_objdir/$libname.uexp
9910313a12fdSmrg	  func_append delfiles " $export_symbols"
9911e19dfac4Smrg	fi
991227702724Smrg
9913e19dfac4Smrg	orig_export_symbols=
9914e19dfac4Smrg	case $host_os in
9915e19dfac4Smrg	cygwin* | mingw* | cegcc*)
9916e19dfac4Smrg	  if test -n "$export_symbols" && test -z "$export_symbols_regex"; then
9917e19dfac4Smrg	    # exporting using user supplied symfile
99187cea3689Smrg	    func_dll_def_p "$export_symbols" || {
9919e19dfac4Smrg	      # and it's NOT already a .def file. Must figure out
9920e19dfac4Smrg	      # which of the given symbols are data symbols and tag
9921e19dfac4Smrg	      # them as such. So, trigger use of export_symbols_cmds.
9922e19dfac4Smrg	      # export_symbols gets reassigned inside the "prepare
9923e19dfac4Smrg	      # the list of exported symbols" if statement, so the
9924e19dfac4Smrg	      # include_expsyms logic still works.
99257cea3689Smrg	      orig_export_symbols=$export_symbols
9926e19dfac4Smrg	      export_symbols=
9927e19dfac4Smrg	      always_export_symbols=yes
99287cea3689Smrg	    }
9929e19dfac4Smrg	  fi
9930e19dfac4Smrg	  ;;
9931e19dfac4Smrg	esac
993227702724Smrg
9933e19dfac4Smrg	# Prepare the list of exported symbols
9934e19dfac4Smrg	if test -z "$export_symbols"; then
99357cea3689Smrg	  if test yes = "$always_export_symbols" || test -n "$export_symbols_regex"; then
99367cea3689Smrg	    func_verbose "generating symbol list for '$libname.la'"
99377cea3689Smrg	    export_symbols=$output_objdir/$libname.exp
9938e19dfac4Smrg	    $opt_dry_run || $RM $export_symbols
9939e19dfac4Smrg	    cmds=$export_symbols_cmds
99407cea3689Smrg	    save_ifs=$IFS; IFS='~'
9941313a12fdSmrg	    for cmd1 in $cmds; do
99427cea3689Smrg	      IFS=$save_ifs
9943313a12fdSmrg	      # Take the normal branch if the nm_file_list_spec branch
9944313a12fdSmrg	      # doesn't work or if tool conversion is not needed.
9945313a12fdSmrg	      case $nm_file_list_spec~$to_tool_file_cmd in
9946313a12fdSmrg		*~func_convert_file_noop | *~func_convert_file_msys_to_w32 | ~*)
9947313a12fdSmrg		  try_normal_branch=yes
9948313a12fdSmrg		  eval cmd=\"$cmd1\"
9949313a12fdSmrg		  func_len " $cmd"
9950313a12fdSmrg		  len=$func_len_result
9951313a12fdSmrg		  ;;
9952313a12fdSmrg		*)
9953313a12fdSmrg		  try_normal_branch=no
9954313a12fdSmrg		  ;;
9955313a12fdSmrg	      esac
99567cea3689Smrg	      if test yes = "$try_normal_branch" \
9957313a12fdSmrg		 && { test "$len" -lt "$max_cmd_len" \
9958313a12fdSmrg		      || test "$max_cmd_len" -le -1; }
9959313a12fdSmrg	      then
9960313a12fdSmrg		func_show_eval "$cmd" 'exit $?'
9961313a12fdSmrg		skipped_export=false
9962313a12fdSmrg	      elif test -n "$nm_file_list_spec"; then
9963313a12fdSmrg		func_basename "$output"
9964313a12fdSmrg		output_la=$func_basename_result
9965313a12fdSmrg		save_libobjs=$libobjs
9966313a12fdSmrg		save_output=$output
99677cea3689Smrg		output=$output_objdir/$output_la.nm
9968313a12fdSmrg		func_to_tool_file "$output"
9969313a12fdSmrg		libobjs=$nm_file_list_spec$func_to_tool_file_result
9970313a12fdSmrg		func_append delfiles " $output"
9971313a12fdSmrg		func_verbose "creating $NM input file list: $output"
9972313a12fdSmrg		for obj in $save_libobjs; do
9973313a12fdSmrg		  func_to_tool_file "$obj"
9974313a12fdSmrg		  $ECHO "$func_to_tool_file_result"
9975313a12fdSmrg		done > "$output"
9976313a12fdSmrg		eval cmd=\"$cmd1\"
9977e19dfac4Smrg		func_show_eval "$cmd" 'exit $?'
9978313a12fdSmrg		output=$save_output
9979313a12fdSmrg		libobjs=$save_libobjs
9980e19dfac4Smrg		skipped_export=false
9981e19dfac4Smrg	      else
9982e19dfac4Smrg		# The command line is too long to execute in one step.
9983e19dfac4Smrg		func_verbose "using reloadable object file for export list..."
9984e19dfac4Smrg		skipped_export=:
9985e19dfac4Smrg		# Break out early, otherwise skipped_export may be
9986e19dfac4Smrg		# set to false by a later but shorter cmd.
9987e19dfac4Smrg		break
9988e19dfac4Smrg	      fi
9989e19dfac4Smrg	    done
99907cea3689Smrg	    IFS=$save_ifs
99917cea3689Smrg	    if test -n "$export_symbols_regex" && test : != "$skipped_export"; then
9992e19dfac4Smrg	      func_show_eval '$EGREP -e "$export_symbols_regex" "$export_symbols" > "${export_symbols}T"'
9993e19dfac4Smrg	      func_show_eval '$MV "${export_symbols}T" "$export_symbols"'
9994e19dfac4Smrg	    fi
9995e19dfac4Smrg	  fi
9996e19dfac4Smrg	fi
999727702724Smrg
9998e19dfac4Smrg	if test -n "$export_symbols" && test -n "$include_expsyms"; then
99997cea3689Smrg	  tmp_export_symbols=$export_symbols
100007cea3689Smrg	  test -n "$orig_export_symbols" && tmp_export_symbols=$orig_export_symbols
10001313a12fdSmrg	  $opt_dry_run || eval '$ECHO "$include_expsyms" | $SP2NL >> "$tmp_export_symbols"'
10002e19dfac4Smrg	fi
1000327702724Smrg
100047cea3689Smrg	if test : != "$skipped_export" && test -n "$orig_export_symbols"; then
10005e19dfac4Smrg	  # The given exports_symbols file has to be filtered, so filter it.
100067cea3689Smrg	  func_verbose "filter symbol list for '$libname.la' to tag DATA exports"
10007e19dfac4Smrg	  # FIXME: $output_objdir/$libname.filter potentially contains lots of
100087cea3689Smrg	  # 's' commands, which not all seds can handle. GNU sed should be fine
10009e19dfac4Smrg	  # though. Also, the filter scales superlinearly with the number of
10010e19dfac4Smrg	  # global variables. join(1) would be nice here, but unfortunately
10011e19dfac4Smrg	  # isn't a blessed tool.
10012e19dfac4Smrg	  $opt_dry_run || $SED -e '/[ ,]DATA/!d;s,\(.*\)\([ \,].*\),s|^\1$|\1\2|,' < $export_symbols > $output_objdir/$libname.filter
10013313a12fdSmrg	  func_append delfiles " $export_symbols $output_objdir/$libname.filter"
10014e19dfac4Smrg	  export_symbols=$output_objdir/$libname.def
10015e19dfac4Smrg	  $opt_dry_run || $SED -f $output_objdir/$libname.filter < $orig_export_symbols > $export_symbols
1001627702724Smrg	fi
1001727702724Smrg
10018e19dfac4Smrg	tmp_deplibs=
10019e19dfac4Smrg	for test_deplib in $deplibs; do
10020e19dfac4Smrg	  case " $convenience " in
10021e19dfac4Smrg	  *" $test_deplib "*) ;;
10022e19dfac4Smrg	  *)
10023313a12fdSmrg	    func_append tmp_deplibs " $test_deplib"
10024e19dfac4Smrg	    ;;
10025e19dfac4Smrg	  esac
10026e19dfac4Smrg	done
100277cea3689Smrg	deplibs=$tmp_deplibs
1002827702724Smrg
10029e19dfac4Smrg	if test -n "$convenience"; then
10030e19dfac4Smrg	  if test -n "$whole_archive_flag_spec" &&
100317cea3689Smrg	    test yes = "$compiler_needs_object" &&
10032e19dfac4Smrg	    test -z "$libobjs"; then
10033e19dfac4Smrg	    # extract the archives, so we have objects to list.
10034e19dfac4Smrg	    # TODO: could optimize this to just extract one archive.
10035e19dfac4Smrg	    whole_archive_flag_spec=
10036e19dfac4Smrg	  fi
10037e19dfac4Smrg	  if test -n "$whole_archive_flag_spec"; then
10038e19dfac4Smrg	    save_libobjs=$libobjs
10039e19dfac4Smrg	    eval libobjs=\"\$libobjs $whole_archive_flag_spec\"
10040e19dfac4Smrg	    test "X$libobjs" = "X " && libobjs=
10041e19dfac4Smrg	  else
100427cea3689Smrg	    gentop=$output_objdir/${outputname}x
10043313a12fdSmrg	    func_append generated " $gentop"
1004427702724Smrg
10045e19dfac4Smrg	    func_extract_archives $gentop $convenience
10046313a12fdSmrg	    func_append libobjs " $func_extract_archives_result"
10047e19dfac4Smrg	    test "X$libobjs" = "X " && libobjs=
10048e19dfac4Smrg	  fi
10049e19dfac4Smrg	fi
1005027702724Smrg
100517cea3689Smrg	if test yes = "$thread_safe" && test -n "$thread_safe_flag_spec"; then
10052e19dfac4Smrg	  eval flag=\"$thread_safe_flag_spec\"
10053313a12fdSmrg	  func_append linker_flags " $flag"
10054e19dfac4Smrg	fi
1005527702724Smrg
10056e19dfac4Smrg	# Make a backup of the uninstalled library when relinking
100577cea3689Smrg	if test relink = "$opt_mode"; then
10058e19dfac4Smrg	  $opt_dry_run || eval '(cd $output_objdir && $RM ${realname}U && $MV $realname ${realname}U)' || exit $?
1005927702724Smrg	fi
1006027702724Smrg
10061e19dfac4Smrg	# Do each of the archive commands.
100627cea3689Smrg	if test yes = "$module" && test -n "$module_cmds"; then
10063e19dfac4Smrg	  if test -n "$export_symbols" && test -n "$module_expsym_cmds"; then
10064e19dfac4Smrg	    eval test_cmds=\"$module_expsym_cmds\"
10065e19dfac4Smrg	    cmds=$module_expsym_cmds
10066e19dfac4Smrg	  else
10067e19dfac4Smrg	    eval test_cmds=\"$module_cmds\"
10068e19dfac4Smrg	    cmds=$module_cmds
10069e19dfac4Smrg	  fi
10070e19dfac4Smrg	else
10071e19dfac4Smrg	  if test -n "$export_symbols" && test -n "$archive_expsym_cmds"; then
10072e19dfac4Smrg	    eval test_cmds=\"$archive_expsym_cmds\"
10073e19dfac4Smrg	    cmds=$archive_expsym_cmds
10074e19dfac4Smrg	  else
10075e19dfac4Smrg	    eval test_cmds=\"$archive_cmds\"
10076e19dfac4Smrg	    cmds=$archive_cmds
10077e19dfac4Smrg	  fi
1007827702724Smrg	fi
1007927702724Smrg
100807cea3689Smrg	if test : != "$skipped_export" &&
10081e19dfac4Smrg	   func_len " $test_cmds" &&
10082e19dfac4Smrg	   len=$func_len_result &&
10083e19dfac4Smrg	   test "$len" -lt "$max_cmd_len" || test "$max_cmd_len" -le -1; then
10084e19dfac4Smrg	  :
10085e19dfac4Smrg	else
10086e19dfac4Smrg	  # The command line is too long to link in one step, link piecewise
10087e19dfac4Smrg	  # or, if using GNU ld and skipped_export is not :, use a linker
10088e19dfac4Smrg	  # script.
1008927702724Smrg
10090e19dfac4Smrg	  # Save the value of $output and $libobjs because we want to
10091e19dfac4Smrg	  # use them later.  If we have whole_archive_flag_spec, we
10092e19dfac4Smrg	  # want to use save_libobjs as it was before
10093e19dfac4Smrg	  # whole_archive_flag_spec was expanded, because we can't
10094e19dfac4Smrg	  # assume the linker understands whole_archive_flag_spec.
10095e19dfac4Smrg	  # This may have to be revisited, in case too many
10096e19dfac4Smrg	  # convenience libraries get linked in and end up exceeding
10097e19dfac4Smrg	  # the spec.
10098e19dfac4Smrg	  if test -z "$convenience" || test -z "$whole_archive_flag_spec"; then
10099e19dfac4Smrg	    save_libobjs=$libobjs
10100e19dfac4Smrg	  fi
10101e19dfac4Smrg	  save_output=$output
10102313a12fdSmrg	  func_basename "$output"
10103313a12fdSmrg	  output_la=$func_basename_result
1010427702724Smrg
10105e19dfac4Smrg	  # Clear the reloadable object creation command queue and
10106e19dfac4Smrg	  # initialize k to one.
10107e19dfac4Smrg	  test_cmds=
10108e19dfac4Smrg	  concat_cmds=
10109e19dfac4Smrg	  objlist=
10110e19dfac4Smrg	  last_robj=
10111e19dfac4Smrg	  k=1
1011227702724Smrg
101137cea3689Smrg	  if test -n "$save_libobjs" && test : != "$skipped_export" && test yes = "$with_gnu_ld"; then
101147cea3689Smrg	    output=$output_objdir/$output_la.lnkscript
10115e19dfac4Smrg	    func_verbose "creating GNU ld script: $output"
10116313a12fdSmrg	    echo 'INPUT (' > $output
10117e19dfac4Smrg	    for obj in $save_libobjs
10118e19dfac4Smrg	    do
10119313a12fdSmrg	      func_to_tool_file "$obj"
10120313a12fdSmrg	      $ECHO "$func_to_tool_file_result" >> $output
10121e19dfac4Smrg	    done
10122313a12fdSmrg	    echo ')' >> $output
10123313a12fdSmrg	    func_append delfiles " $output"
10124313a12fdSmrg	    func_to_tool_file "$output"
10125313a12fdSmrg	    output=$func_to_tool_file_result
101267cea3689Smrg	  elif test -n "$save_libobjs" && test : != "$skipped_export" && test -n "$file_list_spec"; then
101277cea3689Smrg	    output=$output_objdir/$output_la.lnk
10128e19dfac4Smrg	    func_verbose "creating linker input file list: $output"
10129e19dfac4Smrg	    : > $output
10130e19dfac4Smrg	    set x $save_libobjs
10131e19dfac4Smrg	    shift
10132e19dfac4Smrg	    firstobj=
101337cea3689Smrg	    if test yes = "$compiler_needs_object"; then
10134e19dfac4Smrg	      firstobj="$1 "
10135e19dfac4Smrg	      shift
10136e19dfac4Smrg	    fi
10137e19dfac4Smrg	    for obj
10138e19dfac4Smrg	    do
10139313a12fdSmrg	      func_to_tool_file "$obj"
10140313a12fdSmrg	      $ECHO "$func_to_tool_file_result" >> $output
10141e19dfac4Smrg	    done
10142313a12fdSmrg	    func_append delfiles " $output"
10143313a12fdSmrg	    func_to_tool_file "$output"
10144313a12fdSmrg	    output=$firstobj\"$file_list_spec$func_to_tool_file_result\"
10145e19dfac4Smrg	  else
10146e19dfac4Smrg	    if test -n "$save_libobjs"; then
10147e19dfac4Smrg	      func_verbose "creating reloadable object files..."
101487cea3689Smrg	      output=$output_objdir/$output_la-$k.$objext
10149e19dfac4Smrg	      eval test_cmds=\"$reload_cmds\"
10150e19dfac4Smrg	      func_len " $test_cmds"
10151e19dfac4Smrg	      len0=$func_len_result
10152e19dfac4Smrg	      len=$len0
10153e19dfac4Smrg
10154e19dfac4Smrg	      # Loop over the list of objects to be linked.
10155e19dfac4Smrg	      for obj in $save_libobjs
10156e19dfac4Smrg	      do
10157e19dfac4Smrg		func_len " $obj"
10158e19dfac4Smrg		func_arith $len + $func_len_result
10159e19dfac4Smrg		len=$func_arith_result
101607cea3689Smrg		if test -z "$objlist" ||
10161e19dfac4Smrg		   test "$len" -lt "$max_cmd_len"; then
10162e19dfac4Smrg		  func_append objlist " $obj"
10163e19dfac4Smrg		else
10164e19dfac4Smrg		  # The command $test_cmds is almost too long, add a
10165e19dfac4Smrg		  # command to the queue.
101667cea3689Smrg		  if test 1 -eq "$k"; then
10167e19dfac4Smrg		    # The first file doesn't have a previous command to add.
10168313a12fdSmrg		    reload_objs=$objlist
10169313a12fdSmrg		    eval concat_cmds=\"$reload_cmds\"
10170e19dfac4Smrg		  else
10171e19dfac4Smrg		    # All subsequent reloadable object files will link in
10172e19dfac4Smrg		    # the last one created.
10173313a12fdSmrg		    reload_objs="$objlist $last_robj"
10174313a12fdSmrg		    eval concat_cmds=\"\$concat_cmds~$reload_cmds~\$RM $last_robj\"
10175e19dfac4Smrg		  fi
101767cea3689Smrg		  last_robj=$output_objdir/$output_la-$k.$objext
10177e19dfac4Smrg		  func_arith $k + 1
10178e19dfac4Smrg		  k=$func_arith_result
101797cea3689Smrg		  output=$output_objdir/$output_la-$k.$objext
10180313a12fdSmrg		  objlist=" $obj"
10181e19dfac4Smrg		  func_len " $last_robj"
10182e19dfac4Smrg		  func_arith $len0 + $func_len_result
10183e19dfac4Smrg		  len=$func_arith_result
10184e19dfac4Smrg		fi
10185e19dfac4Smrg	      done
10186e19dfac4Smrg	      # Handle the remaining objects by creating one last
10187e19dfac4Smrg	      # reloadable object file.  All subsequent reloadable object
10188e19dfac4Smrg	      # files will link in the last one created.
10189e19dfac4Smrg	      test -z "$concat_cmds" || concat_cmds=$concat_cmds~
10190313a12fdSmrg	      reload_objs="$objlist $last_robj"
101917cea3689Smrg	      eval concat_cmds=\"\$concat_cmds$reload_cmds\"
10192e19dfac4Smrg	      if test -n "$last_robj"; then
101937cea3689Smrg	        eval concat_cmds=\"\$concat_cmds~\$RM $last_robj\"
10194e19dfac4Smrg	      fi
10195313a12fdSmrg	      func_append delfiles " $output"
1019627702724Smrg
10197e19dfac4Smrg	    else
10198e19dfac4Smrg	      output=
10199e19dfac4Smrg	    fi
1020027702724Smrg
102017cea3689Smrg	    ${skipped_export-false} && {
102027cea3689Smrg	      func_verbose "generating symbol list for '$libname.la'"
102037cea3689Smrg	      export_symbols=$output_objdir/$libname.exp
10204e19dfac4Smrg	      $opt_dry_run || $RM $export_symbols
10205e19dfac4Smrg	      libobjs=$output
10206e19dfac4Smrg	      # Append the command to create the export file.
10207e19dfac4Smrg	      test -z "$concat_cmds" || concat_cmds=$concat_cmds~
10208e19dfac4Smrg	      eval concat_cmds=\"\$concat_cmds$export_symbols_cmds\"
10209e19dfac4Smrg	      if test -n "$last_robj"; then
10210e19dfac4Smrg		eval concat_cmds=\"\$concat_cmds~\$RM $last_robj\"
10211e19dfac4Smrg	      fi
102127cea3689Smrg	    }
1021327702724Smrg
10214e19dfac4Smrg	    test -n "$save_libobjs" &&
10215e19dfac4Smrg	      func_verbose "creating a temporary reloadable object file: $output"
1021627702724Smrg
10217e19dfac4Smrg	    # Loop through the commands generated above and execute them.
102187cea3689Smrg	    save_ifs=$IFS; IFS='~'
10219e19dfac4Smrg	    for cmd in $concat_cmds; do
102207cea3689Smrg	      IFS=$save_ifs
102217cea3689Smrg	      $opt_quiet || {
1022295b7a5c8Smrg		  func_quote_arg expand,pretty "$cmd"
1022395b7a5c8Smrg		  eval "func_echo $func_quote_arg_result"
10224e19dfac4Smrg	      }
10225e19dfac4Smrg	      $opt_dry_run || eval "$cmd" || {
10226e19dfac4Smrg		lt_exit=$?
10227e19dfac4Smrg
10228e19dfac4Smrg		# Restore the uninstalled library and exit
102297cea3689Smrg		if test relink = "$opt_mode"; then
10230e19dfac4Smrg		  ( cd "$output_objdir" && \
10231e19dfac4Smrg		    $RM "${realname}T" && \
10232e19dfac4Smrg		    $MV "${realname}U" "$realname" )
10233e19dfac4Smrg		fi
1023427702724Smrg
10235e19dfac4Smrg		exit $lt_exit
10236e19dfac4Smrg	      }
10237e19dfac4Smrg	    done
102387cea3689Smrg	    IFS=$save_ifs
10239e19dfac4Smrg
10240e19dfac4Smrg	    if test -n "$export_symbols_regex" && ${skipped_export-false}; then
10241e19dfac4Smrg	      func_show_eval '$EGREP -e "$export_symbols_regex" "$export_symbols" > "${export_symbols}T"'
10242e19dfac4Smrg	      func_show_eval '$MV "${export_symbols}T" "$export_symbols"'
1024327702724Smrg	    fi
1024427702724Smrg	  fi
1024527702724Smrg
102467cea3689Smrg          ${skipped_export-false} && {
10247e19dfac4Smrg	    if test -n "$export_symbols" && test -n "$include_expsyms"; then
102487cea3689Smrg	      tmp_export_symbols=$export_symbols
102497cea3689Smrg	      test -n "$orig_export_symbols" && tmp_export_symbols=$orig_export_symbols
10250313a12fdSmrg	      $opt_dry_run || eval '$ECHO "$include_expsyms" | $SP2NL >> "$tmp_export_symbols"'
10251e19dfac4Smrg	    fi
1025227702724Smrg
10253e19dfac4Smrg	    if test -n "$orig_export_symbols"; then
10254e19dfac4Smrg	      # The given exports_symbols file has to be filtered, so filter it.
102557cea3689Smrg	      func_verbose "filter symbol list for '$libname.la' to tag DATA exports"
10256e19dfac4Smrg	      # FIXME: $output_objdir/$libname.filter potentially contains lots of
102577cea3689Smrg	      # 's' commands, which not all seds can handle. GNU sed should be fine
10258e19dfac4Smrg	      # though. Also, the filter scales superlinearly with the number of
10259e19dfac4Smrg	      # global variables. join(1) would be nice here, but unfortunately
10260e19dfac4Smrg	      # isn't a blessed tool.
10261e19dfac4Smrg	      $opt_dry_run || $SED -e '/[ ,]DATA/!d;s,\(.*\)\([ \,].*\),s|^\1$|\1\2|,' < $export_symbols > $output_objdir/$libname.filter
10262313a12fdSmrg	      func_append delfiles " $export_symbols $output_objdir/$libname.filter"
10263e19dfac4Smrg	      export_symbols=$output_objdir/$libname.def
10264e19dfac4Smrg	      $opt_dry_run || $SED -f $output_objdir/$libname.filter < $orig_export_symbols > $export_symbols
10265e19dfac4Smrg	    fi
102667cea3689Smrg	  }
1026727702724Smrg
10268e19dfac4Smrg	  libobjs=$output
10269e19dfac4Smrg	  # Restore the value of output.
10270e19dfac4Smrg	  output=$save_output
1027127702724Smrg
10272e19dfac4Smrg	  if test -n "$convenience" && test -n "$whole_archive_flag_spec"; then
10273e19dfac4Smrg	    eval libobjs=\"\$libobjs $whole_archive_flag_spec\"
10274e19dfac4Smrg	    test "X$libobjs" = "X " && libobjs=
10275e19dfac4Smrg	  fi
10276e19dfac4Smrg	  # Expand the library linking commands again to reset the
10277e19dfac4Smrg	  # value of $libobjs for piecewise linking.
10278e19dfac4Smrg
10279e19dfac4Smrg	  # Do each of the archive commands.
102807cea3689Smrg	  if test yes = "$module" && test -n "$module_cmds"; then
10281e19dfac4Smrg	    if test -n "$export_symbols" && test -n "$module_expsym_cmds"; then
10282e19dfac4Smrg	      cmds=$module_expsym_cmds
1028327702724Smrg	    else
10284e19dfac4Smrg	      cmds=$module_cmds
1028527702724Smrg	    fi
1028627702724Smrg	  else
10287e19dfac4Smrg	    if test -n "$export_symbols" && test -n "$archive_expsym_cmds"; then
10288e19dfac4Smrg	      cmds=$archive_expsym_cmds
10289e19dfac4Smrg	    else
10290e19dfac4Smrg	      cmds=$archive_cmds
10291e19dfac4Smrg	    fi
1029227702724Smrg	  fi
1029327702724Smrg	fi
1029427702724Smrg
10295e19dfac4Smrg	if test -n "$delfiles"; then
10296e19dfac4Smrg	  # Append the command to remove temporary files to $cmds.
10297e19dfac4Smrg	  eval cmds=\"\$cmds~\$RM $delfiles\"
10298e19dfac4Smrg	fi
1029927702724Smrg
10300e19dfac4Smrg	# Add any objects from preloaded convenience libraries
10301e19dfac4Smrg	if test -n "$dlprefiles"; then
103027cea3689Smrg	  gentop=$output_objdir/${outputname}x
10303313a12fdSmrg	  func_append generated " $gentop"
1030427702724Smrg
10305e19dfac4Smrg	  func_extract_archives $gentop $dlprefiles
10306313a12fdSmrg	  func_append libobjs " $func_extract_archives_result"
10307e19dfac4Smrg	  test "X$libobjs" = "X " && libobjs=
1030827702724Smrg	fi
1030927702724Smrg
103107cea3689Smrg	save_ifs=$IFS; IFS='~'
10311e19dfac4Smrg	for cmd in $cmds; do
103127cea3689Smrg	  IFS=$sp$nl
10313e19dfac4Smrg	  eval cmd=\"$cmd\"
103147cea3689Smrg	  IFS=$save_ifs
103157cea3689Smrg	  $opt_quiet || {
1031695b7a5c8Smrg	    func_quote_arg expand,pretty "$cmd"
1031795b7a5c8Smrg	    eval "func_echo $func_quote_arg_result"
10318e19dfac4Smrg	  }
10319e19dfac4Smrg	  $opt_dry_run || eval "$cmd" || {
10320e19dfac4Smrg	    lt_exit=$?
1032127702724Smrg
10322e19dfac4Smrg	    # Restore the uninstalled library and exit
103237cea3689Smrg	    if test relink = "$opt_mode"; then
10324e19dfac4Smrg	      ( cd "$output_objdir" && \
10325e19dfac4Smrg	        $RM "${realname}T" && \
10326e19dfac4Smrg		$MV "${realname}U" "$realname" )
10327e19dfac4Smrg	    fi
10328e19dfac4Smrg
10329e19dfac4Smrg	    exit $lt_exit
10330e19dfac4Smrg	  }
10331e19dfac4Smrg	done
103327cea3689Smrg	IFS=$save_ifs
10333e19dfac4Smrg
10334e19dfac4Smrg	# Restore the uninstalled library and exit
103357cea3689Smrg	if test relink = "$opt_mode"; then
10336e19dfac4Smrg	  $opt_dry_run || eval '(cd $output_objdir && $RM ${realname}T && $MV $realname ${realname}T && $MV ${realname}U $realname)' || exit $?
10337e19dfac4Smrg
10338e19dfac4Smrg	  if test -n "$convenience"; then
10339e19dfac4Smrg	    if test -z "$whole_archive_flag_spec"; then
10340e19dfac4Smrg	      func_show_eval '${RM}r "$gentop"'
1034127702724Smrg	    fi
1034227702724Smrg	  fi
1034327702724Smrg
10344e19dfac4Smrg	  exit $EXIT_SUCCESS
10345e19dfac4Smrg	fi
1034627702724Smrg
10347e19dfac4Smrg	# Create links to the real library.
10348e19dfac4Smrg	for linkname in $linknames; do
10349e19dfac4Smrg	  if test "$realname" != "$linkname"; then
10350e19dfac4Smrg	    func_show_eval '(cd "$output_objdir" && $RM "$linkname" && $LN_S "$realname" "$linkname")' 'exit $?'
10351e19dfac4Smrg	  fi
10352e19dfac4Smrg	done
10353e19dfac4Smrg
10354e19dfac4Smrg	# If -module or -export-dynamic was specified, set the dlname.
103557cea3689Smrg	if test yes = "$module" || test yes = "$export_dynamic"; then
10356e19dfac4Smrg	  # On all known operating systems, these are identical.
103577cea3689Smrg	  dlname=$soname
10358e19dfac4Smrg	fi
10359e19dfac4Smrg      fi
10360e19dfac4Smrg      ;;
10361e19dfac4Smrg
10362e19dfac4Smrg    obj)
103637cea3689Smrg      if test -n "$dlfiles$dlprefiles" || test no != "$dlself"; then
103647cea3689Smrg	func_warning "'-dlopen' is ignored for objects"
10365e19dfac4Smrg      fi
10366e19dfac4Smrg
10367e19dfac4Smrg      case " $deplibs" in
10368e19dfac4Smrg      *\ -l* | *\ -L*)
103697cea3689Smrg	func_warning "'-l' and '-L' are ignored for objects" ;;
10370e19dfac4Smrg      esac
10371e19dfac4Smrg
10372e19dfac4Smrg      test -n "$rpath" && \
103737cea3689Smrg	func_warning "'-rpath' is ignored for objects"
10374e19dfac4Smrg
10375e19dfac4Smrg      test -n "$xrpath" && \
103767cea3689Smrg	func_warning "'-R' is ignored for objects"
10377e19dfac4Smrg
10378e19dfac4Smrg      test -n "$vinfo" && \
103797cea3689Smrg	func_warning "'-version-info' is ignored for objects"
10380e19dfac4Smrg
10381e19dfac4Smrg      test -n "$release" && \
103827cea3689Smrg	func_warning "'-release' is ignored for objects"
10383e19dfac4Smrg
10384e19dfac4Smrg      case $output in
10385e19dfac4Smrg      *.lo)
10386e19dfac4Smrg	test -n "$objs$old_deplibs" && \
103877cea3689Smrg	  func_fatal_error "cannot build library object '$output' from non-libtool objects"
10388e19dfac4Smrg
10389e19dfac4Smrg	libobj=$output
10390e19dfac4Smrg	func_lo2o "$libobj"
10391e19dfac4Smrg	obj=$func_lo2o_result
10392e19dfac4Smrg	;;
10393e19dfac4Smrg      *)
10394e19dfac4Smrg	libobj=
103957cea3689Smrg	obj=$output
10396e19dfac4Smrg	;;
10397e19dfac4Smrg      esac
10398e19dfac4Smrg
10399e19dfac4Smrg      # Delete the old objects.
10400e19dfac4Smrg      $opt_dry_run || $RM $obj $libobj
10401e19dfac4Smrg
10402e19dfac4Smrg      # Objects from convenience libraries.  This assumes
10403e19dfac4Smrg      # single-version convenience libraries.  Whenever we create
10404e19dfac4Smrg      # different ones for PIC/non-PIC, this we'll have to duplicate
10405e19dfac4Smrg      # the extraction.
10406e19dfac4Smrg      reload_conv_objs=
10407e19dfac4Smrg      gentop=
104087cea3689Smrg      # if reload_cmds runs $LD directly, get rid of -Wl from
104097cea3689Smrg      # whole_archive_flag_spec and hope we can get by with turning comma
104107cea3689Smrg      # into space.
104117cea3689Smrg      case $reload_cmds in
104127cea3689Smrg        *\$LD[\ \$]*) wl= ;;
104137cea3689Smrg      esac
10414e19dfac4Smrg      if test -n "$convenience"; then
10415e19dfac4Smrg	if test -n "$whole_archive_flag_spec"; then
10416e19dfac4Smrg	  eval tmp_whole_archive_flags=\"$whole_archive_flag_spec\"
104177cea3689Smrg	  test -n "$wl" || tmp_whole_archive_flags=`$ECHO "$tmp_whole_archive_flags" | $SED 's|,| |g'`
104187cea3689Smrg	  reload_conv_objs=$reload_objs\ $tmp_whole_archive_flags
10419e19dfac4Smrg	else
104207cea3689Smrg	  gentop=$output_objdir/${obj}x
10421313a12fdSmrg	  func_append generated " $gentop"
10422e19dfac4Smrg
10423e19dfac4Smrg	  func_extract_archives $gentop $convenience
10424e19dfac4Smrg	  reload_conv_objs="$reload_objs $func_extract_archives_result"
10425e19dfac4Smrg	fi
10426e19dfac4Smrg      fi
1042727702724Smrg
10428313a12fdSmrg      # If we're not building shared, we need to use non_pic_objs
104297cea3689Smrg      test yes = "$build_libtool_libs" || libobjs=$non_pic_objects
10430313a12fdSmrg
10431e19dfac4Smrg      # Create the old-style object.
104327cea3689Smrg      reload_objs=$objs$old_deplibs' '`$ECHO "$libobjs" | $SP2NL | $SED "/\.$libext$/d; /\.lib$/d; $lo2o" | $NL2SP`' '$reload_conv_objs
1043327702724Smrg
104347cea3689Smrg      output=$obj
10435e19dfac4Smrg      func_execute_cmds "$reload_cmds" 'exit $?'
1043627702724Smrg
10437e19dfac4Smrg      # Exit if we aren't doing a library object file.
10438e19dfac4Smrg      if test -z "$libobj"; then
10439e19dfac4Smrg	if test -n "$gentop"; then
10440e19dfac4Smrg	  func_show_eval '${RM}r "$gentop"'
10441e19dfac4Smrg	fi
1044227702724Smrg
10443e19dfac4Smrg	exit $EXIT_SUCCESS
10444e19dfac4Smrg      fi
1044527702724Smrg
104467cea3689Smrg      test yes = "$build_libtool_libs" || {
10447e19dfac4Smrg	if test -n "$gentop"; then
10448e19dfac4Smrg	  func_show_eval '${RM}r "$gentop"'
10449e19dfac4Smrg	fi
1045027702724Smrg
10451e19dfac4Smrg	# Create an invalid libtool object if no PIC, so that we don't
10452e19dfac4Smrg	# accidentally link it into a program.
10453e19dfac4Smrg	# $show "echo timestamp > $libobj"
10454e19dfac4Smrg	# $opt_dry_run || eval "echo timestamp > $libobj" || exit $?
10455e19dfac4Smrg	exit $EXIT_SUCCESS
104567cea3689Smrg      }
1045727702724Smrg
104587cea3689Smrg      if test -n "$pic_flag" || test default != "$pic_mode"; then
10459e19dfac4Smrg	# Only do commands if we really have different PIC objects.
10460e19dfac4Smrg	reload_objs="$libobjs $reload_conv_objs"
104617cea3689Smrg	output=$libobj
10462e19dfac4Smrg	func_execute_cmds "$reload_cmds" 'exit $?'
1046327702724Smrg      fi
1046427702724Smrg
10465e19dfac4Smrg      if test -n "$gentop"; then
10466e19dfac4Smrg	func_show_eval '${RM}r "$gentop"'
10467e19dfac4Smrg      fi
1046827702724Smrg
10469e19dfac4Smrg      exit $EXIT_SUCCESS
10470e19dfac4Smrg      ;;
1047127702724Smrg
10472e19dfac4Smrg    prog)
10473e19dfac4Smrg      case $host in
10474e19dfac4Smrg	*cygwin*) func_stripname '' '.exe' "$output"
10475e19dfac4Smrg	          output=$func_stripname_result.exe;;
1047627702724Smrg      esac
10477e19dfac4Smrg      test -n "$vinfo" && \
104787cea3689Smrg	func_warning "'-version-info' is ignored for programs"
1047927702724Smrg
10480e19dfac4Smrg      test -n "$release" && \
104817cea3689Smrg	func_warning "'-release' is ignored for programs"
1048227702724Smrg
104837cea3689Smrg      $preload \
104847cea3689Smrg	&& test unknown,unknown,unknown = "$dlopen_support,$dlopen_self,$dlopen_self_static" \
104857cea3689Smrg	&& func_warning "'LT_INIT([dlopen])' not used. Assuming no dlopen support."
1048627702724Smrg
10487e19dfac4Smrg      case $host in
10488e19dfac4Smrg      *-*-rhapsody* | *-*-darwin1.[012])
10489e19dfac4Smrg	# On Rhapsody replace the C library is the System framework
10490313a12fdSmrg	compile_deplibs=`$ECHO " $compile_deplibs" | $SED 's/ -lc / System.ltframework /'`
10491313a12fdSmrg	finalize_deplibs=`$ECHO " $finalize_deplibs" | $SED 's/ -lc / System.ltframework /'`
1049227702724Smrg	;;
1049327702724Smrg      esac
1049427702724Smrg
10495e19dfac4Smrg      case $host in
10496e19dfac4Smrg      *-*-darwin*)
10497e19dfac4Smrg	# Don't allow lazy linking, it breaks C++ global constructors
10498e19dfac4Smrg	# But is supposedly fixed on 10.4 or later (yay!).
104997cea3689Smrg	if test CXX = "$tagname"; then
10500e19dfac4Smrg	  case ${MACOSX_DEPLOYMENT_TARGET-10.0} in
10501e19dfac4Smrg	    10.[0123])
105027cea3689Smrg	      func_append compile_command " $wl-bind_at_load"
105037cea3689Smrg	      func_append finalize_command " $wl-bind_at_load"
10504e19dfac4Smrg	    ;;
10505e19dfac4Smrg	  esac
10506e19dfac4Smrg	fi
10507e19dfac4Smrg	# Time to change all our "foo.ltframework" stuff back to "-framework foo"
10508313a12fdSmrg	compile_deplibs=`$ECHO " $compile_deplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'`
10509313a12fdSmrg	finalize_deplibs=`$ECHO " $finalize_deplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'`
1051027702724Smrg	;;
1051127702724Smrg      esac
1051227702724Smrg
1051327702724Smrg
10514e19dfac4Smrg      # move library search paths that coincide with paths to not yet
10515e19dfac4Smrg      # installed libraries to the beginning of the library search list
10516e19dfac4Smrg      new_libs=
10517e19dfac4Smrg      for path in $notinst_path; do
10518e19dfac4Smrg	case " $new_libs " in
10519e19dfac4Smrg	*" -L$path/$objdir "*) ;;
1052027702724Smrg	*)
10521e19dfac4Smrg	  case " $compile_deplibs " in
10522e19dfac4Smrg	  *" -L$path/$objdir "*)
10523313a12fdSmrg	    func_append new_libs " -L$path/$objdir" ;;
10524e19dfac4Smrg	  esac
1052527702724Smrg	  ;;
1052627702724Smrg	esac
1052727702724Smrg      done
10528e19dfac4Smrg      for deplib in $compile_deplibs; do
10529e19dfac4Smrg	case $deplib in
10530e19dfac4Smrg	-L*)
10531e19dfac4Smrg	  case " $new_libs " in
10532e19dfac4Smrg	  *" $deplib "*) ;;
10533313a12fdSmrg	  *) func_append new_libs " $deplib" ;;
10534e19dfac4Smrg	  esac
10535e19dfac4Smrg	  ;;
10536313a12fdSmrg	*) func_append new_libs " $deplib" ;;
10537e19dfac4Smrg	esac
10538e19dfac4Smrg      done
105397cea3689Smrg      compile_deplibs=$new_libs
1054027702724Smrg
1054127702724Smrg
10542313a12fdSmrg      func_append compile_command " $compile_deplibs"
10543313a12fdSmrg      func_append finalize_command " $finalize_deplibs"
1054427702724Smrg
10545e19dfac4Smrg      if test -n "$rpath$xrpath"; then
10546e19dfac4Smrg	# If the user specified any rpath flags, then add them.
10547e19dfac4Smrg	for libdir in $rpath $xrpath; do
10548e19dfac4Smrg	  # This is the magic to use -rpath.
10549e19dfac4Smrg	  case "$finalize_rpath " in
10550e19dfac4Smrg	  *" $libdir "*) ;;
10551313a12fdSmrg	  *) func_append finalize_rpath " $libdir" ;;
10552e19dfac4Smrg	  esac
10553e19dfac4Smrg	done
10554e19dfac4Smrg      fi
1055527702724Smrg
10556e19dfac4Smrg      # Now hardcode the library paths
10557e19dfac4Smrg      rpath=
10558e19dfac4Smrg      hardcode_libdirs=
10559e19dfac4Smrg      for libdir in $compile_rpath $finalize_rpath; do
10560e19dfac4Smrg	if test -n "$hardcode_libdir_flag_spec"; then
10561e19dfac4Smrg	  if test -n "$hardcode_libdir_separator"; then
10562e19dfac4Smrg	    if test -z "$hardcode_libdirs"; then
105637cea3689Smrg	      hardcode_libdirs=$libdir
10564e19dfac4Smrg	    else
10565e19dfac4Smrg	      # Just accumulate the unique libdirs.
10566e19dfac4Smrg	      case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in
10567e19dfac4Smrg	      *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*)
10568e19dfac4Smrg		;;
10569e19dfac4Smrg	      *)
10570313a12fdSmrg		func_append hardcode_libdirs "$hardcode_libdir_separator$libdir"
10571e19dfac4Smrg		;;
10572e19dfac4Smrg	      esac
10573e19dfac4Smrg	    fi
10574e19dfac4Smrg	  else
10575e19dfac4Smrg	    eval flag=\"$hardcode_libdir_flag_spec\"
10576313a12fdSmrg	    func_append rpath " $flag"
10577e19dfac4Smrg	  fi
10578e19dfac4Smrg	elif test -n "$runpath_var"; then
10579e19dfac4Smrg	  case "$perm_rpath " in
1058027702724Smrg	  *" $libdir "*) ;;
10581313a12fdSmrg	  *) func_append perm_rpath " $libdir" ;;
1058227702724Smrg	  esac
10583e19dfac4Smrg	fi
10584e19dfac4Smrg	case $host in
10585e19dfac4Smrg	*-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-cegcc*)
105867cea3689Smrg	  testbindir=`$ECHO "$libdir" | $SED -e 's*/lib$*/bin*'`
10587e19dfac4Smrg	  case :$dllsearchpath: in
10588e19dfac4Smrg	  *":$libdir:"*) ;;
10589e19dfac4Smrg	  ::) dllsearchpath=$libdir;;
10590313a12fdSmrg	  *) func_append dllsearchpath ":$libdir";;
10591e19dfac4Smrg	  esac
10592e19dfac4Smrg	  case :$dllsearchpath: in
10593e19dfac4Smrg	  *":$testbindir:"*) ;;
10594e19dfac4Smrg	  ::) dllsearchpath=$testbindir;;
10595313a12fdSmrg	  *) func_append dllsearchpath ":$testbindir";;
10596e19dfac4Smrg	  esac
10597e19dfac4Smrg	  ;;
10598e19dfac4Smrg	esac
10599e19dfac4Smrg      done
10600e19dfac4Smrg      # Substitute the hardcoded libdirs into the rpath.
10601e19dfac4Smrg      if test -n "$hardcode_libdir_separator" &&
10602e19dfac4Smrg	 test -n "$hardcode_libdirs"; then
106037cea3689Smrg	libdir=$hardcode_libdirs
10604e19dfac4Smrg	eval rpath=\" $hardcode_libdir_flag_spec\"
10605e19dfac4Smrg      fi
106067cea3689Smrg      compile_rpath=$rpath
10607e19dfac4Smrg
10608e19dfac4Smrg      rpath=
10609e19dfac4Smrg      hardcode_libdirs=
10610e19dfac4Smrg      for libdir in $finalize_rpath; do
10611e19dfac4Smrg	if test -n "$hardcode_libdir_flag_spec"; then
10612e19dfac4Smrg	  if test -n "$hardcode_libdir_separator"; then
10613e19dfac4Smrg	    if test -z "$hardcode_libdirs"; then
106147cea3689Smrg	      hardcode_libdirs=$libdir
10615e19dfac4Smrg	    else
10616e19dfac4Smrg	      # Just accumulate the unique libdirs.
10617e19dfac4Smrg	      case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in
10618e19dfac4Smrg	      *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*)
10619e19dfac4Smrg		;;
10620e19dfac4Smrg	      *)
10621313a12fdSmrg		func_append hardcode_libdirs "$hardcode_libdir_separator$libdir"
10622e19dfac4Smrg		;;
10623e19dfac4Smrg	      esac
10624e19dfac4Smrg	    fi
10625e19dfac4Smrg	  else
10626e19dfac4Smrg	    eval flag=\"$hardcode_libdir_flag_spec\"
10627313a12fdSmrg	    func_append rpath " $flag"
10628e19dfac4Smrg	  fi
10629e19dfac4Smrg	elif test -n "$runpath_var"; then
10630e19dfac4Smrg	  case "$finalize_perm_rpath " in
1063127702724Smrg	  *" $libdir "*) ;;
10632313a12fdSmrg	  *) func_append finalize_perm_rpath " $libdir" ;;
1063327702724Smrg	  esac
1063427702724Smrg	fi
10635e19dfac4Smrg      done
10636e19dfac4Smrg      # Substitute the hardcoded libdirs into the rpath.
10637e19dfac4Smrg      if test -n "$hardcode_libdir_separator" &&
10638e19dfac4Smrg	 test -n "$hardcode_libdirs"; then
106397cea3689Smrg	libdir=$hardcode_libdirs
10640e19dfac4Smrg	eval rpath=\" $hardcode_libdir_flag_spec\"
10641e19dfac4Smrg      fi
106427cea3689Smrg      finalize_rpath=$rpath
1064327702724Smrg
106447cea3689Smrg      if test -n "$libobjs" && test yes = "$build_old_libs"; then
10645e19dfac4Smrg	# Transform all the library objects into standard objects.
10646313a12fdSmrg	compile_command=`$ECHO "$compile_command" | $SP2NL | $SED "$lo2o" | $NL2SP`
10647313a12fdSmrg	finalize_command=`$ECHO "$finalize_command" | $SP2NL | $SED "$lo2o" | $NL2SP`
10648e19dfac4Smrg      fi
1064927702724Smrg
106507cea3689Smrg      func_generate_dlsyms "$outputname" "@PROGRAM@" false
1065127702724Smrg
10652e19dfac4Smrg      # template prelinking step
10653e19dfac4Smrg      if test -n "$prelink_cmds"; then
10654e19dfac4Smrg	func_execute_cmds "$prelink_cmds" 'exit $?'
10655e19dfac4Smrg      fi
1065627702724Smrg
106577cea3689Smrg      wrappers_required=:
10658e19dfac4Smrg      case $host in
10659313a12fdSmrg      *cegcc* | *mingw32ce*)
10660313a12fdSmrg        # Disable wrappers for cegcc and mingw32ce hosts, we are cross compiling anyway.
106617cea3689Smrg        wrappers_required=false
10662313a12fdSmrg        ;;
10663e19dfac4Smrg      *cygwin* | *mingw* )
106647cea3689Smrg        test yes = "$build_libtool_libs" || wrappers_required=false
10665e19dfac4Smrg        ;;
10666e19dfac4Smrg      *)
106677cea3689Smrg        if test no = "$need_relink" || test yes != "$build_libtool_libs"; then
106687cea3689Smrg          wrappers_required=false
10669e19dfac4Smrg        fi
10670e19dfac4Smrg        ;;
10671e19dfac4Smrg      esac
106727cea3689Smrg      $wrappers_required || {
10673e19dfac4Smrg	# Replace the output file specification.
10674313a12fdSmrg	compile_command=`$ECHO "$compile_command" | $SED 's%@OUTPUT@%'"$output"'%g'`
106757cea3689Smrg	link_command=$compile_command$compile_rpath
1067627702724Smrg
10677e19dfac4Smrg	# We have no uninstalled library dependencies, so finalize right now.
10678e19dfac4Smrg	exit_status=0
10679e19dfac4Smrg	func_show_eval "$link_command" 'exit_status=$?'
1068027702724Smrg
10681313a12fdSmrg	if test -n "$postlink_cmds"; then
10682313a12fdSmrg	  func_to_tool_file "$output"
10683313a12fdSmrg	  postlink_cmds=`func_echo_all "$postlink_cmds" | $SED -e 's%@OUTPUT@%'"$output"'%g' -e 's%@TOOL_OUTPUT@%'"$func_to_tool_file_result"'%g'`
10684313a12fdSmrg	  func_execute_cmds "$postlink_cmds" 'exit $?'
10685313a12fdSmrg	fi
10686313a12fdSmrg
10687e19dfac4Smrg	# Delete the generated files.
106887cea3689Smrg	if test -f "$output_objdir/${outputname}S.$objext"; then
106897cea3689Smrg	  func_show_eval '$RM "$output_objdir/${outputname}S.$objext"'
10690e19dfac4Smrg	fi
1069127702724Smrg
10692e19dfac4Smrg	exit $exit_status
106937cea3689Smrg      }
1069427702724Smrg
10695e19dfac4Smrg      if test -n "$compile_shlibpath$finalize_shlibpath"; then
10696e19dfac4Smrg	compile_command="$shlibpath_var=\"$compile_shlibpath$finalize_shlibpath\$$shlibpath_var\" $compile_command"
10697e19dfac4Smrg      fi
10698e19dfac4Smrg      if test -n "$finalize_shlibpath"; then
10699e19dfac4Smrg	finalize_command="$shlibpath_var=\"$finalize_shlibpath\$$shlibpath_var\" $finalize_command"
10700e19dfac4Smrg      fi
1070127702724Smrg
10702e19dfac4Smrg      compile_var=
10703e19dfac4Smrg      finalize_var=
10704e19dfac4Smrg      if test -n "$runpath_var"; then
10705e19dfac4Smrg	if test -n "$perm_rpath"; then
10706e19dfac4Smrg	  # We should set the runpath_var.
10707e19dfac4Smrg	  rpath=
10708e19dfac4Smrg	  for dir in $perm_rpath; do
10709313a12fdSmrg	    func_append rpath "$dir:"
1071027702724Smrg	  done
10711e19dfac4Smrg	  compile_var="$runpath_var=\"$rpath\$$runpath_var\" "
1071227702724Smrg	fi
10713e19dfac4Smrg	if test -n "$finalize_perm_rpath"; then
10714e19dfac4Smrg	  # We should set the runpath_var.
10715e19dfac4Smrg	  rpath=
10716e19dfac4Smrg	  for dir in $finalize_perm_rpath; do
10717313a12fdSmrg	    func_append rpath "$dir:"
10718e19dfac4Smrg	  done
10719e19dfac4Smrg	  finalize_var="$runpath_var=\"$rpath\$$runpath_var\" "
10720e19dfac4Smrg	fi
10721e19dfac4Smrg      fi
1072227702724Smrg
107237cea3689Smrg      if test yes = "$no_install"; then
10724e19dfac4Smrg	# We don't need to create a wrapper script.
107257cea3689Smrg	link_command=$compile_var$compile_command$compile_rpath
10726e19dfac4Smrg	# Replace the output file specification.
10727313a12fdSmrg	link_command=`$ECHO "$link_command" | $SED 's%@OUTPUT@%'"$output"'%g'`
10728e19dfac4Smrg	# Delete the old output file.
10729e19dfac4Smrg	$opt_dry_run || $RM $output
10730e19dfac4Smrg	# Link the executable and exit
10731e19dfac4Smrg	func_show_eval "$link_command" 'exit $?'
10732313a12fdSmrg
10733313a12fdSmrg	if test -n "$postlink_cmds"; then
10734313a12fdSmrg	  func_to_tool_file "$output"
10735313a12fdSmrg	  postlink_cmds=`func_echo_all "$postlink_cmds" | $SED -e 's%@OUTPUT@%'"$output"'%g' -e 's%@TOOL_OUTPUT@%'"$func_to_tool_file_result"'%g'`
10736313a12fdSmrg	  func_execute_cmds "$postlink_cmds" 'exit $?'
10737313a12fdSmrg	fi
10738313a12fdSmrg
10739e19dfac4Smrg	exit $EXIT_SUCCESS
10740e19dfac4Smrg      fi
1074127702724Smrg
107427cea3689Smrg      case $hardcode_action,$fast_install in
107437cea3689Smrg        relink,*)
107447cea3689Smrg	  # Fast installation is not supported
107457cea3689Smrg	  link_command=$compile_var$compile_command$compile_rpath
107467cea3689Smrg	  relink_command=$finalize_var$finalize_command$finalize_rpath
1074727702724Smrg
107487cea3689Smrg	  func_warning "this platform does not like uninstalled shared libraries"
107497cea3689Smrg	  func_warning "'$output' will be relinked during installation"
107507cea3689Smrg	  ;;
107517cea3689Smrg        *,yes)
107527cea3689Smrg	  link_command=$finalize_var$compile_command$finalize_rpath
107537cea3689Smrg	  relink_command=`$ECHO "$compile_var$compile_command$compile_rpath" | $SED 's%@OUTPUT@%\$progdir/\$file%g'`
107547cea3689Smrg          ;;
107557cea3689Smrg	*,no)
107567cea3689Smrg	  link_command=$compile_var$compile_command$compile_rpath
107577cea3689Smrg	  relink_command=$finalize_var$finalize_command$finalize_rpath
107587cea3689Smrg          ;;
107597cea3689Smrg	*,needless)
107607cea3689Smrg	  link_command=$finalize_var$compile_command$finalize_rpath
107617cea3689Smrg	  relink_command=
107627cea3689Smrg          ;;
107637cea3689Smrg      esac
1076427702724Smrg
10765e19dfac4Smrg      # Replace the output file specification.
10766313a12fdSmrg      link_command=`$ECHO "$link_command" | $SED 's%@OUTPUT@%'"$output_objdir/$outputname"'%g'`
1076727702724Smrg
10768e19dfac4Smrg      # Delete the old output files.
10769e19dfac4Smrg      $opt_dry_run || $RM $output $output_objdir/$outputname $output_objdir/lt-$outputname
1077027702724Smrg
10771e19dfac4Smrg      func_show_eval "$link_command" 'exit $?'
1077227702724Smrg
10773313a12fdSmrg      if test -n "$postlink_cmds"; then
10774313a12fdSmrg	func_to_tool_file "$output_objdir/$outputname"
10775313a12fdSmrg	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'`
10776313a12fdSmrg	func_execute_cmds "$postlink_cmds" 'exit $?'
10777313a12fdSmrg      fi
10778313a12fdSmrg
10779e19dfac4Smrg      # Now create the wrapper script.
10780e19dfac4Smrg      func_verbose "creating $output"
1078127702724Smrg
10782e19dfac4Smrg      # Quote the relink command for shipping.
10783e19dfac4Smrg      if test -n "$relink_command"; then
10784e19dfac4Smrg	# Preserve any variables that may affect compiler behavior
10785e19dfac4Smrg	for var in $variables_saved_for_relink; do
10786e19dfac4Smrg	  if eval test -z \"\${$var+set}\"; then
10787e19dfac4Smrg	    relink_command="{ test -z \"\${$var+set}\" || $lt_unset $var || { $var=; export $var; }; }; $relink_command"
10788e19dfac4Smrg	  elif eval var_value=\$$var; test -z "$var_value"; then
10789e19dfac4Smrg	    relink_command="$var=; export $var; $relink_command"
10790e19dfac4Smrg	  else
1079195b7a5c8Smrg	    func_quote_arg pretty "$var_value"
1079295b7a5c8Smrg	    relink_command="$var=$func_quote_arg_result; export $var; $relink_command"
10793e19dfac4Smrg	  fi
10794e19dfac4Smrg	done
1079595b7a5c8Smrg	func_quote eval cd "`pwd`"
1079695b7a5c8Smrg	func_quote_arg pretty,unquoted "($func_quote_result; $relink_command)"
1079795b7a5c8Smrg	relink_command=$func_quote_arg_unquoted_result
10798e19dfac4Smrg      fi
1079927702724Smrg
10800e19dfac4Smrg      # Only actually do things if not in dry run mode.
10801e19dfac4Smrg      $opt_dry_run || {
10802e19dfac4Smrg	# win32 will think the script is a binary if it has
10803e19dfac4Smrg	# a .exe suffix, so we strip it off here.
10804e19dfac4Smrg	case $output in
10805e19dfac4Smrg	  *.exe) func_stripname '' '.exe' "$output"
10806e19dfac4Smrg	         output=$func_stripname_result ;;
10807e19dfac4Smrg	esac
10808e19dfac4Smrg	# test for cygwin because mv fails w/o .exe extensions
1080927702724Smrg	case $host in
10810e19dfac4Smrg	  *cygwin*)
10811e19dfac4Smrg	    exeext=.exe
10812e19dfac4Smrg	    func_stripname '' '.exe' "$outputname"
10813e19dfac4Smrg	    outputname=$func_stripname_result ;;
10814e19dfac4Smrg	  *) exeext= ;;
1081527702724Smrg	esac
10816e19dfac4Smrg	case $host in
10817e19dfac4Smrg	  *cygwin* | *mingw* )
10818e19dfac4Smrg	    func_dirname_and_basename "$output" "" "."
10819e19dfac4Smrg	    output_name=$func_basename_result
10820e19dfac4Smrg	    output_path=$func_dirname_result
108217cea3689Smrg	    cwrappersource=$output_path/$objdir/lt-$output_name.c
108227cea3689Smrg	    cwrapper=$output_path/$output_name.exe
10823e19dfac4Smrg	    $RM $cwrappersource $cwrapper
10824e19dfac4Smrg	    trap "$RM $cwrappersource $cwrapper; exit $EXIT_FAILURE" 1 2 15
10825e19dfac4Smrg
10826e19dfac4Smrg	    func_emit_cwrapperexe_src > $cwrappersource
10827e19dfac4Smrg
10828e19dfac4Smrg	    # The wrapper executable is built using the $host compiler,
10829e19dfac4Smrg	    # because it contains $host paths and files. If cross-
10830e19dfac4Smrg	    # compiling, it, like the target executable, must be
10831e19dfac4Smrg	    # executed on the $host or under an emulation environment.
10832e19dfac4Smrg	    $opt_dry_run || {
10833e19dfac4Smrg	      $LTCC $LTCFLAGS -o $cwrapper $cwrappersource
10834e19dfac4Smrg	      $STRIP $cwrapper
10835e19dfac4Smrg	    }
1083627702724Smrg
10837e19dfac4Smrg	    # Now, create the wrapper script for func_source use:
10838e19dfac4Smrg	    func_ltwrapper_scriptname $cwrapper
10839e19dfac4Smrg	    $RM $func_ltwrapper_scriptname_result
10840e19dfac4Smrg	    trap "$RM $func_ltwrapper_scriptname_result; exit $EXIT_FAILURE" 1 2 15
10841e19dfac4Smrg	    $opt_dry_run || {
10842e19dfac4Smrg	      # note: this script will not be executed, so do not chmod.
108437cea3689Smrg	      if test "x$build" = "x$host"; then
10844e19dfac4Smrg		$cwrapper --lt-dump-script > $func_ltwrapper_scriptname_result
1084527702724Smrg	      else
10846e19dfac4Smrg		func_emit_wrapper no > $func_ltwrapper_scriptname_result
1084727702724Smrg	      fi
10848e19dfac4Smrg	    }
10849e19dfac4Smrg	  ;;
10850e19dfac4Smrg	  * )
10851e19dfac4Smrg	    $RM $output
10852e19dfac4Smrg	    trap "$RM $output; exit $EXIT_FAILURE" 1 2 15
1085327702724Smrg
10854e19dfac4Smrg	    func_emit_wrapper no > $output
10855e19dfac4Smrg	    chmod +x $output
1085627702724Smrg	  ;;
1085727702724Smrg	esac
10858e19dfac4Smrg      }
10859e19dfac4Smrg      exit $EXIT_SUCCESS
10860e19dfac4Smrg      ;;
10861e19dfac4Smrg    esac
1086227702724Smrg
10863e19dfac4Smrg    # See if we need to build an old-fashioned archive.
10864e19dfac4Smrg    for oldlib in $oldlibs; do
1086527702724Smrg
108667cea3689Smrg      case $build_libtool_libs in
108677cea3689Smrg        convenience)
108687cea3689Smrg	  oldobjs="$libobjs_save $symfileobj"
108697cea3689Smrg	  addlibs=$convenience
10870e19dfac4Smrg	  build_libtool_libs=no
108717cea3689Smrg	  ;;
108727cea3689Smrg	module)
108737cea3689Smrg	  oldobjs=$libobjs_save
108747cea3689Smrg	  addlibs=$old_convenience
108757cea3689Smrg	  build_libtool_libs=no
108767cea3689Smrg          ;;
108777cea3689Smrg	*)
10878e19dfac4Smrg	  oldobjs="$old_deplibs $non_pic_objects"
108797cea3689Smrg	  $preload && test -f "$symfileobj" \
108807cea3689Smrg	    && func_append oldobjs " $symfileobj"
108817cea3689Smrg	  addlibs=$old_convenience
108827cea3689Smrg	  ;;
108837cea3689Smrg      esac
1088427702724Smrg
10885e19dfac4Smrg      if test -n "$addlibs"; then
108867cea3689Smrg	gentop=$output_objdir/${outputname}x
10887313a12fdSmrg	func_append generated " $gentop"
1088827702724Smrg
10889e19dfac4Smrg	func_extract_archives $gentop $addlibs
10890313a12fdSmrg	func_append oldobjs " $func_extract_archives_result"
10891e19dfac4Smrg      fi
1089227702724Smrg
10893e19dfac4Smrg      # Do each command in the archive commands.
108947cea3689Smrg      if test -n "$old_archive_from_new_cmds" && test yes = "$build_libtool_libs"; then
10895e19dfac4Smrg	cmds=$old_archive_from_new_cmds
10896e19dfac4Smrg      else
1089727702724Smrg
10898e19dfac4Smrg	# Add any objects from preloaded convenience libraries
10899e19dfac4Smrg	if test -n "$dlprefiles"; then
109007cea3689Smrg	  gentop=$output_objdir/${outputname}x
10901313a12fdSmrg	  func_append generated " $gentop"
1090227702724Smrg
10903e19dfac4Smrg	  func_extract_archives $gentop $dlprefiles
10904313a12fdSmrg	  func_append oldobjs " $func_extract_archives_result"
10905e19dfac4Smrg	fi
1090627702724Smrg
10907e19dfac4Smrg	# POSIX demands no paths to be encoded in archives.  We have
10908e19dfac4Smrg	# to avoid creating archives with duplicate basenames if we
10909e19dfac4Smrg	# might have to extract them afterwards, e.g., when creating a
10910e19dfac4Smrg	# static archive out of a convenience library, or when linking
10911e19dfac4Smrg	# the entirety of a libtool archive into another (currently
10912e19dfac4Smrg	# not supported by libtool).
10913e19dfac4Smrg	if (for obj in $oldobjs
10914e19dfac4Smrg	    do
10915e19dfac4Smrg	      func_basename "$obj"
10916e19dfac4Smrg	      $ECHO "$func_basename_result"
10917e19dfac4Smrg	    done | sort | sort -uc >/dev/null 2>&1); then
10918e19dfac4Smrg	  :
10919e19dfac4Smrg	else
10920313a12fdSmrg	  echo "copying selected object files to avoid basename conflicts..."
109217cea3689Smrg	  gentop=$output_objdir/${outputname}x
10922313a12fdSmrg	  func_append generated " $gentop"
10923e19dfac4Smrg	  func_mkdir_p "$gentop"
10924e19dfac4Smrg	  save_oldobjs=$oldobjs
10925e19dfac4Smrg	  oldobjs=
10926e19dfac4Smrg	  counter=1
10927e19dfac4Smrg	  for obj in $save_oldobjs
10928e19dfac4Smrg	  do
10929e19dfac4Smrg	    func_basename "$obj"
109307cea3689Smrg	    objbase=$func_basename_result
10931e19dfac4Smrg	    case " $oldobjs " in
10932e19dfac4Smrg	    " ") oldobjs=$obj ;;
10933e19dfac4Smrg	    *[\ /]"$objbase "*)
10934e19dfac4Smrg	      while :; do
10935e19dfac4Smrg		# Make sure we don't pick an alternate name that also
10936e19dfac4Smrg		# overlaps.
10937e19dfac4Smrg		newobj=lt$counter-$objbase
10938e19dfac4Smrg		func_arith $counter + 1
10939e19dfac4Smrg		counter=$func_arith_result
10940e19dfac4Smrg		case " $oldobjs " in
10941e19dfac4Smrg		*[\ /]"$newobj "*) ;;
10942e19dfac4Smrg		*) if test ! -f "$gentop/$newobj"; then break; fi ;;
10943e19dfac4Smrg		esac
10944e19dfac4Smrg	      done
10945e19dfac4Smrg	      func_show_eval "ln $obj $gentop/$newobj || cp $obj $gentop/$newobj"
10946313a12fdSmrg	      func_append oldobjs " $gentop/$newobj"
10947e19dfac4Smrg	      ;;
10948313a12fdSmrg	    *) func_append oldobjs " $obj" ;;
10949e19dfac4Smrg	    esac
1095027702724Smrg	  done
1095127702724Smrg	fi
10952313a12fdSmrg	func_to_tool_file "$oldlib" func_convert_file_msys_to_w32
10953313a12fdSmrg	tool_oldlib=$func_to_tool_file_result
10954e19dfac4Smrg	eval cmds=\"$old_archive_cmds\"
1095527702724Smrg
10956e19dfac4Smrg	func_len " $cmds"
10957e19dfac4Smrg	len=$func_len_result
10958e19dfac4Smrg	if test "$len" -lt "$max_cmd_len" || test "$max_cmd_len" -le -1; then
10959e19dfac4Smrg	  cmds=$old_archive_cmds
10960313a12fdSmrg	elif test -n "$archiver_list_spec"; then
10961313a12fdSmrg	  func_verbose "using command file archive linking..."
10962313a12fdSmrg	  for obj in $oldobjs
10963313a12fdSmrg	  do
10964313a12fdSmrg	    func_to_tool_file "$obj"
10965313a12fdSmrg	    $ECHO "$func_to_tool_file_result"
10966313a12fdSmrg	  done > $output_objdir/$libname.libcmd
10967313a12fdSmrg	  func_to_tool_file "$output_objdir/$libname.libcmd"
10968313a12fdSmrg	  oldobjs=" $archiver_list_spec$func_to_tool_file_result"
10969313a12fdSmrg	  cmds=$old_archive_cmds
10970e19dfac4Smrg	else
10971e19dfac4Smrg	  # the command line is too long to link in one step, link in parts
10972e19dfac4Smrg	  func_verbose "using piecewise archive linking..."
10973e19dfac4Smrg	  save_RANLIB=$RANLIB
10974e19dfac4Smrg	  RANLIB=:
10975e19dfac4Smrg	  objlist=
10976e19dfac4Smrg	  concat_cmds=
10977e19dfac4Smrg	  save_oldobjs=$oldobjs
10978e19dfac4Smrg	  oldobjs=
10979e19dfac4Smrg	  # Is there a better way of finding the last object in the list?
10980e19dfac4Smrg	  for obj in $save_oldobjs
10981e19dfac4Smrg	  do
10982e19dfac4Smrg	    last_oldobj=$obj
10983e19dfac4Smrg	  done
10984e19dfac4Smrg	  eval test_cmds=\"$old_archive_cmds\"
10985e19dfac4Smrg	  func_len " $test_cmds"
10986e19dfac4Smrg	  len0=$func_len_result
10987e19dfac4Smrg	  len=$len0
10988e19dfac4Smrg	  for obj in $save_oldobjs
10989e19dfac4Smrg	  do
10990e19dfac4Smrg	    func_len " $obj"
10991e19dfac4Smrg	    func_arith $len + $func_len_result
10992e19dfac4Smrg	    len=$func_arith_result
10993e19dfac4Smrg	    func_append objlist " $obj"
10994e19dfac4Smrg	    if test "$len" -lt "$max_cmd_len"; then
10995e19dfac4Smrg	      :
10996e19dfac4Smrg	    else
10997e19dfac4Smrg	      # the above command should be used before it gets too long
10998e19dfac4Smrg	      oldobjs=$objlist
109997cea3689Smrg	      if test "$obj" = "$last_oldobj"; then
11000e19dfac4Smrg		RANLIB=$save_RANLIB
11001e19dfac4Smrg	      fi
11002e19dfac4Smrg	      test -z "$concat_cmds" || concat_cmds=$concat_cmds~
110037cea3689Smrg	      eval concat_cmds=\"\$concat_cmds$old_archive_cmds\"
11004e19dfac4Smrg	      objlist=
11005e19dfac4Smrg	      len=$len0
11006e19dfac4Smrg	    fi
11007e19dfac4Smrg	  done
11008e19dfac4Smrg	  RANLIB=$save_RANLIB
11009e19dfac4Smrg	  oldobjs=$objlist
110107cea3689Smrg	  if test -z "$oldobjs"; then
11011e19dfac4Smrg	    eval cmds=\"\$concat_cmds\"
11012e19dfac4Smrg	  else
11013e19dfac4Smrg	    eval cmds=\"\$concat_cmds~\$old_archive_cmds\"
11014e19dfac4Smrg	  fi
11015e19dfac4Smrg	fi
11016e19dfac4Smrg      fi
11017e19dfac4Smrg      func_execute_cmds "$cmds" 'exit $?'
1101827702724Smrg    done
1101927702724Smrg
11020e19dfac4Smrg    test -n "$generated" && \
11021e19dfac4Smrg      func_show_eval "${RM}r$generated"
1102227702724Smrg
11023e19dfac4Smrg    # Now create the libtool archive.
11024e19dfac4Smrg    case $output in
11025e19dfac4Smrg    *.la)
11026e19dfac4Smrg      old_library=
110277cea3689Smrg      test yes = "$build_old_libs" && old_library=$libname.$libext
11028e19dfac4Smrg      func_verbose "creating $output"
1102927702724Smrg
11030e19dfac4Smrg      # Preserve any variables that may affect compiler behavior
11031e19dfac4Smrg      for var in $variables_saved_for_relink; do
11032e19dfac4Smrg	if eval test -z \"\${$var+set}\"; then
11033e19dfac4Smrg	  relink_command="{ test -z \"\${$var+set}\" || $lt_unset $var || { $var=; export $var; }; }; $relink_command"
11034e19dfac4Smrg	elif eval var_value=\$$var; test -z "$var_value"; then
11035e19dfac4Smrg	  relink_command="$var=; export $var; $relink_command"
1103627702724Smrg	else
1103795b7a5c8Smrg	  func_quote_arg pretty,unquoted "$var_value"
1103895b7a5c8Smrg	  relink_command="$var=$func_quote_arg_unquoted_result; export $var; $relink_command"
1103927702724Smrg	fi
11040e19dfac4Smrg      done
11041e19dfac4Smrg      # Quote the link command for shipping.
1104295b7a5c8Smrg      func_quote eval cd "`pwd`"
1104395b7a5c8Smrg      relink_command="($func_quote_result; $SHELL \"$progpath\" $preserve_args --mode=relink $libtool_args @inst_prefix_dir@)"
1104495b7a5c8Smrg      func_quote_arg pretty,unquoted "$relink_command"
1104595b7a5c8Smrg      relink_command=$func_quote_arg_unquoted_result
110467cea3689Smrg      if test yes = "$hardcode_automatic"; then
11047e19dfac4Smrg	relink_command=
11048e19dfac4Smrg      fi
1104927702724Smrg
11050e19dfac4Smrg      # Only create the output if not a dry run.
11051e19dfac4Smrg      $opt_dry_run || {
11052e19dfac4Smrg	for installed in no yes; do
110537cea3689Smrg	  if test yes = "$installed"; then
11054e19dfac4Smrg	    if test -z "$install_libdir"; then
11055e19dfac4Smrg	      break
11056e19dfac4Smrg	    fi
110577cea3689Smrg	    output=$output_objdir/${outputname}i
11058e19dfac4Smrg	    # Replace all uninstalled libtool libraries with the installed ones
11059e19dfac4Smrg	    newdependency_libs=
11060e19dfac4Smrg	    for deplib in $dependency_libs; do
11061e19dfac4Smrg	      case $deplib in
11062e19dfac4Smrg	      *.la)
11063e19dfac4Smrg		func_basename "$deplib"
110647cea3689Smrg		name=$func_basename_result
11065313a12fdSmrg		func_resolve_sysroot "$deplib"
110667cea3689Smrg		eval libdir=`$SED -n -e 's/^libdir=\(.*\)$/\1/p' $func_resolve_sysroot_result`
11067e19dfac4Smrg		test -z "$libdir" && \
110687cea3689Smrg		  func_fatal_error "'$deplib' is not a valid libtool archive"
11069313a12fdSmrg		func_append newdependency_libs " ${lt_sysroot:+=}$libdir/$name"
11070313a12fdSmrg		;;
11071313a12fdSmrg	      -L*)
11072313a12fdSmrg		func_stripname -L '' "$deplib"
11073313a12fdSmrg		func_replace_sysroot "$func_stripname_result"
11074313a12fdSmrg		func_append newdependency_libs " -L$func_replace_sysroot_result"
11075e19dfac4Smrg		;;
11076313a12fdSmrg	      -R*)
11077313a12fdSmrg		func_stripname -R '' "$deplib"
11078313a12fdSmrg		func_replace_sysroot "$func_stripname_result"
11079313a12fdSmrg		func_append newdependency_libs " -R$func_replace_sysroot_result"
11080313a12fdSmrg		;;
11081313a12fdSmrg	      *) func_append newdependency_libs " $deplib" ;;
11082e19dfac4Smrg	      esac
11083e19dfac4Smrg	    done
110847cea3689Smrg	    dependency_libs=$newdependency_libs
11085e19dfac4Smrg	    newdlfiles=
11086e19dfac4Smrg
11087e19dfac4Smrg	    for lib in $dlfiles; do
11088e19dfac4Smrg	      case $lib in
11089e19dfac4Smrg	      *.la)
11090e19dfac4Smrg	        func_basename "$lib"
110917cea3689Smrg		name=$func_basename_result
110927cea3689Smrg		eval libdir=`$SED -n -e 's/^libdir=\(.*\)$/\1/p' $lib`
11093e19dfac4Smrg		test -z "$libdir" && \
110947cea3689Smrg		  func_fatal_error "'$lib' is not a valid libtool archive"
11095313a12fdSmrg		func_append newdlfiles " ${lt_sysroot:+=}$libdir/$name"
11096e19dfac4Smrg		;;
11097313a12fdSmrg	      *) func_append newdlfiles " $lib" ;;
11098e19dfac4Smrg	      esac
11099e19dfac4Smrg	    done
111007cea3689Smrg	    dlfiles=$newdlfiles
11101e19dfac4Smrg	    newdlprefiles=
11102e19dfac4Smrg	    for lib in $dlprefiles; do
11103e19dfac4Smrg	      case $lib in
11104e19dfac4Smrg	      *.la)
11105e19dfac4Smrg		# Only pass preopened files to the pseudo-archive (for
11106e19dfac4Smrg		# eventual linking with the app. that links it) if we
11107e19dfac4Smrg		# didn't already link the preopened objects directly into
11108e19dfac4Smrg		# the library:
11109e19dfac4Smrg		func_basename "$lib"
111107cea3689Smrg		name=$func_basename_result
111117cea3689Smrg		eval libdir=`$SED -n -e 's/^libdir=\(.*\)$/\1/p' $lib`
11112e19dfac4Smrg		test -z "$libdir" && \
111137cea3689Smrg		  func_fatal_error "'$lib' is not a valid libtool archive"
11114313a12fdSmrg		func_append newdlprefiles " ${lt_sysroot:+=}$libdir/$name"
11115e19dfac4Smrg		;;
11116e19dfac4Smrg	      esac
11117e19dfac4Smrg	    done
111187cea3689Smrg	    dlprefiles=$newdlprefiles
11119e19dfac4Smrg	  else
11120e19dfac4Smrg	    newdlfiles=
11121e19dfac4Smrg	    for lib in $dlfiles; do
11122e19dfac4Smrg	      case $lib in
111237cea3689Smrg		[\\/]* | [A-Za-z]:[\\/]*) abs=$lib ;;
11124e19dfac4Smrg		*) abs=`pwd`"/$lib" ;;
11125e19dfac4Smrg	      esac
11126313a12fdSmrg	      func_append newdlfiles " $abs"
11127e19dfac4Smrg	    done
111287cea3689Smrg	    dlfiles=$newdlfiles
11129e19dfac4Smrg	    newdlprefiles=
11130e19dfac4Smrg	    for lib in $dlprefiles; do
11131e19dfac4Smrg	      case $lib in
111327cea3689Smrg		[\\/]* | [A-Za-z]:[\\/]*) abs=$lib ;;
11133e19dfac4Smrg		*) abs=`pwd`"/$lib" ;;
11134e19dfac4Smrg	      esac
11135313a12fdSmrg	      func_append newdlprefiles " $abs"
11136e19dfac4Smrg	    done
111377cea3689Smrg	    dlprefiles=$newdlprefiles
11138e19dfac4Smrg	  fi
11139e19dfac4Smrg	  $RM $output
11140e19dfac4Smrg	  # place dlname in correct position for cygwin
11141313a12fdSmrg	  # In fact, it would be nice if we could use this code for all target
11142313a12fdSmrg	  # systems that can't hard-code library paths into their executables
11143313a12fdSmrg	  # and that have no shared library path variable independent of PATH,
11144313a12fdSmrg	  # but it turns out we can't easily determine that from inspecting
11145313a12fdSmrg	  # libtool variables, so we have to hard-code the OSs to which it
11146313a12fdSmrg	  # applies here; at the moment, that means platforms that use the PE
11147313a12fdSmrg	  # object format with DLL files.  See the long comment at the top of
11148313a12fdSmrg	  # tests/bindir.at for full details.
11149e19dfac4Smrg	  tdlname=$dlname
11150e19dfac4Smrg	  case $host,$output,$installed,$module,$dlname in
11151313a12fdSmrg	    *cygwin*,*lai,yes,no,*.dll | *mingw*,*lai,yes,no,*.dll | *cegcc*,*lai,yes,no,*.dll)
11152313a12fdSmrg	      # If a -bindir argument was supplied, place the dll there.
111537cea3689Smrg	      if test -n "$bindir"; then
11154313a12fdSmrg		func_relative_path "$install_libdir" "$bindir"
111557cea3689Smrg		tdlname=$func_relative_path_result/$dlname
11156313a12fdSmrg	      else
11157313a12fdSmrg		# Otherwise fall back on heuristic.
11158313a12fdSmrg		tdlname=../bin/$dlname
11159313a12fdSmrg	      fi
11160313a12fdSmrg	      ;;
11161e19dfac4Smrg	  esac
11162e19dfac4Smrg	  $ECHO > $output "\
11163e19dfac4Smrg# $outputname - a libtool library file
111647cea3689Smrg# Generated by $PROGRAM (GNU $PACKAGE) $VERSION
11165e19dfac4Smrg#
11166e19dfac4Smrg# Please DO NOT delete this file!
11167e19dfac4Smrg# It is necessary for linking the library.
1116827702724Smrg
11169e19dfac4Smrg# The name that we can dlopen(3).
11170e19dfac4Smrgdlname='$tdlname'
1117127702724Smrg
11172e19dfac4Smrg# Names of this library.
11173e19dfac4Smrglibrary_names='$library_names'
1117427702724Smrg
11175e19dfac4Smrg# The name of the static archive.
11176e19dfac4Smrgold_library='$old_library'
1117727702724Smrg
111787cea3689Smrg# Linker flags that cannot go in dependency_libs.
11179e19dfac4Smrginherited_linker_flags='$new_inherited_linker_flags'
1118027702724Smrg
11181e19dfac4Smrg# Libraries that this one depends upon.
11182e19dfac4Smrgdependency_libs='$dependency_libs'
1118327702724Smrg
11184e19dfac4Smrg# Names of additional weak libraries provided by this library
11185e19dfac4Smrgweak_library_names='$weak_libs'
1118627702724Smrg
11187e19dfac4Smrg# Version information for $libname.
11188e19dfac4Smrgcurrent=$current
11189e19dfac4Smrgage=$age
11190e19dfac4Smrgrevision=$revision
1119127702724Smrg
11192e19dfac4Smrg# Is this an already installed library?
11193e19dfac4Smrginstalled=$installed
1119427702724Smrg
11195e19dfac4Smrg# Should we warn about portability when linking against -modules?
11196e19dfac4Smrgshouldnotlink=$module
1119727702724Smrg
11198e19dfac4Smrg# Files to dlopen/dlpreopen
11199e19dfac4Smrgdlopen='$dlfiles'
11200e19dfac4Smrgdlpreopen='$dlprefiles'
1120127702724Smrg
11202e19dfac4Smrg# Directory that this library needs to be installed in:
11203e19dfac4Smrglibdir='$install_libdir'"
112047cea3689Smrg	  if test no,yes = "$installed,$need_relink"; then
11205e19dfac4Smrg	    $ECHO >> $output "\
11206e19dfac4Smrgrelink_command=\"$relink_command\""
11207e19dfac4Smrg	  fi
11208e19dfac4Smrg	done
11209e19dfac4Smrg      }
1121027702724Smrg
11211e19dfac4Smrg      # Do a symbolic link so that the libtool archive can be found in
11212e19dfac4Smrg      # LD_LIBRARY_PATH before the program is installed.
11213e19dfac4Smrg      func_show_eval '( cd "$output_objdir" && $RM "$outputname" && $LN_S "../$outputname" "$outputname" )' 'exit $?'
11214e19dfac4Smrg      ;;
11215e19dfac4Smrg    esac
11216e19dfac4Smrg    exit $EXIT_SUCCESS
11217e19dfac4Smrg}
1121827702724Smrg
112197cea3689Smrgif test link = "$opt_mode" || test relink = "$opt_mode"; then
112207cea3689Smrg  func_mode_link ${1+"$@"}
112217cea3689Smrgfi
1122227702724Smrg
1122327702724Smrg
11224e19dfac4Smrg# func_mode_uninstall arg...
11225e19dfac4Smrgfunc_mode_uninstall ()
11226e19dfac4Smrg{
112277cea3689Smrg    $debug_cmd
112287cea3689Smrg
112297cea3689Smrg    RM=$nonopt
1123027702724Smrg    files=
112317cea3689Smrg    rmforce=false
1123227702724Smrg    exit_status=0
1123327702724Smrg
1123427702724Smrg    # This variable tells wrapper scripts just to set variables rather
1123527702724Smrg    # than running their programs.
112367cea3689Smrg    libtool_install_magic=$magic
1123727702724Smrg
1123827702724Smrg    for arg
1123927702724Smrg    do
1124027702724Smrg      case $arg in
112417cea3689Smrg      -f) func_append RM " $arg"; rmforce=: ;;
11242313a12fdSmrg      -*) func_append RM " $arg" ;;
11243313a12fdSmrg      *) func_append files " $arg" ;;
1124427702724Smrg      esac
1124527702724Smrg    done
1124627702724Smrg
11247e19dfac4Smrg    test -z "$RM" && \
11248e19dfac4Smrg      func_fatal_help "you must specify an RM program"
1124927702724Smrg
1125027702724Smrg    rmdirs=
1125127702724Smrg
1125227702724Smrg    for file in $files; do
11253e19dfac4Smrg      func_dirname "$file" "" "."
112547cea3689Smrg      dir=$func_dirname_result
112557cea3689Smrg      if test . = "$dir"; then
112567cea3689Smrg	odir=$objdir
1125727702724Smrg      else
112587cea3689Smrg	odir=$dir/$objdir
1125927702724Smrg      fi
11260e19dfac4Smrg      func_basename "$file"
112617cea3689Smrg      name=$func_basename_result
112627cea3689Smrg      test uninstall = "$opt_mode" && odir=$dir
1126327702724Smrg
11264313a12fdSmrg      # Remember odir for removal later, being careful to avoid duplicates
112657cea3689Smrg      if test clean = "$opt_mode"; then
1126627702724Smrg	case " $rmdirs " in
11267313a12fdSmrg	  *" $odir "*) ;;
11268313a12fdSmrg	  *) func_append rmdirs " $odir" ;;
1126927702724Smrg	esac
1127027702724Smrg      fi
1127127702724Smrg
1127227702724Smrg      # Don't error if the file doesn't exist and rm -f was used.
11273e19dfac4Smrg      if { test -L "$file"; } >/dev/null 2>&1 ||
11274e19dfac4Smrg	 { test -h "$file"; } >/dev/null 2>&1 ||
11275e19dfac4Smrg	 test -f "$file"; then
1127627702724Smrg	:
1127727702724Smrg      elif test -d "$file"; then
1127827702724Smrg	exit_status=1
1127927702724Smrg	continue
112807cea3689Smrg      elif $rmforce; then
1128127702724Smrg	continue
1128227702724Smrg      fi
1128327702724Smrg
112847cea3689Smrg      rmfiles=$file
1128527702724Smrg
1128627702724Smrg      case $name in
1128727702724Smrg      *.la)
1128827702724Smrg	# Possibly a libtool archive, so verify it.
11289e19dfac4Smrg	if func_lalib_p "$file"; then
11290e19dfac4Smrg	  func_source $dir/$name
1129127702724Smrg
1129227702724Smrg	  # Delete the libtool libraries and symlinks.
1129327702724Smrg	  for n in $library_names; do
11294313a12fdSmrg	    func_append rmfiles " $odir/$n"
1129527702724Smrg	  done
11296313a12fdSmrg	  test -n "$old_library" && func_append rmfiles " $odir/$old_library"
1129727702724Smrg
112987cea3689Smrg	  case $opt_mode in
1129927702724Smrg	  clean)
11300313a12fdSmrg	    case " $library_names " in
1130127702724Smrg	    *" $dlname "*) ;;
11302313a12fdSmrg	    *) test -n "$dlname" && func_append rmfiles " $odir/$dlname" ;;
1130327702724Smrg	    esac
11304313a12fdSmrg	    test -n "$libdir" && func_append rmfiles " $odir/$name $odir/${name}i"
1130527702724Smrg	    ;;
1130627702724Smrg	  uninstall)
1130727702724Smrg	    if test -n "$library_names"; then
1130827702724Smrg	      # Do each command in the postuninstall commands.
113097cea3689Smrg	      func_execute_cmds "$postuninstall_cmds" '$rmforce || exit_status=1'
1131027702724Smrg	    fi
1131127702724Smrg
1131227702724Smrg	    if test -n "$old_library"; then
1131327702724Smrg	      # Do each command in the old_postuninstall commands.
113147cea3689Smrg	      func_execute_cmds "$old_postuninstall_cmds" '$rmforce || exit_status=1'
1131527702724Smrg	    fi
1131627702724Smrg	    # FIXME: should reinstall the best remaining shared library.
1131727702724Smrg	    ;;
1131827702724Smrg	  esac
1131927702724Smrg	fi
1132027702724Smrg	;;
1132127702724Smrg
1132227702724Smrg      *.lo)
1132327702724Smrg	# Possibly a libtool object, so verify it.
11324e19dfac4Smrg	if func_lalib_p "$file"; then
1132527702724Smrg
1132627702724Smrg	  # Read the .lo file
11327e19dfac4Smrg	  func_source $dir/$name
1132827702724Smrg
1132927702724Smrg	  # Add PIC object to the list of files to remove.
113307cea3689Smrg	  if test -n "$pic_object" && test none != "$pic_object"; then
11331313a12fdSmrg	    func_append rmfiles " $dir/$pic_object"
1133227702724Smrg	  fi
1133327702724Smrg
1133427702724Smrg	  # Add non-PIC object to the list of files to remove.
113357cea3689Smrg	  if test -n "$non_pic_object" && test none != "$non_pic_object"; then
11336313a12fdSmrg	    func_append rmfiles " $dir/$non_pic_object"
1133727702724Smrg	  fi
1133827702724Smrg	fi
1133927702724Smrg	;;
1134027702724Smrg
1134127702724Smrg      *)
113427cea3689Smrg	if test clean = "$opt_mode"; then
1134327702724Smrg	  noexename=$name
1134427702724Smrg	  case $file in
1134527702724Smrg	  *.exe)
11346e19dfac4Smrg	    func_stripname '' '.exe' "$file"
11347e19dfac4Smrg	    file=$func_stripname_result
11348e19dfac4Smrg	    func_stripname '' '.exe' "$name"
11349e19dfac4Smrg	    noexename=$func_stripname_result
1135027702724Smrg	    # $file with .exe has already been added to rmfiles,
1135127702724Smrg	    # add $file without .exe
11352313a12fdSmrg	    func_append rmfiles " $file"
1135327702724Smrg	    ;;
1135427702724Smrg	  esac
1135527702724Smrg	  # Do a test to see if this is a libtool program.
11356e19dfac4Smrg	  if func_ltwrapper_p "$file"; then
11357e19dfac4Smrg	    if func_ltwrapper_executable_p "$file"; then
11358e19dfac4Smrg	      func_ltwrapper_scriptname "$file"
11359e19dfac4Smrg	      relink_command=
11360e19dfac4Smrg	      func_source $func_ltwrapper_scriptname_result
11361313a12fdSmrg	      func_append rmfiles " $func_ltwrapper_scriptname_result"
11362e19dfac4Smrg	    else
11363e19dfac4Smrg	      relink_command=
11364e19dfac4Smrg	      func_source $dir/$noexename
11365e19dfac4Smrg	    fi
1136627702724Smrg
1136727702724Smrg	    # note $name still contains .exe if it was in $file originally
1136827702724Smrg	    # as does the version of $file that was added into $rmfiles
113697cea3689Smrg	    func_append rmfiles " $odir/$name $odir/${name}S.$objext"
113707cea3689Smrg	    if test yes = "$fast_install" && test -n "$relink_command"; then
11371313a12fdSmrg	      func_append rmfiles " $odir/lt-$name"
1137227702724Smrg	    fi
113737cea3689Smrg	    if test "X$noexename" != "X$name"; then
113747cea3689Smrg	      func_append rmfiles " $odir/lt-$noexename.c"
1137527702724Smrg	    fi
1137627702724Smrg	  fi
1137727702724Smrg	fi
1137827702724Smrg	;;
1137927702724Smrg      esac
11380e19dfac4Smrg      func_show_eval "$RM $rmfiles" 'exit_status=1'
1138127702724Smrg    done
1138227702724Smrg
113837cea3689Smrg    # Try to remove the $objdir's in the directories where we deleted files
1138427702724Smrg    for dir in $rmdirs; do
1138527702724Smrg      if test -d "$dir"; then
11386e19dfac4Smrg	func_show_eval "rmdir $dir >/dev/null 2>&1"
1138727702724Smrg      fi
1138827702724Smrg    done
1138927702724Smrg
1139027702724Smrg    exit $exit_status
11391e19dfac4Smrg}
1139227702724Smrg
113937cea3689Smrgif test uninstall = "$opt_mode" || test clean = "$opt_mode"; then
113947cea3689Smrg  func_mode_uninstall ${1+"$@"}
113957cea3689Smrgfi
1139627702724Smrg
11397313a12fdSmrgtest -z "$opt_mode" && {
113987cea3689Smrg  help=$generic_help
11399e19dfac4Smrg  func_fatal_help "you must specify a MODE"
11400e19dfac4Smrg}
11401e19dfac4Smrg
11402e19dfac4Smrgtest -z "$exec_cmd" && \
114037cea3689Smrg  func_fatal_help "invalid operation mode '$opt_mode'"
1140427702724Smrg
1140527702724Smrgif test -n "$exec_cmd"; then
11406e19dfac4Smrg  eval exec "$exec_cmd"
1140727702724Smrg  exit $EXIT_FAILURE
1140827702724Smrgfi
1140927702724Smrg
11410e19dfac4Smrgexit $exit_status
1141127702724Smrg
1141227702724Smrg
1141327702724Smrg# The TAGs below are defined such that we never get into a situation
114147cea3689Smrg# where we disable both kinds of libraries.  Given conflicting
1141527702724Smrg# choices, we go for a static library, that is the most portable,
1141627702724Smrg# since we can't tell whether shared libraries were disabled because
1141727702724Smrg# the user asked for that or because the platform doesn't support
1141827702724Smrg# them.  This is particularly important on AIX, because we don't
1141927702724Smrg# support having both static and shared libraries enabled at the same
1142027702724Smrg# time on that platform, so we default to a shared-only configuration.
1142127702724Smrg# If a disable-shared tag is given, we'll fallback to a static-only
1142227702724Smrg# configuration.  But we'll never go from static-only to shared-only.
1142327702724Smrg
1142427702724Smrg# ### BEGIN LIBTOOL TAG CONFIG: disable-shared
11425e19dfac4Smrgbuild_libtool_libs=no
11426e19dfac4Smrgbuild_old_libs=yes
1142727702724Smrg# ### END LIBTOOL TAG CONFIG: disable-shared
1142827702724Smrg
1142927702724Smrg# ### BEGIN LIBTOOL TAG CONFIG: disable-static
11430e19dfac4Smrgbuild_old_libs=`case $build_libtool_libs in yes) echo no;; *) echo yes;; esac`
1143127702724Smrg# ### END LIBTOOL TAG CONFIG: disable-static
1143227702724Smrg
1143327702724Smrg# Local Variables:
1143427702724Smrg# mode:shell-script
1143527702724Smrg# sh-indentation:2
1143627702724Smrg# End:
11437