179d5fcd7Smrg#! /usr/bin/env sh
205cf1079Smrg## DO NOT EDIT - This file generated from ./build-aux/ltmain.in
379d5fcd7Smrg##               by inline-source v2019-02-19.15
404007ebaSmrg
579d5fcd7Smrg# libtool (GNU libtool) 2.4.7
605cf1079Smrg# Provide generalized library-building support services.
704007ebaSmrg# Written by Gordon Matzigkeit <gord@gnu.ai.mit.edu>, 1996
804007ebaSmrg
979d5fcd7Smrg# Copyright (C) 1996-2019, 2021-2022 Free Software Foundation, Inc.
1004007ebaSmrg# This is free software; see the source for copying conditions.  There is NO
1104007ebaSmrg# warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
1204007ebaSmrg
1304007ebaSmrg# GNU Libtool is free software; you can redistribute it and/or modify
1404007ebaSmrg# it under the terms of the GNU General Public License as published by
1504007ebaSmrg# the Free Software Foundation; either version 2 of the License, or
1604007ebaSmrg# (at your option) any later version.
1704007ebaSmrg#
1804007ebaSmrg# As a special exception to the GNU General Public License,
1904007ebaSmrg# if you distribute this file as part of a program or library that
2004007ebaSmrg# is built using GNU Libtool, you may include this file under the
2104007ebaSmrg# same distribution terms that you use for the rest of that program.
2204007ebaSmrg#
2304007ebaSmrg# GNU Libtool is distributed in the hope that it will be useful, but
2404007ebaSmrg# WITHOUT ANY WARRANTY; without even the implied warranty of
2504007ebaSmrg# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
2604007ebaSmrg# General Public License for more details.
2704007ebaSmrg#
2804007ebaSmrg# You should have received a copy of the GNU General Public License
2905cf1079Smrg# along with this program.  If not, see <http://www.gnu.org/licenses/>.
3004007ebaSmrg
3104007ebaSmrg
3204007ebaSmrgPROGRAM=libtool
3304007ebaSmrgPACKAGE=libtool
3479d5fcd7SmrgVERSION=2.4.7
3579d5fcd7Smrgpackage_revision=2.4.7
3604007ebaSmrg
3705cf1079Smrg
3805cf1079Smrg## ------ ##
3905cf1079Smrg## Usage. ##
4005cf1079Smrg## ------ ##
4105cf1079Smrg
4205cf1079Smrg# Run './libtool --help' for help with using this script from the
4305cf1079Smrg# command line.
4405cf1079Smrg
4505cf1079Smrg
4605cf1079Smrg## ------------------------------- ##
4705cf1079Smrg## User overridable command paths. ##
4805cf1079Smrg## ------------------------------- ##
4905cf1079Smrg
5005cf1079Smrg# After configure completes, it has a better idea of some of the
5105cf1079Smrg# shell tools we need than the defaults used by the functions shared
5205cf1079Smrg# with bootstrap, so set those here where they can still be over-
5305cf1079Smrg# ridden by the user, but otherwise take precedence.
5405cf1079Smrg
5505cf1079Smrg: ${AUTOCONF="autoconf"}
5605cf1079Smrg: ${AUTOMAKE="automake"}
5705cf1079Smrg
5805cf1079Smrg
5905cf1079Smrg## -------------------------- ##
6005cf1079Smrg## Source external libraries. ##
6105cf1079Smrg## -------------------------- ##
6205cf1079Smrg
6305cf1079Smrg# Much of our low-level functionality needs to be sourced from external
6405cf1079Smrg# libraries, which are installed to $pkgauxdir.
6505cf1079Smrg
6605cf1079Smrg# Set a version string for this script.
6779d5fcd7Smrgscriptversion=2019-02-19.15; # UTC
6805cf1079Smrg
6905cf1079Smrg# General shell script boiler plate, and helper functions.
7005cf1079Smrg# Written by Gary V. Vaughan, 2004
7105cf1079Smrg
7279d5fcd7Smrg# This is free software.  There is NO warranty; not even for
7379d5fcd7Smrg# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
7479d5fcd7Smrg#
7579d5fcd7Smrg# Copyright (C) 2004-2019, 2021 Bootstrap Authors
7679d5fcd7Smrg#
7779d5fcd7Smrg# This file is dual licensed under the terms of the MIT license
7879d5fcd7Smrg# <https://opensource.org/license/MIT>, and GPL version 2 or later
7979d5fcd7Smrg# <http://www.gnu.org/licenses/gpl-2.0.html>.  You must apply one of
8079d5fcd7Smrg# these licenses when using or redistributing this software or any of
8179d5fcd7Smrg# the files within it.  See the URLs above, or the file `LICENSE`
8279d5fcd7Smrg# included in the Bootstrap distribution for the full license texts.
8305cf1079Smrg
8479d5fcd7Smrg# Please report bugs or propose patches to:
8579d5fcd7Smrg# <https://github.com/gnulib-modules/bootstrap/issues>
8605cf1079Smrg
8705cf1079Smrg
8805cf1079Smrg## ------ ##
8905cf1079Smrg## Usage. ##
9005cf1079Smrg## ------ ##
9105cf1079Smrg
9205cf1079Smrg# Evaluate this file near the top of your script to gain access to
9305cf1079Smrg# the functions and variables defined here:
9405cf1079Smrg#
9505cf1079Smrg#   . `echo "$0" | ${SED-sed} 's|[^/]*$||'`/build-aux/funclib.sh
9605cf1079Smrg#
9705cf1079Smrg# If you need to override any of the default environment variable
9805cf1079Smrg# settings, do that before evaluating this file.
9905cf1079Smrg
10005cf1079Smrg
10105cf1079Smrg## -------------------- ##
10205cf1079Smrg## Shell normalisation. ##
10305cf1079Smrg## -------------------- ##
10405cf1079Smrg
10505cf1079Smrg# Some shells need a little help to be as Bourne compatible as possible.
10605cf1079Smrg# Before doing anything else, make sure all that help has been provided!
10705cf1079Smrg
10805cf1079SmrgDUALCASE=1; export DUALCASE # for MKS sh
10905cf1079Smrgif test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then :
11004007ebaSmrg  emulate sh
11104007ebaSmrg  NULLCMD=:
11205cf1079Smrg  # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which
11304007ebaSmrg  # is contrary to our usage.  Disable this feature.
11404007ebaSmrg  alias -g '${1+"$@"}'='"$@"'
11504007ebaSmrg  setopt NO_GLOB_SUBST
11604007ebaSmrgelse
11705cf1079Smrg  case `(set -o) 2>/dev/null` in *posix*) set -o posix ;; esac
11804007ebaSmrgfi
11904007ebaSmrg
12005cf1079Smrg# NLS nuisances: We save the old values in case they are required later.
12105cf1079Smrg_G_user_locale=
12205cf1079Smrg_G_safe_locale=
12305cf1079Smrgfor _G_var in LANG LANGUAGE LC_ALL LC_CTYPE LC_COLLATE LC_MESSAGES
12404007ebaSmrgdo
12505cf1079Smrg  eval "if test set = \"\${$_G_var+set}\"; then
12605cf1079Smrg          save_$_G_var=\$$_G_var
12705cf1079Smrg          $_G_var=C
12805cf1079Smrg	  export $_G_var
12905cf1079Smrg	  _G_user_locale=\"$_G_var=\\\$save_\$_G_var; \$_G_user_locale\"
13005cf1079Smrg	  _G_safe_locale=\"$_G_var=C; \$_G_safe_locale\"
13104007ebaSmrg	fi"
13204007ebaSmrgdone
13379d5fcd7Smrg# These NLS vars are set unconditionally (bootstrap issue #24).  Unset those
13479d5fcd7Smrg# in case the environment reset is needed later and the $save_* variant is not
13579d5fcd7Smrg# defined (see the code above).
13679d5fcd7SmrgLC_ALL=C
13779d5fcd7SmrgLANGUAGE=C
13879d5fcd7Smrgexport LANGUAGE LC_ALL
13904007ebaSmrg
14005cf1079Smrg# Make sure IFS has a sensible default
14105cf1079Smrgsp=' '
14205cf1079Smrgnl='
14305cf1079Smrg'
14405cf1079SmrgIFS="$sp	$nl"
14505cf1079Smrg
14605cf1079Smrg# There are apparently some retarded systems that use ';' as a PATH separator!
14705cf1079Smrgif test "${PATH_SEPARATOR+set}" != set; then
14805cf1079Smrg  PATH_SEPARATOR=:
14905cf1079Smrg  (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && {
15005cf1079Smrg    (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 ||
15105cf1079Smrg      PATH_SEPARATOR=';'
15205cf1079Smrg  }
15305cf1079Smrgfi
15404007ebaSmrg
15504007ebaSmrg
15679d5fcd7Smrg# func_unset VAR
15779d5fcd7Smrg# --------------
15879d5fcd7Smrg# Portably unset VAR.
15979d5fcd7Smrg# In some shells, an 'unset VAR' statement leaves a non-zero return
16079d5fcd7Smrg# status if VAR is already unset, which might be problematic if the
16179d5fcd7Smrg# statement is used at the end of a function (thus poisoning its return
16279d5fcd7Smrg# value) or when 'set -e' is active (causing even a spurious abort of
16379d5fcd7Smrg# the script in this case).
16479d5fcd7Smrgfunc_unset ()
16579d5fcd7Smrg{
16679d5fcd7Smrg    { eval $1=; (eval unset $1) >/dev/null 2>&1 && eval unset $1 || : ; }
16779d5fcd7Smrg}
16879d5fcd7Smrg
16979d5fcd7Smrg
17079d5fcd7Smrg# Make sure CDPATH doesn't cause `cd` commands to output the target dir.
17179d5fcd7Smrgfunc_unset CDPATH
17279d5fcd7Smrg
17379d5fcd7Smrg# Make sure ${,E,F}GREP behave sanely.
17479d5fcd7Smrgfunc_unset GREP_OPTIONS
17579d5fcd7Smrg
17604007ebaSmrg
17705cf1079Smrg## ------------------------- ##
17805cf1079Smrg## Locate command utilities. ##
17905cf1079Smrg## ------------------------- ##
18005cf1079Smrg
18105cf1079Smrg
18205cf1079Smrg# func_executable_p FILE
18305cf1079Smrg# ----------------------
18405cf1079Smrg# Check that FILE is an executable regular file.
18505cf1079Smrgfunc_executable_p ()
18605cf1079Smrg{
18705cf1079Smrg    test -f "$1" && test -x "$1"
18805cf1079Smrg}
18905cf1079Smrg
19005cf1079Smrg
19105cf1079Smrg# func_path_progs PROGS_LIST CHECK_FUNC [PATH]
19205cf1079Smrg# --------------------------------------------
19305cf1079Smrg# Search for either a program that responds to --version with output
19405cf1079Smrg# containing "GNU", or else returned by CHECK_FUNC otherwise, by
19505cf1079Smrg# trying all the directories in PATH with each of the elements of
19605cf1079Smrg# PROGS_LIST.
19705cf1079Smrg#
19805cf1079Smrg# CHECK_FUNC should accept the path to a candidate program, and
19905cf1079Smrg# set $func_check_prog_result if it truncates its output less than
20005cf1079Smrg# $_G_path_prog_max characters.
20105cf1079Smrgfunc_path_progs ()
20205cf1079Smrg{
20305cf1079Smrg    _G_progs_list=$1
20405cf1079Smrg    _G_check_func=$2
20505cf1079Smrg    _G_PATH=${3-"$PATH"}
20605cf1079Smrg
20705cf1079Smrg    _G_path_prog_max=0
20805cf1079Smrg    _G_path_prog_found=false
20905cf1079Smrg    _G_save_IFS=$IFS; IFS=${PATH_SEPARATOR-:}
21005cf1079Smrg    for _G_dir in $_G_PATH; do
21105cf1079Smrg      IFS=$_G_save_IFS
21205cf1079Smrg      test -z "$_G_dir" && _G_dir=.
21305cf1079Smrg      for _G_prog_name in $_G_progs_list; do
21405cf1079Smrg        for _exeext in '' .EXE; do
21505cf1079Smrg          _G_path_prog=$_G_dir/$_G_prog_name$_exeext
21605cf1079Smrg          func_executable_p "$_G_path_prog" || continue
21705cf1079Smrg          case `"$_G_path_prog" --version 2>&1` in
21805cf1079Smrg            *GNU*) func_path_progs_result=$_G_path_prog _G_path_prog_found=: ;;
21905cf1079Smrg            *)     $_G_check_func $_G_path_prog
22005cf1079Smrg		   func_path_progs_result=$func_check_prog_result
22105cf1079Smrg		   ;;
22205cf1079Smrg          esac
22305cf1079Smrg          $_G_path_prog_found && break 3
22405cf1079Smrg        done
22505cf1079Smrg      done
22605cf1079Smrg    done
22705cf1079Smrg    IFS=$_G_save_IFS
22805cf1079Smrg    test -z "$func_path_progs_result" && {
22905cf1079Smrg      echo "no acceptable sed could be found in \$PATH" >&2
23005cf1079Smrg      exit 1
23105cf1079Smrg    }
23205cf1079Smrg}
23305cf1079Smrg
23405cf1079Smrg
23505cf1079Smrg# We want to be able to use the functions in this file before configure
23605cf1079Smrg# has figured out where the best binaries are kept, which means we have
23705cf1079Smrg# to search for them ourselves - except when the results are already set
23805cf1079Smrg# where we skip the searches.
23905cf1079Smrg
24005cf1079Smrg# Unless the user overrides by setting SED, search the path for either GNU
24105cf1079Smrg# sed, or the sed that truncates its output the least.
24205cf1079Smrgtest -z "$SED" && {
24305cf1079Smrg  _G_sed_script=s/aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa/bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb/
24405cf1079Smrg  for _G_i in 1 2 3 4 5 6 7; do
24505cf1079Smrg    _G_sed_script=$_G_sed_script$nl$_G_sed_script
24605cf1079Smrg  done
24705cf1079Smrg  echo "$_G_sed_script" 2>/dev/null | sed 99q >conftest.sed
24805cf1079Smrg  _G_sed_script=
24905cf1079Smrg
25005cf1079Smrg  func_check_prog_sed ()
25105cf1079Smrg  {
25205cf1079Smrg    _G_path_prog=$1
25305cf1079Smrg
25405cf1079Smrg    _G_count=0
25505cf1079Smrg    printf 0123456789 >conftest.in
25605cf1079Smrg    while :
25705cf1079Smrg    do
25805cf1079Smrg      cat conftest.in conftest.in >conftest.tmp
25905cf1079Smrg      mv conftest.tmp conftest.in
26005cf1079Smrg      cp conftest.in conftest.nl
26105cf1079Smrg      echo '' >> conftest.nl
26205cf1079Smrg      "$_G_path_prog" -f conftest.sed <conftest.nl >conftest.out 2>/dev/null || break
26305cf1079Smrg      diff conftest.out conftest.nl >/dev/null 2>&1 || break
26405cf1079Smrg      _G_count=`expr $_G_count + 1`
26505cf1079Smrg      if test "$_G_count" -gt "$_G_path_prog_max"; then
26605cf1079Smrg        # Best one so far, save it but keep looking for a better one
26705cf1079Smrg        func_check_prog_result=$_G_path_prog
26805cf1079Smrg        _G_path_prog_max=$_G_count
26905cf1079Smrg      fi
27005cf1079Smrg      # 10*(2^10) chars as input seems more than enough
27105cf1079Smrg      test 10 -lt "$_G_count" && break
27205cf1079Smrg    done
27305cf1079Smrg    rm -f conftest.in conftest.tmp conftest.nl conftest.out
27405cf1079Smrg  }
27505cf1079Smrg
27679d5fcd7Smrg  func_path_progs "sed gsed" func_check_prog_sed "$PATH:/usr/xpg4/bin"
27705cf1079Smrg  rm -f conftest.sed
27805cf1079Smrg  SED=$func_path_progs_result
27905cf1079Smrg}
28005cf1079Smrg
28105cf1079Smrg
28205cf1079Smrg# Unless the user overrides by setting GREP, search the path for either GNU
28305cf1079Smrg# grep, or the grep that truncates its output the least.
28405cf1079Smrgtest -z "$GREP" && {
28505cf1079Smrg  func_check_prog_grep ()
28605cf1079Smrg  {
28705cf1079Smrg    _G_path_prog=$1
28805cf1079Smrg
28905cf1079Smrg    _G_count=0
29005cf1079Smrg    _G_path_prog_max=0
29105cf1079Smrg    printf 0123456789 >conftest.in
29205cf1079Smrg    while :
29305cf1079Smrg    do
29405cf1079Smrg      cat conftest.in conftest.in >conftest.tmp
29505cf1079Smrg      mv conftest.tmp conftest.in
29605cf1079Smrg      cp conftest.in conftest.nl
29705cf1079Smrg      echo 'GREP' >> conftest.nl
29805cf1079Smrg      "$_G_path_prog" -e 'GREP$' -e '-(cannot match)-' <conftest.nl >conftest.out 2>/dev/null || break
29905cf1079Smrg      diff conftest.out conftest.nl >/dev/null 2>&1 || break
30005cf1079Smrg      _G_count=`expr $_G_count + 1`
30105cf1079Smrg      if test "$_G_count" -gt "$_G_path_prog_max"; then
30205cf1079Smrg        # Best one so far, save it but keep looking for a better one
30305cf1079Smrg        func_check_prog_result=$_G_path_prog
30405cf1079Smrg        _G_path_prog_max=$_G_count
30505cf1079Smrg      fi
30605cf1079Smrg      # 10*(2^10) chars as input seems more than enough
30705cf1079Smrg      test 10 -lt "$_G_count" && break
30805cf1079Smrg    done
30905cf1079Smrg    rm -f conftest.in conftest.tmp conftest.nl conftest.out
31005cf1079Smrg  }
31105cf1079Smrg
31279d5fcd7Smrg  func_path_progs "grep ggrep" func_check_prog_grep "$PATH:/usr/xpg4/bin"
31305cf1079Smrg  GREP=$func_path_progs_result
31405cf1079Smrg}
31505cf1079Smrg
31605cf1079Smrg
31705cf1079Smrg## ------------------------------- ##
31805cf1079Smrg## User overridable command paths. ##
31905cf1079Smrg## ------------------------------- ##
32005cf1079Smrg
32105cf1079Smrg# All uppercase variable names are used for environment variables.  These
32205cf1079Smrg# variables can be overridden by the user before calling a script that
32305cf1079Smrg# uses them if a suitable command of that name is not already available
32405cf1079Smrg# in the command search PATH.
32504007ebaSmrg
32604007ebaSmrg: ${CP="cp -f"}
32705cf1079Smrg: ${ECHO="printf %s\n"}
32805cf1079Smrg: ${EGREP="$GREP -E"}
32905cf1079Smrg: ${FGREP="$GREP -F"}
33005cf1079Smrg: ${LN_S="ln -s"}
33104007ebaSmrg: ${MAKE="make"}
33204007ebaSmrg: ${MKDIR="mkdir"}
33304007ebaSmrg: ${MV="mv -f"}
33404007ebaSmrg: ${RM="rm -f"}
33504007ebaSmrg: ${SHELL="${CONFIG_SHELL-/bin/sh}"}
33604007ebaSmrg
33704007ebaSmrg
33805cf1079Smrg## -------------------- ##
33905cf1079Smrg## Useful sed snippets. ##
34005cf1079Smrg## -------------------- ##
34104007ebaSmrg
34205cf1079Smrgsed_dirname='s|/[^/]*$||'
34305cf1079Smrgsed_basename='s|^.*/||'
34404007ebaSmrg
34505cf1079Smrg# Sed substitution that helps us do robust quoting.  It backslashifies
34605cf1079Smrg# metacharacters that are still active within double-quoted strings.
34705cf1079Smrgsed_quote_subst='s|\([`"$\\]\)|\\\1|g'
34804007ebaSmrg
34905cf1079Smrg# Same as above, but do not quote variable references.
35005cf1079Smrgsed_double_quote_subst='s/\(["`\\]\)/\\\1/g'
35104007ebaSmrg
35205cf1079Smrg# Sed substitution that turns a string into a regex matching for the
35305cf1079Smrg# string literally.
35405cf1079Smrgsed_make_literal_regex='s|[].[^$\\*\/]|\\&|g'
35504007ebaSmrg
35605cf1079Smrg# Sed substitution that converts a w32 file name or path
35705cf1079Smrg# that contains forward slashes, into one that contains
35805cf1079Smrg# (escaped) backslashes.  A very naive implementation.
35905cf1079Smrgsed_naive_backslashify='s|\\\\*|\\|g;s|/|\\|g;s|\\|\\\\|g'
36005cf1079Smrg
36105cf1079Smrg# Re-'\' parameter expansions in output of sed_double_quote_subst that
36205cf1079Smrg# were '\'-ed in input to the same.  If an odd number of '\' preceded a
36305cf1079Smrg# '$' in input to sed_double_quote_subst, that '$' was protected from
36405cf1079Smrg# expansion.  Since each input '\' is now two '\'s, look for any number
36505cf1079Smrg# of runs of four '\'s followed by two '\'s and then a '$'.  '\' that '$'.
36605cf1079Smrg_G_bs='\\'
36705cf1079Smrg_G_bs2='\\\\'
36805cf1079Smrg_G_bs4='\\\\\\\\'
36905cf1079Smrg_G_dollar='\$'
37005cf1079Smrgsed_double_backslash="\
37105cf1079Smrg  s/$_G_bs4/&\\
37205cf1079Smrg/g
37305cf1079Smrg  s/^$_G_bs2$_G_dollar/$_G_bs&/
37405cf1079Smrg  s/\\([^$_G_bs]\\)$_G_bs2$_G_dollar/\\1$_G_bs2$_G_bs$_G_dollar/g
37505cf1079Smrg  s/\n//g"
37604007ebaSmrg
37779d5fcd7Smrg# require_check_ifs_backslash
37879d5fcd7Smrg# ---------------------------
37979d5fcd7Smrg# Check if we can use backslash as IFS='\' separator, and set
38079d5fcd7Smrg# $check_ifs_backshlash_broken to ':' or 'false'.
38179d5fcd7Smrgrequire_check_ifs_backslash=func_require_check_ifs_backslash
38279d5fcd7Smrgfunc_require_check_ifs_backslash ()
38379d5fcd7Smrg{
38479d5fcd7Smrg  _G_save_IFS=$IFS
38579d5fcd7Smrg  IFS='\'
38679d5fcd7Smrg  _G_check_ifs_backshlash='a\\b'
38779d5fcd7Smrg  for _G_i in $_G_check_ifs_backshlash
38879d5fcd7Smrg  do
38979d5fcd7Smrg  case $_G_i in
39079d5fcd7Smrg  a)
39179d5fcd7Smrg    check_ifs_backshlash_broken=false
39279d5fcd7Smrg    ;;
39379d5fcd7Smrg  '')
39479d5fcd7Smrg    break
39579d5fcd7Smrg    ;;
39679d5fcd7Smrg  *)
39779d5fcd7Smrg    check_ifs_backshlash_broken=:
39879d5fcd7Smrg    break
39979d5fcd7Smrg    ;;
40079d5fcd7Smrg  esac
40179d5fcd7Smrg  done
40279d5fcd7Smrg  IFS=$_G_save_IFS
40379d5fcd7Smrg  require_check_ifs_backslash=:
40479d5fcd7Smrg}
40579d5fcd7Smrg
40604007ebaSmrg
40705cf1079Smrg## ----------------- ##
40805cf1079Smrg## Global variables. ##
40905cf1079Smrg## ----------------- ##
41004007ebaSmrg
41105cf1079Smrg# Except for the global variables explicitly listed below, the following
41205cf1079Smrg# functions in the '^func_' namespace, and the '^require_' namespace
41305cf1079Smrg# variables initialised in the 'Resource management' section, sourcing
41405cf1079Smrg# this file will not pollute your global namespace with anything
41505cf1079Smrg# else. There's no portable way to scope variables in Bourne shell
41605cf1079Smrg# though, so actually running these functions will sometimes place
41705cf1079Smrg# results into a variable named after the function, and often use
41805cf1079Smrg# temporary variables in the '^_G_' namespace. If you are careful to
41905cf1079Smrg# avoid using those namespaces casually in your sourcing script, things
42005cf1079Smrg# should continue to work as you expect. And, of course, you can freely
42105cf1079Smrg# overwrite any of the functions or variables defined here before
42205cf1079Smrg# calling anything to customize them.
42304007ebaSmrg
42405cf1079SmrgEXIT_SUCCESS=0
42505cf1079SmrgEXIT_FAILURE=1
42605cf1079SmrgEXIT_MISMATCH=63  # $? = 63 is used to indicate version mismatch to missing.
42705cf1079SmrgEXIT_SKIP=77	  # $? = 77 is used to indicate a skipped test to automake.
42804007ebaSmrg
42905cf1079Smrg# Allow overriding, eg assuming that you follow the convention of
43005cf1079Smrg# putting '$debug_cmd' at the start of all your functions, you can get
43105cf1079Smrg# bash to show function call trace with:
43205cf1079Smrg#
43305cf1079Smrg#    debug_cmd='eval echo "${FUNCNAME[0]} $*" >&2' bash your-script-name
43405cf1079Smrgdebug_cmd=${debug_cmd-":"}
43505cf1079Smrgexit_cmd=:
43604007ebaSmrg
43705cf1079Smrg# By convention, finish your script with:
43805cf1079Smrg#
43905cf1079Smrg#    exit $exit_status
44005cf1079Smrg#
44105cf1079Smrg# so that you can set exit_status to non-zero if you want to indicate
44205cf1079Smrg# something went wrong during execution without actually bailing out at
44305cf1079Smrg# the point of failure.
44405cf1079Smrgexit_status=$EXIT_SUCCESS
44504007ebaSmrg
44605cf1079Smrg# Work around backward compatibility issue on IRIX 6.5. On IRIX 6.4+, sh
44705cf1079Smrg# is ksh but when the shell is invoked as "sh" and the current value of
44805cf1079Smrg# the _XPG environment variable is not equal to 1 (one), the special
44905cf1079Smrg# positional parameter $0, within a function call, is the name of the
45005cf1079Smrg# function.
45105cf1079Smrgprogpath=$0
45204007ebaSmrg
45305cf1079Smrg# The name of this program.
45405cf1079Smrgprogname=`$ECHO "$progpath" |$SED "$sed_basename"`
45504007ebaSmrg
45605cf1079Smrg# Make sure we have an absolute progpath for reexecution:
45704007ebaSmrgcase $progpath in
45804007ebaSmrg  [\\/]*|[A-Za-z]:\\*) ;;
45904007ebaSmrg  *[\\/]*)
46005cf1079Smrg     progdir=`$ECHO "$progpath" |$SED "$sed_dirname"`
46104007ebaSmrg     progdir=`cd "$progdir" && pwd`
46205cf1079Smrg     progpath=$progdir/$progname
46304007ebaSmrg     ;;
46404007ebaSmrg  *)
46505cf1079Smrg     _G_IFS=$IFS
46604007ebaSmrg     IFS=${PATH_SEPARATOR-:}
46704007ebaSmrg     for progdir in $PATH; do
46805cf1079Smrg       IFS=$_G_IFS
46904007ebaSmrg       test -x "$progdir/$progname" && break
47004007ebaSmrg     done
47105cf1079Smrg     IFS=$_G_IFS
47204007ebaSmrg     test -n "$progdir" || progdir=`pwd`
47305cf1079Smrg     progpath=$progdir/$progname
47404007ebaSmrg     ;;
47504007ebaSmrgesac
47604007ebaSmrg
47704007ebaSmrg
47805cf1079Smrg## ----------------- ##
47905cf1079Smrg## Standard options. ##
48005cf1079Smrg## ----------------- ##
48104007ebaSmrg
48205cf1079Smrg# The following options affect the operation of the functions defined
48305cf1079Smrg# below, and should be set appropriately depending on run-time para-
48405cf1079Smrg# meters passed on the command line.
48504007ebaSmrg
48604007ebaSmrgopt_dry_run=false
48704007ebaSmrgopt_quiet=false
48804007ebaSmrgopt_verbose=false
48904007ebaSmrg
49005cf1079Smrg# Categories 'all' and 'none' are always available.  Append any others
49105cf1079Smrg# you will pass as the first argument to func_warning from your own
49205cf1079Smrg# code.
49305cf1079Smrgwarning_categories=
49404007ebaSmrg
49505cf1079Smrg# By default, display warnings according to 'opt_warning_types'.  Set
49605cf1079Smrg# 'warning_func'  to ':' to elide all warnings, or func_fatal_error to
49705cf1079Smrg# treat the next displayed warning as a fatal error.
49805cf1079Smrgwarning_func=func_warn_and_continue
49904007ebaSmrg
50005cf1079Smrg# Set to 'all' to display all warnings, 'none' to suppress all
50105cf1079Smrg# warnings, or a space delimited list of some subset of
50205cf1079Smrg# 'warning_categories' to display only the listed warnings.
50305cf1079Smrgopt_warning_types=all
50404007ebaSmrg
50504007ebaSmrg
50605cf1079Smrg## -------------------- ##
50705cf1079Smrg## Resource management. ##
50805cf1079Smrg## -------------------- ##
50904007ebaSmrg
51005cf1079Smrg# This section contains definitions for functions that each ensure a
51105cf1079Smrg# particular resource (a file, or a non-empty configuration variable for
51205cf1079Smrg# example) is available, and if appropriate to extract default values
51305cf1079Smrg# from pertinent package files. Call them using their associated
51405cf1079Smrg# 'require_*' variable to ensure that they are executed, at most, once.
51505cf1079Smrg#
51605cf1079Smrg# It's entirely deliberate that calling these functions can set
51705cf1079Smrg# variables that don't obey the namespace limitations obeyed by the rest
51805cf1079Smrg# of this file, in order that that they be as useful as possible to
51905cf1079Smrg# callers.
52004007ebaSmrg
52104007ebaSmrg
52205cf1079Smrg# require_term_colors
52305cf1079Smrg# -------------------
52405cf1079Smrg# Allow display of bold text on terminals that support it.
52505cf1079Smrgrequire_term_colors=func_require_term_colors
52605cf1079Smrgfunc_require_term_colors ()
52704007ebaSmrg{
52805cf1079Smrg    $debug_cmd
52905cf1079Smrg
53005cf1079Smrg    test -t 1 && {
53105cf1079Smrg      # COLORTERM and USE_ANSI_COLORS environment variables take
53205cf1079Smrg      # precedence, because most terminfo databases neglect to describe
53305cf1079Smrg      # whether color sequences are supported.
53405cf1079Smrg      test -n "${COLORTERM+set}" && : ${USE_ANSI_COLORS="1"}
53505cf1079Smrg
53605cf1079Smrg      if test 1 = "$USE_ANSI_COLORS"; then
53705cf1079Smrg        # Standard ANSI escape sequences
53805cf1079Smrg        tc_reset='[0m'
53905cf1079Smrg        tc_bold='[1m';   tc_standout='[7m'
54005cf1079Smrg        tc_red='[31m';   tc_green='[32m'
54105cf1079Smrg        tc_blue='[34m';  tc_cyan='[36m'
54205cf1079Smrg      else
54305cf1079Smrg        # Otherwise trust the terminfo database after all.
54405cf1079Smrg        test -n "`tput sgr0 2>/dev/null`" && {
54505cf1079Smrg          tc_reset=`tput sgr0`
54605cf1079Smrg          test -n "`tput bold 2>/dev/null`" && tc_bold=`tput bold`
54705cf1079Smrg          tc_standout=$tc_bold
54805cf1079Smrg          test -n "`tput smso 2>/dev/null`" && tc_standout=`tput smso`
54905cf1079Smrg          test -n "`tput setaf 1 2>/dev/null`" && tc_red=`tput setaf 1`
55005cf1079Smrg          test -n "`tput setaf 2 2>/dev/null`" && tc_green=`tput setaf 2`
55105cf1079Smrg          test -n "`tput setaf 4 2>/dev/null`" && tc_blue=`tput setaf 4`
55205cf1079Smrg          test -n "`tput setaf 5 2>/dev/null`" && tc_cyan=`tput setaf 5`
55305cf1079Smrg        }
55405cf1079Smrg      fi
55505cf1079Smrg    }
55604007ebaSmrg
55705cf1079Smrg    require_term_colors=:
55804007ebaSmrg}
55904007ebaSmrg
56004007ebaSmrg
56105cf1079Smrg## ----------------- ##
56205cf1079Smrg## Function library. ##
56305cf1079Smrg## ----------------- ##
56405cf1079Smrg
56505cf1079Smrg# This section contains a variety of useful functions to call in your
56605cf1079Smrg# scripts. Take note of the portable wrappers for features provided by
56705cf1079Smrg# some modern shells, which will fall back to slower equivalents on
56805cf1079Smrg# less featureful shells.
56905cf1079Smrg
57005cf1079Smrg
57105cf1079Smrg# func_append VAR VALUE
57205cf1079Smrg# ---------------------
57305cf1079Smrg# Append VALUE onto the existing contents of VAR.
57405cf1079Smrg
57505cf1079Smrg  # We should try to minimise forks, especially on Windows where they are
57605cf1079Smrg  # unreasonably slow, so skip the feature probes when bash or zsh are
57705cf1079Smrg  # being used:
57805cf1079Smrg  if test set = "${BASH_VERSION+set}${ZSH_VERSION+set}"; then
57905cf1079Smrg    : ${_G_HAVE_ARITH_OP="yes"}
58005cf1079Smrg    : ${_G_HAVE_XSI_OPS="yes"}
58105cf1079Smrg    # The += operator was introduced in bash 3.1
58205cf1079Smrg    case $BASH_VERSION in
58305cf1079Smrg      [12].* | 3.0 | 3.0*) ;;
58405cf1079Smrg      *)
58505cf1079Smrg        : ${_G_HAVE_PLUSEQ_OP="yes"}
58605cf1079Smrg        ;;
58705cf1079Smrg    esac
58805cf1079Smrg  fi
58905cf1079Smrg
59005cf1079Smrg  # _G_HAVE_PLUSEQ_OP
59105cf1079Smrg  # Can be empty, in which case the shell is probed, "yes" if += is
59205cf1079Smrg  # useable or anything else if it does not work.
59305cf1079Smrg  test -z "$_G_HAVE_PLUSEQ_OP" \
59405cf1079Smrg    && (eval 'x=a; x+=" b"; test "a b" = "$x"') 2>/dev/null \
59505cf1079Smrg    && _G_HAVE_PLUSEQ_OP=yes
59605cf1079Smrg
59705cf1079Smrgif test yes = "$_G_HAVE_PLUSEQ_OP"
59805cf1079Smrgthen
59905cf1079Smrg  # This is an XSI compatible shell, allowing a faster implementation...
60005cf1079Smrg  eval 'func_append ()
60105cf1079Smrg  {
60205cf1079Smrg    $debug_cmd
60305cf1079Smrg
60405cf1079Smrg    eval "$1+=\$2"
60505cf1079Smrg  }'
60605cf1079Smrgelse
60705cf1079Smrg  # ...otherwise fall back to using expr, which is often a shell builtin.
60805cf1079Smrg  func_append ()
60905cf1079Smrg  {
61005cf1079Smrg    $debug_cmd
61105cf1079Smrg
61205cf1079Smrg    eval "$1=\$$1\$2"
61305cf1079Smrg  }
61405cf1079Smrgfi
61505cf1079Smrg
61605cf1079Smrg
61705cf1079Smrg# func_append_quoted VAR VALUE
61805cf1079Smrg# ----------------------------
61905cf1079Smrg# Quote VALUE and append to the end of shell variable VAR, separated
62005cf1079Smrg# by a space.
62105cf1079Smrgif test yes = "$_G_HAVE_PLUSEQ_OP"; then
62205cf1079Smrg  eval 'func_append_quoted ()
62305cf1079Smrg  {
62405cf1079Smrg    $debug_cmd
62505cf1079Smrg
62679d5fcd7Smrg    func_quote_arg pretty "$2"
62779d5fcd7Smrg    eval "$1+=\\ \$func_quote_arg_result"
62805cf1079Smrg  }'
62905cf1079Smrgelse
63005cf1079Smrg  func_append_quoted ()
63105cf1079Smrg  {
63205cf1079Smrg    $debug_cmd
63305cf1079Smrg
63479d5fcd7Smrg    func_quote_arg pretty "$2"
63579d5fcd7Smrg    eval "$1=\$$1\\ \$func_quote_arg_result"
63605cf1079Smrg  }
63705cf1079Smrgfi
63805cf1079Smrg
63905cf1079Smrg
64005cf1079Smrg# func_append_uniq VAR VALUE
64105cf1079Smrg# --------------------------
64205cf1079Smrg# Append unique VALUE onto the existing contents of VAR, assuming
64305cf1079Smrg# entries are delimited by the first character of VALUE.  For example:
64405cf1079Smrg#
64505cf1079Smrg#   func_append_uniq options " --another-option option-argument"
64605cf1079Smrg#
64705cf1079Smrg# will only append to $options if " --another-option option-argument "
64805cf1079Smrg# is not already present somewhere in $options already (note spaces at
64905cf1079Smrg# each end implied by leading space in second argument).
65005cf1079Smrgfunc_append_uniq ()
65105cf1079Smrg{
65205cf1079Smrg    $debug_cmd
65305cf1079Smrg
65405cf1079Smrg    eval _G_current_value='`$ECHO $'$1'`'
65505cf1079Smrg    _G_delim=`expr "$2" : '\(.\)'`
65605cf1079Smrg
65705cf1079Smrg    case $_G_delim$_G_current_value$_G_delim in
65805cf1079Smrg      *"$2$_G_delim"*) ;;
65905cf1079Smrg      *) func_append "$@" ;;
66005cf1079Smrg    esac
66105cf1079Smrg}
66205cf1079Smrg
66305cf1079Smrg
66405cf1079Smrg# func_arith TERM...
66505cf1079Smrg# ------------------
66605cf1079Smrg# Set func_arith_result to the result of evaluating TERMs.
66705cf1079Smrg  test -z "$_G_HAVE_ARITH_OP" \
66805cf1079Smrg    && (eval 'test 2 = $(( 1 + 1 ))') 2>/dev/null \
66905cf1079Smrg    && _G_HAVE_ARITH_OP=yes
67005cf1079Smrg
67105cf1079Smrgif test yes = "$_G_HAVE_ARITH_OP"; then
67205cf1079Smrg  eval 'func_arith ()
67305cf1079Smrg  {
67405cf1079Smrg    $debug_cmd
67505cf1079Smrg
67605cf1079Smrg    func_arith_result=$(( $* ))
67705cf1079Smrg  }'
67805cf1079Smrgelse
67905cf1079Smrg  func_arith ()
68005cf1079Smrg  {
68105cf1079Smrg    $debug_cmd
68205cf1079Smrg
68305cf1079Smrg    func_arith_result=`expr "$@"`
68405cf1079Smrg  }
68505cf1079Smrgfi
68605cf1079Smrg
68705cf1079Smrg
68805cf1079Smrg# func_basename FILE
68905cf1079Smrg# ------------------
69005cf1079Smrg# Set func_basename_result to FILE with everything up to and including
69105cf1079Smrg# the last / stripped.
69205cf1079Smrgif test yes = "$_G_HAVE_XSI_OPS"; then
69305cf1079Smrg  # If this shell supports suffix pattern removal, then use it to avoid
69405cf1079Smrg  # forking. Hide the definitions single quotes in case the shell chokes
69505cf1079Smrg  # on unsupported syntax...
69605cf1079Smrg  _b='func_basename_result=${1##*/}'
69705cf1079Smrg  _d='case $1 in
69805cf1079Smrg        */*) func_dirname_result=${1%/*}$2 ;;
69905cf1079Smrg        *  ) func_dirname_result=$3        ;;
70005cf1079Smrg      esac'
70105cf1079Smrg
70205cf1079Smrgelse
70305cf1079Smrg  # ...otherwise fall back to using sed.
70405cf1079Smrg  _b='func_basename_result=`$ECHO "$1" |$SED "$sed_basename"`'
70505cf1079Smrg  _d='func_dirname_result=`$ECHO "$1"  |$SED "$sed_dirname"`
70605cf1079Smrg      if test "X$func_dirname_result" = "X$1"; then
70705cf1079Smrg        func_dirname_result=$3
70805cf1079Smrg      else
70905cf1079Smrg        func_append func_dirname_result "$2"
71005cf1079Smrg      fi'
71105cf1079Smrgfi
71205cf1079Smrg
71305cf1079Smrgeval 'func_basename ()
71405cf1079Smrg{
71505cf1079Smrg    $debug_cmd
71605cf1079Smrg
71705cf1079Smrg    '"$_b"'
71805cf1079Smrg}'
71905cf1079Smrg
72005cf1079Smrg
72105cf1079Smrg# func_dirname FILE APPEND NONDIR_REPLACEMENT
72205cf1079Smrg# -------------------------------------------
72305cf1079Smrg# Compute the dirname of FILE.  If nonempty, add APPEND to the result,
72405cf1079Smrg# otherwise set result to NONDIR_REPLACEMENT.
72505cf1079Smrgeval 'func_dirname ()
72605cf1079Smrg{
72705cf1079Smrg    $debug_cmd
72805cf1079Smrg
72905cf1079Smrg    '"$_d"'
73005cf1079Smrg}'
73105cf1079Smrg
73205cf1079Smrg
73305cf1079Smrg# func_dirname_and_basename FILE APPEND NONDIR_REPLACEMENT
73405cf1079Smrg# --------------------------------------------------------
73505cf1079Smrg# Perform func_basename and func_dirname in a single function
73605cf1079Smrg# call:
73705cf1079Smrg#   dirname:  Compute the dirname of FILE.  If nonempty,
73805cf1079Smrg#             add APPEND to the result, otherwise set result
73905cf1079Smrg#             to NONDIR_REPLACEMENT.
74005cf1079Smrg#             value returned in "$func_dirname_result"
74105cf1079Smrg#   basename: Compute filename of FILE.
74205cf1079Smrg#             value retuned in "$func_basename_result"
74305cf1079Smrg# For efficiency, we do not delegate to the functions above but instead
74405cf1079Smrg# duplicate the functionality here.
74505cf1079Smrgeval 'func_dirname_and_basename ()
74605cf1079Smrg{
74705cf1079Smrg    $debug_cmd
74805cf1079Smrg
74905cf1079Smrg    '"$_b"'
75005cf1079Smrg    '"$_d"'
75105cf1079Smrg}'
75205cf1079Smrg
75305cf1079Smrg
75405cf1079Smrg# func_echo ARG...
75505cf1079Smrg# ----------------
75605cf1079Smrg# Echo program name prefixed message.
75705cf1079Smrgfunc_echo ()
75805cf1079Smrg{
75905cf1079Smrg    $debug_cmd
76005cf1079Smrg
76105cf1079Smrg    _G_message=$*
76205cf1079Smrg
76305cf1079Smrg    func_echo_IFS=$IFS
76405cf1079Smrg    IFS=$nl
76505cf1079Smrg    for _G_line in $_G_message; do
76605cf1079Smrg      IFS=$func_echo_IFS
76705cf1079Smrg      $ECHO "$progname: $_G_line"
76805cf1079Smrg    done
76905cf1079Smrg    IFS=$func_echo_IFS
77005cf1079Smrg}
77105cf1079Smrg
77205cf1079Smrg
77305cf1079Smrg# func_echo_all ARG...
77405cf1079Smrg# --------------------
77505cf1079Smrg# Invoke $ECHO with all args, space-separated.
77605cf1079Smrgfunc_echo_all ()
77705cf1079Smrg{
77805cf1079Smrg    $ECHO "$*"
77905cf1079Smrg}
78005cf1079Smrg
78105cf1079Smrg
78205cf1079Smrg# func_echo_infix_1 INFIX ARG...
78305cf1079Smrg# ------------------------------
78405cf1079Smrg# Echo program name, followed by INFIX on the first line, with any
78505cf1079Smrg# additional lines not showing INFIX.
78605cf1079Smrgfunc_echo_infix_1 ()
78705cf1079Smrg{
78805cf1079Smrg    $debug_cmd
78905cf1079Smrg
79005cf1079Smrg    $require_term_colors
79105cf1079Smrg
79205cf1079Smrg    _G_infix=$1; shift
79305cf1079Smrg    _G_indent=$_G_infix
79405cf1079Smrg    _G_prefix="$progname: $_G_infix: "
79505cf1079Smrg    _G_message=$*
79605cf1079Smrg
79705cf1079Smrg    # Strip color escape sequences before counting printable length
79805cf1079Smrg    for _G_tc in "$tc_reset" "$tc_bold" "$tc_standout" "$tc_red" "$tc_green" "$tc_blue" "$tc_cyan"
79905cf1079Smrg    do
80005cf1079Smrg      test -n "$_G_tc" && {
80105cf1079Smrg        _G_esc_tc=`$ECHO "$_G_tc" | $SED "$sed_make_literal_regex"`
80205cf1079Smrg        _G_indent=`$ECHO "$_G_indent" | $SED "s|$_G_esc_tc||g"`
80305cf1079Smrg      }
80405cf1079Smrg    done
80505cf1079Smrg    _G_indent="$progname: "`echo "$_G_indent" | $SED 's|.| |g'`"  " ## exclude from sc_prohibit_nested_quotes
80605cf1079Smrg
80705cf1079Smrg    func_echo_infix_1_IFS=$IFS
80805cf1079Smrg    IFS=$nl
80905cf1079Smrg    for _G_line in $_G_message; do
81005cf1079Smrg      IFS=$func_echo_infix_1_IFS
81105cf1079Smrg      $ECHO "$_G_prefix$tc_bold$_G_line$tc_reset" >&2
81205cf1079Smrg      _G_prefix=$_G_indent
81305cf1079Smrg    done
81405cf1079Smrg    IFS=$func_echo_infix_1_IFS
81505cf1079Smrg}
81605cf1079Smrg
81705cf1079Smrg
81805cf1079Smrg# func_error ARG...
81905cf1079Smrg# -----------------
82005cf1079Smrg# Echo program name prefixed message to standard error.
82105cf1079Smrgfunc_error ()
82205cf1079Smrg{
82305cf1079Smrg    $debug_cmd
82405cf1079Smrg
82505cf1079Smrg    $require_term_colors
82605cf1079Smrg
82705cf1079Smrg    func_echo_infix_1 "  $tc_standout${tc_red}error$tc_reset" "$*" >&2
82805cf1079Smrg}
82905cf1079Smrg
83005cf1079Smrg
83105cf1079Smrg# func_fatal_error ARG...
83205cf1079Smrg# -----------------------
83305cf1079Smrg# Echo program name prefixed message to standard error, and exit.
83405cf1079Smrgfunc_fatal_error ()
83505cf1079Smrg{
83605cf1079Smrg    $debug_cmd
83705cf1079Smrg
83805cf1079Smrg    func_error "$*"
83905cf1079Smrg    exit $EXIT_FAILURE
84005cf1079Smrg}
84105cf1079Smrg
84205cf1079Smrg
84305cf1079Smrg# func_grep EXPRESSION FILENAME
84405cf1079Smrg# -----------------------------
84504007ebaSmrg# Check whether EXPRESSION matches any line of FILENAME, without output.
84604007ebaSmrgfunc_grep ()
84704007ebaSmrg{
84805cf1079Smrg    $debug_cmd
84905cf1079Smrg
85004007ebaSmrg    $GREP "$1" "$2" >/dev/null 2>&1
85104007ebaSmrg}
85204007ebaSmrg
85304007ebaSmrg
85405cf1079Smrg# func_len STRING
85505cf1079Smrg# ---------------
85605cf1079Smrg# Set func_len_result to the length of STRING. STRING may not
85705cf1079Smrg# start with a hyphen.
85805cf1079Smrg  test -z "$_G_HAVE_XSI_OPS" \
85905cf1079Smrg    && (eval 'x=a/b/c;
86005cf1079Smrg      test 5aa/bb/cc = "${#x}${x%%/*}${x%/*}${x#*/}${x##*/}"') 2>/dev/null \
86105cf1079Smrg    && _G_HAVE_XSI_OPS=yes
86205cf1079Smrg
86305cf1079Smrgif test yes = "$_G_HAVE_XSI_OPS"; then
86405cf1079Smrg  eval 'func_len ()
86505cf1079Smrg  {
86605cf1079Smrg    $debug_cmd
86705cf1079Smrg
86805cf1079Smrg    func_len_result=${#1}
86905cf1079Smrg  }'
87005cf1079Smrgelse
87105cf1079Smrg  func_len ()
87205cf1079Smrg  {
87305cf1079Smrg    $debug_cmd
87405cf1079Smrg
87505cf1079Smrg    func_len_result=`expr "$1" : ".*" 2>/dev/null || echo $max_cmd_len`
87605cf1079Smrg  }
87705cf1079Smrgfi
87805cf1079Smrg
87905cf1079Smrg
88005cf1079Smrg# func_mkdir_p DIRECTORY-PATH
88105cf1079Smrg# ---------------------------
88204007ebaSmrg# Make sure the entire path to DIRECTORY-PATH is available.
88304007ebaSmrgfunc_mkdir_p ()
88404007ebaSmrg{
88505cf1079Smrg    $debug_cmd
88605cf1079Smrg
88705cf1079Smrg    _G_directory_path=$1
88805cf1079Smrg    _G_dir_list=
88904007ebaSmrg
89005cf1079Smrg    if test -n "$_G_directory_path" && test : != "$opt_dry_run"; then
89104007ebaSmrg
89205cf1079Smrg      # Protect directory names starting with '-'
89305cf1079Smrg      case $_G_directory_path in
89405cf1079Smrg        -*) _G_directory_path=./$_G_directory_path ;;
89504007ebaSmrg      esac
89604007ebaSmrg
89704007ebaSmrg      # While some portion of DIR does not yet exist...
89805cf1079Smrg      while test ! -d "$_G_directory_path"; do
89904007ebaSmrg        # ...make a list in topmost first order.  Use a colon delimited
90004007ebaSmrg	# list incase some portion of path contains whitespace.
90105cf1079Smrg        _G_dir_list=$_G_directory_path:$_G_dir_list
90204007ebaSmrg
90304007ebaSmrg        # If the last portion added has no slash in it, the list is done
90405cf1079Smrg        case $_G_directory_path in */*) ;; *) break ;; esac
90504007ebaSmrg
90604007ebaSmrg        # ...otherwise throw away the child directory and loop
90705cf1079Smrg        _G_directory_path=`$ECHO "$_G_directory_path" | $SED -e "$sed_dirname"`
90804007ebaSmrg      done
90905cf1079Smrg      _G_dir_list=`$ECHO "$_G_dir_list" | $SED 's|:*$||'`
91004007ebaSmrg
91105cf1079Smrg      func_mkdir_p_IFS=$IFS; IFS=:
91205cf1079Smrg      for _G_dir in $_G_dir_list; do
91305cf1079Smrg	IFS=$func_mkdir_p_IFS
91405cf1079Smrg        # mkdir can fail with a 'File exist' error if two processes
91504007ebaSmrg        # try to create one of the directories concurrently.  Don't
91604007ebaSmrg        # stop in that case!
91705cf1079Smrg        $MKDIR "$_G_dir" 2>/dev/null || :
91804007ebaSmrg      done
91905cf1079Smrg      IFS=$func_mkdir_p_IFS
92004007ebaSmrg
92104007ebaSmrg      # Bail out if we (or some other process) failed to create a directory.
92205cf1079Smrg      test -d "$_G_directory_path" || \
92305cf1079Smrg        func_fatal_error "Failed to create '$1'"
92404007ebaSmrg    fi
92504007ebaSmrg}
92604007ebaSmrg
92704007ebaSmrg
92805cf1079Smrg# func_mktempdir [BASENAME]
92905cf1079Smrg# -------------------------
93004007ebaSmrg# Make a temporary directory that won't clash with other running
93104007ebaSmrg# libtool processes, and avoids race conditions if possible.  If
93205cf1079Smrg# given, BASENAME is the basename for that directory.
93304007ebaSmrgfunc_mktempdir ()
93404007ebaSmrg{
93505cf1079Smrg    $debug_cmd
93604007ebaSmrg
93705cf1079Smrg    _G_template=${TMPDIR-/tmp}/${1-$progname}
93805cf1079Smrg
93905cf1079Smrg    if test : = "$opt_dry_run"; then
94004007ebaSmrg      # Return a directory name, but don't create it in dry-run mode
94105cf1079Smrg      _G_tmpdir=$_G_template-$$
94204007ebaSmrg    else
94304007ebaSmrg
94404007ebaSmrg      # If mktemp works, use that first and foremost
94505cf1079Smrg      _G_tmpdir=`mktemp -d "$_G_template-XXXXXXXX" 2>/dev/null`
94604007ebaSmrg
94705cf1079Smrg      if test ! -d "$_G_tmpdir"; then
94804007ebaSmrg        # Failing that, at least try and use $RANDOM to avoid a race
94905cf1079Smrg        _G_tmpdir=$_G_template-${RANDOM-0}$$
95004007ebaSmrg
95105cf1079Smrg        func_mktempdir_umask=`umask`
95204007ebaSmrg        umask 0077
95305cf1079Smrg        $MKDIR "$_G_tmpdir"
95405cf1079Smrg        umask $func_mktempdir_umask
95504007ebaSmrg      fi
95604007ebaSmrg
95704007ebaSmrg      # If we're not in dry-run mode, bomb out on failure
95805cf1079Smrg      test -d "$_G_tmpdir" || \
95905cf1079Smrg        func_fatal_error "cannot create temporary directory '$_G_tmpdir'"
96004007ebaSmrg    fi
96104007ebaSmrg
96205cf1079Smrg    $ECHO "$_G_tmpdir"
96304007ebaSmrg}
96404007ebaSmrg
96504007ebaSmrg
96605cf1079Smrg# func_normal_abspath PATH
96705cf1079Smrg# ------------------------
96805cf1079Smrg# Remove doubled-up and trailing slashes, "." path components,
96905cf1079Smrg# and cancel out any ".." path components in PATH after making
97005cf1079Smrg# it an absolute path.
97105cf1079Smrgfunc_normal_abspath ()
97204007ebaSmrg{
97305cf1079Smrg    $debug_cmd
97404007ebaSmrg
97505cf1079Smrg    # These SED scripts presuppose an absolute path with a trailing slash.
97605cf1079Smrg    _G_pathcar='s|^/\([^/]*\).*$|\1|'
97705cf1079Smrg    _G_pathcdr='s|^/[^/]*||'
97805cf1079Smrg    _G_removedotparts=':dotsl
97905cf1079Smrg		s|/\./|/|g
98005cf1079Smrg		t dotsl
98105cf1079Smrg		s|/\.$|/|'
98205cf1079Smrg    _G_collapseslashes='s|/\{1,\}|/|g'
98305cf1079Smrg    _G_finalslash='s|/*$|/|'
98405cf1079Smrg
98505cf1079Smrg    # Start from root dir and reassemble the path.
98605cf1079Smrg    func_normal_abspath_result=
98705cf1079Smrg    func_normal_abspath_tpath=$1
98805cf1079Smrg    func_normal_abspath_altnamespace=
98905cf1079Smrg    case $func_normal_abspath_tpath in
99005cf1079Smrg      "")
99105cf1079Smrg        # Empty path, that just means $cwd.
99205cf1079Smrg        func_stripname '' '/' "`pwd`"
99305cf1079Smrg        func_normal_abspath_result=$func_stripname_result
99405cf1079Smrg        return
99505cf1079Smrg        ;;
99605cf1079Smrg      # The next three entries are used to spot a run of precisely
99705cf1079Smrg      # two leading slashes without using negated character classes;
99805cf1079Smrg      # we take advantage of case's first-match behaviour.
99905cf1079Smrg      ///*)
100005cf1079Smrg        # Unusual form of absolute path, do nothing.
100105cf1079Smrg        ;;
100205cf1079Smrg      //*)
100305cf1079Smrg        # Not necessarily an ordinary path; POSIX reserves leading '//'
100405cf1079Smrg        # and for example Cygwin uses it to access remote file shares
100505cf1079Smrg        # over CIFS/SMB, so we conserve a leading double slash if found.
100605cf1079Smrg        func_normal_abspath_altnamespace=/
100705cf1079Smrg        ;;
100805cf1079Smrg      /*)
100905cf1079Smrg        # Absolute path, do nothing.
101004007ebaSmrg        ;;
101104007ebaSmrg      *)
101205cf1079Smrg        # Relative path, prepend $cwd.
101305cf1079Smrg        func_normal_abspath_tpath=`pwd`/$func_normal_abspath_tpath
101405cf1079Smrg        ;;
101504007ebaSmrg    esac
101605cf1079Smrg
101705cf1079Smrg    # Cancel out all the simple stuff to save iterations.  We also want
101805cf1079Smrg    # the path to end with a slash for ease of parsing, so make sure
101905cf1079Smrg    # there is one (and only one) here.
102005cf1079Smrg    func_normal_abspath_tpath=`$ECHO "$func_normal_abspath_tpath" | $SED \
102105cf1079Smrg          -e "$_G_removedotparts" -e "$_G_collapseslashes" -e "$_G_finalslash"`
102205cf1079Smrg    while :; do
102305cf1079Smrg      # Processed it all yet?
102405cf1079Smrg      if test / = "$func_normal_abspath_tpath"; then
102505cf1079Smrg        # If we ascended to the root using ".." the result may be empty now.
102605cf1079Smrg        if test -z "$func_normal_abspath_result"; then
102705cf1079Smrg          func_normal_abspath_result=/
102805cf1079Smrg        fi
102905cf1079Smrg        break
103005cf1079Smrg      fi
103105cf1079Smrg      func_normal_abspath_tcomponent=`$ECHO "$func_normal_abspath_tpath" | $SED \
103205cf1079Smrg          -e "$_G_pathcar"`
103305cf1079Smrg      func_normal_abspath_tpath=`$ECHO "$func_normal_abspath_tpath" | $SED \
103405cf1079Smrg          -e "$_G_pathcdr"`
103505cf1079Smrg      # Figure out what to do with it
103605cf1079Smrg      case $func_normal_abspath_tcomponent in
103705cf1079Smrg        "")
103805cf1079Smrg          # Trailing empty path component, ignore it.
103905cf1079Smrg          ;;
104005cf1079Smrg        ..)
104105cf1079Smrg          # Parent dir; strip last assembled component from result.
104205cf1079Smrg          func_dirname "$func_normal_abspath_result"
104305cf1079Smrg          func_normal_abspath_result=$func_dirname_result
104405cf1079Smrg          ;;
104505cf1079Smrg        *)
104605cf1079Smrg          # Actual path component, append it.
104705cf1079Smrg          func_append func_normal_abspath_result "/$func_normal_abspath_tcomponent"
104805cf1079Smrg          ;;
104905cf1079Smrg      esac
105005cf1079Smrg    done
105105cf1079Smrg    # Restore leading double-slash if one was found on entry.
105205cf1079Smrg    func_normal_abspath_result=$func_normal_abspath_altnamespace$func_normal_abspath_result
105305cf1079Smrg}
105405cf1079Smrg
105505cf1079Smrg
105605cf1079Smrg# func_notquiet ARG...
105705cf1079Smrg# --------------------
105805cf1079Smrg# Echo program name prefixed message only when not in quiet mode.
105905cf1079Smrgfunc_notquiet ()
106005cf1079Smrg{
106105cf1079Smrg    $debug_cmd
106205cf1079Smrg
106305cf1079Smrg    $opt_quiet || func_echo ${1+"$@"}
106405cf1079Smrg
106505cf1079Smrg    # A bug in bash halts the script if the last line of a function
106605cf1079Smrg    # fails when set -e is in force, so we need another command to
106705cf1079Smrg    # work around that:
106805cf1079Smrg    :
106905cf1079Smrg}
107005cf1079Smrg
107105cf1079Smrg
107205cf1079Smrg# func_relative_path SRCDIR DSTDIR
107305cf1079Smrg# --------------------------------
107405cf1079Smrg# Set func_relative_path_result to the relative path from SRCDIR to DSTDIR.
107505cf1079Smrgfunc_relative_path ()
107605cf1079Smrg{
107705cf1079Smrg    $debug_cmd
107805cf1079Smrg
107905cf1079Smrg    func_relative_path_result=
108005cf1079Smrg    func_normal_abspath "$1"
108105cf1079Smrg    func_relative_path_tlibdir=$func_normal_abspath_result
108205cf1079Smrg    func_normal_abspath "$2"
108305cf1079Smrg    func_relative_path_tbindir=$func_normal_abspath_result
108405cf1079Smrg
108505cf1079Smrg    # Ascend the tree starting from libdir
108605cf1079Smrg    while :; do
108705cf1079Smrg      # check if we have found a prefix of bindir
108805cf1079Smrg      case $func_relative_path_tbindir in
108905cf1079Smrg        $func_relative_path_tlibdir)
109005cf1079Smrg          # found an exact match
109105cf1079Smrg          func_relative_path_tcancelled=
109205cf1079Smrg          break
109305cf1079Smrg          ;;
109405cf1079Smrg        $func_relative_path_tlibdir*)
109505cf1079Smrg          # found a matching prefix
109605cf1079Smrg          func_stripname "$func_relative_path_tlibdir" '' "$func_relative_path_tbindir"
109705cf1079Smrg          func_relative_path_tcancelled=$func_stripname_result
109805cf1079Smrg          if test -z "$func_relative_path_result"; then
109905cf1079Smrg            func_relative_path_result=.
110005cf1079Smrg          fi
110105cf1079Smrg          break
110205cf1079Smrg          ;;
110305cf1079Smrg        *)
110405cf1079Smrg          func_dirname $func_relative_path_tlibdir
110505cf1079Smrg          func_relative_path_tlibdir=$func_dirname_result
110605cf1079Smrg          if test -z "$func_relative_path_tlibdir"; then
110705cf1079Smrg            # Have to descend all the way to the root!
110805cf1079Smrg            func_relative_path_result=../$func_relative_path_result
110905cf1079Smrg            func_relative_path_tcancelled=$func_relative_path_tbindir
111005cf1079Smrg            break
111105cf1079Smrg          fi
111205cf1079Smrg          func_relative_path_result=../$func_relative_path_result
111305cf1079Smrg          ;;
111405cf1079Smrg      esac
111505cf1079Smrg    done
111605cf1079Smrg
111705cf1079Smrg    # Now calculate path; take care to avoid doubling-up slashes.
111805cf1079Smrg    func_stripname '' '/' "$func_relative_path_result"
111905cf1079Smrg    func_relative_path_result=$func_stripname_result
112005cf1079Smrg    func_stripname '/' '/' "$func_relative_path_tcancelled"
112105cf1079Smrg    if test -n "$func_stripname_result"; then
112205cf1079Smrg      func_append func_relative_path_result "/$func_stripname_result"
112305cf1079Smrg    fi
112405cf1079Smrg
112505cf1079Smrg    # Normalisation. If bindir is libdir, return '.' else relative path.
112605cf1079Smrg    if test -n "$func_relative_path_result"; then
112705cf1079Smrg      func_stripname './' '' "$func_relative_path_result"
112805cf1079Smrg      func_relative_path_result=$func_stripname_result
112905cf1079Smrg    fi
113005cf1079Smrg
113105cf1079Smrg    test -n "$func_relative_path_result" || func_relative_path_result=.
113205cf1079Smrg
113305cf1079Smrg    :
113405cf1079Smrg}
113505cf1079Smrg
113605cf1079Smrg
113779d5fcd7Smrg# func_quote_portable EVAL ARG
113879d5fcd7Smrg# ----------------------------
113979d5fcd7Smrg# Internal function to portably implement func_quote_arg.  Note that we still
114079d5fcd7Smrg# keep attention to performance here so we as much as possible try to avoid
114179d5fcd7Smrg# calling sed binary (so far O(N) complexity as long as func_append is O(1)).
114279d5fcd7Smrgfunc_quote_portable ()
114305cf1079Smrg{
114405cf1079Smrg    $debug_cmd
114505cf1079Smrg
114679d5fcd7Smrg    $require_check_ifs_backslash
114779d5fcd7Smrg
114879d5fcd7Smrg    func_quote_portable_result=$2
114979d5fcd7Smrg
115079d5fcd7Smrg    # one-time-loop (easy break)
115179d5fcd7Smrg    while true
115279d5fcd7Smrg    do
115379d5fcd7Smrg      if $1; then
115479d5fcd7Smrg        func_quote_portable_result=`$ECHO "$2" | $SED \
115579d5fcd7Smrg          -e "$sed_double_quote_subst" -e "$sed_double_backslash"`
115679d5fcd7Smrg        break
115705cf1079Smrg      fi
115805cf1079Smrg
115979d5fcd7Smrg      # Quote for eval.
116079d5fcd7Smrg      case $func_quote_portable_result in
116179d5fcd7Smrg        *[\\\`\"\$]*)
116279d5fcd7Smrg          # Fallback to sed for $func_check_bs_ifs_broken=:, or when the string
116379d5fcd7Smrg          # contains the shell wildcard characters.
116479d5fcd7Smrg          case $check_ifs_backshlash_broken$func_quote_portable_result in
116579d5fcd7Smrg            :*|*[\[\*\?]*)
116679d5fcd7Smrg              func_quote_portable_result=`$ECHO "$func_quote_portable_result" \
116779d5fcd7Smrg                  | $SED "$sed_quote_subst"`
116879d5fcd7Smrg              break
116979d5fcd7Smrg              ;;
117079d5fcd7Smrg          esac
117179d5fcd7Smrg
117279d5fcd7Smrg          func_quote_portable_old_IFS=$IFS
117379d5fcd7Smrg          for _G_char in '\' '`' '"' '$'
117479d5fcd7Smrg          do
117579d5fcd7Smrg            # STATE($1) PREV($2) SEPARATOR($3)
117679d5fcd7Smrg            set start "" ""
117779d5fcd7Smrg            func_quote_portable_result=dummy"$_G_char$func_quote_portable_result$_G_char"dummy
117879d5fcd7Smrg            IFS=$_G_char
117979d5fcd7Smrg            for _G_part in $func_quote_portable_result
118079d5fcd7Smrg            do
118179d5fcd7Smrg              case $1 in
118279d5fcd7Smrg              quote)
118379d5fcd7Smrg                func_append func_quote_portable_result "$3$2"
118479d5fcd7Smrg                set quote "$_G_part" "\\$_G_char"
118579d5fcd7Smrg                ;;
118679d5fcd7Smrg              start)
118779d5fcd7Smrg                set first "" ""
118879d5fcd7Smrg                func_quote_portable_result=
118979d5fcd7Smrg                ;;
119079d5fcd7Smrg              first)
119179d5fcd7Smrg                set quote "$_G_part" ""
119279d5fcd7Smrg                ;;
119379d5fcd7Smrg              esac
119479d5fcd7Smrg            done
119579d5fcd7Smrg          done
119679d5fcd7Smrg          IFS=$func_quote_portable_old_IFS
119705cf1079Smrg          ;;
119879d5fcd7Smrg        *) ;;
119905cf1079Smrg      esac
120079d5fcd7Smrg      break
120105cf1079Smrg    done
120279d5fcd7Smrg
120379d5fcd7Smrg    func_quote_portable_unquoted_result=$func_quote_portable_result
120479d5fcd7Smrg    case $func_quote_portable_result in
120579d5fcd7Smrg      # double-quote args containing shell metacharacters to delay
120679d5fcd7Smrg      # word splitting, command substitution and variable expansion
120779d5fcd7Smrg      # for a subsequent eval.
120879d5fcd7Smrg      # many bourne shells cannot handle close brackets correctly
120979d5fcd7Smrg      # in scan sets, so we specify it separately.
121079d5fcd7Smrg      *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \	]*|*]*|"")
121179d5fcd7Smrg        func_quote_portable_result=\"$func_quote_portable_result\"
121279d5fcd7Smrg        ;;
121379d5fcd7Smrg    esac
121404007ebaSmrg}
121504007ebaSmrg
121604007ebaSmrg
121779d5fcd7Smrg# func_quotefast_eval ARG
121879d5fcd7Smrg# -----------------------
121979d5fcd7Smrg# Quote one ARG (internal).  This is equivalent to 'func_quote_arg eval ARG',
122079d5fcd7Smrg# but optimized for speed.  Result is stored in $func_quotefast_eval.
122179d5fcd7Smrgif test xyes = `(x=; printf -v x %q yes; echo x"$x") 2>/dev/null`; then
122279d5fcd7Smrg  printf -v _GL_test_printf_tilde %q '~'
122379d5fcd7Smrg  if test '\~' = "$_GL_test_printf_tilde"; then
122479d5fcd7Smrg    func_quotefast_eval ()
122579d5fcd7Smrg    {
122679d5fcd7Smrg      printf -v func_quotefast_eval_result %q "$1"
122779d5fcd7Smrg    }
122879d5fcd7Smrg  else
122979d5fcd7Smrg    # Broken older Bash implementations.  Make those faster too if possible.
123079d5fcd7Smrg    func_quotefast_eval ()
123179d5fcd7Smrg    {
123279d5fcd7Smrg      case $1 in
123379d5fcd7Smrg        '~'*)
123479d5fcd7Smrg          func_quote_portable false "$1"
123579d5fcd7Smrg          func_quotefast_eval_result=$func_quote_portable_result
123679d5fcd7Smrg          ;;
123779d5fcd7Smrg        *)
123879d5fcd7Smrg          printf -v func_quotefast_eval_result %q "$1"
123979d5fcd7Smrg          ;;
124079d5fcd7Smrg      esac
124179d5fcd7Smrg    }
124279d5fcd7Smrg  fi
124379d5fcd7Smrgelse
124479d5fcd7Smrg  func_quotefast_eval ()
124579d5fcd7Smrg  {
124679d5fcd7Smrg    func_quote_portable false "$1"
124779d5fcd7Smrg    func_quotefast_eval_result=$func_quote_portable_result
124879d5fcd7Smrg  }
124979d5fcd7Smrgfi
125005cf1079Smrg
125179d5fcd7Smrg
125279d5fcd7Smrg# func_quote_arg MODEs ARG
125379d5fcd7Smrg# ------------------------
125479d5fcd7Smrg# Quote one ARG to be evaled later.  MODEs argument may contain zero or more
125579d5fcd7Smrg# specifiers listed below separated by ',' character.  This function returns two
125679d5fcd7Smrg# values:
125779d5fcd7Smrg#   i) func_quote_arg_result
125879d5fcd7Smrg#      double-quoted (when needed), suitable for a subsequent eval
125979d5fcd7Smrg#  ii) func_quote_arg_unquoted_result
126079d5fcd7Smrg#      has all characters that are still active within double
126179d5fcd7Smrg#      quotes backslashified.  Available only if 'unquoted' is specified.
126279d5fcd7Smrg#
126379d5fcd7Smrg# Available modes:
126479d5fcd7Smrg# ----------------
126579d5fcd7Smrg# 'eval' (default)
126679d5fcd7Smrg#       - escape shell special characters
126779d5fcd7Smrg# 'expand'
126879d5fcd7Smrg#       - the same as 'eval';  but do not quote variable references
126979d5fcd7Smrg# 'pretty'
127079d5fcd7Smrg#       - request aesthetic output, i.e. '"a b"' instead of 'a\ b'.  This might
127179d5fcd7Smrg#         be used later in func_quote to get output like: 'echo "a b"' instead
127279d5fcd7Smrg#         of 'echo a\ b'.  This is slower than default on some shells.
127379d5fcd7Smrg# 'unquoted'
127479d5fcd7Smrg#       - produce also $func_quote_arg_unquoted_result which does not contain
127579d5fcd7Smrg#         wrapping double-quotes.
127679d5fcd7Smrg#
127779d5fcd7Smrg# Examples for 'func_quote_arg pretty,unquoted string':
127879d5fcd7Smrg#
127979d5fcd7Smrg#   string      | *_result              | *_unquoted_result
128079d5fcd7Smrg#   ------------+-----------------------+-------------------
128179d5fcd7Smrg#   "           | \"                    | \"
128279d5fcd7Smrg#   a b         | "a b"                 | a b
128379d5fcd7Smrg#   "a b"       | "\"a b\""             | \"a b\"
128479d5fcd7Smrg#   *           | "*"                   | *
128579d5fcd7Smrg#   z="${x-$y}" | "z=\"\${x-\$y}\""     | z=\"\${x-\$y}\"
128679d5fcd7Smrg#
128779d5fcd7Smrg# Examples for 'func_quote_arg pretty,unquoted,expand string':
128879d5fcd7Smrg#
128979d5fcd7Smrg#   string        |   *_result          |  *_unquoted_result
129079d5fcd7Smrg#   --------------+---------------------+--------------------
129179d5fcd7Smrg#   z="${x-$y}"   | "z=\"${x-$y}\""     | z=\"${x-$y}\"
129279d5fcd7Smrgfunc_quote_arg ()
129379d5fcd7Smrg{
129479d5fcd7Smrg    _G_quote_expand=false
129579d5fcd7Smrg    case ,$1, in
129679d5fcd7Smrg      *,expand,*)
129779d5fcd7Smrg        _G_quote_expand=:
129879d5fcd7Smrg        ;;
129904007ebaSmrg    esac
130004007ebaSmrg
130179d5fcd7Smrg    case ,$1, in
130279d5fcd7Smrg      *,pretty,*|*,expand,*|*,unquoted,*)
130379d5fcd7Smrg        func_quote_portable $_G_quote_expand "$2"
130479d5fcd7Smrg        func_quote_arg_result=$func_quote_portable_result
130579d5fcd7Smrg        func_quote_arg_unquoted_result=$func_quote_portable_unquoted_result
130679d5fcd7Smrg        ;;
130779d5fcd7Smrg      *)
130879d5fcd7Smrg        # Faster quote-for-eval for some shells.
130979d5fcd7Smrg        func_quotefast_eval "$2"
131079d5fcd7Smrg        func_quote_arg_result=$func_quotefast_eval_result
131104007ebaSmrg        ;;
131204007ebaSmrg    esac
131379d5fcd7Smrg}
131479d5fcd7Smrg
131504007ebaSmrg
131679d5fcd7Smrg# func_quote MODEs ARGs...
131779d5fcd7Smrg# ------------------------
131879d5fcd7Smrg# Quote all ARGs to be evaled later and join them into single command.  See
131979d5fcd7Smrg# func_quote_arg's description for more info.
132079d5fcd7Smrgfunc_quote ()
132179d5fcd7Smrg{
132279d5fcd7Smrg    $debug_cmd
132379d5fcd7Smrg    _G_func_quote_mode=$1 ; shift
132479d5fcd7Smrg    func_quote_result=
132579d5fcd7Smrg    while test 0 -lt $#; do
132679d5fcd7Smrg      func_quote_arg "$_G_func_quote_mode" "$1"
132779d5fcd7Smrg      if test -n "$func_quote_result"; then
132879d5fcd7Smrg        func_append func_quote_result " $func_quote_arg_result"
132979d5fcd7Smrg      else
133079d5fcd7Smrg        func_append func_quote_result "$func_quote_arg_result"
133179d5fcd7Smrg      fi
133279d5fcd7Smrg      shift
133379d5fcd7Smrg    done
133405cf1079Smrg}
133505cf1079Smrg
133605cf1079Smrg
133705cf1079Smrg# func_stripname PREFIX SUFFIX NAME
133805cf1079Smrg# ---------------------------------
133905cf1079Smrg# strip PREFIX and SUFFIX from NAME, and store in func_stripname_result.
134005cf1079Smrg# PREFIX and SUFFIX must not contain globbing or regex special
134105cf1079Smrg# characters, hashes, percent signs, but SUFFIX may contain a leading
134205cf1079Smrg# dot (in which case that matches only a dot).
134305cf1079Smrgif test yes = "$_G_HAVE_XSI_OPS"; then
134405cf1079Smrg  eval 'func_stripname ()
134505cf1079Smrg  {
134605cf1079Smrg    $debug_cmd
134705cf1079Smrg
134805cf1079Smrg    # pdksh 5.2.14 does not do ${X%$Y} correctly if both X and Y are
134905cf1079Smrg    # positional parameters, so assign one to ordinary variable first.
135005cf1079Smrg    func_stripname_result=$3
135105cf1079Smrg    func_stripname_result=${func_stripname_result#"$1"}
135205cf1079Smrg    func_stripname_result=${func_stripname_result%"$2"}
135305cf1079Smrg  }'
135405cf1079Smrgelse
135505cf1079Smrg  func_stripname ()
135605cf1079Smrg  {
135705cf1079Smrg    $debug_cmd
135805cf1079Smrg
135905cf1079Smrg    case $2 in
136005cf1079Smrg      .*) func_stripname_result=`$ECHO "$3" | $SED -e "s%^$1%%" -e "s%\\\\$2\$%%"`;;
136105cf1079Smrg      *)  func_stripname_result=`$ECHO "$3" | $SED -e "s%^$1%%" -e "s%$2\$%%"`;;
136205cf1079Smrg    esac
136305cf1079Smrg  }
136405cf1079Smrgfi
136505cf1079Smrg
136605cf1079Smrg
136705cf1079Smrg# func_show_eval CMD [FAIL_EXP]
136805cf1079Smrg# -----------------------------
136905cf1079Smrg# Unless opt_quiet is true, then output CMD.  Then, if opt_dryrun is
137005cf1079Smrg# not true, evaluate CMD.  If the evaluation of CMD fails, and FAIL_EXP
137105cf1079Smrg# is given, then evaluate it.
137205cf1079Smrgfunc_show_eval ()
137305cf1079Smrg{
137405cf1079Smrg    $debug_cmd
137505cf1079Smrg
137605cf1079Smrg    _G_cmd=$1
137705cf1079Smrg    _G_fail_exp=${2-':'}
137805cf1079Smrg
137979d5fcd7Smrg    func_quote_arg pretty,expand "$_G_cmd"
138079d5fcd7Smrg    eval "func_notquiet $func_quote_arg_result"
138105cf1079Smrg
138205cf1079Smrg    $opt_dry_run || {
138305cf1079Smrg      eval "$_G_cmd"
138405cf1079Smrg      _G_status=$?
138505cf1079Smrg      if test 0 -ne "$_G_status"; then
138605cf1079Smrg	eval "(exit $_G_status); $_G_fail_exp"
138705cf1079Smrg      fi
138805cf1079Smrg    }
138905cf1079Smrg}
139005cf1079Smrg
139105cf1079Smrg
139205cf1079Smrg# func_show_eval_locale CMD [FAIL_EXP]
139305cf1079Smrg# ------------------------------------
139405cf1079Smrg# Unless opt_quiet is true, then output CMD.  Then, if opt_dryrun is
139505cf1079Smrg# not true, evaluate CMD.  If the evaluation of CMD fails, and FAIL_EXP
139605cf1079Smrg# is given, then evaluate it.  Use the saved locale for evaluation.
139705cf1079Smrgfunc_show_eval_locale ()
139805cf1079Smrg{
139905cf1079Smrg    $debug_cmd
140005cf1079Smrg
140105cf1079Smrg    _G_cmd=$1
140205cf1079Smrg    _G_fail_exp=${2-':'}
140305cf1079Smrg
140405cf1079Smrg    $opt_quiet || {
140579d5fcd7Smrg      func_quote_arg expand,pretty "$_G_cmd"
140679d5fcd7Smrg      eval "func_echo $func_quote_arg_result"
140705cf1079Smrg    }
140805cf1079Smrg
140905cf1079Smrg    $opt_dry_run || {
141005cf1079Smrg      eval "$_G_user_locale
141105cf1079Smrg	    $_G_cmd"
141205cf1079Smrg      _G_status=$?
141305cf1079Smrg      eval "$_G_safe_locale"
141405cf1079Smrg      if test 0 -ne "$_G_status"; then
141505cf1079Smrg	eval "(exit $_G_status); $_G_fail_exp"
141605cf1079Smrg      fi
141705cf1079Smrg    }
141805cf1079Smrg}
141905cf1079Smrg
142005cf1079Smrg
142105cf1079Smrg# func_tr_sh
142205cf1079Smrg# ----------
142305cf1079Smrg# Turn $1 into a string suitable for a shell variable name.
142405cf1079Smrg# Result is stored in $func_tr_sh_result.  All characters
142505cf1079Smrg# not in the set a-zA-Z0-9_ are replaced with '_'. Further,
142605cf1079Smrg# if $1 begins with a digit, a '_' is prepended as well.
142705cf1079Smrgfunc_tr_sh ()
142805cf1079Smrg{
142905cf1079Smrg    $debug_cmd
143005cf1079Smrg
143105cf1079Smrg    case $1 in
143205cf1079Smrg    [0-9]* | *[!a-zA-Z0-9_]*)
143305cf1079Smrg      func_tr_sh_result=`$ECHO "$1" | $SED -e 's/^\([0-9]\)/_\1/' -e 's/[^a-zA-Z0-9_]/_/g'`
143405cf1079Smrg      ;;
143505cf1079Smrg    * )
143605cf1079Smrg      func_tr_sh_result=$1
143705cf1079Smrg      ;;
143805cf1079Smrg    esac
143905cf1079Smrg}
144005cf1079Smrg
144105cf1079Smrg
144205cf1079Smrg# func_verbose ARG...
144305cf1079Smrg# -------------------
144405cf1079Smrg# Echo program name prefixed message in verbose mode only.
144505cf1079Smrgfunc_verbose ()
144605cf1079Smrg{
144705cf1079Smrg    $debug_cmd
144805cf1079Smrg
144905cf1079Smrg    $opt_verbose && func_echo "$*"
145005cf1079Smrg
145105cf1079Smrg    :
145205cf1079Smrg}
145305cf1079Smrg
145405cf1079Smrg
145505cf1079Smrg# func_warn_and_continue ARG...
145605cf1079Smrg# -----------------------------
145705cf1079Smrg# Echo program name prefixed warning message to standard error.
145805cf1079Smrgfunc_warn_and_continue ()
145905cf1079Smrg{
146005cf1079Smrg    $debug_cmd
146105cf1079Smrg
146205cf1079Smrg    $require_term_colors
146305cf1079Smrg
146405cf1079Smrg    func_echo_infix_1 "${tc_red}warning$tc_reset" "$*" >&2
146505cf1079Smrg}
146605cf1079Smrg
146705cf1079Smrg
146805cf1079Smrg# func_warning CATEGORY ARG...
146905cf1079Smrg# ----------------------------
147005cf1079Smrg# Echo program name prefixed warning message to standard error. Warning
147105cf1079Smrg# messages can be filtered according to CATEGORY, where this function
147205cf1079Smrg# elides messages where CATEGORY is not listed in the global variable
147305cf1079Smrg# 'opt_warning_types'.
147405cf1079Smrgfunc_warning ()
147505cf1079Smrg{
147605cf1079Smrg    $debug_cmd
147705cf1079Smrg
147805cf1079Smrg    # CATEGORY must be in the warning_categories list!
147905cf1079Smrg    case " $warning_categories " in
148005cf1079Smrg      *" $1 "*) ;;
148105cf1079Smrg      *) func_internal_error "invalid warning category '$1'" ;;
148205cf1079Smrg    esac
148305cf1079Smrg
148405cf1079Smrg    _G_category=$1
148505cf1079Smrg    shift
148605cf1079Smrg
148705cf1079Smrg    case " $opt_warning_types " in
148805cf1079Smrg      *" $_G_category "*) $warning_func ${1+"$@"} ;;
148905cf1079Smrg    esac
149005cf1079Smrg}
149105cf1079Smrg
149205cf1079Smrg
149305cf1079Smrg# func_sort_ver VER1 VER2
149405cf1079Smrg# -----------------------
149505cf1079Smrg# 'sort -V' is not generally available.
149605cf1079Smrg# Note this deviates from the version comparison in automake
149705cf1079Smrg# in that it treats 1.5 < 1.5.0, and treats 1.4.4a < 1.4-p3a
149805cf1079Smrg# but this should suffice as we won't be specifying old
149905cf1079Smrg# version formats or redundant trailing .0 in bootstrap.conf.
150005cf1079Smrg# If we did want full compatibility then we should probably
150105cf1079Smrg# use m4_version_compare from autoconf.
150205cf1079Smrgfunc_sort_ver ()
150305cf1079Smrg{
150405cf1079Smrg    $debug_cmd
150505cf1079Smrg
150605cf1079Smrg    printf '%s\n%s\n' "$1" "$2" \
150705cf1079Smrg      | 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
150805cf1079Smrg}
150905cf1079Smrg
151005cf1079Smrg# func_lt_ver PREV CURR
151105cf1079Smrg# ---------------------
151205cf1079Smrg# Return true if PREV and CURR are in the correct order according to
151305cf1079Smrg# func_sort_ver, otherwise false.  Use it like this:
151405cf1079Smrg#
151505cf1079Smrg#  func_lt_ver "$prev_ver" "$proposed_ver" || func_fatal_error "..."
151605cf1079Smrgfunc_lt_ver ()
151705cf1079Smrg{
151805cf1079Smrg    $debug_cmd
151905cf1079Smrg
152005cf1079Smrg    test "x$1" = x`func_sort_ver "$1" "$2" | $SED 1q`
152105cf1079Smrg}
152205cf1079Smrg
152305cf1079Smrg
152405cf1079Smrg# Local variables:
152505cf1079Smrg# mode: shell-script
152605cf1079Smrg# sh-indentation: 2
152705cf1079Smrg# eval: (add-hook 'before-save-hook 'time-stamp)
152805cf1079Smrg# time-stamp-pattern: "10/scriptversion=%:y-%02m-%02d.%02H; # UTC"
152905cf1079Smrg# time-stamp-time-zone: "UTC"
153005cf1079Smrg# End:
153105cf1079Smrg#! /bin/sh
153205cf1079Smrg
153305cf1079Smrg# A portable, pluggable option parser for Bourne shell.
153405cf1079Smrg# Written by Gary V. Vaughan, 2010
153505cf1079Smrg
153679d5fcd7Smrg# This is free software.  There is NO warranty; not even for
153779d5fcd7Smrg# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
153879d5fcd7Smrg#
153979d5fcd7Smrg# Copyright (C) 2010-2019, 2021 Bootstrap Authors
154079d5fcd7Smrg#
154179d5fcd7Smrg# This file is dual licensed under the terms of the MIT license
154279d5fcd7Smrg# <https://opensource.org/license/MIT>, and GPL version 2 or later
154379d5fcd7Smrg# <http://www.gnu.org/licenses/gpl-2.0.html>.  You must apply one of
154479d5fcd7Smrg# these licenses when using or redistributing this software or any of
154579d5fcd7Smrg# the files within it.  See the URLs above, or the file `LICENSE`
154679d5fcd7Smrg# included in the Bootstrap distribution for the full license texts.
154705cf1079Smrg
154879d5fcd7Smrg# Please report bugs or propose patches to:
154979d5fcd7Smrg# <https://github.com/gnulib-modules/bootstrap/issues>
155005cf1079Smrg
155179d5fcd7Smrg# Set a version string for this script.
155279d5fcd7Smrgscriptversion=2019-02-19.15; # UTC
155305cf1079Smrg
155405cf1079Smrg
155505cf1079Smrg## ------ ##
155605cf1079Smrg## Usage. ##
155705cf1079Smrg## ------ ##
155805cf1079Smrg
155905cf1079Smrg# This file is a library for parsing options in your shell scripts along
156005cf1079Smrg# with assorted other useful supporting features that you can make use
156105cf1079Smrg# of too.
156205cf1079Smrg#
156305cf1079Smrg# For the simplest scripts you might need only:
156405cf1079Smrg#
156505cf1079Smrg#   #!/bin/sh
156605cf1079Smrg#   . relative/path/to/funclib.sh
156705cf1079Smrg#   . relative/path/to/options-parser
156805cf1079Smrg#   scriptversion=1.0
156905cf1079Smrg#   func_options ${1+"$@"}
157005cf1079Smrg#   eval set dummy "$func_options_result"; shift
157105cf1079Smrg#   ...rest of your script...
157205cf1079Smrg#
157305cf1079Smrg# In order for the '--version' option to work, you will need to have a
157405cf1079Smrg# suitably formatted comment like the one at the top of this file
157579d5fcd7Smrg# starting with '# Written by ' and ending with '# Copyright'.
157605cf1079Smrg#
157705cf1079Smrg# For '-h' and '--help' to work, you will also need a one line
157805cf1079Smrg# description of your script's purpose in a comment directly above the
157905cf1079Smrg# '# Written by ' line, like the one at the top of this file.
158005cf1079Smrg#
158105cf1079Smrg# The default options also support '--debug', which will turn on shell
158205cf1079Smrg# execution tracing (see the comment above debug_cmd below for another
158305cf1079Smrg# use), and '--verbose' and the func_verbose function to allow your script
158405cf1079Smrg# to display verbose messages only when your user has specified
158505cf1079Smrg# '--verbose'.
158605cf1079Smrg#
158779d5fcd7Smrg# After sourcing this file, you can plug in processing for additional
158805cf1079Smrg# options by amending the variables from the 'Configuration' section
158905cf1079Smrg# below, and following the instructions in the 'Option parsing'
159005cf1079Smrg# section further down.
159105cf1079Smrg
159205cf1079Smrg## -------------- ##
159305cf1079Smrg## Configuration. ##
159405cf1079Smrg## -------------- ##
159505cf1079Smrg
159605cf1079Smrg# You should override these variables in your script after sourcing this
159705cf1079Smrg# file so that they reflect the customisations you have added to the
159805cf1079Smrg# option parser.
159905cf1079Smrg
160005cf1079Smrg# The usage line for option parsing errors and the start of '-h' and
160105cf1079Smrg# '--help' output messages. You can embed shell variables for delayed
160205cf1079Smrg# expansion at the time the message is displayed, but you will need to
160305cf1079Smrg# quote other shell meta-characters carefully to prevent them being
160405cf1079Smrg# expanded when the contents are evaled.
160505cf1079Smrgusage='$progpath [OPTION]...'
160605cf1079Smrg
160705cf1079Smrg# Short help message in response to '-h' and '--help'.  Add to this or
160805cf1079Smrg# override it after sourcing this library to reflect the full set of
160905cf1079Smrg# options your script accepts.
161005cf1079Smrgusage_message="\
161105cf1079Smrg       --debug        enable verbose shell tracing
161205cf1079Smrg   -W, --warnings=CATEGORY
161305cf1079Smrg                      report the warnings falling in CATEGORY [all]
161405cf1079Smrg   -v, --verbose      verbosely report processing
161505cf1079Smrg       --version      print version information and exit
161605cf1079Smrg   -h, --help         print short or long help message and exit
161705cf1079Smrg"
161805cf1079Smrg
161905cf1079Smrg# Additional text appended to 'usage_message' in response to '--help'.
162005cf1079Smrglong_help_message="
162105cf1079SmrgWarning categories include:
162205cf1079Smrg       'all'          show all warnings
162305cf1079Smrg       'none'         turn off all the warnings
162405cf1079Smrg       'error'        warnings are treated as fatal errors"
162505cf1079Smrg
162605cf1079Smrg# Help message printed before fatal option parsing errors.
162705cf1079Smrgfatal_help="Try '\$progname --help' for more information."
162805cf1079Smrg
162905cf1079Smrg
163005cf1079Smrg
163105cf1079Smrg## ------------------------- ##
163205cf1079Smrg## Hook function management. ##
163305cf1079Smrg## ------------------------- ##
163405cf1079Smrg
163505cf1079Smrg# This section contains functions for adding, removing, and running hooks
163679d5fcd7Smrg# in the main code.  A hook is just a list of function names that can be
163779d5fcd7Smrg# run in order later on.
163805cf1079Smrg
163905cf1079Smrg# func_hookable FUNC_NAME
164005cf1079Smrg# -----------------------
164105cf1079Smrg# Declare that FUNC_NAME will run hooks added with
164205cf1079Smrg# 'func_add_hook FUNC_NAME ...'.
164305cf1079Smrgfunc_hookable ()
164405cf1079Smrg{
164505cf1079Smrg    $debug_cmd
164605cf1079Smrg
164705cf1079Smrg    func_append hookable_fns " $1"
164805cf1079Smrg}
164905cf1079Smrg
165005cf1079Smrg
165105cf1079Smrg# func_add_hook FUNC_NAME HOOK_FUNC
165205cf1079Smrg# ---------------------------------
165305cf1079Smrg# Request that FUNC_NAME call HOOK_FUNC before it returns.  FUNC_NAME must
165405cf1079Smrg# first have been declared "hookable" by a call to 'func_hookable'.
165505cf1079Smrgfunc_add_hook ()
165605cf1079Smrg{
165705cf1079Smrg    $debug_cmd
165805cf1079Smrg
165905cf1079Smrg    case " $hookable_fns " in
166005cf1079Smrg      *" $1 "*) ;;
166105cf1079Smrg      *) func_fatal_error "'$1' does not accept hook functions." ;;
166205cf1079Smrg    esac
166305cf1079Smrg
166405cf1079Smrg    eval func_append ${1}_hooks '" $2"'
166505cf1079Smrg}
166605cf1079Smrg
166705cf1079Smrg
166805cf1079Smrg# func_remove_hook FUNC_NAME HOOK_FUNC
166905cf1079Smrg# ------------------------------------
167079d5fcd7Smrg# Remove HOOK_FUNC from the list of hook functions to be called by
167179d5fcd7Smrg# FUNC_NAME.
167205cf1079Smrgfunc_remove_hook ()
167305cf1079Smrg{
167405cf1079Smrg    $debug_cmd
167505cf1079Smrg
167605cf1079Smrg    eval ${1}_hooks='`$ECHO "\$'$1'_hooks" |$SED "s| '$2'||"`'
167705cf1079Smrg}
167805cf1079Smrg
167905cf1079Smrg
168079d5fcd7Smrg# func_propagate_result FUNC_NAME_A FUNC_NAME_B
168179d5fcd7Smrg# ---------------------------------------------
168279d5fcd7Smrg# If the *_result variable of FUNC_NAME_A _is set_, assign its value to
168379d5fcd7Smrg# *_result variable of FUNC_NAME_B.
168479d5fcd7Smrgfunc_propagate_result ()
168579d5fcd7Smrg{
168679d5fcd7Smrg    $debug_cmd
168779d5fcd7Smrg
168879d5fcd7Smrg    func_propagate_result_result=:
168979d5fcd7Smrg    if eval "test \"\${${1}_result+set}\" = set"
169079d5fcd7Smrg    then
169179d5fcd7Smrg      eval "${2}_result=\$${1}_result"
169279d5fcd7Smrg    else
169379d5fcd7Smrg      func_propagate_result_result=false
169479d5fcd7Smrg    fi
169579d5fcd7Smrg}
169679d5fcd7Smrg
169779d5fcd7Smrg
169805cf1079Smrg# func_run_hooks FUNC_NAME [ARG]...
169905cf1079Smrg# ---------------------------------
170005cf1079Smrg# Run all hook functions registered to FUNC_NAME.
170179d5fcd7Smrg# It's assumed that the list of hook functions contains nothing more
170205cf1079Smrg# than a whitespace-delimited list of legal shell function names, and
170305cf1079Smrg# no effort is wasted trying to catch shell meta-characters or preserve
170405cf1079Smrg# whitespace.
170505cf1079Smrgfunc_run_hooks ()
170605cf1079Smrg{
170705cf1079Smrg    $debug_cmd
170805cf1079Smrg
170905cf1079Smrg    case " $hookable_fns " in
171005cf1079Smrg      *" $1 "*) ;;
171179d5fcd7Smrg      *) func_fatal_error "'$1' does not support hook functions." ;;
171205cf1079Smrg    esac
171305cf1079Smrg
171405cf1079Smrg    eval _G_hook_fns=\$$1_hooks; shift
171505cf1079Smrg
171605cf1079Smrg    for _G_hook in $_G_hook_fns; do
171779d5fcd7Smrg      func_unset "${_G_hook}_result"
171879d5fcd7Smrg      eval $_G_hook '${1+"$@"}'
171979d5fcd7Smrg      func_propagate_result $_G_hook func_run_hooks
172079d5fcd7Smrg      if $func_propagate_result_result; then
172179d5fcd7Smrg        eval set dummy "$func_run_hooks_result"; shift
172205cf1079Smrg      fi
172305cf1079Smrg    done
172405cf1079Smrg}
172505cf1079Smrg
172605cf1079Smrg
172705cf1079Smrg
172805cf1079Smrg## --------------- ##
172905cf1079Smrg## Option parsing. ##
173005cf1079Smrg## --------------- ##
173105cf1079Smrg
173205cf1079Smrg# In order to add your own option parsing hooks, you must accept the
173379d5fcd7Smrg# full positional parameter list from your hook function.  You may remove
173479d5fcd7Smrg# or edit any options that you action, and then pass back the remaining
173579d5fcd7Smrg# unprocessed options in '<hooked_function_name>_result', escaped
173679d5fcd7Smrg# suitably for 'eval'.
173779d5fcd7Smrg#
173879d5fcd7Smrg# The '<hooked_function_name>_result' variable is automatically unset
173979d5fcd7Smrg# before your hook gets called; for best performance, only set the
174079d5fcd7Smrg# *_result variable when necessary (i.e. don't call the 'func_quote'
174179d5fcd7Smrg# function unnecessarily because it can be an expensive operation on some
174279d5fcd7Smrg# machines).
174305cf1079Smrg#
174405cf1079Smrg# Like this:
174505cf1079Smrg#
174605cf1079Smrg#    my_options_prep ()
174705cf1079Smrg#    {
174805cf1079Smrg#        $debug_cmd
174905cf1079Smrg#
175005cf1079Smrg#        # Extend the existing usage message.
175105cf1079Smrg#        usage_message=$usage_message'
175205cf1079Smrg#      -s, --silent       don'\''t print informational messages
175305cf1079Smrg#    '
175479d5fcd7Smrg#        # No change in '$@' (ignored completely by this hook).  Leave
175579d5fcd7Smrg#        # my_options_prep_result variable intact.
175605cf1079Smrg#    }
175705cf1079Smrg#    func_add_hook func_options_prep my_options_prep
175805cf1079Smrg#
175905cf1079Smrg#
176005cf1079Smrg#    my_silent_option ()
176105cf1079Smrg#    {
176205cf1079Smrg#        $debug_cmd
176305cf1079Smrg#
176405cf1079Smrg#        args_changed=false
176505cf1079Smrg#
176679d5fcd7Smrg#        # Note that, for efficiency, we parse as many options as we can
176705cf1079Smrg#        # recognise in a loop before passing the remainder back to the
176805cf1079Smrg#        # caller on the first unrecognised argument we encounter.
176905cf1079Smrg#        while test $# -gt 0; do
177005cf1079Smrg#          opt=$1; shift
177105cf1079Smrg#          case $opt in
177205cf1079Smrg#            --silent|-s) opt_silent=:
177305cf1079Smrg#                         args_changed=:
177405cf1079Smrg#                         ;;
177505cf1079Smrg#            # Separate non-argument short options:
177605cf1079Smrg#            -s*)         func_split_short_opt "$_G_opt"
177705cf1079Smrg#                         set dummy "$func_split_short_opt_name" \
177805cf1079Smrg#                             "-$func_split_short_opt_arg" ${1+"$@"}
177905cf1079Smrg#                         shift
178005cf1079Smrg#                         args_changed=:
178105cf1079Smrg#                         ;;
178205cf1079Smrg#            *)           # Make sure the first unrecognised option "$_G_opt"
178379d5fcd7Smrg#                         # is added back to "$@" in case we need it later,
178479d5fcd7Smrg#                         # if $args_changed was set to 'true'.
178505cf1079Smrg#                         set dummy "$_G_opt" ${1+"$@"}; shift; break ;;
178605cf1079Smrg#          esac
178705cf1079Smrg#        done
178805cf1079Smrg#
178979d5fcd7Smrg#        # Only call 'func_quote' here if we processed at least one argument.
179005cf1079Smrg#        if $args_changed; then
179179d5fcd7Smrg#          func_quote eval ${1+"$@"}
179279d5fcd7Smrg#          my_silent_option_result=$func_quote_result
179305cf1079Smrg#        fi
179405cf1079Smrg#    }
179505cf1079Smrg#    func_add_hook func_parse_options my_silent_option
179605cf1079Smrg#
179705cf1079Smrg#
179805cf1079Smrg#    my_option_validation ()
179905cf1079Smrg#    {
180005cf1079Smrg#        $debug_cmd
180105cf1079Smrg#
180205cf1079Smrg#        $opt_silent && $opt_verbose && func_fatal_help "\
180305cf1079Smrg#    '--silent' and '--verbose' options are mutually exclusive."
180405cf1079Smrg#    }
180505cf1079Smrg#    func_add_hook func_validate_options my_option_validation
180605cf1079Smrg#
180705cf1079Smrg# You'll also need to manually amend $usage_message to reflect the extra
180805cf1079Smrg# options you parse.  It's preferable to append if you can, so that
180905cf1079Smrg# multiple option parsing hooks can be added safely.
181005cf1079Smrg
181105cf1079Smrg
181205cf1079Smrg# func_options_finish [ARG]...
181305cf1079Smrg# ----------------------------
181405cf1079Smrg# Finishing the option parse loop (call 'func_options' hooks ATM).
181505cf1079Smrgfunc_options_finish ()
181605cf1079Smrg{
181705cf1079Smrg    $debug_cmd
181805cf1079Smrg
181979d5fcd7Smrg    func_run_hooks func_options ${1+"$@"}
182079d5fcd7Smrg    func_propagate_result func_run_hooks func_options_finish
182104007ebaSmrg}
182204007ebaSmrg
182304007ebaSmrg
182405cf1079Smrg# func_options [ARG]...
182505cf1079Smrg# ---------------------
182605cf1079Smrg# All the functions called inside func_options are hookable. See the
182705cf1079Smrg# individual implementations for details.
182805cf1079Smrgfunc_hookable func_options
182905cf1079Smrgfunc_options ()
183004007ebaSmrg{
183105cf1079Smrg    $debug_cmd
183204007ebaSmrg
183379d5fcd7Smrg    _G_options_quoted=false
183404007ebaSmrg
183505cf1079Smrg    for my_func in options_prep parse_options validate_options options_finish
183605cf1079Smrg    do
183779d5fcd7Smrg      func_unset func_${my_func}_result
183879d5fcd7Smrg      func_unset func_run_hooks_result
183979d5fcd7Smrg      eval func_$my_func '${1+"$@"}'
184079d5fcd7Smrg      func_propagate_result func_$my_func func_options
184179d5fcd7Smrg      if $func_propagate_result_result; then
184279d5fcd7Smrg        eval set dummy "$func_options_result"; shift
184379d5fcd7Smrg        _G_options_quoted=:
184404007ebaSmrg      fi
184505cf1079Smrg    done
184605cf1079Smrg
184779d5fcd7Smrg    $_G_options_quoted || {
184879d5fcd7Smrg      # As we (func_options) are top-level options-parser function and
184979d5fcd7Smrg      # nobody quoted "$@" for us yet, we need to do it explicitly for
185079d5fcd7Smrg      # caller.
185179d5fcd7Smrg      func_quote eval ${1+"$@"}
185279d5fcd7Smrg      func_options_result=$func_quote_result
185379d5fcd7Smrg    }
185404007ebaSmrg}
185504007ebaSmrg
185604007ebaSmrg
185705cf1079Smrg# func_options_prep [ARG]...
185805cf1079Smrg# --------------------------
185905cf1079Smrg# All initialisations required before starting the option parse loop.
186005cf1079Smrg# Note that when calling hook functions, we pass through the list of
186105cf1079Smrg# positional parameters.  If a hook function modifies that list, and
186205cf1079Smrg# needs to propagate that back to rest of this script, then the complete
186379d5fcd7Smrg# modified list must be put in 'func_run_hooks_result' before returning.
186405cf1079Smrgfunc_hookable func_options_prep
186505cf1079Smrgfunc_options_prep ()
186604007ebaSmrg{
186705cf1079Smrg    $debug_cmd
186804007ebaSmrg
186905cf1079Smrg    # Option defaults:
187005cf1079Smrg    opt_verbose=false
187105cf1079Smrg    opt_warning_types=
187204007ebaSmrg
187379d5fcd7Smrg    func_run_hooks func_options_prep ${1+"$@"}
187479d5fcd7Smrg    func_propagate_result func_run_hooks func_options_prep
187504007ebaSmrg}
187604007ebaSmrg
187705cf1079Smrg
187805cf1079Smrg# func_parse_options [ARG]...
187905cf1079Smrg# ---------------------------
188005cf1079Smrg# The main option parsing loop.
188105cf1079Smrgfunc_hookable func_parse_options
188205cf1079Smrgfunc_parse_options ()
188304007ebaSmrg{
188405cf1079Smrg    $debug_cmd
188505cf1079Smrg
188679d5fcd7Smrg    _G_parse_options_requote=false
188705cf1079Smrg    # this just eases exit handling
188805cf1079Smrg    while test $# -gt 0; do
188905cf1079Smrg      # Defer to hook functions for initial option parsing, so they
189005cf1079Smrg      # get priority in the event of reusing an option name.
189179d5fcd7Smrg      func_run_hooks func_parse_options ${1+"$@"}
189279d5fcd7Smrg      func_propagate_result func_run_hooks func_parse_options
189379d5fcd7Smrg      if $func_propagate_result_result; then
189479d5fcd7Smrg        eval set dummy "$func_parse_options_result"; shift
189579d5fcd7Smrg        # Even though we may have changed "$@", we passed the "$@" array
189679d5fcd7Smrg        # down into the hook and it quoted it for us (because we are in
189779d5fcd7Smrg        # this if-branch).  No need to quote it again.
189879d5fcd7Smrg        _G_parse_options_requote=false
189905cf1079Smrg      fi
190005cf1079Smrg
190105cf1079Smrg      # Break out of the loop if we already parsed every option.
190205cf1079Smrg      test $# -gt 0 || break
190305cf1079Smrg
190479d5fcd7Smrg      # We expect that one of the options parsed in this function matches
190579d5fcd7Smrg      # and thus we remove _G_opt from "$@" and need to re-quote.
190605cf1079Smrg      _G_match_parse_options=:
190705cf1079Smrg      _G_opt=$1
190805cf1079Smrg      shift
190905cf1079Smrg      case $_G_opt in
191005cf1079Smrg        --debug|-x)   debug_cmd='set -x'
191179d5fcd7Smrg                      func_echo "enabling shell trace mode" >&2
191205cf1079Smrg                      $debug_cmd
191305cf1079Smrg                      ;;
191405cf1079Smrg
191505cf1079Smrg        --no-warnings|--no-warning|--no-warn)
191605cf1079Smrg                      set dummy --warnings none ${1+"$@"}
191705cf1079Smrg                      shift
191805cf1079Smrg		      ;;
191905cf1079Smrg
192005cf1079Smrg        --warnings|--warning|-W)
192105cf1079Smrg                      if test $# = 0 && func_missing_arg $_G_opt; then
192279d5fcd7Smrg                        _G_parse_options_requote=:
192305cf1079Smrg                        break
192405cf1079Smrg                      fi
192505cf1079Smrg                      case " $warning_categories $1" in
192605cf1079Smrg                        *" $1 "*)
192705cf1079Smrg                          # trailing space prevents matching last $1 above
192805cf1079Smrg                          func_append_uniq opt_warning_types " $1"
192905cf1079Smrg                          ;;
193005cf1079Smrg                        *all)
193105cf1079Smrg                          opt_warning_types=$warning_categories
193205cf1079Smrg                          ;;
193305cf1079Smrg                        *none)
193405cf1079Smrg                          opt_warning_types=none
193505cf1079Smrg                          warning_func=:
193605cf1079Smrg                          ;;
193705cf1079Smrg                        *error)
193805cf1079Smrg                          opt_warning_types=$warning_categories
193905cf1079Smrg                          warning_func=func_fatal_error
194005cf1079Smrg                          ;;
194105cf1079Smrg                        *)
194205cf1079Smrg                          func_fatal_error \
194305cf1079Smrg                             "unsupported warning category: '$1'"
194405cf1079Smrg                          ;;
194505cf1079Smrg                      esac
194605cf1079Smrg                      shift
194705cf1079Smrg                      ;;
194805cf1079Smrg
194905cf1079Smrg        --verbose|-v) opt_verbose=: ;;
195005cf1079Smrg        --version)    func_version ;;
195105cf1079Smrg        -\?|-h)       func_usage ;;
195205cf1079Smrg        --help)       func_help ;;
195305cf1079Smrg
195405cf1079Smrg	# Separate optargs to long options (plugins may need this):
195505cf1079Smrg	--*=*)        func_split_equals "$_G_opt"
195605cf1079Smrg	              set dummy "$func_split_equals_lhs" \
195705cf1079Smrg                          "$func_split_equals_rhs" ${1+"$@"}
195805cf1079Smrg                      shift
195905cf1079Smrg                      ;;
196005cf1079Smrg
196105cf1079Smrg       # Separate optargs to short options:
196205cf1079Smrg        -W*)
196305cf1079Smrg                      func_split_short_opt "$_G_opt"
196405cf1079Smrg                      set dummy "$func_split_short_opt_name" \
196505cf1079Smrg                          "$func_split_short_opt_arg" ${1+"$@"}
196605cf1079Smrg                      shift
196705cf1079Smrg                      ;;
196805cf1079Smrg
196905cf1079Smrg        # Separate non-argument short options:
197005cf1079Smrg        -\?*|-h*|-v*|-x*)
197105cf1079Smrg                      func_split_short_opt "$_G_opt"
197205cf1079Smrg                      set dummy "$func_split_short_opt_name" \
197305cf1079Smrg                          "-$func_split_short_opt_arg" ${1+"$@"}
197405cf1079Smrg                      shift
197505cf1079Smrg                      ;;
197605cf1079Smrg
197779d5fcd7Smrg        --)           _G_parse_options_requote=: ; break ;;
197805cf1079Smrg        -*)           func_fatal_help "unrecognised option: '$_G_opt'" ;;
197905cf1079Smrg        *)            set dummy "$_G_opt" ${1+"$@"}; shift
198005cf1079Smrg                      _G_match_parse_options=false
198105cf1079Smrg                      break
198205cf1079Smrg                      ;;
198305cf1079Smrg      esac
198405cf1079Smrg
198579d5fcd7Smrg      if $_G_match_parse_options; then
198679d5fcd7Smrg        _G_parse_options_requote=:
198779d5fcd7Smrg      fi
198805cf1079Smrg    done
198905cf1079Smrg
199079d5fcd7Smrg    if $_G_parse_options_requote; then
199105cf1079Smrg      # save modified positional parameters for caller
199279d5fcd7Smrg      func_quote eval ${1+"$@"}
199379d5fcd7Smrg      func_parse_options_result=$func_quote_result
199405cf1079Smrg    fi
199504007ebaSmrg}
199604007ebaSmrg
199704007ebaSmrg
199805cf1079Smrg# func_validate_options [ARG]...
199905cf1079Smrg# ------------------------------
200005cf1079Smrg# Perform any sanity checks on option settings and/or unconsumed
200105cf1079Smrg# arguments.
200205cf1079Smrgfunc_hookable func_validate_options
200305cf1079Smrgfunc_validate_options ()
200404007ebaSmrg{
200505cf1079Smrg    $debug_cmd
200604007ebaSmrg
200705cf1079Smrg    # Display all warnings if -W was not given.
200805cf1079Smrg    test -n "$opt_warning_types" || opt_warning_types=" $warning_categories"
200905cf1079Smrg
201079d5fcd7Smrg    func_run_hooks func_validate_options ${1+"$@"}
201179d5fcd7Smrg    func_propagate_result func_run_hooks func_validate_options
201205cf1079Smrg
201305cf1079Smrg    # Bail if the options were screwed!
201405cf1079Smrg    $exit_cmd $EXIT_FAILURE
201504007ebaSmrg}
201604007ebaSmrg
201705cf1079Smrg
201805cf1079Smrg
201905cf1079Smrg## ----------------- ##
202005cf1079Smrg## Helper functions. ##
202105cf1079Smrg## ----------------- ##
202205cf1079Smrg
202305cf1079Smrg# This section contains the helper functions used by the rest of the
202405cf1079Smrg# hookable option parser framework in ascii-betical order.
202505cf1079Smrg
202605cf1079Smrg
202705cf1079Smrg# func_fatal_help ARG...
202805cf1079Smrg# ----------------------
202905cf1079Smrg# Echo program name prefixed message to standard error, followed by
203005cf1079Smrg# a help hint, and exit.
203105cf1079Smrgfunc_fatal_help ()
203204007ebaSmrg{
203305cf1079Smrg    $debug_cmd
203404007ebaSmrg
203505cf1079Smrg    eval \$ECHO \""Usage: $usage"\"
203605cf1079Smrg    eval \$ECHO \""$fatal_help"\"
203705cf1079Smrg    func_error ${1+"$@"}
203805cf1079Smrg    exit $EXIT_FAILURE
203904007ebaSmrg}
204004007ebaSmrg
204105cf1079Smrg
204205cf1079Smrg# func_help
204305cf1079Smrg# ---------
204405cf1079Smrg# Echo long help message to standard output and exit.
204504007ebaSmrgfunc_help ()
204604007ebaSmrg{
204705cf1079Smrg    $debug_cmd
204805cf1079Smrg
204905cf1079Smrg    func_usage_message
205005cf1079Smrg    $ECHO "$long_help_message"
205105cf1079Smrg    exit 0
205204007ebaSmrg}
205304007ebaSmrg
205405cf1079Smrg
205505cf1079Smrg# func_missing_arg ARGNAME
205605cf1079Smrg# ------------------------
205704007ebaSmrg# Echo program name prefixed message to standard error and set global
205804007ebaSmrg# exit_cmd.
205904007ebaSmrgfunc_missing_arg ()
206004007ebaSmrg{
206105cf1079Smrg    $debug_cmd
206204007ebaSmrg
206305cf1079Smrg    func_error "Missing argument for '$1'."
206404007ebaSmrg    exit_cmd=exit
206504007ebaSmrg}
206604007ebaSmrg
206704007ebaSmrg
206805cf1079Smrg# func_split_equals STRING
206905cf1079Smrg# ------------------------
207079d5fcd7Smrg# Set func_split_equals_lhs and func_split_equals_rhs shell variables
207179d5fcd7Smrg# after splitting STRING at the '=' sign.
207205cf1079Smrgtest -z "$_G_HAVE_XSI_OPS" \
207305cf1079Smrg    && (eval 'x=a/b/c;
207405cf1079Smrg      test 5aa/bb/cc = "${#x}${x%%/*}${x%/*}${x#*/}${x##*/}"') 2>/dev/null \
207505cf1079Smrg    && _G_HAVE_XSI_OPS=yes
207605cf1079Smrg
207705cf1079Smrgif test yes = "$_G_HAVE_XSI_OPS"
207805cf1079Smrgthen
207905cf1079Smrg  # This is an XSI compatible shell, allowing a faster implementation...
208005cf1079Smrg  eval 'func_split_equals ()
208105cf1079Smrg  {
208205cf1079Smrg      $debug_cmd
208305cf1079Smrg
208405cf1079Smrg      func_split_equals_lhs=${1%%=*}
208505cf1079Smrg      func_split_equals_rhs=${1#*=}
208679d5fcd7Smrg      if test "x$func_split_equals_lhs" = "x$1"; then
208779d5fcd7Smrg        func_split_equals_rhs=
208879d5fcd7Smrg      fi
208905cf1079Smrg  }'
209005cf1079Smrgelse
209105cf1079Smrg  # ...otherwise fall back to using expr, which is often a shell builtin.
209205cf1079Smrg  func_split_equals ()
209305cf1079Smrg  {
209405cf1079Smrg      $debug_cmd
209505cf1079Smrg
209605cf1079Smrg      func_split_equals_lhs=`expr "x$1" : 'x\([^=]*\)'`
209705cf1079Smrg      func_split_equals_rhs=
209879d5fcd7Smrg      test "x$func_split_equals_lhs=" = "x$1" \
209905cf1079Smrg        || func_split_equals_rhs=`expr "x$1" : 'x[^=]*=\(.*\)$'`
210005cf1079Smrg  }
210105cf1079Smrgfi #func_split_equals
210205cf1079Smrg
210305cf1079Smrg
210405cf1079Smrg# func_split_short_opt SHORTOPT
210505cf1079Smrg# -----------------------------
210604007ebaSmrg# Set func_split_short_opt_name and func_split_short_opt_arg shell
210704007ebaSmrg# variables after splitting SHORTOPT after the 2nd character.
210805cf1079Smrgif test yes = "$_G_HAVE_XSI_OPS"
210905cf1079Smrgthen
211005cf1079Smrg  # This is an XSI compatible shell, allowing a faster implementation...
211105cf1079Smrg  eval 'func_split_short_opt ()
211205cf1079Smrg  {
211305cf1079Smrg      $debug_cmd
211405cf1079Smrg
211505cf1079Smrg      func_split_short_opt_arg=${1#??}
211605cf1079Smrg      func_split_short_opt_name=${1%"$func_split_short_opt_arg"}
211705cf1079Smrg  }'
211805cf1079Smrgelse
211905cf1079Smrg  # ...otherwise fall back to using expr, which is often a shell builtin.
212005cf1079Smrg  func_split_short_opt ()
212105cf1079Smrg  {
212205cf1079Smrg      $debug_cmd
212305cf1079Smrg
212479d5fcd7Smrg      func_split_short_opt_name=`expr "x$1" : 'x\(-.\)'`
212505cf1079Smrg      func_split_short_opt_arg=`expr "x$1" : 'x-.\(.*\)$'`
212605cf1079Smrg  }
212705cf1079Smrgfi #func_split_short_opt
212805cf1079Smrg
212905cf1079Smrg
213005cf1079Smrg# func_usage
213105cf1079Smrg# ----------
213205cf1079Smrg# Echo short help message to standard output and exit.
213305cf1079Smrgfunc_usage ()
213404007ebaSmrg{
213505cf1079Smrg    $debug_cmd
213604007ebaSmrg
213705cf1079Smrg    func_usage_message
213805cf1079Smrg    $ECHO "Run '$progname --help |${PAGER-more}' for full usage"
213905cf1079Smrg    exit 0
214005cf1079Smrg}
214104007ebaSmrg
214204007ebaSmrg
214305cf1079Smrg# func_usage_message
214405cf1079Smrg# ------------------
214505cf1079Smrg# Echo short help message to standard output.
214605cf1079Smrgfunc_usage_message ()
214704007ebaSmrg{
214805cf1079Smrg    $debug_cmd
214904007ebaSmrg
215005cf1079Smrg    eval \$ECHO \""Usage: $usage"\"
215105cf1079Smrg    echo
215205cf1079Smrg    $SED -n 's|^# ||
215305cf1079Smrg        /^Written by/{
215405cf1079Smrg          x;p;x
215505cf1079Smrg        }
215605cf1079Smrg	h
215705cf1079Smrg	/^Written by/q' < "$progpath"
215805cf1079Smrg    echo
215905cf1079Smrg    eval \$ECHO \""$usage_message"\"
216005cf1079Smrg}
216104007ebaSmrg
216204007ebaSmrg
216305cf1079Smrg# func_version
216405cf1079Smrg# ------------
216505cf1079Smrg# Echo version message to standard output and exit.
216679d5fcd7Smrg# The version message is extracted from the calling file's header
216779d5fcd7Smrg# comments, with leading '# ' stripped:
216879d5fcd7Smrg#   1. First display the progname and version
216979d5fcd7Smrg#   2. Followed by the header comment line matching  /^# Written by /
217079d5fcd7Smrg#   3. Then a blank line followed by the first following line matching
217179d5fcd7Smrg#      /^# Copyright /
217279d5fcd7Smrg#   4. Immediately followed by any lines between the previous matches,
217379d5fcd7Smrg#      except lines preceding the intervening completely blank line.
217479d5fcd7Smrg# For example, see the header comments of this file.
217505cf1079Smrgfunc_version ()
217605cf1079Smrg{
217705cf1079Smrg    $debug_cmd
217804007ebaSmrg
217905cf1079Smrg    printf '%s\n' "$progname $scriptversion"
218005cf1079Smrg    $SED -n '
218179d5fcd7Smrg        /^# Written by /!b
218279d5fcd7Smrg        s|^# ||; p; n
218379d5fcd7Smrg
218479d5fcd7Smrg        :fwd2blnk
218579d5fcd7Smrg        /./ {
218679d5fcd7Smrg          n
218779d5fcd7Smrg          b fwd2blnk
218805cf1079Smrg        }
218979d5fcd7Smrg        p; n
219079d5fcd7Smrg
219179d5fcd7Smrg        :holdwrnt
219279d5fcd7Smrg        s|^# ||
219379d5fcd7Smrg        s|^# *$||
219479d5fcd7Smrg        /^Copyright /!{
219579d5fcd7Smrg          /./H
219679d5fcd7Smrg          n
219779d5fcd7Smrg          b holdwrnt
219805cf1079Smrg        }
219979d5fcd7Smrg
220079d5fcd7Smrg        s|\((C)\)[ 0-9,-]*[ ,-]\([1-9][0-9]* \)|\1 \2|
220179d5fcd7Smrg        G
220279d5fcd7Smrg        s|\(\n\)\n*|\1|g
220379d5fcd7Smrg        p; q' < "$progpath"
220404007ebaSmrg
220505cf1079Smrg    exit $?
220605cf1079Smrg}
220704007ebaSmrg
220804007ebaSmrg
220905cf1079Smrg# Local variables:
221005cf1079Smrg# mode: shell-script
221105cf1079Smrg# sh-indentation: 2
221205cf1079Smrg# eval: (add-hook 'before-save-hook 'time-stamp)
221379d5fcd7Smrg# time-stamp-pattern: "30/scriptversion=%:y-%02m-%02d.%02H; # UTC"
221405cf1079Smrg# time-stamp-time-zone: "UTC"
221505cf1079Smrg# End:
221604007ebaSmrg
221705cf1079Smrg# Set a version string.
221879d5fcd7Smrgscriptversion='(GNU libtool) 2.4.7'
221904007ebaSmrg
222004007ebaSmrg
222105cf1079Smrg# func_echo ARG...
222205cf1079Smrg# ----------------
222305cf1079Smrg# Libtool also displays the current mode in messages, so override
222405cf1079Smrg# funclib.sh func_echo with this custom definition.
222505cf1079Smrgfunc_echo ()
222604007ebaSmrg{
222705cf1079Smrg    $debug_cmd
222804007ebaSmrg
222905cf1079Smrg    _G_message=$*
223005cf1079Smrg
223105cf1079Smrg    func_echo_IFS=$IFS
223205cf1079Smrg    IFS=$nl
223305cf1079Smrg    for _G_line in $_G_message; do
223405cf1079Smrg      IFS=$func_echo_IFS
223505cf1079Smrg      $ECHO "$progname${opt_mode+: $opt_mode}: $_G_line"
223605cf1079Smrg    done
223705cf1079Smrg    IFS=$func_echo_IFS
223805cf1079Smrg}
223904007ebaSmrg
224004007ebaSmrg
224105cf1079Smrg# func_warning ARG...
224205cf1079Smrg# -------------------
224305cf1079Smrg# Libtool warnings are not categorized, so override funclib.sh
224405cf1079Smrg# func_warning with this simpler definition.
224505cf1079Smrgfunc_warning ()
224604007ebaSmrg{
224705cf1079Smrg    $debug_cmd
224804007ebaSmrg
224905cf1079Smrg    $warning_func ${1+"$@"}
225005cf1079Smrg}
225104007ebaSmrg
225204007ebaSmrg
225305cf1079Smrg## ---------------- ##
225405cf1079Smrg## Options parsing. ##
225505cf1079Smrg## ---------------- ##
225605cf1079Smrg
225705cf1079Smrg# Hook in the functions to make sure our own options are parsed during
225805cf1079Smrg# the option parsing loop.
225905cf1079Smrg
226005cf1079Smrgusage='$progpath [OPTION]... [MODE-ARG]...'
226105cf1079Smrg
226205cf1079Smrg# Short help message in response to '-h'.
226305cf1079Smrgusage_message="Options:
226405cf1079Smrg       --config             show all configuration variables
226505cf1079Smrg       --debug              enable verbose shell tracing
226605cf1079Smrg   -n, --dry-run            display commands without modifying any files
226705cf1079Smrg       --features           display basic configuration information and exit
226805cf1079Smrg       --mode=MODE          use operation mode MODE
226905cf1079Smrg       --no-warnings        equivalent to '-Wnone'
227005cf1079Smrg       --preserve-dup-deps  don't remove duplicate dependency libraries
227105cf1079Smrg       --quiet, --silent    don't print informational messages
227205cf1079Smrg       --tag=TAG            use configuration variables from tag TAG
227305cf1079Smrg   -v, --verbose            print more informational messages than default
227405cf1079Smrg       --version            print version information
227505cf1079Smrg   -W, --warnings=CATEGORY  report the warnings falling in CATEGORY [all]
227605cf1079Smrg   -h, --help, --help-all   print short, long, or detailed help message
227705cf1079Smrg"
227804007ebaSmrg
227905cf1079Smrg# Additional text appended to 'usage_message' in response to '--help'.
228005cf1079Smrgfunc_help ()
228104007ebaSmrg{
228205cf1079Smrg    $debug_cmd
228305cf1079Smrg
228405cf1079Smrg    func_usage_message
228505cf1079Smrg    $ECHO "$long_help_message
228605cf1079Smrg
228705cf1079SmrgMODE must be one of the following:
228805cf1079Smrg
228905cf1079Smrg       clean           remove files from the build directory
229005cf1079Smrg       compile         compile a source file into a libtool object
229105cf1079Smrg       execute         automatically set library path, then run a program
229205cf1079Smrg       finish          complete the installation of libtool libraries
229305cf1079Smrg       install         install libraries or executables
229405cf1079Smrg       link            create a library or an executable
229505cf1079Smrg       uninstall       remove libraries from an installed directory
229605cf1079Smrg
229705cf1079SmrgMODE-ARGS vary depending on the MODE.  When passed as first option,
229805cf1079Smrg'--mode=MODE' may be abbreviated as 'MODE' or a unique abbreviation of that.
229905cf1079SmrgTry '$progname --help --mode=MODE' for a more detailed description of MODE.
230005cf1079Smrg
230105cf1079SmrgWhen reporting a bug, please describe a test case to reproduce it and
230205cf1079Smrginclude the following information:
230305cf1079Smrg
230405cf1079Smrg       host-triplet:   $host
230505cf1079Smrg       shell:          $SHELL
230605cf1079Smrg       compiler:       $LTCC
230705cf1079Smrg       compiler flags: $LTCFLAGS
230805cf1079Smrg       linker:         $LD (gnu? $with_gnu_ld)
230979d5fcd7Smrg       version:        $progname (GNU libtool) 2.4.7
231005cf1079Smrg       automake:       `($AUTOMAKE --version) 2>/dev/null |$SED 1q`
231105cf1079Smrg       autoconf:       `($AUTOCONF --version) 2>/dev/null |$SED 1q`
231205cf1079Smrg
231305cf1079SmrgReport bugs to <bug-libtool@gnu.org>.
231479d5fcd7SmrgGNU libtool home page: <http://www.gnu.org/software/libtool/>.
231505cf1079SmrgGeneral help using GNU software: <http://www.gnu.org/gethelp/>."
231605cf1079Smrg    exit 0
231705cf1079Smrg}
231804007ebaSmrg
231904007ebaSmrg
232005cf1079Smrg# func_lo2o OBJECT-NAME
232105cf1079Smrg# ---------------------
232205cf1079Smrg# Transform OBJECT-NAME from a '.lo' suffix to the platform specific
232305cf1079Smrg# object suffix.
232405cf1079Smrg
232505cf1079Smrglo2o=s/\\.lo\$/.$objext/
232605cf1079Smrgo2lo=s/\\.$objext\$/.lo/
232705cf1079Smrg
232805cf1079Smrgif test yes = "$_G_HAVE_XSI_OPS"; then
232905cf1079Smrg  eval 'func_lo2o ()
233005cf1079Smrg  {
233105cf1079Smrg    case $1 in
233205cf1079Smrg      *.lo) func_lo2o_result=${1%.lo}.$objext ;;
233305cf1079Smrg      *   ) func_lo2o_result=$1               ;;
233405cf1079Smrg    esac
233505cf1079Smrg  }'
233605cf1079Smrg
233705cf1079Smrg  # func_xform LIBOBJ-OR-SOURCE
233805cf1079Smrg  # ---------------------------
233905cf1079Smrg  # Transform LIBOBJ-OR-SOURCE from a '.o' or '.c' (or otherwise)
234005cf1079Smrg  # suffix to a '.lo' libtool-object suffix.
234105cf1079Smrg  eval 'func_xform ()
234205cf1079Smrg  {
234305cf1079Smrg    func_xform_result=${1%.*}.lo
234405cf1079Smrg  }'
234505cf1079Smrgelse
234605cf1079Smrg  # ...otherwise fall back to using sed.
234705cf1079Smrg  func_lo2o ()
234805cf1079Smrg  {
234905cf1079Smrg    func_lo2o_result=`$ECHO "$1" | $SED "$lo2o"`
235005cf1079Smrg  }
235105cf1079Smrg
235205cf1079Smrg  func_xform ()
235305cf1079Smrg  {
235405cf1079Smrg    func_xform_result=`$ECHO "$1" | $SED 's|\.[^.]*$|.lo|'`
235505cf1079Smrg  }
235605cf1079Smrgfi
235704007ebaSmrg
235804007ebaSmrg
235905cf1079Smrg# func_fatal_configuration ARG...
236005cf1079Smrg# -------------------------------
236104007ebaSmrg# Echo program name prefixed message to standard error, followed by
236204007ebaSmrg# a configuration failure hint, and exit.
236304007ebaSmrgfunc_fatal_configuration ()
236404007ebaSmrg{
236579d5fcd7Smrg    func_fatal_error ${1+"$@"} \
236605cf1079Smrg      "See the $PACKAGE documentation for more information." \
236705cf1079Smrg      "Fatal configuration error."
236804007ebaSmrg}
236904007ebaSmrg
237004007ebaSmrg
237104007ebaSmrg# func_config
237205cf1079Smrg# -----------
237304007ebaSmrg# Display the configuration for all the tags in this script.
237404007ebaSmrgfunc_config ()
237504007ebaSmrg{
237604007ebaSmrg    re_begincf='^# ### BEGIN LIBTOOL'
237704007ebaSmrg    re_endcf='^# ### END LIBTOOL'
237804007ebaSmrg
237904007ebaSmrg    # Default configuration.
238004007ebaSmrg    $SED "1,/$re_begincf CONFIG/d;/$re_endcf CONFIG/,\$d" < "$progpath"
238104007ebaSmrg
238204007ebaSmrg    # Now print the configurations for the tags.
238304007ebaSmrg    for tagname in $taglist; do
238404007ebaSmrg      $SED -n "/$re_begincf TAG CONFIG: $tagname\$/,/$re_endcf TAG CONFIG: $tagname\$/p" < "$progpath"
238504007ebaSmrg    done
238604007ebaSmrg
238704007ebaSmrg    exit $?
238804007ebaSmrg}
238904007ebaSmrg
239005cf1079Smrg
239104007ebaSmrg# func_features
239205cf1079Smrg# -------------
239304007ebaSmrg# Display the features supported by this script.
239404007ebaSmrgfunc_features ()
239504007ebaSmrg{
239604007ebaSmrg    echo "host: $host"
239705cf1079Smrg    if test yes = "$build_libtool_libs"; then
239804007ebaSmrg      echo "enable shared libraries"
239904007ebaSmrg    else
240004007ebaSmrg      echo "disable shared libraries"
240104007ebaSmrg    fi
240205cf1079Smrg    if test yes = "$build_old_libs"; then
240304007ebaSmrg      echo "enable static libraries"
240404007ebaSmrg    else
240504007ebaSmrg      echo "disable static libraries"
240604007ebaSmrg    fi
240704007ebaSmrg
240804007ebaSmrg    exit $?
240904007ebaSmrg}
241004007ebaSmrg
241105cf1079Smrg
241205cf1079Smrg# func_enable_tag TAGNAME
241305cf1079Smrg# -----------------------
241404007ebaSmrg# Verify that TAGNAME is valid, and either flag an error and exit, or
241504007ebaSmrg# enable the TAGNAME tag.  We also add TAGNAME to the global $taglist
241604007ebaSmrg# variable here.
241704007ebaSmrgfunc_enable_tag ()
241804007ebaSmrg{
241905cf1079Smrg    # Global variable:
242005cf1079Smrg    tagname=$1
242104007ebaSmrg
242205cf1079Smrg    re_begincf="^# ### BEGIN LIBTOOL TAG CONFIG: $tagname\$"
242305cf1079Smrg    re_endcf="^# ### END LIBTOOL TAG CONFIG: $tagname\$"
242405cf1079Smrg    sed_extractcf=/$re_begincf/,/$re_endcf/p
242504007ebaSmrg
242605cf1079Smrg    # Validate tagname.
242705cf1079Smrg    case $tagname in
242805cf1079Smrg      *[!-_A-Za-z0-9,/]*)
242905cf1079Smrg        func_fatal_error "invalid tag name: $tagname"
243005cf1079Smrg        ;;
243105cf1079Smrg    esac
243204007ebaSmrg
243305cf1079Smrg    # Don't test for the "default" C tag, as we know it's
243405cf1079Smrg    # there but not specially marked.
243505cf1079Smrg    case $tagname in
243605cf1079Smrg        CC) ;;
243704007ebaSmrg    *)
243805cf1079Smrg        if $GREP "$re_begincf" "$progpath" >/dev/null 2>&1; then
243905cf1079Smrg	  taglist="$taglist $tagname"
244005cf1079Smrg
244105cf1079Smrg	  # Evaluate the configuration.  Be careful to quote the path
244205cf1079Smrg	  # and the sed script, to avoid splitting on whitespace, but
244305cf1079Smrg	  # also don't use non-portable quotes within backquotes within
244405cf1079Smrg	  # quotes we have to do it in 2 steps:
244505cf1079Smrg	  extractedcf=`$SED -n -e "$sed_extractcf" < "$progpath"`
244605cf1079Smrg	  eval "$extractedcf"
244705cf1079Smrg        else
244805cf1079Smrg	  func_error "ignoring unknown tag $tagname"
244905cf1079Smrg        fi
245005cf1079Smrg        ;;
245105cf1079Smrg    esac
245204007ebaSmrg}
245304007ebaSmrg
245405cf1079Smrg
245504007ebaSmrg# func_check_version_match
245605cf1079Smrg# ------------------------
245704007ebaSmrg# Ensure that we are using m4 macros, and libtool script from the same
245804007ebaSmrg# release of libtool.
245904007ebaSmrgfunc_check_version_match ()
246004007ebaSmrg{
246105cf1079Smrg    if test "$package_revision" != "$macro_revision"; then
246205cf1079Smrg      if test "$VERSION" != "$macro_version"; then
246305cf1079Smrg        if test -z "$macro_version"; then
246405cf1079Smrg          cat >&2 <<_LT_EOF
246504007ebaSmrg$progname: Version mismatch error.  This is $PACKAGE $VERSION, but the
246604007ebaSmrg$progname: definition of this LT_INIT comes from an older release.
246704007ebaSmrg$progname: You should recreate aclocal.m4 with macros from $PACKAGE $VERSION
246804007ebaSmrg$progname: and run autoconf again.
246904007ebaSmrg_LT_EOF
247005cf1079Smrg        else
247105cf1079Smrg          cat >&2 <<_LT_EOF
247204007ebaSmrg$progname: Version mismatch error.  This is $PACKAGE $VERSION, but the
247304007ebaSmrg$progname: definition of this LT_INIT comes from $PACKAGE $macro_version.
247404007ebaSmrg$progname: You should recreate aclocal.m4 with macros from $PACKAGE $VERSION
247504007ebaSmrg$progname: and run autoconf again.
247604007ebaSmrg_LT_EOF
247705cf1079Smrg        fi
247805cf1079Smrg      else
247905cf1079Smrg        cat >&2 <<_LT_EOF
248004007ebaSmrg$progname: Version mismatch error.  This is $PACKAGE $VERSION, revision $package_revision,
248104007ebaSmrg$progname: but the definition of this LT_INIT comes from revision $macro_revision.
248204007ebaSmrg$progname: You should recreate aclocal.m4 with macros from revision $package_revision
248304007ebaSmrg$progname: of $PACKAGE $VERSION and run autoconf again.
248404007ebaSmrg_LT_EOF
248505cf1079Smrg      fi
248604007ebaSmrg
248705cf1079Smrg      exit $EXIT_MISMATCH
248805cf1079Smrg    fi
248904007ebaSmrg}
249004007ebaSmrg
249104007ebaSmrg
249205cf1079Smrg# libtool_options_prep [ARG]...
249305cf1079Smrg# -----------------------------
249405cf1079Smrg# Preparation for options parsed by libtool.
249505cf1079Smrglibtool_options_prep ()
249605cf1079Smrg{
249705cf1079Smrg    $debug_mode
249804007ebaSmrg
249905cf1079Smrg    # Option defaults:
250005cf1079Smrg    opt_config=false
250105cf1079Smrg    opt_dlopen=
250205cf1079Smrg    opt_dry_run=false
250305cf1079Smrg    opt_help=false
250405cf1079Smrg    opt_mode=
250505cf1079Smrg    opt_preserve_dup_deps=false
250605cf1079Smrg    opt_quiet=false
250704007ebaSmrg
250805cf1079Smrg    nonopt=
250905cf1079Smrg    preserve_args=
251004007ebaSmrg
251105cf1079Smrg    _G_rc_lt_options_prep=:
251204007ebaSmrg
251305cf1079Smrg    # Shorthand for --mode=foo, only valid as the first argument
251405cf1079Smrg    case $1 in
251505cf1079Smrg    clean|clea|cle|cl)
251605cf1079Smrg      shift; set dummy --mode clean ${1+"$@"}; shift
251705cf1079Smrg      ;;
251805cf1079Smrg    compile|compil|compi|comp|com|co|c)
251905cf1079Smrg      shift; set dummy --mode compile ${1+"$@"}; shift
252005cf1079Smrg      ;;
252105cf1079Smrg    execute|execut|execu|exec|exe|ex|e)
252205cf1079Smrg      shift; set dummy --mode execute ${1+"$@"}; shift
252305cf1079Smrg      ;;
252405cf1079Smrg    finish|finis|fini|fin|fi|f)
252505cf1079Smrg      shift; set dummy --mode finish ${1+"$@"}; shift
252605cf1079Smrg      ;;
252705cf1079Smrg    install|instal|insta|inst|ins|in|i)
252805cf1079Smrg      shift; set dummy --mode install ${1+"$@"}; shift
252905cf1079Smrg      ;;
253005cf1079Smrg    link|lin|li|l)
253105cf1079Smrg      shift; set dummy --mode link ${1+"$@"}; shift
253205cf1079Smrg      ;;
253305cf1079Smrg    uninstall|uninstal|uninsta|uninst|unins|unin|uni|un|u)
253405cf1079Smrg      shift; set dummy --mode uninstall ${1+"$@"}; shift
253505cf1079Smrg      ;;
253605cf1079Smrg    *)
253705cf1079Smrg      _G_rc_lt_options_prep=false
253805cf1079Smrg      ;;
253904007ebaSmrg    esac
254004007ebaSmrg
254105cf1079Smrg    if $_G_rc_lt_options_prep; then
254205cf1079Smrg      # Pass back the list of options.
254379d5fcd7Smrg      func_quote eval ${1+"$@"}
254479d5fcd7Smrg      libtool_options_prep_result=$func_quote_result
254505cf1079Smrg    fi
254605cf1079Smrg}
254705cf1079Smrgfunc_add_hook func_options_prep libtool_options_prep
254804007ebaSmrg
254904007ebaSmrg
255005cf1079Smrg# libtool_parse_options [ARG]...
255105cf1079Smrg# ---------------------------------
255205cf1079Smrg# Provide handling for libtool specific options.
255305cf1079Smrglibtool_parse_options ()
255405cf1079Smrg{
255505cf1079Smrg    $debug_cmd
255604007ebaSmrg
255705cf1079Smrg    _G_rc_lt_parse_options=false
255804007ebaSmrg
255905cf1079Smrg    # Perform our own loop to consume as many options as possible in
256005cf1079Smrg    # each iteration.
256105cf1079Smrg    while test $# -gt 0; do
256205cf1079Smrg      _G_match_lt_parse_options=:
256305cf1079Smrg      _G_opt=$1
256405cf1079Smrg      shift
256505cf1079Smrg      case $_G_opt in
256605cf1079Smrg        --dry-run|--dryrun|-n)
256705cf1079Smrg                        opt_dry_run=:
256805cf1079Smrg                        ;;
256905cf1079Smrg
257005cf1079Smrg        --config)       func_config ;;
257105cf1079Smrg
257205cf1079Smrg        --dlopen|-dlopen)
257305cf1079Smrg                        opt_dlopen="${opt_dlopen+$opt_dlopen
257405cf1079Smrg}$1"
257505cf1079Smrg                        shift
257605cf1079Smrg                        ;;
257705cf1079Smrg
257805cf1079Smrg        --preserve-dup-deps)
257905cf1079Smrg                        opt_preserve_dup_deps=: ;;
258005cf1079Smrg
258105cf1079Smrg        --features)     func_features ;;
258205cf1079Smrg
258305cf1079Smrg        --finish)       set dummy --mode finish ${1+"$@"}; shift ;;
258405cf1079Smrg
258505cf1079Smrg        --help)         opt_help=: ;;
258605cf1079Smrg
258705cf1079Smrg        --help-all)     opt_help=': help-all' ;;
258805cf1079Smrg
258905cf1079Smrg        --mode)         test $# = 0 && func_missing_arg $_G_opt && break
259005cf1079Smrg                        opt_mode=$1
259105cf1079Smrg                        case $1 in
259205cf1079Smrg                          # Valid mode arguments:
259305cf1079Smrg                          clean|compile|execute|finish|install|link|relink|uninstall) ;;
259405cf1079Smrg
259505cf1079Smrg                          # Catch anything else as an error
259605cf1079Smrg                          *) func_error "invalid argument for $_G_opt"
259705cf1079Smrg                             exit_cmd=exit
259805cf1079Smrg                             break
259905cf1079Smrg                             ;;
260005cf1079Smrg                        esac
260105cf1079Smrg                        shift
260205cf1079Smrg                        ;;
260305cf1079Smrg
260405cf1079Smrg        --no-silent|--no-quiet)
260505cf1079Smrg                        opt_quiet=false
260605cf1079Smrg                        func_append preserve_args " $_G_opt"
260705cf1079Smrg                        ;;
260805cf1079Smrg
260905cf1079Smrg        --no-warnings|--no-warning|--no-warn)
261005cf1079Smrg                        opt_warning=false
261105cf1079Smrg                        func_append preserve_args " $_G_opt"
261205cf1079Smrg                        ;;
261305cf1079Smrg
261405cf1079Smrg        --no-verbose)
261505cf1079Smrg                        opt_verbose=false
261605cf1079Smrg                        func_append preserve_args " $_G_opt"
261705cf1079Smrg                        ;;
261805cf1079Smrg
261905cf1079Smrg        --silent|--quiet)
262005cf1079Smrg                        opt_quiet=:
262105cf1079Smrg                        opt_verbose=false
262205cf1079Smrg                        func_append preserve_args " $_G_opt"
262305cf1079Smrg                        ;;
262405cf1079Smrg
262505cf1079Smrg        --tag)          test $# = 0 && func_missing_arg $_G_opt && break
262605cf1079Smrg                        opt_tag=$1
262705cf1079Smrg                        func_append preserve_args " $_G_opt $1"
262805cf1079Smrg                        func_enable_tag "$1"
262905cf1079Smrg                        shift
263005cf1079Smrg                        ;;
263105cf1079Smrg
263205cf1079Smrg        --verbose|-v)   opt_quiet=false
263305cf1079Smrg                        opt_verbose=:
263405cf1079Smrg                        func_append preserve_args " $_G_opt"
263505cf1079Smrg                        ;;
263605cf1079Smrg
263705cf1079Smrg        # An option not handled by this hook function:
263805cf1079Smrg        *)              set dummy "$_G_opt" ${1+"$@"} ; shift
263905cf1079Smrg                        _G_match_lt_parse_options=false
264005cf1079Smrg                        break
264105cf1079Smrg                        ;;
264205cf1079Smrg      esac
264305cf1079Smrg      $_G_match_lt_parse_options && _G_rc_lt_parse_options=:
264405cf1079Smrg    done
264505cf1079Smrg
264605cf1079Smrg    if $_G_rc_lt_parse_options; then
264705cf1079Smrg      # save modified positional parameters for caller
264879d5fcd7Smrg      func_quote eval ${1+"$@"}
264979d5fcd7Smrg      libtool_parse_options_result=$func_quote_result
265004007ebaSmrg    fi
265105cf1079Smrg}
265205cf1079Smrgfunc_add_hook func_parse_options libtool_parse_options
265305cf1079Smrg
265404007ebaSmrg
265505cf1079Smrg
265605cf1079Smrg# libtool_validate_options [ARG]...
265705cf1079Smrg# ---------------------------------
265805cf1079Smrg# Perform any sanity checks on option settings and/or unconsumed
265905cf1079Smrg# arguments.
266005cf1079Smrglibtool_validate_options ()
266105cf1079Smrg{
266205cf1079Smrg    # save first non-option argument
266305cf1079Smrg    if test 0 -lt $#; then
266405cf1079Smrg      nonopt=$1
266505cf1079Smrg      shift
266604007ebaSmrg    fi
266704007ebaSmrg
266805cf1079Smrg    # preserve --debug
266905cf1079Smrg    test : = "$debug_cmd" || func_append preserve_args " --debug"
267005cf1079Smrg
267105cf1079Smrg    case $host in
267205cf1079Smrg      # Solaris2 added to fix http://debbugs.gnu.org/cgi/bugreport.cgi?bug=16452
267305cf1079Smrg      # see also: http://gcc.gnu.org/bugzilla/show_bug.cgi?id=59788
267405cf1079Smrg      *cygwin* | *mingw* | *pw32* | *cegcc* | *solaris2* | *os2*)
267505cf1079Smrg        # don't eliminate duplications in $postdeps and $predeps
267605cf1079Smrg        opt_duplicate_compiler_generated_deps=:
267705cf1079Smrg        ;;
267805cf1079Smrg      *)
267905cf1079Smrg        opt_duplicate_compiler_generated_deps=$opt_preserve_dup_deps
268005cf1079Smrg        ;;
268105cf1079Smrg    esac
268204007ebaSmrg
268305cf1079Smrg    $opt_help || {
268405cf1079Smrg      # Sanity checks first:
268505cf1079Smrg      func_check_version_match
268604007ebaSmrg
268705cf1079Smrg      test yes != "$build_libtool_libs" \
268805cf1079Smrg        && test yes != "$build_old_libs" \
268905cf1079Smrg        && func_fatal_configuration "not configured to build any kind of library"
269005cf1079Smrg
269105cf1079Smrg      # Darwin sucks
269205cf1079Smrg      eval std_shrext=\"$shrext_cmds\"
269305cf1079Smrg
269405cf1079Smrg      # Only execute mode is allowed to have -dlopen flags.
269505cf1079Smrg      if test -n "$opt_dlopen" && test execute != "$opt_mode"; then
269605cf1079Smrg        func_error "unrecognized option '-dlopen'"
269705cf1079Smrg        $ECHO "$help" 1>&2
269805cf1079Smrg        exit $EXIT_FAILURE
269905cf1079Smrg      fi
270005cf1079Smrg
270105cf1079Smrg      # Change the help message to a mode-specific one.
270205cf1079Smrg      generic_help=$help
270305cf1079Smrg      help="Try '$progname --help --mode=$opt_mode' for more information."
270405cf1079Smrg    }
270505cf1079Smrg
270605cf1079Smrg    # Pass back the unparsed argument list
270779d5fcd7Smrg    func_quote eval ${1+"$@"}
270879d5fcd7Smrg    libtool_validate_options_result=$func_quote_result
270904007ebaSmrg}
271005cf1079Smrgfunc_add_hook func_validate_options libtool_validate_options
271104007ebaSmrg
271204007ebaSmrg
271305cf1079Smrg# Process options as early as possible so that --help and --version
271405cf1079Smrg# can return quickly.
271505cf1079Smrgfunc_options ${1+"$@"}
271605cf1079Smrgeval set dummy "$func_options_result"; shift
271705cf1079Smrg
271804007ebaSmrg
271904007ebaSmrg
272004007ebaSmrg## ----------- ##
272104007ebaSmrg##    Main.    ##
272204007ebaSmrg## ----------- ##
272304007ebaSmrg
272405cf1079Smrgmagic='%%%MAGIC variable%%%'
272505cf1079Smrgmagic_exe='%%%MAGIC EXE variable%%%'
272605cf1079Smrg
272705cf1079Smrg# Global variables.
272805cf1079Smrgextracted_archives=
272905cf1079Smrgextracted_serial=0
273005cf1079Smrg
273105cf1079Smrg# If this variable is set in any of the actions, the command in it
273205cf1079Smrg# will be execed at the end.  This prevents here-documents from being
273305cf1079Smrg# left over by shells.
273405cf1079Smrgexec_cmd=
273505cf1079Smrg
273605cf1079Smrg
273705cf1079Smrg# A function that is used when there is no print builtin or printf.
273805cf1079Smrgfunc_fallback_echo ()
273905cf1079Smrg{
274005cf1079Smrg  eval 'cat <<_LTECHO_EOF
274105cf1079Smrg$1
274205cf1079Smrg_LTECHO_EOF'
274305cf1079Smrg}
274405cf1079Smrg
274505cf1079Smrg# func_generated_by_libtool
274605cf1079Smrg# True iff stdin has been generated by Libtool. This function is only
274705cf1079Smrg# a basic sanity check; it will hardly flush out determined imposters.
274805cf1079Smrgfunc_generated_by_libtool_p ()
274905cf1079Smrg{
275005cf1079Smrg  $GREP "^# Generated by .*$PACKAGE" > /dev/null 2>&1
275105cf1079Smrg}
275205cf1079Smrg
275304007ebaSmrg# func_lalib_p file
275405cf1079Smrg# True iff FILE is a libtool '.la' library or '.lo' object file.
275504007ebaSmrg# This function is only a basic sanity check; it will hardly flush out
275604007ebaSmrg# determined imposters.
275704007ebaSmrgfunc_lalib_p ()
275804007ebaSmrg{
275904007ebaSmrg    test -f "$1" &&
276005cf1079Smrg      $SED -e 4q "$1" 2>/dev/null | func_generated_by_libtool_p
276104007ebaSmrg}
276204007ebaSmrg
276304007ebaSmrg# func_lalib_unsafe_p file
276405cf1079Smrg# True iff FILE is a libtool '.la' library or '.lo' object file.
276504007ebaSmrg# This function implements the same check as func_lalib_p without
276604007ebaSmrg# resorting to external programs.  To this end, it redirects stdin and
276704007ebaSmrg# closes it afterwards, without saving the original file descriptor.
276804007ebaSmrg# As a safety measure, use it only where a negative result would be
276905cf1079Smrg# fatal anyway.  Works if 'file' does not exist.
277004007ebaSmrgfunc_lalib_unsafe_p ()
277104007ebaSmrg{
277204007ebaSmrg    lalib_p=no
277304007ebaSmrg    if test -f "$1" && test -r "$1" && exec 5<&0 <"$1"; then
277404007ebaSmrg	for lalib_p_l in 1 2 3 4
277504007ebaSmrg	do
277604007ebaSmrg	    read lalib_p_line
277705cf1079Smrg	    case $lalib_p_line in
277804007ebaSmrg		\#\ Generated\ by\ *$PACKAGE* ) lalib_p=yes; break;;
277904007ebaSmrg	    esac
278004007ebaSmrg	done
278104007ebaSmrg	exec 0<&5 5<&-
278204007ebaSmrg    fi
278305cf1079Smrg    test yes = "$lalib_p"
278404007ebaSmrg}
278504007ebaSmrg
278604007ebaSmrg# func_ltwrapper_script_p file
278704007ebaSmrg# True iff FILE is a libtool wrapper script
278804007ebaSmrg# This function is only a basic sanity check; it will hardly flush out
278904007ebaSmrg# determined imposters.
279004007ebaSmrgfunc_ltwrapper_script_p ()
279104007ebaSmrg{
279205cf1079Smrg    test -f "$1" &&
279305cf1079Smrg      $lt_truncate_bin < "$1" 2>/dev/null | func_generated_by_libtool_p
279404007ebaSmrg}
279504007ebaSmrg
279604007ebaSmrg# func_ltwrapper_executable_p file
279704007ebaSmrg# True iff FILE is a libtool wrapper executable
279804007ebaSmrg# This function is only a basic sanity check; it will hardly flush out
279904007ebaSmrg# determined imposters.
280004007ebaSmrgfunc_ltwrapper_executable_p ()
280104007ebaSmrg{
280204007ebaSmrg    func_ltwrapper_exec_suffix=
280304007ebaSmrg    case $1 in
280404007ebaSmrg    *.exe) ;;
280504007ebaSmrg    *) func_ltwrapper_exec_suffix=.exe ;;
280604007ebaSmrg    esac
280704007ebaSmrg    $GREP "$magic_exe" "$1$func_ltwrapper_exec_suffix" >/dev/null 2>&1
280804007ebaSmrg}
280904007ebaSmrg
281004007ebaSmrg# func_ltwrapper_scriptname file
281104007ebaSmrg# Assumes file is an ltwrapper_executable
281204007ebaSmrg# uses $file to determine the appropriate filename for a
281304007ebaSmrg# temporary ltwrapper_script.
281404007ebaSmrgfunc_ltwrapper_scriptname ()
281504007ebaSmrg{
281604007ebaSmrg    func_dirname_and_basename "$1" "" "."
281704007ebaSmrg    func_stripname '' '.exe' "$func_basename_result"
281805cf1079Smrg    func_ltwrapper_scriptname_result=$func_dirname_result/$objdir/${func_stripname_result}_ltshwrapper
281904007ebaSmrg}
282004007ebaSmrg
282104007ebaSmrg# func_ltwrapper_p file
282204007ebaSmrg# True iff FILE is a libtool wrapper script or wrapper executable
282304007ebaSmrg# This function is only a basic sanity check; it will hardly flush out
282404007ebaSmrg# determined imposters.
282504007ebaSmrgfunc_ltwrapper_p ()
282604007ebaSmrg{
282704007ebaSmrg    func_ltwrapper_script_p "$1" || func_ltwrapper_executable_p "$1"
282804007ebaSmrg}
282904007ebaSmrg
283004007ebaSmrg
283104007ebaSmrg# func_execute_cmds commands fail_cmd
283204007ebaSmrg# Execute tilde-delimited COMMANDS.
283304007ebaSmrg# If FAIL_CMD is given, eval that upon failure.
283404007ebaSmrg# FAIL_CMD may read-access the current command in variable CMD!
283504007ebaSmrgfunc_execute_cmds ()
283604007ebaSmrg{
283705cf1079Smrg    $debug_cmd
283805cf1079Smrg
283904007ebaSmrg    save_ifs=$IFS; IFS='~'
284004007ebaSmrg    for cmd in $1; do
284105cf1079Smrg      IFS=$sp$nl
284204007ebaSmrg      eval cmd=\"$cmd\"
284305cf1079Smrg      IFS=$save_ifs
284404007ebaSmrg      func_show_eval "$cmd" "${2-:}"
284504007ebaSmrg    done
284604007ebaSmrg    IFS=$save_ifs
284704007ebaSmrg}
284804007ebaSmrg
284904007ebaSmrg
285004007ebaSmrg# func_source file
285104007ebaSmrg# Source FILE, adding directory component if necessary.
285204007ebaSmrg# Note that it is not necessary on cygwin/mingw to append a dot to
285304007ebaSmrg# FILE even if both FILE and FILE.exe exist: automatic-append-.exe
285404007ebaSmrg# behavior happens only for exec(3), not for open(2)!  Also, sourcing
285505cf1079Smrg# 'FILE.' does not work on cygwin managed mounts.
285604007ebaSmrgfunc_source ()
285704007ebaSmrg{
285805cf1079Smrg    $debug_cmd
285905cf1079Smrg
286004007ebaSmrg    case $1 in
286104007ebaSmrg    */* | *\\*)	. "$1" ;;
286204007ebaSmrg    *)		. "./$1" ;;
286304007ebaSmrg    esac
286404007ebaSmrg}
286504007ebaSmrg
286604007ebaSmrg
286704007ebaSmrg# func_resolve_sysroot PATH
286804007ebaSmrg# Replace a leading = in PATH with a sysroot.  Store the result into
286904007ebaSmrg# func_resolve_sysroot_result
287004007ebaSmrgfunc_resolve_sysroot ()
287104007ebaSmrg{
287204007ebaSmrg  func_resolve_sysroot_result=$1
287304007ebaSmrg  case $func_resolve_sysroot_result in
287404007ebaSmrg  =*)
287504007ebaSmrg    func_stripname '=' '' "$func_resolve_sysroot_result"
287604007ebaSmrg    func_resolve_sysroot_result=$lt_sysroot$func_stripname_result
287704007ebaSmrg    ;;
287804007ebaSmrg  esac
287904007ebaSmrg}
288004007ebaSmrg
288104007ebaSmrg# func_replace_sysroot PATH
288204007ebaSmrg# If PATH begins with the sysroot, replace it with = and
288304007ebaSmrg# store the result into func_replace_sysroot_result.
288404007ebaSmrgfunc_replace_sysroot ()
288504007ebaSmrg{
288605cf1079Smrg  case $lt_sysroot:$1 in
288704007ebaSmrg  ?*:"$lt_sysroot"*)
288804007ebaSmrg    func_stripname "$lt_sysroot" '' "$1"
288905cf1079Smrg    func_replace_sysroot_result='='$func_stripname_result
289004007ebaSmrg    ;;
289104007ebaSmrg  *)
289204007ebaSmrg    # Including no sysroot.
289304007ebaSmrg    func_replace_sysroot_result=$1
289404007ebaSmrg    ;;
289504007ebaSmrg  esac
289604007ebaSmrg}
289704007ebaSmrg
289804007ebaSmrg# func_infer_tag arg
289904007ebaSmrg# Infer tagged configuration to use if any are available and
290004007ebaSmrg# if one wasn't chosen via the "--tag" command line option.
290104007ebaSmrg# Only attempt this if the compiler in the base compile
290204007ebaSmrg# command doesn't match the default compiler.
290304007ebaSmrg# arg is usually of the form 'gcc ...'
290404007ebaSmrgfunc_infer_tag ()
290504007ebaSmrg{
290605cf1079Smrg    $debug_cmd
290705cf1079Smrg
290804007ebaSmrg    if test -n "$available_tags" && test -z "$tagname"; then
290904007ebaSmrg      CC_quoted=
291004007ebaSmrg      for arg in $CC; do
291104007ebaSmrg	func_append_quoted CC_quoted "$arg"
291204007ebaSmrg      done
291304007ebaSmrg      CC_expanded=`func_echo_all $CC`
291404007ebaSmrg      CC_quoted_expanded=`func_echo_all $CC_quoted`
291504007ebaSmrg      case $@ in
291604007ebaSmrg      # Blanks in the command may have been stripped by the calling shell,
291704007ebaSmrg      # but not from the CC environment variable when configure was run.
291804007ebaSmrg      " $CC "* | "$CC "* | " $CC_expanded "* | "$CC_expanded "* | \
291904007ebaSmrg      " $CC_quoted"* | "$CC_quoted "* | " $CC_quoted_expanded "* | "$CC_quoted_expanded "*) ;;
292004007ebaSmrg      # Blanks at the start of $base_compile will cause this to fail
292104007ebaSmrg      # if we don't check for them as well.
292204007ebaSmrg      *)
292304007ebaSmrg	for z in $available_tags; do
292404007ebaSmrg	  if $GREP "^# ### BEGIN LIBTOOL TAG CONFIG: $z$" < "$progpath" > /dev/null; then
292504007ebaSmrg	    # Evaluate the configuration.
292605cf1079Smrg	    eval "`$SED -n -e '/^# ### BEGIN LIBTOOL TAG CONFIG: '$z'$/,/^# ### END LIBTOOL TAG CONFIG: '$z'$/p' < $progpath`"
292704007ebaSmrg	    CC_quoted=
292804007ebaSmrg	    for arg in $CC; do
292904007ebaSmrg	      # Double-quote args containing other shell metacharacters.
293004007ebaSmrg	      func_append_quoted CC_quoted "$arg"
293104007ebaSmrg	    done
293204007ebaSmrg	    CC_expanded=`func_echo_all $CC`
293304007ebaSmrg	    CC_quoted_expanded=`func_echo_all $CC_quoted`
293404007ebaSmrg	    case "$@ " in
293504007ebaSmrg	    " $CC "* | "$CC "* | " $CC_expanded "* | "$CC_expanded "* | \
293604007ebaSmrg	    " $CC_quoted"* | "$CC_quoted "* | " $CC_quoted_expanded "* | "$CC_quoted_expanded "*)
293704007ebaSmrg	      # The compiler in the base compile command matches
293804007ebaSmrg	      # the one in the tagged configuration.
293904007ebaSmrg	      # Assume this is the tagged configuration we want.
294004007ebaSmrg	      tagname=$z
294104007ebaSmrg	      break
294204007ebaSmrg	      ;;
294304007ebaSmrg	    esac
294404007ebaSmrg	  fi
294504007ebaSmrg	done
294604007ebaSmrg	# If $tagname still isn't set, then no tagged configuration
294704007ebaSmrg	# was found and let the user know that the "--tag" command
294804007ebaSmrg	# line option must be used.
294904007ebaSmrg	if test -z "$tagname"; then
295004007ebaSmrg	  func_echo "unable to infer tagged configuration"
295105cf1079Smrg	  func_fatal_error "specify a tag with '--tag'"
295204007ebaSmrg#	else
295304007ebaSmrg#	  func_verbose "using $tagname tagged configuration"
295404007ebaSmrg	fi
295504007ebaSmrg	;;
295604007ebaSmrg      esac
295704007ebaSmrg    fi
295804007ebaSmrg}
295904007ebaSmrg
296004007ebaSmrg
296104007ebaSmrg
296204007ebaSmrg# func_write_libtool_object output_name pic_name nonpic_name
296304007ebaSmrg# Create a libtool object file (analogous to a ".la" file),
296404007ebaSmrg# but don't create it if we're doing a dry run.
296504007ebaSmrgfunc_write_libtool_object ()
296604007ebaSmrg{
296705cf1079Smrg    write_libobj=$1
296805cf1079Smrg    if test yes = "$build_libtool_libs"; then
296905cf1079Smrg      write_lobj=\'$2\'
297004007ebaSmrg    else
297104007ebaSmrg      write_lobj=none
297204007ebaSmrg    fi
297304007ebaSmrg
297405cf1079Smrg    if test yes = "$build_old_libs"; then
297505cf1079Smrg      write_oldobj=\'$3\'
297604007ebaSmrg    else
297704007ebaSmrg      write_oldobj=none
297804007ebaSmrg    fi
297904007ebaSmrg
298004007ebaSmrg    $opt_dry_run || {
298104007ebaSmrg      cat >${write_libobj}T <<EOF
298204007ebaSmrg# $write_libobj - a libtool object file
298305cf1079Smrg# Generated by $PROGRAM (GNU $PACKAGE) $VERSION
298404007ebaSmrg#
298504007ebaSmrg# Please DO NOT delete this file!
298604007ebaSmrg# It is necessary for linking the library.
298704007ebaSmrg
298804007ebaSmrg# Name of the PIC object.
298904007ebaSmrgpic_object=$write_lobj
299004007ebaSmrg
299104007ebaSmrg# Name of the non-PIC object
299204007ebaSmrgnon_pic_object=$write_oldobj
299304007ebaSmrg
299404007ebaSmrgEOF
299505cf1079Smrg      $MV "${write_libobj}T" "$write_libobj"
299604007ebaSmrg    }
299704007ebaSmrg}
299804007ebaSmrg
299904007ebaSmrg
300004007ebaSmrg##################################################
300104007ebaSmrg# FILE NAME AND PATH CONVERSION HELPER FUNCTIONS #
300204007ebaSmrg##################################################
300304007ebaSmrg
300404007ebaSmrg# func_convert_core_file_wine_to_w32 ARG
300504007ebaSmrg# Helper function used by file name conversion functions when $build is *nix,
300604007ebaSmrg# and $host is mingw, cygwin, or some other w32 environment. Relies on a
300704007ebaSmrg# correctly configured wine environment available, with the winepath program
300804007ebaSmrg# in $build's $PATH.
300904007ebaSmrg#
301004007ebaSmrg# ARG is the $build file name to be converted to w32 format.
301104007ebaSmrg# Result is available in $func_convert_core_file_wine_to_w32_result, and will
301204007ebaSmrg# be empty on error (or when ARG is empty)
301304007ebaSmrgfunc_convert_core_file_wine_to_w32 ()
301404007ebaSmrg{
301505cf1079Smrg  $debug_cmd
301605cf1079Smrg
301705cf1079Smrg  func_convert_core_file_wine_to_w32_result=$1
301804007ebaSmrg  if test -n "$1"; then
301904007ebaSmrg    # Unfortunately, winepath does not exit with a non-zero error code, so we
302004007ebaSmrg    # are forced to check the contents of stdout. On the other hand, if the
302104007ebaSmrg    # command is not found, the shell will set an exit code of 127 and print
302204007ebaSmrg    # *an error message* to stdout. So we must check for both error code of
302304007ebaSmrg    # zero AND non-empty stdout, which explains the odd construction:
302404007ebaSmrg    func_convert_core_file_wine_to_w32_tmp=`winepath -w "$1" 2>/dev/null`
302505cf1079Smrg    if test "$?" -eq 0 && test -n "$func_convert_core_file_wine_to_w32_tmp"; then
302604007ebaSmrg      func_convert_core_file_wine_to_w32_result=`$ECHO "$func_convert_core_file_wine_to_w32_tmp" |
302705cf1079Smrg        $SED -e "$sed_naive_backslashify"`
302804007ebaSmrg    else
302904007ebaSmrg      func_convert_core_file_wine_to_w32_result=
303004007ebaSmrg    fi
303104007ebaSmrg  fi
303204007ebaSmrg}
303304007ebaSmrg# end: func_convert_core_file_wine_to_w32
303404007ebaSmrg
303504007ebaSmrg
303604007ebaSmrg# func_convert_core_path_wine_to_w32 ARG
303704007ebaSmrg# Helper function used by path conversion functions when $build is *nix, and
303804007ebaSmrg# $host is mingw, cygwin, or some other w32 environment. Relies on a correctly
303904007ebaSmrg# configured wine environment available, with the winepath program in $build's
304004007ebaSmrg# $PATH. Assumes ARG has no leading or trailing path separator characters.
304104007ebaSmrg#
304204007ebaSmrg# ARG is path to be converted from $build format to win32.
304304007ebaSmrg# Result is available in $func_convert_core_path_wine_to_w32_result.
304404007ebaSmrg# Unconvertible file (directory) names in ARG are skipped; if no directory names
304504007ebaSmrg# are convertible, then the result may be empty.
304604007ebaSmrgfunc_convert_core_path_wine_to_w32 ()
304704007ebaSmrg{
304805cf1079Smrg  $debug_cmd
304905cf1079Smrg
305004007ebaSmrg  # unfortunately, winepath doesn't convert paths, only file names
305105cf1079Smrg  func_convert_core_path_wine_to_w32_result=
305204007ebaSmrg  if test -n "$1"; then
305304007ebaSmrg    oldIFS=$IFS
305404007ebaSmrg    IFS=:
305504007ebaSmrg    for func_convert_core_path_wine_to_w32_f in $1; do
305604007ebaSmrg      IFS=$oldIFS
305704007ebaSmrg      func_convert_core_file_wine_to_w32 "$func_convert_core_path_wine_to_w32_f"
305805cf1079Smrg      if test -n "$func_convert_core_file_wine_to_w32_result"; then
305904007ebaSmrg        if test -z "$func_convert_core_path_wine_to_w32_result"; then
306005cf1079Smrg          func_convert_core_path_wine_to_w32_result=$func_convert_core_file_wine_to_w32_result
306104007ebaSmrg        else
306204007ebaSmrg          func_append func_convert_core_path_wine_to_w32_result ";$func_convert_core_file_wine_to_w32_result"
306304007ebaSmrg        fi
306404007ebaSmrg      fi
306504007ebaSmrg    done
306604007ebaSmrg    IFS=$oldIFS
306704007ebaSmrg  fi
306804007ebaSmrg}
306904007ebaSmrg# end: func_convert_core_path_wine_to_w32
307004007ebaSmrg
307104007ebaSmrg
307204007ebaSmrg# func_cygpath ARGS...
307304007ebaSmrg# Wrapper around calling the cygpath program via LT_CYGPATH. This is used when
307404007ebaSmrg# when (1) $build is *nix and Cygwin is hosted via a wine environment; or (2)
307504007ebaSmrg# $build is MSYS and $host is Cygwin, or (3) $build is Cygwin. In case (1) or
307604007ebaSmrg# (2), returns the Cygwin file name or path in func_cygpath_result (input
307704007ebaSmrg# file name or path is assumed to be in w32 format, as previously converted
307804007ebaSmrg# from $build's *nix or MSYS format). In case (3), returns the w32 file name
307904007ebaSmrg# or path in func_cygpath_result (input file name or path is assumed to be in
308004007ebaSmrg# Cygwin format). Returns an empty string on error.
308104007ebaSmrg#
308204007ebaSmrg# ARGS are passed to cygpath, with the last one being the file name or path to
308304007ebaSmrg# be converted.
308404007ebaSmrg#
308504007ebaSmrg# Specify the absolute *nix (or w32) name to cygpath in the LT_CYGPATH
308604007ebaSmrg# environment variable; do not put it in $PATH.
308704007ebaSmrgfunc_cygpath ()
308804007ebaSmrg{
308905cf1079Smrg  $debug_cmd
309005cf1079Smrg
309104007ebaSmrg  if test -n "$LT_CYGPATH" && test -f "$LT_CYGPATH"; then
309204007ebaSmrg    func_cygpath_result=`$LT_CYGPATH "$@" 2>/dev/null`
309304007ebaSmrg    if test "$?" -ne 0; then
309404007ebaSmrg      # on failure, ensure result is empty
309504007ebaSmrg      func_cygpath_result=
309604007ebaSmrg    fi
309704007ebaSmrg  else
309804007ebaSmrg    func_cygpath_result=
309905cf1079Smrg    func_error "LT_CYGPATH is empty or specifies non-existent file: '$LT_CYGPATH'"
310004007ebaSmrg  fi
310104007ebaSmrg}
310204007ebaSmrg#end: func_cygpath
310304007ebaSmrg
310404007ebaSmrg
310504007ebaSmrg# func_convert_core_msys_to_w32 ARG
310604007ebaSmrg# Convert file name or path ARG from MSYS format to w32 format.  Return
310704007ebaSmrg# result in func_convert_core_msys_to_w32_result.
310804007ebaSmrgfunc_convert_core_msys_to_w32 ()
310904007ebaSmrg{
311005cf1079Smrg  $debug_cmd
311105cf1079Smrg
311204007ebaSmrg  # awkward: cmd appends spaces to result
311304007ebaSmrg  func_convert_core_msys_to_w32_result=`( cmd //c echo "$1" ) 2>/dev/null |
311405cf1079Smrg    $SED -e 's/[ ]*$//' -e "$sed_naive_backslashify"`
311504007ebaSmrg}
311604007ebaSmrg#end: func_convert_core_msys_to_w32
311704007ebaSmrg
311804007ebaSmrg
311904007ebaSmrg# func_convert_file_check ARG1 ARG2
312004007ebaSmrg# Verify that ARG1 (a file name in $build format) was converted to $host
312104007ebaSmrg# format in ARG2. Otherwise, emit an error message, but continue (resetting
312204007ebaSmrg# func_to_host_file_result to ARG1).
312304007ebaSmrgfunc_convert_file_check ()
312404007ebaSmrg{
312505cf1079Smrg  $debug_cmd
312605cf1079Smrg
312705cf1079Smrg  if test -z "$2" && test -n "$1"; then
312804007ebaSmrg    func_error "Could not determine host file name corresponding to"
312905cf1079Smrg    func_error "  '$1'"
313004007ebaSmrg    func_error "Continuing, but uninstalled executables may not work."
313104007ebaSmrg    # Fallback:
313205cf1079Smrg    func_to_host_file_result=$1
313304007ebaSmrg  fi
313404007ebaSmrg}
313504007ebaSmrg# end func_convert_file_check
313604007ebaSmrg
313704007ebaSmrg
313804007ebaSmrg# func_convert_path_check FROM_PATHSEP TO_PATHSEP FROM_PATH TO_PATH
313904007ebaSmrg# Verify that FROM_PATH (a path in $build format) was converted to $host
314004007ebaSmrg# format in TO_PATH. Otherwise, emit an error message, but continue, resetting
314104007ebaSmrg# func_to_host_file_result to a simplistic fallback value (see below).
314204007ebaSmrgfunc_convert_path_check ()
314304007ebaSmrg{
314405cf1079Smrg  $debug_cmd
314505cf1079Smrg
314604007ebaSmrg  if test -z "$4" && test -n "$3"; then
314704007ebaSmrg    func_error "Could not determine the host path corresponding to"
314805cf1079Smrg    func_error "  '$3'"
314904007ebaSmrg    func_error "Continuing, but uninstalled executables may not work."
315004007ebaSmrg    # Fallback.  This is a deliberately simplistic "conversion" and
315104007ebaSmrg    # should not be "improved".  See libtool.info.
315204007ebaSmrg    if test "x$1" != "x$2"; then
315304007ebaSmrg      lt_replace_pathsep_chars="s|$1|$2|g"
315404007ebaSmrg      func_to_host_path_result=`echo "$3" |
315504007ebaSmrg        $SED -e "$lt_replace_pathsep_chars"`
315604007ebaSmrg    else
315705cf1079Smrg      func_to_host_path_result=$3
315804007ebaSmrg    fi
315904007ebaSmrg  fi
316004007ebaSmrg}
316104007ebaSmrg# end func_convert_path_check
316204007ebaSmrg
316304007ebaSmrg
316404007ebaSmrg# func_convert_path_front_back_pathsep FRONTPAT BACKPAT REPL ORIG
316504007ebaSmrg# Modifies func_to_host_path_result by prepending REPL if ORIG matches FRONTPAT
316604007ebaSmrg# and appending REPL if ORIG matches BACKPAT.
316704007ebaSmrgfunc_convert_path_front_back_pathsep ()
316804007ebaSmrg{
316905cf1079Smrg  $debug_cmd
317005cf1079Smrg
317104007ebaSmrg  case $4 in
317205cf1079Smrg  $1 ) func_to_host_path_result=$3$func_to_host_path_result
317304007ebaSmrg    ;;
317404007ebaSmrg  esac
317504007ebaSmrg  case $4 in
317604007ebaSmrg  $2 ) func_append func_to_host_path_result "$3"
317704007ebaSmrg    ;;
317804007ebaSmrg  esac
317904007ebaSmrg}
318004007ebaSmrg# end func_convert_path_front_back_pathsep
318104007ebaSmrg
318204007ebaSmrg
318304007ebaSmrg##################################################
318404007ebaSmrg# $build to $host FILE NAME CONVERSION FUNCTIONS #
318504007ebaSmrg##################################################
318605cf1079Smrg# invoked via '$to_host_file_cmd ARG'
318704007ebaSmrg#
318804007ebaSmrg# In each case, ARG is the path to be converted from $build to $host format.
318904007ebaSmrg# Result will be available in $func_to_host_file_result.
319004007ebaSmrg
319104007ebaSmrg
319204007ebaSmrg# func_to_host_file ARG
319304007ebaSmrg# Converts the file name ARG from $build format to $host format. Return result
319404007ebaSmrg# in func_to_host_file_result.
319504007ebaSmrgfunc_to_host_file ()
319604007ebaSmrg{
319705cf1079Smrg  $debug_cmd
319805cf1079Smrg
319904007ebaSmrg  $to_host_file_cmd "$1"
320004007ebaSmrg}
320104007ebaSmrg# end func_to_host_file
320204007ebaSmrg
320304007ebaSmrg
320404007ebaSmrg# func_to_tool_file ARG LAZY
320504007ebaSmrg# converts the file name ARG from $build format to toolchain format. Return
320604007ebaSmrg# result in func_to_tool_file_result.  If the conversion in use is listed
320704007ebaSmrg# in (the comma separated) LAZY, no conversion takes place.
320804007ebaSmrgfunc_to_tool_file ()
320904007ebaSmrg{
321005cf1079Smrg  $debug_cmd
321105cf1079Smrg
321204007ebaSmrg  case ,$2, in
321304007ebaSmrg    *,"$to_tool_file_cmd",*)
321404007ebaSmrg      func_to_tool_file_result=$1
321504007ebaSmrg      ;;
321604007ebaSmrg    *)
321704007ebaSmrg      $to_tool_file_cmd "$1"
321804007ebaSmrg      func_to_tool_file_result=$func_to_host_file_result
321904007ebaSmrg      ;;
322004007ebaSmrg  esac
322104007ebaSmrg}
322204007ebaSmrg# end func_to_tool_file
322304007ebaSmrg
322404007ebaSmrg
322504007ebaSmrg# func_convert_file_noop ARG
322604007ebaSmrg# Copy ARG to func_to_host_file_result.
322704007ebaSmrgfunc_convert_file_noop ()
322804007ebaSmrg{
322905cf1079Smrg  func_to_host_file_result=$1
323004007ebaSmrg}
323104007ebaSmrg# end func_convert_file_noop
323204007ebaSmrg
323304007ebaSmrg
323404007ebaSmrg# func_convert_file_msys_to_w32 ARG
323504007ebaSmrg# Convert file name ARG from (mingw) MSYS to (mingw) w32 format; automatic
323604007ebaSmrg# conversion to w32 is not available inside the cwrapper.  Returns result in
323704007ebaSmrg# func_to_host_file_result.
323804007ebaSmrgfunc_convert_file_msys_to_w32 ()
323904007ebaSmrg{
324005cf1079Smrg  $debug_cmd
324105cf1079Smrg
324205cf1079Smrg  func_to_host_file_result=$1
324304007ebaSmrg  if test -n "$1"; then
324404007ebaSmrg    func_convert_core_msys_to_w32 "$1"
324505cf1079Smrg    func_to_host_file_result=$func_convert_core_msys_to_w32_result
324604007ebaSmrg  fi
324704007ebaSmrg  func_convert_file_check "$1" "$func_to_host_file_result"
324804007ebaSmrg}
324904007ebaSmrg# end func_convert_file_msys_to_w32
325004007ebaSmrg
325104007ebaSmrg
325204007ebaSmrg# func_convert_file_cygwin_to_w32 ARG
325304007ebaSmrg# Convert file name ARG from Cygwin to w32 format.  Returns result in
325404007ebaSmrg# func_to_host_file_result.
325504007ebaSmrgfunc_convert_file_cygwin_to_w32 ()
325604007ebaSmrg{
325705cf1079Smrg  $debug_cmd
325805cf1079Smrg
325905cf1079Smrg  func_to_host_file_result=$1
326004007ebaSmrg  if test -n "$1"; then
326104007ebaSmrg    # because $build is cygwin, we call "the" cygpath in $PATH; no need to use
326204007ebaSmrg    # LT_CYGPATH in this case.
326304007ebaSmrg    func_to_host_file_result=`cygpath -m "$1"`
326404007ebaSmrg  fi
326504007ebaSmrg  func_convert_file_check "$1" "$func_to_host_file_result"
326604007ebaSmrg}
326704007ebaSmrg# end func_convert_file_cygwin_to_w32
326804007ebaSmrg
326904007ebaSmrg
327004007ebaSmrg# func_convert_file_nix_to_w32 ARG
327104007ebaSmrg# Convert file name ARG from *nix to w32 format.  Requires a wine environment
327204007ebaSmrg# and a working winepath. Returns result in func_to_host_file_result.
327304007ebaSmrgfunc_convert_file_nix_to_w32 ()
327404007ebaSmrg{
327505cf1079Smrg  $debug_cmd
327605cf1079Smrg
327705cf1079Smrg  func_to_host_file_result=$1
327804007ebaSmrg  if test -n "$1"; then
327904007ebaSmrg    func_convert_core_file_wine_to_w32 "$1"
328005cf1079Smrg    func_to_host_file_result=$func_convert_core_file_wine_to_w32_result
328104007ebaSmrg  fi
328204007ebaSmrg  func_convert_file_check "$1" "$func_to_host_file_result"
328304007ebaSmrg}
328404007ebaSmrg# end func_convert_file_nix_to_w32
328504007ebaSmrg
328604007ebaSmrg
328704007ebaSmrg# func_convert_file_msys_to_cygwin ARG
328804007ebaSmrg# Convert file name ARG from MSYS to Cygwin format.  Requires LT_CYGPATH set.
328904007ebaSmrg# Returns result in func_to_host_file_result.
329004007ebaSmrgfunc_convert_file_msys_to_cygwin ()
329104007ebaSmrg{
329205cf1079Smrg  $debug_cmd
329305cf1079Smrg
329405cf1079Smrg  func_to_host_file_result=$1
329504007ebaSmrg  if test -n "$1"; then
329604007ebaSmrg    func_convert_core_msys_to_w32 "$1"
329704007ebaSmrg    func_cygpath -u "$func_convert_core_msys_to_w32_result"
329805cf1079Smrg    func_to_host_file_result=$func_cygpath_result
329904007ebaSmrg  fi
330004007ebaSmrg  func_convert_file_check "$1" "$func_to_host_file_result"
330104007ebaSmrg}
330204007ebaSmrg# end func_convert_file_msys_to_cygwin
330304007ebaSmrg
330404007ebaSmrg
330504007ebaSmrg# func_convert_file_nix_to_cygwin ARG
330604007ebaSmrg# Convert file name ARG from *nix to Cygwin format.  Requires Cygwin installed
330704007ebaSmrg# in a wine environment, working winepath, and LT_CYGPATH set.  Returns result
330804007ebaSmrg# in func_to_host_file_result.
330904007ebaSmrgfunc_convert_file_nix_to_cygwin ()
331004007ebaSmrg{
331105cf1079Smrg  $debug_cmd
331205cf1079Smrg
331305cf1079Smrg  func_to_host_file_result=$1
331404007ebaSmrg  if test -n "$1"; then
331504007ebaSmrg    # convert from *nix to w32, then use cygpath to convert from w32 to cygwin.
331604007ebaSmrg    func_convert_core_file_wine_to_w32 "$1"
331704007ebaSmrg    func_cygpath -u "$func_convert_core_file_wine_to_w32_result"
331805cf1079Smrg    func_to_host_file_result=$func_cygpath_result
331904007ebaSmrg  fi
332004007ebaSmrg  func_convert_file_check "$1" "$func_to_host_file_result"
332104007ebaSmrg}
332204007ebaSmrg# end func_convert_file_nix_to_cygwin
332304007ebaSmrg
332404007ebaSmrg
332504007ebaSmrg#############################################
332604007ebaSmrg# $build to $host PATH CONVERSION FUNCTIONS #
332704007ebaSmrg#############################################
332805cf1079Smrg# invoked via '$to_host_path_cmd ARG'
332904007ebaSmrg#
333004007ebaSmrg# In each case, ARG is the path to be converted from $build to $host format.
333104007ebaSmrg# The result will be available in $func_to_host_path_result.
333204007ebaSmrg#
333304007ebaSmrg# Path separators are also converted from $build format to $host format.  If
333404007ebaSmrg# ARG begins or ends with a path separator character, it is preserved (but
333504007ebaSmrg# converted to $host format) on output.
333604007ebaSmrg#
333704007ebaSmrg# All path conversion functions are named using the following convention:
333804007ebaSmrg#   file name conversion function    : func_convert_file_X_to_Y ()
333904007ebaSmrg#   path conversion function         : func_convert_path_X_to_Y ()
334004007ebaSmrg# where, for any given $build/$host combination the 'X_to_Y' value is the
334104007ebaSmrg# same.  If conversion functions are added for new $build/$host combinations,
334204007ebaSmrg# the two new functions must follow this pattern, or func_init_to_host_path_cmd
334304007ebaSmrg# will break.
334404007ebaSmrg
334504007ebaSmrg
334604007ebaSmrg# func_init_to_host_path_cmd
334704007ebaSmrg# Ensures that function "pointer" variable $to_host_path_cmd is set to the
334804007ebaSmrg# appropriate value, based on the value of $to_host_file_cmd.
334904007ebaSmrgto_host_path_cmd=
335004007ebaSmrgfunc_init_to_host_path_cmd ()
335104007ebaSmrg{
335205cf1079Smrg  $debug_cmd
335305cf1079Smrg
335404007ebaSmrg  if test -z "$to_host_path_cmd"; then
335504007ebaSmrg    func_stripname 'func_convert_file_' '' "$to_host_file_cmd"
335605cf1079Smrg    to_host_path_cmd=func_convert_path_$func_stripname_result
335704007ebaSmrg  fi
335804007ebaSmrg}
335904007ebaSmrg
336004007ebaSmrg
336104007ebaSmrg# func_to_host_path ARG
336204007ebaSmrg# Converts the path ARG from $build format to $host format. Return result
336304007ebaSmrg# in func_to_host_path_result.
336404007ebaSmrgfunc_to_host_path ()
336504007ebaSmrg{
336605cf1079Smrg  $debug_cmd
336705cf1079Smrg
336804007ebaSmrg  func_init_to_host_path_cmd
336904007ebaSmrg  $to_host_path_cmd "$1"
337004007ebaSmrg}
337104007ebaSmrg# end func_to_host_path
337204007ebaSmrg
337304007ebaSmrg
337404007ebaSmrg# func_convert_path_noop ARG
337504007ebaSmrg# Copy ARG to func_to_host_path_result.
337604007ebaSmrgfunc_convert_path_noop ()
337704007ebaSmrg{
337805cf1079Smrg  func_to_host_path_result=$1
337904007ebaSmrg}
338004007ebaSmrg# end func_convert_path_noop
338104007ebaSmrg
338204007ebaSmrg
338304007ebaSmrg# func_convert_path_msys_to_w32 ARG
338404007ebaSmrg# Convert path ARG from (mingw) MSYS to (mingw) w32 format; automatic
338504007ebaSmrg# conversion to w32 is not available inside the cwrapper.  Returns result in
338604007ebaSmrg# func_to_host_path_result.
338704007ebaSmrgfunc_convert_path_msys_to_w32 ()
338804007ebaSmrg{
338905cf1079Smrg  $debug_cmd
339005cf1079Smrg
339105cf1079Smrg  func_to_host_path_result=$1
339204007ebaSmrg  if test -n "$1"; then
339304007ebaSmrg    # Remove leading and trailing path separator characters from ARG.  MSYS
339404007ebaSmrg    # behavior is inconsistent here; cygpath turns them into '.;' and ';.';
339504007ebaSmrg    # and winepath ignores them completely.
339604007ebaSmrg    func_stripname : : "$1"
339704007ebaSmrg    func_to_host_path_tmp1=$func_stripname_result
339804007ebaSmrg    func_convert_core_msys_to_w32 "$func_to_host_path_tmp1"
339905cf1079Smrg    func_to_host_path_result=$func_convert_core_msys_to_w32_result
340004007ebaSmrg    func_convert_path_check : ";" \
340104007ebaSmrg      "$func_to_host_path_tmp1" "$func_to_host_path_result"
340204007ebaSmrg    func_convert_path_front_back_pathsep ":*" "*:" ";" "$1"
340304007ebaSmrg  fi
340404007ebaSmrg}
340504007ebaSmrg# end func_convert_path_msys_to_w32
340604007ebaSmrg
340704007ebaSmrg
340804007ebaSmrg# func_convert_path_cygwin_to_w32 ARG
340904007ebaSmrg# Convert path ARG from Cygwin to w32 format.  Returns result in
341004007ebaSmrg# func_to_host_file_result.
341104007ebaSmrgfunc_convert_path_cygwin_to_w32 ()
341204007ebaSmrg{
341305cf1079Smrg  $debug_cmd
341405cf1079Smrg
341505cf1079Smrg  func_to_host_path_result=$1
341604007ebaSmrg  if test -n "$1"; then
341704007ebaSmrg    # See func_convert_path_msys_to_w32:
341804007ebaSmrg    func_stripname : : "$1"
341904007ebaSmrg    func_to_host_path_tmp1=$func_stripname_result
342004007ebaSmrg    func_to_host_path_result=`cygpath -m -p "$func_to_host_path_tmp1"`
342104007ebaSmrg    func_convert_path_check : ";" \
342204007ebaSmrg      "$func_to_host_path_tmp1" "$func_to_host_path_result"
342304007ebaSmrg    func_convert_path_front_back_pathsep ":*" "*:" ";" "$1"
342404007ebaSmrg  fi
342504007ebaSmrg}
342604007ebaSmrg# end func_convert_path_cygwin_to_w32
342704007ebaSmrg
342804007ebaSmrg
342904007ebaSmrg# func_convert_path_nix_to_w32 ARG
343004007ebaSmrg# Convert path ARG from *nix to w32 format.  Requires a wine environment and
343104007ebaSmrg# a working winepath.  Returns result in func_to_host_file_result.
343204007ebaSmrgfunc_convert_path_nix_to_w32 ()
343304007ebaSmrg{
343405cf1079Smrg  $debug_cmd
343505cf1079Smrg
343605cf1079Smrg  func_to_host_path_result=$1
343704007ebaSmrg  if test -n "$1"; then
343804007ebaSmrg    # See func_convert_path_msys_to_w32:
343904007ebaSmrg    func_stripname : : "$1"
344004007ebaSmrg    func_to_host_path_tmp1=$func_stripname_result
344104007ebaSmrg    func_convert_core_path_wine_to_w32 "$func_to_host_path_tmp1"
344205cf1079Smrg    func_to_host_path_result=$func_convert_core_path_wine_to_w32_result
344304007ebaSmrg    func_convert_path_check : ";" \
344404007ebaSmrg      "$func_to_host_path_tmp1" "$func_to_host_path_result"
344504007ebaSmrg    func_convert_path_front_back_pathsep ":*" "*:" ";" "$1"
344604007ebaSmrg  fi
344704007ebaSmrg}
344804007ebaSmrg# end func_convert_path_nix_to_w32
344904007ebaSmrg
345004007ebaSmrg
345104007ebaSmrg# func_convert_path_msys_to_cygwin ARG
345204007ebaSmrg# Convert path ARG from MSYS to Cygwin format.  Requires LT_CYGPATH set.
345304007ebaSmrg# Returns result in func_to_host_file_result.
345404007ebaSmrgfunc_convert_path_msys_to_cygwin ()
345504007ebaSmrg{
345605cf1079Smrg  $debug_cmd
345705cf1079Smrg
345805cf1079Smrg  func_to_host_path_result=$1
345904007ebaSmrg  if test -n "$1"; then
346004007ebaSmrg    # See func_convert_path_msys_to_w32:
346104007ebaSmrg    func_stripname : : "$1"
346204007ebaSmrg    func_to_host_path_tmp1=$func_stripname_result
346304007ebaSmrg    func_convert_core_msys_to_w32 "$func_to_host_path_tmp1"
346404007ebaSmrg    func_cygpath -u -p "$func_convert_core_msys_to_w32_result"
346505cf1079Smrg    func_to_host_path_result=$func_cygpath_result
346604007ebaSmrg    func_convert_path_check : : \
346704007ebaSmrg      "$func_to_host_path_tmp1" "$func_to_host_path_result"
346804007ebaSmrg    func_convert_path_front_back_pathsep ":*" "*:" : "$1"
346904007ebaSmrg  fi
347004007ebaSmrg}
347104007ebaSmrg# end func_convert_path_msys_to_cygwin
347204007ebaSmrg
347304007ebaSmrg
347404007ebaSmrg# func_convert_path_nix_to_cygwin ARG
347504007ebaSmrg# Convert path ARG from *nix to Cygwin format.  Requires Cygwin installed in a
347604007ebaSmrg# a wine environment, working winepath, and LT_CYGPATH set.  Returns result in
347704007ebaSmrg# func_to_host_file_result.
347804007ebaSmrgfunc_convert_path_nix_to_cygwin ()
347904007ebaSmrg{
348005cf1079Smrg  $debug_cmd
348105cf1079Smrg
348205cf1079Smrg  func_to_host_path_result=$1
348304007ebaSmrg  if test -n "$1"; then
348404007ebaSmrg    # Remove leading and trailing path separator characters from
348504007ebaSmrg    # ARG. msys behavior is inconsistent here, cygpath turns them
348604007ebaSmrg    # into '.;' and ';.', and winepath ignores them completely.
348704007ebaSmrg    func_stripname : : "$1"
348804007ebaSmrg    func_to_host_path_tmp1=$func_stripname_result
348904007ebaSmrg    func_convert_core_path_wine_to_w32 "$func_to_host_path_tmp1"
349004007ebaSmrg    func_cygpath -u -p "$func_convert_core_path_wine_to_w32_result"
349105cf1079Smrg    func_to_host_path_result=$func_cygpath_result
349204007ebaSmrg    func_convert_path_check : : \
349304007ebaSmrg      "$func_to_host_path_tmp1" "$func_to_host_path_result"
349404007ebaSmrg    func_convert_path_front_back_pathsep ":*" "*:" : "$1"
349504007ebaSmrg  fi
349604007ebaSmrg}
349704007ebaSmrg# end func_convert_path_nix_to_cygwin
349804007ebaSmrg
349904007ebaSmrg
350005cf1079Smrg# func_dll_def_p FILE
350105cf1079Smrg# True iff FILE is a Windows DLL '.def' file.
350205cf1079Smrg# Keep in sync with _LT_DLL_DEF_P in libtool.m4
350305cf1079Smrgfunc_dll_def_p ()
350405cf1079Smrg{
350505cf1079Smrg  $debug_cmd
350605cf1079Smrg
350705cf1079Smrg  func_dll_def_p_tmp=`$SED -n \
350805cf1079Smrg    -e 's/^[	 ]*//' \
350905cf1079Smrg    -e '/^\(;.*\)*$/d' \
351005cf1079Smrg    -e 's/^\(EXPORTS\|LIBRARY\)\([	 ].*\)*$/DEF/p' \
351105cf1079Smrg    -e q \
351205cf1079Smrg    "$1"`
351305cf1079Smrg  test DEF = "$func_dll_def_p_tmp"
351405cf1079Smrg}
351505cf1079Smrg
351605cf1079Smrg
351704007ebaSmrg# func_mode_compile arg...
351804007ebaSmrgfunc_mode_compile ()
351904007ebaSmrg{
352005cf1079Smrg    $debug_cmd
352105cf1079Smrg
352204007ebaSmrg    # Get the compilation command and the source file.
352304007ebaSmrg    base_compile=
352405cf1079Smrg    srcfile=$nonopt  #  always keep a non-empty value in "srcfile"
352504007ebaSmrg    suppress_opt=yes
352604007ebaSmrg    suppress_output=
352704007ebaSmrg    arg_mode=normal
352804007ebaSmrg    libobj=
352904007ebaSmrg    later=
353004007ebaSmrg    pie_flag=
353104007ebaSmrg
353204007ebaSmrg    for arg
353304007ebaSmrg    do
353404007ebaSmrg      case $arg_mode in
353504007ebaSmrg      arg  )
353604007ebaSmrg	# do not "continue".  Instead, add this to base_compile
353705cf1079Smrg	lastarg=$arg
353804007ebaSmrg	arg_mode=normal
353904007ebaSmrg	;;
354004007ebaSmrg
354104007ebaSmrg      target )
354205cf1079Smrg	libobj=$arg
354304007ebaSmrg	arg_mode=normal
354404007ebaSmrg	continue
354504007ebaSmrg	;;
354604007ebaSmrg
354704007ebaSmrg      normal )
354804007ebaSmrg	# Accept any command-line options.
354904007ebaSmrg	case $arg in
355004007ebaSmrg	-o)
355104007ebaSmrg	  test -n "$libobj" && \
355205cf1079Smrg	    func_fatal_error "you cannot specify '-o' more than once"
355304007ebaSmrg	  arg_mode=target
355404007ebaSmrg	  continue
355504007ebaSmrg	  ;;
355604007ebaSmrg
355704007ebaSmrg	-pie | -fpie | -fPIE)
355804007ebaSmrg          func_append pie_flag " $arg"
355904007ebaSmrg	  continue
356004007ebaSmrg	  ;;
356104007ebaSmrg
356204007ebaSmrg	-shared | -static | -prefer-pic | -prefer-non-pic)
356304007ebaSmrg	  func_append later " $arg"
356404007ebaSmrg	  continue
356504007ebaSmrg	  ;;
356604007ebaSmrg
356704007ebaSmrg	-no-suppress)
356804007ebaSmrg	  suppress_opt=no
356904007ebaSmrg	  continue
357004007ebaSmrg	  ;;
357104007ebaSmrg
357204007ebaSmrg	-Xcompiler)
357304007ebaSmrg	  arg_mode=arg  #  the next one goes into the "base_compile" arg list
357404007ebaSmrg	  continue      #  The current "srcfile" will either be retained or
357504007ebaSmrg	  ;;            #  replaced later.  I would guess that would be a bug.
357604007ebaSmrg
357704007ebaSmrg	-Wc,*)
357804007ebaSmrg	  func_stripname '-Wc,' '' "$arg"
357904007ebaSmrg	  args=$func_stripname_result
358004007ebaSmrg	  lastarg=
358105cf1079Smrg	  save_ifs=$IFS; IFS=,
358204007ebaSmrg	  for arg in $args; do
358305cf1079Smrg	    IFS=$save_ifs
358404007ebaSmrg	    func_append_quoted lastarg "$arg"
358504007ebaSmrg	  done
358605cf1079Smrg	  IFS=$save_ifs
358704007ebaSmrg	  func_stripname ' ' '' "$lastarg"
358804007ebaSmrg	  lastarg=$func_stripname_result
358904007ebaSmrg
359004007ebaSmrg	  # Add the arguments to base_compile.
359104007ebaSmrg	  func_append base_compile " $lastarg"
359204007ebaSmrg	  continue
359304007ebaSmrg	  ;;
359404007ebaSmrg
359504007ebaSmrg	*)
359604007ebaSmrg	  # Accept the current argument as the source file.
359704007ebaSmrg	  # The previous "srcfile" becomes the current argument.
359804007ebaSmrg	  #
359905cf1079Smrg	  lastarg=$srcfile
360005cf1079Smrg	  srcfile=$arg
360104007ebaSmrg	  ;;
360204007ebaSmrg	esac  #  case $arg
360304007ebaSmrg	;;
360404007ebaSmrg      esac    #  case $arg_mode
360504007ebaSmrg
360604007ebaSmrg      # Aesthetically quote the previous argument.
360704007ebaSmrg      func_append_quoted base_compile "$lastarg"
360804007ebaSmrg    done # for arg
360904007ebaSmrg
361004007ebaSmrg    case $arg_mode in
361104007ebaSmrg    arg)
361204007ebaSmrg      func_fatal_error "you must specify an argument for -Xcompile"
361304007ebaSmrg      ;;
361404007ebaSmrg    target)
361505cf1079Smrg      func_fatal_error "you must specify a target with '-o'"
361604007ebaSmrg      ;;
361704007ebaSmrg    *)
361804007ebaSmrg      # Get the name of the library object.
361904007ebaSmrg      test -z "$libobj" && {
362004007ebaSmrg	func_basename "$srcfile"
362105cf1079Smrg	libobj=$func_basename_result
362204007ebaSmrg      }
362304007ebaSmrg      ;;
362404007ebaSmrg    esac
362504007ebaSmrg
362604007ebaSmrg    # Recognize several different file suffixes.
362704007ebaSmrg    # If the user specifies -o file.o, it is replaced with file.lo
362804007ebaSmrg    case $libobj in
362904007ebaSmrg    *.[cCFSifmso] | \
363004007ebaSmrg    *.ada | *.adb | *.ads | *.asm | \
363104007ebaSmrg    *.c++ | *.cc | *.ii | *.class | *.cpp | *.cxx | \
363204007ebaSmrg    *.[fF][09]? | *.for | *.java | *.go | *.obj | *.sx | *.cu | *.cup)
363304007ebaSmrg      func_xform "$libobj"
363404007ebaSmrg      libobj=$func_xform_result
363504007ebaSmrg      ;;
363604007ebaSmrg    esac
363704007ebaSmrg
363804007ebaSmrg    case $libobj in
363904007ebaSmrg    *.lo) func_lo2o "$libobj"; obj=$func_lo2o_result ;;
364004007ebaSmrg    *)
364105cf1079Smrg      func_fatal_error "cannot determine name of library object from '$libobj'"
364204007ebaSmrg      ;;
364304007ebaSmrg    esac
364404007ebaSmrg
364504007ebaSmrg    func_infer_tag $base_compile
364604007ebaSmrg
364704007ebaSmrg    for arg in $later; do
364804007ebaSmrg      case $arg in
364904007ebaSmrg      -shared)
365005cf1079Smrg	test yes = "$build_libtool_libs" \
365105cf1079Smrg	  || func_fatal_configuration "cannot build a shared library"
365204007ebaSmrg	build_old_libs=no
365304007ebaSmrg	continue
365404007ebaSmrg	;;
365504007ebaSmrg
365604007ebaSmrg      -static)
365704007ebaSmrg	build_libtool_libs=no
365804007ebaSmrg	build_old_libs=yes
365904007ebaSmrg	continue
366004007ebaSmrg	;;
366104007ebaSmrg
366204007ebaSmrg      -prefer-pic)
366304007ebaSmrg	pic_mode=yes
366404007ebaSmrg	continue
366504007ebaSmrg	;;
366604007ebaSmrg
366704007ebaSmrg      -prefer-non-pic)
366804007ebaSmrg	pic_mode=no
366904007ebaSmrg	continue
367004007ebaSmrg	;;
367104007ebaSmrg      esac
367204007ebaSmrg    done
367304007ebaSmrg
367479d5fcd7Smrg    func_quote_arg pretty "$libobj"
367579d5fcd7Smrg    test "X$libobj" != "X$func_quote_arg_result" \
367604007ebaSmrg      && $ECHO "X$libobj" | $GREP '[]~#^*{};<>?"'"'"'	 &()|`$[]' \
367705cf1079Smrg      && func_warning "libobj name '$libobj' may not contain shell special characters."
367804007ebaSmrg    func_dirname_and_basename "$obj" "/" ""
367905cf1079Smrg    objname=$func_basename_result
368005cf1079Smrg    xdir=$func_dirname_result
368105cf1079Smrg    lobj=$xdir$objdir/$objname
368204007ebaSmrg
368304007ebaSmrg    test -z "$base_compile" && \
368404007ebaSmrg      func_fatal_help "you must specify a compilation command"
368504007ebaSmrg
368604007ebaSmrg    # Delete any leftover library objects.
368705cf1079Smrg    if test yes = "$build_old_libs"; then
368804007ebaSmrg      removelist="$obj $lobj $libobj ${libobj}T"
368904007ebaSmrg    else
369004007ebaSmrg      removelist="$lobj $libobj ${libobj}T"
369104007ebaSmrg    fi
369204007ebaSmrg
369304007ebaSmrg    # On Cygwin there's no "real" PIC flag so we must build both object types
369404007ebaSmrg    case $host_os in
369504007ebaSmrg    cygwin* | mingw* | pw32* | os2* | cegcc*)
369604007ebaSmrg      pic_mode=default
369704007ebaSmrg      ;;
369804007ebaSmrg    esac
369905cf1079Smrg    if test no = "$pic_mode" && test pass_all != "$deplibs_check_method"; then
370004007ebaSmrg      # non-PIC code in shared libraries is not supported
370104007ebaSmrg      pic_mode=default
370204007ebaSmrg    fi
370304007ebaSmrg
370404007ebaSmrg    # Calculate the filename of the output object if compiler does
370504007ebaSmrg    # not support -o with -c
370605cf1079Smrg    if test no = "$compiler_c_o"; then
370705cf1079Smrg      output_obj=`$ECHO "$srcfile" | $SED 's%^.*/%%; s%\.[^.]*$%%'`.$objext
370805cf1079Smrg      lockfile=$output_obj.lock
370904007ebaSmrg    else
371004007ebaSmrg      output_obj=
371104007ebaSmrg      need_locks=no
371204007ebaSmrg      lockfile=
371304007ebaSmrg    fi
371404007ebaSmrg
371504007ebaSmrg    # Lock this critical section if it is needed
371604007ebaSmrg    # We use this script file to make the link, it avoids creating a new file
371705cf1079Smrg    if test yes = "$need_locks"; then
371804007ebaSmrg      until $opt_dry_run || ln "$progpath" "$lockfile" 2>/dev/null; do
371904007ebaSmrg	func_echo "Waiting for $lockfile to be removed"
372004007ebaSmrg	sleep 2
372104007ebaSmrg      done
372205cf1079Smrg    elif test warn = "$need_locks"; then
372304007ebaSmrg      if test -f "$lockfile"; then
372404007ebaSmrg	$ECHO "\
372504007ebaSmrg*** ERROR, $lockfile exists and contains:
372604007ebaSmrg`cat $lockfile 2>/dev/null`
372704007ebaSmrg
372804007ebaSmrgThis indicates that another process is trying to use the same
372904007ebaSmrgtemporary object file, and libtool could not work around it because
373005cf1079Smrgyour compiler does not support '-c' and '-o' together.  If you
373104007ebaSmrgrepeat this compilation, it may succeed, by chance, but you had better
373204007ebaSmrgavoid parallel builds (make -j) in this platform, or get a better
373304007ebaSmrgcompiler."
373404007ebaSmrg
373504007ebaSmrg	$opt_dry_run || $RM $removelist
373604007ebaSmrg	exit $EXIT_FAILURE
373704007ebaSmrg      fi
373804007ebaSmrg      func_append removelist " $output_obj"
373904007ebaSmrg      $ECHO "$srcfile" > "$lockfile"
374004007ebaSmrg    fi
374104007ebaSmrg
374204007ebaSmrg    $opt_dry_run || $RM $removelist
374304007ebaSmrg    func_append removelist " $lockfile"
374404007ebaSmrg    trap '$opt_dry_run || $RM $removelist; exit $EXIT_FAILURE' 1 2 15
374504007ebaSmrg
374604007ebaSmrg    func_to_tool_file "$srcfile" func_convert_file_msys_to_w32
374704007ebaSmrg    srcfile=$func_to_tool_file_result
374879d5fcd7Smrg    func_quote_arg pretty "$srcfile"
374979d5fcd7Smrg    qsrcfile=$func_quote_arg_result
375004007ebaSmrg
375104007ebaSmrg    # Only build a PIC object if we are building libtool libraries.
375205cf1079Smrg    if test yes = "$build_libtool_libs"; then
375304007ebaSmrg      # Without this assignment, base_compile gets emptied.
375404007ebaSmrg      fbsd_hideous_sh_bug=$base_compile
375504007ebaSmrg
375605cf1079Smrg      if test no != "$pic_mode"; then
375704007ebaSmrg	command="$base_compile $qsrcfile $pic_flag"
375804007ebaSmrg      else
375904007ebaSmrg	# Don't build PIC code
376004007ebaSmrg	command="$base_compile $qsrcfile"
376104007ebaSmrg      fi
376204007ebaSmrg
376304007ebaSmrg      func_mkdir_p "$xdir$objdir"
376404007ebaSmrg
376504007ebaSmrg      if test -z "$output_obj"; then
376604007ebaSmrg	# Place PIC objects in $objdir
376704007ebaSmrg	func_append command " -o $lobj"
376804007ebaSmrg      fi
376904007ebaSmrg
377004007ebaSmrg      func_show_eval_locale "$command"	\
377104007ebaSmrg          'test -n "$output_obj" && $RM $removelist; exit $EXIT_FAILURE'
377204007ebaSmrg
377305cf1079Smrg      if test warn = "$need_locks" &&
377404007ebaSmrg	 test "X`cat $lockfile 2>/dev/null`" != "X$srcfile"; then
377504007ebaSmrg	$ECHO "\
377604007ebaSmrg*** ERROR, $lockfile contains:
377704007ebaSmrg`cat $lockfile 2>/dev/null`
377804007ebaSmrg
377904007ebaSmrgbut it should contain:
378004007ebaSmrg$srcfile
378104007ebaSmrg
378204007ebaSmrgThis indicates that another process is trying to use the same
378304007ebaSmrgtemporary object file, and libtool could not work around it because
378405cf1079Smrgyour compiler does not support '-c' and '-o' together.  If you
378504007ebaSmrgrepeat this compilation, it may succeed, by chance, but you had better
378604007ebaSmrgavoid parallel builds (make -j) in this platform, or get a better
378704007ebaSmrgcompiler."
378804007ebaSmrg
378904007ebaSmrg	$opt_dry_run || $RM $removelist
379004007ebaSmrg	exit $EXIT_FAILURE
379104007ebaSmrg      fi
379204007ebaSmrg
379304007ebaSmrg      # Just move the object if needed, then go on to compile the next one
379404007ebaSmrg      if test -n "$output_obj" && test "X$output_obj" != "X$lobj"; then
379504007ebaSmrg	func_show_eval '$MV "$output_obj" "$lobj"' \
379604007ebaSmrg	  'error=$?; $opt_dry_run || $RM $removelist; exit $error'
379704007ebaSmrg      fi
379804007ebaSmrg
379904007ebaSmrg      # Allow error messages only from the first compilation.
380005cf1079Smrg      if test yes = "$suppress_opt"; then
380104007ebaSmrg	suppress_output=' >/dev/null 2>&1'
380204007ebaSmrg      fi
380304007ebaSmrg    fi
380404007ebaSmrg
380504007ebaSmrg    # Only build a position-dependent object if we build old libraries.
380605cf1079Smrg    if test yes = "$build_old_libs"; then
380705cf1079Smrg      if test yes != "$pic_mode"; then
380804007ebaSmrg	# Don't build PIC code
380904007ebaSmrg	command="$base_compile $qsrcfile$pie_flag"
381004007ebaSmrg      else
381104007ebaSmrg	command="$base_compile $qsrcfile $pic_flag"
381204007ebaSmrg      fi
381305cf1079Smrg      if test yes = "$compiler_c_o"; then
381404007ebaSmrg	func_append command " -o $obj"
381504007ebaSmrg      fi
381604007ebaSmrg
381704007ebaSmrg      # Suppress compiler output if we already did a PIC compilation.
381804007ebaSmrg      func_append command "$suppress_output"
381904007ebaSmrg      func_show_eval_locale "$command" \
382004007ebaSmrg        '$opt_dry_run || $RM $removelist; exit $EXIT_FAILURE'
382104007ebaSmrg
382205cf1079Smrg      if test warn = "$need_locks" &&
382304007ebaSmrg	 test "X`cat $lockfile 2>/dev/null`" != "X$srcfile"; then
382404007ebaSmrg	$ECHO "\
382504007ebaSmrg*** ERROR, $lockfile contains:
382604007ebaSmrg`cat $lockfile 2>/dev/null`
382704007ebaSmrg
382804007ebaSmrgbut it should contain:
382904007ebaSmrg$srcfile
383004007ebaSmrg
383104007ebaSmrgThis indicates that another process is trying to use the same
383204007ebaSmrgtemporary object file, and libtool could not work around it because
383305cf1079Smrgyour compiler does not support '-c' and '-o' together.  If you
383404007ebaSmrgrepeat this compilation, it may succeed, by chance, but you had better
383504007ebaSmrgavoid parallel builds (make -j) in this platform, or get a better
383604007ebaSmrgcompiler."
383704007ebaSmrg
383804007ebaSmrg	$opt_dry_run || $RM $removelist
383904007ebaSmrg	exit $EXIT_FAILURE
384004007ebaSmrg      fi
384104007ebaSmrg
384204007ebaSmrg      # Just move the object if needed
384304007ebaSmrg      if test -n "$output_obj" && test "X$output_obj" != "X$obj"; then
384404007ebaSmrg	func_show_eval '$MV "$output_obj" "$obj"' \
384504007ebaSmrg	  'error=$?; $opt_dry_run || $RM $removelist; exit $error'
384604007ebaSmrg      fi
384704007ebaSmrg    fi
384804007ebaSmrg
384904007ebaSmrg    $opt_dry_run || {
385004007ebaSmrg      func_write_libtool_object "$libobj" "$objdir/$objname" "$objname"
385104007ebaSmrg
385204007ebaSmrg      # Unlock the critical section if it was locked
385305cf1079Smrg      if test no != "$need_locks"; then
385404007ebaSmrg	removelist=$lockfile
385504007ebaSmrg        $RM "$lockfile"
385604007ebaSmrg      fi
385704007ebaSmrg    }
385804007ebaSmrg
385904007ebaSmrg    exit $EXIT_SUCCESS
386004007ebaSmrg}
386104007ebaSmrg
386204007ebaSmrg$opt_help || {
386305cf1079Smrg  test compile = "$opt_mode" && func_mode_compile ${1+"$@"}
386404007ebaSmrg}
386504007ebaSmrg
386604007ebaSmrgfunc_mode_help ()
386704007ebaSmrg{
386804007ebaSmrg    # We need to display help for each of the modes.
386904007ebaSmrg    case $opt_mode in
387004007ebaSmrg      "")
387104007ebaSmrg        # Generic help is extracted from the usage comments
387204007ebaSmrg        # at the start of this file.
387304007ebaSmrg        func_help
387404007ebaSmrg        ;;
387504007ebaSmrg
387604007ebaSmrg      clean)
387704007ebaSmrg        $ECHO \
387804007ebaSmrg"Usage: $progname [OPTION]... --mode=clean RM [RM-OPTION]... FILE...
387904007ebaSmrg
388004007ebaSmrgRemove files from the build directory.
388104007ebaSmrg
388204007ebaSmrgRM is the name of the program to use to delete files associated with each FILE
388305cf1079Smrg(typically '/bin/rm').  RM-OPTIONS are options (such as '-f') to be passed
388404007ebaSmrgto RM.
388504007ebaSmrg
388604007ebaSmrgIf FILE is a libtool library, object or program, all the files associated
388704007ebaSmrgwith it are deleted. Otherwise, only FILE itself is deleted using RM."
388804007ebaSmrg        ;;
388904007ebaSmrg
389004007ebaSmrg      compile)
389104007ebaSmrg      $ECHO \
389204007ebaSmrg"Usage: $progname [OPTION]... --mode=compile COMPILE-COMMAND... SOURCEFILE
389304007ebaSmrg
389404007ebaSmrgCompile a source file into a libtool library object.
389504007ebaSmrg
389604007ebaSmrgThis mode accepts the following additional options:
389704007ebaSmrg
389804007ebaSmrg  -o OUTPUT-FILE    set the output file name to OUTPUT-FILE
389904007ebaSmrg  -no-suppress      do not suppress compiler output for multiple passes
390004007ebaSmrg  -prefer-pic       try to build PIC objects only
390104007ebaSmrg  -prefer-non-pic   try to build non-PIC objects only
390205cf1079Smrg  -shared           do not build a '.o' file suitable for static linking
390305cf1079Smrg  -static           only build a '.o' file suitable for static linking
390479d5fcd7Smrg  -Wc,FLAG
390579d5fcd7Smrg  -Xcompiler FLAG   pass FLAG directly to the compiler
390604007ebaSmrg
390705cf1079SmrgCOMPILE-COMMAND is a command to be used in creating a 'standard' object file
390804007ebaSmrgfrom the given SOURCEFILE.
390904007ebaSmrg
391004007ebaSmrgThe output file name is determined by removing the directory component from
391105cf1079SmrgSOURCEFILE, then substituting the C source code suffix '.c' with the
391205cf1079Smrglibrary object suffix, '.lo'."
391304007ebaSmrg        ;;
391404007ebaSmrg
391504007ebaSmrg      execute)
391604007ebaSmrg        $ECHO \
391704007ebaSmrg"Usage: $progname [OPTION]... --mode=execute COMMAND [ARGS]...
391804007ebaSmrg
391904007ebaSmrgAutomatically set library path, then run a program.
392004007ebaSmrg
392104007ebaSmrgThis mode accepts the following additional options:
392204007ebaSmrg
392304007ebaSmrg  -dlopen FILE      add the directory containing FILE to the library path
392404007ebaSmrg
392505cf1079SmrgThis mode sets the library path environment variable according to '-dlopen'
392604007ebaSmrgflags.
392704007ebaSmrg
392804007ebaSmrgIf any of the ARGS are libtool executable wrappers, then they are translated
392904007ebaSmrginto their corresponding uninstalled binary, and any of their required library
393004007ebaSmrgdirectories are added to the library path.
393104007ebaSmrg
393204007ebaSmrgThen, COMMAND is executed, with ARGS as arguments."
393304007ebaSmrg        ;;
393404007ebaSmrg
393504007ebaSmrg      finish)
393604007ebaSmrg        $ECHO \
393704007ebaSmrg"Usage: $progname [OPTION]... --mode=finish [LIBDIR]...
393804007ebaSmrg
393904007ebaSmrgComplete the installation of libtool libraries.
394004007ebaSmrg
394104007ebaSmrgEach LIBDIR is a directory that contains libtool libraries.
394204007ebaSmrg
394304007ebaSmrgThe commands that this mode executes may require superuser privileges.  Use
394405cf1079Smrgthe '--dry-run' option if you just want to see what would be executed."
394504007ebaSmrg        ;;
394604007ebaSmrg
394704007ebaSmrg      install)
394804007ebaSmrg        $ECHO \
394904007ebaSmrg"Usage: $progname [OPTION]... --mode=install INSTALL-COMMAND...
395004007ebaSmrg
395104007ebaSmrgInstall executables or libraries.
395204007ebaSmrg
395304007ebaSmrgINSTALL-COMMAND is the installation command.  The first component should be
395405cf1079Smrgeither the 'install' or 'cp' program.
395504007ebaSmrg
395604007ebaSmrgThe following components of INSTALL-COMMAND are treated specially:
395704007ebaSmrg
395804007ebaSmrg  -inst-prefix-dir PREFIX-DIR  Use PREFIX-DIR as a staging area for installation
395904007ebaSmrg
396004007ebaSmrgThe rest of the components are interpreted as arguments to that command (only
396104007ebaSmrgBSD-compatible install options are recognized)."
396204007ebaSmrg        ;;
396304007ebaSmrg
396404007ebaSmrg      link)
396504007ebaSmrg        $ECHO \
396604007ebaSmrg"Usage: $progname [OPTION]... --mode=link LINK-COMMAND...
396704007ebaSmrg
396804007ebaSmrgLink object files or libraries together to form another library, or to
396904007ebaSmrgcreate an executable program.
397004007ebaSmrg
397104007ebaSmrgLINK-COMMAND is a command using the C compiler that you would use to create
397204007ebaSmrga program from several object files.
397304007ebaSmrg
397404007ebaSmrgThe following components of LINK-COMMAND are treated specially:
397504007ebaSmrg
397604007ebaSmrg  -all-static       do not do any dynamic linking at all
397704007ebaSmrg  -avoid-version    do not add a version suffix if possible
397804007ebaSmrg  -bindir BINDIR    specify path to binaries directory (for systems where
397904007ebaSmrg                    libraries must be found in the PATH setting at runtime)
398005cf1079Smrg  -dlopen FILE      '-dlpreopen' FILE if it cannot be dlopened at runtime
398104007ebaSmrg  -dlpreopen FILE   link in FILE and add its symbols to lt_preloaded_symbols
398204007ebaSmrg  -export-dynamic   allow symbols from OUTPUT-FILE to be resolved with dlsym(3)
398304007ebaSmrg  -export-symbols SYMFILE
398404007ebaSmrg                    try to export only the symbols listed in SYMFILE
398504007ebaSmrg  -export-symbols-regex REGEX
398604007ebaSmrg                    try to export only the symbols matching REGEX
398704007ebaSmrg  -LLIBDIR          search LIBDIR for required installed libraries
398804007ebaSmrg  -lNAME            OUTPUT-FILE requires the installed library libNAME
398904007ebaSmrg  -module           build a library that can dlopened
399004007ebaSmrg  -no-fast-install  disable the fast-install mode
399104007ebaSmrg  -no-install       link a not-installable executable
399204007ebaSmrg  -no-undefined     declare that a library does not refer to external symbols
399304007ebaSmrg  -o OUTPUT-FILE    create OUTPUT-FILE from the specified objects
399405cf1079Smrg  -objectlist FILE  use a list of object files found in FILE to specify objects
399505cf1079Smrg  -os2dllname NAME  force a short DLL name on OS/2 (no effect on other OSes)
399604007ebaSmrg  -precious-files-regex REGEX
399704007ebaSmrg                    don't remove output files matching REGEX
399804007ebaSmrg  -release RELEASE  specify package release information
399904007ebaSmrg  -rpath LIBDIR     the created library will eventually be installed in LIBDIR
400004007ebaSmrg  -R[ ]LIBDIR       add LIBDIR to the runtime path of programs and libraries
400104007ebaSmrg  -shared           only do dynamic linking of libtool libraries
400204007ebaSmrg  -shrext SUFFIX    override the standard shared library file extension
400304007ebaSmrg  -static           do not do any dynamic linking of uninstalled libtool libraries
400404007ebaSmrg  -static-libtool-libs
400504007ebaSmrg                    do not do any dynamic linking of libtool libraries
400604007ebaSmrg  -version-info CURRENT[:REVISION[:AGE]]
400704007ebaSmrg                    specify library version info [each variable defaults to 0]
400804007ebaSmrg  -weak LIBNAME     declare that the target provides the LIBNAME interface
400904007ebaSmrg  -Wc,FLAG
401004007ebaSmrg  -Xcompiler FLAG   pass linker-specific FLAG directly to the compiler
401179d5fcd7Smrg  -Wa,FLAG
401279d5fcd7Smrg  -Xassembler FLAG  pass linker-specific FLAG directly to the assembler
401304007ebaSmrg  -Wl,FLAG
401404007ebaSmrg  -Xlinker FLAG     pass linker-specific FLAG directly to the linker
401504007ebaSmrg  -XCClinker FLAG   pass link-specific FLAG to the compiler driver (CC)
401604007ebaSmrg
401705cf1079SmrgAll other options (arguments beginning with '-') are ignored.
401804007ebaSmrg
401905cf1079SmrgEvery other argument is treated as a filename.  Files ending in '.la' are
402004007ebaSmrgtreated as uninstalled libtool libraries, other files are standard or library
402104007ebaSmrgobject files.
402204007ebaSmrg
402305cf1079SmrgIf the OUTPUT-FILE ends in '.la', then a libtool library is created,
402405cf1079Smrgonly library objects ('.lo' files) may be specified, and '-rpath' is
402504007ebaSmrgrequired, except when creating a convenience library.
402604007ebaSmrg
402705cf1079SmrgIf OUTPUT-FILE ends in '.a' or '.lib', then a standard library is created
402805cf1079Smrgusing 'ar' and 'ranlib', or on Windows using 'lib'.
402904007ebaSmrg
403005cf1079SmrgIf OUTPUT-FILE ends in '.lo' or '.$objext', then a reloadable object file
403104007ebaSmrgis created, otherwise an executable program is created."
403204007ebaSmrg        ;;
403304007ebaSmrg
403404007ebaSmrg      uninstall)
403504007ebaSmrg        $ECHO \
403604007ebaSmrg"Usage: $progname [OPTION]... --mode=uninstall RM [RM-OPTION]... FILE...
403704007ebaSmrg
403804007ebaSmrgRemove libraries from an installation directory.
403904007ebaSmrg
404004007ebaSmrgRM is the name of the program to use to delete files associated with each FILE
404105cf1079Smrg(typically '/bin/rm').  RM-OPTIONS are options (such as '-f') to be passed
404204007ebaSmrgto RM.
404304007ebaSmrg
404404007ebaSmrgIf FILE is a libtool library, all the files associated with it are deleted.
404504007ebaSmrgOtherwise, only FILE itself is deleted using RM."
404604007ebaSmrg        ;;
404704007ebaSmrg
404804007ebaSmrg      *)
404905cf1079Smrg        func_fatal_help "invalid operation mode '$opt_mode'"
405004007ebaSmrg        ;;
405104007ebaSmrg    esac
405204007ebaSmrg
405304007ebaSmrg    echo
405405cf1079Smrg    $ECHO "Try '$progname --help' for more information about other modes."
405504007ebaSmrg}
405604007ebaSmrg
405704007ebaSmrg# Now that we've collected a possible --mode arg, show help if necessary
405804007ebaSmrgif $opt_help; then
405905cf1079Smrg  if test : = "$opt_help"; then
406004007ebaSmrg    func_mode_help
406104007ebaSmrg  else
406204007ebaSmrg    {
406304007ebaSmrg      func_help noexit
406404007ebaSmrg      for opt_mode in compile link execute install finish uninstall clean; do
406504007ebaSmrg	func_mode_help
406604007ebaSmrg      done
406705cf1079Smrg    } | $SED -n '1p; 2,$s/^Usage:/  or: /p'
406804007ebaSmrg    {
406904007ebaSmrg      func_help noexit
407004007ebaSmrg      for opt_mode in compile link execute install finish uninstall clean; do
407104007ebaSmrg	echo
407204007ebaSmrg	func_mode_help
407304007ebaSmrg      done
407404007ebaSmrg    } |
407505cf1079Smrg    $SED '1d
407604007ebaSmrg      /^When reporting/,/^Report/{
407704007ebaSmrg	H
407804007ebaSmrg	d
407904007ebaSmrg      }
408004007ebaSmrg      $x
408104007ebaSmrg      /information about other modes/d
408204007ebaSmrg      /more detailed .*MODE/d
408304007ebaSmrg      s/^Usage:.*--mode=\([^ ]*\) .*/Description of \1 mode:/'
408404007ebaSmrg  fi
408504007ebaSmrg  exit $?
408604007ebaSmrgfi
408704007ebaSmrg
408804007ebaSmrg
408904007ebaSmrg# func_mode_execute arg...
409004007ebaSmrgfunc_mode_execute ()
409104007ebaSmrg{
409205cf1079Smrg    $debug_cmd
409305cf1079Smrg
409404007ebaSmrg    # The first argument is the command name.
409505cf1079Smrg    cmd=$nonopt
409604007ebaSmrg    test -z "$cmd" && \
409704007ebaSmrg      func_fatal_help "you must specify a COMMAND"
409804007ebaSmrg
409904007ebaSmrg    # Handle -dlopen flags immediately.
410004007ebaSmrg    for file in $opt_dlopen; do
410104007ebaSmrg      test -f "$file" \
410205cf1079Smrg	|| func_fatal_help "'$file' is not a file"
410304007ebaSmrg
410404007ebaSmrg      dir=
410504007ebaSmrg      case $file in
410604007ebaSmrg      *.la)
410704007ebaSmrg	func_resolve_sysroot "$file"
410804007ebaSmrg	file=$func_resolve_sysroot_result
410904007ebaSmrg
411004007ebaSmrg	# Check to see that this really is a libtool archive.
411104007ebaSmrg	func_lalib_unsafe_p "$file" \
411205cf1079Smrg	  || func_fatal_help "'$lib' is not a valid libtool archive"
411304007ebaSmrg
411404007ebaSmrg	# Read the libtool library.
411504007ebaSmrg	dlname=
411604007ebaSmrg	library_names=
411704007ebaSmrg	func_source "$file"
411804007ebaSmrg
411904007ebaSmrg	# Skip this library if it cannot be dlopened.
412004007ebaSmrg	if test -z "$dlname"; then
412104007ebaSmrg	  # Warn if it was a shared library.
412204007ebaSmrg	  test -n "$library_names" && \
412305cf1079Smrg	    func_warning "'$file' was not linked with '-export-dynamic'"
412404007ebaSmrg	  continue
412504007ebaSmrg	fi
412604007ebaSmrg
412704007ebaSmrg	func_dirname "$file" "" "."
412805cf1079Smrg	dir=$func_dirname_result
412904007ebaSmrg
413004007ebaSmrg	if test -f "$dir/$objdir/$dlname"; then
413104007ebaSmrg	  func_append dir "/$objdir"
413204007ebaSmrg	else
413304007ebaSmrg	  if test ! -f "$dir/$dlname"; then
413405cf1079Smrg	    func_fatal_error "cannot find '$dlname' in '$dir' or '$dir/$objdir'"
413504007ebaSmrg	  fi
413604007ebaSmrg	fi
413704007ebaSmrg	;;
413804007ebaSmrg
413904007ebaSmrg      *.lo)
414004007ebaSmrg	# Just add the directory containing the .lo file.
414104007ebaSmrg	func_dirname "$file" "" "."
414205cf1079Smrg	dir=$func_dirname_result
414304007ebaSmrg	;;
414404007ebaSmrg
414504007ebaSmrg      *)
414605cf1079Smrg	func_warning "'-dlopen' is ignored for non-libtool libraries and objects"
414704007ebaSmrg	continue
414804007ebaSmrg	;;
414904007ebaSmrg      esac
415004007ebaSmrg
415104007ebaSmrg      # Get the absolute pathname.
415204007ebaSmrg      absdir=`cd "$dir" && pwd`
415305cf1079Smrg      test -n "$absdir" && dir=$absdir
415404007ebaSmrg
415504007ebaSmrg      # Now add the directory to shlibpath_var.
415604007ebaSmrg      if eval "test -z \"\$$shlibpath_var\""; then
415704007ebaSmrg	eval "$shlibpath_var=\"\$dir\""
415804007ebaSmrg      else
415904007ebaSmrg	eval "$shlibpath_var=\"\$dir:\$$shlibpath_var\""
416004007ebaSmrg      fi
416104007ebaSmrg    done
416204007ebaSmrg
416304007ebaSmrg    # This variable tells wrapper scripts just to set shlibpath_var
416404007ebaSmrg    # rather than running their programs.
416505cf1079Smrg    libtool_execute_magic=$magic
416604007ebaSmrg
416704007ebaSmrg    # Check if any of the arguments is a wrapper script.
416804007ebaSmrg    args=
416904007ebaSmrg    for file
417004007ebaSmrg    do
417104007ebaSmrg      case $file in
417204007ebaSmrg      -* | *.la | *.lo ) ;;
417304007ebaSmrg      *)
417404007ebaSmrg	# Do a test to see if this is really a libtool program.
417504007ebaSmrg	if func_ltwrapper_script_p "$file"; then
417604007ebaSmrg	  func_source "$file"
417704007ebaSmrg	  # Transform arg to wrapped name.
417805cf1079Smrg	  file=$progdir/$program
417904007ebaSmrg	elif func_ltwrapper_executable_p "$file"; then
418004007ebaSmrg	  func_ltwrapper_scriptname "$file"
418104007ebaSmrg	  func_source "$func_ltwrapper_scriptname_result"
418204007ebaSmrg	  # Transform arg to wrapped name.
418305cf1079Smrg	  file=$progdir/$program
418404007ebaSmrg	fi
418504007ebaSmrg	;;
418604007ebaSmrg      esac
418704007ebaSmrg      # Quote arguments (to preserve shell metacharacters).
418804007ebaSmrg      func_append_quoted args "$file"
418904007ebaSmrg    done
419004007ebaSmrg
419105cf1079Smrg    if $opt_dry_run; then
419205cf1079Smrg      # Display what would be done.
419305cf1079Smrg      if test -n "$shlibpath_var"; then
419405cf1079Smrg	eval "\$ECHO \"\$shlibpath_var=\$$shlibpath_var\""
419505cf1079Smrg	echo "export $shlibpath_var"
419605cf1079Smrg      fi
419705cf1079Smrg      $ECHO "$cmd$args"
419805cf1079Smrg      exit $EXIT_SUCCESS
419905cf1079Smrg    else
420004007ebaSmrg      if test -n "$shlibpath_var"; then
420104007ebaSmrg	# Export the shlibpath_var.
420204007ebaSmrg	eval "export $shlibpath_var"
420304007ebaSmrg      fi
420404007ebaSmrg
420504007ebaSmrg      # Restore saved environment variables
420604007ebaSmrg      for lt_var in LANG LANGUAGE LC_ALL LC_CTYPE LC_COLLATE LC_MESSAGES
420704007ebaSmrg      do
420804007ebaSmrg	eval "if test \"\${save_$lt_var+set}\" = set; then
420904007ebaSmrg                $lt_var=\$save_$lt_var; export $lt_var
421004007ebaSmrg	      else
421104007ebaSmrg		$lt_unset $lt_var
421204007ebaSmrg	      fi"
421304007ebaSmrg      done
421404007ebaSmrg
421504007ebaSmrg      # Now prepare to actually exec the command.
421605cf1079Smrg      exec_cmd=\$cmd$args
421704007ebaSmrg    fi
421804007ebaSmrg}
421904007ebaSmrg
422005cf1079Smrgtest execute = "$opt_mode" && func_mode_execute ${1+"$@"}
422104007ebaSmrg
422204007ebaSmrg
422304007ebaSmrg# func_mode_finish arg...
422404007ebaSmrgfunc_mode_finish ()
422504007ebaSmrg{
422605cf1079Smrg    $debug_cmd
422705cf1079Smrg
422804007ebaSmrg    libs=
422904007ebaSmrg    libdirs=
423004007ebaSmrg    admincmds=
423104007ebaSmrg
423204007ebaSmrg    for opt in "$nonopt" ${1+"$@"}
423304007ebaSmrg    do
423404007ebaSmrg      if test -d "$opt"; then
423504007ebaSmrg	func_append libdirs " $opt"
423604007ebaSmrg
423704007ebaSmrg      elif test -f "$opt"; then
423804007ebaSmrg	if func_lalib_unsafe_p "$opt"; then
423904007ebaSmrg	  func_append libs " $opt"
424004007ebaSmrg	else
424105cf1079Smrg	  func_warning "'$opt' is not a valid libtool archive"
424204007ebaSmrg	fi
424304007ebaSmrg
424404007ebaSmrg      else
424505cf1079Smrg	func_fatal_error "invalid argument '$opt'"
424604007ebaSmrg      fi
424704007ebaSmrg    done
424804007ebaSmrg
424904007ebaSmrg    if test -n "$libs"; then
425004007ebaSmrg      if test -n "$lt_sysroot"; then
425104007ebaSmrg        sysroot_regex=`$ECHO "$lt_sysroot" | $SED "$sed_make_literal_regex"`
425204007ebaSmrg        sysroot_cmd="s/\([ ']\)$sysroot_regex/\1/g;"
425304007ebaSmrg      else
425404007ebaSmrg        sysroot_cmd=
425504007ebaSmrg      fi
425604007ebaSmrg
425704007ebaSmrg      # Remove sysroot references
425804007ebaSmrg      if $opt_dry_run; then
425904007ebaSmrg        for lib in $libs; do
426005cf1079Smrg          echo "removing references to $lt_sysroot and '=' prefixes from $lib"
426104007ebaSmrg        done
426204007ebaSmrg      else
426304007ebaSmrg        tmpdir=`func_mktempdir`
426404007ebaSmrg        for lib in $libs; do
426505cf1079Smrg	  $SED -e "$sysroot_cmd s/\([ ']-[LR]\)=/\1/g; s/\([ ']\)=/\1/g" $lib \
426604007ebaSmrg	    > $tmpdir/tmp-la
426704007ebaSmrg	  mv -f $tmpdir/tmp-la $lib
426804007ebaSmrg	done
426904007ebaSmrg        ${RM}r "$tmpdir"
427004007ebaSmrg      fi
427104007ebaSmrg    fi
427204007ebaSmrg
427304007ebaSmrg    if test -n "$finish_cmds$finish_eval" && test -n "$libdirs"; then
427404007ebaSmrg      for libdir in $libdirs; do
427504007ebaSmrg	if test -n "$finish_cmds"; then
427604007ebaSmrg	  # Do each command in the finish commands.
427704007ebaSmrg	  func_execute_cmds "$finish_cmds" 'admincmds="$admincmds
427804007ebaSmrg'"$cmd"'"'
427904007ebaSmrg	fi
428004007ebaSmrg	if test -n "$finish_eval"; then
428104007ebaSmrg	  # Do the single finish_eval.
428204007ebaSmrg	  eval cmds=\"$finish_eval\"
428304007ebaSmrg	  $opt_dry_run || eval "$cmds" || func_append admincmds "
428404007ebaSmrg       $cmds"
428504007ebaSmrg	fi
428604007ebaSmrg      done
428704007ebaSmrg    fi
428804007ebaSmrg
428904007ebaSmrg    # Exit here if they wanted silent mode.
429005cf1079Smrg    $opt_quiet && exit $EXIT_SUCCESS
429104007ebaSmrg
429204007ebaSmrg    if test -n "$finish_cmds$finish_eval" && test -n "$libdirs"; then
429304007ebaSmrg      echo "----------------------------------------------------------------------"
429404007ebaSmrg      echo "Libraries have been installed in:"
429504007ebaSmrg      for libdir in $libdirs; do
429604007ebaSmrg	$ECHO "   $libdir"
429704007ebaSmrg      done
429804007ebaSmrg      echo
429904007ebaSmrg      echo "If you ever happen to want to link against installed libraries"
430004007ebaSmrg      echo "in a given directory, LIBDIR, you must either use libtool, and"
430105cf1079Smrg      echo "specify the full pathname of the library, or use the '-LLIBDIR'"
430204007ebaSmrg      echo "flag during linking and do at least one of the following:"
430304007ebaSmrg      if test -n "$shlibpath_var"; then
430405cf1079Smrg	echo "   - add LIBDIR to the '$shlibpath_var' environment variable"
430504007ebaSmrg	echo "     during execution"
430604007ebaSmrg      fi
430704007ebaSmrg      if test -n "$runpath_var"; then
430805cf1079Smrg	echo "   - add LIBDIR to the '$runpath_var' environment variable"
430904007ebaSmrg	echo "     during linking"
431004007ebaSmrg      fi
431104007ebaSmrg      if test -n "$hardcode_libdir_flag_spec"; then
431204007ebaSmrg	libdir=LIBDIR
431304007ebaSmrg	eval flag=\"$hardcode_libdir_flag_spec\"
431404007ebaSmrg
431505cf1079Smrg	$ECHO "   - use the '$flag' linker flag"
431604007ebaSmrg      fi
431704007ebaSmrg      if test -n "$admincmds"; then
431804007ebaSmrg	$ECHO "   - have your system administrator run these commands:$admincmds"
431904007ebaSmrg      fi
432004007ebaSmrg      if test -f /etc/ld.so.conf; then
432105cf1079Smrg	echo "   - have your system administrator add LIBDIR to '/etc/ld.so.conf'"
432204007ebaSmrg      fi
432304007ebaSmrg      echo
432404007ebaSmrg
432504007ebaSmrg      echo "See any operating system documentation about shared libraries for"
432604007ebaSmrg      case $host in
432704007ebaSmrg	solaris2.[6789]|solaris2.1[0-9])
432804007ebaSmrg	  echo "more information, such as the ld(1), crle(1) and ld.so(8) manual"
432904007ebaSmrg	  echo "pages."
433004007ebaSmrg	  ;;
433104007ebaSmrg	*)
433204007ebaSmrg	  echo "more information, such as the ld(1) and ld.so(8) manual pages."
433304007ebaSmrg	  ;;
433404007ebaSmrg      esac
433504007ebaSmrg      echo "----------------------------------------------------------------------"
433604007ebaSmrg    fi
433704007ebaSmrg    exit $EXIT_SUCCESS
433804007ebaSmrg}
433904007ebaSmrg
434005cf1079Smrgtest finish = "$opt_mode" && func_mode_finish ${1+"$@"}
434104007ebaSmrg
434204007ebaSmrg
434304007ebaSmrg# func_mode_install arg...
434404007ebaSmrgfunc_mode_install ()
434504007ebaSmrg{
434605cf1079Smrg    $debug_cmd
434705cf1079Smrg
434804007ebaSmrg    # There may be an optional sh(1) argument at the beginning of
434904007ebaSmrg    # install_prog (especially on Windows NT).
435005cf1079Smrg    if test "$SHELL" = "$nonopt" || test /bin/sh = "$nonopt" ||
435104007ebaSmrg       # Allow the use of GNU shtool's install command.
435205cf1079Smrg       case $nonopt in *shtool*) :;; *) false;; esac
435305cf1079Smrg    then
435404007ebaSmrg      # Aesthetically quote it.
435579d5fcd7Smrg      func_quote_arg pretty "$nonopt"
435679d5fcd7Smrg      install_prog="$func_quote_arg_result "
435704007ebaSmrg      arg=$1
435804007ebaSmrg      shift
435904007ebaSmrg    else
436004007ebaSmrg      install_prog=
436104007ebaSmrg      arg=$nonopt
436204007ebaSmrg    fi
436304007ebaSmrg
436404007ebaSmrg    # The real first argument should be the name of the installation program.
436504007ebaSmrg    # Aesthetically quote it.
436679d5fcd7Smrg    func_quote_arg pretty "$arg"
436779d5fcd7Smrg    func_append install_prog "$func_quote_arg_result"
436804007ebaSmrg    install_shared_prog=$install_prog
436904007ebaSmrg    case " $install_prog " in
437004007ebaSmrg      *[\\\ /]cp\ *) install_cp=: ;;
437104007ebaSmrg      *) install_cp=false ;;
437204007ebaSmrg    esac
437304007ebaSmrg
437404007ebaSmrg    # We need to accept at least all the BSD install flags.
437504007ebaSmrg    dest=
437604007ebaSmrg    files=
437704007ebaSmrg    opts=
437804007ebaSmrg    prev=
437904007ebaSmrg    install_type=
438005cf1079Smrg    isdir=false
438104007ebaSmrg    stripme=
438204007ebaSmrg    no_mode=:
438304007ebaSmrg    for arg
438404007ebaSmrg    do
438504007ebaSmrg      arg2=
438604007ebaSmrg      if test -n "$dest"; then
438704007ebaSmrg	func_append files " $dest"
438804007ebaSmrg	dest=$arg
438904007ebaSmrg	continue
439004007ebaSmrg      fi
439104007ebaSmrg
439204007ebaSmrg      case $arg in
439305cf1079Smrg      -d) isdir=: ;;
439404007ebaSmrg      -f)
439504007ebaSmrg	if $install_cp; then :; else
439604007ebaSmrg	  prev=$arg
439704007ebaSmrg	fi
439804007ebaSmrg	;;
439904007ebaSmrg      -g | -m | -o)
440004007ebaSmrg	prev=$arg
440104007ebaSmrg	;;
440204007ebaSmrg      -s)
440304007ebaSmrg	stripme=" -s"
440404007ebaSmrg	continue
440504007ebaSmrg	;;
440604007ebaSmrg      -*)
440704007ebaSmrg	;;
440804007ebaSmrg      *)
440904007ebaSmrg	# If the previous option needed an argument, then skip it.
441004007ebaSmrg	if test -n "$prev"; then
441105cf1079Smrg	  if test X-m = "X$prev" && test -n "$install_override_mode"; then
441204007ebaSmrg	    arg2=$install_override_mode
441304007ebaSmrg	    no_mode=false
441404007ebaSmrg	  fi
441504007ebaSmrg	  prev=
441604007ebaSmrg	else
441704007ebaSmrg	  dest=$arg
441804007ebaSmrg	  continue
441904007ebaSmrg	fi
442004007ebaSmrg	;;
442104007ebaSmrg      esac
442204007ebaSmrg
442304007ebaSmrg      # Aesthetically quote the argument.
442479d5fcd7Smrg      func_quote_arg pretty "$arg"
442579d5fcd7Smrg      func_append install_prog " $func_quote_arg_result"
442604007ebaSmrg      if test -n "$arg2"; then
442779d5fcd7Smrg	func_quote_arg pretty "$arg2"
442804007ebaSmrg      fi
442979d5fcd7Smrg      func_append install_shared_prog " $func_quote_arg_result"
443004007ebaSmrg    done
443104007ebaSmrg
443204007ebaSmrg    test -z "$install_prog" && \
443304007ebaSmrg      func_fatal_help "you must specify an install program"
443404007ebaSmrg
443504007ebaSmrg    test -n "$prev" && \
443605cf1079Smrg      func_fatal_help "the '$prev' option requires an argument"
443704007ebaSmrg
443804007ebaSmrg    if test -n "$install_override_mode" && $no_mode; then
443904007ebaSmrg      if $install_cp; then :; else
444079d5fcd7Smrg	func_quote_arg pretty "$install_override_mode"
444179d5fcd7Smrg	func_append install_shared_prog " -m $func_quote_arg_result"
444204007ebaSmrg      fi
444304007ebaSmrg    fi
444404007ebaSmrg
444504007ebaSmrg    if test -z "$files"; then
444604007ebaSmrg      if test -z "$dest"; then
444704007ebaSmrg	func_fatal_help "no file or destination specified"
444804007ebaSmrg      else
444904007ebaSmrg	func_fatal_help "you must specify a destination"
445004007ebaSmrg      fi
445104007ebaSmrg    fi
445204007ebaSmrg
445304007ebaSmrg    # Strip any trailing slash from the destination.
445404007ebaSmrg    func_stripname '' '/' "$dest"
445504007ebaSmrg    dest=$func_stripname_result
445604007ebaSmrg
445704007ebaSmrg    # Check to see that the destination is a directory.
445805cf1079Smrg    test -d "$dest" && isdir=:
445905cf1079Smrg    if $isdir; then
446005cf1079Smrg      destdir=$dest
446104007ebaSmrg      destname=
446204007ebaSmrg    else
446304007ebaSmrg      func_dirname_and_basename "$dest" "" "."
446405cf1079Smrg      destdir=$func_dirname_result
446505cf1079Smrg      destname=$func_basename_result
446604007ebaSmrg
446704007ebaSmrg      # Not a directory, so check to see that there is only one file specified.
446804007ebaSmrg      set dummy $files; shift
446904007ebaSmrg      test "$#" -gt 1 && \
447005cf1079Smrg	func_fatal_help "'$dest' is not a directory"
447104007ebaSmrg    fi
447204007ebaSmrg    case $destdir in
447304007ebaSmrg    [\\/]* | [A-Za-z]:[\\/]*) ;;
447404007ebaSmrg    *)
447504007ebaSmrg      for file in $files; do
447604007ebaSmrg	case $file in
447704007ebaSmrg	*.lo) ;;
447804007ebaSmrg	*)
447905cf1079Smrg	  func_fatal_help "'$destdir' must be an absolute directory name"
448004007ebaSmrg	  ;;
448104007ebaSmrg	esac
448204007ebaSmrg      done
448304007ebaSmrg      ;;
448404007ebaSmrg    esac
448504007ebaSmrg
448604007ebaSmrg    # This variable tells wrapper scripts just to set variables rather
448704007ebaSmrg    # than running their programs.
448805cf1079Smrg    libtool_install_magic=$magic
448904007ebaSmrg
449004007ebaSmrg    staticlibs=
449104007ebaSmrg    future_libdirs=
449204007ebaSmrg    current_libdirs=
449304007ebaSmrg    for file in $files; do
449404007ebaSmrg
449504007ebaSmrg      # Do each installation.
449604007ebaSmrg      case $file in
449704007ebaSmrg      *.$libext)
449804007ebaSmrg	# Do the static libraries later.
449904007ebaSmrg	func_append staticlibs " $file"
450004007ebaSmrg	;;
450104007ebaSmrg
450204007ebaSmrg      *.la)
450304007ebaSmrg	func_resolve_sysroot "$file"
450404007ebaSmrg	file=$func_resolve_sysroot_result
450504007ebaSmrg
450604007ebaSmrg	# Check to see that this really is a libtool archive.
450704007ebaSmrg	func_lalib_unsafe_p "$file" \
450805cf1079Smrg	  || func_fatal_help "'$file' is not a valid libtool archive"
450904007ebaSmrg
451004007ebaSmrg	library_names=
451104007ebaSmrg	old_library=
451204007ebaSmrg	relink_command=
451304007ebaSmrg	func_source "$file"
451404007ebaSmrg
451504007ebaSmrg	# Add the libdir to current_libdirs if it is the destination.
451604007ebaSmrg	if test "X$destdir" = "X$libdir"; then
451704007ebaSmrg	  case "$current_libdirs " in
451804007ebaSmrg	  *" $libdir "*) ;;
451904007ebaSmrg	  *) func_append current_libdirs " $libdir" ;;
452004007ebaSmrg	  esac
452104007ebaSmrg	else
452204007ebaSmrg	  # Note the libdir as a future libdir.
452304007ebaSmrg	  case "$future_libdirs " in
452404007ebaSmrg	  *" $libdir "*) ;;
452504007ebaSmrg	  *) func_append future_libdirs " $libdir" ;;
452604007ebaSmrg	  esac
452704007ebaSmrg	fi
452804007ebaSmrg
452904007ebaSmrg	func_dirname "$file" "/" ""
453005cf1079Smrg	dir=$func_dirname_result
453104007ebaSmrg	func_append dir "$objdir"
453204007ebaSmrg
453304007ebaSmrg	if test -n "$relink_command"; then
453404007ebaSmrg	  # Determine the prefix the user has applied to our future dir.
453504007ebaSmrg	  inst_prefix_dir=`$ECHO "$destdir" | $SED -e "s%$libdir\$%%"`
453604007ebaSmrg
453704007ebaSmrg	  # Don't allow the user to place us outside of our expected
453804007ebaSmrg	  # location b/c this prevents finding dependent libraries that
453904007ebaSmrg	  # are installed to the same prefix.
454004007ebaSmrg	  # At present, this check doesn't affect windows .dll's that
454104007ebaSmrg	  # are installed into $libdir/../bin (currently, that works fine)
454204007ebaSmrg	  # but it's something to keep an eye on.
454304007ebaSmrg	  test "$inst_prefix_dir" = "$destdir" && \
454405cf1079Smrg	    func_fatal_error "error: cannot install '$file' to a directory not ending in $libdir"
454504007ebaSmrg
454604007ebaSmrg	  if test -n "$inst_prefix_dir"; then
454704007ebaSmrg	    # Stick the inst_prefix_dir data into the link command.
454804007ebaSmrg	    relink_command=`$ECHO "$relink_command" | $SED "s%@inst_prefix_dir@%-inst-prefix-dir $inst_prefix_dir%"`
454904007ebaSmrg	  else
455004007ebaSmrg	    relink_command=`$ECHO "$relink_command" | $SED "s%@inst_prefix_dir@%%"`
455104007ebaSmrg	  fi
455204007ebaSmrg
455305cf1079Smrg	  func_warning "relinking '$file'"
455404007ebaSmrg	  func_show_eval "$relink_command" \
455505cf1079Smrg	    'func_fatal_error "error: relink '\''$file'\'' with the above command before installing it"'
455604007ebaSmrg	fi
455704007ebaSmrg
455804007ebaSmrg	# See the names of the shared library.
455904007ebaSmrg	set dummy $library_names; shift
456004007ebaSmrg	if test -n "$1"; then
456105cf1079Smrg	  realname=$1
456204007ebaSmrg	  shift
456304007ebaSmrg
456405cf1079Smrg	  srcname=$realname
456505cf1079Smrg	  test -n "$relink_command" && srcname=${realname}T
456604007ebaSmrg
456704007ebaSmrg	  # Install the shared library and build the symlinks.
456804007ebaSmrg	  func_show_eval "$install_shared_prog $dir/$srcname $destdir/$realname" \
456904007ebaSmrg	      'exit $?'
457005cf1079Smrg	  tstripme=$stripme
457104007ebaSmrg	  case $host_os in
457204007ebaSmrg	  cygwin* | mingw* | pw32* | cegcc*)
457304007ebaSmrg	    case $realname in
457404007ebaSmrg	    *.dll.a)
457505cf1079Smrg	      tstripme=
457605cf1079Smrg	      ;;
457705cf1079Smrg	    esac
457805cf1079Smrg	    ;;
457905cf1079Smrg	  os2*)
458005cf1079Smrg	    case $realname in
458105cf1079Smrg	    *_dll.a)
458205cf1079Smrg	      tstripme=
458304007ebaSmrg	      ;;
458404007ebaSmrg	    esac
458504007ebaSmrg	    ;;
458604007ebaSmrg	  esac
458704007ebaSmrg	  if test -n "$tstripme" && test -n "$striplib"; then
458804007ebaSmrg	    func_show_eval "$striplib $destdir/$realname" 'exit $?'
458904007ebaSmrg	  fi
459004007ebaSmrg
459104007ebaSmrg	  if test "$#" -gt 0; then
459204007ebaSmrg	    # Delete the old symlinks, and create new ones.
459305cf1079Smrg	    # Try 'ln -sf' first, because the 'ln' binary might depend on
459404007ebaSmrg	    # the symlink we replace!  Solaris /bin/ln does not understand -f,
459504007ebaSmrg	    # so we also need to try rm && ln -s.
459604007ebaSmrg	    for linkname
459704007ebaSmrg	    do
459804007ebaSmrg	      test "$linkname" != "$realname" \
459904007ebaSmrg		&& func_show_eval "(cd $destdir && { $LN_S -f $realname $linkname || { $RM $linkname && $LN_S $realname $linkname; }; })"
460004007ebaSmrg	    done
460104007ebaSmrg	  fi
460204007ebaSmrg
460304007ebaSmrg	  # Do each command in the postinstall commands.
460405cf1079Smrg	  lib=$destdir/$realname
460504007ebaSmrg	  func_execute_cmds "$postinstall_cmds" 'exit $?'
460604007ebaSmrg	fi
460704007ebaSmrg
460804007ebaSmrg	# Install the pseudo-library for information purposes.
460904007ebaSmrg	func_basename "$file"
461005cf1079Smrg	name=$func_basename_result
461105cf1079Smrg	instname=$dir/${name}i
461204007ebaSmrg	func_show_eval "$install_prog $instname $destdir/$name" 'exit $?'
461304007ebaSmrg
461404007ebaSmrg	# Maybe install the static library, too.
461504007ebaSmrg	test -n "$old_library" && func_append staticlibs " $dir/$old_library"
461604007ebaSmrg	;;
461704007ebaSmrg
461804007ebaSmrg      *.lo)
461904007ebaSmrg	# Install (i.e. copy) a libtool object.
462004007ebaSmrg
462104007ebaSmrg	# Figure out destination file name, if it wasn't already specified.
462204007ebaSmrg	if test -n "$destname"; then
462305cf1079Smrg	  destfile=$destdir/$destname
462404007ebaSmrg	else
462504007ebaSmrg	  func_basename "$file"
462605cf1079Smrg	  destfile=$func_basename_result
462705cf1079Smrg	  destfile=$destdir/$destfile
462804007ebaSmrg	fi
462904007ebaSmrg
463004007ebaSmrg	# Deduce the name of the destination old-style object file.
463104007ebaSmrg	case $destfile in
463204007ebaSmrg	*.lo)
463304007ebaSmrg	  func_lo2o "$destfile"
463404007ebaSmrg	  staticdest=$func_lo2o_result
463504007ebaSmrg	  ;;
463604007ebaSmrg	*.$objext)
463705cf1079Smrg	  staticdest=$destfile
463804007ebaSmrg	  destfile=
463904007ebaSmrg	  ;;
464004007ebaSmrg	*)
464105cf1079Smrg	  func_fatal_help "cannot copy a libtool object to '$destfile'"
464204007ebaSmrg	  ;;
464304007ebaSmrg	esac
464404007ebaSmrg
464504007ebaSmrg	# Install the libtool object if requested.
464604007ebaSmrg	test -n "$destfile" && \
464704007ebaSmrg	  func_show_eval "$install_prog $file $destfile" 'exit $?'
464804007ebaSmrg
464904007ebaSmrg	# Install the old object if enabled.
465005cf1079Smrg	if test yes = "$build_old_libs"; then
465104007ebaSmrg	  # Deduce the name of the old-style object file.
465204007ebaSmrg	  func_lo2o "$file"
465304007ebaSmrg	  staticobj=$func_lo2o_result
465404007ebaSmrg	  func_show_eval "$install_prog \$staticobj \$staticdest" 'exit $?'
465504007ebaSmrg	fi
465604007ebaSmrg	exit $EXIT_SUCCESS
465704007ebaSmrg	;;
465804007ebaSmrg
465904007ebaSmrg      *)
466004007ebaSmrg	# Figure out destination file name, if it wasn't already specified.
466104007ebaSmrg	if test -n "$destname"; then
466205cf1079Smrg	  destfile=$destdir/$destname
466304007ebaSmrg	else
466404007ebaSmrg	  func_basename "$file"
466505cf1079Smrg	  destfile=$func_basename_result
466605cf1079Smrg	  destfile=$destdir/$destfile
466704007ebaSmrg	fi
466804007ebaSmrg
466904007ebaSmrg	# If the file is missing, and there is a .exe on the end, strip it
467004007ebaSmrg	# because it is most likely a libtool script we actually want to
467104007ebaSmrg	# install
467205cf1079Smrg	stripped_ext=
467304007ebaSmrg	case $file in
467404007ebaSmrg	  *.exe)
467504007ebaSmrg	    if test ! -f "$file"; then
467604007ebaSmrg	      func_stripname '' '.exe' "$file"
467704007ebaSmrg	      file=$func_stripname_result
467805cf1079Smrg	      stripped_ext=.exe
467904007ebaSmrg	    fi
468004007ebaSmrg	    ;;
468104007ebaSmrg	esac
468204007ebaSmrg
468304007ebaSmrg	# Do a test to see if this is really a libtool program.
468404007ebaSmrg	case $host in
468504007ebaSmrg	*cygwin* | *mingw*)
468604007ebaSmrg	    if func_ltwrapper_executable_p "$file"; then
468704007ebaSmrg	      func_ltwrapper_scriptname "$file"
468804007ebaSmrg	      wrapper=$func_ltwrapper_scriptname_result
468904007ebaSmrg	    else
469004007ebaSmrg	      func_stripname '' '.exe' "$file"
469104007ebaSmrg	      wrapper=$func_stripname_result
469204007ebaSmrg	    fi
469304007ebaSmrg	    ;;
469404007ebaSmrg	*)
469504007ebaSmrg	    wrapper=$file
469604007ebaSmrg	    ;;
469704007ebaSmrg	esac
469804007ebaSmrg	if func_ltwrapper_script_p "$wrapper"; then
469904007ebaSmrg	  notinst_deplibs=
470004007ebaSmrg	  relink_command=
470104007ebaSmrg
470204007ebaSmrg	  func_source "$wrapper"
470304007ebaSmrg
470404007ebaSmrg	  # Check the variables that should have been set.
470504007ebaSmrg	  test -z "$generated_by_libtool_version" && \
470605cf1079Smrg	    func_fatal_error "invalid libtool wrapper script '$wrapper'"
470704007ebaSmrg
470805cf1079Smrg	  finalize=:
470904007ebaSmrg	  for lib in $notinst_deplibs; do
471004007ebaSmrg	    # Check to see that each library is installed.
471104007ebaSmrg	    libdir=
471204007ebaSmrg	    if test -f "$lib"; then
471304007ebaSmrg	      func_source "$lib"
471404007ebaSmrg	    fi
471505cf1079Smrg	    libfile=$libdir/`$ECHO "$lib" | $SED 's%^.*/%%g'`
471604007ebaSmrg	    if test -n "$libdir" && test ! -f "$libfile"; then
471705cf1079Smrg	      func_warning "'$lib' has not been installed in '$libdir'"
471805cf1079Smrg	      finalize=false
471904007ebaSmrg	    fi
472004007ebaSmrg	  done
472104007ebaSmrg
472204007ebaSmrg	  relink_command=
472304007ebaSmrg	  func_source "$wrapper"
472404007ebaSmrg
472504007ebaSmrg	  outputname=
472605cf1079Smrg	  if test no = "$fast_install" && test -n "$relink_command"; then
472704007ebaSmrg	    $opt_dry_run || {
472805cf1079Smrg	      if $finalize; then
472904007ebaSmrg	        tmpdir=`func_mktempdir`
473004007ebaSmrg		func_basename "$file$stripped_ext"
473105cf1079Smrg		file=$func_basename_result
473205cf1079Smrg	        outputname=$tmpdir/$file
473304007ebaSmrg	        # Replace the output file specification.
473404007ebaSmrg	        relink_command=`$ECHO "$relink_command" | $SED 's%@OUTPUT@%'"$outputname"'%g'`
473504007ebaSmrg
473605cf1079Smrg	        $opt_quiet || {
473779d5fcd7Smrg	          func_quote_arg expand,pretty "$relink_command"
473879d5fcd7Smrg		  eval "func_echo $func_quote_arg_result"
473904007ebaSmrg	        }
474004007ebaSmrg	        if eval "$relink_command"; then :
474104007ebaSmrg	          else
474205cf1079Smrg		  func_error "error: relink '$file' with the above command before installing it"
474304007ebaSmrg		  $opt_dry_run || ${RM}r "$tmpdir"
474404007ebaSmrg		  continue
474504007ebaSmrg	        fi
474605cf1079Smrg	        file=$outputname
474704007ebaSmrg	      else
474805cf1079Smrg	        func_warning "cannot relink '$file'"
474904007ebaSmrg	      fi
475004007ebaSmrg	    }
475104007ebaSmrg	  else
475204007ebaSmrg	    # Install the binary that we compiled earlier.
475304007ebaSmrg	    file=`$ECHO "$file$stripped_ext" | $SED "s%\([^/]*\)$%$objdir/\1%"`
475404007ebaSmrg	  fi
475504007ebaSmrg	fi
475604007ebaSmrg
475704007ebaSmrg	# remove .exe since cygwin /usr/bin/install will append another
475804007ebaSmrg	# one anyway
475904007ebaSmrg	case $install_prog,$host in
476004007ebaSmrg	*/usr/bin/install*,*cygwin*)
476104007ebaSmrg	  case $file:$destfile in
476204007ebaSmrg	  *.exe:*.exe)
476304007ebaSmrg	    # this is ok
476404007ebaSmrg	    ;;
476504007ebaSmrg	  *.exe:*)
476604007ebaSmrg	    destfile=$destfile.exe
476704007ebaSmrg	    ;;
476804007ebaSmrg	  *:*.exe)
476904007ebaSmrg	    func_stripname '' '.exe' "$destfile"
477004007ebaSmrg	    destfile=$func_stripname_result
477104007ebaSmrg	    ;;
477204007ebaSmrg	  esac
477304007ebaSmrg	  ;;
477404007ebaSmrg	esac
477504007ebaSmrg	func_show_eval "$install_prog\$stripme \$file \$destfile" 'exit $?'
477604007ebaSmrg	$opt_dry_run || if test -n "$outputname"; then
477704007ebaSmrg	  ${RM}r "$tmpdir"
477804007ebaSmrg	fi
477904007ebaSmrg	;;
478004007ebaSmrg      esac
478104007ebaSmrg    done
478204007ebaSmrg
478304007ebaSmrg    for file in $staticlibs; do
478404007ebaSmrg      func_basename "$file"
478505cf1079Smrg      name=$func_basename_result
478604007ebaSmrg
478704007ebaSmrg      # Set up the ranlib parameters.
478805cf1079Smrg      oldlib=$destdir/$name
478904007ebaSmrg      func_to_tool_file "$oldlib" func_convert_file_msys_to_w32
479004007ebaSmrg      tool_oldlib=$func_to_tool_file_result
479104007ebaSmrg
479204007ebaSmrg      func_show_eval "$install_prog \$file \$oldlib" 'exit $?'
479304007ebaSmrg
479404007ebaSmrg      if test -n "$stripme" && test -n "$old_striplib"; then
479504007ebaSmrg	func_show_eval "$old_striplib $tool_oldlib" 'exit $?'
479604007ebaSmrg      fi
479704007ebaSmrg
479804007ebaSmrg      # Do each command in the postinstall commands.
479904007ebaSmrg      func_execute_cmds "$old_postinstall_cmds" 'exit $?'
480004007ebaSmrg    done
480104007ebaSmrg
480204007ebaSmrg    test -n "$future_libdirs" && \
480305cf1079Smrg      func_warning "remember to run '$progname --finish$future_libdirs'"
480404007ebaSmrg
480504007ebaSmrg    if test -n "$current_libdirs"; then
480604007ebaSmrg      # Maybe just do a dry run.
480704007ebaSmrg      $opt_dry_run && current_libdirs=" -n$current_libdirs"
480805cf1079Smrg      exec_cmd='$SHELL "$progpath" $preserve_args --finish$current_libdirs'
480904007ebaSmrg    else
481004007ebaSmrg      exit $EXIT_SUCCESS
481104007ebaSmrg    fi
481204007ebaSmrg}
481304007ebaSmrg
481405cf1079Smrgtest install = "$opt_mode" && func_mode_install ${1+"$@"}
481504007ebaSmrg
481604007ebaSmrg
481704007ebaSmrg# func_generate_dlsyms outputname originator pic_p
481804007ebaSmrg# Extract symbols from dlprefiles and create ${outputname}S.o with
481904007ebaSmrg# a dlpreopen symbol table.
482004007ebaSmrgfunc_generate_dlsyms ()
482104007ebaSmrg{
482205cf1079Smrg    $debug_cmd
482305cf1079Smrg
482405cf1079Smrg    my_outputname=$1
482505cf1079Smrg    my_originator=$2
482605cf1079Smrg    my_pic_p=${3-false}
482705cf1079Smrg    my_prefix=`$ECHO "$my_originator" | $SED 's%[^a-zA-Z0-9]%_%g'`
482804007ebaSmrg    my_dlsyms=
482904007ebaSmrg
483005cf1079Smrg    if test -n "$dlfiles$dlprefiles" || test no != "$dlself"; then
483104007ebaSmrg      if test -n "$NM" && test -n "$global_symbol_pipe"; then
483205cf1079Smrg	my_dlsyms=${my_outputname}S.c
483304007ebaSmrg      else
483404007ebaSmrg	func_error "not configured to extract global symbols from dlpreopened files"
483504007ebaSmrg      fi
483604007ebaSmrg    fi
483704007ebaSmrg
483804007ebaSmrg    if test -n "$my_dlsyms"; then
483904007ebaSmrg      case $my_dlsyms in
484004007ebaSmrg      "") ;;
484104007ebaSmrg      *.c)
484204007ebaSmrg	# Discover the nlist of each of the dlfiles.
484305cf1079Smrg	nlist=$output_objdir/$my_outputname.nm
484404007ebaSmrg
484504007ebaSmrg	func_show_eval "$RM $nlist ${nlist}S ${nlist}T"
484604007ebaSmrg
484704007ebaSmrg	# Parse the name list into a source file.
484804007ebaSmrg	func_verbose "creating $output_objdir/$my_dlsyms"
484904007ebaSmrg
485004007ebaSmrg	$opt_dry_run || $ECHO > "$output_objdir/$my_dlsyms" "\
485105cf1079Smrg/* $my_dlsyms - symbol resolution table for '$my_outputname' dlsym emulation. */
485205cf1079Smrg/* Generated by $PROGRAM (GNU $PACKAGE) $VERSION */
485304007ebaSmrg
485404007ebaSmrg#ifdef __cplusplus
485504007ebaSmrgextern \"C\" {
485604007ebaSmrg#endif
485704007ebaSmrg
485805cf1079Smrg#if defined __GNUC__ && (((__GNUC__ == 4) && (__GNUC_MINOR__ >= 4)) || (__GNUC__ > 4))
485904007ebaSmrg#pragma GCC diagnostic ignored \"-Wstrict-prototypes\"
486004007ebaSmrg#endif
486104007ebaSmrg
486204007ebaSmrg/* Keep this code in sync between libtool.m4, ltmain, lt_system.h, and tests.  */
486305cf1079Smrg#if defined _WIN32 || defined __CYGWIN__ || defined _WIN32_WCE
486405cf1079Smrg/* DATA imports from DLLs on WIN32 can't be const, because runtime
486504007ebaSmrg   relocations are performed -- see ld's documentation on pseudo-relocs.  */
486604007ebaSmrg# define LT_DLSYM_CONST
486705cf1079Smrg#elif defined __osf__
486804007ebaSmrg/* This system does not cope well with relocations in const data.  */
486904007ebaSmrg# define LT_DLSYM_CONST
487004007ebaSmrg#else
487104007ebaSmrg# define LT_DLSYM_CONST const
487204007ebaSmrg#endif
487304007ebaSmrg
487405cf1079Smrg#define STREQ(s1, s2) (strcmp ((s1), (s2)) == 0)
487505cf1079Smrg
487604007ebaSmrg/* External symbol declarations for the compiler. */\
487704007ebaSmrg"
487804007ebaSmrg
487905cf1079Smrg	if test yes = "$dlself"; then
488005cf1079Smrg	  func_verbose "generating symbol list for '$output'"
488104007ebaSmrg
488204007ebaSmrg	  $opt_dry_run || echo ': @PROGRAM@ ' > "$nlist"
488304007ebaSmrg
488404007ebaSmrg	  # Add our own program objects to the symbol list.
488504007ebaSmrg	  progfiles=`$ECHO "$objs$old_deplibs" | $SP2NL | $SED "$lo2o" | $NL2SP`
488604007ebaSmrg	  for progfile in $progfiles; do
488704007ebaSmrg	    func_to_tool_file "$progfile" func_convert_file_msys_to_w32
488805cf1079Smrg	    func_verbose "extracting global C symbols from '$func_to_tool_file_result'"
488904007ebaSmrg	    $opt_dry_run || eval "$NM $func_to_tool_file_result | $global_symbol_pipe >> '$nlist'"
489004007ebaSmrg	  done
489104007ebaSmrg
489204007ebaSmrg	  if test -n "$exclude_expsyms"; then
489304007ebaSmrg	    $opt_dry_run || {
489404007ebaSmrg	      eval '$EGREP -v " ($exclude_expsyms)$" "$nlist" > "$nlist"T'
489504007ebaSmrg	      eval '$MV "$nlist"T "$nlist"'
489604007ebaSmrg	    }
489704007ebaSmrg	  fi
489804007ebaSmrg
489904007ebaSmrg	  if test -n "$export_symbols_regex"; then
490004007ebaSmrg	    $opt_dry_run || {
490104007ebaSmrg	      eval '$EGREP -e "$export_symbols_regex" "$nlist" > "$nlist"T'
490204007ebaSmrg	      eval '$MV "$nlist"T "$nlist"'
490304007ebaSmrg	    }
490404007ebaSmrg	  fi
490504007ebaSmrg
490604007ebaSmrg	  # Prepare the list of exported symbols
490704007ebaSmrg	  if test -z "$export_symbols"; then
490805cf1079Smrg	    export_symbols=$output_objdir/$outputname.exp
490904007ebaSmrg	    $opt_dry_run || {
491004007ebaSmrg	      $RM $export_symbols
491105cf1079Smrg	      eval "$SED -n -e '/^: @PROGRAM@ $/d' -e 's/^.* \(.*\)$/\1/p' "'< "$nlist" > "$export_symbols"'
491204007ebaSmrg	      case $host in
491304007ebaSmrg	      *cygwin* | *mingw* | *cegcc* )
491404007ebaSmrg                eval "echo EXPORTS "'> "$output_objdir/$outputname.def"'
491504007ebaSmrg                eval 'cat "$export_symbols" >> "$output_objdir/$outputname.def"'
491604007ebaSmrg	        ;;
491704007ebaSmrg	      esac
491804007ebaSmrg	    }
491904007ebaSmrg	  else
492004007ebaSmrg	    $opt_dry_run || {
492105cf1079Smrg	      eval "$SED -e 's/\([].[*^$]\)/\\\\\1/g' -e 's/^/ /' -e 's/$/$/'"' < "$export_symbols" > "$output_objdir/$outputname.exp"'
492204007ebaSmrg	      eval '$GREP -f "$output_objdir/$outputname.exp" < "$nlist" > "$nlist"T'
492304007ebaSmrg	      eval '$MV "$nlist"T "$nlist"'
492404007ebaSmrg	      case $host in
492504007ebaSmrg	        *cygwin* | *mingw* | *cegcc* )
492604007ebaSmrg	          eval "echo EXPORTS "'> "$output_objdir/$outputname.def"'
492704007ebaSmrg	          eval 'cat "$nlist" >> "$output_objdir/$outputname.def"'
492804007ebaSmrg	          ;;
492904007ebaSmrg	      esac
493004007ebaSmrg	    }
493104007ebaSmrg	  fi
493204007ebaSmrg	fi
493304007ebaSmrg
493404007ebaSmrg	for dlprefile in $dlprefiles; do
493505cf1079Smrg	  func_verbose "extracting global C symbols from '$dlprefile'"
493604007ebaSmrg	  func_basename "$dlprefile"
493705cf1079Smrg	  name=$func_basename_result
493804007ebaSmrg          case $host in
493904007ebaSmrg	    *cygwin* | *mingw* | *cegcc* )
494004007ebaSmrg	      # if an import library, we need to obtain dlname
494104007ebaSmrg	      if func_win32_import_lib_p "$dlprefile"; then
494204007ebaSmrg	        func_tr_sh "$dlprefile"
494304007ebaSmrg	        eval "curr_lafile=\$libfile_$func_tr_sh_result"
494405cf1079Smrg	        dlprefile_dlbasename=
494504007ebaSmrg	        if test -n "$curr_lafile" && func_lalib_p "$curr_lafile"; then
494604007ebaSmrg	          # Use subshell, to avoid clobbering current variable values
494704007ebaSmrg	          dlprefile_dlname=`source "$curr_lafile" && echo "$dlname"`
494805cf1079Smrg	          if test -n "$dlprefile_dlname"; then
494904007ebaSmrg	            func_basename "$dlprefile_dlname"
495005cf1079Smrg	            dlprefile_dlbasename=$func_basename_result
495104007ebaSmrg	          else
495204007ebaSmrg	            # no lafile. user explicitly requested -dlpreopen <import library>.
495304007ebaSmrg	            $sharedlib_from_linklib_cmd "$dlprefile"
495404007ebaSmrg	            dlprefile_dlbasename=$sharedlib_from_linklib_result
495504007ebaSmrg	          fi
495604007ebaSmrg	        fi
495704007ebaSmrg	        $opt_dry_run || {
495805cf1079Smrg	          if test -n "$dlprefile_dlbasename"; then
495904007ebaSmrg	            eval '$ECHO ": $dlprefile_dlbasename" >> "$nlist"'
496004007ebaSmrg	          else
496104007ebaSmrg	            func_warning "Could not compute DLL name from $name"
496204007ebaSmrg	            eval '$ECHO ": $name " >> "$nlist"'
496304007ebaSmrg	          fi
496404007ebaSmrg	          func_to_tool_file "$dlprefile" func_convert_file_msys_to_w32
496504007ebaSmrg	          eval "$NM \"$func_to_tool_file_result\" 2>/dev/null | $global_symbol_pipe |
496604007ebaSmrg	            $SED -e '/I __imp/d' -e 's/I __nm_/D /;s/_nm__//' >> '$nlist'"
496704007ebaSmrg	        }
496804007ebaSmrg	      else # not an import lib
496904007ebaSmrg	        $opt_dry_run || {
497004007ebaSmrg	          eval '$ECHO ": $name " >> "$nlist"'
497104007ebaSmrg	          func_to_tool_file "$dlprefile" func_convert_file_msys_to_w32
497204007ebaSmrg	          eval "$NM \"$func_to_tool_file_result\" 2>/dev/null | $global_symbol_pipe >> '$nlist'"
497304007ebaSmrg	        }
497404007ebaSmrg	      fi
497504007ebaSmrg	    ;;
497604007ebaSmrg	    *)
497704007ebaSmrg	      $opt_dry_run || {
497804007ebaSmrg	        eval '$ECHO ": $name " >> "$nlist"'
497904007ebaSmrg	        func_to_tool_file "$dlprefile" func_convert_file_msys_to_w32
498004007ebaSmrg	        eval "$NM \"$func_to_tool_file_result\" 2>/dev/null | $global_symbol_pipe >> '$nlist'"
498104007ebaSmrg	      }
498204007ebaSmrg	    ;;
498304007ebaSmrg          esac
498404007ebaSmrg	done
498504007ebaSmrg
498604007ebaSmrg	$opt_dry_run || {
498704007ebaSmrg	  # Make sure we have at least an empty file.
498804007ebaSmrg	  test -f "$nlist" || : > "$nlist"
498904007ebaSmrg
499004007ebaSmrg	  if test -n "$exclude_expsyms"; then
499104007ebaSmrg	    $EGREP -v " ($exclude_expsyms)$" "$nlist" > "$nlist"T
499204007ebaSmrg	    $MV "$nlist"T "$nlist"
499304007ebaSmrg	  fi
499404007ebaSmrg
499504007ebaSmrg	  # Try sorting and uniquifying the output.
499604007ebaSmrg	  if $GREP -v "^: " < "$nlist" |
499704007ebaSmrg	      if sort -k 3 </dev/null >/dev/null 2>&1; then
499804007ebaSmrg		sort -k 3
499904007ebaSmrg	      else
500004007ebaSmrg		sort +2
500104007ebaSmrg	      fi |
500204007ebaSmrg	      uniq > "$nlist"S; then
500304007ebaSmrg	    :
500404007ebaSmrg	  else
500504007ebaSmrg	    $GREP -v "^: " < "$nlist" > "$nlist"S
500604007ebaSmrg	  fi
500704007ebaSmrg
500804007ebaSmrg	  if test -f "$nlist"S; then
500904007ebaSmrg	    eval "$global_symbol_to_cdecl"' < "$nlist"S >> "$output_objdir/$my_dlsyms"'
501004007ebaSmrg	  else
501104007ebaSmrg	    echo '/* NONE */' >> "$output_objdir/$my_dlsyms"
501204007ebaSmrg	  fi
501304007ebaSmrg
501405cf1079Smrg	  func_show_eval '$RM "${nlist}I"'
501505cf1079Smrg	  if test -n "$global_symbol_to_import"; then
501605cf1079Smrg	    eval "$global_symbol_to_import"' < "$nlist"S > "$nlist"I'
501705cf1079Smrg	  fi
501805cf1079Smrg
501904007ebaSmrg	  echo >> "$output_objdir/$my_dlsyms" "\
502004007ebaSmrg
502104007ebaSmrg/* The mapping between symbol names and symbols.  */
502204007ebaSmrgtypedef struct {
502304007ebaSmrg  const char *name;
502404007ebaSmrg  void *address;
502504007ebaSmrg} lt_dlsymlist;
502604007ebaSmrgextern LT_DLSYM_CONST lt_dlsymlist
502705cf1079Smrglt_${my_prefix}_LTX_preloaded_symbols[];\
502805cf1079Smrg"
502905cf1079Smrg
503005cf1079Smrg	  if test -s "$nlist"I; then
503105cf1079Smrg	    echo >> "$output_objdir/$my_dlsyms" "\
503205cf1079Smrgstatic void lt_syminit(void)
503305cf1079Smrg{
503405cf1079Smrg  LT_DLSYM_CONST lt_dlsymlist *symbol = lt_${my_prefix}_LTX_preloaded_symbols;
503505cf1079Smrg  for (; symbol->name; ++symbol)
503605cf1079Smrg    {"
503705cf1079Smrg	    $SED 's/.*/      if (STREQ (symbol->name, \"&\")) symbol->address = (void *) \&&;/' < "$nlist"I >> "$output_objdir/$my_dlsyms"
503805cf1079Smrg	    echo >> "$output_objdir/$my_dlsyms" "\
503905cf1079Smrg    }
504005cf1079Smrg}"
504105cf1079Smrg	  fi
504205cf1079Smrg	  echo >> "$output_objdir/$my_dlsyms" "\
504304007ebaSmrgLT_DLSYM_CONST lt_dlsymlist
504404007ebaSmrglt_${my_prefix}_LTX_preloaded_symbols[] =
504505cf1079Smrg{ {\"$my_originator\", (void *) 0},"
504605cf1079Smrg
504705cf1079Smrg	  if test -s "$nlist"I; then
504805cf1079Smrg	    echo >> "$output_objdir/$my_dlsyms" "\
504905cf1079Smrg  {\"@INIT@\", (void *) &lt_syminit},"
505005cf1079Smrg	  fi
505104007ebaSmrg
505204007ebaSmrg	  case $need_lib_prefix in
505304007ebaSmrg	  no)
505404007ebaSmrg	    eval "$global_symbol_to_c_name_address" < "$nlist" >> "$output_objdir/$my_dlsyms"
505504007ebaSmrg	    ;;
505604007ebaSmrg	  *)
505704007ebaSmrg	    eval "$global_symbol_to_c_name_address_lib_prefix" < "$nlist" >> "$output_objdir/$my_dlsyms"
505804007ebaSmrg	    ;;
505904007ebaSmrg	  esac
506004007ebaSmrg	  echo >> "$output_objdir/$my_dlsyms" "\
506104007ebaSmrg  {0, (void *) 0}
506204007ebaSmrg};
506304007ebaSmrg
506404007ebaSmrg/* This works around a problem in FreeBSD linker */
506504007ebaSmrg#ifdef FREEBSD_WORKAROUND
506604007ebaSmrgstatic const void *lt_preloaded_setup() {
506704007ebaSmrg  return lt_${my_prefix}_LTX_preloaded_symbols;
506804007ebaSmrg}
506904007ebaSmrg#endif
507004007ebaSmrg
507104007ebaSmrg#ifdef __cplusplus
507204007ebaSmrg}
507304007ebaSmrg#endif\
507404007ebaSmrg"
507504007ebaSmrg	} # !$opt_dry_run
507604007ebaSmrg
507704007ebaSmrg	pic_flag_for_symtable=
507804007ebaSmrg	case "$compile_command " in
507904007ebaSmrg	*" -static "*) ;;
508004007ebaSmrg	*)
508104007ebaSmrg	  case $host in
508204007ebaSmrg	  # compiling the symbol table file with pic_flag works around
508304007ebaSmrg	  # a FreeBSD bug that causes programs to crash when -lm is
508404007ebaSmrg	  # linked before any other PIC object.  But we must not use
508504007ebaSmrg	  # pic_flag when linking with -static.  The problem exists in
508604007ebaSmrg	  # FreeBSD 2.2.6 and is fixed in FreeBSD 3.1.
508704007ebaSmrg	  *-*-freebsd2.*|*-*-freebsd3.0*|*-*-freebsdelf3.0*)
508804007ebaSmrg	    pic_flag_for_symtable=" $pic_flag -DFREEBSD_WORKAROUND" ;;
508904007ebaSmrg	  *-*-hpux*)
509004007ebaSmrg	    pic_flag_for_symtable=" $pic_flag"  ;;
509104007ebaSmrg	  *)
509205cf1079Smrg	    $my_pic_p && pic_flag_for_symtable=" $pic_flag"
509304007ebaSmrg	    ;;
509404007ebaSmrg	  esac
509504007ebaSmrg	  ;;
509604007ebaSmrg	esac
509704007ebaSmrg	symtab_cflags=
509804007ebaSmrg	for arg in $LTCFLAGS; do
509904007ebaSmrg	  case $arg in
510004007ebaSmrg	  -pie | -fpie | -fPIE) ;;
510104007ebaSmrg	  *) func_append symtab_cflags " $arg" ;;
510204007ebaSmrg	  esac
510304007ebaSmrg	done
510404007ebaSmrg
510504007ebaSmrg	# Now compile the dynamic symbol file.
510604007ebaSmrg	func_show_eval '(cd $output_objdir && $LTCC$symtab_cflags -c$no_builtin_flag$pic_flag_for_symtable "$my_dlsyms")' 'exit $?'
510704007ebaSmrg
510804007ebaSmrg	# Clean up the generated files.
510905cf1079Smrg	func_show_eval '$RM "$output_objdir/$my_dlsyms" "$nlist" "${nlist}S" "${nlist}T" "${nlist}I"'
511004007ebaSmrg
511104007ebaSmrg	# Transform the symbol file into the correct name.
511205cf1079Smrg	symfileobj=$output_objdir/${my_outputname}S.$objext
511304007ebaSmrg	case $host in
511404007ebaSmrg	*cygwin* | *mingw* | *cegcc* )
511504007ebaSmrg	  if test -f "$output_objdir/$my_outputname.def"; then
511604007ebaSmrg	    compile_command=`$ECHO "$compile_command" | $SED "s%@SYMFILE@%$output_objdir/$my_outputname.def $symfileobj%"`
511704007ebaSmrg	    finalize_command=`$ECHO "$finalize_command" | $SED "s%@SYMFILE@%$output_objdir/$my_outputname.def $symfileobj%"`
511804007ebaSmrg	  else
511904007ebaSmrg	    compile_command=`$ECHO "$compile_command" | $SED "s%@SYMFILE@%$symfileobj%"`
512004007ebaSmrg	    finalize_command=`$ECHO "$finalize_command" | $SED "s%@SYMFILE@%$symfileobj%"`
512104007ebaSmrg	  fi
512204007ebaSmrg	  ;;
512304007ebaSmrg	*)
512404007ebaSmrg	  compile_command=`$ECHO "$compile_command" | $SED "s%@SYMFILE@%$symfileobj%"`
512504007ebaSmrg	  finalize_command=`$ECHO "$finalize_command" | $SED "s%@SYMFILE@%$symfileobj%"`
512604007ebaSmrg	  ;;
512704007ebaSmrg	esac
512804007ebaSmrg	;;
512904007ebaSmrg      *)
513005cf1079Smrg	func_fatal_error "unknown suffix for '$my_dlsyms'"
513104007ebaSmrg	;;
513204007ebaSmrg      esac
513304007ebaSmrg    else
513404007ebaSmrg      # We keep going just in case the user didn't refer to
513504007ebaSmrg      # lt_preloaded_symbols.  The linker will fail if global_symbol_pipe
513604007ebaSmrg      # really was required.
513704007ebaSmrg
513804007ebaSmrg      # Nullify the symbol file.
513904007ebaSmrg      compile_command=`$ECHO "$compile_command" | $SED "s% @SYMFILE@%%"`
514004007ebaSmrg      finalize_command=`$ECHO "$finalize_command" | $SED "s% @SYMFILE@%%"`
514104007ebaSmrg    fi
514204007ebaSmrg}
514304007ebaSmrg
514405cf1079Smrg# func_cygming_gnu_implib_p ARG
514505cf1079Smrg# This predicate returns with zero status (TRUE) if
514605cf1079Smrg# ARG is a GNU/binutils-style import library. Returns
514705cf1079Smrg# with nonzero status (FALSE) otherwise.
514805cf1079Smrgfunc_cygming_gnu_implib_p ()
514905cf1079Smrg{
515005cf1079Smrg  $debug_cmd
515105cf1079Smrg
515205cf1079Smrg  func_to_tool_file "$1" func_convert_file_msys_to_w32
515305cf1079Smrg  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)$'`
515405cf1079Smrg  test -n "$func_cygming_gnu_implib_tmp"
515505cf1079Smrg}
515605cf1079Smrg
515705cf1079Smrg# func_cygming_ms_implib_p ARG
515805cf1079Smrg# This predicate returns with zero status (TRUE) if
515905cf1079Smrg# ARG is an MS-style import library. Returns
516005cf1079Smrg# with nonzero status (FALSE) otherwise.
516105cf1079Smrgfunc_cygming_ms_implib_p ()
516205cf1079Smrg{
516305cf1079Smrg  $debug_cmd
516405cf1079Smrg
516505cf1079Smrg  func_to_tool_file "$1" func_convert_file_msys_to_w32
516605cf1079Smrg  func_cygming_ms_implib_tmp=`$NM "$func_to_tool_file_result" | eval "$global_symbol_pipe" | $GREP '_NULL_IMPORT_DESCRIPTOR'`
516705cf1079Smrg  test -n "$func_cygming_ms_implib_tmp"
516805cf1079Smrg}
516905cf1079Smrg
517004007ebaSmrg# func_win32_libid arg
517104007ebaSmrg# return the library type of file 'arg'
517204007ebaSmrg#
517304007ebaSmrg# Need a lot of goo to handle *both* DLLs and import libs
517404007ebaSmrg# Has to be a shell function in order to 'eat' the argument
517504007ebaSmrg# that is supplied when $file_magic_command is called.
517604007ebaSmrg# Despite the name, also deal with 64 bit binaries.
517704007ebaSmrgfunc_win32_libid ()
517804007ebaSmrg{
517905cf1079Smrg  $debug_cmd
518005cf1079Smrg
518105cf1079Smrg  win32_libid_type=unknown
518204007ebaSmrg  win32_fileres=`file -L $1 2>/dev/null`
518304007ebaSmrg  case $win32_fileres in
518404007ebaSmrg  *ar\ archive\ import\ library*) # definitely import
518504007ebaSmrg    win32_libid_type="x86 archive import"
518604007ebaSmrg    ;;
518704007ebaSmrg  *ar\ archive*) # could be an import, or static
518804007ebaSmrg    # Keep the egrep pattern in sync with the one in _LT_CHECK_MAGIC_METHOD.
518904007ebaSmrg    if eval $OBJDUMP -f $1 | $SED -e '10q' 2>/dev/null |
519004007ebaSmrg       $EGREP 'file format (pei*-i386(.*architecture: i386)?|pe-arm-wince|pe-x86-64)' >/dev/null; then
519105cf1079Smrg      case $nm_interface in
519205cf1079Smrg      "MS dumpbin")
519305cf1079Smrg	if func_cygming_ms_implib_p "$1" ||
519405cf1079Smrg	   func_cygming_gnu_implib_p "$1"
519505cf1079Smrg	then
519605cf1079Smrg	  win32_nmres=import
519705cf1079Smrg	else
519805cf1079Smrg	  win32_nmres=
519905cf1079Smrg	fi
520005cf1079Smrg	;;
520105cf1079Smrg      *)
520205cf1079Smrg	func_to_tool_file "$1" func_convert_file_msys_to_w32
520305cf1079Smrg	win32_nmres=`eval $NM -f posix -A \"$func_to_tool_file_result\" |
520405cf1079Smrg	  $SED -n -e '
520504007ebaSmrg	    1,100{
520604007ebaSmrg		/ I /{
520705cf1079Smrg		    s|.*|import|
520804007ebaSmrg		    p
520904007ebaSmrg		    q
521004007ebaSmrg		}
521104007ebaSmrg	    }'`
521205cf1079Smrg	;;
521305cf1079Smrg      esac
521404007ebaSmrg      case $win32_nmres in
521504007ebaSmrg      import*)  win32_libid_type="x86 archive import";;
521604007ebaSmrg      *)        win32_libid_type="x86 archive static";;
521704007ebaSmrg      esac
521804007ebaSmrg    fi
521904007ebaSmrg    ;;
522004007ebaSmrg  *DLL*)
522104007ebaSmrg    win32_libid_type="x86 DLL"
522204007ebaSmrg    ;;
522304007ebaSmrg  *executable*) # but shell scripts are "executable" too...
522404007ebaSmrg    case $win32_fileres in
522504007ebaSmrg    *MS\ Windows\ PE\ Intel*)
522604007ebaSmrg      win32_libid_type="x86 DLL"
522704007ebaSmrg      ;;
522804007ebaSmrg    esac
522904007ebaSmrg    ;;
523004007ebaSmrg  esac
523104007ebaSmrg  $ECHO "$win32_libid_type"
523204007ebaSmrg}
523304007ebaSmrg
523404007ebaSmrg# func_cygming_dll_for_implib ARG
523504007ebaSmrg#
523604007ebaSmrg# Platform-specific function to extract the
523704007ebaSmrg# name of the DLL associated with the specified
523804007ebaSmrg# import library ARG.
523904007ebaSmrg# Invoked by eval'ing the libtool variable
524004007ebaSmrg#    $sharedlib_from_linklib_cmd
524104007ebaSmrg# Result is available in the variable
524204007ebaSmrg#    $sharedlib_from_linklib_result
524304007ebaSmrgfunc_cygming_dll_for_implib ()
524404007ebaSmrg{
524505cf1079Smrg  $debug_cmd
524605cf1079Smrg
524704007ebaSmrg  sharedlib_from_linklib_result=`$DLLTOOL --identify-strict --identify "$1"`
524804007ebaSmrg}
524904007ebaSmrg
525004007ebaSmrg# func_cygming_dll_for_implib_fallback_core SECTION_NAME LIBNAMEs
525104007ebaSmrg#
525204007ebaSmrg# The is the core of a fallback implementation of a
525304007ebaSmrg# platform-specific function to extract the name of the
525404007ebaSmrg# DLL associated with the specified import library LIBNAME.
525504007ebaSmrg#
525604007ebaSmrg# SECTION_NAME is either .idata$6 or .idata$7, depending
525704007ebaSmrg# on the platform and compiler that created the implib.
525804007ebaSmrg#
525904007ebaSmrg# Echos the name of the DLL associated with the
526004007ebaSmrg# specified import library.
526104007ebaSmrgfunc_cygming_dll_for_implib_fallback_core ()
526204007ebaSmrg{
526305cf1079Smrg  $debug_cmd
526405cf1079Smrg
526504007ebaSmrg  match_literal=`$ECHO "$1" | $SED "$sed_make_literal_regex"`
526604007ebaSmrg  $OBJDUMP -s --section "$1" "$2" 2>/dev/null |
526704007ebaSmrg    $SED '/^Contents of section '"$match_literal"':/{
526804007ebaSmrg      # Place marker at beginning of archive member dllname section
526904007ebaSmrg      s/.*/====MARK====/
527004007ebaSmrg      p
527104007ebaSmrg      d
527204007ebaSmrg    }
527304007ebaSmrg    # These lines can sometimes be longer than 43 characters, but
527404007ebaSmrg    # are always uninteresting
527504007ebaSmrg    /:[	 ]*file format pe[i]\{,1\}-/d
527604007ebaSmrg    /^In archive [^:]*:/d
527704007ebaSmrg    # Ensure marker is printed
527804007ebaSmrg    /^====MARK====/p
527904007ebaSmrg    # Remove all lines with less than 43 characters
528004007ebaSmrg    /^.\{43\}/!d
528104007ebaSmrg    # From remaining lines, remove first 43 characters
528204007ebaSmrg    s/^.\{43\}//' |
528304007ebaSmrg    $SED -n '
528404007ebaSmrg      # Join marker and all lines until next marker into a single line
528504007ebaSmrg      /^====MARK====/ b para
528604007ebaSmrg      H
528704007ebaSmrg      $ b para
528804007ebaSmrg      b
528904007ebaSmrg      :para
529004007ebaSmrg      x
529104007ebaSmrg      s/\n//g
529204007ebaSmrg      # Remove the marker
529304007ebaSmrg      s/^====MARK====//
529404007ebaSmrg      # Remove trailing dots and whitespace
529504007ebaSmrg      s/[\. \t]*$//
529604007ebaSmrg      # Print
529704007ebaSmrg      /./p' |
529804007ebaSmrg    # we now have a list, one entry per line, of the stringified
529904007ebaSmrg    # contents of the appropriate section of all members of the
530005cf1079Smrg    # archive that possess that section. Heuristic: eliminate
530105cf1079Smrg    # all those that have a first or second character that is
530204007ebaSmrg    # a '.' (that is, objdump's representation of an unprintable
530304007ebaSmrg    # character.) This should work for all archives with less than
530404007ebaSmrg    # 0x302f exports -- but will fail for DLLs whose name actually
530504007ebaSmrg    # begins with a literal '.' or a single character followed by
530604007ebaSmrg    # a '.'.
530704007ebaSmrg    #
530804007ebaSmrg    # Of those that remain, print the first one.
530904007ebaSmrg    $SED -e '/^\./d;/^.\./d;q'
531004007ebaSmrg}
531104007ebaSmrg
531204007ebaSmrg# func_cygming_dll_for_implib_fallback ARG
531304007ebaSmrg# Platform-specific function to extract the
531404007ebaSmrg# name of the DLL associated with the specified
531504007ebaSmrg# import library ARG.
531604007ebaSmrg#
531704007ebaSmrg# This fallback implementation is for use when $DLLTOOL
531804007ebaSmrg# does not support the --identify-strict option.
531904007ebaSmrg# Invoked by eval'ing the libtool variable
532004007ebaSmrg#    $sharedlib_from_linklib_cmd
532104007ebaSmrg# Result is available in the variable
532204007ebaSmrg#    $sharedlib_from_linklib_result
532304007ebaSmrgfunc_cygming_dll_for_implib_fallback ()
532404007ebaSmrg{
532505cf1079Smrg  $debug_cmd
532605cf1079Smrg
532705cf1079Smrg  if func_cygming_gnu_implib_p "$1"; then
532804007ebaSmrg    # binutils import library
532904007ebaSmrg    sharedlib_from_linklib_result=`func_cygming_dll_for_implib_fallback_core '.idata$7' "$1"`
533005cf1079Smrg  elif func_cygming_ms_implib_p "$1"; then
533104007ebaSmrg    # ms-generated import library
533204007ebaSmrg    sharedlib_from_linklib_result=`func_cygming_dll_for_implib_fallback_core '.idata$6' "$1"`
533304007ebaSmrg  else
533404007ebaSmrg    # unknown
533505cf1079Smrg    sharedlib_from_linklib_result=
533604007ebaSmrg  fi
533704007ebaSmrg}
533804007ebaSmrg
533904007ebaSmrg
534004007ebaSmrg# func_extract_an_archive dir oldlib
534104007ebaSmrgfunc_extract_an_archive ()
534204007ebaSmrg{
534305cf1079Smrg    $debug_cmd
534405cf1079Smrg
534505cf1079Smrg    f_ex_an_ar_dir=$1; shift
534605cf1079Smrg    f_ex_an_ar_oldlib=$1
534705cf1079Smrg    if test yes = "$lock_old_archive_extraction"; then
534804007ebaSmrg      lockfile=$f_ex_an_ar_oldlib.lock
534904007ebaSmrg      until $opt_dry_run || ln "$progpath" "$lockfile" 2>/dev/null; do
535004007ebaSmrg	func_echo "Waiting for $lockfile to be removed"
535104007ebaSmrg	sleep 2
535204007ebaSmrg      done
535304007ebaSmrg    fi
535404007ebaSmrg    func_show_eval "(cd \$f_ex_an_ar_dir && $AR x \"\$f_ex_an_ar_oldlib\")" \
535504007ebaSmrg		   'stat=$?; rm -f "$lockfile"; exit $stat'
535605cf1079Smrg    if test yes = "$lock_old_archive_extraction"; then
535704007ebaSmrg      $opt_dry_run || rm -f "$lockfile"
535804007ebaSmrg    fi
535904007ebaSmrg    if ($AR t "$f_ex_an_ar_oldlib" | sort | sort -uc >/dev/null 2>&1); then
536004007ebaSmrg     :
536104007ebaSmrg    else
536204007ebaSmrg      func_fatal_error "object name conflicts in archive: $f_ex_an_ar_dir/$f_ex_an_ar_oldlib"
536304007ebaSmrg    fi
536404007ebaSmrg}
536504007ebaSmrg
536604007ebaSmrg
536704007ebaSmrg# func_extract_archives gentop oldlib ...
536804007ebaSmrgfunc_extract_archives ()
536904007ebaSmrg{
537005cf1079Smrg    $debug_cmd
537105cf1079Smrg
537205cf1079Smrg    my_gentop=$1; shift
537304007ebaSmrg    my_oldlibs=${1+"$@"}
537405cf1079Smrg    my_oldobjs=
537505cf1079Smrg    my_xlib=
537605cf1079Smrg    my_xabs=
537705cf1079Smrg    my_xdir=
537804007ebaSmrg
537904007ebaSmrg    for my_xlib in $my_oldlibs; do
538004007ebaSmrg      # Extract the objects.
538104007ebaSmrg      case $my_xlib in
538205cf1079Smrg	[\\/]* | [A-Za-z]:[\\/]*) my_xabs=$my_xlib ;;
538304007ebaSmrg	*) my_xabs=`pwd`"/$my_xlib" ;;
538404007ebaSmrg      esac
538504007ebaSmrg      func_basename "$my_xlib"
538605cf1079Smrg      my_xlib=$func_basename_result
538704007ebaSmrg      my_xlib_u=$my_xlib
538804007ebaSmrg      while :; do
538904007ebaSmrg        case " $extracted_archives " in
539004007ebaSmrg	*" $my_xlib_u "*)
539104007ebaSmrg	  func_arith $extracted_serial + 1
539204007ebaSmrg	  extracted_serial=$func_arith_result
539304007ebaSmrg	  my_xlib_u=lt$extracted_serial-$my_xlib ;;
539404007ebaSmrg	*) break ;;
539504007ebaSmrg	esac
539604007ebaSmrg      done
539704007ebaSmrg      extracted_archives="$extracted_archives $my_xlib_u"
539805cf1079Smrg      my_xdir=$my_gentop/$my_xlib_u
539904007ebaSmrg
540004007ebaSmrg      func_mkdir_p "$my_xdir"
540104007ebaSmrg
540204007ebaSmrg      case $host in
540304007ebaSmrg      *-darwin*)
540404007ebaSmrg	func_verbose "Extracting $my_xabs"
540504007ebaSmrg	# Do not bother doing anything if just a dry run
540604007ebaSmrg	$opt_dry_run || {
540704007ebaSmrg	  darwin_orig_dir=`pwd`
540804007ebaSmrg	  cd $my_xdir || exit $?
540904007ebaSmrg	  darwin_archive=$my_xabs
541004007ebaSmrg	  darwin_curdir=`pwd`
541105cf1079Smrg	  func_basename "$darwin_archive"
541205cf1079Smrg	  darwin_base_archive=$func_basename_result
541304007ebaSmrg	  darwin_arches=`$LIPO -info "$darwin_archive" 2>/dev/null | $GREP Architectures 2>/dev/null || true`
541404007ebaSmrg	  if test -n "$darwin_arches"; then
541504007ebaSmrg	    darwin_arches=`$ECHO "$darwin_arches" | $SED -e 's/.*are://'`
541604007ebaSmrg	    darwin_arch=
541704007ebaSmrg	    func_verbose "$darwin_base_archive has multiple architectures $darwin_arches"
541805cf1079Smrg	    for darwin_arch in  $darwin_arches; do
541905cf1079Smrg	      func_mkdir_p "unfat-$$/$darwin_base_archive-$darwin_arch"
542005cf1079Smrg	      $LIPO -thin $darwin_arch -output "unfat-$$/$darwin_base_archive-$darwin_arch/$darwin_base_archive" "$darwin_archive"
542105cf1079Smrg	      cd "unfat-$$/$darwin_base_archive-$darwin_arch"
542205cf1079Smrg	      func_extract_an_archive "`pwd`" "$darwin_base_archive"
542304007ebaSmrg	      cd "$darwin_curdir"
542405cf1079Smrg	      $RM "unfat-$$/$darwin_base_archive-$darwin_arch/$darwin_base_archive"
542504007ebaSmrg	    done # $darwin_arches
542604007ebaSmrg            ## Okay now we've a bunch of thin objects, gotta fatten them up :)
542705cf1079Smrg	    darwin_filelist=`find unfat-$$ -type f -name \*.o -print -o -name \*.lo -print | $SED -e "$sed_basename" | sort -u`
542804007ebaSmrg	    darwin_file=
542904007ebaSmrg	    darwin_files=
543004007ebaSmrg	    for darwin_file in $darwin_filelist; do
543104007ebaSmrg	      darwin_files=`find unfat-$$ -name $darwin_file -print | sort | $NL2SP`
543204007ebaSmrg	      $LIPO -create -output "$darwin_file" $darwin_files
543304007ebaSmrg	    done # $darwin_filelist
543404007ebaSmrg	    $RM -rf unfat-$$
543504007ebaSmrg	    cd "$darwin_orig_dir"
543604007ebaSmrg	  else
543704007ebaSmrg	    cd $darwin_orig_dir
543804007ebaSmrg	    func_extract_an_archive "$my_xdir" "$my_xabs"
543904007ebaSmrg	  fi # $darwin_arches
544004007ebaSmrg	} # !$opt_dry_run
544104007ebaSmrg	;;
544204007ebaSmrg      *)
544304007ebaSmrg        func_extract_an_archive "$my_xdir" "$my_xabs"
544404007ebaSmrg	;;
544504007ebaSmrg      esac
544604007ebaSmrg      my_oldobjs="$my_oldobjs "`find $my_xdir -name \*.$objext -print -o -name \*.lo -print | sort | $NL2SP`
544704007ebaSmrg    done
544804007ebaSmrg
544905cf1079Smrg    func_extract_archives_result=$my_oldobjs
545004007ebaSmrg}
545104007ebaSmrg
545204007ebaSmrg
545304007ebaSmrg# func_emit_wrapper [arg=no]
545404007ebaSmrg#
545504007ebaSmrg# Emit a libtool wrapper script on stdout.
545604007ebaSmrg# Don't directly open a file because we may want to
545704007ebaSmrg# incorporate the script contents within a cygwin/mingw
545804007ebaSmrg# wrapper executable.  Must ONLY be called from within
545904007ebaSmrg# func_mode_link because it depends on a number of variables
546004007ebaSmrg# set therein.
546104007ebaSmrg#
546204007ebaSmrg# ARG is the value that the WRAPPER_SCRIPT_BELONGS_IN_OBJDIR
546304007ebaSmrg# variable will take.  If 'yes', then the emitted script
546405cf1079Smrg# will assume that the directory where it is stored is
546504007ebaSmrg# the $objdir directory.  This is a cygwin/mingw-specific
546604007ebaSmrg# behavior.
546704007ebaSmrgfunc_emit_wrapper ()
546804007ebaSmrg{
546904007ebaSmrg	func_emit_wrapper_arg1=${1-no}
547004007ebaSmrg
547104007ebaSmrg	$ECHO "\
547204007ebaSmrg#! $SHELL
547304007ebaSmrg
547404007ebaSmrg# $output - temporary wrapper script for $objdir/$outputname
547505cf1079Smrg# Generated by $PROGRAM (GNU $PACKAGE) $VERSION
547604007ebaSmrg#
547704007ebaSmrg# The $output program cannot be directly executed until all the libtool
547804007ebaSmrg# libraries that it depends on are installed.
547904007ebaSmrg#
548004007ebaSmrg# This wrapper script should never be moved out of the build directory.
548104007ebaSmrg# If it is, it will not operate correctly.
548204007ebaSmrg
548304007ebaSmrg# Sed substitution that helps us do robust quoting.  It backslashifies
548404007ebaSmrg# metacharacters that are still active within double-quoted strings.
548504007ebaSmrgsed_quote_subst='$sed_quote_subst'
548604007ebaSmrg
548704007ebaSmrg# Be Bourne compatible
548804007ebaSmrgif test -n \"\${ZSH_VERSION+set}\" && (emulate sh) >/dev/null 2>&1; then
548904007ebaSmrg  emulate sh
549004007ebaSmrg  NULLCMD=:
549104007ebaSmrg  # Zsh 3.x and 4.x performs word splitting on \${1+\"\$@\"}, which
549204007ebaSmrg  # is contrary to our usage.  Disable this feature.
549304007ebaSmrg  alias -g '\${1+\"\$@\"}'='\"\$@\"'
549404007ebaSmrg  setopt NO_GLOB_SUBST
549504007ebaSmrgelse
549604007ebaSmrg  case \`(set -o) 2>/dev/null\` in *posix*) set -o posix;; esac
549704007ebaSmrgfi
549804007ebaSmrgBIN_SH=xpg4; export BIN_SH # for Tru64
549904007ebaSmrgDUALCASE=1; export DUALCASE # for MKS sh
550004007ebaSmrg
550104007ebaSmrg# The HP-UX ksh and POSIX shell print the target directory to stdout
550204007ebaSmrg# if CDPATH is set.
550304007ebaSmrg(unset CDPATH) >/dev/null 2>&1 && unset CDPATH
550404007ebaSmrg
550504007ebaSmrgrelink_command=\"$relink_command\"
550604007ebaSmrg
550704007ebaSmrg# This environment variable determines our operation mode.
550804007ebaSmrgif test \"\$libtool_install_magic\" = \"$magic\"; then
550904007ebaSmrg  # install mode needs the following variables:
551004007ebaSmrg  generated_by_libtool_version='$macro_version'
551104007ebaSmrg  notinst_deplibs='$notinst_deplibs'
551204007ebaSmrgelse
551304007ebaSmrg  # When we are sourced in execute mode, \$file and \$ECHO are already set.
551404007ebaSmrg  if test \"\$libtool_execute_magic\" != \"$magic\"; then
551504007ebaSmrg    file=\"\$0\""
551604007ebaSmrg
551779d5fcd7Smrg    func_quote_arg pretty "$ECHO"
551879d5fcd7Smrg    qECHO=$func_quote_arg_result
551904007ebaSmrg    $ECHO "\
552004007ebaSmrg
552104007ebaSmrg# A function that is used when there is no print builtin or printf.
552204007ebaSmrgfunc_fallback_echo ()
552304007ebaSmrg{
552404007ebaSmrg  eval 'cat <<_LTECHO_EOF
552504007ebaSmrg\$1
552604007ebaSmrg_LTECHO_EOF'
552704007ebaSmrg}
552879d5fcd7Smrg    ECHO=$qECHO
552904007ebaSmrg  fi
553004007ebaSmrg
553104007ebaSmrg# Very basic option parsing. These options are (a) specific to
553204007ebaSmrg# the libtool wrapper, (b) are identical between the wrapper
553305cf1079Smrg# /script/ and the wrapper /executable/ that is used only on
553404007ebaSmrg# windows platforms, and (c) all begin with the string "--lt-"
553505cf1079Smrg# (application programs are unlikely to have options that match
553604007ebaSmrg# this pattern).
553704007ebaSmrg#
553804007ebaSmrg# There are only two supported options: --lt-debug and
553904007ebaSmrg# --lt-dump-script. There is, deliberately, no --lt-help.
554004007ebaSmrg#
554104007ebaSmrg# The first argument to this parsing function should be the
554204007ebaSmrg# script's $0 value, followed by "$@".
554304007ebaSmrglt_option_debug=
554404007ebaSmrgfunc_parse_lt_options ()
554504007ebaSmrg{
554604007ebaSmrg  lt_script_arg0=\$0
554704007ebaSmrg  shift
554804007ebaSmrg  for lt_opt
554904007ebaSmrg  do
555004007ebaSmrg    case \"\$lt_opt\" in
555104007ebaSmrg    --lt-debug) lt_option_debug=1 ;;
555204007ebaSmrg    --lt-dump-script)
555304007ebaSmrg        lt_dump_D=\`\$ECHO \"X\$lt_script_arg0\" | $SED -e 's/^X//' -e 's%/[^/]*$%%'\`
555404007ebaSmrg        test \"X\$lt_dump_D\" = \"X\$lt_script_arg0\" && lt_dump_D=.
555504007ebaSmrg        lt_dump_F=\`\$ECHO \"X\$lt_script_arg0\" | $SED -e 's/^X//' -e 's%^.*/%%'\`
555604007ebaSmrg        cat \"\$lt_dump_D/\$lt_dump_F\"
555704007ebaSmrg        exit 0
555804007ebaSmrg      ;;
555904007ebaSmrg    --lt-*)
556004007ebaSmrg        \$ECHO \"Unrecognized --lt- option: '\$lt_opt'\" 1>&2
556104007ebaSmrg        exit 1
556204007ebaSmrg      ;;
556304007ebaSmrg    esac
556404007ebaSmrg  done
556504007ebaSmrg
556604007ebaSmrg  # Print the debug banner immediately:
556704007ebaSmrg  if test -n \"\$lt_option_debug\"; then
556805cf1079Smrg    echo \"$outputname:$output:\$LINENO: libtool wrapper (GNU $PACKAGE) $VERSION\" 1>&2
556904007ebaSmrg  fi
557004007ebaSmrg}
557104007ebaSmrg
557204007ebaSmrg# Used when --lt-debug. Prints its arguments to stdout
557304007ebaSmrg# (redirection is the responsibility of the caller)
557404007ebaSmrgfunc_lt_dump_args ()
557504007ebaSmrg{
557604007ebaSmrg  lt_dump_args_N=1;
557704007ebaSmrg  for lt_arg
557804007ebaSmrg  do
557905cf1079Smrg    \$ECHO \"$outputname:$output:\$LINENO: newargv[\$lt_dump_args_N]: \$lt_arg\"
558004007ebaSmrg    lt_dump_args_N=\`expr \$lt_dump_args_N + 1\`
558104007ebaSmrg  done
558204007ebaSmrg}
558304007ebaSmrg
558404007ebaSmrg# Core function for launching the target application
558504007ebaSmrgfunc_exec_program_core ()
558604007ebaSmrg{
558704007ebaSmrg"
558804007ebaSmrg  case $host in
558904007ebaSmrg  # Backslashes separate directories on plain windows
559004007ebaSmrg  *-*-mingw | *-*-os2* | *-cegcc*)
559104007ebaSmrg    $ECHO "\
559204007ebaSmrg      if test -n \"\$lt_option_debug\"; then
559305cf1079Smrg        \$ECHO \"$outputname:$output:\$LINENO: newargv[0]: \$progdir\\\\\$program\" 1>&2
559404007ebaSmrg        func_lt_dump_args \${1+\"\$@\"} 1>&2
559504007ebaSmrg      fi
559604007ebaSmrg      exec \"\$progdir\\\\\$program\" \${1+\"\$@\"}
559704007ebaSmrg"
559804007ebaSmrg    ;;
559904007ebaSmrg
560004007ebaSmrg  *)
560104007ebaSmrg    $ECHO "\
560204007ebaSmrg      if test -n \"\$lt_option_debug\"; then
560305cf1079Smrg        \$ECHO \"$outputname:$output:\$LINENO: newargv[0]: \$progdir/\$program\" 1>&2
560404007ebaSmrg        func_lt_dump_args \${1+\"\$@\"} 1>&2
560504007ebaSmrg      fi
560604007ebaSmrg      exec \"\$progdir/\$program\" \${1+\"\$@\"}
560704007ebaSmrg"
560804007ebaSmrg    ;;
560904007ebaSmrg  esac
561004007ebaSmrg  $ECHO "\
561104007ebaSmrg      \$ECHO \"\$0: cannot exec \$program \$*\" 1>&2
561204007ebaSmrg      exit 1
561304007ebaSmrg}
561404007ebaSmrg
561504007ebaSmrg# A function to encapsulate launching the target application
561604007ebaSmrg# Strips options in the --lt-* namespace from \$@ and
561704007ebaSmrg# launches target application with the remaining arguments.
561804007ebaSmrgfunc_exec_program ()
561904007ebaSmrg{
562004007ebaSmrg  case \" \$* \" in
562104007ebaSmrg  *\\ --lt-*)
562204007ebaSmrg    for lt_wr_arg
562304007ebaSmrg    do
562404007ebaSmrg      case \$lt_wr_arg in
562504007ebaSmrg      --lt-*) ;;
562604007ebaSmrg      *) set x \"\$@\" \"\$lt_wr_arg\"; shift;;
562704007ebaSmrg      esac
562804007ebaSmrg      shift
562904007ebaSmrg    done ;;
563004007ebaSmrg  esac
563104007ebaSmrg  func_exec_program_core \${1+\"\$@\"}
563204007ebaSmrg}
563304007ebaSmrg
563404007ebaSmrg  # Parse options
563504007ebaSmrg  func_parse_lt_options \"\$0\" \${1+\"\$@\"}
563604007ebaSmrg
563704007ebaSmrg  # Find the directory that this script lives in.
563804007ebaSmrg  thisdir=\`\$ECHO \"\$file\" | $SED 's%/[^/]*$%%'\`
563904007ebaSmrg  test \"x\$thisdir\" = \"x\$file\" && thisdir=.
564004007ebaSmrg
564104007ebaSmrg  # Follow symbolic links until we get to the real thisdir.
564204007ebaSmrg  file=\`ls -ld \"\$file\" | $SED -n 's/.*-> //p'\`
564304007ebaSmrg  while test -n \"\$file\"; do
564404007ebaSmrg    destdir=\`\$ECHO \"\$file\" | $SED 's%/[^/]*\$%%'\`
564504007ebaSmrg
564604007ebaSmrg    # If there was a directory component, then change thisdir.
564704007ebaSmrg    if test \"x\$destdir\" != \"x\$file\"; then
564804007ebaSmrg      case \"\$destdir\" in
564904007ebaSmrg      [\\\\/]* | [A-Za-z]:[\\\\/]*) thisdir=\"\$destdir\" ;;
565004007ebaSmrg      *) thisdir=\"\$thisdir/\$destdir\" ;;
565104007ebaSmrg      esac
565204007ebaSmrg    fi
565304007ebaSmrg
565404007ebaSmrg    file=\`\$ECHO \"\$file\" | $SED 's%^.*/%%'\`
565504007ebaSmrg    file=\`ls -ld \"\$thisdir/\$file\" | $SED -n 's/.*-> //p'\`
565604007ebaSmrg  done
565704007ebaSmrg
565804007ebaSmrg  # Usually 'no', except on cygwin/mingw when embedded into
565904007ebaSmrg  # the cwrapper.
566004007ebaSmrg  WRAPPER_SCRIPT_BELONGS_IN_OBJDIR=$func_emit_wrapper_arg1
566104007ebaSmrg  if test \"\$WRAPPER_SCRIPT_BELONGS_IN_OBJDIR\" = \"yes\"; then
566204007ebaSmrg    # special case for '.'
566304007ebaSmrg    if test \"\$thisdir\" = \".\"; then
566404007ebaSmrg      thisdir=\`pwd\`
566504007ebaSmrg    fi
566604007ebaSmrg    # remove .libs from thisdir
566704007ebaSmrg    case \"\$thisdir\" in
566804007ebaSmrg    *[\\\\/]$objdir ) thisdir=\`\$ECHO \"\$thisdir\" | $SED 's%[\\\\/][^\\\\/]*$%%'\` ;;
566904007ebaSmrg    $objdir )   thisdir=. ;;
567004007ebaSmrg    esac
567104007ebaSmrg  fi
567204007ebaSmrg
567304007ebaSmrg  # Try to get the absolute directory name.
567404007ebaSmrg  absdir=\`cd \"\$thisdir\" && pwd\`
567504007ebaSmrg  test -n \"\$absdir\" && thisdir=\"\$absdir\"
567604007ebaSmrg"
567704007ebaSmrg
567805cf1079Smrg	if test yes = "$fast_install"; then
567904007ebaSmrg	  $ECHO "\
568004007ebaSmrg  program=lt-'$outputname'$exeext
568104007ebaSmrg  progdir=\"\$thisdir/$objdir\"
568204007ebaSmrg
568304007ebaSmrg  if test ! -f \"\$progdir/\$program\" ||
568405cf1079Smrg     { file=\`ls -1dt \"\$progdir/\$program\" \"\$progdir/../\$program\" 2>/dev/null | $SED 1q\`; \\
568504007ebaSmrg       test \"X\$file\" != \"X\$progdir/\$program\"; }; then
568604007ebaSmrg
568704007ebaSmrg    file=\"\$\$-\$program\"
568804007ebaSmrg
568904007ebaSmrg    if test ! -d \"\$progdir\"; then
569004007ebaSmrg      $MKDIR \"\$progdir\"
569104007ebaSmrg    else
569204007ebaSmrg      $RM \"\$progdir/\$file\"
569304007ebaSmrg    fi"
569404007ebaSmrg
569504007ebaSmrg	  $ECHO "\
569604007ebaSmrg
569704007ebaSmrg    # relink executable if necessary
569804007ebaSmrg    if test -n \"\$relink_command\"; then
569904007ebaSmrg      if relink_command_output=\`eval \$relink_command 2>&1\`; then :
570004007ebaSmrg      else
570105cf1079Smrg	\$ECHO \"\$relink_command_output\" >&2
570204007ebaSmrg	$RM \"\$progdir/\$file\"
570304007ebaSmrg	exit 1
570404007ebaSmrg      fi
570504007ebaSmrg    fi
570604007ebaSmrg
570704007ebaSmrg    $MV \"\$progdir/\$file\" \"\$progdir/\$program\" 2>/dev/null ||
570804007ebaSmrg    { $RM \"\$progdir/\$program\";
570904007ebaSmrg      $MV \"\$progdir/\$file\" \"\$progdir/\$program\"; }
571004007ebaSmrg    $RM \"\$progdir/\$file\"
571104007ebaSmrg  fi"
571204007ebaSmrg	else
571304007ebaSmrg	  $ECHO "\
571404007ebaSmrg  program='$outputname'
571504007ebaSmrg  progdir=\"\$thisdir/$objdir\"
571604007ebaSmrg"
571704007ebaSmrg	fi
571804007ebaSmrg
571904007ebaSmrg	$ECHO "\
572004007ebaSmrg
572104007ebaSmrg  if test -f \"\$progdir/\$program\"; then"
572204007ebaSmrg
572304007ebaSmrg	# fixup the dll searchpath if we need to.
572404007ebaSmrg	#
572504007ebaSmrg	# Fix the DLL searchpath if we need to.  Do this before prepending
572604007ebaSmrg	# to shlibpath, because on Windows, both are PATH and uninstalled
572704007ebaSmrg	# libraries must come first.
572804007ebaSmrg	if test -n "$dllsearchpath"; then
572904007ebaSmrg	  $ECHO "\
573004007ebaSmrg    # Add the dll search path components to the executable PATH
573104007ebaSmrg    PATH=$dllsearchpath:\$PATH
573204007ebaSmrg"
573304007ebaSmrg	fi
573404007ebaSmrg
573504007ebaSmrg	# Export our shlibpath_var if we have one.
573605cf1079Smrg	if test yes = "$shlibpath_overrides_runpath" && test -n "$shlibpath_var" && test -n "$temp_rpath"; then
573704007ebaSmrg	  $ECHO "\
573804007ebaSmrg    # Add our own library path to $shlibpath_var
573904007ebaSmrg    $shlibpath_var=\"$temp_rpath\$$shlibpath_var\"
574004007ebaSmrg
574104007ebaSmrg    # Some systems cannot cope with colon-terminated $shlibpath_var
574204007ebaSmrg    # The second colon is a workaround for a bug in BeOS R4 sed
574304007ebaSmrg    $shlibpath_var=\`\$ECHO \"\$$shlibpath_var\" | $SED 's/::*\$//'\`
574404007ebaSmrg
574504007ebaSmrg    export $shlibpath_var
574604007ebaSmrg"
574704007ebaSmrg	fi
574804007ebaSmrg
574904007ebaSmrg	$ECHO "\
575004007ebaSmrg    if test \"\$libtool_execute_magic\" != \"$magic\"; then
575104007ebaSmrg      # Run the actual program with our arguments.
575204007ebaSmrg      func_exec_program \${1+\"\$@\"}
575304007ebaSmrg    fi
575404007ebaSmrg  else
575504007ebaSmrg    # The program doesn't exist.
575605cf1079Smrg    \$ECHO \"\$0: error: '\$progdir/\$program' does not exist\" 1>&2
575704007ebaSmrg    \$ECHO \"This script is just a wrapper for \$program.\" 1>&2
575804007ebaSmrg    \$ECHO \"See the $PACKAGE documentation for more information.\" 1>&2
575904007ebaSmrg    exit 1
576004007ebaSmrg  fi
576104007ebaSmrgfi\
576204007ebaSmrg"
576304007ebaSmrg}
576404007ebaSmrg
576504007ebaSmrg
576604007ebaSmrg# func_emit_cwrapperexe_src
576704007ebaSmrg# emit the source code for a wrapper executable on stdout
576804007ebaSmrg# Must ONLY be called from within func_mode_link because
576904007ebaSmrg# it depends on a number of variable set therein.
577004007ebaSmrgfunc_emit_cwrapperexe_src ()
577104007ebaSmrg{
577204007ebaSmrg	cat <<EOF
577304007ebaSmrg
577404007ebaSmrg/* $cwrappersource - temporary wrapper executable for $objdir/$outputname
577505cf1079Smrg   Generated by $PROGRAM (GNU $PACKAGE) $VERSION
577604007ebaSmrg
577704007ebaSmrg   The $output program cannot be directly executed until all the libtool
577804007ebaSmrg   libraries that it depends on are installed.
577904007ebaSmrg
578004007ebaSmrg   This wrapper executable should never be moved out of the build directory.
578104007ebaSmrg   If it is, it will not operate correctly.
578204007ebaSmrg*/
578304007ebaSmrgEOF
578404007ebaSmrg	    cat <<"EOF"
578504007ebaSmrg#ifdef _MSC_VER
578604007ebaSmrg# define _CRT_SECURE_NO_DEPRECATE 1
578704007ebaSmrg#endif
578804007ebaSmrg#include <stdio.h>
578904007ebaSmrg#include <stdlib.h>
579004007ebaSmrg#ifdef _MSC_VER
579104007ebaSmrg# include <direct.h>
579204007ebaSmrg# include <process.h>
579304007ebaSmrg# include <io.h>
579404007ebaSmrg#else
579504007ebaSmrg# include <unistd.h>
579604007ebaSmrg# include <stdint.h>
579704007ebaSmrg# ifdef __CYGWIN__
579804007ebaSmrg#  include <io.h>
579904007ebaSmrg# endif
580004007ebaSmrg#endif
580104007ebaSmrg#include <malloc.h>
580204007ebaSmrg#include <stdarg.h>
580304007ebaSmrg#include <assert.h>
580404007ebaSmrg#include <string.h>
580504007ebaSmrg#include <ctype.h>
580604007ebaSmrg#include <errno.h>
580704007ebaSmrg#include <fcntl.h>
580804007ebaSmrg#include <sys/stat.h>
580904007ebaSmrg
581005cf1079Smrg#define STREQ(s1, s2) (strcmp ((s1), (s2)) == 0)
581105cf1079Smrg
581204007ebaSmrg/* declarations of non-ANSI functions */
581305cf1079Smrg#if defined __MINGW32__
581404007ebaSmrg# ifdef __STRICT_ANSI__
581504007ebaSmrgint _putenv (const char *);
581604007ebaSmrg# endif
581705cf1079Smrg#elif defined __CYGWIN__
581804007ebaSmrg# ifdef __STRICT_ANSI__
581904007ebaSmrgchar *realpath (const char *, char *);
582004007ebaSmrgint putenv (char *);
582104007ebaSmrgint setenv (const char *, const char *, int);
582204007ebaSmrg# endif
582305cf1079Smrg/* #elif defined other_platform || defined ... */
582404007ebaSmrg#endif
582504007ebaSmrg
582604007ebaSmrg/* portability defines, excluding path handling macros */
582705cf1079Smrg#if defined _MSC_VER
582804007ebaSmrg# define setmode _setmode
582904007ebaSmrg# define stat    _stat
583004007ebaSmrg# define chmod   _chmod
583104007ebaSmrg# define getcwd  _getcwd
583204007ebaSmrg# define putenv  _putenv
583304007ebaSmrg# define S_IXUSR _S_IEXEC
583405cf1079Smrg#elif defined __MINGW32__
583504007ebaSmrg# define setmode _setmode
583604007ebaSmrg# define stat    _stat
583704007ebaSmrg# define chmod   _chmod
583804007ebaSmrg# define getcwd  _getcwd
583904007ebaSmrg# define putenv  _putenv
584005cf1079Smrg#elif defined __CYGWIN__
584104007ebaSmrg# define HAVE_SETENV
584204007ebaSmrg# define FOPEN_WB "wb"
584305cf1079Smrg/* #elif defined other platforms ... */
584404007ebaSmrg#endif
584504007ebaSmrg
584605cf1079Smrg#if defined PATH_MAX
584704007ebaSmrg# define LT_PATHMAX PATH_MAX
584805cf1079Smrg#elif defined MAXPATHLEN
584904007ebaSmrg# define LT_PATHMAX MAXPATHLEN
585004007ebaSmrg#else
585104007ebaSmrg# define LT_PATHMAX 1024
585204007ebaSmrg#endif
585304007ebaSmrg
585404007ebaSmrg#ifndef S_IXOTH
585504007ebaSmrg# define S_IXOTH 0
585604007ebaSmrg#endif
585704007ebaSmrg#ifndef S_IXGRP
585804007ebaSmrg# define S_IXGRP 0
585904007ebaSmrg#endif
586004007ebaSmrg
586104007ebaSmrg/* path handling portability macros */
586204007ebaSmrg#ifndef DIR_SEPARATOR
586304007ebaSmrg# define DIR_SEPARATOR '/'
586404007ebaSmrg# define PATH_SEPARATOR ':'
586504007ebaSmrg#endif
586604007ebaSmrg
586705cf1079Smrg#if defined _WIN32 || defined __MSDOS__ || defined __DJGPP__ || \
586805cf1079Smrg  defined __OS2__
586904007ebaSmrg# define HAVE_DOS_BASED_FILE_SYSTEM
587004007ebaSmrg# define FOPEN_WB "wb"
587104007ebaSmrg# ifndef DIR_SEPARATOR_2
587204007ebaSmrg#  define DIR_SEPARATOR_2 '\\'
587304007ebaSmrg# endif
587404007ebaSmrg# ifndef PATH_SEPARATOR_2
587504007ebaSmrg#  define PATH_SEPARATOR_2 ';'
587604007ebaSmrg# endif
587704007ebaSmrg#endif
587804007ebaSmrg
587904007ebaSmrg#ifndef DIR_SEPARATOR_2
588004007ebaSmrg# define IS_DIR_SEPARATOR(ch) ((ch) == DIR_SEPARATOR)
588104007ebaSmrg#else /* DIR_SEPARATOR_2 */
588204007ebaSmrg# define IS_DIR_SEPARATOR(ch) \
588304007ebaSmrg	(((ch) == DIR_SEPARATOR) || ((ch) == DIR_SEPARATOR_2))
588404007ebaSmrg#endif /* DIR_SEPARATOR_2 */
588504007ebaSmrg
588604007ebaSmrg#ifndef PATH_SEPARATOR_2
588704007ebaSmrg# define IS_PATH_SEPARATOR(ch) ((ch) == PATH_SEPARATOR)
588804007ebaSmrg#else /* PATH_SEPARATOR_2 */
588904007ebaSmrg# define IS_PATH_SEPARATOR(ch) ((ch) == PATH_SEPARATOR_2)
589004007ebaSmrg#endif /* PATH_SEPARATOR_2 */
589104007ebaSmrg
589204007ebaSmrg#ifndef FOPEN_WB
589304007ebaSmrg# define FOPEN_WB "w"
589404007ebaSmrg#endif
589504007ebaSmrg#ifndef _O_BINARY
589604007ebaSmrg# define _O_BINARY 0
589704007ebaSmrg#endif
589804007ebaSmrg
589904007ebaSmrg#define XMALLOC(type, num)      ((type *) xmalloc ((num) * sizeof(type)))
590004007ebaSmrg#define XFREE(stale) do { \
590105cf1079Smrg  if (stale) { free (stale); stale = 0; } \
590204007ebaSmrg} while (0)
590304007ebaSmrg
590405cf1079Smrg#if defined LT_DEBUGWRAPPER
590504007ebaSmrgstatic int lt_debug = 1;
590604007ebaSmrg#else
590704007ebaSmrgstatic int lt_debug = 0;
590804007ebaSmrg#endif
590904007ebaSmrg
591004007ebaSmrgconst char *program_name = "libtool-wrapper"; /* in case xstrdup fails */
591104007ebaSmrg
591204007ebaSmrgvoid *xmalloc (size_t num);
591304007ebaSmrgchar *xstrdup (const char *string);
591404007ebaSmrgconst char *base_name (const char *name);
591504007ebaSmrgchar *find_executable (const char *wrapper);
591604007ebaSmrgchar *chase_symlinks (const char *pathspec);
591704007ebaSmrgint make_executable (const char *path);
591804007ebaSmrgint check_executable (const char *path);
591904007ebaSmrgchar *strendzap (char *str, const char *pat);
592004007ebaSmrgvoid lt_debugprintf (const char *file, int line, const char *fmt, ...);
592104007ebaSmrgvoid lt_fatal (const char *file, int line, const char *message, ...);
592204007ebaSmrgstatic const char *nonnull (const char *s);
592304007ebaSmrgstatic const char *nonempty (const char *s);
592404007ebaSmrgvoid lt_setenv (const char *name, const char *value);
592504007ebaSmrgchar *lt_extend_str (const char *orig_value, const char *add, int to_end);
592604007ebaSmrgvoid lt_update_exe_path (const char *name, const char *value);
592704007ebaSmrgvoid lt_update_lib_path (const char *name, const char *value);
592804007ebaSmrgchar **prepare_spawn (char **argv);
592904007ebaSmrgvoid lt_dump_script (FILE *f);
593004007ebaSmrgEOF
593104007ebaSmrg
593204007ebaSmrg	    cat <<EOF
593305cf1079Smrg#if __GNUC__ < 4 || (__GNUC__ == 4 && __GNUC_MINOR__ < 5)
593405cf1079Smrg# define externally_visible volatile
593505cf1079Smrg#else
593605cf1079Smrg# define externally_visible __attribute__((externally_visible)) volatile
593705cf1079Smrg#endif
593805cf1079Smrgexternally_visible const char * MAGIC_EXE = "$magic_exe";
593904007ebaSmrgconst char * LIB_PATH_VARNAME = "$shlibpath_var";
594004007ebaSmrgEOF
594104007ebaSmrg
594205cf1079Smrg	    if test yes = "$shlibpath_overrides_runpath" && test -n "$shlibpath_var" && test -n "$temp_rpath"; then
594304007ebaSmrg              func_to_host_path "$temp_rpath"
594404007ebaSmrg	      cat <<EOF
594504007ebaSmrgconst char * LIB_PATH_VALUE   = "$func_to_host_path_result";
594604007ebaSmrgEOF
594704007ebaSmrg	    else
594804007ebaSmrg	      cat <<"EOF"
594904007ebaSmrgconst char * LIB_PATH_VALUE   = "";
595004007ebaSmrgEOF
595104007ebaSmrg	    fi
595204007ebaSmrg
595304007ebaSmrg	    if test -n "$dllsearchpath"; then
595404007ebaSmrg              func_to_host_path "$dllsearchpath:"
595504007ebaSmrg	      cat <<EOF
595604007ebaSmrgconst char * EXE_PATH_VARNAME = "PATH";
595704007ebaSmrgconst char * EXE_PATH_VALUE   = "$func_to_host_path_result";
595804007ebaSmrgEOF
595904007ebaSmrg	    else
596004007ebaSmrg	      cat <<"EOF"
596104007ebaSmrgconst char * EXE_PATH_VARNAME = "";
596204007ebaSmrgconst char * EXE_PATH_VALUE   = "";
596304007ebaSmrgEOF
596404007ebaSmrg	    fi
596504007ebaSmrg
596605cf1079Smrg	    if test yes = "$fast_install"; then
596704007ebaSmrg	      cat <<EOF
596804007ebaSmrgconst char * TARGET_PROGRAM_NAME = "lt-$outputname"; /* hopefully, no .exe */
596904007ebaSmrgEOF
597004007ebaSmrg	    else
597104007ebaSmrg	      cat <<EOF
597204007ebaSmrgconst char * TARGET_PROGRAM_NAME = "$outputname"; /* hopefully, no .exe */
597304007ebaSmrgEOF
597404007ebaSmrg	    fi
597504007ebaSmrg
597604007ebaSmrg
597704007ebaSmrg	    cat <<"EOF"
597804007ebaSmrg
597904007ebaSmrg#define LTWRAPPER_OPTION_PREFIX         "--lt-"
598004007ebaSmrg
598104007ebaSmrgstatic const char *ltwrapper_option_prefix = LTWRAPPER_OPTION_PREFIX;
598204007ebaSmrgstatic const char *dumpscript_opt       = LTWRAPPER_OPTION_PREFIX "dump-script";
598304007ebaSmrgstatic const char *debug_opt            = LTWRAPPER_OPTION_PREFIX "debug";
598404007ebaSmrg
598504007ebaSmrgint
598604007ebaSmrgmain (int argc, char *argv[])
598704007ebaSmrg{
598804007ebaSmrg  char **newargz;
598904007ebaSmrg  int  newargc;
599004007ebaSmrg  char *tmp_pathspec;
599104007ebaSmrg  char *actual_cwrapper_path;
599204007ebaSmrg  char *actual_cwrapper_name;
599304007ebaSmrg  char *target_name;
599404007ebaSmrg  char *lt_argv_zero;
599505cf1079Smrg  int rval = 127;
599604007ebaSmrg
599704007ebaSmrg  int i;
599804007ebaSmrg
599904007ebaSmrg  program_name = (char *) xstrdup (base_name (argv[0]));
600005cf1079Smrg  newargz = XMALLOC (char *, (size_t) argc + 1);
600104007ebaSmrg
600204007ebaSmrg  /* very simple arg parsing; don't want to rely on getopt
600304007ebaSmrg   * also, copy all non cwrapper options to newargz, except
600404007ebaSmrg   * argz[0], which is handled differently
600504007ebaSmrg   */
600604007ebaSmrg  newargc=0;
600704007ebaSmrg  for (i = 1; i < argc; i++)
600804007ebaSmrg    {
600905cf1079Smrg      if (STREQ (argv[i], dumpscript_opt))
601004007ebaSmrg	{
601104007ebaSmrgEOF
601205cf1079Smrg	    case $host in
601304007ebaSmrg	      *mingw* | *cygwin* )
601404007ebaSmrg		# make stdout use "unix" line endings
601504007ebaSmrg		echo "          setmode(1,_O_BINARY);"
601604007ebaSmrg		;;
601704007ebaSmrg	      esac
601804007ebaSmrg
601904007ebaSmrg	    cat <<"EOF"
602004007ebaSmrg	  lt_dump_script (stdout);
602104007ebaSmrg	  return 0;
602204007ebaSmrg	}
602305cf1079Smrg      if (STREQ (argv[i], debug_opt))
602404007ebaSmrg	{
602504007ebaSmrg          lt_debug = 1;
602604007ebaSmrg          continue;
602704007ebaSmrg	}
602805cf1079Smrg      if (STREQ (argv[i], ltwrapper_option_prefix))
602904007ebaSmrg        {
603004007ebaSmrg          /* however, if there is an option in the LTWRAPPER_OPTION_PREFIX
603104007ebaSmrg             namespace, but it is not one of the ones we know about and
603204007ebaSmrg             have already dealt with, above (inluding dump-script), then
603304007ebaSmrg             report an error. Otherwise, targets might begin to believe
603404007ebaSmrg             they are allowed to use options in the LTWRAPPER_OPTION_PREFIX
603504007ebaSmrg             namespace. The first time any user complains about this, we'll
603604007ebaSmrg             need to make LTWRAPPER_OPTION_PREFIX a configure-time option
603704007ebaSmrg             or a configure.ac-settable value.
603804007ebaSmrg           */
603904007ebaSmrg          lt_fatal (__FILE__, __LINE__,
604004007ebaSmrg		    "unrecognized %s option: '%s'",
604104007ebaSmrg                    ltwrapper_option_prefix, argv[i]);
604204007ebaSmrg        }
604304007ebaSmrg      /* otherwise ... */
604404007ebaSmrg      newargz[++newargc] = xstrdup (argv[i]);
604504007ebaSmrg    }
604604007ebaSmrg  newargz[++newargc] = NULL;
604704007ebaSmrg
604804007ebaSmrgEOF
604904007ebaSmrg	    cat <<EOF
605004007ebaSmrg  /* The GNU banner must be the first non-error debug message */
605105cf1079Smrg  lt_debugprintf (__FILE__, __LINE__, "libtool wrapper (GNU $PACKAGE) $VERSION\n");
605204007ebaSmrgEOF
605304007ebaSmrg	    cat <<"EOF"
605404007ebaSmrg  lt_debugprintf (__FILE__, __LINE__, "(main) argv[0]: %s\n", argv[0]);
605504007ebaSmrg  lt_debugprintf (__FILE__, __LINE__, "(main) program_name: %s\n", program_name);
605604007ebaSmrg
605704007ebaSmrg  tmp_pathspec = find_executable (argv[0]);
605804007ebaSmrg  if (tmp_pathspec == NULL)
605904007ebaSmrg    lt_fatal (__FILE__, __LINE__, "couldn't find %s", argv[0]);
606004007ebaSmrg  lt_debugprintf (__FILE__, __LINE__,
606104007ebaSmrg                  "(main) found exe (before symlink chase) at: %s\n",
606204007ebaSmrg		  tmp_pathspec);
606304007ebaSmrg
606404007ebaSmrg  actual_cwrapper_path = chase_symlinks (tmp_pathspec);
606504007ebaSmrg  lt_debugprintf (__FILE__, __LINE__,
606604007ebaSmrg                  "(main) found exe (after symlink chase) at: %s\n",
606704007ebaSmrg		  actual_cwrapper_path);
606804007ebaSmrg  XFREE (tmp_pathspec);
606904007ebaSmrg
607004007ebaSmrg  actual_cwrapper_name = xstrdup (base_name (actual_cwrapper_path));
607104007ebaSmrg  strendzap (actual_cwrapper_path, actual_cwrapper_name);
607204007ebaSmrg
607304007ebaSmrg  /* wrapper name transforms */
607404007ebaSmrg  strendzap (actual_cwrapper_name, ".exe");
607504007ebaSmrg  tmp_pathspec = lt_extend_str (actual_cwrapper_name, ".exe", 1);
607604007ebaSmrg  XFREE (actual_cwrapper_name);
607704007ebaSmrg  actual_cwrapper_name = tmp_pathspec;
607804007ebaSmrg  tmp_pathspec = 0;
607904007ebaSmrg
608004007ebaSmrg  /* target_name transforms -- use actual target program name; might have lt- prefix */
608104007ebaSmrg  target_name = xstrdup (base_name (TARGET_PROGRAM_NAME));
608204007ebaSmrg  strendzap (target_name, ".exe");
608304007ebaSmrg  tmp_pathspec = lt_extend_str (target_name, ".exe", 1);
608404007ebaSmrg  XFREE (target_name);
608504007ebaSmrg  target_name = tmp_pathspec;
608604007ebaSmrg  tmp_pathspec = 0;
608704007ebaSmrg
608804007ebaSmrg  lt_debugprintf (__FILE__, __LINE__,
608904007ebaSmrg		  "(main) libtool target name: %s\n",
609004007ebaSmrg		  target_name);
609104007ebaSmrgEOF
609204007ebaSmrg
609304007ebaSmrg	    cat <<EOF
609404007ebaSmrg  newargz[0] =
609504007ebaSmrg    XMALLOC (char, (strlen (actual_cwrapper_path) +
609604007ebaSmrg		    strlen ("$objdir") + 1 + strlen (actual_cwrapper_name) + 1));
609704007ebaSmrg  strcpy (newargz[0], actual_cwrapper_path);
609804007ebaSmrg  strcat (newargz[0], "$objdir");
609904007ebaSmrg  strcat (newargz[0], "/");
610004007ebaSmrgEOF
610104007ebaSmrg
610204007ebaSmrg	    cat <<"EOF"
610304007ebaSmrg  /* stop here, and copy so we don't have to do this twice */
610404007ebaSmrg  tmp_pathspec = xstrdup (newargz[0]);
610504007ebaSmrg
610604007ebaSmrg  /* do NOT want the lt- prefix here, so use actual_cwrapper_name */
610704007ebaSmrg  strcat (newargz[0], actual_cwrapper_name);
610804007ebaSmrg
610904007ebaSmrg  /* DO want the lt- prefix here if it exists, so use target_name */
611004007ebaSmrg  lt_argv_zero = lt_extend_str (tmp_pathspec, target_name, 1);
611104007ebaSmrg  XFREE (tmp_pathspec);
611204007ebaSmrg  tmp_pathspec = NULL;
611304007ebaSmrgEOF
611404007ebaSmrg
611504007ebaSmrg	    case $host_os in
611604007ebaSmrg	      mingw*)
611704007ebaSmrg	    cat <<"EOF"
611804007ebaSmrg  {
611904007ebaSmrg    char* p;
612004007ebaSmrg    while ((p = strchr (newargz[0], '\\')) != NULL)
612104007ebaSmrg      {
612204007ebaSmrg	*p = '/';
612304007ebaSmrg      }
612404007ebaSmrg    while ((p = strchr (lt_argv_zero, '\\')) != NULL)
612504007ebaSmrg      {
612604007ebaSmrg	*p = '/';
612704007ebaSmrg      }
612804007ebaSmrg  }
612904007ebaSmrgEOF
613004007ebaSmrg	    ;;
613104007ebaSmrg	    esac
613204007ebaSmrg
613304007ebaSmrg	    cat <<"EOF"
613404007ebaSmrg  XFREE (target_name);
613504007ebaSmrg  XFREE (actual_cwrapper_path);
613604007ebaSmrg  XFREE (actual_cwrapper_name);
613704007ebaSmrg
613804007ebaSmrg  lt_setenv ("BIN_SH", "xpg4"); /* for Tru64 */
613904007ebaSmrg  lt_setenv ("DUALCASE", "1");  /* for MSK sh */
614004007ebaSmrg  /* Update the DLL searchpath.  EXE_PATH_VALUE ($dllsearchpath) must
614104007ebaSmrg     be prepended before (that is, appear after) LIB_PATH_VALUE ($temp_rpath)
614204007ebaSmrg     because on Windows, both *_VARNAMEs are PATH but uninstalled
614304007ebaSmrg     libraries must come first. */
614404007ebaSmrg  lt_update_exe_path (EXE_PATH_VARNAME, EXE_PATH_VALUE);
614504007ebaSmrg  lt_update_lib_path (LIB_PATH_VARNAME, LIB_PATH_VALUE);
614604007ebaSmrg
614704007ebaSmrg  lt_debugprintf (__FILE__, __LINE__, "(main) lt_argv_zero: %s\n",
614804007ebaSmrg		  nonnull (lt_argv_zero));
614904007ebaSmrg  for (i = 0; i < newargc; i++)
615004007ebaSmrg    {
615104007ebaSmrg      lt_debugprintf (__FILE__, __LINE__, "(main) newargz[%d]: %s\n",
615204007ebaSmrg		      i, nonnull (newargz[i]));
615304007ebaSmrg    }
615404007ebaSmrg
615504007ebaSmrgEOF
615604007ebaSmrg
615704007ebaSmrg	    case $host_os in
615804007ebaSmrg	      mingw*)
615904007ebaSmrg		cat <<"EOF"
616004007ebaSmrg  /* execv doesn't actually work on mingw as expected on unix */
616104007ebaSmrg  newargz = prepare_spawn (newargz);
616205cf1079Smrg  rval = (int) _spawnv (_P_WAIT, lt_argv_zero, (const char * const *) newargz);
616304007ebaSmrg  if (rval == -1)
616404007ebaSmrg    {
616504007ebaSmrg      /* failed to start process */
616604007ebaSmrg      lt_debugprintf (__FILE__, __LINE__,
616704007ebaSmrg		      "(main) failed to launch target \"%s\": %s\n",
616804007ebaSmrg		      lt_argv_zero, nonnull (strerror (errno)));
616904007ebaSmrg      return 127;
617004007ebaSmrg    }
617104007ebaSmrg  return rval;
617204007ebaSmrgEOF
617304007ebaSmrg		;;
617404007ebaSmrg	      *)
617504007ebaSmrg		cat <<"EOF"
617604007ebaSmrg  execv (lt_argv_zero, newargz);
617704007ebaSmrg  return rval; /* =127, but avoids unused variable warning */
617804007ebaSmrgEOF
617904007ebaSmrg		;;
618004007ebaSmrg	    esac
618104007ebaSmrg
618204007ebaSmrg	    cat <<"EOF"
618304007ebaSmrg}
618404007ebaSmrg
618504007ebaSmrgvoid *
618604007ebaSmrgxmalloc (size_t num)
618704007ebaSmrg{
618804007ebaSmrg  void *p = (void *) malloc (num);
618904007ebaSmrg  if (!p)
619004007ebaSmrg    lt_fatal (__FILE__, __LINE__, "memory exhausted");
619104007ebaSmrg
619204007ebaSmrg  return p;
619304007ebaSmrg}
619404007ebaSmrg
619504007ebaSmrgchar *
619604007ebaSmrgxstrdup (const char *string)
619704007ebaSmrg{
619804007ebaSmrg  return string ? strcpy ((char *) xmalloc (strlen (string) + 1),
619904007ebaSmrg			  string) : NULL;
620004007ebaSmrg}
620104007ebaSmrg
620204007ebaSmrgconst char *
620304007ebaSmrgbase_name (const char *name)
620404007ebaSmrg{
620504007ebaSmrg  const char *base;
620604007ebaSmrg
620705cf1079Smrg#if defined HAVE_DOS_BASED_FILE_SYSTEM
620804007ebaSmrg  /* Skip over the disk name in MSDOS pathnames. */
620904007ebaSmrg  if (isalpha ((unsigned char) name[0]) && name[1] == ':')
621004007ebaSmrg    name += 2;
621104007ebaSmrg#endif
621204007ebaSmrg
621304007ebaSmrg  for (base = name; *name; name++)
621404007ebaSmrg    if (IS_DIR_SEPARATOR (*name))
621504007ebaSmrg      base = name + 1;
621604007ebaSmrg  return base;
621704007ebaSmrg}
621804007ebaSmrg
621904007ebaSmrgint
622004007ebaSmrgcheck_executable (const char *path)
622104007ebaSmrg{
622204007ebaSmrg  struct stat st;
622304007ebaSmrg
622404007ebaSmrg  lt_debugprintf (__FILE__, __LINE__, "(check_executable): %s\n",
622504007ebaSmrg                  nonempty (path));
622604007ebaSmrg  if ((!path) || (!*path))
622704007ebaSmrg    return 0;
622804007ebaSmrg
622904007ebaSmrg  if ((stat (path, &st) >= 0)
623004007ebaSmrg      && (st.st_mode & (S_IXUSR | S_IXGRP | S_IXOTH)))
623104007ebaSmrg    return 1;
623204007ebaSmrg  else
623304007ebaSmrg    return 0;
623404007ebaSmrg}
623504007ebaSmrg
623604007ebaSmrgint
623704007ebaSmrgmake_executable (const char *path)
623804007ebaSmrg{
623904007ebaSmrg  int rval = 0;
624004007ebaSmrg  struct stat st;
624104007ebaSmrg
624204007ebaSmrg  lt_debugprintf (__FILE__, __LINE__, "(make_executable): %s\n",
624304007ebaSmrg                  nonempty (path));
624404007ebaSmrg  if ((!path) || (!*path))
624504007ebaSmrg    return 0;
624604007ebaSmrg
624704007ebaSmrg  if (stat (path, &st) >= 0)
624804007ebaSmrg    {
624904007ebaSmrg      rval = chmod (path, st.st_mode | S_IXOTH | S_IXGRP | S_IXUSR);
625004007ebaSmrg    }
625104007ebaSmrg  return rval;
625204007ebaSmrg}
625304007ebaSmrg
625404007ebaSmrg/* Searches for the full path of the wrapper.  Returns
625504007ebaSmrg   newly allocated full path name if found, NULL otherwise
625604007ebaSmrg   Does not chase symlinks, even on platforms that support them.
625704007ebaSmrg*/
625804007ebaSmrgchar *
625904007ebaSmrgfind_executable (const char *wrapper)
626004007ebaSmrg{
626104007ebaSmrg  int has_slash = 0;
626204007ebaSmrg  const char *p;
626304007ebaSmrg  const char *p_next;
626404007ebaSmrg  /* static buffer for getcwd */
626504007ebaSmrg  char tmp[LT_PATHMAX + 1];
626605cf1079Smrg  size_t tmp_len;
626704007ebaSmrg  char *concat_name;
626804007ebaSmrg
626904007ebaSmrg  lt_debugprintf (__FILE__, __LINE__, "(find_executable): %s\n",
627004007ebaSmrg                  nonempty (wrapper));
627104007ebaSmrg
627204007ebaSmrg  if ((wrapper == NULL) || (*wrapper == '\0'))
627304007ebaSmrg    return NULL;
627404007ebaSmrg
627504007ebaSmrg  /* Absolute path? */
627605cf1079Smrg#if defined HAVE_DOS_BASED_FILE_SYSTEM
627704007ebaSmrg  if (isalpha ((unsigned char) wrapper[0]) && wrapper[1] == ':')
627804007ebaSmrg    {
627904007ebaSmrg      concat_name = xstrdup (wrapper);
628004007ebaSmrg      if (check_executable (concat_name))
628104007ebaSmrg	return concat_name;
628204007ebaSmrg      XFREE (concat_name);
628304007ebaSmrg    }
628404007ebaSmrg  else
628504007ebaSmrg    {
628604007ebaSmrg#endif
628704007ebaSmrg      if (IS_DIR_SEPARATOR (wrapper[0]))
628804007ebaSmrg	{
628904007ebaSmrg	  concat_name = xstrdup (wrapper);
629004007ebaSmrg	  if (check_executable (concat_name))
629104007ebaSmrg	    return concat_name;
629204007ebaSmrg	  XFREE (concat_name);
629304007ebaSmrg	}
629405cf1079Smrg#if defined HAVE_DOS_BASED_FILE_SYSTEM
629504007ebaSmrg    }
629604007ebaSmrg#endif
629704007ebaSmrg
629804007ebaSmrg  for (p = wrapper; *p; p++)
629904007ebaSmrg    if (*p == '/')
630004007ebaSmrg      {
630104007ebaSmrg	has_slash = 1;
630204007ebaSmrg	break;
630304007ebaSmrg      }
630404007ebaSmrg  if (!has_slash)
630504007ebaSmrg    {
630604007ebaSmrg      /* no slashes; search PATH */
630704007ebaSmrg      const char *path = getenv ("PATH");
630804007ebaSmrg      if (path != NULL)
630904007ebaSmrg	{
631004007ebaSmrg	  for (p = path; *p; p = p_next)
631104007ebaSmrg	    {
631204007ebaSmrg	      const char *q;
631304007ebaSmrg	      size_t p_len;
631404007ebaSmrg	      for (q = p; *q; q++)
631504007ebaSmrg		if (IS_PATH_SEPARATOR (*q))
631604007ebaSmrg		  break;
631705cf1079Smrg	      p_len = (size_t) (q - p);
631804007ebaSmrg	      p_next = (*q == '\0' ? q : q + 1);
631904007ebaSmrg	      if (p_len == 0)
632004007ebaSmrg		{
632104007ebaSmrg		  /* empty path: current directory */
632204007ebaSmrg		  if (getcwd (tmp, LT_PATHMAX) == NULL)
632304007ebaSmrg		    lt_fatal (__FILE__, __LINE__, "getcwd failed: %s",
632404007ebaSmrg                              nonnull (strerror (errno)));
632504007ebaSmrg		  tmp_len = strlen (tmp);
632604007ebaSmrg		  concat_name =
632704007ebaSmrg		    XMALLOC (char, tmp_len + 1 + strlen (wrapper) + 1);
632804007ebaSmrg		  memcpy (concat_name, tmp, tmp_len);
632904007ebaSmrg		  concat_name[tmp_len] = '/';
633004007ebaSmrg		  strcpy (concat_name + tmp_len + 1, wrapper);
633104007ebaSmrg		}
633204007ebaSmrg	      else
633304007ebaSmrg		{
633404007ebaSmrg		  concat_name =
633504007ebaSmrg		    XMALLOC (char, p_len + 1 + strlen (wrapper) + 1);
633604007ebaSmrg		  memcpy (concat_name, p, p_len);
633704007ebaSmrg		  concat_name[p_len] = '/';
633804007ebaSmrg		  strcpy (concat_name + p_len + 1, wrapper);
633904007ebaSmrg		}
634004007ebaSmrg	      if (check_executable (concat_name))
634104007ebaSmrg		return concat_name;
634204007ebaSmrg	      XFREE (concat_name);
634304007ebaSmrg	    }
634404007ebaSmrg	}
634504007ebaSmrg      /* not found in PATH; assume curdir */
634604007ebaSmrg    }
634704007ebaSmrg  /* Relative path | not found in path: prepend cwd */
634804007ebaSmrg  if (getcwd (tmp, LT_PATHMAX) == NULL)
634904007ebaSmrg    lt_fatal (__FILE__, __LINE__, "getcwd failed: %s",
635004007ebaSmrg              nonnull (strerror (errno)));
635104007ebaSmrg  tmp_len = strlen (tmp);
635204007ebaSmrg  concat_name = XMALLOC (char, tmp_len + 1 + strlen (wrapper) + 1);
635304007ebaSmrg  memcpy (concat_name, tmp, tmp_len);
635404007ebaSmrg  concat_name[tmp_len] = '/';
635504007ebaSmrg  strcpy (concat_name + tmp_len + 1, wrapper);
635604007ebaSmrg
635704007ebaSmrg  if (check_executable (concat_name))
635804007ebaSmrg    return concat_name;
635904007ebaSmrg  XFREE (concat_name);
636004007ebaSmrg  return NULL;
636104007ebaSmrg}
636204007ebaSmrg
636304007ebaSmrgchar *
636404007ebaSmrgchase_symlinks (const char *pathspec)
636504007ebaSmrg{
636604007ebaSmrg#ifndef S_ISLNK
636704007ebaSmrg  return xstrdup (pathspec);
636804007ebaSmrg#else
636904007ebaSmrg  char buf[LT_PATHMAX];
637004007ebaSmrg  struct stat s;
637104007ebaSmrg  char *tmp_pathspec = xstrdup (pathspec);
637204007ebaSmrg  char *p;
637304007ebaSmrg  int has_symlinks = 0;
637404007ebaSmrg  while (strlen (tmp_pathspec) && !has_symlinks)
637504007ebaSmrg    {
637604007ebaSmrg      lt_debugprintf (__FILE__, __LINE__,
637704007ebaSmrg		      "checking path component for symlinks: %s\n",
637804007ebaSmrg		      tmp_pathspec);
637904007ebaSmrg      if (lstat (tmp_pathspec, &s) == 0)
638004007ebaSmrg	{
638104007ebaSmrg	  if (S_ISLNK (s.st_mode) != 0)
638204007ebaSmrg	    {
638304007ebaSmrg	      has_symlinks = 1;
638404007ebaSmrg	      break;
638504007ebaSmrg	    }
638604007ebaSmrg
638704007ebaSmrg	  /* search backwards for last DIR_SEPARATOR */
638804007ebaSmrg	  p = tmp_pathspec + strlen (tmp_pathspec) - 1;
638904007ebaSmrg	  while ((p > tmp_pathspec) && (!IS_DIR_SEPARATOR (*p)))
639004007ebaSmrg	    p--;
639104007ebaSmrg	  if ((p == tmp_pathspec) && (!IS_DIR_SEPARATOR (*p)))
639204007ebaSmrg	    {
639304007ebaSmrg	      /* no more DIR_SEPARATORS left */
639404007ebaSmrg	      break;
639504007ebaSmrg	    }
639604007ebaSmrg	  *p = '\0';
639704007ebaSmrg	}
639804007ebaSmrg      else
639904007ebaSmrg	{
640004007ebaSmrg	  lt_fatal (__FILE__, __LINE__,
640104007ebaSmrg		    "error accessing file \"%s\": %s",
640204007ebaSmrg		    tmp_pathspec, nonnull (strerror (errno)));
640304007ebaSmrg	}
640404007ebaSmrg    }
640504007ebaSmrg  XFREE (tmp_pathspec);
640604007ebaSmrg
640704007ebaSmrg  if (!has_symlinks)
640804007ebaSmrg    {
640904007ebaSmrg      return xstrdup (pathspec);
641004007ebaSmrg    }
641104007ebaSmrg
641204007ebaSmrg  tmp_pathspec = realpath (pathspec, buf);
641304007ebaSmrg  if (tmp_pathspec == 0)
641404007ebaSmrg    {
641504007ebaSmrg      lt_fatal (__FILE__, __LINE__,
641604007ebaSmrg		"could not follow symlinks for %s", pathspec);
641704007ebaSmrg    }
641804007ebaSmrg  return xstrdup (tmp_pathspec);
641904007ebaSmrg#endif
642004007ebaSmrg}
642104007ebaSmrg
642204007ebaSmrgchar *
642304007ebaSmrgstrendzap (char *str, const char *pat)
642404007ebaSmrg{
642504007ebaSmrg  size_t len, patlen;
642604007ebaSmrg
642704007ebaSmrg  assert (str != NULL);
642804007ebaSmrg  assert (pat != NULL);
642904007ebaSmrg
643004007ebaSmrg  len = strlen (str);
643104007ebaSmrg  patlen = strlen (pat);
643204007ebaSmrg
643304007ebaSmrg  if (patlen <= len)
643404007ebaSmrg    {
643504007ebaSmrg      str += len - patlen;
643605cf1079Smrg      if (STREQ (str, pat))
643704007ebaSmrg	*str = '\0';
643804007ebaSmrg    }
643904007ebaSmrg  return str;
644004007ebaSmrg}
644104007ebaSmrg
644204007ebaSmrgvoid
644304007ebaSmrglt_debugprintf (const char *file, int line, const char *fmt, ...)
644404007ebaSmrg{
644504007ebaSmrg  va_list args;
644604007ebaSmrg  if (lt_debug)
644704007ebaSmrg    {
644804007ebaSmrg      (void) fprintf (stderr, "%s:%s:%d: ", program_name, file, line);
644904007ebaSmrg      va_start (args, fmt);
645004007ebaSmrg      (void) vfprintf (stderr, fmt, args);
645104007ebaSmrg      va_end (args);
645204007ebaSmrg    }
645304007ebaSmrg}
645404007ebaSmrg
645504007ebaSmrgstatic void
645604007ebaSmrglt_error_core (int exit_status, const char *file,
645704007ebaSmrg	       int line, const char *mode,
645804007ebaSmrg	       const char *message, va_list ap)
645904007ebaSmrg{
646004007ebaSmrg  fprintf (stderr, "%s:%s:%d: %s: ", program_name, file, line, mode);
646104007ebaSmrg  vfprintf (stderr, message, ap);
646204007ebaSmrg  fprintf (stderr, ".\n");
646304007ebaSmrg
646404007ebaSmrg  if (exit_status >= 0)
646504007ebaSmrg    exit (exit_status);
646604007ebaSmrg}
646704007ebaSmrg
646804007ebaSmrgvoid
646904007ebaSmrglt_fatal (const char *file, int line, const char *message, ...)
647004007ebaSmrg{
647104007ebaSmrg  va_list ap;
647204007ebaSmrg  va_start (ap, message);
647304007ebaSmrg  lt_error_core (EXIT_FAILURE, file, line, "FATAL", message, ap);
647404007ebaSmrg  va_end (ap);
647504007ebaSmrg}
647604007ebaSmrg
647704007ebaSmrgstatic const char *
647804007ebaSmrgnonnull (const char *s)
647904007ebaSmrg{
648004007ebaSmrg  return s ? s : "(null)";
648104007ebaSmrg}
648204007ebaSmrg
648304007ebaSmrgstatic const char *
648404007ebaSmrgnonempty (const char *s)
648504007ebaSmrg{
648604007ebaSmrg  return (s && !*s) ? "(empty)" : nonnull (s);
648704007ebaSmrg}
648804007ebaSmrg
648904007ebaSmrgvoid
649004007ebaSmrglt_setenv (const char *name, const char *value)
649104007ebaSmrg{
649204007ebaSmrg  lt_debugprintf (__FILE__, __LINE__,
649304007ebaSmrg		  "(lt_setenv) setting '%s' to '%s'\n",
649404007ebaSmrg                  nonnull (name), nonnull (value));
649504007ebaSmrg  {
649604007ebaSmrg#ifdef HAVE_SETENV
649704007ebaSmrg    /* always make a copy, for consistency with !HAVE_SETENV */
649804007ebaSmrg    char *str = xstrdup (value);
649904007ebaSmrg    setenv (name, str, 1);
650004007ebaSmrg#else
650105cf1079Smrg    size_t len = strlen (name) + 1 + strlen (value) + 1;
650204007ebaSmrg    char *str = XMALLOC (char, len);
650304007ebaSmrg    sprintf (str, "%s=%s", name, value);
650404007ebaSmrg    if (putenv (str) != EXIT_SUCCESS)
650504007ebaSmrg      {
650604007ebaSmrg        XFREE (str);
650704007ebaSmrg      }
650804007ebaSmrg#endif
650904007ebaSmrg  }
651004007ebaSmrg}
651104007ebaSmrg
651204007ebaSmrgchar *
651304007ebaSmrglt_extend_str (const char *orig_value, const char *add, int to_end)
651404007ebaSmrg{
651504007ebaSmrg  char *new_value;
651604007ebaSmrg  if (orig_value && *orig_value)
651704007ebaSmrg    {
651805cf1079Smrg      size_t orig_value_len = strlen (orig_value);
651905cf1079Smrg      size_t add_len = strlen (add);
652004007ebaSmrg      new_value = XMALLOC (char, add_len + orig_value_len + 1);
652104007ebaSmrg      if (to_end)
652204007ebaSmrg        {
652304007ebaSmrg          strcpy (new_value, orig_value);
652404007ebaSmrg          strcpy (new_value + orig_value_len, add);
652504007ebaSmrg        }
652604007ebaSmrg      else
652704007ebaSmrg        {
652804007ebaSmrg          strcpy (new_value, add);
652904007ebaSmrg          strcpy (new_value + add_len, orig_value);
653004007ebaSmrg        }
653104007ebaSmrg    }
653204007ebaSmrg  else
653304007ebaSmrg    {
653404007ebaSmrg      new_value = xstrdup (add);
653504007ebaSmrg    }
653604007ebaSmrg  return new_value;
653704007ebaSmrg}
653804007ebaSmrg
653904007ebaSmrgvoid
654004007ebaSmrglt_update_exe_path (const char *name, const char *value)
654104007ebaSmrg{
654204007ebaSmrg  lt_debugprintf (__FILE__, __LINE__,
654304007ebaSmrg		  "(lt_update_exe_path) modifying '%s' by prepending '%s'\n",
654404007ebaSmrg                  nonnull (name), nonnull (value));
654504007ebaSmrg
654604007ebaSmrg  if (name && *name && value && *value)
654704007ebaSmrg    {
654804007ebaSmrg      char *new_value = lt_extend_str (getenv (name), value, 0);
654904007ebaSmrg      /* some systems can't cope with a ':'-terminated path #' */
655005cf1079Smrg      size_t len = strlen (new_value);
655105cf1079Smrg      while ((len > 0) && IS_PATH_SEPARATOR (new_value[len-1]))
655204007ebaSmrg        {
655305cf1079Smrg          new_value[--len] = '\0';
655404007ebaSmrg        }
655504007ebaSmrg      lt_setenv (name, new_value);
655604007ebaSmrg      XFREE (new_value);
655704007ebaSmrg    }
655804007ebaSmrg}
655904007ebaSmrg
656004007ebaSmrgvoid
656104007ebaSmrglt_update_lib_path (const char *name, const char *value)
656204007ebaSmrg{
656304007ebaSmrg  lt_debugprintf (__FILE__, __LINE__,
656404007ebaSmrg		  "(lt_update_lib_path) modifying '%s' by prepending '%s'\n",
656504007ebaSmrg                  nonnull (name), nonnull (value));
656604007ebaSmrg
656704007ebaSmrg  if (name && *name && value && *value)
656804007ebaSmrg    {
656904007ebaSmrg      char *new_value = lt_extend_str (getenv (name), value, 0);
657004007ebaSmrg      lt_setenv (name, new_value);
657104007ebaSmrg      XFREE (new_value);
657204007ebaSmrg    }
657304007ebaSmrg}
657404007ebaSmrg
657504007ebaSmrgEOF
657604007ebaSmrg	    case $host_os in
657704007ebaSmrg	      mingw*)
657804007ebaSmrg		cat <<"EOF"
657904007ebaSmrg
658004007ebaSmrg/* Prepares an argument vector before calling spawn().
658104007ebaSmrg   Note that spawn() does not by itself call the command interpreter
658204007ebaSmrg     (getenv ("COMSPEC") != NULL ? getenv ("COMSPEC") :
658304007ebaSmrg      ({ OSVERSIONINFO v; v.dwOSVersionInfoSize = sizeof(OSVERSIONINFO);
658404007ebaSmrg         GetVersionEx(&v);
658504007ebaSmrg         v.dwPlatformId == VER_PLATFORM_WIN32_NT;
658604007ebaSmrg      }) ? "cmd.exe" : "command.com").
658704007ebaSmrg   Instead it simply concatenates the arguments, separated by ' ', and calls
658804007ebaSmrg   CreateProcess().  We must quote the arguments since Win32 CreateProcess()
658904007ebaSmrg   interprets characters like ' ', '\t', '\\', '"' (but not '<' and '>') in a
659004007ebaSmrg   special way:
659104007ebaSmrg   - Space and tab are interpreted as delimiters. They are not treated as
659204007ebaSmrg     delimiters if they are surrounded by double quotes: "...".
659304007ebaSmrg   - Unescaped double quotes are removed from the input. Their only effect is
659404007ebaSmrg     that within double quotes, space and tab are treated like normal
659504007ebaSmrg     characters.
659604007ebaSmrg   - Backslashes not followed by double quotes are not special.
659704007ebaSmrg   - But 2*n+1 backslashes followed by a double quote become
659804007ebaSmrg     n backslashes followed by a double quote (n >= 0):
659904007ebaSmrg       \" -> "
660004007ebaSmrg       \\\" -> \"
660104007ebaSmrg       \\\\\" -> \\"
660204007ebaSmrg */
660304007ebaSmrg#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"
660404007ebaSmrg#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"
660504007ebaSmrgchar **
660604007ebaSmrgprepare_spawn (char **argv)
660704007ebaSmrg{
660804007ebaSmrg  size_t argc;
660904007ebaSmrg  char **new_argv;
661004007ebaSmrg  size_t i;
661104007ebaSmrg
661204007ebaSmrg  /* Count number of arguments.  */
661304007ebaSmrg  for (argc = 0; argv[argc] != NULL; argc++)
661404007ebaSmrg    ;
661504007ebaSmrg
661604007ebaSmrg  /* Allocate new argument vector.  */
661704007ebaSmrg  new_argv = XMALLOC (char *, argc + 1);
661804007ebaSmrg
661904007ebaSmrg  /* Put quoted arguments into the new argument vector.  */
662004007ebaSmrg  for (i = 0; i < argc; i++)
662104007ebaSmrg    {
662204007ebaSmrg      const char *string = argv[i];
662304007ebaSmrg
662404007ebaSmrg      if (string[0] == '\0')
662504007ebaSmrg	new_argv[i] = xstrdup ("\"\"");
662604007ebaSmrg      else if (strpbrk (string, SHELL_SPECIAL_CHARS) != NULL)
662704007ebaSmrg	{
662804007ebaSmrg	  int quote_around = (strpbrk (string, SHELL_SPACE_CHARS) != NULL);
662904007ebaSmrg	  size_t length;
663004007ebaSmrg	  unsigned int backslashes;
663104007ebaSmrg	  const char *s;
663204007ebaSmrg	  char *quoted_string;
663304007ebaSmrg	  char *p;
663404007ebaSmrg
663504007ebaSmrg	  length = 0;
663604007ebaSmrg	  backslashes = 0;
663704007ebaSmrg	  if (quote_around)
663804007ebaSmrg	    length++;
663904007ebaSmrg	  for (s = string; *s != '\0'; s++)
664004007ebaSmrg	    {
664104007ebaSmrg	      char c = *s;
664204007ebaSmrg	      if (c == '"')
664304007ebaSmrg		length += backslashes + 1;
664404007ebaSmrg	      length++;
664504007ebaSmrg	      if (c == '\\')
664604007ebaSmrg		backslashes++;
664704007ebaSmrg	      else
664804007ebaSmrg		backslashes = 0;
664904007ebaSmrg	    }
665004007ebaSmrg	  if (quote_around)
665104007ebaSmrg	    length += backslashes + 1;
665204007ebaSmrg
665304007ebaSmrg	  quoted_string = XMALLOC (char, length + 1);
665404007ebaSmrg
665504007ebaSmrg	  p = quoted_string;
665604007ebaSmrg	  backslashes = 0;
665704007ebaSmrg	  if (quote_around)
665804007ebaSmrg	    *p++ = '"';
665904007ebaSmrg	  for (s = string; *s != '\0'; s++)
666004007ebaSmrg	    {
666104007ebaSmrg	      char c = *s;
666204007ebaSmrg	      if (c == '"')
666304007ebaSmrg		{
666404007ebaSmrg		  unsigned int j;
666504007ebaSmrg		  for (j = backslashes + 1; j > 0; j--)
666604007ebaSmrg		    *p++ = '\\';
666704007ebaSmrg		}
666804007ebaSmrg	      *p++ = c;
666904007ebaSmrg	      if (c == '\\')
667004007ebaSmrg		backslashes++;
667104007ebaSmrg	      else
667204007ebaSmrg		backslashes = 0;
667304007ebaSmrg	    }
667404007ebaSmrg	  if (quote_around)
667504007ebaSmrg	    {
667604007ebaSmrg	      unsigned int j;
667704007ebaSmrg	      for (j = backslashes; j > 0; j--)
667804007ebaSmrg		*p++ = '\\';
667904007ebaSmrg	      *p++ = '"';
668004007ebaSmrg	    }
668104007ebaSmrg	  *p = '\0';
668204007ebaSmrg
668304007ebaSmrg	  new_argv[i] = quoted_string;
668404007ebaSmrg	}
668504007ebaSmrg      else
668604007ebaSmrg	new_argv[i] = (char *) string;
668704007ebaSmrg    }
668804007ebaSmrg  new_argv[argc] = NULL;
668904007ebaSmrg
669004007ebaSmrg  return new_argv;
669104007ebaSmrg}
669204007ebaSmrgEOF
669304007ebaSmrg		;;
669404007ebaSmrg	    esac
669504007ebaSmrg
669604007ebaSmrg            cat <<"EOF"
669704007ebaSmrgvoid lt_dump_script (FILE* f)
669804007ebaSmrg{
669904007ebaSmrgEOF
670004007ebaSmrg	    func_emit_wrapper yes |
670104007ebaSmrg	      $SED -n -e '
670204007ebaSmrgs/^\(.\{79\}\)\(..*\)/\1\
670304007ebaSmrg\2/
670404007ebaSmrgh
670504007ebaSmrgs/\([\\"]\)/\\\1/g
670604007ebaSmrgs/$/\\n/
670704007ebaSmrgs/\([^\n]*\).*/  fputs ("\1", f);/p
670804007ebaSmrgg
670904007ebaSmrgD'
671004007ebaSmrg            cat <<"EOF"
671104007ebaSmrg}
671204007ebaSmrgEOF
671304007ebaSmrg}
671404007ebaSmrg# end: func_emit_cwrapperexe_src
671504007ebaSmrg
671604007ebaSmrg# func_win32_import_lib_p ARG
671704007ebaSmrg# True if ARG is an import lib, as indicated by $file_magic_cmd
671804007ebaSmrgfunc_win32_import_lib_p ()
671904007ebaSmrg{
672005cf1079Smrg    $debug_cmd
672105cf1079Smrg
672204007ebaSmrg    case `eval $file_magic_cmd \"\$1\" 2>/dev/null | $SED -e 10q` in
672304007ebaSmrg    *import*) : ;;
672404007ebaSmrg    *) false ;;
672504007ebaSmrg    esac
672604007ebaSmrg}
672704007ebaSmrg
672805cf1079Smrg# func_suncc_cstd_abi
672905cf1079Smrg# !!ONLY CALL THIS FOR SUN CC AFTER $compile_command IS FULLY EXPANDED!!
673005cf1079Smrg# Several compiler flags select an ABI that is incompatible with the
673105cf1079Smrg# Cstd library. Avoid specifying it if any are in CXXFLAGS.
673205cf1079Smrgfunc_suncc_cstd_abi ()
673305cf1079Smrg{
673405cf1079Smrg    $debug_cmd
673505cf1079Smrg
673605cf1079Smrg    case " $compile_command " in
673705cf1079Smrg    *" -compat=g "*|*\ -std=c++[0-9][0-9]\ *|*" -library=stdcxx4 "*|*" -library=stlport4 "*)
673805cf1079Smrg      suncc_use_cstd_abi=no
673905cf1079Smrg      ;;
674005cf1079Smrg    *)
674105cf1079Smrg      suncc_use_cstd_abi=yes
674205cf1079Smrg      ;;
674305cf1079Smrg    esac
674405cf1079Smrg}
674505cf1079Smrg
674604007ebaSmrg# func_mode_link arg...
674704007ebaSmrgfunc_mode_link ()
674804007ebaSmrg{
674905cf1079Smrg    $debug_cmd
675005cf1079Smrg
675104007ebaSmrg    case $host in
675204007ebaSmrg    *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-cegcc*)
675304007ebaSmrg      # It is impossible to link a dll without this setting, and
675404007ebaSmrg      # we shouldn't force the makefile maintainer to figure out
675505cf1079Smrg      # what system we are compiling for in order to pass an extra
675604007ebaSmrg      # flag for every libtool invocation.
675704007ebaSmrg      # allow_undefined=no
675804007ebaSmrg
675904007ebaSmrg      # FIXME: Unfortunately, there are problems with the above when trying
676005cf1079Smrg      # to make a dll that has undefined symbols, in which case not
676104007ebaSmrg      # even a static library is built.  For now, we need to specify
676204007ebaSmrg      # -no-undefined on the libtool link line when we can be certain
676304007ebaSmrg      # that all symbols are satisfied, otherwise we get a static library.
676404007ebaSmrg      allow_undefined=yes
676504007ebaSmrg      ;;
676604007ebaSmrg    *)
676704007ebaSmrg      allow_undefined=yes
676804007ebaSmrg      ;;
676904007ebaSmrg    esac
677004007ebaSmrg    libtool_args=$nonopt
677104007ebaSmrg    base_compile="$nonopt $@"
677204007ebaSmrg    compile_command=$nonopt
677304007ebaSmrg    finalize_command=$nonopt
677404007ebaSmrg
677504007ebaSmrg    compile_rpath=
677604007ebaSmrg    finalize_rpath=
677704007ebaSmrg    compile_shlibpath=
677804007ebaSmrg    finalize_shlibpath=
677904007ebaSmrg    convenience=
678004007ebaSmrg    old_convenience=
678104007ebaSmrg    deplibs=
678204007ebaSmrg    old_deplibs=
678304007ebaSmrg    compiler_flags=
678404007ebaSmrg    linker_flags=
678504007ebaSmrg    dllsearchpath=
678604007ebaSmrg    lib_search_path=`pwd`
678704007ebaSmrg    inst_prefix_dir=
678804007ebaSmrg    new_inherited_linker_flags=
678904007ebaSmrg
679004007ebaSmrg    avoid_version=no
679104007ebaSmrg    bindir=
679204007ebaSmrg    dlfiles=
679304007ebaSmrg    dlprefiles=
679404007ebaSmrg    dlself=no
679504007ebaSmrg    export_dynamic=no
679604007ebaSmrg    export_symbols=
679704007ebaSmrg    export_symbols_regex=
679804007ebaSmrg    generated=
679904007ebaSmrg    libobjs=
680004007ebaSmrg    ltlibs=
680104007ebaSmrg    module=no
680204007ebaSmrg    no_install=no
680304007ebaSmrg    objs=
680405cf1079Smrg    os2dllname=
680504007ebaSmrg    non_pic_objects=
680604007ebaSmrg    precious_files_regex=
680704007ebaSmrg    prefer_static_libs=no
680805cf1079Smrg    preload=false
680904007ebaSmrg    prev=
681004007ebaSmrg    prevarg=
681104007ebaSmrg    release=
681204007ebaSmrg    rpath=
681304007ebaSmrg    xrpath=
681404007ebaSmrg    perm_rpath=
681504007ebaSmrg    temp_rpath=
681604007ebaSmrg    thread_safe=no
681704007ebaSmrg    vinfo=
681804007ebaSmrg    vinfo_number=no
681904007ebaSmrg    weak_libs=
682005cf1079Smrg    single_module=$wl-single_module
682104007ebaSmrg    func_infer_tag $base_compile
682204007ebaSmrg
682304007ebaSmrg    # We need to know -static, to get the right output filenames.
682404007ebaSmrg    for arg
682504007ebaSmrg    do
682604007ebaSmrg      case $arg in
682704007ebaSmrg      -shared)
682805cf1079Smrg	test yes != "$build_libtool_libs" \
682905cf1079Smrg	  && func_fatal_configuration "cannot build a shared library"
683004007ebaSmrg	build_old_libs=no
683104007ebaSmrg	break
683204007ebaSmrg	;;
683304007ebaSmrg      -all-static | -static | -static-libtool-libs)
683404007ebaSmrg	case $arg in
683504007ebaSmrg	-all-static)
683605cf1079Smrg	  if test yes = "$build_libtool_libs" && test -z "$link_static_flag"; then
683704007ebaSmrg	    func_warning "complete static linking is impossible in this configuration"
683804007ebaSmrg	  fi
683904007ebaSmrg	  if test -n "$link_static_flag"; then
684004007ebaSmrg	    dlopen_self=$dlopen_self_static
684104007ebaSmrg	  fi
684204007ebaSmrg	  prefer_static_libs=yes
684304007ebaSmrg	  ;;
684404007ebaSmrg	-static)
684504007ebaSmrg	  if test -z "$pic_flag" && test -n "$link_static_flag"; then
684604007ebaSmrg	    dlopen_self=$dlopen_self_static
684704007ebaSmrg	  fi
684804007ebaSmrg	  prefer_static_libs=built
684904007ebaSmrg	  ;;
685004007ebaSmrg	-static-libtool-libs)
685104007ebaSmrg	  if test -z "$pic_flag" && test -n "$link_static_flag"; then
685204007ebaSmrg	    dlopen_self=$dlopen_self_static
685304007ebaSmrg	  fi
685404007ebaSmrg	  prefer_static_libs=yes
685504007ebaSmrg	  ;;
685604007ebaSmrg	esac
685704007ebaSmrg	build_libtool_libs=no
685804007ebaSmrg	build_old_libs=yes
685904007ebaSmrg	break
686004007ebaSmrg	;;
686104007ebaSmrg      esac
686204007ebaSmrg    done
686304007ebaSmrg
686404007ebaSmrg    # See if our shared archives depend on static archives.
686504007ebaSmrg    test -n "$old_archive_from_new_cmds" && build_old_libs=yes
686604007ebaSmrg
686704007ebaSmrg    # Go through the arguments, transforming them on the way.
686804007ebaSmrg    while test "$#" -gt 0; do
686905cf1079Smrg      arg=$1
687004007ebaSmrg      shift
687179d5fcd7Smrg      func_quote_arg pretty,unquoted "$arg"
687279d5fcd7Smrg      qarg=$func_quote_arg_unquoted_result
687379d5fcd7Smrg      func_append libtool_args " $func_quote_arg_result"
687404007ebaSmrg
687504007ebaSmrg      # If the previous option needs an argument, assign it.
687604007ebaSmrg      if test -n "$prev"; then
687704007ebaSmrg	case $prev in
687804007ebaSmrg	output)
687904007ebaSmrg	  func_append compile_command " @OUTPUT@"
688004007ebaSmrg	  func_append finalize_command " @OUTPUT@"
688104007ebaSmrg	  ;;
688204007ebaSmrg	esac
688304007ebaSmrg
688404007ebaSmrg	case $prev in
688504007ebaSmrg	bindir)
688605cf1079Smrg	  bindir=$arg
688704007ebaSmrg	  prev=
688804007ebaSmrg	  continue
688904007ebaSmrg	  ;;
689004007ebaSmrg	dlfiles|dlprefiles)
689105cf1079Smrg	  $preload || {
689204007ebaSmrg	    # Add the symbol object into the linking commands.
689304007ebaSmrg	    func_append compile_command " @SYMFILE@"
689404007ebaSmrg	    func_append finalize_command " @SYMFILE@"
689505cf1079Smrg	    preload=:
689605cf1079Smrg	  }
689704007ebaSmrg	  case $arg in
689804007ebaSmrg	  *.la | *.lo) ;;  # We handle these cases below.
689904007ebaSmrg	  force)
690005cf1079Smrg	    if test no = "$dlself"; then
690104007ebaSmrg	      dlself=needless
690204007ebaSmrg	      export_dynamic=yes
690304007ebaSmrg	    fi
690404007ebaSmrg	    prev=
690504007ebaSmrg	    continue
690604007ebaSmrg	    ;;
690704007ebaSmrg	  self)
690805cf1079Smrg	    if test dlprefiles = "$prev"; then
690904007ebaSmrg	      dlself=yes
691005cf1079Smrg	    elif test dlfiles = "$prev" && test yes != "$dlopen_self"; then
691104007ebaSmrg	      dlself=yes
691204007ebaSmrg	    else
691304007ebaSmrg	      dlself=needless
691404007ebaSmrg	      export_dynamic=yes
691504007ebaSmrg	    fi
691604007ebaSmrg	    prev=
691704007ebaSmrg	    continue
691804007ebaSmrg	    ;;
691904007ebaSmrg	  *)
692005cf1079Smrg	    if test dlfiles = "$prev"; then
692104007ebaSmrg	      func_append dlfiles " $arg"
692204007ebaSmrg	    else
692304007ebaSmrg	      func_append dlprefiles " $arg"
692404007ebaSmrg	    fi
692504007ebaSmrg	    prev=
692604007ebaSmrg	    continue
692704007ebaSmrg	    ;;
692804007ebaSmrg	  esac
692904007ebaSmrg	  ;;
693004007ebaSmrg	expsyms)
693105cf1079Smrg	  export_symbols=$arg
693204007ebaSmrg	  test -f "$arg" \
693305cf1079Smrg	    || func_fatal_error "symbol file '$arg' does not exist"
693404007ebaSmrg	  prev=
693504007ebaSmrg	  continue
693604007ebaSmrg	  ;;
693704007ebaSmrg	expsyms_regex)
693805cf1079Smrg	  export_symbols_regex=$arg
693904007ebaSmrg	  prev=
694004007ebaSmrg	  continue
694104007ebaSmrg	  ;;
694204007ebaSmrg	framework)
694304007ebaSmrg	  case $host in
694404007ebaSmrg	    *-*-darwin*)
694504007ebaSmrg	      case "$deplibs " in
694604007ebaSmrg		*" $qarg.ltframework "*) ;;
694704007ebaSmrg		*) func_append deplibs " $qarg.ltframework" # this is fixed later
694804007ebaSmrg		   ;;
694904007ebaSmrg	      esac
695004007ebaSmrg	      ;;
695104007ebaSmrg	  esac
695204007ebaSmrg	  prev=
695304007ebaSmrg	  continue
695404007ebaSmrg	  ;;
695504007ebaSmrg	inst_prefix)
695605cf1079Smrg	  inst_prefix_dir=$arg
695705cf1079Smrg	  prev=
695805cf1079Smrg	  continue
695905cf1079Smrg	  ;;
696005cf1079Smrg	mllvm)
696105cf1079Smrg	  # Clang does not use LLVM to link, so we can simply discard any
696205cf1079Smrg	  # '-mllvm $arg' options when doing the link step.
696304007ebaSmrg	  prev=
696404007ebaSmrg	  continue
696504007ebaSmrg	  ;;
696604007ebaSmrg	objectlist)
696704007ebaSmrg	  if test -f "$arg"; then
696804007ebaSmrg	    save_arg=$arg
696904007ebaSmrg	    moreargs=
697004007ebaSmrg	    for fil in `cat "$save_arg"`
697104007ebaSmrg	    do
697204007ebaSmrg#	      func_append moreargs " $fil"
697304007ebaSmrg	      arg=$fil
697404007ebaSmrg	      # A libtool-controlled object.
697504007ebaSmrg
697604007ebaSmrg	      # Check to see that this really is a libtool object.
697704007ebaSmrg	      if func_lalib_unsafe_p "$arg"; then
697804007ebaSmrg		pic_object=
697904007ebaSmrg		non_pic_object=
698004007ebaSmrg
698104007ebaSmrg		# Read the .lo file
698204007ebaSmrg		func_source "$arg"
698304007ebaSmrg
698404007ebaSmrg		if test -z "$pic_object" ||
698504007ebaSmrg		   test -z "$non_pic_object" ||
698605cf1079Smrg		   test none = "$pic_object" &&
698705cf1079Smrg		   test none = "$non_pic_object"; then
698805cf1079Smrg		  func_fatal_error "cannot find name of object for '$arg'"
698904007ebaSmrg		fi
699004007ebaSmrg
699104007ebaSmrg		# Extract subdirectory from the argument.
699204007ebaSmrg		func_dirname "$arg" "/" ""
699305cf1079Smrg		xdir=$func_dirname_result
699404007ebaSmrg
699505cf1079Smrg		if test none != "$pic_object"; then
699604007ebaSmrg		  # Prepend the subdirectory the object is found in.
699705cf1079Smrg		  pic_object=$xdir$pic_object
699804007ebaSmrg
699905cf1079Smrg		  if test dlfiles = "$prev"; then
700005cf1079Smrg		    if test yes = "$build_libtool_libs" && test yes = "$dlopen_support"; then
700104007ebaSmrg		      func_append dlfiles " $pic_object"
700204007ebaSmrg		      prev=
700304007ebaSmrg		      continue
700404007ebaSmrg		    else
700504007ebaSmrg		      # If libtool objects are unsupported, then we need to preload.
700604007ebaSmrg		      prev=dlprefiles
700704007ebaSmrg		    fi
700804007ebaSmrg		  fi
700904007ebaSmrg
701004007ebaSmrg		  # CHECK ME:  I think I busted this.  -Ossama
701105cf1079Smrg		  if test dlprefiles = "$prev"; then
701204007ebaSmrg		    # Preload the old-style object.
701304007ebaSmrg		    func_append dlprefiles " $pic_object"
701404007ebaSmrg		    prev=
701504007ebaSmrg		  fi
701604007ebaSmrg
701704007ebaSmrg		  # A PIC object.
701804007ebaSmrg		  func_append libobjs " $pic_object"
701905cf1079Smrg		  arg=$pic_object
702004007ebaSmrg		fi
702104007ebaSmrg
702204007ebaSmrg		# Non-PIC object.
702305cf1079Smrg		if test none != "$non_pic_object"; then
702404007ebaSmrg		  # Prepend the subdirectory the object is found in.
702505cf1079Smrg		  non_pic_object=$xdir$non_pic_object
702604007ebaSmrg
702704007ebaSmrg		  # A standard non-PIC object
702804007ebaSmrg		  func_append non_pic_objects " $non_pic_object"
702905cf1079Smrg		  if test -z "$pic_object" || test none = "$pic_object"; then
703005cf1079Smrg		    arg=$non_pic_object
703104007ebaSmrg		  fi
703204007ebaSmrg		else
703304007ebaSmrg		  # If the PIC object exists, use it instead.
703404007ebaSmrg		  # $xdir was prepended to $pic_object above.
703505cf1079Smrg		  non_pic_object=$pic_object
703604007ebaSmrg		  func_append non_pic_objects " $non_pic_object"
703704007ebaSmrg		fi
703804007ebaSmrg	      else
703904007ebaSmrg		# Only an error if not doing a dry-run.
704004007ebaSmrg		if $opt_dry_run; then
704104007ebaSmrg		  # Extract subdirectory from the argument.
704204007ebaSmrg		  func_dirname "$arg" "/" ""
704305cf1079Smrg		  xdir=$func_dirname_result
704404007ebaSmrg
704504007ebaSmrg		  func_lo2o "$arg"
704604007ebaSmrg		  pic_object=$xdir$objdir/$func_lo2o_result
704704007ebaSmrg		  non_pic_object=$xdir$func_lo2o_result
704804007ebaSmrg		  func_append libobjs " $pic_object"
704904007ebaSmrg		  func_append non_pic_objects " $non_pic_object"
705004007ebaSmrg	        else
705105cf1079Smrg		  func_fatal_error "'$arg' is not a valid libtool object"
705204007ebaSmrg		fi
705304007ebaSmrg	      fi
705404007ebaSmrg	    done
705504007ebaSmrg	  else
705605cf1079Smrg	    func_fatal_error "link input file '$arg' does not exist"
705704007ebaSmrg	  fi
705804007ebaSmrg	  arg=$save_arg
705904007ebaSmrg	  prev=
706004007ebaSmrg	  continue
706104007ebaSmrg	  ;;
706205cf1079Smrg	os2dllname)
706305cf1079Smrg	  os2dllname=$arg
706405cf1079Smrg	  prev=
706505cf1079Smrg	  continue
706605cf1079Smrg	  ;;
706704007ebaSmrg	precious_regex)
706805cf1079Smrg	  precious_files_regex=$arg
706904007ebaSmrg	  prev=
707004007ebaSmrg	  continue
707104007ebaSmrg	  ;;
707204007ebaSmrg	release)
707305cf1079Smrg	  release=-$arg
707404007ebaSmrg	  prev=
707504007ebaSmrg	  continue
707604007ebaSmrg	  ;;
707704007ebaSmrg	rpath | xrpath)
707804007ebaSmrg	  # We need an absolute path.
707904007ebaSmrg	  case $arg in
708004007ebaSmrg	  [\\/]* | [A-Za-z]:[\\/]*) ;;
708104007ebaSmrg	  *)
708204007ebaSmrg	    func_fatal_error "only absolute run-paths are allowed"
708304007ebaSmrg	    ;;
708404007ebaSmrg	  esac
708505cf1079Smrg	  if test rpath = "$prev"; then
708604007ebaSmrg	    case "$rpath " in
708704007ebaSmrg	    *" $arg "*) ;;
708804007ebaSmrg	    *) func_append rpath " $arg" ;;
708904007ebaSmrg	    esac
709004007ebaSmrg	  else
709104007ebaSmrg	    case "$xrpath " in
709204007ebaSmrg	    *" $arg "*) ;;
709304007ebaSmrg	    *) func_append xrpath " $arg" ;;
709404007ebaSmrg	    esac
709504007ebaSmrg	  fi
709604007ebaSmrg	  prev=
709704007ebaSmrg	  continue
709804007ebaSmrg	  ;;
709904007ebaSmrg	shrext)
710005cf1079Smrg	  shrext_cmds=$arg
710104007ebaSmrg	  prev=
710204007ebaSmrg	  continue
710304007ebaSmrg	  ;;
710404007ebaSmrg	weak)
710504007ebaSmrg	  func_append weak_libs " $arg"
710604007ebaSmrg	  prev=
710704007ebaSmrg	  continue
710804007ebaSmrg	  ;;
710979d5fcd7Smrg	xassembler)
711079d5fcd7Smrg	  func_append compiler_flags " -Xassembler $qarg"
711179d5fcd7Smrg	  prev=
711279d5fcd7Smrg	  func_append compile_command " -Xassembler $qarg"
711379d5fcd7Smrg	  func_append finalize_command " -Xassembler $qarg"
711479d5fcd7Smrg	  continue
711579d5fcd7Smrg	  ;;
711604007ebaSmrg	xcclinker)
711704007ebaSmrg	  func_append linker_flags " $qarg"
711804007ebaSmrg	  func_append compiler_flags " $qarg"
711904007ebaSmrg	  prev=
712004007ebaSmrg	  func_append compile_command " $qarg"
712104007ebaSmrg	  func_append finalize_command " $qarg"
712204007ebaSmrg	  continue
712304007ebaSmrg	  ;;
712404007ebaSmrg	xcompiler)
712504007ebaSmrg	  func_append compiler_flags " $qarg"
712604007ebaSmrg	  prev=
712704007ebaSmrg	  func_append compile_command " $qarg"
712804007ebaSmrg	  func_append finalize_command " $qarg"
712904007ebaSmrg	  continue
713004007ebaSmrg	  ;;
713104007ebaSmrg	xlinker)
713204007ebaSmrg	  func_append linker_flags " $qarg"
713304007ebaSmrg	  func_append compiler_flags " $wl$qarg"
713404007ebaSmrg	  prev=
713504007ebaSmrg	  func_append compile_command " $wl$qarg"
713604007ebaSmrg	  func_append finalize_command " $wl$qarg"
713704007ebaSmrg	  continue
713804007ebaSmrg	  ;;
713904007ebaSmrg	*)
714004007ebaSmrg	  eval "$prev=\"\$arg\""
714104007ebaSmrg	  prev=
714204007ebaSmrg	  continue
714304007ebaSmrg	  ;;
714404007ebaSmrg	esac
714504007ebaSmrg      fi # test -n "$prev"
714604007ebaSmrg
714705cf1079Smrg      prevarg=$arg
714804007ebaSmrg
714904007ebaSmrg      case $arg in
715004007ebaSmrg      -all-static)
715104007ebaSmrg	if test -n "$link_static_flag"; then
715204007ebaSmrg	  # See comment for -static flag below, for more details.
715304007ebaSmrg	  func_append compile_command " $link_static_flag"
715404007ebaSmrg	  func_append finalize_command " $link_static_flag"
715504007ebaSmrg	fi
715604007ebaSmrg	continue
715704007ebaSmrg	;;
715804007ebaSmrg
715904007ebaSmrg      -allow-undefined)
716004007ebaSmrg	# FIXME: remove this flag sometime in the future.
716105cf1079Smrg	func_fatal_error "'-allow-undefined' must not be used because it is the default"
716204007ebaSmrg	;;
716304007ebaSmrg
716404007ebaSmrg      -avoid-version)
716504007ebaSmrg	avoid_version=yes
716604007ebaSmrg	continue
716704007ebaSmrg	;;
716804007ebaSmrg
716904007ebaSmrg      -bindir)
717004007ebaSmrg	prev=bindir
717104007ebaSmrg	continue
717204007ebaSmrg	;;
717304007ebaSmrg
717404007ebaSmrg      -dlopen)
717504007ebaSmrg	prev=dlfiles
717604007ebaSmrg	continue
717704007ebaSmrg	;;
717804007ebaSmrg
717904007ebaSmrg      -dlpreopen)
718004007ebaSmrg	prev=dlprefiles
718104007ebaSmrg	continue
718204007ebaSmrg	;;
718304007ebaSmrg
718404007ebaSmrg      -export-dynamic)
718504007ebaSmrg	export_dynamic=yes
718604007ebaSmrg	continue
718704007ebaSmrg	;;
718804007ebaSmrg
718904007ebaSmrg      -export-symbols | -export-symbols-regex)
719004007ebaSmrg	if test -n "$export_symbols" || test -n "$export_symbols_regex"; then
719104007ebaSmrg	  func_fatal_error "more than one -exported-symbols argument is not allowed"
719204007ebaSmrg	fi
719305cf1079Smrg	if test X-export-symbols = "X$arg"; then
719404007ebaSmrg	  prev=expsyms
719504007ebaSmrg	else
719604007ebaSmrg	  prev=expsyms_regex
719704007ebaSmrg	fi
719804007ebaSmrg	continue
719904007ebaSmrg	;;
720004007ebaSmrg
720104007ebaSmrg      -framework)
720204007ebaSmrg	prev=framework
720304007ebaSmrg	continue
720404007ebaSmrg	;;
720504007ebaSmrg
720604007ebaSmrg      -inst-prefix-dir)
720704007ebaSmrg	prev=inst_prefix
720804007ebaSmrg	continue
720904007ebaSmrg	;;
721004007ebaSmrg
721104007ebaSmrg      # The native IRIX linker understands -LANG:*, -LIST:* and -LNO:*
721204007ebaSmrg      # so, if we see these flags be careful not to treat them like -L
721304007ebaSmrg      -L[A-Z][A-Z]*:*)
721404007ebaSmrg	case $with_gcc/$host in
721504007ebaSmrg	no/*-*-irix* | /*-*-irix*)
721604007ebaSmrg	  func_append compile_command " $arg"
721704007ebaSmrg	  func_append finalize_command " $arg"
721804007ebaSmrg	  ;;
721904007ebaSmrg	esac
722004007ebaSmrg	continue
722104007ebaSmrg	;;
722204007ebaSmrg
722304007ebaSmrg      -L*)
722404007ebaSmrg	func_stripname "-L" '' "$arg"
722504007ebaSmrg	if test -z "$func_stripname_result"; then
722604007ebaSmrg	  if test "$#" -gt 0; then
722705cf1079Smrg	    func_fatal_error "require no space between '-L' and '$1'"
722804007ebaSmrg	  else
722905cf1079Smrg	    func_fatal_error "need path for '-L' option"
723004007ebaSmrg	  fi
723104007ebaSmrg	fi
723204007ebaSmrg	func_resolve_sysroot "$func_stripname_result"
723304007ebaSmrg	dir=$func_resolve_sysroot_result
723404007ebaSmrg	# We need an absolute path.
723504007ebaSmrg	case $dir in
723604007ebaSmrg	[\\/]* | [A-Za-z]:[\\/]*) ;;
723704007ebaSmrg	*)
723804007ebaSmrg	  absdir=`cd "$dir" && pwd`
723904007ebaSmrg	  test -z "$absdir" && \
724005cf1079Smrg	    func_fatal_error "cannot determine absolute directory name of '$dir'"
724105cf1079Smrg	  dir=$absdir
724204007ebaSmrg	  ;;
724304007ebaSmrg	esac
724404007ebaSmrg	case "$deplibs " in
724504007ebaSmrg	*" -L$dir "* | *" $arg "*)
724604007ebaSmrg	  # Will only happen for absolute or sysroot arguments
724704007ebaSmrg	  ;;
724804007ebaSmrg	*)
724904007ebaSmrg	  # Preserve sysroot, but never include relative directories
725004007ebaSmrg	  case $dir in
725104007ebaSmrg	    [\\/]* | [A-Za-z]:[\\/]* | =*) func_append deplibs " $arg" ;;
725204007ebaSmrg	    *) func_append deplibs " -L$dir" ;;
725304007ebaSmrg	  esac
725404007ebaSmrg	  func_append lib_search_path " $dir"
725504007ebaSmrg	  ;;
725604007ebaSmrg	esac
725704007ebaSmrg	case $host in
725804007ebaSmrg	*-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-cegcc*)
725904007ebaSmrg	  testbindir=`$ECHO "$dir" | $SED 's*/lib$*/bin*'`
726004007ebaSmrg	  case :$dllsearchpath: in
726104007ebaSmrg	  *":$dir:"*) ;;
726204007ebaSmrg	  ::) dllsearchpath=$dir;;
726304007ebaSmrg	  *) func_append dllsearchpath ":$dir";;
726404007ebaSmrg	  esac
726504007ebaSmrg	  case :$dllsearchpath: in
726604007ebaSmrg	  *":$testbindir:"*) ;;
726704007ebaSmrg	  ::) dllsearchpath=$testbindir;;
726804007ebaSmrg	  *) func_append dllsearchpath ":$testbindir";;
726904007ebaSmrg	  esac
727004007ebaSmrg	  ;;
727104007ebaSmrg	esac
727204007ebaSmrg	continue
727304007ebaSmrg	;;
727404007ebaSmrg
727504007ebaSmrg      -l*)
727605cf1079Smrg	if test X-lc = "X$arg" || test X-lm = "X$arg"; then
727704007ebaSmrg	  case $host in
727804007ebaSmrg	  *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-beos* | *-cegcc* | *-*-haiku*)
727904007ebaSmrg	    # These systems don't actually have a C or math library (as such)
728004007ebaSmrg	    continue
728104007ebaSmrg	    ;;
728204007ebaSmrg	  *-*-os2*)
728304007ebaSmrg	    # These systems don't actually have a C library (as such)
728405cf1079Smrg	    test X-lc = "X$arg" && continue
728504007ebaSmrg	    ;;
728679d5fcd7Smrg	  *-*-openbsd* | *-*-freebsd* | *-*-dragonfly* | *-*-bitrig* | *-*-midnightbsd*)
728704007ebaSmrg	    # Do not include libc due to us having libc/libc_r.
728805cf1079Smrg	    test X-lc = "X$arg" && continue
728904007ebaSmrg	    ;;
729004007ebaSmrg	  *-*-rhapsody* | *-*-darwin1.[012])
729104007ebaSmrg	    # Rhapsody C and math libraries are in the System framework
729204007ebaSmrg	    func_append deplibs " System.ltframework"
729304007ebaSmrg	    continue
729404007ebaSmrg	    ;;
729504007ebaSmrg	  *-*-sco3.2v5* | *-*-sco5v6*)
729604007ebaSmrg	    # Causes problems with __ctype
729705cf1079Smrg	    test X-lc = "X$arg" && continue
729804007ebaSmrg	    ;;
729904007ebaSmrg	  *-*-sysv4.2uw2* | *-*-sysv5* | *-*-unixware* | *-*-OpenUNIX*)
730004007ebaSmrg	    # Compiler inserts libc in the correct place for threads to work
730105cf1079Smrg	    test X-lc = "X$arg" && continue
730204007ebaSmrg	    ;;
730304007ebaSmrg	  esac
730405cf1079Smrg	elif test X-lc_r = "X$arg"; then
730504007ebaSmrg	 case $host in
730679d5fcd7Smrg	 *-*-openbsd* | *-*-freebsd* | *-*-dragonfly* | *-*-bitrig* | *-*-midnightbsd*)
730704007ebaSmrg	   # Do not include libc_r directly, use -pthread flag.
730804007ebaSmrg	   continue
730904007ebaSmrg	   ;;
731004007ebaSmrg	 esac
731104007ebaSmrg	fi
731204007ebaSmrg	func_append deplibs " $arg"
731304007ebaSmrg	continue
731404007ebaSmrg	;;
731504007ebaSmrg
731605cf1079Smrg      -mllvm)
731705cf1079Smrg	prev=mllvm
731805cf1079Smrg	continue
731905cf1079Smrg	;;
732005cf1079Smrg
732104007ebaSmrg      -module)
732204007ebaSmrg	module=yes
732304007ebaSmrg	continue
732404007ebaSmrg	;;
732504007ebaSmrg
732604007ebaSmrg      # Tru64 UNIX uses -model [arg] to determine the layout of C++
732704007ebaSmrg      # classes, name mangling, and exception handling.
732804007ebaSmrg      # Darwin uses the -arch flag to determine output architecture.
732904007ebaSmrg      -model|-arch|-isysroot|--sysroot)
733004007ebaSmrg	func_append compiler_flags " $arg"
733104007ebaSmrg	func_append compile_command " $arg"
733204007ebaSmrg	func_append finalize_command " $arg"
733304007ebaSmrg	prev=xcompiler
733404007ebaSmrg	continue
733504007ebaSmrg	;;
733679d5fcd7Smrg     # Solaris ld rejects as of 11.4. Refer to Oracle bug 22985199.
733779d5fcd7Smrg     -pthread)
733879d5fcd7Smrg	case $host in
733979d5fcd7Smrg	  *solaris2*) ;;
734079d5fcd7Smrg	  *)
734179d5fcd7Smrg	    case "$new_inherited_linker_flags " in
734279d5fcd7Smrg	        *" $arg "*) ;;
734379d5fcd7Smrg	        * ) func_append new_inherited_linker_flags " $arg" ;;
734479d5fcd7Smrg	    esac
734579d5fcd7Smrg	  ;;
734679d5fcd7Smrg	esac
734779d5fcd7Smrg	continue
734879d5fcd7Smrg	;;
734979d5fcd7Smrg      -mt|-mthreads|-kthread|-Kthread|-pthreads|--thread-safe \
735004007ebaSmrg      |-threads|-fopenmp|-openmp|-mp|-xopenmp|-omp|-qsmp=*)
735104007ebaSmrg	func_append compiler_flags " $arg"
735204007ebaSmrg	func_append compile_command " $arg"
735304007ebaSmrg	func_append finalize_command " $arg"
735404007ebaSmrg	case "$new_inherited_linker_flags " in
735504007ebaSmrg	    *" $arg "*) ;;
735604007ebaSmrg	    * ) func_append new_inherited_linker_flags " $arg" ;;
735704007ebaSmrg	esac
735804007ebaSmrg	continue
735904007ebaSmrg	;;
736004007ebaSmrg
736104007ebaSmrg      -multi_module)
736205cf1079Smrg	single_module=$wl-multi_module
736304007ebaSmrg	continue
736404007ebaSmrg	;;
736504007ebaSmrg
736604007ebaSmrg      -no-fast-install)
736704007ebaSmrg	fast_install=no
736804007ebaSmrg	continue
736904007ebaSmrg	;;
737004007ebaSmrg
737104007ebaSmrg      -no-install)
737204007ebaSmrg	case $host in
737304007ebaSmrg	*-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-*-darwin* | *-cegcc*)
737404007ebaSmrg	  # The PATH hackery in wrapper scripts is required on Windows
737504007ebaSmrg	  # and Darwin in order for the loader to find any dlls it needs.
737605cf1079Smrg	  func_warning "'-no-install' is ignored for $host"
737705cf1079Smrg	  func_warning "assuming '-no-fast-install' instead"
737804007ebaSmrg	  fast_install=no
737904007ebaSmrg	  ;;
738004007ebaSmrg	*) no_install=yes ;;
738104007ebaSmrg	esac
738204007ebaSmrg	continue
738304007ebaSmrg	;;
738404007ebaSmrg
738504007ebaSmrg      -no-undefined)
738604007ebaSmrg	allow_undefined=no
738704007ebaSmrg	continue
738804007ebaSmrg	;;
738904007ebaSmrg
739004007ebaSmrg      -objectlist)
739104007ebaSmrg	prev=objectlist
739204007ebaSmrg	continue
739304007ebaSmrg	;;
739404007ebaSmrg
739505cf1079Smrg      -os2dllname)
739605cf1079Smrg	prev=os2dllname
739705cf1079Smrg	continue
739805cf1079Smrg	;;
739905cf1079Smrg
740004007ebaSmrg      -o) prev=output ;;
740104007ebaSmrg
740204007ebaSmrg      -precious-files-regex)
740304007ebaSmrg	prev=precious_regex
740404007ebaSmrg	continue
740504007ebaSmrg	;;
740604007ebaSmrg
740704007ebaSmrg      -release)
740804007ebaSmrg	prev=release
740904007ebaSmrg	continue
741004007ebaSmrg	;;
741104007ebaSmrg
741204007ebaSmrg      -rpath)
741304007ebaSmrg	prev=rpath
741404007ebaSmrg	continue
741504007ebaSmrg	;;
741604007ebaSmrg
741704007ebaSmrg      -R)
741804007ebaSmrg	prev=xrpath
741904007ebaSmrg	continue
742004007ebaSmrg	;;
742104007ebaSmrg
742204007ebaSmrg      -R*)
742304007ebaSmrg	func_stripname '-R' '' "$arg"
742404007ebaSmrg	dir=$func_stripname_result
742504007ebaSmrg	# We need an absolute path.
742604007ebaSmrg	case $dir in
742704007ebaSmrg	[\\/]* | [A-Za-z]:[\\/]*) ;;
742804007ebaSmrg	=*)
742904007ebaSmrg	  func_stripname '=' '' "$dir"
743004007ebaSmrg	  dir=$lt_sysroot$func_stripname_result
743104007ebaSmrg	  ;;
743204007ebaSmrg	*)
743304007ebaSmrg	  func_fatal_error "only absolute run-paths are allowed"
743404007ebaSmrg	  ;;
743504007ebaSmrg	esac
743604007ebaSmrg	case "$xrpath " in
743704007ebaSmrg	*" $dir "*) ;;
743804007ebaSmrg	*) func_append xrpath " $dir" ;;
743904007ebaSmrg	esac
744004007ebaSmrg	continue
744104007ebaSmrg	;;
744204007ebaSmrg
744304007ebaSmrg      -shared)
744404007ebaSmrg	# The effects of -shared are defined in a previous loop.
744504007ebaSmrg	continue
744604007ebaSmrg	;;
744704007ebaSmrg
744804007ebaSmrg      -shrext)
744904007ebaSmrg	prev=shrext
745004007ebaSmrg	continue
745104007ebaSmrg	;;
745204007ebaSmrg
745304007ebaSmrg      -static | -static-libtool-libs)
745404007ebaSmrg	# The effects of -static are defined in a previous loop.
745504007ebaSmrg	# We used to do the same as -all-static on platforms that
745604007ebaSmrg	# didn't have a PIC flag, but the assumption that the effects
745704007ebaSmrg	# would be equivalent was wrong.  It would break on at least
745804007ebaSmrg	# Digital Unix and AIX.
745904007ebaSmrg	continue
746004007ebaSmrg	;;
746104007ebaSmrg
746204007ebaSmrg      -thread-safe)
746304007ebaSmrg	thread_safe=yes
746404007ebaSmrg	continue
746504007ebaSmrg	;;
746604007ebaSmrg
746704007ebaSmrg      -version-info)
746804007ebaSmrg	prev=vinfo
746904007ebaSmrg	continue
747004007ebaSmrg	;;
747104007ebaSmrg
747204007ebaSmrg      -version-number)
747304007ebaSmrg	prev=vinfo
747404007ebaSmrg	vinfo_number=yes
747504007ebaSmrg	continue
747604007ebaSmrg	;;
747704007ebaSmrg
747804007ebaSmrg      -weak)
747904007ebaSmrg        prev=weak
748004007ebaSmrg	continue
748104007ebaSmrg	;;
748204007ebaSmrg
748304007ebaSmrg      -Wc,*)
748404007ebaSmrg	func_stripname '-Wc,' '' "$arg"
748504007ebaSmrg	args=$func_stripname_result
748604007ebaSmrg	arg=
748705cf1079Smrg	save_ifs=$IFS; IFS=,
748804007ebaSmrg	for flag in $args; do
748905cf1079Smrg	  IFS=$save_ifs
749079d5fcd7Smrg          func_quote_arg pretty "$flag"
749179d5fcd7Smrg	  func_append arg " $func_quote_arg_result"
749279d5fcd7Smrg	  func_append compiler_flags " $func_quote_arg_result"
749304007ebaSmrg	done
749405cf1079Smrg	IFS=$save_ifs
749504007ebaSmrg	func_stripname ' ' '' "$arg"
749604007ebaSmrg	arg=$func_stripname_result
749704007ebaSmrg	;;
749804007ebaSmrg
749904007ebaSmrg      -Wl,*)
750004007ebaSmrg	func_stripname '-Wl,' '' "$arg"
750104007ebaSmrg	args=$func_stripname_result
750204007ebaSmrg	arg=
750305cf1079Smrg	save_ifs=$IFS; IFS=,
750404007ebaSmrg	for flag in $args; do
750505cf1079Smrg	  IFS=$save_ifs
750679d5fcd7Smrg          func_quote_arg pretty "$flag"
750779d5fcd7Smrg	  func_append arg " $wl$func_quote_arg_result"
750879d5fcd7Smrg	  func_append compiler_flags " $wl$func_quote_arg_result"
750979d5fcd7Smrg	  func_append linker_flags " $func_quote_arg_result"
751004007ebaSmrg	done
751105cf1079Smrg	IFS=$save_ifs
751204007ebaSmrg	func_stripname ' ' '' "$arg"
751304007ebaSmrg	arg=$func_stripname_result
751404007ebaSmrg	;;
751504007ebaSmrg
751679d5fcd7Smrg      -Xassembler)
751779d5fcd7Smrg        prev=xassembler
751879d5fcd7Smrg        continue
751979d5fcd7Smrg        ;;
752079d5fcd7Smrg
752104007ebaSmrg      -Xcompiler)
752204007ebaSmrg	prev=xcompiler
752304007ebaSmrg	continue
752404007ebaSmrg	;;
752504007ebaSmrg
752604007ebaSmrg      -Xlinker)
752704007ebaSmrg	prev=xlinker
752804007ebaSmrg	continue
752904007ebaSmrg	;;
753004007ebaSmrg
753104007ebaSmrg      -XCClinker)
753204007ebaSmrg	prev=xcclinker
753304007ebaSmrg	continue
753404007ebaSmrg	;;
753504007ebaSmrg
753604007ebaSmrg      # -msg_* for osf cc
753704007ebaSmrg      -msg_*)
753879d5fcd7Smrg	func_quote_arg pretty "$arg"
753979d5fcd7Smrg	arg=$func_quote_arg_result
754004007ebaSmrg	;;
754104007ebaSmrg
754204007ebaSmrg      # Flags to be passed through unchanged, with rationale:
754304007ebaSmrg      # -64, -mips[0-9]      enable 64-bit mode for the SGI compiler
754404007ebaSmrg      # -r[0-9][0-9]*        specify processor for the SGI compiler
754504007ebaSmrg      # -xarch=*, -xtarget=* enable 64-bit mode for the Sun compiler
754604007ebaSmrg      # +DA*, +DD*           enable 64-bit mode for the HP compiler
754704007ebaSmrg      # -q*                  compiler args for the IBM compiler
754804007ebaSmrg      # -m*, -t[45]*, -txscale* architecture-specific flags for GCC
754904007ebaSmrg      # -F/path              path to uninstalled frameworks, gcc on darwin
755004007ebaSmrg      # -p, -pg, --coverage, -fprofile-*  profiling flags for GCC
755105cf1079Smrg      # -fstack-protector*   stack protector flags for GCC
755204007ebaSmrg      # @file                GCC response files
755304007ebaSmrg      # -tp=*                Portland pgcc target processor selection
755404007ebaSmrg      # --sysroot=*          for sysroot support
755505cf1079Smrg      # -O*, -g*, -flto*, -fwhopr*, -fuse-linker-plugin GCC link-time optimization
755605cf1079Smrg      # -specs=*             GCC specs files
755705cf1079Smrg      # -stdlib=*            select c++ std lib with clang
755805cf1079Smrg      # -fsanitize=*         Clang/GCC memory and address sanitizer
755905cf1079Smrg      # -fuse-ld=*           Linker select flags for GCC
756079d5fcd7Smrg      # -Wa,*                Pass flags directly to the assembler
756104007ebaSmrg      -64|-mips[0-9]|-r[0-9][0-9]*|-xarch=*|-xtarget=*|+DA*|+DD*|-q*|-m*| \
756204007ebaSmrg      -t[45]*|-txscale*|-p|-pg|--coverage|-fprofile-*|-F*|@*|-tp=*|--sysroot=*| \
756305cf1079Smrg      -O*|-g*|-flto*|-fwhopr*|-fuse-linker-plugin|-fstack-protector*|-stdlib=*| \
756479d5fcd7Smrg      -specs=*|-fsanitize=*|-fuse-ld=*|-Wa,*)
756579d5fcd7Smrg        func_quote_arg pretty "$arg"
756679d5fcd7Smrg	arg=$func_quote_arg_result
756704007ebaSmrg        func_append compile_command " $arg"
756804007ebaSmrg        func_append finalize_command " $arg"
756904007ebaSmrg        func_append compiler_flags " $arg"
757004007ebaSmrg        continue
757104007ebaSmrg        ;;
757204007ebaSmrg
757305cf1079Smrg      -Z*)
757405cf1079Smrg        if test os2 = "`expr $host : '.*\(os2\)'`"; then
757505cf1079Smrg          # OS/2 uses -Zxxx to specify OS/2-specific options
757605cf1079Smrg	  compiler_flags="$compiler_flags $arg"
757705cf1079Smrg	  func_append compile_command " $arg"
757805cf1079Smrg	  func_append finalize_command " $arg"
757905cf1079Smrg	  case $arg in
758005cf1079Smrg	  -Zlinker | -Zstack)
758105cf1079Smrg	    prev=xcompiler
758205cf1079Smrg	    ;;
758305cf1079Smrg	  esac
758405cf1079Smrg	  continue
758505cf1079Smrg        else
758605cf1079Smrg	  # Otherwise treat like 'Some other compiler flag' below
758779d5fcd7Smrg	  func_quote_arg pretty "$arg"
758879d5fcd7Smrg	  arg=$func_quote_arg_result
758905cf1079Smrg        fi
759005cf1079Smrg	;;
759105cf1079Smrg
759204007ebaSmrg      # Some other compiler flag.
759304007ebaSmrg      -* | +*)
759479d5fcd7Smrg        func_quote_arg pretty "$arg"
759579d5fcd7Smrg	arg=$func_quote_arg_result
759604007ebaSmrg	;;
759704007ebaSmrg
759804007ebaSmrg      *.$objext)
759904007ebaSmrg	# A standard object.
760004007ebaSmrg	func_append objs " $arg"
760104007ebaSmrg	;;
760204007ebaSmrg
760304007ebaSmrg      *.lo)
760404007ebaSmrg	# A libtool-controlled object.
760504007ebaSmrg
760604007ebaSmrg	# Check to see that this really is a libtool object.
760704007ebaSmrg	if func_lalib_unsafe_p "$arg"; then
760804007ebaSmrg	  pic_object=
760904007ebaSmrg	  non_pic_object=
761004007ebaSmrg
761104007ebaSmrg	  # Read the .lo file
761204007ebaSmrg	  func_source "$arg"
761304007ebaSmrg
761404007ebaSmrg	  if test -z "$pic_object" ||
761504007ebaSmrg	     test -z "$non_pic_object" ||
761605cf1079Smrg	     test none = "$pic_object" &&
761705cf1079Smrg	     test none = "$non_pic_object"; then
761805cf1079Smrg	    func_fatal_error "cannot find name of object for '$arg'"
761904007ebaSmrg	  fi
762004007ebaSmrg
762104007ebaSmrg	  # Extract subdirectory from the argument.
762204007ebaSmrg	  func_dirname "$arg" "/" ""
762305cf1079Smrg	  xdir=$func_dirname_result
762404007ebaSmrg
762505cf1079Smrg	  test none = "$pic_object" || {
762604007ebaSmrg	    # Prepend the subdirectory the object is found in.
762705cf1079Smrg	    pic_object=$xdir$pic_object
762804007ebaSmrg
762905cf1079Smrg	    if test dlfiles = "$prev"; then
763005cf1079Smrg	      if test yes = "$build_libtool_libs" && test yes = "$dlopen_support"; then
763104007ebaSmrg		func_append dlfiles " $pic_object"
763204007ebaSmrg		prev=
763304007ebaSmrg		continue
763404007ebaSmrg	      else
763504007ebaSmrg		# If libtool objects are unsupported, then we need to preload.
763604007ebaSmrg		prev=dlprefiles
763704007ebaSmrg	      fi
763804007ebaSmrg	    fi
763904007ebaSmrg
764004007ebaSmrg	    # CHECK ME:  I think I busted this.  -Ossama
764105cf1079Smrg	    if test dlprefiles = "$prev"; then
764204007ebaSmrg	      # Preload the old-style object.
764304007ebaSmrg	      func_append dlprefiles " $pic_object"
764404007ebaSmrg	      prev=
764504007ebaSmrg	    fi
764604007ebaSmrg
764704007ebaSmrg	    # A PIC object.
764804007ebaSmrg	    func_append libobjs " $pic_object"
764905cf1079Smrg	    arg=$pic_object
765005cf1079Smrg	  }
765104007ebaSmrg
765204007ebaSmrg	  # Non-PIC object.
765305cf1079Smrg	  if test none != "$non_pic_object"; then
765404007ebaSmrg	    # Prepend the subdirectory the object is found in.
765505cf1079Smrg	    non_pic_object=$xdir$non_pic_object
765604007ebaSmrg
765704007ebaSmrg	    # A standard non-PIC object
765804007ebaSmrg	    func_append non_pic_objects " $non_pic_object"
765905cf1079Smrg	    if test -z "$pic_object" || test none = "$pic_object"; then
766005cf1079Smrg	      arg=$non_pic_object
766104007ebaSmrg	    fi
766204007ebaSmrg	  else
766304007ebaSmrg	    # If the PIC object exists, use it instead.
766404007ebaSmrg	    # $xdir was prepended to $pic_object above.
766505cf1079Smrg	    non_pic_object=$pic_object
766604007ebaSmrg	    func_append non_pic_objects " $non_pic_object"
766704007ebaSmrg	  fi
766804007ebaSmrg	else
766904007ebaSmrg	  # Only an error if not doing a dry-run.
767004007ebaSmrg	  if $opt_dry_run; then
767104007ebaSmrg	    # Extract subdirectory from the argument.
767204007ebaSmrg	    func_dirname "$arg" "/" ""
767305cf1079Smrg	    xdir=$func_dirname_result
767404007ebaSmrg
767504007ebaSmrg	    func_lo2o "$arg"
767604007ebaSmrg	    pic_object=$xdir$objdir/$func_lo2o_result
767704007ebaSmrg	    non_pic_object=$xdir$func_lo2o_result
767804007ebaSmrg	    func_append libobjs " $pic_object"
767904007ebaSmrg	    func_append non_pic_objects " $non_pic_object"
768004007ebaSmrg	  else
768105cf1079Smrg	    func_fatal_error "'$arg' is not a valid libtool object"
768204007ebaSmrg	  fi
768304007ebaSmrg	fi
768404007ebaSmrg	;;
768504007ebaSmrg
768604007ebaSmrg      *.$libext)
768704007ebaSmrg	# An archive.
768804007ebaSmrg	func_append deplibs " $arg"
768904007ebaSmrg	func_append old_deplibs " $arg"
769004007ebaSmrg	continue
769104007ebaSmrg	;;
769204007ebaSmrg
769304007ebaSmrg      *.la)
769404007ebaSmrg	# A libtool-controlled library.
769504007ebaSmrg
769604007ebaSmrg	func_resolve_sysroot "$arg"
769705cf1079Smrg	if test dlfiles = "$prev"; then
769804007ebaSmrg	  # This library was specified with -dlopen.
769904007ebaSmrg	  func_append dlfiles " $func_resolve_sysroot_result"
770004007ebaSmrg	  prev=
770105cf1079Smrg	elif test dlprefiles = "$prev"; then
770204007ebaSmrg	  # The library was specified with -dlpreopen.
770304007ebaSmrg	  func_append dlprefiles " $func_resolve_sysroot_result"
770404007ebaSmrg	  prev=
770504007ebaSmrg	else
770604007ebaSmrg	  func_append deplibs " $func_resolve_sysroot_result"
770704007ebaSmrg	fi
770804007ebaSmrg	continue
770904007ebaSmrg	;;
771004007ebaSmrg
771104007ebaSmrg      # Some other compiler argument.
771204007ebaSmrg      *)
771304007ebaSmrg	# Unknown arguments in both finalize_command and compile_command need
771404007ebaSmrg	# to be aesthetically quoted because they are evaled later.
771579d5fcd7Smrg	func_quote_arg pretty "$arg"
771679d5fcd7Smrg	arg=$func_quote_arg_result
771704007ebaSmrg	;;
771804007ebaSmrg      esac # arg
771904007ebaSmrg
772004007ebaSmrg      # Now actually substitute the argument into the commands.
772104007ebaSmrg      if test -n "$arg"; then
772204007ebaSmrg	func_append compile_command " $arg"
772304007ebaSmrg	func_append finalize_command " $arg"
772404007ebaSmrg      fi
772504007ebaSmrg    done # argument parsing loop
772604007ebaSmrg
772704007ebaSmrg    test -n "$prev" && \
772805cf1079Smrg      func_fatal_help "the '$prevarg' option requires an argument"
772904007ebaSmrg
773005cf1079Smrg    if test yes = "$export_dynamic" && test -n "$export_dynamic_flag_spec"; then
773104007ebaSmrg      eval arg=\"$export_dynamic_flag_spec\"
773204007ebaSmrg      func_append compile_command " $arg"
773304007ebaSmrg      func_append finalize_command " $arg"
773404007ebaSmrg    fi
773504007ebaSmrg
773604007ebaSmrg    oldlibs=
773704007ebaSmrg    # calculate the name of the file, without its directory
773804007ebaSmrg    func_basename "$output"
773905cf1079Smrg    outputname=$func_basename_result
774005cf1079Smrg    libobjs_save=$libobjs
774104007ebaSmrg
774204007ebaSmrg    if test -n "$shlibpath_var"; then
774304007ebaSmrg      # get the directories listed in $shlibpath_var
774405cf1079Smrg      eval shlib_search_path=\`\$ECHO \"\$$shlibpath_var\" \| \$SED \'s/:/ /g\'\`
774504007ebaSmrg    else
774604007ebaSmrg      shlib_search_path=
774704007ebaSmrg    fi
774804007ebaSmrg    eval sys_lib_search_path=\"$sys_lib_search_path_spec\"
774904007ebaSmrg    eval sys_lib_dlsearch_path=\"$sys_lib_dlsearch_path_spec\"
775004007ebaSmrg
775105cf1079Smrg    # Definition is injected by LT_CONFIG during libtool generation.
775205cf1079Smrg    func_munge_path_list sys_lib_dlsearch_path "$LT_SYS_LIBRARY_PATH"
775305cf1079Smrg
775404007ebaSmrg    func_dirname "$output" "/" ""
775505cf1079Smrg    output_objdir=$func_dirname_result$objdir
775604007ebaSmrg    func_to_tool_file "$output_objdir/"
775704007ebaSmrg    tool_output_objdir=$func_to_tool_file_result
775804007ebaSmrg    # Create the object directory.
775904007ebaSmrg    func_mkdir_p "$output_objdir"
776004007ebaSmrg
776104007ebaSmrg    # Determine the type of output
776204007ebaSmrg    case $output in
776304007ebaSmrg    "")
776404007ebaSmrg      func_fatal_help "you must specify an output file"
776504007ebaSmrg      ;;
776604007ebaSmrg    *.$libext) linkmode=oldlib ;;
776704007ebaSmrg    *.lo | *.$objext) linkmode=obj ;;
776804007ebaSmrg    *.la) linkmode=lib ;;
776904007ebaSmrg    *) linkmode=prog ;; # Anything else should be a program.
777004007ebaSmrg    esac
777104007ebaSmrg
777204007ebaSmrg    specialdeplibs=
777304007ebaSmrg
777404007ebaSmrg    libs=
777504007ebaSmrg    # Find all interdependent deplibs by searching for libraries
777604007ebaSmrg    # that are linked more than once (e.g. -la -lb -la)
777704007ebaSmrg    for deplib in $deplibs; do
777805cf1079Smrg      if $opt_preserve_dup_deps; then
777904007ebaSmrg	case "$libs " in
778004007ebaSmrg	*" $deplib "*) func_append specialdeplibs " $deplib" ;;
778104007ebaSmrg	esac
778204007ebaSmrg      fi
778304007ebaSmrg      func_append libs " $deplib"
778404007ebaSmrg    done
778504007ebaSmrg
778605cf1079Smrg    if test lib = "$linkmode"; then
778704007ebaSmrg      libs="$predeps $libs $compiler_lib_search_path $postdeps"
778804007ebaSmrg
778904007ebaSmrg      # Compute libraries that are listed more than once in $predeps
779004007ebaSmrg      # $postdeps and mark them as special (i.e., whose duplicates are
779104007ebaSmrg      # not to be eliminated).
779204007ebaSmrg      pre_post_deps=
779304007ebaSmrg      if $opt_duplicate_compiler_generated_deps; then
779404007ebaSmrg	for pre_post_dep in $predeps $postdeps; do
779504007ebaSmrg	  case "$pre_post_deps " in
779604007ebaSmrg	  *" $pre_post_dep "*) func_append specialdeplibs " $pre_post_deps" ;;
779704007ebaSmrg	  esac
779804007ebaSmrg	  func_append pre_post_deps " $pre_post_dep"
779904007ebaSmrg	done
780004007ebaSmrg      fi
780104007ebaSmrg      pre_post_deps=
780204007ebaSmrg    fi
780304007ebaSmrg
780404007ebaSmrg    deplibs=
780504007ebaSmrg    newdependency_libs=
780604007ebaSmrg    newlib_search_path=
780704007ebaSmrg    need_relink=no # whether we're linking any uninstalled libtool libraries
780804007ebaSmrg    notinst_deplibs= # not-installed libtool libraries
780904007ebaSmrg    notinst_path= # paths that contain not-installed libtool libraries
781004007ebaSmrg
781104007ebaSmrg    case $linkmode in
781204007ebaSmrg    lib)
781304007ebaSmrg	passes="conv dlpreopen link"
781404007ebaSmrg	for file in $dlfiles $dlprefiles; do
781504007ebaSmrg	  case $file in
781604007ebaSmrg	  *.la) ;;
781704007ebaSmrg	  *)
781805cf1079Smrg	    func_fatal_help "libraries can '-dlopen' only libtool libraries: $file"
781904007ebaSmrg	    ;;
782004007ebaSmrg	  esac
782104007ebaSmrg	done
782204007ebaSmrg	;;
782304007ebaSmrg    prog)
782404007ebaSmrg	compile_deplibs=
782504007ebaSmrg	finalize_deplibs=
782605cf1079Smrg	alldeplibs=false
782704007ebaSmrg	newdlfiles=
782804007ebaSmrg	newdlprefiles=
782904007ebaSmrg	passes="conv scan dlopen dlpreopen link"
783004007ebaSmrg	;;
783104007ebaSmrg    *)  passes="conv"
783204007ebaSmrg	;;
783304007ebaSmrg    esac
783404007ebaSmrg
783504007ebaSmrg    for pass in $passes; do
783604007ebaSmrg      # The preopen pass in lib mode reverses $deplibs; put it back here
783704007ebaSmrg      # so that -L comes before libs that need it for instance...
783805cf1079Smrg      if test lib,link = "$linkmode,$pass"; then
783904007ebaSmrg	## FIXME: Find the place where the list is rebuilt in the wrong
784004007ebaSmrg	##        order, and fix it there properly
784104007ebaSmrg        tmp_deplibs=
784204007ebaSmrg	for deplib in $deplibs; do
784304007ebaSmrg	  tmp_deplibs="$deplib $tmp_deplibs"
784404007ebaSmrg	done
784505cf1079Smrg	deplibs=$tmp_deplibs
784604007ebaSmrg      fi
784704007ebaSmrg
784805cf1079Smrg      if test lib,link = "$linkmode,$pass" ||
784905cf1079Smrg	 test prog,scan = "$linkmode,$pass"; then
785005cf1079Smrg	libs=$deplibs
785104007ebaSmrg	deplibs=
785204007ebaSmrg      fi
785305cf1079Smrg      if test prog = "$linkmode"; then
785404007ebaSmrg	case $pass in
785505cf1079Smrg	dlopen) libs=$dlfiles ;;
785605cf1079Smrg	dlpreopen) libs=$dlprefiles ;;
785779d5fcd7Smrg	link) libs="$deplibs %DEPLIBS% $dependency_libs" ;;
785804007ebaSmrg	esac
785904007ebaSmrg      fi
786005cf1079Smrg      if test lib,dlpreopen = "$linkmode,$pass"; then
786104007ebaSmrg	# Collect and forward deplibs of preopened libtool libs
786204007ebaSmrg	for lib in $dlprefiles; do
786304007ebaSmrg	  # Ignore non-libtool-libs
786404007ebaSmrg	  dependency_libs=
786504007ebaSmrg	  func_resolve_sysroot "$lib"
786604007ebaSmrg	  case $lib in
786704007ebaSmrg	  *.la)	func_source "$func_resolve_sysroot_result" ;;
786804007ebaSmrg	  esac
786904007ebaSmrg
787004007ebaSmrg	  # Collect preopened libtool deplibs, except any this library
787104007ebaSmrg	  # has declared as weak libs
787204007ebaSmrg	  for deplib in $dependency_libs; do
787304007ebaSmrg	    func_basename "$deplib"
787404007ebaSmrg            deplib_base=$func_basename_result
787504007ebaSmrg	    case " $weak_libs " in
787604007ebaSmrg	    *" $deplib_base "*) ;;
787704007ebaSmrg	    *) func_append deplibs " $deplib" ;;
787804007ebaSmrg	    esac
787904007ebaSmrg	  done
788004007ebaSmrg	done
788105cf1079Smrg	libs=$dlprefiles
788204007ebaSmrg      fi
788305cf1079Smrg      if test dlopen = "$pass"; then
788404007ebaSmrg	# Collect dlpreopened libraries
788505cf1079Smrg	save_deplibs=$deplibs
788604007ebaSmrg	deplibs=
788704007ebaSmrg      fi
788804007ebaSmrg
788904007ebaSmrg      for deplib in $libs; do
789004007ebaSmrg	lib=
789105cf1079Smrg	found=false
789204007ebaSmrg	case $deplib in
789304007ebaSmrg	-mt|-mthreads|-kthread|-Kthread|-pthread|-pthreads|--thread-safe \
789404007ebaSmrg        |-threads|-fopenmp|-openmp|-mp|-xopenmp|-omp|-qsmp=*)
789505cf1079Smrg	  if test prog,link = "$linkmode,$pass"; then
789604007ebaSmrg	    compile_deplibs="$deplib $compile_deplibs"
789704007ebaSmrg	    finalize_deplibs="$deplib $finalize_deplibs"
789804007ebaSmrg	  else
789904007ebaSmrg	    func_append compiler_flags " $deplib"
790005cf1079Smrg	    if test lib = "$linkmode"; then
790104007ebaSmrg		case "$new_inherited_linker_flags " in
790204007ebaSmrg		    *" $deplib "*) ;;
790304007ebaSmrg		    * ) func_append new_inherited_linker_flags " $deplib" ;;
790404007ebaSmrg		esac
790504007ebaSmrg	    fi
790604007ebaSmrg	  fi
790704007ebaSmrg	  continue
790804007ebaSmrg	  ;;
790904007ebaSmrg	-l*)
791005cf1079Smrg	  if test lib != "$linkmode" && test prog != "$linkmode"; then
791105cf1079Smrg	    func_warning "'-l' is ignored for archives/objects"
791204007ebaSmrg	    continue
791304007ebaSmrg	  fi
791404007ebaSmrg	  func_stripname '-l' '' "$deplib"
791504007ebaSmrg	  name=$func_stripname_result
791605cf1079Smrg	  if test lib = "$linkmode"; then
791704007ebaSmrg	    searchdirs="$newlib_search_path $lib_search_path $compiler_lib_search_dirs $sys_lib_search_path $shlib_search_path"
791804007ebaSmrg	  else
791904007ebaSmrg	    searchdirs="$newlib_search_path $lib_search_path $sys_lib_search_path $shlib_search_path"
792004007ebaSmrg	  fi
792104007ebaSmrg	  for searchdir in $searchdirs; do
792204007ebaSmrg	    for search_ext in .la $std_shrext .so .a; do
792304007ebaSmrg	      # Search the libtool library
792405cf1079Smrg	      lib=$searchdir/lib$name$search_ext
792504007ebaSmrg	      if test -f "$lib"; then
792605cf1079Smrg		if test .la = "$search_ext"; then
792705cf1079Smrg		  found=:
792804007ebaSmrg		else
792905cf1079Smrg		  found=false
793004007ebaSmrg		fi
793104007ebaSmrg		break 2
793204007ebaSmrg	      fi
793304007ebaSmrg	    done
793404007ebaSmrg	  done
793505cf1079Smrg	  if $found; then
793605cf1079Smrg	    # deplib is a libtool library
793704007ebaSmrg	    # If $allow_libtool_libs_with_static_runtimes && $deplib is a stdlib,
793804007ebaSmrg	    # We need to do some special things here, and not later.
793905cf1079Smrg	    if test yes = "$allow_libtool_libs_with_static_runtimes"; then
794004007ebaSmrg	      case " $predeps $postdeps " in
794104007ebaSmrg	      *" $deplib "*)
794204007ebaSmrg		if func_lalib_p "$lib"; then
794304007ebaSmrg		  library_names=
794404007ebaSmrg		  old_library=
794504007ebaSmrg		  func_source "$lib"
794604007ebaSmrg		  for l in $old_library $library_names; do
794705cf1079Smrg		    ll=$l
794804007ebaSmrg		  done
794905cf1079Smrg		  if test "X$ll" = "X$old_library"; then # only static version available
795005cf1079Smrg		    found=false
795104007ebaSmrg		    func_dirname "$lib" "" "."
795205cf1079Smrg		    ladir=$func_dirname_result
795304007ebaSmrg		    lib=$ladir/$old_library
795405cf1079Smrg		    if test prog,link = "$linkmode,$pass"; then
795504007ebaSmrg		      compile_deplibs="$deplib $compile_deplibs"
795604007ebaSmrg		      finalize_deplibs="$deplib $finalize_deplibs"
795704007ebaSmrg		    else
795804007ebaSmrg		      deplibs="$deplib $deplibs"
795905cf1079Smrg		      test lib = "$linkmode" && newdependency_libs="$deplib $newdependency_libs"
796004007ebaSmrg		    fi
796104007ebaSmrg		    continue
796204007ebaSmrg		  fi
796304007ebaSmrg		fi
796404007ebaSmrg		;;
796504007ebaSmrg	      *) ;;
796604007ebaSmrg	      esac
796704007ebaSmrg	    fi
796805cf1079Smrg	  else
796905cf1079Smrg	    # deplib doesn't seem to be a libtool library
797005cf1079Smrg	    if test prog,link = "$linkmode,$pass"; then
797105cf1079Smrg	      compile_deplibs="$deplib $compile_deplibs"
797205cf1079Smrg	      finalize_deplibs="$deplib $finalize_deplibs"
797305cf1079Smrg	    else
797405cf1079Smrg	      deplibs="$deplib $deplibs"
797505cf1079Smrg	      test lib = "$linkmode" && newdependency_libs="$deplib $newdependency_libs"
797605cf1079Smrg	    fi
797705cf1079Smrg	    continue
797804007ebaSmrg	  fi
797904007ebaSmrg	  ;; # -l
798004007ebaSmrg	*.ltframework)
798105cf1079Smrg	  if test prog,link = "$linkmode,$pass"; then
798204007ebaSmrg	    compile_deplibs="$deplib $compile_deplibs"
798304007ebaSmrg	    finalize_deplibs="$deplib $finalize_deplibs"
798404007ebaSmrg	  else
798504007ebaSmrg	    deplibs="$deplib $deplibs"
798605cf1079Smrg	    if test lib = "$linkmode"; then
798704007ebaSmrg		case "$new_inherited_linker_flags " in
798804007ebaSmrg		    *" $deplib "*) ;;
798904007ebaSmrg		    * ) func_append new_inherited_linker_flags " $deplib" ;;
799004007ebaSmrg		esac
799104007ebaSmrg	    fi
799204007ebaSmrg	  fi
799304007ebaSmrg	  continue
799404007ebaSmrg	  ;;
799504007ebaSmrg	-L*)
799604007ebaSmrg	  case $linkmode in
799704007ebaSmrg	  lib)
799804007ebaSmrg	    deplibs="$deplib $deplibs"
799905cf1079Smrg	    test conv = "$pass" && continue
800004007ebaSmrg	    newdependency_libs="$deplib $newdependency_libs"
800104007ebaSmrg	    func_stripname '-L' '' "$deplib"
800204007ebaSmrg	    func_resolve_sysroot "$func_stripname_result"
800304007ebaSmrg	    func_append newlib_search_path " $func_resolve_sysroot_result"
800404007ebaSmrg	    ;;
800504007ebaSmrg	  prog)
800605cf1079Smrg	    if test conv = "$pass"; then
800704007ebaSmrg	      deplibs="$deplib $deplibs"
800804007ebaSmrg	      continue
800904007ebaSmrg	    fi
801005cf1079Smrg	    if test scan = "$pass"; then
801104007ebaSmrg	      deplibs="$deplib $deplibs"
801204007ebaSmrg	    else
801304007ebaSmrg	      compile_deplibs="$deplib $compile_deplibs"
801404007ebaSmrg	      finalize_deplibs="$deplib $finalize_deplibs"
801504007ebaSmrg	    fi
801604007ebaSmrg	    func_stripname '-L' '' "$deplib"
801704007ebaSmrg	    func_resolve_sysroot "$func_stripname_result"
801804007ebaSmrg	    func_append newlib_search_path " $func_resolve_sysroot_result"
801904007ebaSmrg	    ;;
802004007ebaSmrg	  *)
802105cf1079Smrg	    func_warning "'-L' is ignored for archives/objects"
802204007ebaSmrg	    ;;
802304007ebaSmrg	  esac # linkmode
802404007ebaSmrg	  continue
802504007ebaSmrg	  ;; # -L
802604007ebaSmrg	-R*)
802705cf1079Smrg	  if test link = "$pass"; then
802804007ebaSmrg	    func_stripname '-R' '' "$deplib"
802904007ebaSmrg	    func_resolve_sysroot "$func_stripname_result"
803004007ebaSmrg	    dir=$func_resolve_sysroot_result
803104007ebaSmrg	    # Make sure the xrpath contains only unique directories.
803204007ebaSmrg	    case "$xrpath " in
803304007ebaSmrg	    *" $dir "*) ;;
803404007ebaSmrg	    *) func_append xrpath " $dir" ;;
803504007ebaSmrg	    esac
803604007ebaSmrg	  fi
803704007ebaSmrg	  deplibs="$deplib $deplibs"
803804007ebaSmrg	  continue
803904007ebaSmrg	  ;;
804004007ebaSmrg	*.la)
804104007ebaSmrg	  func_resolve_sysroot "$deplib"
804204007ebaSmrg	  lib=$func_resolve_sysroot_result
804304007ebaSmrg	  ;;
804404007ebaSmrg	*.$libext)
804505cf1079Smrg	  if test conv = "$pass"; then
804604007ebaSmrg	    deplibs="$deplib $deplibs"
804704007ebaSmrg	    continue
804804007ebaSmrg	  fi
804904007ebaSmrg	  case $linkmode in
805004007ebaSmrg	  lib)
805104007ebaSmrg	    # Linking convenience modules into shared libraries is allowed,
805204007ebaSmrg	    # but linking other static libraries is non-portable.
805304007ebaSmrg	    case " $dlpreconveniencelibs " in
805404007ebaSmrg	    *" $deplib "*) ;;
805504007ebaSmrg	    *)
805605cf1079Smrg	      valid_a_lib=false
805704007ebaSmrg	      case $deplibs_check_method in
805804007ebaSmrg		match_pattern*)
805904007ebaSmrg		  set dummy $deplibs_check_method; shift
806004007ebaSmrg		  match_pattern_regex=`expr "$deplibs_check_method" : "$1 \(.*\)"`
806104007ebaSmrg		  if eval "\$ECHO \"$deplib\"" 2>/dev/null | $SED 10q \
806204007ebaSmrg		    | $EGREP "$match_pattern_regex" > /dev/null; then
806305cf1079Smrg		    valid_a_lib=:
806404007ebaSmrg		  fi
806504007ebaSmrg		;;
806604007ebaSmrg		pass_all)
806705cf1079Smrg		  valid_a_lib=:
806804007ebaSmrg		;;
806904007ebaSmrg	      esac
807005cf1079Smrg	      if $valid_a_lib; then
807105cf1079Smrg		echo
807205cf1079Smrg		$ECHO "*** Warning: Linking the shared library $output against the"
807305cf1079Smrg		$ECHO "*** static library $deplib is not portable!"
807405cf1079Smrg		deplibs="$deplib $deplibs"
807505cf1079Smrg	      else
807604007ebaSmrg		echo
807704007ebaSmrg		$ECHO "*** Warning: Trying to link with static lib archive $deplib."
807804007ebaSmrg		echo "*** I have the capability to make that library automatically link in when"
807904007ebaSmrg		echo "*** you link to this library.  But I can only do this if you have a"
808004007ebaSmrg		echo "*** shared version of the library, which you do not appear to have"
808104007ebaSmrg		echo "*** because the file extensions .$libext of this argument makes me believe"
808204007ebaSmrg		echo "*** that it is just a static archive that I should not use here."
808304007ebaSmrg	      fi
808404007ebaSmrg	      ;;
808504007ebaSmrg	    esac
808604007ebaSmrg	    continue
808704007ebaSmrg	    ;;
808804007ebaSmrg	  prog)
808905cf1079Smrg	    if test link != "$pass"; then
809004007ebaSmrg	      deplibs="$deplib $deplibs"
809104007ebaSmrg	    else
809204007ebaSmrg	      compile_deplibs="$deplib $compile_deplibs"
809304007ebaSmrg	      finalize_deplibs="$deplib $finalize_deplibs"
809404007ebaSmrg	    fi
809504007ebaSmrg	    continue
809604007ebaSmrg	    ;;
809704007ebaSmrg	  esac # linkmode
809804007ebaSmrg	  ;; # *.$libext
809904007ebaSmrg	*.lo | *.$objext)
810005cf1079Smrg	  if test conv = "$pass"; then
810104007ebaSmrg	    deplibs="$deplib $deplibs"
810205cf1079Smrg	  elif test prog = "$linkmode"; then
810305cf1079Smrg	    if test dlpreopen = "$pass" || test yes != "$dlopen_support" || test no = "$build_libtool_libs"; then
810404007ebaSmrg	      # If there is no dlopen support or we're linking statically,
810504007ebaSmrg	      # we need to preload.
810604007ebaSmrg	      func_append newdlprefiles " $deplib"
810704007ebaSmrg	      compile_deplibs="$deplib $compile_deplibs"
810804007ebaSmrg	      finalize_deplibs="$deplib $finalize_deplibs"
810904007ebaSmrg	    else
811004007ebaSmrg	      func_append newdlfiles " $deplib"
811104007ebaSmrg	    fi
811204007ebaSmrg	  fi
811304007ebaSmrg	  continue
811404007ebaSmrg	  ;;
811504007ebaSmrg	%DEPLIBS%)
811605cf1079Smrg	  alldeplibs=:
811704007ebaSmrg	  continue
811804007ebaSmrg	  ;;
811904007ebaSmrg	esac # case $deplib
812004007ebaSmrg
812105cf1079Smrg	$found || test -f "$lib" \
812205cf1079Smrg	  || func_fatal_error "cannot find the library '$lib' or unhandled argument '$deplib'"
812304007ebaSmrg
812404007ebaSmrg	# Check to see that this really is a libtool archive.
812504007ebaSmrg	func_lalib_unsafe_p "$lib" \
812605cf1079Smrg	  || func_fatal_error "'$lib' is not a valid libtool archive"
812704007ebaSmrg
812804007ebaSmrg	func_dirname "$lib" "" "."
812905cf1079Smrg	ladir=$func_dirname_result
813004007ebaSmrg
813104007ebaSmrg	dlname=
813204007ebaSmrg	dlopen=
813304007ebaSmrg	dlpreopen=
813404007ebaSmrg	libdir=
813504007ebaSmrg	library_names=
813604007ebaSmrg	old_library=
813704007ebaSmrg	inherited_linker_flags=
813804007ebaSmrg	# If the library was installed with an old release of libtool,
813904007ebaSmrg	# it will not redefine variables installed, or shouldnotlink
814004007ebaSmrg	installed=yes
814104007ebaSmrg	shouldnotlink=no
814204007ebaSmrg	avoidtemprpath=
814304007ebaSmrg
814404007ebaSmrg
814504007ebaSmrg	# Read the .la file
814604007ebaSmrg	func_source "$lib"
814704007ebaSmrg
814804007ebaSmrg	# Convert "-framework foo" to "foo.ltframework"
814904007ebaSmrg	if test -n "$inherited_linker_flags"; then
815004007ebaSmrg	  tmp_inherited_linker_flags=`$ECHO "$inherited_linker_flags" | $SED 's/-framework \([^ $]*\)/\1.ltframework/g'`
815104007ebaSmrg	  for tmp_inherited_linker_flag in $tmp_inherited_linker_flags; do
815204007ebaSmrg	    case " $new_inherited_linker_flags " in
815304007ebaSmrg	      *" $tmp_inherited_linker_flag "*) ;;
815404007ebaSmrg	      *) func_append new_inherited_linker_flags " $tmp_inherited_linker_flag";;
815504007ebaSmrg	    esac
815604007ebaSmrg	  done
815704007ebaSmrg	fi
815804007ebaSmrg	dependency_libs=`$ECHO " $dependency_libs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'`
815905cf1079Smrg	if test lib,link = "$linkmode,$pass" ||
816005cf1079Smrg	   test prog,scan = "$linkmode,$pass" ||
816105cf1079Smrg	   { test prog != "$linkmode" && test lib != "$linkmode"; }; then
816204007ebaSmrg	  test -n "$dlopen" && func_append dlfiles " $dlopen"
816304007ebaSmrg	  test -n "$dlpreopen" && func_append dlprefiles " $dlpreopen"
816404007ebaSmrg	fi
816504007ebaSmrg
816605cf1079Smrg	if test conv = "$pass"; then
816704007ebaSmrg	  # Only check for convenience libraries
816804007ebaSmrg	  deplibs="$lib $deplibs"
816904007ebaSmrg	  if test -z "$libdir"; then
817004007ebaSmrg	    if test -z "$old_library"; then
817105cf1079Smrg	      func_fatal_error "cannot find name of link library for '$lib'"
817204007ebaSmrg	    fi
817304007ebaSmrg	    # It is a libtool convenience library, so add in its objects.
817404007ebaSmrg	    func_append convenience " $ladir/$objdir/$old_library"
817504007ebaSmrg	    func_append old_convenience " $ladir/$objdir/$old_library"
817605cf1079Smrg	  elif test prog != "$linkmode" && test lib != "$linkmode"; then
817705cf1079Smrg	    func_fatal_error "'$lib' is not a convenience library"
817804007ebaSmrg	  fi
817979d5fcd7Smrg	  tmp_libs=
818079d5fcd7Smrg	  for deplib in $dependency_libs; do
818179d5fcd7Smrg	    deplibs="$deplib $deplibs"
818279d5fcd7Smrg	    if $opt_preserve_dup_deps; then
818379d5fcd7Smrg	      case "$tmp_libs " in
818479d5fcd7Smrg	      *" $deplib "*) func_append specialdeplibs " $deplib" ;;
818579d5fcd7Smrg	      esac
818679d5fcd7Smrg	    fi
818779d5fcd7Smrg	    func_append tmp_libs " $deplib"
818879d5fcd7Smrg	  done
818904007ebaSmrg	  continue
819004007ebaSmrg	fi # $pass = conv
819104007ebaSmrg
819204007ebaSmrg
819304007ebaSmrg	# Get the name of the library we link against.
819404007ebaSmrg	linklib=
819504007ebaSmrg	if test -n "$old_library" &&
819605cf1079Smrg	   { test yes = "$prefer_static_libs" ||
819705cf1079Smrg	     test built,no = "$prefer_static_libs,$installed"; }; then
819804007ebaSmrg	  linklib=$old_library
819904007ebaSmrg	else
820004007ebaSmrg	  for l in $old_library $library_names; do
820105cf1079Smrg	    linklib=$l
820204007ebaSmrg	  done
820304007ebaSmrg	fi
820404007ebaSmrg	if test -z "$linklib"; then
820505cf1079Smrg	  func_fatal_error "cannot find name of link library for '$lib'"
820604007ebaSmrg	fi
820704007ebaSmrg
820804007ebaSmrg	# This library was specified with -dlopen.
820905cf1079Smrg	if test dlopen = "$pass"; then
821005cf1079Smrg	  test -z "$libdir" \
821105cf1079Smrg	    && func_fatal_error "cannot -dlopen a convenience library: '$lib'"
821204007ebaSmrg	  if test -z "$dlname" ||
821305cf1079Smrg	     test yes != "$dlopen_support" ||
821405cf1079Smrg	     test no = "$build_libtool_libs"
821505cf1079Smrg	  then
821604007ebaSmrg	    # If there is no dlname, no dlopen support or we're linking
821704007ebaSmrg	    # statically, we need to preload.  We also need to preload any
821804007ebaSmrg	    # dependent libraries so libltdl's deplib preloader doesn't
821904007ebaSmrg	    # bomb out in the load deplibs phase.
822004007ebaSmrg	    func_append dlprefiles " $lib $dependency_libs"
822104007ebaSmrg	  else
822204007ebaSmrg	    func_append newdlfiles " $lib"
822304007ebaSmrg	  fi
822404007ebaSmrg	  continue
822504007ebaSmrg	fi # $pass = dlopen
822604007ebaSmrg
822704007ebaSmrg	# We need an absolute path.
822804007ebaSmrg	case $ladir in
822905cf1079Smrg	[\\/]* | [A-Za-z]:[\\/]*) abs_ladir=$ladir ;;
823004007ebaSmrg	*)
823104007ebaSmrg	  abs_ladir=`cd "$ladir" && pwd`
823204007ebaSmrg	  if test -z "$abs_ladir"; then
823305cf1079Smrg	    func_warning "cannot determine absolute directory name of '$ladir'"
823404007ebaSmrg	    func_warning "passing it literally to the linker, although it might fail"
823505cf1079Smrg	    abs_ladir=$ladir
823604007ebaSmrg	  fi
823704007ebaSmrg	  ;;
823804007ebaSmrg	esac
823904007ebaSmrg	func_basename "$lib"
824005cf1079Smrg	laname=$func_basename_result
824104007ebaSmrg
824204007ebaSmrg	# Find the relevant object directory and library name.
824305cf1079Smrg	if test yes = "$installed"; then
824404007ebaSmrg	  if test ! -f "$lt_sysroot$libdir/$linklib" && test -f "$abs_ladir/$linklib"; then
824505cf1079Smrg	    func_warning "library '$lib' was moved."
824605cf1079Smrg	    dir=$ladir
824705cf1079Smrg	    absdir=$abs_ladir
824805cf1079Smrg	    libdir=$abs_ladir
824904007ebaSmrg	  else
825005cf1079Smrg	    dir=$lt_sysroot$libdir
825105cf1079Smrg	    absdir=$lt_sysroot$libdir
825204007ebaSmrg	  fi
825305cf1079Smrg	  test yes = "$hardcode_automatic" && avoidtemprpath=yes
825404007ebaSmrg	else
825504007ebaSmrg	  if test ! -f "$ladir/$objdir/$linklib" && test -f "$abs_ladir/$linklib"; then
825605cf1079Smrg	    dir=$ladir
825705cf1079Smrg	    absdir=$abs_ladir
825804007ebaSmrg	    # Remove this search path later
825904007ebaSmrg	    func_append notinst_path " $abs_ladir"
826004007ebaSmrg	  else
826105cf1079Smrg	    dir=$ladir/$objdir
826205cf1079Smrg	    absdir=$abs_ladir/$objdir
826304007ebaSmrg	    # Remove this search path later
826404007ebaSmrg	    func_append notinst_path " $abs_ladir"
826504007ebaSmrg	  fi
826604007ebaSmrg	fi # $installed = yes
826704007ebaSmrg	func_stripname 'lib' '.la' "$laname"
826804007ebaSmrg	name=$func_stripname_result
826904007ebaSmrg
827004007ebaSmrg	# This library was specified with -dlpreopen.
827105cf1079Smrg	if test dlpreopen = "$pass"; then
827205cf1079Smrg	  if test -z "$libdir" && test prog = "$linkmode"; then
827305cf1079Smrg	    func_fatal_error "only libraries may -dlpreopen a convenience library: '$lib'"
827404007ebaSmrg	  fi
827505cf1079Smrg	  case $host in
827604007ebaSmrg	    # special handling for platforms with PE-DLLs.
827704007ebaSmrg	    *cygwin* | *mingw* | *cegcc* )
827804007ebaSmrg	      # Linker will automatically link against shared library if both
827904007ebaSmrg	      # static and shared are present.  Therefore, ensure we extract
828004007ebaSmrg	      # symbols from the import library if a shared library is present
828104007ebaSmrg	      # (otherwise, the dlopen module name will be incorrect).  We do
828204007ebaSmrg	      # this by putting the import library name into $newdlprefiles.
828304007ebaSmrg	      # We recover the dlopen module name by 'saving' the la file
828404007ebaSmrg	      # name in a special purpose variable, and (later) extracting the
828504007ebaSmrg	      # dlname from the la file.
828604007ebaSmrg	      if test -n "$dlname"; then
828704007ebaSmrg	        func_tr_sh "$dir/$linklib"
828804007ebaSmrg	        eval "libfile_$func_tr_sh_result=\$abs_ladir/\$laname"
828904007ebaSmrg	        func_append newdlprefiles " $dir/$linklib"
829004007ebaSmrg	      else
829104007ebaSmrg	        func_append newdlprefiles " $dir/$old_library"
829204007ebaSmrg	        # Keep a list of preopened convenience libraries to check
829304007ebaSmrg	        # that they are being used correctly in the link pass.
829404007ebaSmrg	        test -z "$libdir" && \
829504007ebaSmrg	          func_append dlpreconveniencelibs " $dir/$old_library"
829604007ebaSmrg	      fi
829704007ebaSmrg	    ;;
829804007ebaSmrg	    * )
829904007ebaSmrg	      # Prefer using a static library (so that no silly _DYNAMIC symbols
830004007ebaSmrg	      # are required to link).
830104007ebaSmrg	      if test -n "$old_library"; then
830204007ebaSmrg	        func_append newdlprefiles " $dir/$old_library"
830304007ebaSmrg	        # Keep a list of preopened convenience libraries to check
830404007ebaSmrg	        # that they are being used correctly in the link pass.
830504007ebaSmrg	        test -z "$libdir" && \
830604007ebaSmrg	          func_append dlpreconveniencelibs " $dir/$old_library"
830704007ebaSmrg	      # Otherwise, use the dlname, so that lt_dlopen finds it.
830804007ebaSmrg	      elif test -n "$dlname"; then
830904007ebaSmrg	        func_append newdlprefiles " $dir/$dlname"
831004007ebaSmrg	      else
831104007ebaSmrg	        func_append newdlprefiles " $dir/$linklib"
831204007ebaSmrg	      fi
831304007ebaSmrg	    ;;
831404007ebaSmrg	  esac
831504007ebaSmrg	fi # $pass = dlpreopen
831604007ebaSmrg
831704007ebaSmrg	if test -z "$libdir"; then
831804007ebaSmrg	  # Link the convenience library
831905cf1079Smrg	  if test lib = "$linkmode"; then
832004007ebaSmrg	    deplibs="$dir/$old_library $deplibs"
832105cf1079Smrg	  elif test prog,link = "$linkmode,$pass"; then
832204007ebaSmrg	    compile_deplibs="$dir/$old_library $compile_deplibs"
832304007ebaSmrg	    finalize_deplibs="$dir/$old_library $finalize_deplibs"
832404007ebaSmrg	  else
832504007ebaSmrg	    deplibs="$lib $deplibs" # used for prog,scan pass
832604007ebaSmrg	  fi
832704007ebaSmrg	  continue
832804007ebaSmrg	fi
832904007ebaSmrg
833004007ebaSmrg
833105cf1079Smrg	if test prog = "$linkmode" && test link != "$pass"; then
833204007ebaSmrg	  func_append newlib_search_path " $ladir"
833304007ebaSmrg	  deplibs="$lib $deplibs"
833404007ebaSmrg
833505cf1079Smrg	  linkalldeplibs=false
833605cf1079Smrg	  if test no != "$link_all_deplibs" || test -z "$library_names" ||
833705cf1079Smrg	     test no = "$build_libtool_libs"; then
833805cf1079Smrg	    linkalldeplibs=:
833904007ebaSmrg	  fi
834004007ebaSmrg
834104007ebaSmrg	  tmp_libs=
834204007ebaSmrg	  for deplib in $dependency_libs; do
834304007ebaSmrg	    case $deplib in
834404007ebaSmrg	    -L*) func_stripname '-L' '' "$deplib"
834504007ebaSmrg	         func_resolve_sysroot "$func_stripname_result"
834604007ebaSmrg	         func_append newlib_search_path " $func_resolve_sysroot_result"
834704007ebaSmrg		 ;;
834804007ebaSmrg	    esac
834904007ebaSmrg	    # Need to link against all dependency_libs?
835005cf1079Smrg	    if $linkalldeplibs; then
835104007ebaSmrg	      deplibs="$deplib $deplibs"
835204007ebaSmrg	    else
835304007ebaSmrg	      # Need to hardcode shared library paths
835404007ebaSmrg	      # or/and link against static libraries
835504007ebaSmrg	      newdependency_libs="$deplib $newdependency_libs"
835604007ebaSmrg	    fi
835705cf1079Smrg	    if $opt_preserve_dup_deps; then
835804007ebaSmrg	      case "$tmp_libs " in
835904007ebaSmrg	      *" $deplib "*) func_append specialdeplibs " $deplib" ;;
836004007ebaSmrg	      esac
836104007ebaSmrg	    fi
836204007ebaSmrg	    func_append tmp_libs " $deplib"
836304007ebaSmrg	  done # for deplib
836404007ebaSmrg	  continue
836504007ebaSmrg	fi # $linkmode = prog...
836604007ebaSmrg
836705cf1079Smrg	if test prog,link = "$linkmode,$pass"; then
836804007ebaSmrg	  if test -n "$library_names" &&
836905cf1079Smrg	     { { test no = "$prefer_static_libs" ||
837005cf1079Smrg	         test built,yes = "$prefer_static_libs,$installed"; } ||
837104007ebaSmrg	       test -z "$old_library"; }; then
837204007ebaSmrg	    # We need to hardcode the library path
837305cf1079Smrg	    if test -n "$shlibpath_var" && test -z "$avoidtemprpath"; then
837404007ebaSmrg	      # Make sure the rpath contains only unique directories.
837505cf1079Smrg	      case $temp_rpath: in
837604007ebaSmrg	      *"$absdir:"*) ;;
837704007ebaSmrg	      *) func_append temp_rpath "$absdir:" ;;
837804007ebaSmrg	      esac
837904007ebaSmrg	    fi
838004007ebaSmrg
838104007ebaSmrg	    # Hardcode the library path.
838204007ebaSmrg	    # Skip directories that are in the system default run-time
838304007ebaSmrg	    # search path.
838404007ebaSmrg	    case " $sys_lib_dlsearch_path " in
838504007ebaSmrg	    *" $absdir "*) ;;
838604007ebaSmrg	    *)
838704007ebaSmrg	      case "$compile_rpath " in
838804007ebaSmrg	      *" $absdir "*) ;;
838904007ebaSmrg	      *) func_append compile_rpath " $absdir" ;;
839004007ebaSmrg	      esac
839104007ebaSmrg	      ;;
839204007ebaSmrg	    esac
839304007ebaSmrg	    case " $sys_lib_dlsearch_path " in
839404007ebaSmrg	    *" $libdir "*) ;;
839504007ebaSmrg	    *)
839604007ebaSmrg	      case "$finalize_rpath " in
839704007ebaSmrg	      *" $libdir "*) ;;
839804007ebaSmrg	      *) func_append finalize_rpath " $libdir" ;;
839904007ebaSmrg	      esac
840004007ebaSmrg	      ;;
840104007ebaSmrg	    esac
840204007ebaSmrg	  fi # $linkmode,$pass = prog,link...
840304007ebaSmrg
840405cf1079Smrg	  if $alldeplibs &&
840505cf1079Smrg	     { test pass_all = "$deplibs_check_method" ||
840605cf1079Smrg	       { test yes = "$build_libtool_libs" &&
840704007ebaSmrg		 test -n "$library_names"; }; }; then
840804007ebaSmrg	    # We only need to search for static libraries
840904007ebaSmrg	    continue
841004007ebaSmrg	  fi
841104007ebaSmrg	fi
841204007ebaSmrg
841304007ebaSmrg	link_static=no # Whether the deplib will be linked statically
841404007ebaSmrg	use_static_libs=$prefer_static_libs
841505cf1079Smrg	if test built = "$use_static_libs" && test yes = "$installed"; then
841604007ebaSmrg	  use_static_libs=no
841704007ebaSmrg	fi
841804007ebaSmrg	if test -n "$library_names" &&
841905cf1079Smrg	   { test no = "$use_static_libs" || test -z "$old_library"; }; then
842004007ebaSmrg	  case $host in
842105cf1079Smrg	  *cygwin* | *mingw* | *cegcc* | *os2*)
842204007ebaSmrg	      # No point in relinking DLLs because paths are not encoded
842304007ebaSmrg	      func_append notinst_deplibs " $lib"
842404007ebaSmrg	      need_relink=no
842504007ebaSmrg	    ;;
842604007ebaSmrg	  *)
842705cf1079Smrg	    if test no = "$installed"; then
842804007ebaSmrg	      func_append notinst_deplibs " $lib"
842904007ebaSmrg	      need_relink=yes
843004007ebaSmrg	    fi
843104007ebaSmrg	    ;;
843204007ebaSmrg	  esac
843304007ebaSmrg	  # This is a shared library
843404007ebaSmrg
843504007ebaSmrg	  # Warn about portability, can't link against -module's on some
843604007ebaSmrg	  # systems (darwin).  Don't bleat about dlopened modules though!
843705cf1079Smrg	  dlopenmodule=
843804007ebaSmrg	  for dlpremoduletest in $dlprefiles; do
843904007ebaSmrg	    if test "X$dlpremoduletest" = "X$lib"; then
844005cf1079Smrg	      dlopenmodule=$dlpremoduletest
844104007ebaSmrg	      break
844204007ebaSmrg	    fi
844304007ebaSmrg	  done
844405cf1079Smrg	  if test -z "$dlopenmodule" && test yes = "$shouldnotlink" && test link = "$pass"; then
844504007ebaSmrg	    echo
844605cf1079Smrg	    if test prog = "$linkmode"; then
844704007ebaSmrg	      $ECHO "*** Warning: Linking the executable $output against the loadable module"
844804007ebaSmrg	    else
844904007ebaSmrg	      $ECHO "*** Warning: Linking the shared library $output against the loadable module"
845004007ebaSmrg	    fi
845104007ebaSmrg	    $ECHO "*** $linklib is not portable!"
845204007ebaSmrg	  fi
845305cf1079Smrg	  if test lib = "$linkmode" &&
845405cf1079Smrg	     test yes = "$hardcode_into_libs"; then
845504007ebaSmrg	    # Hardcode the library path.
845604007ebaSmrg	    # Skip directories that are in the system default run-time
845704007ebaSmrg	    # search path.
845804007ebaSmrg	    case " $sys_lib_dlsearch_path " in
845904007ebaSmrg	    *" $absdir "*) ;;
846004007ebaSmrg	    *)
846104007ebaSmrg	      case "$compile_rpath " in
846204007ebaSmrg	      *" $absdir "*) ;;
846304007ebaSmrg	      *) func_append compile_rpath " $absdir" ;;
846404007ebaSmrg	      esac
846504007ebaSmrg	      ;;
846604007ebaSmrg	    esac
846704007ebaSmrg	    case " $sys_lib_dlsearch_path " in
846804007ebaSmrg	    *" $libdir "*) ;;
846904007ebaSmrg	    *)
847004007ebaSmrg	      case "$finalize_rpath " in
847104007ebaSmrg	      *" $libdir "*) ;;
847204007ebaSmrg	      *) func_append finalize_rpath " $libdir" ;;
847304007ebaSmrg	      esac
847404007ebaSmrg	      ;;
847504007ebaSmrg	    esac
847604007ebaSmrg	  fi
847704007ebaSmrg
847804007ebaSmrg	  if test -n "$old_archive_from_expsyms_cmds"; then
847904007ebaSmrg	    # figure out the soname
848004007ebaSmrg	    set dummy $library_names
848104007ebaSmrg	    shift
848205cf1079Smrg	    realname=$1
848304007ebaSmrg	    shift
848404007ebaSmrg	    libname=`eval "\\$ECHO \"$libname_spec\""`
848504007ebaSmrg	    # use dlname if we got it. it's perfectly good, no?
848604007ebaSmrg	    if test -n "$dlname"; then
848705cf1079Smrg	      soname=$dlname
848804007ebaSmrg	    elif test -n "$soname_spec"; then
848904007ebaSmrg	      # bleh windows
849004007ebaSmrg	      case $host in
849105cf1079Smrg	      *cygwin* | mingw* | *cegcc* | *os2*)
849204007ebaSmrg	        func_arith $current - $age
849304007ebaSmrg		major=$func_arith_result
849405cf1079Smrg		versuffix=-$major
849504007ebaSmrg		;;
849604007ebaSmrg	      esac
849704007ebaSmrg	      eval soname=\"$soname_spec\"
849804007ebaSmrg	    else
849905cf1079Smrg	      soname=$realname
850004007ebaSmrg	    fi
850104007ebaSmrg
850204007ebaSmrg	    # Make a new name for the extract_expsyms_cmds to use
850305cf1079Smrg	    soroot=$soname
850404007ebaSmrg	    func_basename "$soroot"
850505cf1079Smrg	    soname=$func_basename_result
850604007ebaSmrg	    func_stripname 'lib' '.dll' "$soname"
850704007ebaSmrg	    newlib=libimp-$func_stripname_result.a
850804007ebaSmrg
850904007ebaSmrg	    # If the library has no export list, then create one now
851004007ebaSmrg	    if test -f "$output_objdir/$soname-def"; then :
851104007ebaSmrg	    else
851205cf1079Smrg	      func_verbose "extracting exported symbol list from '$soname'"
851304007ebaSmrg	      func_execute_cmds "$extract_expsyms_cmds" 'exit $?'
851404007ebaSmrg	    fi
851504007ebaSmrg
851604007ebaSmrg	    # Create $newlib
851704007ebaSmrg	    if test -f "$output_objdir/$newlib"; then :; else
851805cf1079Smrg	      func_verbose "generating import library for '$soname'"
851904007ebaSmrg	      func_execute_cmds "$old_archive_from_expsyms_cmds" 'exit $?'
852004007ebaSmrg	    fi
852104007ebaSmrg	    # make sure the library variables are pointing to the new library
852204007ebaSmrg	    dir=$output_objdir
852304007ebaSmrg	    linklib=$newlib
852404007ebaSmrg	  fi # test -n "$old_archive_from_expsyms_cmds"
852504007ebaSmrg
852605cf1079Smrg	  if test prog = "$linkmode" || test relink != "$opt_mode"; then
852704007ebaSmrg	    add_shlibpath=
852804007ebaSmrg	    add_dir=
852904007ebaSmrg	    add=
853004007ebaSmrg	    lib_linked=yes
853104007ebaSmrg	    case $hardcode_action in
853204007ebaSmrg	    immediate | unsupported)
853305cf1079Smrg	      if test no = "$hardcode_direct"; then
853405cf1079Smrg		add=$dir/$linklib
853504007ebaSmrg		case $host in
853605cf1079Smrg		  *-*-sco3.2v5.0.[024]*) add_dir=-L$dir ;;
853705cf1079Smrg		  *-*-sysv4*uw2*) add_dir=-L$dir ;;
853804007ebaSmrg		  *-*-sysv5OpenUNIX* | *-*-sysv5UnixWare7.[01].[10]* | \
853905cf1079Smrg		    *-*-unixware7*) add_dir=-L$dir ;;
854004007ebaSmrg		  *-*-darwin* )
854105cf1079Smrg		    # if the lib is a (non-dlopened) module then we cannot
854204007ebaSmrg		    # link against it, someone is ignoring the earlier warnings
854304007ebaSmrg		    if /usr/bin/file -L $add 2> /dev/null |
854405cf1079Smrg			 $GREP ": [^:]* bundle" >/dev/null; then
854504007ebaSmrg		      if test "X$dlopenmodule" != "X$lib"; then
854604007ebaSmrg			$ECHO "*** Warning: lib $linklib is a module, not a shared library"
854705cf1079Smrg			if test -z "$old_library"; then
854804007ebaSmrg			  echo
854904007ebaSmrg			  echo "*** And there doesn't seem to be a static archive available"
855004007ebaSmrg			  echo "*** The link will probably fail, sorry"
855104007ebaSmrg			else
855205cf1079Smrg			  add=$dir/$old_library
855304007ebaSmrg			fi
855404007ebaSmrg		      elif test -n "$old_library"; then
855505cf1079Smrg			add=$dir/$old_library
855604007ebaSmrg		      fi
855704007ebaSmrg		    fi
855804007ebaSmrg		esac
855905cf1079Smrg	      elif test no = "$hardcode_minus_L"; then
856004007ebaSmrg		case $host in
856105cf1079Smrg		*-*-sunos*) add_shlibpath=$dir ;;
856204007ebaSmrg		esac
856305cf1079Smrg		add_dir=-L$dir
856405cf1079Smrg		add=-l$name
856505cf1079Smrg	      elif test no = "$hardcode_shlibpath_var"; then
856605cf1079Smrg		add_shlibpath=$dir
856705cf1079Smrg		add=-l$name
856804007ebaSmrg	      else
856904007ebaSmrg		lib_linked=no
857004007ebaSmrg	      fi
857104007ebaSmrg	      ;;
857204007ebaSmrg	    relink)
857305cf1079Smrg	      if test yes = "$hardcode_direct" &&
857405cf1079Smrg	         test no = "$hardcode_direct_absolute"; then
857505cf1079Smrg		add=$dir/$linklib
857605cf1079Smrg	      elif test yes = "$hardcode_minus_L"; then
857705cf1079Smrg		add_dir=-L$absdir
857804007ebaSmrg		# Try looking first in the location we're being installed to.
857904007ebaSmrg		if test -n "$inst_prefix_dir"; then
858004007ebaSmrg		  case $libdir in
858104007ebaSmrg		    [\\/]*)
858204007ebaSmrg		      func_append add_dir " -L$inst_prefix_dir$libdir"
858304007ebaSmrg		      ;;
858404007ebaSmrg		  esac
858504007ebaSmrg		fi
858605cf1079Smrg		add=-l$name
858705cf1079Smrg	      elif test yes = "$hardcode_shlibpath_var"; then
858805cf1079Smrg		add_shlibpath=$dir
858905cf1079Smrg		add=-l$name
859004007ebaSmrg	      else
859104007ebaSmrg		lib_linked=no
859204007ebaSmrg	      fi
859304007ebaSmrg	      ;;
859404007ebaSmrg	    *) lib_linked=no ;;
859504007ebaSmrg	    esac
859604007ebaSmrg
859705cf1079Smrg	    if test yes != "$lib_linked"; then
859804007ebaSmrg	      func_fatal_configuration "unsupported hardcode properties"
859904007ebaSmrg	    fi
860004007ebaSmrg
860104007ebaSmrg	    if test -n "$add_shlibpath"; then
860204007ebaSmrg	      case :$compile_shlibpath: in
860304007ebaSmrg	      *":$add_shlibpath:"*) ;;
860404007ebaSmrg	      *) func_append compile_shlibpath "$add_shlibpath:" ;;
860504007ebaSmrg	      esac
860604007ebaSmrg	    fi
860705cf1079Smrg	    if test prog = "$linkmode"; then
860804007ebaSmrg	      test -n "$add_dir" && compile_deplibs="$add_dir $compile_deplibs"
860904007ebaSmrg	      test -n "$add" && compile_deplibs="$add $compile_deplibs"
861004007ebaSmrg	    else
861104007ebaSmrg	      test -n "$add_dir" && deplibs="$add_dir $deplibs"
861204007ebaSmrg	      test -n "$add" && deplibs="$add $deplibs"
861305cf1079Smrg	      if test yes != "$hardcode_direct" &&
861405cf1079Smrg		 test yes != "$hardcode_minus_L" &&
861505cf1079Smrg		 test yes = "$hardcode_shlibpath_var"; then
861604007ebaSmrg		case :$finalize_shlibpath: in
861704007ebaSmrg		*":$libdir:"*) ;;
861804007ebaSmrg		*) func_append finalize_shlibpath "$libdir:" ;;
861904007ebaSmrg		esac
862004007ebaSmrg	      fi
862104007ebaSmrg	    fi
862204007ebaSmrg	  fi
862304007ebaSmrg
862405cf1079Smrg	  if test prog = "$linkmode" || test relink = "$opt_mode"; then
862504007ebaSmrg	    add_shlibpath=
862604007ebaSmrg	    add_dir=
862704007ebaSmrg	    add=
862804007ebaSmrg	    # Finalize command for both is simple: just hardcode it.
862905cf1079Smrg	    if test yes = "$hardcode_direct" &&
863005cf1079Smrg	       test no = "$hardcode_direct_absolute"; then
863105cf1079Smrg	      add=$libdir/$linklib
863205cf1079Smrg	    elif test yes = "$hardcode_minus_L"; then
863305cf1079Smrg	      add_dir=-L$libdir
863405cf1079Smrg	      add=-l$name
863505cf1079Smrg	    elif test yes = "$hardcode_shlibpath_var"; then
863604007ebaSmrg	      case :$finalize_shlibpath: in
863704007ebaSmrg	      *":$libdir:"*) ;;
863804007ebaSmrg	      *) func_append finalize_shlibpath "$libdir:" ;;
863904007ebaSmrg	      esac
864005cf1079Smrg	      add=-l$name
864105cf1079Smrg	    elif test yes = "$hardcode_automatic"; then
864204007ebaSmrg	      if test -n "$inst_prefix_dir" &&
864305cf1079Smrg		 test -f "$inst_prefix_dir$libdir/$linklib"; then
864405cf1079Smrg		add=$inst_prefix_dir$libdir/$linklib
864504007ebaSmrg	      else
864605cf1079Smrg		add=$libdir/$linklib
864704007ebaSmrg	      fi
864804007ebaSmrg	    else
864904007ebaSmrg	      # We cannot seem to hardcode it, guess we'll fake it.
865005cf1079Smrg	      add_dir=-L$libdir
865104007ebaSmrg	      # Try looking first in the location we're being installed to.
865204007ebaSmrg	      if test -n "$inst_prefix_dir"; then
865304007ebaSmrg		case $libdir in
865404007ebaSmrg		  [\\/]*)
865504007ebaSmrg		    func_append add_dir " -L$inst_prefix_dir$libdir"
865604007ebaSmrg		    ;;
865704007ebaSmrg		esac
865804007ebaSmrg	      fi
865905cf1079Smrg	      add=-l$name
866004007ebaSmrg	    fi
866104007ebaSmrg
866205cf1079Smrg	    if test prog = "$linkmode"; then
866304007ebaSmrg	      test -n "$add_dir" && finalize_deplibs="$add_dir $finalize_deplibs"
866404007ebaSmrg	      test -n "$add" && finalize_deplibs="$add $finalize_deplibs"
866504007ebaSmrg	    else
866604007ebaSmrg	      test -n "$add_dir" && deplibs="$add_dir $deplibs"
866704007ebaSmrg	      test -n "$add" && deplibs="$add $deplibs"
866804007ebaSmrg	    fi
866904007ebaSmrg	  fi
867005cf1079Smrg	elif test prog = "$linkmode"; then
867104007ebaSmrg	  # Here we assume that one of hardcode_direct or hardcode_minus_L
867204007ebaSmrg	  # is not unsupported.  This is valid on all known static and
867304007ebaSmrg	  # shared platforms.
867405cf1079Smrg	  if test unsupported != "$hardcode_direct"; then
867505cf1079Smrg	    test -n "$old_library" && linklib=$old_library
867604007ebaSmrg	    compile_deplibs="$dir/$linklib $compile_deplibs"
867704007ebaSmrg	    finalize_deplibs="$dir/$linklib $finalize_deplibs"
867804007ebaSmrg	  else
867904007ebaSmrg	    compile_deplibs="-l$name -L$dir $compile_deplibs"
868004007ebaSmrg	    finalize_deplibs="-l$name -L$dir $finalize_deplibs"
868104007ebaSmrg	  fi
868205cf1079Smrg	elif test yes = "$build_libtool_libs"; then
868304007ebaSmrg	  # Not a shared library
868405cf1079Smrg	  if test pass_all != "$deplibs_check_method"; then
868504007ebaSmrg	    # We're trying link a shared library against a static one
868604007ebaSmrg	    # but the system doesn't support it.
868704007ebaSmrg
868804007ebaSmrg	    # Just print a warning and add the library to dependency_libs so
868904007ebaSmrg	    # that the program can be linked against the static library.
869004007ebaSmrg	    echo
869105cf1079Smrg	    $ECHO "*** Warning: This system cannot link to static lib archive $lib."
869204007ebaSmrg	    echo "*** I have the capability to make that library automatically link in when"
869304007ebaSmrg	    echo "*** you link to this library.  But I can only do this if you have a"
869404007ebaSmrg	    echo "*** shared version of the library, which you do not appear to have."
869505cf1079Smrg	    if test yes = "$module"; then
869604007ebaSmrg	      echo "*** But as you try to build a module library, libtool will still create "
869704007ebaSmrg	      echo "*** a static module, that should work as long as the dlopening application"
869804007ebaSmrg	      echo "*** is linked with the -dlopen flag to resolve symbols at runtime."
869904007ebaSmrg	      if test -z "$global_symbol_pipe"; then
870004007ebaSmrg		echo
870104007ebaSmrg		echo "*** However, this would only work if libtool was able to extract symbol"
870205cf1079Smrg		echo "*** lists from a program, using 'nm' or equivalent, but libtool could"
870304007ebaSmrg		echo "*** not find such a program.  So, this module is probably useless."
870405cf1079Smrg		echo "*** 'nm' from GNU binutils and a full rebuild may help."
870504007ebaSmrg	      fi
870605cf1079Smrg	      if test no = "$build_old_libs"; then
870704007ebaSmrg		build_libtool_libs=module
870804007ebaSmrg		build_old_libs=yes
870904007ebaSmrg	      else
871004007ebaSmrg		build_libtool_libs=no
871104007ebaSmrg	      fi
871204007ebaSmrg	    fi
871304007ebaSmrg	  else
871404007ebaSmrg	    deplibs="$dir/$old_library $deplibs"
871504007ebaSmrg	    link_static=yes
871604007ebaSmrg	  fi
871704007ebaSmrg	fi # link shared/static library?
871804007ebaSmrg
871905cf1079Smrg	if test lib = "$linkmode"; then
872004007ebaSmrg	  if test -n "$dependency_libs" &&
872105cf1079Smrg	     { test yes != "$hardcode_into_libs" ||
872205cf1079Smrg	       test yes = "$build_old_libs" ||
872305cf1079Smrg	       test yes = "$link_static"; }; then
872404007ebaSmrg	    # Extract -R from dependency_libs
872504007ebaSmrg	    temp_deplibs=
872604007ebaSmrg	    for libdir in $dependency_libs; do
872704007ebaSmrg	      case $libdir in
872804007ebaSmrg	      -R*) func_stripname '-R' '' "$libdir"
872904007ebaSmrg	           temp_xrpath=$func_stripname_result
873004007ebaSmrg		   case " $xrpath " in
873104007ebaSmrg		   *" $temp_xrpath "*) ;;
873204007ebaSmrg		   *) func_append xrpath " $temp_xrpath";;
873304007ebaSmrg		   esac;;
873404007ebaSmrg	      *) func_append temp_deplibs " $libdir";;
873504007ebaSmrg	      esac
873604007ebaSmrg	    done
873705cf1079Smrg	    dependency_libs=$temp_deplibs
873804007ebaSmrg	  fi
873904007ebaSmrg
874004007ebaSmrg	  func_append newlib_search_path " $absdir"
874104007ebaSmrg	  # Link against this library
874205cf1079Smrg	  test no = "$link_static" && newdependency_libs="$abs_ladir/$laname $newdependency_libs"
874304007ebaSmrg	  # ... and its dependency_libs
874404007ebaSmrg	  tmp_libs=
874504007ebaSmrg	  for deplib in $dependency_libs; do
874604007ebaSmrg	    newdependency_libs="$deplib $newdependency_libs"
874704007ebaSmrg	    case $deplib in
874804007ebaSmrg              -L*) func_stripname '-L' '' "$deplib"
874904007ebaSmrg                   func_resolve_sysroot "$func_stripname_result";;
875004007ebaSmrg              *) func_resolve_sysroot "$deplib" ;;
875104007ebaSmrg            esac
875205cf1079Smrg	    if $opt_preserve_dup_deps; then
875304007ebaSmrg	      case "$tmp_libs " in
875404007ebaSmrg	      *" $func_resolve_sysroot_result "*)
875504007ebaSmrg                func_append specialdeplibs " $func_resolve_sysroot_result" ;;
875604007ebaSmrg	      esac
875704007ebaSmrg	    fi
875804007ebaSmrg	    func_append tmp_libs " $func_resolve_sysroot_result"
875904007ebaSmrg	  done
876004007ebaSmrg
876105cf1079Smrg	  if test no != "$link_all_deplibs"; then
876204007ebaSmrg	    # Add the search paths of all dependency libraries
876304007ebaSmrg	    for deplib in $dependency_libs; do
876404007ebaSmrg	      path=
876504007ebaSmrg	      case $deplib in
876605cf1079Smrg	      -L*) path=$deplib ;;
876704007ebaSmrg	      *.la)
876804007ebaSmrg	        func_resolve_sysroot "$deplib"
876904007ebaSmrg	        deplib=$func_resolve_sysroot_result
877004007ebaSmrg	        func_dirname "$deplib" "" "."
877104007ebaSmrg		dir=$func_dirname_result
877204007ebaSmrg		# We need an absolute path.
877304007ebaSmrg		case $dir in
877405cf1079Smrg		[\\/]* | [A-Za-z]:[\\/]*) absdir=$dir ;;
877504007ebaSmrg		*)
877604007ebaSmrg		  absdir=`cd "$dir" && pwd`
877704007ebaSmrg		  if test -z "$absdir"; then
877805cf1079Smrg		    func_warning "cannot determine absolute directory name of '$dir'"
877905cf1079Smrg		    absdir=$dir
878004007ebaSmrg		  fi
878104007ebaSmrg		  ;;
878204007ebaSmrg		esac
878304007ebaSmrg		if $GREP "^installed=no" $deplib > /dev/null; then
878404007ebaSmrg		case $host in
878504007ebaSmrg		*-*-darwin*)
878604007ebaSmrg		  depdepl=
878705cf1079Smrg		  eval deplibrary_names=`$SED -n -e 's/^library_names=\(.*\)$/\1/p' $deplib`
878805cf1079Smrg		  if test -n "$deplibrary_names"; then
878905cf1079Smrg		    for tmp in $deplibrary_names; do
879004007ebaSmrg		      depdepl=$tmp
879104007ebaSmrg		    done
879205cf1079Smrg		    if test -f "$absdir/$objdir/$depdepl"; then
879305cf1079Smrg		      depdepl=$absdir/$objdir/$depdepl
879405cf1079Smrg		      darwin_install_name=`$OTOOL -L $depdepl | awk '{if (NR == 2) {print $1;exit}}'`
879504007ebaSmrg                      if test -z "$darwin_install_name"; then
879605cf1079Smrg                          darwin_install_name=`$OTOOL64 -L $depdepl  | awk '{if (NR == 2) {print $1;exit}}'`
879704007ebaSmrg                      fi
879805cf1079Smrg		      func_append compiler_flags " $wl-dylib_file $wl$darwin_install_name:$depdepl"
879905cf1079Smrg		      func_append linker_flags " -dylib_file $darwin_install_name:$depdepl"
880004007ebaSmrg		      path=
880104007ebaSmrg		    fi
880204007ebaSmrg		  fi
880304007ebaSmrg		  ;;
880404007ebaSmrg		*)
880505cf1079Smrg		  path=-L$absdir/$objdir
880604007ebaSmrg		  ;;
880704007ebaSmrg		esac
880804007ebaSmrg		else
880905cf1079Smrg		  eval libdir=`$SED -n -e 's/^libdir=\(.*\)$/\1/p' $deplib`
881004007ebaSmrg		  test -z "$libdir" && \
881105cf1079Smrg		    func_fatal_error "'$deplib' is not a valid libtool archive"
881204007ebaSmrg		  test "$absdir" != "$libdir" && \
881305cf1079Smrg		    func_warning "'$deplib' seems to be moved"
881404007ebaSmrg
881505cf1079Smrg		  path=-L$absdir
881604007ebaSmrg		fi
881704007ebaSmrg		;;
881804007ebaSmrg	      esac
881904007ebaSmrg	      case " $deplibs " in
882004007ebaSmrg	      *" $path "*) ;;
882104007ebaSmrg	      *) deplibs="$path $deplibs" ;;
882204007ebaSmrg	      esac
882304007ebaSmrg	    done
882404007ebaSmrg	  fi # link_all_deplibs != no
882504007ebaSmrg	fi # linkmode = lib
882604007ebaSmrg      done # for deplib in $libs
882705cf1079Smrg      if test link = "$pass"; then
882805cf1079Smrg	if test prog = "$linkmode"; then
882904007ebaSmrg	  compile_deplibs="$new_inherited_linker_flags $compile_deplibs"
883004007ebaSmrg	  finalize_deplibs="$new_inherited_linker_flags $finalize_deplibs"
883104007ebaSmrg	else
883204007ebaSmrg	  compiler_flags="$compiler_flags "`$ECHO " $new_inherited_linker_flags" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'`
883304007ebaSmrg	fi
883404007ebaSmrg      fi
883505cf1079Smrg      dependency_libs=$newdependency_libs
883605cf1079Smrg      if test dlpreopen = "$pass"; then
883704007ebaSmrg	# Link the dlpreopened libraries before other libraries
883804007ebaSmrg	for deplib in $save_deplibs; do
883904007ebaSmrg	  deplibs="$deplib $deplibs"
884004007ebaSmrg	done
884104007ebaSmrg      fi
884205cf1079Smrg      if test dlopen != "$pass"; then
884305cf1079Smrg	test conv = "$pass" || {
884404007ebaSmrg	  # Make sure lib_search_path contains only unique directories.
884504007ebaSmrg	  lib_search_path=
884604007ebaSmrg	  for dir in $newlib_search_path; do
884704007ebaSmrg	    case "$lib_search_path " in
884804007ebaSmrg	    *" $dir "*) ;;
884904007ebaSmrg	    *) func_append lib_search_path " $dir" ;;
885004007ebaSmrg	    esac
885104007ebaSmrg	  done
885204007ebaSmrg	  newlib_search_path=
885305cf1079Smrg	}
885404007ebaSmrg
885505cf1079Smrg	if test prog,link = "$linkmode,$pass"; then
885604007ebaSmrg	  vars="compile_deplibs finalize_deplibs"
885705cf1079Smrg	else
885805cf1079Smrg	  vars=deplibs
885904007ebaSmrg	fi
886004007ebaSmrg	for var in $vars dependency_libs; do
886104007ebaSmrg	  # Add libraries to $var in reverse order
886204007ebaSmrg	  eval tmp_libs=\"\$$var\"
886304007ebaSmrg	  new_libs=
886404007ebaSmrg	  for deplib in $tmp_libs; do
886504007ebaSmrg	    # FIXME: Pedantically, this is the right thing to do, so
886604007ebaSmrg	    #        that some nasty dependency loop isn't accidentally
886704007ebaSmrg	    #        broken:
886804007ebaSmrg	    #new_libs="$deplib $new_libs"
886904007ebaSmrg	    # Pragmatically, this seems to cause very few problems in
887004007ebaSmrg	    # practice:
887104007ebaSmrg	    case $deplib in
887204007ebaSmrg	    -L*) new_libs="$deplib $new_libs" ;;
887304007ebaSmrg	    -R*) ;;
887404007ebaSmrg	    *)
887504007ebaSmrg	      # And here is the reason: when a library appears more
887604007ebaSmrg	      # than once as an explicit dependence of a library, or
887704007ebaSmrg	      # is implicitly linked in more than once by the
887804007ebaSmrg	      # compiler, it is considered special, and multiple
887904007ebaSmrg	      # occurrences thereof are not removed.  Compare this
888004007ebaSmrg	      # with having the same library being listed as a
888104007ebaSmrg	      # dependency of multiple other libraries: in this case,
888204007ebaSmrg	      # we know (pedantically, we assume) the library does not
888304007ebaSmrg	      # need to be listed more than once, so we keep only the
888404007ebaSmrg	      # last copy.  This is not always right, but it is rare
888504007ebaSmrg	      # enough that we require users that really mean to play
888604007ebaSmrg	      # such unportable linking tricks to link the library
888704007ebaSmrg	      # using -Wl,-lname, so that libtool does not consider it
888804007ebaSmrg	      # for duplicate removal.
888904007ebaSmrg	      case " $specialdeplibs " in
889004007ebaSmrg	      *" $deplib "*) new_libs="$deplib $new_libs" ;;
889104007ebaSmrg	      *)
889204007ebaSmrg		case " $new_libs " in
889304007ebaSmrg		*" $deplib "*) ;;
889404007ebaSmrg		*) new_libs="$deplib $new_libs" ;;
889504007ebaSmrg		esac
889604007ebaSmrg		;;
889704007ebaSmrg	      esac
889804007ebaSmrg	      ;;
889904007ebaSmrg	    esac
890004007ebaSmrg	  done
890104007ebaSmrg	  tmp_libs=
890204007ebaSmrg	  for deplib in $new_libs; do
890304007ebaSmrg	    case $deplib in
890404007ebaSmrg	    -L*)
890504007ebaSmrg	      case " $tmp_libs " in
890604007ebaSmrg	      *" $deplib "*) ;;
890704007ebaSmrg	      *) func_append tmp_libs " $deplib" ;;
890804007ebaSmrg	      esac
890904007ebaSmrg	      ;;
891004007ebaSmrg	    *) func_append tmp_libs " $deplib" ;;
891104007ebaSmrg	    esac
891204007ebaSmrg	  done
891304007ebaSmrg	  eval $var=\"$tmp_libs\"
891404007ebaSmrg	done # for var
891504007ebaSmrg      fi
891605cf1079Smrg
891705cf1079Smrg      # Add Sun CC postdeps if required:
891805cf1079Smrg      test CXX = "$tagname" && {
891905cf1079Smrg        case $host_os in
892005cf1079Smrg        linux*)
892179d5fcd7Smrg          case `$CC -V 2>&1 | $SED 5q` in
892205cf1079Smrg          *Sun\ C*) # Sun C++ 5.9
892305cf1079Smrg            func_suncc_cstd_abi
892405cf1079Smrg
892505cf1079Smrg            if test no != "$suncc_use_cstd_abi"; then
892605cf1079Smrg              func_append postdeps ' -library=Cstd -library=Crun'
892705cf1079Smrg            fi
892805cf1079Smrg            ;;
892905cf1079Smrg          esac
893005cf1079Smrg          ;;
893105cf1079Smrg
893205cf1079Smrg        solaris*)
893305cf1079Smrg          func_cc_basename "$CC"
893405cf1079Smrg          case $func_cc_basename_result in
893505cf1079Smrg          CC* | sunCC*)
893605cf1079Smrg            func_suncc_cstd_abi
893705cf1079Smrg
893805cf1079Smrg            if test no != "$suncc_use_cstd_abi"; then
893905cf1079Smrg              func_append postdeps ' -library=Cstd -library=Crun'
894005cf1079Smrg            fi
894105cf1079Smrg            ;;
894205cf1079Smrg          esac
894305cf1079Smrg          ;;
894405cf1079Smrg        esac
894505cf1079Smrg      }
894605cf1079Smrg
894704007ebaSmrg      # Last step: remove runtime libs from dependency_libs
894804007ebaSmrg      # (they stay in deplibs)
894904007ebaSmrg      tmp_libs=
895005cf1079Smrg      for i in $dependency_libs; do
895104007ebaSmrg	case " $predeps $postdeps $compiler_lib_search_path " in
895204007ebaSmrg	*" $i "*)
895305cf1079Smrg	  i=
895404007ebaSmrg	  ;;
895504007ebaSmrg	esac
895605cf1079Smrg	if test -n "$i"; then
895704007ebaSmrg	  func_append tmp_libs " $i"
895804007ebaSmrg	fi
895904007ebaSmrg      done
896004007ebaSmrg      dependency_libs=$tmp_libs
896104007ebaSmrg    done # for pass
896205cf1079Smrg    if test prog = "$linkmode"; then
896305cf1079Smrg      dlfiles=$newdlfiles
896404007ebaSmrg    fi
896505cf1079Smrg    if test prog = "$linkmode" || test lib = "$linkmode"; then
896605cf1079Smrg      dlprefiles=$newdlprefiles
896704007ebaSmrg    fi
896804007ebaSmrg
896904007ebaSmrg    case $linkmode in
897004007ebaSmrg    oldlib)
897105cf1079Smrg      if test -n "$dlfiles$dlprefiles" || test no != "$dlself"; then
897205cf1079Smrg	func_warning "'-dlopen' is ignored for archives"
897304007ebaSmrg      fi
897404007ebaSmrg
897504007ebaSmrg      case " $deplibs" in
897604007ebaSmrg      *\ -l* | *\ -L*)
897705cf1079Smrg	func_warning "'-l' and '-L' are ignored for archives" ;;
897804007ebaSmrg      esac
897904007ebaSmrg
898004007ebaSmrg      test -n "$rpath" && \
898105cf1079Smrg	func_warning "'-rpath' is ignored for archives"
898204007ebaSmrg
898304007ebaSmrg      test -n "$xrpath" && \
898405cf1079Smrg	func_warning "'-R' is ignored for archives"
898504007ebaSmrg
898604007ebaSmrg      test -n "$vinfo" && \
898705cf1079Smrg	func_warning "'-version-info/-version-number' is ignored for archives"
898804007ebaSmrg
898904007ebaSmrg      test -n "$release" && \
899005cf1079Smrg	func_warning "'-release' is ignored for archives"
899104007ebaSmrg
899204007ebaSmrg      test -n "$export_symbols$export_symbols_regex" && \
899305cf1079Smrg	func_warning "'-export-symbols' is ignored for archives"
899404007ebaSmrg
899504007ebaSmrg      # Now set the variables for building old libraries.
899604007ebaSmrg      build_libtool_libs=no
899705cf1079Smrg      oldlibs=$output
899804007ebaSmrg      func_append objs "$old_deplibs"
899904007ebaSmrg      ;;
900004007ebaSmrg
900104007ebaSmrg    lib)
900205cf1079Smrg      # Make sure we only generate libraries of the form 'libNAME.la'.
900304007ebaSmrg      case $outputname in
900404007ebaSmrg      lib*)
900504007ebaSmrg	func_stripname 'lib' '.la' "$outputname"
900604007ebaSmrg	name=$func_stripname_result
900704007ebaSmrg	eval shared_ext=\"$shrext_cmds\"
900804007ebaSmrg	eval libname=\"$libname_spec\"
900904007ebaSmrg	;;
901004007ebaSmrg      *)
901105cf1079Smrg	test no = "$module" \
901205cf1079Smrg	  && func_fatal_help "libtool library '$output' must begin with 'lib'"
901304007ebaSmrg
901405cf1079Smrg	if test no != "$need_lib_prefix"; then
901504007ebaSmrg	  # Add the "lib" prefix for modules if required
901604007ebaSmrg	  func_stripname '' '.la' "$outputname"
901704007ebaSmrg	  name=$func_stripname_result
901804007ebaSmrg	  eval shared_ext=\"$shrext_cmds\"
901904007ebaSmrg	  eval libname=\"$libname_spec\"
902004007ebaSmrg	else
902104007ebaSmrg	  func_stripname '' '.la' "$outputname"
902204007ebaSmrg	  libname=$func_stripname_result
902304007ebaSmrg	fi
902404007ebaSmrg	;;
902504007ebaSmrg      esac
902604007ebaSmrg
902704007ebaSmrg      if test -n "$objs"; then
902805cf1079Smrg	if test pass_all != "$deplibs_check_method"; then
902905cf1079Smrg	  func_fatal_error "cannot build libtool library '$output' from non-libtool objects on this host:$objs"
903004007ebaSmrg	else
903104007ebaSmrg	  echo
903204007ebaSmrg	  $ECHO "*** Warning: Linking the shared library $output against the non-libtool"
903304007ebaSmrg	  $ECHO "*** objects $objs is not portable!"
903404007ebaSmrg	  func_append libobjs " $objs"
903504007ebaSmrg	fi
903604007ebaSmrg      fi
903704007ebaSmrg
903805cf1079Smrg      test no = "$dlself" \
903905cf1079Smrg	|| func_warning "'-dlopen self' is ignored for libtool libraries"
904004007ebaSmrg
904104007ebaSmrg      set dummy $rpath
904204007ebaSmrg      shift
904305cf1079Smrg      test 1 -lt "$#" \
904405cf1079Smrg	&& func_warning "ignoring multiple '-rpath's for a libtool library"
904504007ebaSmrg
904605cf1079Smrg      install_libdir=$1
904704007ebaSmrg
904804007ebaSmrg      oldlibs=
904904007ebaSmrg      if test -z "$rpath"; then
905005cf1079Smrg	if test yes = "$build_libtool_libs"; then
905104007ebaSmrg	  # Building a libtool convenience library.
905205cf1079Smrg	  # Some compilers have problems with a '.al' extension so
905304007ebaSmrg	  # convenience libraries should have the same extension an
905404007ebaSmrg	  # archive normally would.
905504007ebaSmrg	  oldlibs="$output_objdir/$libname.$libext $oldlibs"
905604007ebaSmrg	  build_libtool_libs=convenience
905704007ebaSmrg	  build_old_libs=yes
905804007ebaSmrg	fi
905904007ebaSmrg
906004007ebaSmrg	test -n "$vinfo" && \
906105cf1079Smrg	  func_warning "'-version-info/-version-number' is ignored for convenience libraries"
906204007ebaSmrg
906304007ebaSmrg	test -n "$release" && \
906405cf1079Smrg	  func_warning "'-release' is ignored for convenience libraries"
906504007ebaSmrg      else
906604007ebaSmrg
906704007ebaSmrg	# Parse the version information argument.
906805cf1079Smrg	save_ifs=$IFS; IFS=:
906904007ebaSmrg	set dummy $vinfo 0 0 0
907004007ebaSmrg	shift
907105cf1079Smrg	IFS=$save_ifs
907204007ebaSmrg
907304007ebaSmrg	test -n "$7" && \
907405cf1079Smrg	  func_fatal_help "too many parameters to '-version-info'"
907504007ebaSmrg
907604007ebaSmrg	# convert absolute version numbers to libtool ages
907704007ebaSmrg	# this retains compatibility with .la files and attempts
907804007ebaSmrg	# to make the code below a bit more comprehensible
907904007ebaSmrg
908004007ebaSmrg	case $vinfo_number in
908104007ebaSmrg	yes)
908205cf1079Smrg	  number_major=$1
908305cf1079Smrg	  number_minor=$2
908405cf1079Smrg	  number_revision=$3
908504007ebaSmrg	  #
908604007ebaSmrg	  # There are really only two kinds -- those that
908704007ebaSmrg	  # use the current revision as the major version
908804007ebaSmrg	  # and those that subtract age and use age as
908904007ebaSmrg	  # a minor version.  But, then there is irix
909005cf1079Smrg	  # that has an extra 1 added just for fun
909104007ebaSmrg	  #
909204007ebaSmrg	  case $version_type in
909304007ebaSmrg	  # correct linux to gnu/linux during the next big refactor
909479d5fcd7Smrg	  darwin|freebsd-elf|linux|midnightbsd-elf|osf|windows|none)
909504007ebaSmrg	    func_arith $number_major + $number_minor
909604007ebaSmrg	    current=$func_arith_result
909705cf1079Smrg	    age=$number_minor
909805cf1079Smrg	    revision=$number_revision
909904007ebaSmrg	    ;;
910005cf1079Smrg	  freebsd-aout|qnx|sunos)
910105cf1079Smrg	    current=$number_major
910205cf1079Smrg	    revision=$number_minor
910305cf1079Smrg	    age=0
910404007ebaSmrg	    ;;
910504007ebaSmrg	  irix|nonstopux)
910604007ebaSmrg	    func_arith $number_major + $number_minor
910704007ebaSmrg	    current=$func_arith_result
910805cf1079Smrg	    age=$number_minor
910905cf1079Smrg	    revision=$number_minor
911004007ebaSmrg	    lt_irix_increment=no
911104007ebaSmrg	    ;;
911204007ebaSmrg	  esac
911304007ebaSmrg	  ;;
911404007ebaSmrg	no)
911505cf1079Smrg	  current=$1
911605cf1079Smrg	  revision=$2
911705cf1079Smrg	  age=$3
911804007ebaSmrg	  ;;
911904007ebaSmrg	esac
912004007ebaSmrg
912104007ebaSmrg	# Check that each of the things are valid numbers.
912204007ebaSmrg	case $current in
912304007ebaSmrg	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]) ;;
912404007ebaSmrg	*)
912505cf1079Smrg	  func_error "CURRENT '$current' must be a nonnegative integer"
912605cf1079Smrg	  func_fatal_error "'$vinfo' is not valid version information"
912704007ebaSmrg	  ;;
912804007ebaSmrg	esac
912904007ebaSmrg
913004007ebaSmrg	case $revision in
913104007ebaSmrg	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]) ;;
913204007ebaSmrg	*)
913305cf1079Smrg	  func_error "REVISION '$revision' must be a nonnegative integer"
913405cf1079Smrg	  func_fatal_error "'$vinfo' is not valid version information"
913504007ebaSmrg	  ;;
913604007ebaSmrg	esac
913704007ebaSmrg
913804007ebaSmrg	case $age in
913904007ebaSmrg	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]) ;;
914004007ebaSmrg	*)
914105cf1079Smrg	  func_error "AGE '$age' must be a nonnegative integer"
914205cf1079Smrg	  func_fatal_error "'$vinfo' is not valid version information"
914304007ebaSmrg	  ;;
914404007ebaSmrg	esac
914504007ebaSmrg
914604007ebaSmrg	if test "$age" -gt "$current"; then
914705cf1079Smrg	  func_error "AGE '$age' is greater than the current interface number '$current'"
914805cf1079Smrg	  func_fatal_error "'$vinfo' is not valid version information"
914904007ebaSmrg	fi
915004007ebaSmrg
915104007ebaSmrg	# Calculate the version variables.
915204007ebaSmrg	major=
915304007ebaSmrg	versuffix=
915404007ebaSmrg	verstring=
915504007ebaSmrg	case $version_type in
915604007ebaSmrg	none) ;;
915704007ebaSmrg
915804007ebaSmrg	darwin)
915904007ebaSmrg	  # Like Linux, but with the current version available in
916004007ebaSmrg	  # verstring for coding it into the library header
916104007ebaSmrg	  func_arith $current - $age
916204007ebaSmrg	  major=.$func_arith_result
916305cf1079Smrg	  versuffix=$major.$age.$revision
916404007ebaSmrg	  # Darwin ld doesn't like 0 for these options...
916504007ebaSmrg	  func_arith $current + 1
916604007ebaSmrg	  minor_current=$func_arith_result
916705cf1079Smrg	  xlcverstring="$wl-compatibility_version $wl$minor_current $wl-current_version $wl$minor_current.$revision"
916804007ebaSmrg	  verstring="-compatibility_version $minor_current -current_version $minor_current.$revision"
916905cf1079Smrg          # On Darwin other compilers
917005cf1079Smrg          case $CC in
917105cf1079Smrg              nagfor*)
917205cf1079Smrg                  verstring="$wl-compatibility_version $wl$minor_current $wl-current_version $wl$minor_current.$revision"
917305cf1079Smrg                  ;;
917405cf1079Smrg              *)
917505cf1079Smrg                  verstring="-compatibility_version $minor_current -current_version $minor_current.$revision"
917605cf1079Smrg                  ;;
917705cf1079Smrg          esac
917804007ebaSmrg	  ;;
917904007ebaSmrg
918004007ebaSmrg	freebsd-aout)
918105cf1079Smrg	  major=.$current
918205cf1079Smrg	  versuffix=.$current.$revision
918304007ebaSmrg	  ;;
918404007ebaSmrg
918579d5fcd7Smrg	freebsd-elf | midnightbsd-elf)
918605cf1079Smrg	  func_arith $current - $age
918705cf1079Smrg	  major=.$func_arith_result
918805cf1079Smrg	  versuffix=$major.$age.$revision
918904007ebaSmrg	  ;;
919004007ebaSmrg
919104007ebaSmrg	irix | nonstopux)
919205cf1079Smrg	  if test no = "$lt_irix_increment"; then
919304007ebaSmrg	    func_arith $current - $age
919404007ebaSmrg	  else
919504007ebaSmrg	    func_arith $current - $age + 1
919604007ebaSmrg	  fi
919704007ebaSmrg	  major=$func_arith_result
919804007ebaSmrg
919904007ebaSmrg	  case $version_type in
920004007ebaSmrg	    nonstopux) verstring_prefix=nonstopux ;;
920104007ebaSmrg	    *)         verstring_prefix=sgi ;;
920204007ebaSmrg	  esac
920305cf1079Smrg	  verstring=$verstring_prefix$major.$revision
920404007ebaSmrg
920504007ebaSmrg	  # Add in all the interfaces that we are compatible with.
920604007ebaSmrg	  loop=$revision
920705cf1079Smrg	  while test 0 -ne "$loop"; do
920804007ebaSmrg	    func_arith $revision - $loop
920904007ebaSmrg	    iface=$func_arith_result
921004007ebaSmrg	    func_arith $loop - 1
921104007ebaSmrg	    loop=$func_arith_result
921205cf1079Smrg	    verstring=$verstring_prefix$major.$iface:$verstring
921304007ebaSmrg	  done
921404007ebaSmrg
921505cf1079Smrg	  # Before this point, $major must not contain '.'.
921604007ebaSmrg	  major=.$major
921705cf1079Smrg	  versuffix=$major.$revision
921804007ebaSmrg	  ;;
921904007ebaSmrg
922004007ebaSmrg	linux) # correct to gnu/linux during the next big refactor
922104007ebaSmrg	  func_arith $current - $age
922204007ebaSmrg	  major=.$func_arith_result
922305cf1079Smrg	  versuffix=$major.$age.$revision
922404007ebaSmrg	  ;;
922504007ebaSmrg
922604007ebaSmrg	osf)
922704007ebaSmrg	  func_arith $current - $age
922804007ebaSmrg	  major=.$func_arith_result
922905cf1079Smrg	  versuffix=.$current.$age.$revision
923005cf1079Smrg	  verstring=$current.$age.$revision
923104007ebaSmrg
923204007ebaSmrg	  # Add in all the interfaces that we are compatible with.
923304007ebaSmrg	  loop=$age
923405cf1079Smrg	  while test 0 -ne "$loop"; do
923504007ebaSmrg	    func_arith $current - $loop
923604007ebaSmrg	    iface=$func_arith_result
923704007ebaSmrg	    func_arith $loop - 1
923804007ebaSmrg	    loop=$func_arith_result
923905cf1079Smrg	    verstring=$verstring:$iface.0
924004007ebaSmrg	  done
924104007ebaSmrg
924204007ebaSmrg	  # Make executables depend on our current version.
924305cf1079Smrg	  func_append verstring ":$current.0"
924404007ebaSmrg	  ;;
924504007ebaSmrg
924604007ebaSmrg	qnx)
924705cf1079Smrg	  major=.$current
924805cf1079Smrg	  versuffix=.$current
924905cf1079Smrg	  ;;
925005cf1079Smrg
925105cf1079Smrg	sco)
925205cf1079Smrg	  major=.$current
925305cf1079Smrg	  versuffix=.$current
925404007ebaSmrg	  ;;
925504007ebaSmrg
925604007ebaSmrg	sunos)
925705cf1079Smrg	  major=.$current
925805cf1079Smrg	  versuffix=.$current.$revision
925904007ebaSmrg	  ;;
926004007ebaSmrg
926104007ebaSmrg	windows)
926204007ebaSmrg	  # Use '-' rather than '.', since we only want one
926305cf1079Smrg	  # extension on DOS 8.3 file systems.
926404007ebaSmrg	  func_arith $current - $age
926504007ebaSmrg	  major=$func_arith_result
926605cf1079Smrg	  versuffix=-$major
926704007ebaSmrg	  ;;
926804007ebaSmrg
926904007ebaSmrg	*)
927005cf1079Smrg	  func_fatal_configuration "unknown library version type '$version_type'"
927104007ebaSmrg	  ;;
927204007ebaSmrg	esac
927304007ebaSmrg
927404007ebaSmrg	# Clear the version info if we defaulted, and they specified a release.
927504007ebaSmrg	if test -z "$vinfo" && test -n "$release"; then
927604007ebaSmrg	  major=
927704007ebaSmrg	  case $version_type in
927804007ebaSmrg	  darwin)
927904007ebaSmrg	    # we can't check for "0.0" in archive_cmds due to quoting
928004007ebaSmrg	    # problems, so we reset it completely
928104007ebaSmrg	    verstring=
928204007ebaSmrg	    ;;
928304007ebaSmrg	  *)
928405cf1079Smrg	    verstring=0.0
928504007ebaSmrg	    ;;
928604007ebaSmrg	  esac
928705cf1079Smrg	  if test no = "$need_version"; then
928804007ebaSmrg	    versuffix=
928904007ebaSmrg	  else
929005cf1079Smrg	    versuffix=.0.0
929104007ebaSmrg	  fi
929204007ebaSmrg	fi
929304007ebaSmrg
929404007ebaSmrg	# Remove version info from name if versioning should be avoided
929505cf1079Smrg	if test yes,no = "$avoid_version,$need_version"; then
929604007ebaSmrg	  major=
929704007ebaSmrg	  versuffix=
929805cf1079Smrg	  verstring=
929904007ebaSmrg	fi
930004007ebaSmrg
930104007ebaSmrg	# Check to see if the archive will have undefined symbols.
930205cf1079Smrg	if test yes = "$allow_undefined"; then
930305cf1079Smrg	  if test unsupported = "$allow_undefined_flag"; then
930405cf1079Smrg	    if test yes = "$build_old_libs"; then
930505cf1079Smrg	      func_warning "undefined symbols not allowed in $host shared libraries; building static only"
930605cf1079Smrg	      build_libtool_libs=no
930705cf1079Smrg	    else
930805cf1079Smrg	      func_fatal_error "can't build $host shared library unless -no-undefined is specified"
930905cf1079Smrg	    fi
931004007ebaSmrg	  fi
931104007ebaSmrg	else
931204007ebaSmrg	  # Don't allow undefined symbols.
931305cf1079Smrg	  allow_undefined_flag=$no_undefined_flag
931404007ebaSmrg	fi
931504007ebaSmrg
931604007ebaSmrg      fi
931704007ebaSmrg
931805cf1079Smrg      func_generate_dlsyms "$libname" "$libname" :
931904007ebaSmrg      func_append libobjs " $symfileobj"
932005cf1079Smrg      test " " = "$libobjs" && libobjs=
932104007ebaSmrg
932205cf1079Smrg      if test relink != "$opt_mode"; then
932304007ebaSmrg	# Remove our outputs, but don't remove object files since they
932404007ebaSmrg	# may have been created when compiling PIC objects.
932504007ebaSmrg	removelist=
932604007ebaSmrg	tempremovelist=`$ECHO "$output_objdir/*"`
932704007ebaSmrg	for p in $tempremovelist; do
932804007ebaSmrg	  case $p in
932904007ebaSmrg	    *.$objext | *.gcno)
933004007ebaSmrg	       ;;
933105cf1079Smrg	    $output_objdir/$outputname | $output_objdir/$libname.* | $output_objdir/$libname$release.*)
933205cf1079Smrg	       if test -n "$precious_files_regex"; then
933304007ebaSmrg		 if $ECHO "$p" | $EGREP -e "$precious_files_regex" >/dev/null 2>&1
933404007ebaSmrg		 then
933504007ebaSmrg		   continue
933604007ebaSmrg		 fi
933704007ebaSmrg	       fi
933804007ebaSmrg	       func_append removelist " $p"
933904007ebaSmrg	       ;;
934004007ebaSmrg	    *) ;;
934104007ebaSmrg	  esac
934204007ebaSmrg	done
934304007ebaSmrg	test -n "$removelist" && \
934404007ebaSmrg	  func_show_eval "${RM}r \$removelist"
934504007ebaSmrg      fi
934604007ebaSmrg
934704007ebaSmrg      # Now set the variables for building old libraries.
934805cf1079Smrg      if test yes = "$build_old_libs" && test convenience != "$build_libtool_libs"; then
934904007ebaSmrg	func_append oldlibs " $output_objdir/$libname.$libext"
935004007ebaSmrg
935104007ebaSmrg	# Transform .lo files to .o files.
935205cf1079Smrg	oldobjs="$objs "`$ECHO "$libobjs" | $SP2NL | $SED "/\.$libext$/d; $lo2o" | $NL2SP`
935304007ebaSmrg      fi
935404007ebaSmrg
935504007ebaSmrg      # Eliminate all temporary directories.
935604007ebaSmrg      #for path in $notinst_path; do
935704007ebaSmrg      #	lib_search_path=`$ECHO "$lib_search_path " | $SED "s% $path % %g"`
935804007ebaSmrg      #	deplibs=`$ECHO "$deplibs " | $SED "s% -L$path % %g"`
935904007ebaSmrg      #	dependency_libs=`$ECHO "$dependency_libs " | $SED "s% -L$path % %g"`
936004007ebaSmrg      #done
936104007ebaSmrg
936204007ebaSmrg      if test -n "$xrpath"; then
936304007ebaSmrg	# If the user specified any rpath flags, then add them.
936404007ebaSmrg	temp_xrpath=
936504007ebaSmrg	for libdir in $xrpath; do
936604007ebaSmrg	  func_replace_sysroot "$libdir"
936704007ebaSmrg	  func_append temp_xrpath " -R$func_replace_sysroot_result"
936804007ebaSmrg	  case "$finalize_rpath " in
936904007ebaSmrg	  *" $libdir "*) ;;
937004007ebaSmrg	  *) func_append finalize_rpath " $libdir" ;;
937104007ebaSmrg	  esac
937204007ebaSmrg	done
937305cf1079Smrg	if test yes != "$hardcode_into_libs" || test yes = "$build_old_libs"; then
937404007ebaSmrg	  dependency_libs="$temp_xrpath $dependency_libs"
937504007ebaSmrg	fi
937604007ebaSmrg      fi
937704007ebaSmrg
937804007ebaSmrg      # Make sure dlfiles contains only unique files that won't be dlpreopened
937905cf1079Smrg      old_dlfiles=$dlfiles
938004007ebaSmrg      dlfiles=
938104007ebaSmrg      for lib in $old_dlfiles; do
938204007ebaSmrg	case " $dlprefiles $dlfiles " in
938304007ebaSmrg	*" $lib "*) ;;
938404007ebaSmrg	*) func_append dlfiles " $lib" ;;
938504007ebaSmrg	esac
938604007ebaSmrg      done
938704007ebaSmrg
938804007ebaSmrg      # Make sure dlprefiles contains only unique files
938905cf1079Smrg      old_dlprefiles=$dlprefiles
939004007ebaSmrg      dlprefiles=
939104007ebaSmrg      for lib in $old_dlprefiles; do
939204007ebaSmrg	case "$dlprefiles " in
939304007ebaSmrg	*" $lib "*) ;;
939404007ebaSmrg	*) func_append dlprefiles " $lib" ;;
939504007ebaSmrg	esac
939604007ebaSmrg      done
939704007ebaSmrg
939805cf1079Smrg      if test yes = "$build_libtool_libs"; then
939904007ebaSmrg	if test -n "$rpath"; then
940004007ebaSmrg	  case $host in
940104007ebaSmrg	  *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-*-beos* | *-cegcc* | *-*-haiku*)
940204007ebaSmrg	    # these systems don't actually have a c library (as such)!
940304007ebaSmrg	    ;;
940404007ebaSmrg	  *-*-rhapsody* | *-*-darwin1.[012])
940504007ebaSmrg	    # Rhapsody C library is in the System framework
940604007ebaSmrg	    func_append deplibs " System.ltframework"
940704007ebaSmrg	    ;;
940804007ebaSmrg	  *-*-netbsd*)
940904007ebaSmrg	    # Don't link with libc until the a.out ld.so is fixed.
941004007ebaSmrg	    ;;
941179d5fcd7Smrg	  *-*-openbsd* | *-*-freebsd* | *-*-dragonfly* | *-*-midnightbsd*)
941204007ebaSmrg	    # Do not include libc due to us having libc/libc_r.
941304007ebaSmrg	    ;;
941404007ebaSmrg	  *-*-sco3.2v5* | *-*-sco5v6*)
941504007ebaSmrg	    # Causes problems with __ctype
941604007ebaSmrg	    ;;
941704007ebaSmrg	  *-*-sysv4.2uw2* | *-*-sysv5* | *-*-unixware* | *-*-OpenUNIX*)
941804007ebaSmrg	    # Compiler inserts libc in the correct place for threads to work
941904007ebaSmrg	    ;;
942004007ebaSmrg	  *)
942104007ebaSmrg	    # Add libc to deplibs on all other systems if necessary.
942205cf1079Smrg	    if test yes = "$build_libtool_need_lc"; then
942304007ebaSmrg	      func_append deplibs " -lc"
942404007ebaSmrg	    fi
942504007ebaSmrg	    ;;
942604007ebaSmrg	  esac
942704007ebaSmrg	fi
942804007ebaSmrg
942904007ebaSmrg	# Transform deplibs into only deplibs that can be linked in shared.
943004007ebaSmrg	name_save=$name
943104007ebaSmrg	libname_save=$libname
943204007ebaSmrg	release_save=$release
943304007ebaSmrg	versuffix_save=$versuffix
943404007ebaSmrg	major_save=$major
943504007ebaSmrg	# I'm not sure if I'm treating the release correctly.  I think
943604007ebaSmrg	# release should show up in the -l (ie -lgmp5) so we don't want to
943704007ebaSmrg	# add it in twice.  Is that correct?
943805cf1079Smrg	release=
943905cf1079Smrg	versuffix=
944005cf1079Smrg	major=
944104007ebaSmrg	newdeplibs=
944204007ebaSmrg	droppeddeps=no
944304007ebaSmrg	case $deplibs_check_method in
944404007ebaSmrg	pass_all)
944504007ebaSmrg	  # Don't check for shared/static.  Everything works.
944604007ebaSmrg	  # This might be a little naive.  We might want to check
944704007ebaSmrg	  # whether the library exists or not.  But this is on
944804007ebaSmrg	  # osf3 & osf4 and I'm not really sure... Just
944904007ebaSmrg	  # implementing what was already the behavior.
945004007ebaSmrg	  newdeplibs=$deplibs
945104007ebaSmrg	  ;;
945204007ebaSmrg	test_compile)
945304007ebaSmrg	  # This code stresses the "libraries are programs" paradigm to its
945404007ebaSmrg	  # limits. Maybe even breaks it.  We compile a program, linking it
945504007ebaSmrg	  # against the deplibs as a proxy for the library.  Then we can check
945604007ebaSmrg	  # whether they linked in statically or dynamically with ldd.
945704007ebaSmrg	  $opt_dry_run || $RM conftest.c
945804007ebaSmrg	  cat > conftest.c <<EOF
945904007ebaSmrg	  int main() { return 0; }
946004007ebaSmrgEOF
946104007ebaSmrg	  $opt_dry_run || $RM conftest
946204007ebaSmrg	  if $LTCC $LTCFLAGS -o conftest conftest.c $deplibs; then
946304007ebaSmrg	    ldd_output=`ldd conftest`
946404007ebaSmrg	    for i in $deplibs; do
946504007ebaSmrg	      case $i in
946604007ebaSmrg	      -l*)
946704007ebaSmrg		func_stripname -l '' "$i"
946804007ebaSmrg		name=$func_stripname_result
946905cf1079Smrg		if test yes = "$allow_libtool_libs_with_static_runtimes"; then
947004007ebaSmrg		  case " $predeps $postdeps " in
947104007ebaSmrg		  *" $i "*)
947204007ebaSmrg		    func_append newdeplibs " $i"
947305cf1079Smrg		    i=
947404007ebaSmrg		    ;;
947504007ebaSmrg		  esac
947604007ebaSmrg		fi
947705cf1079Smrg		if test -n "$i"; then
947804007ebaSmrg		  libname=`eval "\\$ECHO \"$libname_spec\""`
947904007ebaSmrg		  deplib_matches=`eval "\\$ECHO \"$library_names_spec\""`
948004007ebaSmrg		  set dummy $deplib_matches; shift
948104007ebaSmrg		  deplib_match=$1
948205cf1079Smrg		  if test `expr "$ldd_output" : ".*$deplib_match"` -ne 0; then
948304007ebaSmrg		    func_append newdeplibs " $i"
948404007ebaSmrg		  else
948504007ebaSmrg		    droppeddeps=yes
948604007ebaSmrg		    echo
948704007ebaSmrg		    $ECHO "*** Warning: dynamic linker does not accept needed library $i."
948804007ebaSmrg		    echo "*** I have the capability to make that library automatically link in when"
948904007ebaSmrg		    echo "*** you link to this library.  But I can only do this if you have a"
949004007ebaSmrg		    echo "*** shared version of the library, which I believe you do not have"
949104007ebaSmrg		    echo "*** because a test_compile did reveal that the linker did not use it for"
949204007ebaSmrg		    echo "*** its dynamic dependency list that programs get resolved with at runtime."
949304007ebaSmrg		  fi
949404007ebaSmrg		fi
949504007ebaSmrg		;;
949604007ebaSmrg	      *)
949704007ebaSmrg		func_append newdeplibs " $i"
949804007ebaSmrg		;;
949904007ebaSmrg	      esac
950004007ebaSmrg	    done
950104007ebaSmrg	  else
950204007ebaSmrg	    # Error occurred in the first compile.  Let's try to salvage
950304007ebaSmrg	    # the situation: Compile a separate program for each library.
950404007ebaSmrg	    for i in $deplibs; do
950504007ebaSmrg	      case $i in
950604007ebaSmrg	      -l*)
950704007ebaSmrg		func_stripname -l '' "$i"
950804007ebaSmrg		name=$func_stripname_result
950904007ebaSmrg		$opt_dry_run || $RM conftest
951004007ebaSmrg		if $LTCC $LTCFLAGS -o conftest conftest.c $i; then
951104007ebaSmrg		  ldd_output=`ldd conftest`
951205cf1079Smrg		  if test yes = "$allow_libtool_libs_with_static_runtimes"; then
951304007ebaSmrg		    case " $predeps $postdeps " in
951404007ebaSmrg		    *" $i "*)
951504007ebaSmrg		      func_append newdeplibs " $i"
951605cf1079Smrg		      i=
951704007ebaSmrg		      ;;
951804007ebaSmrg		    esac
951904007ebaSmrg		  fi
952005cf1079Smrg		  if test -n "$i"; then
952104007ebaSmrg		    libname=`eval "\\$ECHO \"$libname_spec\""`
952204007ebaSmrg		    deplib_matches=`eval "\\$ECHO \"$library_names_spec\""`
952304007ebaSmrg		    set dummy $deplib_matches; shift
952404007ebaSmrg		    deplib_match=$1
952505cf1079Smrg		    if test `expr "$ldd_output" : ".*$deplib_match"` -ne 0; then
952604007ebaSmrg		      func_append newdeplibs " $i"
952704007ebaSmrg		    else
952804007ebaSmrg		      droppeddeps=yes
952904007ebaSmrg		      echo
953004007ebaSmrg		      $ECHO "*** Warning: dynamic linker does not accept needed library $i."
953104007ebaSmrg		      echo "*** I have the capability to make that library automatically link in when"
953204007ebaSmrg		      echo "*** you link to this library.  But I can only do this if you have a"
953304007ebaSmrg		      echo "*** shared version of the library, which you do not appear to have"
953404007ebaSmrg		      echo "*** because a test_compile did reveal that the linker did not use this one"
953504007ebaSmrg		      echo "*** as a dynamic dependency that programs can get resolved with at runtime."
953604007ebaSmrg		    fi
953704007ebaSmrg		  fi
953804007ebaSmrg		else
953904007ebaSmrg		  droppeddeps=yes
954004007ebaSmrg		  echo
954104007ebaSmrg		  $ECHO "*** Warning!  Library $i is needed by this library but I was not able to"
954204007ebaSmrg		  echo "*** make it link in!  You will probably need to install it or some"
954304007ebaSmrg		  echo "*** library that it depends on before this library will be fully"
954404007ebaSmrg		  echo "*** functional.  Installing it before continuing would be even better."
954504007ebaSmrg		fi
954604007ebaSmrg		;;
954704007ebaSmrg	      *)
954804007ebaSmrg		func_append newdeplibs " $i"
954904007ebaSmrg		;;
955004007ebaSmrg	      esac
955104007ebaSmrg	    done
955204007ebaSmrg	  fi
955304007ebaSmrg	  ;;
955404007ebaSmrg	file_magic*)
955504007ebaSmrg	  set dummy $deplibs_check_method; shift
955604007ebaSmrg	  file_magic_regex=`expr "$deplibs_check_method" : "$1 \(.*\)"`
955704007ebaSmrg	  for a_deplib in $deplibs; do
955804007ebaSmrg	    case $a_deplib in
955904007ebaSmrg	    -l*)
956004007ebaSmrg	      func_stripname -l '' "$a_deplib"
956104007ebaSmrg	      name=$func_stripname_result
956205cf1079Smrg	      if test yes = "$allow_libtool_libs_with_static_runtimes"; then
956304007ebaSmrg		case " $predeps $postdeps " in
956404007ebaSmrg		*" $a_deplib "*)
956504007ebaSmrg		  func_append newdeplibs " $a_deplib"
956605cf1079Smrg		  a_deplib=
956704007ebaSmrg		  ;;
956804007ebaSmrg		esac
956904007ebaSmrg	      fi
957005cf1079Smrg	      if test -n "$a_deplib"; then
957104007ebaSmrg		libname=`eval "\\$ECHO \"$libname_spec\""`
957204007ebaSmrg		if test -n "$file_magic_glob"; then
957304007ebaSmrg		  libnameglob=`func_echo_all "$libname" | $SED -e $file_magic_glob`
957404007ebaSmrg		else
957504007ebaSmrg		  libnameglob=$libname
957604007ebaSmrg		fi
957705cf1079Smrg		test yes = "$want_nocaseglob" && nocaseglob=`shopt -p nocaseglob`
957804007ebaSmrg		for i in $lib_search_path $sys_lib_search_path $shlib_search_path; do
957905cf1079Smrg		  if test yes = "$want_nocaseglob"; then
958004007ebaSmrg		    shopt -s nocaseglob
958104007ebaSmrg		    potential_libs=`ls $i/$libnameglob[.-]* 2>/dev/null`
958204007ebaSmrg		    $nocaseglob
958304007ebaSmrg		  else
958404007ebaSmrg		    potential_libs=`ls $i/$libnameglob[.-]* 2>/dev/null`
958504007ebaSmrg		  fi
958604007ebaSmrg		  for potent_lib in $potential_libs; do
958704007ebaSmrg		      # Follow soft links.
958804007ebaSmrg		      if ls -lLd "$potent_lib" 2>/dev/null |
958904007ebaSmrg			 $GREP " -> " >/dev/null; then
959004007ebaSmrg			continue
959104007ebaSmrg		      fi
959204007ebaSmrg		      # The statement above tries to avoid entering an
959304007ebaSmrg		      # endless loop below, in case of cyclic links.
959404007ebaSmrg		      # We might still enter an endless loop, since a link
959504007ebaSmrg		      # loop can be closed while we follow links,
959604007ebaSmrg		      # but so what?
959705cf1079Smrg		      potlib=$potent_lib
959804007ebaSmrg		      while test -h "$potlib" 2>/dev/null; do
959905cf1079Smrg			potliblink=`ls -ld $potlib | $SED 's/.* -> //'`
960004007ebaSmrg			case $potliblink in
960105cf1079Smrg			[\\/]* | [A-Za-z]:[\\/]*) potlib=$potliblink;;
960205cf1079Smrg			*) potlib=`$ECHO "$potlib" | $SED 's|[^/]*$||'`"$potliblink";;
960304007ebaSmrg			esac
960404007ebaSmrg		      done
960504007ebaSmrg		      if eval $file_magic_cmd \"\$potlib\" 2>/dev/null |
960604007ebaSmrg			 $SED -e 10q |
960704007ebaSmrg			 $EGREP "$file_magic_regex" > /dev/null; then
960804007ebaSmrg			func_append newdeplibs " $a_deplib"
960905cf1079Smrg			a_deplib=
961004007ebaSmrg			break 2
961104007ebaSmrg		      fi
961204007ebaSmrg		  done
961304007ebaSmrg		done
961404007ebaSmrg	      fi
961505cf1079Smrg	      if test -n "$a_deplib"; then
961604007ebaSmrg		droppeddeps=yes
961704007ebaSmrg		echo
961804007ebaSmrg		$ECHO "*** Warning: linker path does not have real file for library $a_deplib."
961904007ebaSmrg		echo "*** I have the capability to make that library automatically link in when"
962004007ebaSmrg		echo "*** you link to this library.  But I can only do this if you have a"
962104007ebaSmrg		echo "*** shared version of the library, which you do not appear to have"
962204007ebaSmrg		echo "*** because I did check the linker path looking for a file starting"
962305cf1079Smrg		if test -z "$potlib"; then
962404007ebaSmrg		  $ECHO "*** with $libname but no candidates were found. (...for file magic test)"
962504007ebaSmrg		else
962604007ebaSmrg		  $ECHO "*** with $libname and none of the candidates passed a file format test"
962704007ebaSmrg		  $ECHO "*** using a file magic. Last file checked: $potlib"
962804007ebaSmrg		fi
962904007ebaSmrg	      fi
963004007ebaSmrg	      ;;
963104007ebaSmrg	    *)
963204007ebaSmrg	      # Add a -L argument.
963304007ebaSmrg	      func_append newdeplibs " $a_deplib"
963404007ebaSmrg	      ;;
963504007ebaSmrg	    esac
963604007ebaSmrg	  done # Gone through all deplibs.
963704007ebaSmrg	  ;;
963804007ebaSmrg	match_pattern*)
963904007ebaSmrg	  set dummy $deplibs_check_method; shift
964004007ebaSmrg	  match_pattern_regex=`expr "$deplibs_check_method" : "$1 \(.*\)"`
964104007ebaSmrg	  for a_deplib in $deplibs; do
964204007ebaSmrg	    case $a_deplib in
964304007ebaSmrg	    -l*)
964404007ebaSmrg	      func_stripname -l '' "$a_deplib"
964504007ebaSmrg	      name=$func_stripname_result
964605cf1079Smrg	      if test yes = "$allow_libtool_libs_with_static_runtimes"; then
964704007ebaSmrg		case " $predeps $postdeps " in
964804007ebaSmrg		*" $a_deplib "*)
964904007ebaSmrg		  func_append newdeplibs " $a_deplib"
965005cf1079Smrg		  a_deplib=
965104007ebaSmrg		  ;;
965204007ebaSmrg		esac
965304007ebaSmrg	      fi
965405cf1079Smrg	      if test -n "$a_deplib"; then
965504007ebaSmrg		libname=`eval "\\$ECHO \"$libname_spec\""`
965604007ebaSmrg		for i in $lib_search_path $sys_lib_search_path $shlib_search_path; do
965704007ebaSmrg		  potential_libs=`ls $i/$libname[.-]* 2>/dev/null`
965804007ebaSmrg		  for potent_lib in $potential_libs; do
965905cf1079Smrg		    potlib=$potent_lib # see symlink-check above in file_magic test
966004007ebaSmrg		    if eval "\$ECHO \"$potent_lib\"" 2>/dev/null | $SED 10q | \
966104007ebaSmrg		       $EGREP "$match_pattern_regex" > /dev/null; then
966204007ebaSmrg		      func_append newdeplibs " $a_deplib"
966305cf1079Smrg		      a_deplib=
966404007ebaSmrg		      break 2
966504007ebaSmrg		    fi
966604007ebaSmrg		  done
966704007ebaSmrg		done
966804007ebaSmrg	      fi
966905cf1079Smrg	      if test -n "$a_deplib"; then
967004007ebaSmrg		droppeddeps=yes
967104007ebaSmrg		echo
967204007ebaSmrg		$ECHO "*** Warning: linker path does not have real file for library $a_deplib."
967304007ebaSmrg		echo "*** I have the capability to make that library automatically link in when"
967404007ebaSmrg		echo "*** you link to this library.  But I can only do this if you have a"
967504007ebaSmrg		echo "*** shared version of the library, which you do not appear to have"
967604007ebaSmrg		echo "*** because I did check the linker path looking for a file starting"
967705cf1079Smrg		if test -z "$potlib"; then
967804007ebaSmrg		  $ECHO "*** with $libname but no candidates were found. (...for regex pattern test)"
967904007ebaSmrg		else
968004007ebaSmrg		  $ECHO "*** with $libname and none of the candidates passed a file format test"
968104007ebaSmrg		  $ECHO "*** using a regex pattern. Last file checked: $potlib"
968204007ebaSmrg		fi
968304007ebaSmrg	      fi
968404007ebaSmrg	      ;;
968504007ebaSmrg	    *)
968604007ebaSmrg	      # Add a -L argument.
968704007ebaSmrg	      func_append newdeplibs " $a_deplib"
968804007ebaSmrg	      ;;
968904007ebaSmrg	    esac
969004007ebaSmrg	  done # Gone through all deplibs.
969104007ebaSmrg	  ;;
969204007ebaSmrg	none | unknown | *)
969305cf1079Smrg	  newdeplibs=
969404007ebaSmrg	  tmp_deplibs=`$ECHO " $deplibs" | $SED 's/ -lc$//; s/ -[LR][^ ]*//g'`
969505cf1079Smrg	  if test yes = "$allow_libtool_libs_with_static_runtimes"; then
969605cf1079Smrg	    for i in $predeps $postdeps; do
969704007ebaSmrg	      # can't use Xsed below, because $i might contain '/'
969805cf1079Smrg	      tmp_deplibs=`$ECHO " $tmp_deplibs" | $SED "s|$i||"`
969904007ebaSmrg	    done
970004007ebaSmrg	  fi
970104007ebaSmrg	  case $tmp_deplibs in
970204007ebaSmrg	  *[!\	\ ]*)
970304007ebaSmrg	    echo
970405cf1079Smrg	    if test none = "$deplibs_check_method"; then
970504007ebaSmrg	      echo "*** Warning: inter-library dependencies are not supported in this platform."
970604007ebaSmrg	    else
970704007ebaSmrg	      echo "*** Warning: inter-library dependencies are not known to be supported."
970804007ebaSmrg	    fi
970904007ebaSmrg	    echo "*** All declared inter-library dependencies are being dropped."
971004007ebaSmrg	    droppeddeps=yes
971104007ebaSmrg	    ;;
971204007ebaSmrg	  esac
971304007ebaSmrg	  ;;
971404007ebaSmrg	esac
971504007ebaSmrg	versuffix=$versuffix_save
971604007ebaSmrg	major=$major_save
971704007ebaSmrg	release=$release_save
971804007ebaSmrg	libname=$libname_save
971904007ebaSmrg	name=$name_save
972004007ebaSmrg
972104007ebaSmrg	case $host in
972204007ebaSmrg	*-*-rhapsody* | *-*-darwin1.[012])
972304007ebaSmrg	  # On Rhapsody replace the C library with the System framework
972404007ebaSmrg	  newdeplibs=`$ECHO " $newdeplibs" | $SED 's/ -lc / System.ltframework /'`
972504007ebaSmrg	  ;;
972604007ebaSmrg	esac
972704007ebaSmrg
972805cf1079Smrg	if test yes = "$droppeddeps"; then
972905cf1079Smrg	  if test yes = "$module"; then
973004007ebaSmrg	    echo
973104007ebaSmrg	    echo "*** Warning: libtool could not satisfy all declared inter-library"
973204007ebaSmrg	    $ECHO "*** dependencies of module $libname.  Therefore, libtool will create"
973304007ebaSmrg	    echo "*** a static module, that should work as long as the dlopening"
973404007ebaSmrg	    echo "*** application is linked with the -dlopen flag."
973504007ebaSmrg	    if test -z "$global_symbol_pipe"; then
973604007ebaSmrg	      echo
973704007ebaSmrg	      echo "*** However, this would only work if libtool was able to extract symbol"
973805cf1079Smrg	      echo "*** lists from a program, using 'nm' or equivalent, but libtool could"
973904007ebaSmrg	      echo "*** not find such a program.  So, this module is probably useless."
974005cf1079Smrg	      echo "*** 'nm' from GNU binutils and a full rebuild may help."
974104007ebaSmrg	    fi
974205cf1079Smrg	    if test no = "$build_old_libs"; then
974305cf1079Smrg	      oldlibs=$output_objdir/$libname.$libext
974404007ebaSmrg	      build_libtool_libs=module
974504007ebaSmrg	      build_old_libs=yes
974604007ebaSmrg	    else
974704007ebaSmrg	      build_libtool_libs=no
974804007ebaSmrg	    fi
974904007ebaSmrg	  else
975004007ebaSmrg	    echo "*** The inter-library dependencies that have been dropped here will be"
975104007ebaSmrg	    echo "*** automatically added whenever a program is linked with this library"
975204007ebaSmrg	    echo "*** or is declared to -dlopen it."
975304007ebaSmrg
975405cf1079Smrg	    if test no = "$allow_undefined"; then
975504007ebaSmrg	      echo
975604007ebaSmrg	      echo "*** Since this library must not contain undefined symbols,"
975704007ebaSmrg	      echo "*** because either the platform does not support them or"
975804007ebaSmrg	      echo "*** it was explicitly requested with -no-undefined,"
975904007ebaSmrg	      echo "*** libtool will only create a static version of it."
976005cf1079Smrg	      if test no = "$build_old_libs"; then
976105cf1079Smrg		oldlibs=$output_objdir/$libname.$libext
976204007ebaSmrg		build_libtool_libs=module
976304007ebaSmrg		build_old_libs=yes
976404007ebaSmrg	      else
976504007ebaSmrg		build_libtool_libs=no
976604007ebaSmrg	      fi
976704007ebaSmrg	    fi
976804007ebaSmrg	  fi
976904007ebaSmrg	fi
977004007ebaSmrg	# Done checking deplibs!
977104007ebaSmrg	deplibs=$newdeplibs
977204007ebaSmrg      fi
977304007ebaSmrg      # Time to change all our "foo.ltframework" stuff back to "-framework foo"
977404007ebaSmrg      case $host in
977504007ebaSmrg	*-*-darwin*)
977604007ebaSmrg	  newdeplibs=`$ECHO " $newdeplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'`
977704007ebaSmrg	  new_inherited_linker_flags=`$ECHO " $new_inherited_linker_flags" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'`
977804007ebaSmrg	  deplibs=`$ECHO " $deplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'`
977904007ebaSmrg	  ;;
978004007ebaSmrg      esac
978104007ebaSmrg
978204007ebaSmrg      # move library search paths that coincide with paths to not yet
978304007ebaSmrg      # installed libraries to the beginning of the library search list
978404007ebaSmrg      new_libs=
978504007ebaSmrg      for path in $notinst_path; do
978604007ebaSmrg	case " $new_libs " in
978704007ebaSmrg	*" -L$path/$objdir "*) ;;
978804007ebaSmrg	*)
978904007ebaSmrg	  case " $deplibs " in
979004007ebaSmrg	  *" -L$path/$objdir "*)
979104007ebaSmrg	    func_append new_libs " -L$path/$objdir" ;;
979204007ebaSmrg	  esac
979304007ebaSmrg	  ;;
979404007ebaSmrg	esac
979504007ebaSmrg      done
979604007ebaSmrg      for deplib in $deplibs; do
979704007ebaSmrg	case $deplib in
979804007ebaSmrg	-L*)
979904007ebaSmrg	  case " $new_libs " in
980004007ebaSmrg	  *" $deplib "*) ;;
980104007ebaSmrg	  *) func_append new_libs " $deplib" ;;
980204007ebaSmrg	  esac
980304007ebaSmrg	  ;;
980404007ebaSmrg	*) func_append new_libs " $deplib" ;;
980504007ebaSmrg	esac
980604007ebaSmrg      done
980705cf1079Smrg      deplibs=$new_libs
980804007ebaSmrg
980904007ebaSmrg      # All the library-specific variables (install_libdir is set above).
981004007ebaSmrg      library_names=
981104007ebaSmrg      old_library=
981204007ebaSmrg      dlname=
981304007ebaSmrg
981404007ebaSmrg      # Test again, we may have decided not to build it any more
981505cf1079Smrg      if test yes = "$build_libtool_libs"; then
981605cf1079Smrg	# Remove $wl instances when linking with ld.
981704007ebaSmrg	# FIXME: should test the right _cmds variable.
981804007ebaSmrg	case $archive_cmds in
981904007ebaSmrg	  *\$LD\ *) wl= ;;
982004007ebaSmrg        esac
982105cf1079Smrg	if test yes = "$hardcode_into_libs"; then
982204007ebaSmrg	  # Hardcode the library paths
982304007ebaSmrg	  hardcode_libdirs=
982404007ebaSmrg	  dep_rpath=
982505cf1079Smrg	  rpath=$finalize_rpath
982605cf1079Smrg	  test relink = "$opt_mode" || rpath=$compile_rpath$rpath
982704007ebaSmrg	  for libdir in $rpath; do
982804007ebaSmrg	    if test -n "$hardcode_libdir_flag_spec"; then
982904007ebaSmrg	      if test -n "$hardcode_libdir_separator"; then
983004007ebaSmrg		func_replace_sysroot "$libdir"
983104007ebaSmrg		libdir=$func_replace_sysroot_result
983204007ebaSmrg		if test -z "$hardcode_libdirs"; then
983305cf1079Smrg		  hardcode_libdirs=$libdir
983404007ebaSmrg		else
983504007ebaSmrg		  # Just accumulate the unique libdirs.
983604007ebaSmrg		  case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in
983704007ebaSmrg		  *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*)
983804007ebaSmrg		    ;;
983904007ebaSmrg		  *)
984004007ebaSmrg		    func_append hardcode_libdirs "$hardcode_libdir_separator$libdir"
984104007ebaSmrg		    ;;
984204007ebaSmrg		  esac
984304007ebaSmrg		fi
984404007ebaSmrg	      else
984504007ebaSmrg		eval flag=\"$hardcode_libdir_flag_spec\"
984604007ebaSmrg		func_append dep_rpath " $flag"
984704007ebaSmrg	      fi
984804007ebaSmrg	    elif test -n "$runpath_var"; then
984904007ebaSmrg	      case "$perm_rpath " in
985004007ebaSmrg	      *" $libdir "*) ;;
985104007ebaSmrg	      *) func_append perm_rpath " $libdir" ;;
985204007ebaSmrg	      esac
985304007ebaSmrg	    fi
985404007ebaSmrg	  done
985504007ebaSmrg	  # Substitute the hardcoded libdirs into the rpath.
985604007ebaSmrg	  if test -n "$hardcode_libdir_separator" &&
985704007ebaSmrg	     test -n "$hardcode_libdirs"; then
985805cf1079Smrg	    libdir=$hardcode_libdirs
985904007ebaSmrg	    eval "dep_rpath=\"$hardcode_libdir_flag_spec\""
986004007ebaSmrg	  fi
986104007ebaSmrg	  if test -n "$runpath_var" && test -n "$perm_rpath"; then
986204007ebaSmrg	    # We should set the runpath_var.
986304007ebaSmrg	    rpath=
986404007ebaSmrg	    for dir in $perm_rpath; do
986504007ebaSmrg	      func_append rpath "$dir:"
986604007ebaSmrg	    done
986704007ebaSmrg	    eval "$runpath_var='$rpath\$$runpath_var'; export $runpath_var"
986804007ebaSmrg	  fi
986904007ebaSmrg	  test -n "$dep_rpath" && deplibs="$dep_rpath $deplibs"
987004007ebaSmrg	fi
987104007ebaSmrg
987205cf1079Smrg	shlibpath=$finalize_shlibpath
987305cf1079Smrg	test relink = "$opt_mode" || shlibpath=$compile_shlibpath$shlibpath
987404007ebaSmrg	if test -n "$shlibpath"; then
987504007ebaSmrg	  eval "$shlibpath_var='$shlibpath\$$shlibpath_var'; export $shlibpath_var"
987604007ebaSmrg	fi
987704007ebaSmrg
987804007ebaSmrg	# Get the real and link names of the library.
987904007ebaSmrg	eval shared_ext=\"$shrext_cmds\"
988004007ebaSmrg	eval library_names=\"$library_names_spec\"
988104007ebaSmrg	set dummy $library_names
988204007ebaSmrg	shift
988305cf1079Smrg	realname=$1
988404007ebaSmrg	shift
988504007ebaSmrg
988604007ebaSmrg	if test -n "$soname_spec"; then
988704007ebaSmrg	  eval soname=\"$soname_spec\"
988804007ebaSmrg	else
988905cf1079Smrg	  soname=$realname
989004007ebaSmrg	fi
989104007ebaSmrg	if test -z "$dlname"; then
989204007ebaSmrg	  dlname=$soname
989304007ebaSmrg	fi
989404007ebaSmrg
989505cf1079Smrg	lib=$output_objdir/$realname
989604007ebaSmrg	linknames=
989704007ebaSmrg	for link
989804007ebaSmrg	do
989904007ebaSmrg	  func_append linknames " $link"
990004007ebaSmrg	done
990104007ebaSmrg
990204007ebaSmrg	# Use standard objects if they are pic
990304007ebaSmrg	test -z "$pic_flag" && libobjs=`$ECHO "$libobjs" | $SP2NL | $SED "$lo2o" | $NL2SP`
990404007ebaSmrg	test "X$libobjs" = "X " && libobjs=
990504007ebaSmrg
990604007ebaSmrg	delfiles=
990704007ebaSmrg	if test -n "$export_symbols" && test -n "$include_expsyms"; then
990804007ebaSmrg	  $opt_dry_run || cp "$export_symbols" "$output_objdir/$libname.uexp"
990905cf1079Smrg	  export_symbols=$output_objdir/$libname.uexp
991004007ebaSmrg	  func_append delfiles " $export_symbols"
991104007ebaSmrg	fi
991204007ebaSmrg
991304007ebaSmrg	orig_export_symbols=
991404007ebaSmrg	case $host_os in
991504007ebaSmrg	cygwin* | mingw* | cegcc*)
991604007ebaSmrg	  if test -n "$export_symbols" && test -z "$export_symbols_regex"; then
991704007ebaSmrg	    # exporting using user supplied symfile
991805cf1079Smrg	    func_dll_def_p "$export_symbols" || {
991904007ebaSmrg	      # and it's NOT already a .def file. Must figure out
992004007ebaSmrg	      # which of the given symbols are data symbols and tag
992104007ebaSmrg	      # them as such. So, trigger use of export_symbols_cmds.
992204007ebaSmrg	      # export_symbols gets reassigned inside the "prepare
992304007ebaSmrg	      # the list of exported symbols" if statement, so the
992404007ebaSmrg	      # include_expsyms logic still works.
992505cf1079Smrg	      orig_export_symbols=$export_symbols
992604007ebaSmrg	      export_symbols=
992704007ebaSmrg	      always_export_symbols=yes
992805cf1079Smrg	    }
992904007ebaSmrg	  fi
993004007ebaSmrg	  ;;
993104007ebaSmrg	esac
993204007ebaSmrg
993304007ebaSmrg	# Prepare the list of exported symbols
993404007ebaSmrg	if test -z "$export_symbols"; then
993505cf1079Smrg	  if test yes = "$always_export_symbols" || test -n "$export_symbols_regex"; then
993605cf1079Smrg	    func_verbose "generating symbol list for '$libname.la'"
993705cf1079Smrg	    export_symbols=$output_objdir/$libname.exp
993804007ebaSmrg	    $opt_dry_run || $RM $export_symbols
993904007ebaSmrg	    cmds=$export_symbols_cmds
994005cf1079Smrg	    save_ifs=$IFS; IFS='~'
994104007ebaSmrg	    for cmd1 in $cmds; do
994205cf1079Smrg	      IFS=$save_ifs
994304007ebaSmrg	      # Take the normal branch if the nm_file_list_spec branch
994404007ebaSmrg	      # doesn't work or if tool conversion is not needed.
994504007ebaSmrg	      case $nm_file_list_spec~$to_tool_file_cmd in
994604007ebaSmrg		*~func_convert_file_noop | *~func_convert_file_msys_to_w32 | ~*)
994704007ebaSmrg		  try_normal_branch=yes
994804007ebaSmrg		  eval cmd=\"$cmd1\"
994904007ebaSmrg		  func_len " $cmd"
995004007ebaSmrg		  len=$func_len_result
995104007ebaSmrg		  ;;
995204007ebaSmrg		*)
995304007ebaSmrg		  try_normal_branch=no
995404007ebaSmrg		  ;;
995504007ebaSmrg	      esac
995605cf1079Smrg	      if test yes = "$try_normal_branch" \
995704007ebaSmrg		 && { test "$len" -lt "$max_cmd_len" \
995804007ebaSmrg		      || test "$max_cmd_len" -le -1; }
995904007ebaSmrg	      then
996004007ebaSmrg		func_show_eval "$cmd" 'exit $?'
996104007ebaSmrg		skipped_export=false
996204007ebaSmrg	      elif test -n "$nm_file_list_spec"; then
996304007ebaSmrg		func_basename "$output"
996404007ebaSmrg		output_la=$func_basename_result
996504007ebaSmrg		save_libobjs=$libobjs
996604007ebaSmrg		save_output=$output
996705cf1079Smrg		output=$output_objdir/$output_la.nm
996804007ebaSmrg		func_to_tool_file "$output"
996904007ebaSmrg		libobjs=$nm_file_list_spec$func_to_tool_file_result
997004007ebaSmrg		func_append delfiles " $output"
997104007ebaSmrg		func_verbose "creating $NM input file list: $output"
997204007ebaSmrg		for obj in $save_libobjs; do
997304007ebaSmrg		  func_to_tool_file "$obj"
997404007ebaSmrg		  $ECHO "$func_to_tool_file_result"
997504007ebaSmrg		done > "$output"
997604007ebaSmrg		eval cmd=\"$cmd1\"
997704007ebaSmrg		func_show_eval "$cmd" 'exit $?'
997804007ebaSmrg		output=$save_output
997904007ebaSmrg		libobjs=$save_libobjs
998004007ebaSmrg		skipped_export=false
998104007ebaSmrg	      else
998204007ebaSmrg		# The command line is too long to execute in one step.
998304007ebaSmrg		func_verbose "using reloadable object file for export list..."
998404007ebaSmrg		skipped_export=:
998504007ebaSmrg		# Break out early, otherwise skipped_export may be
998604007ebaSmrg		# set to false by a later but shorter cmd.
998704007ebaSmrg		break
998804007ebaSmrg	      fi
998904007ebaSmrg	    done
999005cf1079Smrg	    IFS=$save_ifs
999105cf1079Smrg	    if test -n "$export_symbols_regex" && test : != "$skipped_export"; then
999204007ebaSmrg	      func_show_eval '$EGREP -e "$export_symbols_regex" "$export_symbols" > "${export_symbols}T"'
999304007ebaSmrg	      func_show_eval '$MV "${export_symbols}T" "$export_symbols"'
999404007ebaSmrg	    fi
999504007ebaSmrg	  fi
999604007ebaSmrg	fi
999704007ebaSmrg
999804007ebaSmrg	if test -n "$export_symbols" && test -n "$include_expsyms"; then
999905cf1079Smrg	  tmp_export_symbols=$export_symbols
1000005cf1079Smrg	  test -n "$orig_export_symbols" && tmp_export_symbols=$orig_export_symbols
1000104007ebaSmrg	  $opt_dry_run || eval '$ECHO "$include_expsyms" | $SP2NL >> "$tmp_export_symbols"'
1000204007ebaSmrg	fi
1000304007ebaSmrg
1000405cf1079Smrg	if test : != "$skipped_export" && test -n "$orig_export_symbols"; then
1000504007ebaSmrg	  # The given exports_symbols file has to be filtered, so filter it.
1000605cf1079Smrg	  func_verbose "filter symbol list for '$libname.la' to tag DATA exports"
1000704007ebaSmrg	  # FIXME: $output_objdir/$libname.filter potentially contains lots of
1000805cf1079Smrg	  # 's' commands, which not all seds can handle. GNU sed should be fine
1000904007ebaSmrg	  # though. Also, the filter scales superlinearly with the number of
1001004007ebaSmrg	  # global variables. join(1) would be nice here, but unfortunately
1001104007ebaSmrg	  # isn't a blessed tool.
1001204007ebaSmrg	  $opt_dry_run || $SED -e '/[ ,]DATA/!d;s,\(.*\)\([ \,].*\),s|^\1$|\1\2|,' < $export_symbols > $output_objdir/$libname.filter
1001304007ebaSmrg	  func_append delfiles " $export_symbols $output_objdir/$libname.filter"
1001404007ebaSmrg	  export_symbols=$output_objdir/$libname.def
1001504007ebaSmrg	  $opt_dry_run || $SED -f $output_objdir/$libname.filter < $orig_export_symbols > $export_symbols
1001604007ebaSmrg	fi
1001704007ebaSmrg
1001804007ebaSmrg	tmp_deplibs=
1001904007ebaSmrg	for test_deplib in $deplibs; do
1002004007ebaSmrg	  case " $convenience " in
1002104007ebaSmrg	  *" $test_deplib "*) ;;
1002204007ebaSmrg	  *)
1002304007ebaSmrg	    func_append tmp_deplibs " $test_deplib"
1002404007ebaSmrg	    ;;
1002504007ebaSmrg	  esac
1002604007ebaSmrg	done
1002705cf1079Smrg	deplibs=$tmp_deplibs
1002804007ebaSmrg
1002904007ebaSmrg	if test -n "$convenience"; then
1003004007ebaSmrg	  if test -n "$whole_archive_flag_spec" &&
1003105cf1079Smrg	    test yes = "$compiler_needs_object" &&
1003204007ebaSmrg	    test -z "$libobjs"; then
1003304007ebaSmrg	    # extract the archives, so we have objects to list.
1003404007ebaSmrg	    # TODO: could optimize this to just extract one archive.
1003504007ebaSmrg	    whole_archive_flag_spec=
1003604007ebaSmrg	  fi
1003704007ebaSmrg	  if test -n "$whole_archive_flag_spec"; then
1003804007ebaSmrg	    save_libobjs=$libobjs
1003904007ebaSmrg	    eval libobjs=\"\$libobjs $whole_archive_flag_spec\"
1004004007ebaSmrg	    test "X$libobjs" = "X " && libobjs=
1004104007ebaSmrg	  else
1004205cf1079Smrg	    gentop=$output_objdir/${outputname}x
1004304007ebaSmrg	    func_append generated " $gentop"
1004404007ebaSmrg
1004504007ebaSmrg	    func_extract_archives $gentop $convenience
1004604007ebaSmrg	    func_append libobjs " $func_extract_archives_result"
1004704007ebaSmrg	    test "X$libobjs" = "X " && libobjs=
1004804007ebaSmrg	  fi
1004904007ebaSmrg	fi
1005004007ebaSmrg
1005105cf1079Smrg	if test yes = "$thread_safe" && test -n "$thread_safe_flag_spec"; then
1005204007ebaSmrg	  eval flag=\"$thread_safe_flag_spec\"
1005304007ebaSmrg	  func_append linker_flags " $flag"
1005404007ebaSmrg	fi
1005504007ebaSmrg
1005604007ebaSmrg	# Make a backup of the uninstalled library when relinking
1005705cf1079Smrg	if test relink = "$opt_mode"; then
1005804007ebaSmrg	  $opt_dry_run || eval '(cd $output_objdir && $RM ${realname}U && $MV $realname ${realname}U)' || exit $?
1005904007ebaSmrg	fi
1006004007ebaSmrg
1006104007ebaSmrg	# Do each of the archive commands.
1006205cf1079Smrg	if test yes = "$module" && test -n "$module_cmds"; then
1006304007ebaSmrg	  if test -n "$export_symbols" && test -n "$module_expsym_cmds"; then
1006404007ebaSmrg	    eval test_cmds=\"$module_expsym_cmds\"
1006504007ebaSmrg	    cmds=$module_expsym_cmds
1006604007ebaSmrg	  else
1006704007ebaSmrg	    eval test_cmds=\"$module_cmds\"
1006804007ebaSmrg	    cmds=$module_cmds
1006904007ebaSmrg	  fi
1007004007ebaSmrg	else
1007104007ebaSmrg	  if test -n "$export_symbols" && test -n "$archive_expsym_cmds"; then
1007204007ebaSmrg	    eval test_cmds=\"$archive_expsym_cmds\"
1007304007ebaSmrg	    cmds=$archive_expsym_cmds
1007404007ebaSmrg	  else
1007504007ebaSmrg	    eval test_cmds=\"$archive_cmds\"
1007604007ebaSmrg	    cmds=$archive_cmds
1007704007ebaSmrg	  fi
1007804007ebaSmrg	fi
1007904007ebaSmrg
1008005cf1079Smrg	if test : != "$skipped_export" &&
1008104007ebaSmrg	   func_len " $test_cmds" &&
1008204007ebaSmrg	   len=$func_len_result &&
1008304007ebaSmrg	   test "$len" -lt "$max_cmd_len" || test "$max_cmd_len" -le -1; then
1008404007ebaSmrg	  :
1008504007ebaSmrg	else
1008604007ebaSmrg	  # The command line is too long to link in one step, link piecewise
1008704007ebaSmrg	  # or, if using GNU ld and skipped_export is not :, use a linker
1008804007ebaSmrg	  # script.
1008904007ebaSmrg
1009004007ebaSmrg	  # Save the value of $output and $libobjs because we want to
1009104007ebaSmrg	  # use them later.  If we have whole_archive_flag_spec, we
1009204007ebaSmrg	  # want to use save_libobjs as it was before
1009304007ebaSmrg	  # whole_archive_flag_spec was expanded, because we can't
1009404007ebaSmrg	  # assume the linker understands whole_archive_flag_spec.
1009504007ebaSmrg	  # This may have to be revisited, in case too many
1009604007ebaSmrg	  # convenience libraries get linked in and end up exceeding
1009704007ebaSmrg	  # the spec.
1009804007ebaSmrg	  if test -z "$convenience" || test -z "$whole_archive_flag_spec"; then
1009904007ebaSmrg	    save_libobjs=$libobjs
1010004007ebaSmrg	  fi
1010104007ebaSmrg	  save_output=$output
1010204007ebaSmrg	  func_basename "$output"
1010304007ebaSmrg	  output_la=$func_basename_result
1010404007ebaSmrg
1010504007ebaSmrg	  # Clear the reloadable object creation command queue and
1010604007ebaSmrg	  # initialize k to one.
1010704007ebaSmrg	  test_cmds=
1010804007ebaSmrg	  concat_cmds=
1010904007ebaSmrg	  objlist=
1011004007ebaSmrg	  last_robj=
1011104007ebaSmrg	  k=1
1011204007ebaSmrg
1011305cf1079Smrg	  if test -n "$save_libobjs" && test : != "$skipped_export" && test yes = "$with_gnu_ld"; then
1011405cf1079Smrg	    output=$output_objdir/$output_la.lnkscript
1011504007ebaSmrg	    func_verbose "creating GNU ld script: $output"
1011604007ebaSmrg	    echo 'INPUT (' > $output
1011704007ebaSmrg	    for obj in $save_libobjs
1011804007ebaSmrg	    do
1011904007ebaSmrg	      func_to_tool_file "$obj"
1012004007ebaSmrg	      $ECHO "$func_to_tool_file_result" >> $output
1012104007ebaSmrg	    done
1012204007ebaSmrg	    echo ')' >> $output
1012304007ebaSmrg	    func_append delfiles " $output"
1012404007ebaSmrg	    func_to_tool_file "$output"
1012504007ebaSmrg	    output=$func_to_tool_file_result
1012605cf1079Smrg	  elif test -n "$save_libobjs" && test : != "$skipped_export" && test -n "$file_list_spec"; then
1012705cf1079Smrg	    output=$output_objdir/$output_la.lnk
1012804007ebaSmrg	    func_verbose "creating linker input file list: $output"
1012904007ebaSmrg	    : > $output
1013004007ebaSmrg	    set x $save_libobjs
1013104007ebaSmrg	    shift
1013204007ebaSmrg	    firstobj=
1013305cf1079Smrg	    if test yes = "$compiler_needs_object"; then
1013404007ebaSmrg	      firstobj="$1 "
1013504007ebaSmrg	      shift
1013604007ebaSmrg	    fi
1013704007ebaSmrg	    for obj
1013804007ebaSmrg	    do
1013904007ebaSmrg	      func_to_tool_file "$obj"
1014004007ebaSmrg	      $ECHO "$func_to_tool_file_result" >> $output
1014104007ebaSmrg	    done
1014204007ebaSmrg	    func_append delfiles " $output"
1014304007ebaSmrg	    func_to_tool_file "$output"
1014404007ebaSmrg	    output=$firstobj\"$file_list_spec$func_to_tool_file_result\"
1014504007ebaSmrg	  else
1014604007ebaSmrg	    if test -n "$save_libobjs"; then
1014704007ebaSmrg	      func_verbose "creating reloadable object files..."
1014805cf1079Smrg	      output=$output_objdir/$output_la-$k.$objext
1014904007ebaSmrg	      eval test_cmds=\"$reload_cmds\"
1015004007ebaSmrg	      func_len " $test_cmds"
1015104007ebaSmrg	      len0=$func_len_result
1015204007ebaSmrg	      len=$len0
1015304007ebaSmrg
1015404007ebaSmrg	      # Loop over the list of objects to be linked.
1015504007ebaSmrg	      for obj in $save_libobjs
1015604007ebaSmrg	      do
1015704007ebaSmrg		func_len " $obj"
1015804007ebaSmrg		func_arith $len + $func_len_result
1015904007ebaSmrg		len=$func_arith_result
1016005cf1079Smrg		if test -z "$objlist" ||
1016104007ebaSmrg		   test "$len" -lt "$max_cmd_len"; then
1016204007ebaSmrg		  func_append objlist " $obj"
1016304007ebaSmrg		else
1016404007ebaSmrg		  # The command $test_cmds is almost too long, add a
1016504007ebaSmrg		  # command to the queue.
1016605cf1079Smrg		  if test 1 -eq "$k"; then
1016704007ebaSmrg		    # The first file doesn't have a previous command to add.
1016804007ebaSmrg		    reload_objs=$objlist
1016904007ebaSmrg		    eval concat_cmds=\"$reload_cmds\"
1017004007ebaSmrg		  else
1017104007ebaSmrg		    # All subsequent reloadable object files will link in
1017204007ebaSmrg		    # the last one created.
1017304007ebaSmrg		    reload_objs="$objlist $last_robj"
1017404007ebaSmrg		    eval concat_cmds=\"\$concat_cmds~$reload_cmds~\$RM $last_robj\"
1017504007ebaSmrg		  fi
1017605cf1079Smrg		  last_robj=$output_objdir/$output_la-$k.$objext
1017704007ebaSmrg		  func_arith $k + 1
1017804007ebaSmrg		  k=$func_arith_result
1017905cf1079Smrg		  output=$output_objdir/$output_la-$k.$objext
1018004007ebaSmrg		  objlist=" $obj"
1018104007ebaSmrg		  func_len " $last_robj"
1018204007ebaSmrg		  func_arith $len0 + $func_len_result
1018304007ebaSmrg		  len=$func_arith_result
1018404007ebaSmrg		fi
1018504007ebaSmrg	      done
1018604007ebaSmrg	      # Handle the remaining objects by creating one last
1018704007ebaSmrg	      # reloadable object file.  All subsequent reloadable object
1018804007ebaSmrg	      # files will link in the last one created.
1018904007ebaSmrg	      test -z "$concat_cmds" || concat_cmds=$concat_cmds~
1019004007ebaSmrg	      reload_objs="$objlist $last_robj"
1019105cf1079Smrg	      eval concat_cmds=\"\$concat_cmds$reload_cmds\"
1019204007ebaSmrg	      if test -n "$last_robj"; then
1019305cf1079Smrg	        eval concat_cmds=\"\$concat_cmds~\$RM $last_robj\"
1019404007ebaSmrg	      fi
1019504007ebaSmrg	      func_append delfiles " $output"
1019604007ebaSmrg
1019704007ebaSmrg	    else
1019804007ebaSmrg	      output=
1019904007ebaSmrg	    fi
1020004007ebaSmrg
1020105cf1079Smrg	    ${skipped_export-false} && {
1020205cf1079Smrg	      func_verbose "generating symbol list for '$libname.la'"
1020305cf1079Smrg	      export_symbols=$output_objdir/$libname.exp
1020404007ebaSmrg	      $opt_dry_run || $RM $export_symbols
1020504007ebaSmrg	      libobjs=$output
1020604007ebaSmrg	      # Append the command to create the export file.
1020704007ebaSmrg	      test -z "$concat_cmds" || concat_cmds=$concat_cmds~
1020804007ebaSmrg	      eval concat_cmds=\"\$concat_cmds$export_symbols_cmds\"
1020904007ebaSmrg	      if test -n "$last_robj"; then
1021004007ebaSmrg		eval concat_cmds=\"\$concat_cmds~\$RM $last_robj\"
1021104007ebaSmrg	      fi
1021205cf1079Smrg	    }
1021304007ebaSmrg
1021404007ebaSmrg	    test -n "$save_libobjs" &&
1021504007ebaSmrg	      func_verbose "creating a temporary reloadable object file: $output"
1021604007ebaSmrg
1021704007ebaSmrg	    # Loop through the commands generated above and execute them.
1021805cf1079Smrg	    save_ifs=$IFS; IFS='~'
1021904007ebaSmrg	    for cmd in $concat_cmds; do
1022005cf1079Smrg	      IFS=$save_ifs
1022105cf1079Smrg	      $opt_quiet || {
1022279d5fcd7Smrg		  func_quote_arg expand,pretty "$cmd"
1022379d5fcd7Smrg		  eval "func_echo $func_quote_arg_result"
1022404007ebaSmrg	      }
1022504007ebaSmrg	      $opt_dry_run || eval "$cmd" || {
1022604007ebaSmrg		lt_exit=$?
1022704007ebaSmrg
1022804007ebaSmrg		# Restore the uninstalled library and exit
1022905cf1079Smrg		if test relink = "$opt_mode"; then
1023004007ebaSmrg		  ( cd "$output_objdir" && \
1023104007ebaSmrg		    $RM "${realname}T" && \
1023204007ebaSmrg		    $MV "${realname}U" "$realname" )
1023304007ebaSmrg		fi
1023404007ebaSmrg
1023504007ebaSmrg		exit $lt_exit
1023604007ebaSmrg	      }
1023704007ebaSmrg	    done
1023805cf1079Smrg	    IFS=$save_ifs
1023904007ebaSmrg
1024004007ebaSmrg	    if test -n "$export_symbols_regex" && ${skipped_export-false}; then
1024104007ebaSmrg	      func_show_eval '$EGREP -e "$export_symbols_regex" "$export_symbols" > "${export_symbols}T"'
1024204007ebaSmrg	      func_show_eval '$MV "${export_symbols}T" "$export_symbols"'
1024304007ebaSmrg	    fi
1024404007ebaSmrg	  fi
1024504007ebaSmrg
1024605cf1079Smrg          ${skipped_export-false} && {
1024704007ebaSmrg	    if test -n "$export_symbols" && test -n "$include_expsyms"; then
1024805cf1079Smrg	      tmp_export_symbols=$export_symbols
1024905cf1079Smrg	      test -n "$orig_export_symbols" && tmp_export_symbols=$orig_export_symbols
1025004007ebaSmrg	      $opt_dry_run || eval '$ECHO "$include_expsyms" | $SP2NL >> "$tmp_export_symbols"'
1025104007ebaSmrg	    fi
1025204007ebaSmrg
1025304007ebaSmrg	    if test -n "$orig_export_symbols"; then
1025404007ebaSmrg	      # The given exports_symbols file has to be filtered, so filter it.
1025505cf1079Smrg	      func_verbose "filter symbol list for '$libname.la' to tag DATA exports"
1025604007ebaSmrg	      # FIXME: $output_objdir/$libname.filter potentially contains lots of
1025705cf1079Smrg	      # 's' commands, which not all seds can handle. GNU sed should be fine
1025804007ebaSmrg	      # though. Also, the filter scales superlinearly with the number of
1025904007ebaSmrg	      # global variables. join(1) would be nice here, but unfortunately
1026004007ebaSmrg	      # isn't a blessed tool.
1026104007ebaSmrg	      $opt_dry_run || $SED -e '/[ ,]DATA/!d;s,\(.*\)\([ \,].*\),s|^\1$|\1\2|,' < $export_symbols > $output_objdir/$libname.filter
1026204007ebaSmrg	      func_append delfiles " $export_symbols $output_objdir/$libname.filter"
1026304007ebaSmrg	      export_symbols=$output_objdir/$libname.def
1026404007ebaSmrg	      $opt_dry_run || $SED -f $output_objdir/$libname.filter < $orig_export_symbols > $export_symbols
1026504007ebaSmrg	    fi
1026605cf1079Smrg	  }
1026704007ebaSmrg
1026804007ebaSmrg	  libobjs=$output
1026904007ebaSmrg	  # Restore the value of output.
1027004007ebaSmrg	  output=$save_output
1027104007ebaSmrg
1027204007ebaSmrg	  if test -n "$convenience" && test -n "$whole_archive_flag_spec"; then
1027304007ebaSmrg	    eval libobjs=\"\$libobjs $whole_archive_flag_spec\"
1027404007ebaSmrg	    test "X$libobjs" = "X " && libobjs=
1027504007ebaSmrg	  fi
1027604007ebaSmrg	  # Expand the library linking commands again to reset the
1027704007ebaSmrg	  # value of $libobjs for piecewise linking.
1027804007ebaSmrg
1027904007ebaSmrg	  # Do each of the archive commands.
1028005cf1079Smrg	  if test yes = "$module" && test -n "$module_cmds"; then
1028104007ebaSmrg	    if test -n "$export_symbols" && test -n "$module_expsym_cmds"; then
1028204007ebaSmrg	      cmds=$module_expsym_cmds
1028304007ebaSmrg	    else
1028404007ebaSmrg	      cmds=$module_cmds
1028504007ebaSmrg	    fi
1028604007ebaSmrg	  else
1028704007ebaSmrg	    if test -n "$export_symbols" && test -n "$archive_expsym_cmds"; then
1028804007ebaSmrg	      cmds=$archive_expsym_cmds
1028904007ebaSmrg	    else
1029004007ebaSmrg	      cmds=$archive_cmds
1029104007ebaSmrg	    fi
1029204007ebaSmrg	  fi
1029304007ebaSmrg	fi
1029404007ebaSmrg
1029504007ebaSmrg	if test -n "$delfiles"; then
1029604007ebaSmrg	  # Append the command to remove temporary files to $cmds.
1029704007ebaSmrg	  eval cmds=\"\$cmds~\$RM $delfiles\"
1029804007ebaSmrg	fi
1029904007ebaSmrg
1030004007ebaSmrg	# Add any objects from preloaded convenience libraries
1030104007ebaSmrg	if test -n "$dlprefiles"; then
1030205cf1079Smrg	  gentop=$output_objdir/${outputname}x
1030304007ebaSmrg	  func_append generated " $gentop"
1030404007ebaSmrg
1030504007ebaSmrg	  func_extract_archives $gentop $dlprefiles
1030604007ebaSmrg	  func_append libobjs " $func_extract_archives_result"
1030704007ebaSmrg	  test "X$libobjs" = "X " && libobjs=
1030804007ebaSmrg	fi
1030904007ebaSmrg
1031005cf1079Smrg	save_ifs=$IFS; IFS='~'
1031104007ebaSmrg	for cmd in $cmds; do
1031205cf1079Smrg	  IFS=$sp$nl
1031304007ebaSmrg	  eval cmd=\"$cmd\"
1031405cf1079Smrg	  IFS=$save_ifs
1031505cf1079Smrg	  $opt_quiet || {
1031679d5fcd7Smrg	    func_quote_arg expand,pretty "$cmd"
1031779d5fcd7Smrg	    eval "func_echo $func_quote_arg_result"
1031804007ebaSmrg	  }
1031904007ebaSmrg	  $opt_dry_run || eval "$cmd" || {
1032004007ebaSmrg	    lt_exit=$?
1032104007ebaSmrg
1032204007ebaSmrg	    # Restore the uninstalled library and exit
1032305cf1079Smrg	    if test relink = "$opt_mode"; then
1032404007ebaSmrg	      ( cd "$output_objdir" && \
1032504007ebaSmrg	        $RM "${realname}T" && \
1032604007ebaSmrg		$MV "${realname}U" "$realname" )
1032704007ebaSmrg	    fi
1032804007ebaSmrg
1032904007ebaSmrg	    exit $lt_exit
1033004007ebaSmrg	  }
1033104007ebaSmrg	done
1033205cf1079Smrg	IFS=$save_ifs
1033304007ebaSmrg
1033404007ebaSmrg	# Restore the uninstalled library and exit
1033505cf1079Smrg	if test relink = "$opt_mode"; then
1033604007ebaSmrg	  $opt_dry_run || eval '(cd $output_objdir && $RM ${realname}T && $MV $realname ${realname}T && $MV ${realname}U $realname)' || exit $?
1033704007ebaSmrg
1033804007ebaSmrg	  if test -n "$convenience"; then
1033904007ebaSmrg	    if test -z "$whole_archive_flag_spec"; then
1034004007ebaSmrg	      func_show_eval '${RM}r "$gentop"'
1034104007ebaSmrg	    fi
1034204007ebaSmrg	  fi
1034304007ebaSmrg
1034404007ebaSmrg	  exit $EXIT_SUCCESS
1034504007ebaSmrg	fi
1034604007ebaSmrg
1034704007ebaSmrg	# Create links to the real library.
1034804007ebaSmrg	for linkname in $linknames; do
1034904007ebaSmrg	  if test "$realname" != "$linkname"; then
1035004007ebaSmrg	    func_show_eval '(cd "$output_objdir" && $RM "$linkname" && $LN_S "$realname" "$linkname")' 'exit $?'
1035104007ebaSmrg	  fi
1035204007ebaSmrg	done
1035304007ebaSmrg
1035404007ebaSmrg	# If -module or -export-dynamic was specified, set the dlname.
1035505cf1079Smrg	if test yes = "$module" || test yes = "$export_dynamic"; then
1035604007ebaSmrg	  # On all known operating systems, these are identical.
1035705cf1079Smrg	  dlname=$soname
1035804007ebaSmrg	fi
1035904007ebaSmrg      fi
1036004007ebaSmrg      ;;
1036104007ebaSmrg
1036204007ebaSmrg    obj)
1036305cf1079Smrg      if test -n "$dlfiles$dlprefiles" || test no != "$dlself"; then
1036405cf1079Smrg	func_warning "'-dlopen' is ignored for objects"
1036504007ebaSmrg      fi
1036604007ebaSmrg
1036704007ebaSmrg      case " $deplibs" in
1036804007ebaSmrg      *\ -l* | *\ -L*)
1036905cf1079Smrg	func_warning "'-l' and '-L' are ignored for objects" ;;
1037004007ebaSmrg      esac
1037104007ebaSmrg
1037204007ebaSmrg      test -n "$rpath" && \
1037305cf1079Smrg	func_warning "'-rpath' is ignored for objects"
1037404007ebaSmrg
1037504007ebaSmrg      test -n "$xrpath" && \
1037605cf1079Smrg	func_warning "'-R' is ignored for objects"
1037704007ebaSmrg
1037804007ebaSmrg      test -n "$vinfo" && \
1037905cf1079Smrg	func_warning "'-version-info' is ignored for objects"
1038004007ebaSmrg
1038104007ebaSmrg      test -n "$release" && \
1038205cf1079Smrg	func_warning "'-release' is ignored for objects"
1038304007ebaSmrg
1038404007ebaSmrg      case $output in
1038504007ebaSmrg      *.lo)
1038604007ebaSmrg	test -n "$objs$old_deplibs" && \
1038705cf1079Smrg	  func_fatal_error "cannot build library object '$output' from non-libtool objects"
1038804007ebaSmrg
1038904007ebaSmrg	libobj=$output
1039004007ebaSmrg	func_lo2o "$libobj"
1039104007ebaSmrg	obj=$func_lo2o_result
1039204007ebaSmrg	;;
1039304007ebaSmrg      *)
1039404007ebaSmrg	libobj=
1039505cf1079Smrg	obj=$output
1039604007ebaSmrg	;;
1039704007ebaSmrg      esac
1039804007ebaSmrg
1039904007ebaSmrg      # Delete the old objects.
1040004007ebaSmrg      $opt_dry_run || $RM $obj $libobj
1040104007ebaSmrg
1040204007ebaSmrg      # Objects from convenience libraries.  This assumes
1040304007ebaSmrg      # single-version convenience libraries.  Whenever we create
1040404007ebaSmrg      # different ones for PIC/non-PIC, this we'll have to duplicate
1040504007ebaSmrg      # the extraction.
1040604007ebaSmrg      reload_conv_objs=
1040704007ebaSmrg      gentop=
1040805cf1079Smrg      # if reload_cmds runs $LD directly, get rid of -Wl from
1040905cf1079Smrg      # whole_archive_flag_spec and hope we can get by with turning comma
1041005cf1079Smrg      # into space.
1041105cf1079Smrg      case $reload_cmds in
1041205cf1079Smrg        *\$LD[\ \$]*) wl= ;;
1041305cf1079Smrg      esac
1041404007ebaSmrg      if test -n "$convenience"; then
1041504007ebaSmrg	if test -n "$whole_archive_flag_spec"; then
1041604007ebaSmrg	  eval tmp_whole_archive_flags=\"$whole_archive_flag_spec\"
1041705cf1079Smrg	  test -n "$wl" || tmp_whole_archive_flags=`$ECHO "$tmp_whole_archive_flags" | $SED 's|,| |g'`
1041805cf1079Smrg	  reload_conv_objs=$reload_objs\ $tmp_whole_archive_flags
1041904007ebaSmrg	else
1042005cf1079Smrg	  gentop=$output_objdir/${obj}x
1042104007ebaSmrg	  func_append generated " $gentop"
1042204007ebaSmrg
1042304007ebaSmrg	  func_extract_archives $gentop $convenience
1042404007ebaSmrg	  reload_conv_objs="$reload_objs $func_extract_archives_result"
1042504007ebaSmrg	fi
1042604007ebaSmrg      fi
1042704007ebaSmrg
1042804007ebaSmrg      # If we're not building shared, we need to use non_pic_objs
1042905cf1079Smrg      test yes = "$build_libtool_libs" || libobjs=$non_pic_objects
1043004007ebaSmrg
1043104007ebaSmrg      # Create the old-style object.
1043205cf1079Smrg      reload_objs=$objs$old_deplibs' '`$ECHO "$libobjs" | $SP2NL | $SED "/\.$libext$/d; /\.lib$/d; $lo2o" | $NL2SP`' '$reload_conv_objs
1043304007ebaSmrg
1043405cf1079Smrg      output=$obj
1043504007ebaSmrg      func_execute_cmds "$reload_cmds" 'exit $?'
1043604007ebaSmrg
1043704007ebaSmrg      # Exit if we aren't doing a library object file.
1043804007ebaSmrg      if test -z "$libobj"; then
1043904007ebaSmrg	if test -n "$gentop"; then
1044004007ebaSmrg	  func_show_eval '${RM}r "$gentop"'
1044104007ebaSmrg	fi
1044204007ebaSmrg
1044304007ebaSmrg	exit $EXIT_SUCCESS
1044404007ebaSmrg      fi
1044504007ebaSmrg
1044605cf1079Smrg      test yes = "$build_libtool_libs" || {
1044704007ebaSmrg	if test -n "$gentop"; then
1044804007ebaSmrg	  func_show_eval '${RM}r "$gentop"'
1044904007ebaSmrg	fi
1045004007ebaSmrg
1045104007ebaSmrg	# Create an invalid libtool object if no PIC, so that we don't
1045204007ebaSmrg	# accidentally link it into a program.
1045304007ebaSmrg	# $show "echo timestamp > $libobj"
1045404007ebaSmrg	# $opt_dry_run || eval "echo timestamp > $libobj" || exit $?
1045504007ebaSmrg	exit $EXIT_SUCCESS
1045605cf1079Smrg      }
1045704007ebaSmrg
1045805cf1079Smrg      if test -n "$pic_flag" || test default != "$pic_mode"; then
1045904007ebaSmrg	# Only do commands if we really have different PIC objects.
1046004007ebaSmrg	reload_objs="$libobjs $reload_conv_objs"
1046105cf1079Smrg	output=$libobj
1046204007ebaSmrg	func_execute_cmds "$reload_cmds" 'exit $?'
1046304007ebaSmrg      fi
1046404007ebaSmrg
1046504007ebaSmrg      if test -n "$gentop"; then
1046604007ebaSmrg	func_show_eval '${RM}r "$gentop"'
1046704007ebaSmrg      fi
1046804007ebaSmrg
1046904007ebaSmrg      exit $EXIT_SUCCESS
1047004007ebaSmrg      ;;
1047104007ebaSmrg
1047204007ebaSmrg    prog)
1047304007ebaSmrg      case $host in
1047404007ebaSmrg	*cygwin*) func_stripname '' '.exe' "$output"
1047504007ebaSmrg	          output=$func_stripname_result.exe;;
1047604007ebaSmrg      esac
1047704007ebaSmrg      test -n "$vinfo" && \
1047805cf1079Smrg	func_warning "'-version-info' is ignored for programs"
1047904007ebaSmrg
1048004007ebaSmrg      test -n "$release" && \
1048105cf1079Smrg	func_warning "'-release' is ignored for programs"
1048204007ebaSmrg
1048305cf1079Smrg      $preload \
1048405cf1079Smrg	&& test unknown,unknown,unknown = "$dlopen_support,$dlopen_self,$dlopen_self_static" \
1048505cf1079Smrg	&& func_warning "'LT_INIT([dlopen])' not used. Assuming no dlopen support."
1048604007ebaSmrg
1048704007ebaSmrg      case $host in
1048804007ebaSmrg      *-*-rhapsody* | *-*-darwin1.[012])
1048904007ebaSmrg	# On Rhapsody replace the C library is the System framework
1049004007ebaSmrg	compile_deplibs=`$ECHO " $compile_deplibs" | $SED 's/ -lc / System.ltframework /'`
1049104007ebaSmrg	finalize_deplibs=`$ECHO " $finalize_deplibs" | $SED 's/ -lc / System.ltframework /'`
1049204007ebaSmrg	;;
1049304007ebaSmrg      esac
1049404007ebaSmrg
1049504007ebaSmrg      case $host in
1049604007ebaSmrg      *-*-darwin*)
1049704007ebaSmrg	# Don't allow lazy linking, it breaks C++ global constructors
1049804007ebaSmrg	# But is supposedly fixed on 10.4 or later (yay!).
1049905cf1079Smrg	if test CXX = "$tagname"; then
1050004007ebaSmrg	  case ${MACOSX_DEPLOYMENT_TARGET-10.0} in
1050104007ebaSmrg	    10.[0123])
1050205cf1079Smrg	      func_append compile_command " $wl-bind_at_load"
1050305cf1079Smrg	      func_append finalize_command " $wl-bind_at_load"
1050404007ebaSmrg	    ;;
1050504007ebaSmrg	  esac
1050604007ebaSmrg	fi
1050704007ebaSmrg	# Time to change all our "foo.ltframework" stuff back to "-framework foo"
1050804007ebaSmrg	compile_deplibs=`$ECHO " $compile_deplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'`
1050904007ebaSmrg	finalize_deplibs=`$ECHO " $finalize_deplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'`
1051004007ebaSmrg	;;
1051104007ebaSmrg      esac
1051204007ebaSmrg
1051304007ebaSmrg
1051404007ebaSmrg      # move library search paths that coincide with paths to not yet
1051504007ebaSmrg      # installed libraries to the beginning of the library search list
1051604007ebaSmrg      new_libs=
1051704007ebaSmrg      for path in $notinst_path; do
1051804007ebaSmrg	case " $new_libs " in
1051904007ebaSmrg	*" -L$path/$objdir "*) ;;
1052004007ebaSmrg	*)
1052104007ebaSmrg	  case " $compile_deplibs " in
1052204007ebaSmrg	  *" -L$path/$objdir "*)
1052304007ebaSmrg	    func_append new_libs " -L$path/$objdir" ;;
1052404007ebaSmrg	  esac
1052504007ebaSmrg	  ;;
1052604007ebaSmrg	esac
1052704007ebaSmrg      done
1052804007ebaSmrg      for deplib in $compile_deplibs; do
1052904007ebaSmrg	case $deplib in
1053004007ebaSmrg	-L*)
1053104007ebaSmrg	  case " $new_libs " in
1053204007ebaSmrg	  *" $deplib "*) ;;
1053304007ebaSmrg	  *) func_append new_libs " $deplib" ;;
1053404007ebaSmrg	  esac
1053504007ebaSmrg	  ;;
1053604007ebaSmrg	*) func_append new_libs " $deplib" ;;
1053704007ebaSmrg	esac
1053804007ebaSmrg      done
1053905cf1079Smrg      compile_deplibs=$new_libs
1054004007ebaSmrg
1054104007ebaSmrg
1054204007ebaSmrg      func_append compile_command " $compile_deplibs"
1054304007ebaSmrg      func_append finalize_command " $finalize_deplibs"
1054404007ebaSmrg
1054504007ebaSmrg      if test -n "$rpath$xrpath"; then
1054604007ebaSmrg	# If the user specified any rpath flags, then add them.
1054704007ebaSmrg	for libdir in $rpath $xrpath; do
1054804007ebaSmrg	  # This is the magic to use -rpath.
1054904007ebaSmrg	  case "$finalize_rpath " in
1055004007ebaSmrg	  *" $libdir "*) ;;
1055104007ebaSmrg	  *) func_append finalize_rpath " $libdir" ;;
1055204007ebaSmrg	  esac
1055304007ebaSmrg	done
1055404007ebaSmrg      fi
1055504007ebaSmrg
1055604007ebaSmrg      # Now hardcode the library paths
1055704007ebaSmrg      rpath=
1055804007ebaSmrg      hardcode_libdirs=
1055904007ebaSmrg      for libdir in $compile_rpath $finalize_rpath; do
1056004007ebaSmrg	if test -n "$hardcode_libdir_flag_spec"; then
1056104007ebaSmrg	  if test -n "$hardcode_libdir_separator"; then
1056204007ebaSmrg	    if test -z "$hardcode_libdirs"; then
1056305cf1079Smrg	      hardcode_libdirs=$libdir
1056404007ebaSmrg	    else
1056504007ebaSmrg	      # Just accumulate the unique libdirs.
1056604007ebaSmrg	      case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in
1056704007ebaSmrg	      *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*)
1056804007ebaSmrg		;;
1056904007ebaSmrg	      *)
1057004007ebaSmrg		func_append hardcode_libdirs "$hardcode_libdir_separator$libdir"
1057104007ebaSmrg		;;
1057204007ebaSmrg	      esac
1057304007ebaSmrg	    fi
1057404007ebaSmrg	  else
1057504007ebaSmrg	    eval flag=\"$hardcode_libdir_flag_spec\"
1057604007ebaSmrg	    func_append rpath " $flag"
1057704007ebaSmrg	  fi
1057804007ebaSmrg	elif test -n "$runpath_var"; then
1057904007ebaSmrg	  case "$perm_rpath " in
1058004007ebaSmrg	  *" $libdir "*) ;;
1058104007ebaSmrg	  *) func_append perm_rpath " $libdir" ;;
1058204007ebaSmrg	  esac
1058304007ebaSmrg	fi
1058404007ebaSmrg	case $host in
1058504007ebaSmrg	*-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-cegcc*)
1058605cf1079Smrg	  testbindir=`$ECHO "$libdir" | $SED -e 's*/lib$*/bin*'`
1058704007ebaSmrg	  case :$dllsearchpath: in
1058804007ebaSmrg	  *":$libdir:"*) ;;
1058904007ebaSmrg	  ::) dllsearchpath=$libdir;;
1059004007ebaSmrg	  *) func_append dllsearchpath ":$libdir";;
1059104007ebaSmrg	  esac
1059204007ebaSmrg	  case :$dllsearchpath: in
1059304007ebaSmrg	  *":$testbindir:"*) ;;
1059404007ebaSmrg	  ::) dllsearchpath=$testbindir;;
1059504007ebaSmrg	  *) func_append dllsearchpath ":$testbindir";;
1059604007ebaSmrg	  esac
1059704007ebaSmrg	  ;;
1059804007ebaSmrg	esac
1059904007ebaSmrg      done
1060004007ebaSmrg      # Substitute the hardcoded libdirs into the rpath.
1060104007ebaSmrg      if test -n "$hardcode_libdir_separator" &&
1060204007ebaSmrg	 test -n "$hardcode_libdirs"; then
1060305cf1079Smrg	libdir=$hardcode_libdirs
1060404007ebaSmrg	eval rpath=\" $hardcode_libdir_flag_spec\"
1060504007ebaSmrg      fi
1060605cf1079Smrg      compile_rpath=$rpath
1060704007ebaSmrg
1060804007ebaSmrg      rpath=
1060904007ebaSmrg      hardcode_libdirs=
1061004007ebaSmrg      for libdir in $finalize_rpath; do
1061104007ebaSmrg	if test -n "$hardcode_libdir_flag_spec"; then
1061204007ebaSmrg	  if test -n "$hardcode_libdir_separator"; then
1061304007ebaSmrg	    if test -z "$hardcode_libdirs"; then
1061405cf1079Smrg	      hardcode_libdirs=$libdir
1061504007ebaSmrg	    else
1061604007ebaSmrg	      # Just accumulate the unique libdirs.
1061704007ebaSmrg	      case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in
1061804007ebaSmrg	      *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*)
1061904007ebaSmrg		;;
1062004007ebaSmrg	      *)
1062104007ebaSmrg		func_append hardcode_libdirs "$hardcode_libdir_separator$libdir"
1062204007ebaSmrg		;;
1062304007ebaSmrg	      esac
1062404007ebaSmrg	    fi
1062504007ebaSmrg	  else
1062604007ebaSmrg	    eval flag=\"$hardcode_libdir_flag_spec\"
1062704007ebaSmrg	    func_append rpath " $flag"
1062804007ebaSmrg	  fi
1062904007ebaSmrg	elif test -n "$runpath_var"; then
1063004007ebaSmrg	  case "$finalize_perm_rpath " in
1063104007ebaSmrg	  *" $libdir "*) ;;
1063204007ebaSmrg	  *) func_append finalize_perm_rpath " $libdir" ;;
1063304007ebaSmrg	  esac
1063404007ebaSmrg	fi
1063504007ebaSmrg      done
1063604007ebaSmrg      # Substitute the hardcoded libdirs into the rpath.
1063704007ebaSmrg      if test -n "$hardcode_libdir_separator" &&
1063804007ebaSmrg	 test -n "$hardcode_libdirs"; then
1063905cf1079Smrg	libdir=$hardcode_libdirs
1064004007ebaSmrg	eval rpath=\" $hardcode_libdir_flag_spec\"
1064104007ebaSmrg      fi
1064205cf1079Smrg      finalize_rpath=$rpath
1064304007ebaSmrg
1064405cf1079Smrg      if test -n "$libobjs" && test yes = "$build_old_libs"; then
1064504007ebaSmrg	# Transform all the library objects into standard objects.
1064604007ebaSmrg	compile_command=`$ECHO "$compile_command" | $SP2NL | $SED "$lo2o" | $NL2SP`
1064704007ebaSmrg	finalize_command=`$ECHO "$finalize_command" | $SP2NL | $SED "$lo2o" | $NL2SP`
1064804007ebaSmrg      fi
1064904007ebaSmrg
1065005cf1079Smrg      func_generate_dlsyms "$outputname" "@PROGRAM@" false
1065104007ebaSmrg
1065204007ebaSmrg      # template prelinking step
1065304007ebaSmrg      if test -n "$prelink_cmds"; then
1065404007ebaSmrg	func_execute_cmds "$prelink_cmds" 'exit $?'
1065504007ebaSmrg      fi
1065604007ebaSmrg
1065705cf1079Smrg      wrappers_required=:
1065804007ebaSmrg      case $host in
1065904007ebaSmrg      *cegcc* | *mingw32ce*)
1066004007ebaSmrg        # Disable wrappers for cegcc and mingw32ce hosts, we are cross compiling anyway.
1066105cf1079Smrg        wrappers_required=false
1066204007ebaSmrg        ;;
1066304007ebaSmrg      *cygwin* | *mingw* )
1066405cf1079Smrg        test yes = "$build_libtool_libs" || wrappers_required=false
1066504007ebaSmrg        ;;
1066604007ebaSmrg      *)
1066705cf1079Smrg        if test no = "$need_relink" || test yes != "$build_libtool_libs"; then
1066805cf1079Smrg          wrappers_required=false
1066904007ebaSmrg        fi
1067004007ebaSmrg        ;;
1067104007ebaSmrg      esac
1067205cf1079Smrg      $wrappers_required || {
1067304007ebaSmrg	# Replace the output file specification.
1067404007ebaSmrg	compile_command=`$ECHO "$compile_command" | $SED 's%@OUTPUT@%'"$output"'%g'`
1067505cf1079Smrg	link_command=$compile_command$compile_rpath
1067604007ebaSmrg
1067704007ebaSmrg	# We have no uninstalled library dependencies, so finalize right now.
1067804007ebaSmrg	exit_status=0
1067904007ebaSmrg	func_show_eval "$link_command" 'exit_status=$?'
1068004007ebaSmrg
1068104007ebaSmrg	if test -n "$postlink_cmds"; then
1068204007ebaSmrg	  func_to_tool_file "$output"
1068304007ebaSmrg	  postlink_cmds=`func_echo_all "$postlink_cmds" | $SED -e 's%@OUTPUT@%'"$output"'%g' -e 's%@TOOL_OUTPUT@%'"$func_to_tool_file_result"'%g'`
1068404007ebaSmrg	  func_execute_cmds "$postlink_cmds" 'exit $?'
1068504007ebaSmrg	fi
1068604007ebaSmrg
1068704007ebaSmrg	# Delete the generated files.
1068805cf1079Smrg	if test -f "$output_objdir/${outputname}S.$objext"; then
1068905cf1079Smrg	  func_show_eval '$RM "$output_objdir/${outputname}S.$objext"'
1069004007ebaSmrg	fi
1069104007ebaSmrg
1069204007ebaSmrg	exit $exit_status
1069305cf1079Smrg      }
1069404007ebaSmrg
1069504007ebaSmrg      if test -n "$compile_shlibpath$finalize_shlibpath"; then
1069604007ebaSmrg	compile_command="$shlibpath_var=\"$compile_shlibpath$finalize_shlibpath\$$shlibpath_var\" $compile_command"
1069704007ebaSmrg      fi
1069804007ebaSmrg      if test -n "$finalize_shlibpath"; then
1069904007ebaSmrg	finalize_command="$shlibpath_var=\"$finalize_shlibpath\$$shlibpath_var\" $finalize_command"
1070004007ebaSmrg      fi
1070104007ebaSmrg
1070204007ebaSmrg      compile_var=
1070304007ebaSmrg      finalize_var=
1070404007ebaSmrg      if test -n "$runpath_var"; then
1070504007ebaSmrg	if test -n "$perm_rpath"; then
1070604007ebaSmrg	  # We should set the runpath_var.
1070704007ebaSmrg	  rpath=
1070804007ebaSmrg	  for dir in $perm_rpath; do
1070904007ebaSmrg	    func_append rpath "$dir:"
1071004007ebaSmrg	  done
1071104007ebaSmrg	  compile_var="$runpath_var=\"$rpath\$$runpath_var\" "
1071204007ebaSmrg	fi
1071304007ebaSmrg	if test -n "$finalize_perm_rpath"; then
1071404007ebaSmrg	  # We should set the runpath_var.
1071504007ebaSmrg	  rpath=
1071604007ebaSmrg	  for dir in $finalize_perm_rpath; do
1071704007ebaSmrg	    func_append rpath "$dir:"
1071804007ebaSmrg	  done
1071904007ebaSmrg	  finalize_var="$runpath_var=\"$rpath\$$runpath_var\" "
1072004007ebaSmrg	fi
1072104007ebaSmrg      fi
1072204007ebaSmrg
1072305cf1079Smrg      if test yes = "$no_install"; then
1072404007ebaSmrg	# We don't need to create a wrapper script.
1072505cf1079Smrg	link_command=$compile_var$compile_command$compile_rpath
1072604007ebaSmrg	# Replace the output file specification.
1072704007ebaSmrg	link_command=`$ECHO "$link_command" | $SED 's%@OUTPUT@%'"$output"'%g'`
1072804007ebaSmrg	# Delete the old output file.
1072904007ebaSmrg	$opt_dry_run || $RM $output
1073004007ebaSmrg	# Link the executable and exit
1073104007ebaSmrg	func_show_eval "$link_command" 'exit $?'
1073204007ebaSmrg
1073304007ebaSmrg	if test -n "$postlink_cmds"; then
1073404007ebaSmrg	  func_to_tool_file "$output"
1073504007ebaSmrg	  postlink_cmds=`func_echo_all "$postlink_cmds" | $SED -e 's%@OUTPUT@%'"$output"'%g' -e 's%@TOOL_OUTPUT@%'"$func_to_tool_file_result"'%g'`
1073604007ebaSmrg	  func_execute_cmds "$postlink_cmds" 'exit $?'
1073704007ebaSmrg	fi
1073804007ebaSmrg
1073904007ebaSmrg	exit $EXIT_SUCCESS
1074004007ebaSmrg      fi
1074104007ebaSmrg
1074205cf1079Smrg      case $hardcode_action,$fast_install in
1074305cf1079Smrg        relink,*)
1074405cf1079Smrg	  # Fast installation is not supported
1074505cf1079Smrg	  link_command=$compile_var$compile_command$compile_rpath
1074605cf1079Smrg	  relink_command=$finalize_var$finalize_command$finalize_rpath
1074704007ebaSmrg
1074805cf1079Smrg	  func_warning "this platform does not like uninstalled shared libraries"
1074905cf1079Smrg	  func_warning "'$output' will be relinked during installation"
1075005cf1079Smrg	  ;;
1075105cf1079Smrg        *,yes)
1075205cf1079Smrg	  link_command=$finalize_var$compile_command$finalize_rpath
1075305cf1079Smrg	  relink_command=`$ECHO "$compile_var$compile_command$compile_rpath" | $SED 's%@OUTPUT@%\$progdir/\$file%g'`
1075405cf1079Smrg          ;;
1075505cf1079Smrg	*,no)
1075605cf1079Smrg	  link_command=$compile_var$compile_command$compile_rpath
1075705cf1079Smrg	  relink_command=$finalize_var$finalize_command$finalize_rpath
1075805cf1079Smrg          ;;
1075905cf1079Smrg	*,needless)
1076005cf1079Smrg	  link_command=$finalize_var$compile_command$finalize_rpath
1076105cf1079Smrg	  relink_command=
1076205cf1079Smrg          ;;
1076305cf1079Smrg      esac
1076404007ebaSmrg
1076504007ebaSmrg      # Replace the output file specification.
1076604007ebaSmrg      link_command=`$ECHO "$link_command" | $SED 's%@OUTPUT@%'"$output_objdir/$outputname"'%g'`
1076704007ebaSmrg
1076804007ebaSmrg      # Delete the old output files.
1076904007ebaSmrg      $opt_dry_run || $RM $output $output_objdir/$outputname $output_objdir/lt-$outputname
1077004007ebaSmrg
1077104007ebaSmrg      func_show_eval "$link_command" 'exit $?'
1077204007ebaSmrg
1077304007ebaSmrg      if test -n "$postlink_cmds"; then
1077404007ebaSmrg	func_to_tool_file "$output_objdir/$outputname"
1077504007ebaSmrg	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'`
1077604007ebaSmrg	func_execute_cmds "$postlink_cmds" 'exit $?'
1077704007ebaSmrg      fi
1077804007ebaSmrg
1077904007ebaSmrg      # Now create the wrapper script.
1078004007ebaSmrg      func_verbose "creating $output"
1078104007ebaSmrg
1078204007ebaSmrg      # Quote the relink command for shipping.
1078304007ebaSmrg      if test -n "$relink_command"; then
1078404007ebaSmrg	# Preserve any variables that may affect compiler behavior
1078504007ebaSmrg	for var in $variables_saved_for_relink; do
1078604007ebaSmrg	  if eval test -z \"\${$var+set}\"; then
1078704007ebaSmrg	    relink_command="{ test -z \"\${$var+set}\" || $lt_unset $var || { $var=; export $var; }; }; $relink_command"
1078804007ebaSmrg	  elif eval var_value=\$$var; test -z "$var_value"; then
1078904007ebaSmrg	    relink_command="$var=; export $var; $relink_command"
1079004007ebaSmrg	  else
1079179d5fcd7Smrg	    func_quote_arg pretty "$var_value"
1079279d5fcd7Smrg	    relink_command="$var=$func_quote_arg_result; export $var; $relink_command"
1079304007ebaSmrg	  fi
1079404007ebaSmrg	done
1079579d5fcd7Smrg	func_quote eval cd "`pwd`"
1079679d5fcd7Smrg	func_quote_arg pretty,unquoted "($func_quote_result; $relink_command)"
1079779d5fcd7Smrg	relink_command=$func_quote_arg_unquoted_result
1079804007ebaSmrg      fi
1079904007ebaSmrg
1080004007ebaSmrg      # Only actually do things if not in dry run mode.
1080104007ebaSmrg      $opt_dry_run || {
1080204007ebaSmrg	# win32 will think the script is a binary if it has
1080304007ebaSmrg	# a .exe suffix, so we strip it off here.
1080404007ebaSmrg	case $output in
1080504007ebaSmrg	  *.exe) func_stripname '' '.exe' "$output"
1080604007ebaSmrg	         output=$func_stripname_result ;;
1080704007ebaSmrg	esac
1080804007ebaSmrg	# test for cygwin because mv fails w/o .exe extensions
1080904007ebaSmrg	case $host in
1081004007ebaSmrg	  *cygwin*)
1081104007ebaSmrg	    exeext=.exe
1081204007ebaSmrg	    func_stripname '' '.exe' "$outputname"
1081304007ebaSmrg	    outputname=$func_stripname_result ;;
1081404007ebaSmrg	  *) exeext= ;;
1081504007ebaSmrg	esac
1081604007ebaSmrg	case $host in
1081704007ebaSmrg	  *cygwin* | *mingw* )
1081804007ebaSmrg	    func_dirname_and_basename "$output" "" "."
1081904007ebaSmrg	    output_name=$func_basename_result
1082004007ebaSmrg	    output_path=$func_dirname_result
1082105cf1079Smrg	    cwrappersource=$output_path/$objdir/lt-$output_name.c
1082205cf1079Smrg	    cwrapper=$output_path/$output_name.exe
1082304007ebaSmrg	    $RM $cwrappersource $cwrapper
1082404007ebaSmrg	    trap "$RM $cwrappersource $cwrapper; exit $EXIT_FAILURE" 1 2 15
1082504007ebaSmrg
1082604007ebaSmrg	    func_emit_cwrapperexe_src > $cwrappersource
1082704007ebaSmrg
1082804007ebaSmrg	    # The wrapper executable is built using the $host compiler,
1082904007ebaSmrg	    # because it contains $host paths and files. If cross-
1083004007ebaSmrg	    # compiling, it, like the target executable, must be
1083104007ebaSmrg	    # executed on the $host or under an emulation environment.
1083204007ebaSmrg	    $opt_dry_run || {
1083304007ebaSmrg	      $LTCC $LTCFLAGS -o $cwrapper $cwrappersource
1083404007ebaSmrg	      $STRIP $cwrapper
1083504007ebaSmrg	    }
1083604007ebaSmrg
1083704007ebaSmrg	    # Now, create the wrapper script for func_source use:
1083804007ebaSmrg	    func_ltwrapper_scriptname $cwrapper
1083904007ebaSmrg	    $RM $func_ltwrapper_scriptname_result
1084004007ebaSmrg	    trap "$RM $func_ltwrapper_scriptname_result; exit $EXIT_FAILURE" 1 2 15
1084104007ebaSmrg	    $opt_dry_run || {
1084204007ebaSmrg	      # note: this script will not be executed, so do not chmod.
1084305cf1079Smrg	      if test "x$build" = "x$host"; then
1084404007ebaSmrg		$cwrapper --lt-dump-script > $func_ltwrapper_scriptname_result
1084504007ebaSmrg	      else
1084604007ebaSmrg		func_emit_wrapper no > $func_ltwrapper_scriptname_result
1084704007ebaSmrg	      fi
1084804007ebaSmrg	    }
1084904007ebaSmrg	  ;;
1085004007ebaSmrg	  * )
1085104007ebaSmrg	    $RM $output
1085204007ebaSmrg	    trap "$RM $output; exit $EXIT_FAILURE" 1 2 15
1085304007ebaSmrg
1085404007ebaSmrg	    func_emit_wrapper no > $output
1085504007ebaSmrg	    chmod +x $output
1085604007ebaSmrg	  ;;
1085704007ebaSmrg	esac
1085804007ebaSmrg      }
1085904007ebaSmrg      exit $EXIT_SUCCESS
1086004007ebaSmrg      ;;
1086104007ebaSmrg    esac
1086204007ebaSmrg
1086304007ebaSmrg    # See if we need to build an old-fashioned archive.
1086404007ebaSmrg    for oldlib in $oldlibs; do
1086504007ebaSmrg
1086605cf1079Smrg      case $build_libtool_libs in
1086705cf1079Smrg        convenience)
1086805cf1079Smrg	  oldobjs="$libobjs_save $symfileobj"
1086905cf1079Smrg	  addlibs=$convenience
1087004007ebaSmrg	  build_libtool_libs=no
1087105cf1079Smrg	  ;;
1087205cf1079Smrg	module)
1087305cf1079Smrg	  oldobjs=$libobjs_save
1087405cf1079Smrg	  addlibs=$old_convenience
1087505cf1079Smrg	  build_libtool_libs=no
1087605cf1079Smrg          ;;
1087705cf1079Smrg	*)
1087804007ebaSmrg	  oldobjs="$old_deplibs $non_pic_objects"
1087905cf1079Smrg	  $preload && test -f "$symfileobj" \
1088005cf1079Smrg	    && func_append oldobjs " $symfileobj"
1088105cf1079Smrg	  addlibs=$old_convenience
1088205cf1079Smrg	  ;;
1088305cf1079Smrg      esac
1088404007ebaSmrg
1088504007ebaSmrg      if test -n "$addlibs"; then
1088605cf1079Smrg	gentop=$output_objdir/${outputname}x
1088704007ebaSmrg	func_append generated " $gentop"
1088804007ebaSmrg
1088904007ebaSmrg	func_extract_archives $gentop $addlibs
1089004007ebaSmrg	func_append oldobjs " $func_extract_archives_result"
1089104007ebaSmrg      fi
1089204007ebaSmrg
1089304007ebaSmrg      # Do each command in the archive commands.
1089405cf1079Smrg      if test -n "$old_archive_from_new_cmds" && test yes = "$build_libtool_libs"; then
1089504007ebaSmrg	cmds=$old_archive_from_new_cmds
1089604007ebaSmrg      else
1089704007ebaSmrg
1089804007ebaSmrg	# Add any objects from preloaded convenience libraries
1089904007ebaSmrg	if test -n "$dlprefiles"; then
1090005cf1079Smrg	  gentop=$output_objdir/${outputname}x
1090104007ebaSmrg	  func_append generated " $gentop"
1090204007ebaSmrg
1090304007ebaSmrg	  func_extract_archives $gentop $dlprefiles
1090404007ebaSmrg	  func_append oldobjs " $func_extract_archives_result"
1090504007ebaSmrg	fi
1090604007ebaSmrg
1090704007ebaSmrg	# POSIX demands no paths to be encoded in archives.  We have
1090804007ebaSmrg	# to avoid creating archives with duplicate basenames if we
1090904007ebaSmrg	# might have to extract them afterwards, e.g., when creating a
1091004007ebaSmrg	# static archive out of a convenience library, or when linking
1091104007ebaSmrg	# the entirety of a libtool archive into another (currently
1091204007ebaSmrg	# not supported by libtool).
1091304007ebaSmrg	if (for obj in $oldobjs
1091404007ebaSmrg	    do
1091504007ebaSmrg	      func_basename "$obj"
1091604007ebaSmrg	      $ECHO "$func_basename_result"
1091704007ebaSmrg	    done | sort | sort -uc >/dev/null 2>&1); then
1091804007ebaSmrg	  :
1091904007ebaSmrg	else
1092004007ebaSmrg	  echo "copying selected object files to avoid basename conflicts..."
1092105cf1079Smrg	  gentop=$output_objdir/${outputname}x
1092204007ebaSmrg	  func_append generated " $gentop"
1092304007ebaSmrg	  func_mkdir_p "$gentop"
1092404007ebaSmrg	  save_oldobjs=$oldobjs
1092504007ebaSmrg	  oldobjs=
1092604007ebaSmrg	  counter=1
1092704007ebaSmrg	  for obj in $save_oldobjs
1092804007ebaSmrg	  do
1092904007ebaSmrg	    func_basename "$obj"
1093005cf1079Smrg	    objbase=$func_basename_result
1093104007ebaSmrg	    case " $oldobjs " in
1093204007ebaSmrg	    " ") oldobjs=$obj ;;
1093304007ebaSmrg	    *[\ /]"$objbase "*)
1093404007ebaSmrg	      while :; do
1093504007ebaSmrg		# Make sure we don't pick an alternate name that also
1093604007ebaSmrg		# overlaps.
1093704007ebaSmrg		newobj=lt$counter-$objbase
1093804007ebaSmrg		func_arith $counter + 1
1093904007ebaSmrg		counter=$func_arith_result
1094004007ebaSmrg		case " $oldobjs " in
1094104007ebaSmrg		*[\ /]"$newobj "*) ;;
1094204007ebaSmrg		*) if test ! -f "$gentop/$newobj"; then break; fi ;;
1094304007ebaSmrg		esac
1094404007ebaSmrg	      done
1094504007ebaSmrg	      func_show_eval "ln $obj $gentop/$newobj || cp $obj $gentop/$newobj"
1094604007ebaSmrg	      func_append oldobjs " $gentop/$newobj"
1094704007ebaSmrg	      ;;
1094804007ebaSmrg	    *) func_append oldobjs " $obj" ;;
1094904007ebaSmrg	    esac
1095004007ebaSmrg	  done
1095104007ebaSmrg	fi
1095204007ebaSmrg	func_to_tool_file "$oldlib" func_convert_file_msys_to_w32
1095304007ebaSmrg	tool_oldlib=$func_to_tool_file_result
1095404007ebaSmrg	eval cmds=\"$old_archive_cmds\"
1095504007ebaSmrg
1095604007ebaSmrg	func_len " $cmds"
1095704007ebaSmrg	len=$func_len_result
1095804007ebaSmrg	if test "$len" -lt "$max_cmd_len" || test "$max_cmd_len" -le -1; then
1095904007ebaSmrg	  cmds=$old_archive_cmds
1096004007ebaSmrg	elif test -n "$archiver_list_spec"; then
1096104007ebaSmrg	  func_verbose "using command file archive linking..."
1096204007ebaSmrg	  for obj in $oldobjs
1096304007ebaSmrg	  do
1096404007ebaSmrg	    func_to_tool_file "$obj"
1096504007ebaSmrg	    $ECHO "$func_to_tool_file_result"
1096604007ebaSmrg	  done > $output_objdir/$libname.libcmd
1096704007ebaSmrg	  func_to_tool_file "$output_objdir/$libname.libcmd"
1096804007ebaSmrg	  oldobjs=" $archiver_list_spec$func_to_tool_file_result"
1096904007ebaSmrg	  cmds=$old_archive_cmds
1097004007ebaSmrg	else
1097104007ebaSmrg	  # the command line is too long to link in one step, link in parts
1097204007ebaSmrg	  func_verbose "using piecewise archive linking..."
1097304007ebaSmrg	  save_RANLIB=$RANLIB
1097404007ebaSmrg	  RANLIB=:
1097504007ebaSmrg	  objlist=
1097604007ebaSmrg	  concat_cmds=
1097704007ebaSmrg	  save_oldobjs=$oldobjs
1097804007ebaSmrg	  oldobjs=
1097904007ebaSmrg	  # Is there a better way of finding the last object in the list?
1098004007ebaSmrg	  for obj in $save_oldobjs
1098104007ebaSmrg	  do
1098204007ebaSmrg	    last_oldobj=$obj
1098304007ebaSmrg	  done
1098404007ebaSmrg	  eval test_cmds=\"$old_archive_cmds\"
1098504007ebaSmrg	  func_len " $test_cmds"
1098604007ebaSmrg	  len0=$func_len_result
1098704007ebaSmrg	  len=$len0
1098804007ebaSmrg	  for obj in $save_oldobjs
1098904007ebaSmrg	  do
1099004007ebaSmrg	    func_len " $obj"
1099104007ebaSmrg	    func_arith $len + $func_len_result
1099204007ebaSmrg	    len=$func_arith_result
1099304007ebaSmrg	    func_append objlist " $obj"
1099404007ebaSmrg	    if test "$len" -lt "$max_cmd_len"; then
1099504007ebaSmrg	      :
1099604007ebaSmrg	    else
1099704007ebaSmrg	      # the above command should be used before it gets too long
1099804007ebaSmrg	      oldobjs=$objlist
1099905cf1079Smrg	      if test "$obj" = "$last_oldobj"; then
1100004007ebaSmrg		RANLIB=$save_RANLIB
1100104007ebaSmrg	      fi
1100204007ebaSmrg	      test -z "$concat_cmds" || concat_cmds=$concat_cmds~
1100305cf1079Smrg	      eval concat_cmds=\"\$concat_cmds$old_archive_cmds\"
1100404007ebaSmrg	      objlist=
1100504007ebaSmrg	      len=$len0
1100604007ebaSmrg	    fi
1100704007ebaSmrg	  done
1100804007ebaSmrg	  RANLIB=$save_RANLIB
1100904007ebaSmrg	  oldobjs=$objlist
1101005cf1079Smrg	  if test -z "$oldobjs"; then
1101104007ebaSmrg	    eval cmds=\"\$concat_cmds\"
1101204007ebaSmrg	  else
1101304007ebaSmrg	    eval cmds=\"\$concat_cmds~\$old_archive_cmds\"
1101404007ebaSmrg	  fi
1101504007ebaSmrg	fi
1101604007ebaSmrg      fi
1101704007ebaSmrg      func_execute_cmds "$cmds" 'exit $?'
1101804007ebaSmrg    done
1101904007ebaSmrg
1102004007ebaSmrg    test -n "$generated" && \
1102104007ebaSmrg      func_show_eval "${RM}r$generated"
1102204007ebaSmrg
1102304007ebaSmrg    # Now create the libtool archive.
1102404007ebaSmrg    case $output in
1102504007ebaSmrg    *.la)
1102604007ebaSmrg      old_library=
1102705cf1079Smrg      test yes = "$build_old_libs" && old_library=$libname.$libext
1102804007ebaSmrg      func_verbose "creating $output"
1102904007ebaSmrg
1103004007ebaSmrg      # Preserve any variables that may affect compiler behavior
1103104007ebaSmrg      for var in $variables_saved_for_relink; do
1103204007ebaSmrg	if eval test -z \"\${$var+set}\"; then
1103304007ebaSmrg	  relink_command="{ test -z \"\${$var+set}\" || $lt_unset $var || { $var=; export $var; }; }; $relink_command"
1103404007ebaSmrg	elif eval var_value=\$$var; test -z "$var_value"; then
1103504007ebaSmrg	  relink_command="$var=; export $var; $relink_command"
1103604007ebaSmrg	else
1103779d5fcd7Smrg	  func_quote_arg pretty,unquoted "$var_value"
1103879d5fcd7Smrg	  relink_command="$var=$func_quote_arg_unquoted_result; export $var; $relink_command"
1103904007ebaSmrg	fi
1104004007ebaSmrg      done
1104104007ebaSmrg      # Quote the link command for shipping.
1104279d5fcd7Smrg      func_quote eval cd "`pwd`"
1104379d5fcd7Smrg      relink_command="($func_quote_result; $SHELL \"$progpath\" $preserve_args --mode=relink $libtool_args @inst_prefix_dir@)"
1104479d5fcd7Smrg      func_quote_arg pretty,unquoted "$relink_command"
1104579d5fcd7Smrg      relink_command=$func_quote_arg_unquoted_result
1104605cf1079Smrg      if test yes = "$hardcode_automatic"; then
1104704007ebaSmrg	relink_command=
1104804007ebaSmrg      fi
1104904007ebaSmrg
1105004007ebaSmrg      # Only create the output if not a dry run.
1105104007ebaSmrg      $opt_dry_run || {
1105204007ebaSmrg	for installed in no yes; do
1105305cf1079Smrg	  if test yes = "$installed"; then
1105404007ebaSmrg	    if test -z "$install_libdir"; then
1105504007ebaSmrg	      break
1105604007ebaSmrg	    fi
1105705cf1079Smrg	    output=$output_objdir/${outputname}i
1105804007ebaSmrg	    # Replace all uninstalled libtool libraries with the installed ones
1105904007ebaSmrg	    newdependency_libs=
1106004007ebaSmrg	    for deplib in $dependency_libs; do
1106104007ebaSmrg	      case $deplib in
1106204007ebaSmrg	      *.la)
1106304007ebaSmrg		func_basename "$deplib"
1106405cf1079Smrg		name=$func_basename_result
1106504007ebaSmrg		func_resolve_sysroot "$deplib"
1106605cf1079Smrg		eval libdir=`$SED -n -e 's/^libdir=\(.*\)$/\1/p' $func_resolve_sysroot_result`
1106704007ebaSmrg		test -z "$libdir" && \
1106805cf1079Smrg		  func_fatal_error "'$deplib' is not a valid libtool archive"
1106904007ebaSmrg		func_append newdependency_libs " ${lt_sysroot:+=}$libdir/$name"
1107004007ebaSmrg		;;
1107104007ebaSmrg	      -L*)
1107204007ebaSmrg		func_stripname -L '' "$deplib"
1107304007ebaSmrg		func_replace_sysroot "$func_stripname_result"
1107404007ebaSmrg		func_append newdependency_libs " -L$func_replace_sysroot_result"
1107504007ebaSmrg		;;
1107604007ebaSmrg	      -R*)
1107704007ebaSmrg		func_stripname -R '' "$deplib"
1107804007ebaSmrg		func_replace_sysroot "$func_stripname_result"
1107904007ebaSmrg		func_append newdependency_libs " -R$func_replace_sysroot_result"
1108004007ebaSmrg		;;
1108104007ebaSmrg	      *) func_append newdependency_libs " $deplib" ;;
1108204007ebaSmrg	      esac
1108304007ebaSmrg	    done
1108405cf1079Smrg	    dependency_libs=$newdependency_libs
1108504007ebaSmrg	    newdlfiles=
1108604007ebaSmrg
1108704007ebaSmrg	    for lib in $dlfiles; do
1108804007ebaSmrg	      case $lib in
1108904007ebaSmrg	      *.la)
1109004007ebaSmrg	        func_basename "$lib"
1109105cf1079Smrg		name=$func_basename_result
1109205cf1079Smrg		eval libdir=`$SED -n -e 's/^libdir=\(.*\)$/\1/p' $lib`
1109304007ebaSmrg		test -z "$libdir" && \
1109405cf1079Smrg		  func_fatal_error "'$lib' is not a valid libtool archive"
1109504007ebaSmrg		func_append newdlfiles " ${lt_sysroot:+=}$libdir/$name"
1109604007ebaSmrg		;;
1109704007ebaSmrg	      *) func_append newdlfiles " $lib" ;;
1109804007ebaSmrg	      esac
1109904007ebaSmrg	    done
1110005cf1079Smrg	    dlfiles=$newdlfiles
1110104007ebaSmrg	    newdlprefiles=
1110204007ebaSmrg	    for lib in $dlprefiles; do
1110304007ebaSmrg	      case $lib in
1110404007ebaSmrg	      *.la)
1110504007ebaSmrg		# Only pass preopened files to the pseudo-archive (for
1110604007ebaSmrg		# eventual linking with the app. that links it) if we
1110704007ebaSmrg		# didn't already link the preopened objects directly into
1110804007ebaSmrg		# the library:
1110904007ebaSmrg		func_basename "$lib"
1111005cf1079Smrg		name=$func_basename_result
1111105cf1079Smrg		eval libdir=`$SED -n -e 's/^libdir=\(.*\)$/\1/p' $lib`
1111204007ebaSmrg		test -z "$libdir" && \
1111305cf1079Smrg		  func_fatal_error "'$lib' is not a valid libtool archive"
1111404007ebaSmrg		func_append newdlprefiles " ${lt_sysroot:+=}$libdir/$name"
1111504007ebaSmrg		;;
1111604007ebaSmrg	      esac
1111704007ebaSmrg	    done
1111805cf1079Smrg	    dlprefiles=$newdlprefiles
1111904007ebaSmrg	  else
1112004007ebaSmrg	    newdlfiles=
1112104007ebaSmrg	    for lib in $dlfiles; do
1112204007ebaSmrg	      case $lib in
1112305cf1079Smrg		[\\/]* | [A-Za-z]:[\\/]*) abs=$lib ;;
1112404007ebaSmrg		*) abs=`pwd`"/$lib" ;;
1112504007ebaSmrg	      esac
1112604007ebaSmrg	      func_append newdlfiles " $abs"
1112704007ebaSmrg	    done
1112805cf1079Smrg	    dlfiles=$newdlfiles
1112904007ebaSmrg	    newdlprefiles=
1113004007ebaSmrg	    for lib in $dlprefiles; do
1113104007ebaSmrg	      case $lib in
1113205cf1079Smrg		[\\/]* | [A-Za-z]:[\\/]*) abs=$lib ;;
1113304007ebaSmrg		*) abs=`pwd`"/$lib" ;;
1113404007ebaSmrg	      esac
1113504007ebaSmrg	      func_append newdlprefiles " $abs"
1113604007ebaSmrg	    done
1113705cf1079Smrg	    dlprefiles=$newdlprefiles
1113804007ebaSmrg	  fi
1113904007ebaSmrg	  $RM $output
1114004007ebaSmrg	  # place dlname in correct position for cygwin
1114104007ebaSmrg	  # In fact, it would be nice if we could use this code for all target
1114204007ebaSmrg	  # systems that can't hard-code library paths into their executables
1114304007ebaSmrg	  # and that have no shared library path variable independent of PATH,
1114404007ebaSmrg	  # but it turns out we can't easily determine that from inspecting
1114504007ebaSmrg	  # libtool variables, so we have to hard-code the OSs to which it
1114604007ebaSmrg	  # applies here; at the moment, that means platforms that use the PE
1114704007ebaSmrg	  # object format with DLL files.  See the long comment at the top of
1114804007ebaSmrg	  # tests/bindir.at for full details.
1114904007ebaSmrg	  tdlname=$dlname
1115004007ebaSmrg	  case $host,$output,$installed,$module,$dlname in
1115104007ebaSmrg	    *cygwin*,*lai,yes,no,*.dll | *mingw*,*lai,yes,no,*.dll | *cegcc*,*lai,yes,no,*.dll)
1115204007ebaSmrg	      # If a -bindir argument was supplied, place the dll there.
1115305cf1079Smrg	      if test -n "$bindir"; then
1115404007ebaSmrg		func_relative_path "$install_libdir" "$bindir"
1115505cf1079Smrg		tdlname=$func_relative_path_result/$dlname
1115604007ebaSmrg	      else
1115704007ebaSmrg		# Otherwise fall back on heuristic.
1115804007ebaSmrg		tdlname=../bin/$dlname
1115904007ebaSmrg	      fi
1116004007ebaSmrg	      ;;
1116104007ebaSmrg	  esac
1116204007ebaSmrg	  $ECHO > $output "\
1116304007ebaSmrg# $outputname - a libtool library file
1116405cf1079Smrg# Generated by $PROGRAM (GNU $PACKAGE) $VERSION
1116504007ebaSmrg#
1116604007ebaSmrg# Please DO NOT delete this file!
1116704007ebaSmrg# It is necessary for linking the library.
1116804007ebaSmrg
1116904007ebaSmrg# The name that we can dlopen(3).
1117004007ebaSmrgdlname='$tdlname'
1117104007ebaSmrg
1117204007ebaSmrg# Names of this library.
1117304007ebaSmrglibrary_names='$library_names'
1117404007ebaSmrg
1117504007ebaSmrg# The name of the static archive.
1117604007ebaSmrgold_library='$old_library'
1117704007ebaSmrg
1117805cf1079Smrg# Linker flags that cannot go in dependency_libs.
1117904007ebaSmrginherited_linker_flags='$new_inherited_linker_flags'
1118004007ebaSmrg
1118104007ebaSmrg# Libraries that this one depends upon.
1118204007ebaSmrgdependency_libs='$dependency_libs'
1118304007ebaSmrg
1118404007ebaSmrg# Names of additional weak libraries provided by this library
1118504007ebaSmrgweak_library_names='$weak_libs'
1118604007ebaSmrg
1118704007ebaSmrg# Version information for $libname.
1118804007ebaSmrgcurrent=$current
1118904007ebaSmrgage=$age
1119004007ebaSmrgrevision=$revision
1119104007ebaSmrg
1119204007ebaSmrg# Is this an already installed library?
1119304007ebaSmrginstalled=$installed
1119404007ebaSmrg
1119504007ebaSmrg# Should we warn about portability when linking against -modules?
1119604007ebaSmrgshouldnotlink=$module
1119704007ebaSmrg
1119804007ebaSmrg# Files to dlopen/dlpreopen
1119904007ebaSmrgdlopen='$dlfiles'
1120004007ebaSmrgdlpreopen='$dlprefiles'
1120104007ebaSmrg
1120204007ebaSmrg# Directory that this library needs to be installed in:
1120304007ebaSmrglibdir='$install_libdir'"
1120405cf1079Smrg	  if test no,yes = "$installed,$need_relink"; then
1120504007ebaSmrg	    $ECHO >> $output "\
1120604007ebaSmrgrelink_command=\"$relink_command\""
1120704007ebaSmrg	  fi
1120804007ebaSmrg	done
1120904007ebaSmrg      }
1121004007ebaSmrg
1121104007ebaSmrg      # Do a symbolic link so that the libtool archive can be found in
1121204007ebaSmrg      # LD_LIBRARY_PATH before the program is installed.
1121304007ebaSmrg      func_show_eval '( cd "$output_objdir" && $RM "$outputname" && $LN_S "../$outputname" "$outputname" )' 'exit $?'
1121404007ebaSmrg      ;;
1121504007ebaSmrg    esac
1121604007ebaSmrg    exit $EXIT_SUCCESS
1121704007ebaSmrg}
1121804007ebaSmrg
1121905cf1079Smrgif test link = "$opt_mode" || test relink = "$opt_mode"; then
1122005cf1079Smrg  func_mode_link ${1+"$@"}
1122105cf1079Smrgfi
1122204007ebaSmrg
1122304007ebaSmrg
1122404007ebaSmrg# func_mode_uninstall arg...
1122504007ebaSmrgfunc_mode_uninstall ()
1122604007ebaSmrg{
1122705cf1079Smrg    $debug_cmd
1122805cf1079Smrg
1122905cf1079Smrg    RM=$nonopt
1123004007ebaSmrg    files=
1123105cf1079Smrg    rmforce=false
1123204007ebaSmrg    exit_status=0
1123304007ebaSmrg
1123404007ebaSmrg    # This variable tells wrapper scripts just to set variables rather
1123504007ebaSmrg    # than running their programs.
1123605cf1079Smrg    libtool_install_magic=$magic
1123704007ebaSmrg
1123804007ebaSmrg    for arg
1123904007ebaSmrg    do
1124004007ebaSmrg      case $arg in
1124105cf1079Smrg      -f) func_append RM " $arg"; rmforce=: ;;
1124204007ebaSmrg      -*) func_append RM " $arg" ;;
1124304007ebaSmrg      *) func_append files " $arg" ;;
1124404007ebaSmrg      esac
1124504007ebaSmrg    done
1124604007ebaSmrg
1124704007ebaSmrg    test -z "$RM" && \
1124804007ebaSmrg      func_fatal_help "you must specify an RM program"
1124904007ebaSmrg
1125004007ebaSmrg    rmdirs=
1125104007ebaSmrg
1125204007ebaSmrg    for file in $files; do
1125304007ebaSmrg      func_dirname "$file" "" "."
1125405cf1079Smrg      dir=$func_dirname_result
1125505cf1079Smrg      if test . = "$dir"; then
1125605cf1079Smrg	odir=$objdir
1125704007ebaSmrg      else
1125805cf1079Smrg	odir=$dir/$objdir
1125904007ebaSmrg      fi
1126004007ebaSmrg      func_basename "$file"
1126105cf1079Smrg      name=$func_basename_result
1126205cf1079Smrg      test uninstall = "$opt_mode" && odir=$dir
1126304007ebaSmrg
1126404007ebaSmrg      # Remember odir for removal later, being careful to avoid duplicates
1126505cf1079Smrg      if test clean = "$opt_mode"; then
1126604007ebaSmrg	case " $rmdirs " in
1126704007ebaSmrg	  *" $odir "*) ;;
1126804007ebaSmrg	  *) func_append rmdirs " $odir" ;;
1126904007ebaSmrg	esac
1127004007ebaSmrg      fi
1127104007ebaSmrg
1127204007ebaSmrg      # Don't error if the file doesn't exist and rm -f was used.
1127304007ebaSmrg      if { test -L "$file"; } >/dev/null 2>&1 ||
1127404007ebaSmrg	 { test -h "$file"; } >/dev/null 2>&1 ||
1127504007ebaSmrg	 test -f "$file"; then
1127604007ebaSmrg	:
1127704007ebaSmrg      elif test -d "$file"; then
1127804007ebaSmrg	exit_status=1
1127904007ebaSmrg	continue
1128005cf1079Smrg      elif $rmforce; then
1128104007ebaSmrg	continue
1128204007ebaSmrg      fi
1128304007ebaSmrg
1128405cf1079Smrg      rmfiles=$file
1128504007ebaSmrg
1128604007ebaSmrg      case $name in
1128704007ebaSmrg      *.la)
1128804007ebaSmrg	# Possibly a libtool archive, so verify it.
1128904007ebaSmrg	if func_lalib_p "$file"; then
1129004007ebaSmrg	  func_source $dir/$name
1129104007ebaSmrg
1129204007ebaSmrg	  # Delete the libtool libraries and symlinks.
1129304007ebaSmrg	  for n in $library_names; do
1129404007ebaSmrg	    func_append rmfiles " $odir/$n"
1129504007ebaSmrg	  done
1129604007ebaSmrg	  test -n "$old_library" && func_append rmfiles " $odir/$old_library"
1129704007ebaSmrg
1129805cf1079Smrg	  case $opt_mode in
1129904007ebaSmrg	  clean)
1130004007ebaSmrg	    case " $library_names " in
1130104007ebaSmrg	    *" $dlname "*) ;;
1130204007ebaSmrg	    *) test -n "$dlname" && func_append rmfiles " $odir/$dlname" ;;
1130304007ebaSmrg	    esac
1130404007ebaSmrg	    test -n "$libdir" && func_append rmfiles " $odir/$name $odir/${name}i"
1130504007ebaSmrg	    ;;
1130604007ebaSmrg	  uninstall)
1130704007ebaSmrg	    if test -n "$library_names"; then
1130804007ebaSmrg	      # Do each command in the postuninstall commands.
1130905cf1079Smrg	      func_execute_cmds "$postuninstall_cmds" '$rmforce || exit_status=1'
1131004007ebaSmrg	    fi
1131104007ebaSmrg
1131204007ebaSmrg	    if test -n "$old_library"; then
1131304007ebaSmrg	      # Do each command in the old_postuninstall commands.
1131405cf1079Smrg	      func_execute_cmds "$old_postuninstall_cmds" '$rmforce || exit_status=1'
1131504007ebaSmrg	    fi
1131604007ebaSmrg	    # FIXME: should reinstall the best remaining shared library.
1131704007ebaSmrg	    ;;
1131804007ebaSmrg	  esac
1131904007ebaSmrg	fi
1132004007ebaSmrg	;;
1132104007ebaSmrg
1132204007ebaSmrg      *.lo)
1132304007ebaSmrg	# Possibly a libtool object, so verify it.
1132404007ebaSmrg	if func_lalib_p "$file"; then
1132504007ebaSmrg
1132604007ebaSmrg	  # Read the .lo file
1132704007ebaSmrg	  func_source $dir/$name
1132804007ebaSmrg
1132904007ebaSmrg	  # Add PIC object to the list of files to remove.
1133005cf1079Smrg	  if test -n "$pic_object" && test none != "$pic_object"; then
1133104007ebaSmrg	    func_append rmfiles " $dir/$pic_object"
1133204007ebaSmrg	  fi
1133304007ebaSmrg
1133404007ebaSmrg	  # Add non-PIC object to the list of files to remove.
1133505cf1079Smrg	  if test -n "$non_pic_object" && test none != "$non_pic_object"; then
1133604007ebaSmrg	    func_append rmfiles " $dir/$non_pic_object"
1133704007ebaSmrg	  fi
1133804007ebaSmrg	fi
1133904007ebaSmrg	;;
1134004007ebaSmrg
1134104007ebaSmrg      *)
1134205cf1079Smrg	if test clean = "$opt_mode"; then
1134304007ebaSmrg	  noexename=$name
1134404007ebaSmrg	  case $file in
1134504007ebaSmrg	  *.exe)
1134604007ebaSmrg	    func_stripname '' '.exe' "$file"
1134704007ebaSmrg	    file=$func_stripname_result
1134804007ebaSmrg	    func_stripname '' '.exe' "$name"
1134904007ebaSmrg	    noexename=$func_stripname_result
1135004007ebaSmrg	    # $file with .exe has already been added to rmfiles,
1135104007ebaSmrg	    # add $file without .exe
1135204007ebaSmrg	    func_append rmfiles " $file"
1135304007ebaSmrg	    ;;
1135404007ebaSmrg	  esac
1135504007ebaSmrg	  # Do a test to see if this is a libtool program.
1135604007ebaSmrg	  if func_ltwrapper_p "$file"; then
1135704007ebaSmrg	    if func_ltwrapper_executable_p "$file"; then
1135804007ebaSmrg	      func_ltwrapper_scriptname "$file"
1135904007ebaSmrg	      relink_command=
1136004007ebaSmrg	      func_source $func_ltwrapper_scriptname_result
1136104007ebaSmrg	      func_append rmfiles " $func_ltwrapper_scriptname_result"
1136204007ebaSmrg	    else
1136304007ebaSmrg	      relink_command=
1136404007ebaSmrg	      func_source $dir/$noexename
1136504007ebaSmrg	    fi
1136604007ebaSmrg
1136704007ebaSmrg	    # note $name still contains .exe if it was in $file originally
1136804007ebaSmrg	    # as does the version of $file that was added into $rmfiles
1136905cf1079Smrg	    func_append rmfiles " $odir/$name $odir/${name}S.$objext"
1137005cf1079Smrg	    if test yes = "$fast_install" && test -n "$relink_command"; then
1137104007ebaSmrg	      func_append rmfiles " $odir/lt-$name"
1137204007ebaSmrg	    fi
1137305cf1079Smrg	    if test "X$noexename" != "X$name"; then
1137405cf1079Smrg	      func_append rmfiles " $odir/lt-$noexename.c"
1137504007ebaSmrg	    fi
1137604007ebaSmrg	  fi
1137704007ebaSmrg	fi
1137804007ebaSmrg	;;
1137904007ebaSmrg      esac
1138004007ebaSmrg      func_show_eval "$RM $rmfiles" 'exit_status=1'
1138104007ebaSmrg    done
1138204007ebaSmrg
1138305cf1079Smrg    # Try to remove the $objdir's in the directories where we deleted files
1138404007ebaSmrg    for dir in $rmdirs; do
1138504007ebaSmrg      if test -d "$dir"; then
1138604007ebaSmrg	func_show_eval "rmdir $dir >/dev/null 2>&1"
1138704007ebaSmrg      fi
1138804007ebaSmrg    done
1138904007ebaSmrg
1139004007ebaSmrg    exit $exit_status
1139104007ebaSmrg}
1139204007ebaSmrg
1139305cf1079Smrgif test uninstall = "$opt_mode" || test clean = "$opt_mode"; then
1139405cf1079Smrg  func_mode_uninstall ${1+"$@"}
1139505cf1079Smrgfi
1139604007ebaSmrg
1139704007ebaSmrgtest -z "$opt_mode" && {
1139805cf1079Smrg  help=$generic_help
1139904007ebaSmrg  func_fatal_help "you must specify a MODE"
1140004007ebaSmrg}
1140104007ebaSmrg
1140204007ebaSmrgtest -z "$exec_cmd" && \
1140305cf1079Smrg  func_fatal_help "invalid operation mode '$opt_mode'"
1140404007ebaSmrg
1140504007ebaSmrgif test -n "$exec_cmd"; then
1140604007ebaSmrg  eval exec "$exec_cmd"
1140704007ebaSmrg  exit $EXIT_FAILURE
1140804007ebaSmrgfi
1140904007ebaSmrg
1141004007ebaSmrgexit $exit_status
1141104007ebaSmrg
1141204007ebaSmrg
1141304007ebaSmrg# The TAGs below are defined such that we never get into a situation
1141405cf1079Smrg# where we disable both kinds of libraries.  Given conflicting
1141504007ebaSmrg# choices, we go for a static library, that is the most portable,
1141604007ebaSmrg# since we can't tell whether shared libraries were disabled because
1141704007ebaSmrg# the user asked for that or because the platform doesn't support
1141804007ebaSmrg# them.  This is particularly important on AIX, because we don't
1141904007ebaSmrg# support having both static and shared libraries enabled at the same
1142004007ebaSmrg# time on that platform, so we default to a shared-only configuration.
1142104007ebaSmrg# If a disable-shared tag is given, we'll fallback to a static-only
1142204007ebaSmrg# configuration.  But we'll never go from static-only to shared-only.
1142304007ebaSmrg
1142404007ebaSmrg# ### BEGIN LIBTOOL TAG CONFIG: disable-shared
1142504007ebaSmrgbuild_libtool_libs=no
1142604007ebaSmrgbuild_old_libs=yes
1142704007ebaSmrg# ### END LIBTOOL TAG CONFIG: disable-shared
1142804007ebaSmrg
1142904007ebaSmrg# ### BEGIN LIBTOOL TAG CONFIG: disable-static
1143004007ebaSmrgbuild_old_libs=`case $build_libtool_libs in yes) echo no;; *) echo yes;; esac`
1143104007ebaSmrg# ### END LIBTOOL TAG CONFIG: disable-static
1143204007ebaSmrg
1143304007ebaSmrg# Local Variables:
1143404007ebaSmrg# mode:shell-script
1143504007ebaSmrg# sh-indentation:2
1143604007ebaSmrg# End:
11437