ltmain.sh revision 4940c694
148e5ce07Smrg#! /bin/sh
248e5ce07Smrg## DO NOT EDIT - This file generated from ./build-aux/ltmain.in
348e5ce07Smrg##               by inline-source v2014-01-03.01
4c27c18e8Smrg
548e5ce07Smrg# libtool (GNU libtool) 2.4.6
648e5ce07Smrg# Provide generalized library-building support services.
7c27c18e8Smrg# Written by Gordon Matzigkeit <gord@gnu.ai.mit.edu>, 1996
8c27c18e8Smrg
948e5ce07Smrg# Copyright (C) 1996-2015 Free Software Foundation, Inc.
10c27c18e8Smrg# This is free software; see the source for copying conditions.  There is NO
11c27c18e8Smrg# warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
12c27c18e8Smrg
13c27c18e8Smrg# GNU Libtool is free software; you can redistribute it and/or modify
14c43cc173Smrg# it under the terms of the GNU General Public License as published by
15c43cc173Smrg# the Free Software Foundation; either version 2 of the License, or
16c43cc173Smrg# (at your option) any later version.
17c43cc173Smrg#
18c27c18e8Smrg# As a special exception to the GNU General Public License,
19c27c18e8Smrg# if you distribute this file as part of a program or library that
20c27c18e8Smrg# is built using GNU Libtool, you may include this file under the
21c27c18e8Smrg# same distribution terms that you use for the rest of that program.
22c27c18e8Smrg#
23c27c18e8Smrg# GNU Libtool is distributed in the hope that it will be useful, but
24c43cc173Smrg# WITHOUT ANY WARRANTY; without even the implied warranty of
25c43cc173Smrg# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
26c43cc173Smrg# General Public License for more details.
27c43cc173Smrg#
28c43cc173Smrg# You should have received a copy of the GNU General Public License
2948e5ce07Smrg# along with this program.  If not, see <http://www.gnu.org/licenses/>.
3044584a44Smrg
3144584a44Smrg
320eb1301bSmrgPROGRAM=libtool
330eb1301bSmrgPACKAGE=libtool
3448e5ce07SmrgVERSION=2.4.6
3548e5ce07Smrgpackage_revision=2.4.6
3644584a44Smrg
3748e5ce07Smrg
3848e5ce07Smrg## ------ ##
3948e5ce07Smrg## Usage. ##
4048e5ce07Smrg## ------ ##
4148e5ce07Smrg
4248e5ce07Smrg# Run './libtool --help' for help with using this script from the
4348e5ce07Smrg# command line.
4448e5ce07Smrg
4548e5ce07Smrg
4648e5ce07Smrg## ------------------------------- ##
4748e5ce07Smrg## User overridable command paths. ##
4848e5ce07Smrg## ------------------------------- ##
4948e5ce07Smrg
5048e5ce07Smrg# After configure completes, it has a better idea of some of the
5148e5ce07Smrg# shell tools we need than the defaults used by the functions shared
5248e5ce07Smrg# with bootstrap, so set those here where they can still be over-
5348e5ce07Smrg# ridden by the user, but otherwise take precedence.
5448e5ce07Smrg
5548e5ce07Smrg: ${AUTOCONF="autoconf"}
5648e5ce07Smrg: ${AUTOMAKE="automake"}
5748e5ce07Smrg
5848e5ce07Smrg
5948e5ce07Smrg## -------------------------- ##
6048e5ce07Smrg## Source external libraries. ##
6148e5ce07Smrg## -------------------------- ##
6248e5ce07Smrg
6348e5ce07Smrg# Much of our low-level functionality needs to be sourced from external
6448e5ce07Smrg# libraries, which are installed to $pkgauxdir.
6548e5ce07Smrg
6648e5ce07Smrg# Set a version string for this script.
674940c694Smrgscriptversion=2015-10-04.22; # UTC
6848e5ce07Smrg
6948e5ce07Smrg# General shell script boiler plate, and helper functions.
7048e5ce07Smrg# Written by Gary V. Vaughan, 2004
7148e5ce07Smrg
7248e5ce07Smrg# Copyright (C) 2004-2015 Free Software Foundation, Inc.
7348e5ce07Smrg# This is free software; see the source for copying conditions.  There is NO
7448e5ce07Smrg# warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
7548e5ce07Smrg
7648e5ce07Smrg# This program is free software; you can redistribute it and/or modify
7748e5ce07Smrg# it under the terms of the GNU General Public License as published by
7848e5ce07Smrg# the Free Software Foundation; either version 3 of the License, or
7948e5ce07Smrg# (at your option) any later version.
8048e5ce07Smrg
8148e5ce07Smrg# As a special exception to the GNU General Public License, if you distribute
8248e5ce07Smrg# this file as part of a program or library that is built using GNU Libtool,
8348e5ce07Smrg# you may include this file under the same distribution terms that you use
8448e5ce07Smrg# for the rest of that program.
8548e5ce07Smrg
8648e5ce07Smrg# This program is distributed in the hope that it will be useful,
8748e5ce07Smrg# but WITHOUT ANY WARRANTY; without even the implied warranty of
8848e5ce07Smrg# MERCHANTABILITY or FITNES FOR A PARTICULAR PURPOSE. See the GNU
8948e5ce07Smrg# General Public License for more details.
9048e5ce07Smrg
9148e5ce07Smrg# You should have received a copy of the GNU General Public License
9248e5ce07Smrg# along with this program. If not, see <http://www.gnu.org/licenses/>.
9348e5ce07Smrg
9448e5ce07Smrg# Please report bugs or propose patches to gary@gnu.org.
9548e5ce07Smrg
9648e5ce07Smrg
9748e5ce07Smrg## ------ ##
9848e5ce07Smrg## Usage. ##
9948e5ce07Smrg## ------ ##
10048e5ce07Smrg
10148e5ce07Smrg# Evaluate this file near the top of your script to gain access to
10248e5ce07Smrg# the functions and variables defined here:
10348e5ce07Smrg#
10448e5ce07Smrg#   . `echo "$0" | ${SED-sed} 's|[^/]*$||'`/build-aux/funclib.sh
10548e5ce07Smrg#
10648e5ce07Smrg# If you need to override any of the default environment variable
10748e5ce07Smrg# settings, do that before evaluating this file.
10848e5ce07Smrg
10948e5ce07Smrg
11048e5ce07Smrg## -------------------- ##
11148e5ce07Smrg## Shell normalisation. ##
11248e5ce07Smrg## -------------------- ##
11348e5ce07Smrg
11448e5ce07Smrg# Some shells need a little help to be as Bourne compatible as possible.
11548e5ce07Smrg# Before doing anything else, make sure all that help has been provided!
11648e5ce07Smrg
11748e5ce07SmrgDUALCASE=1; export DUALCASE # for MKS sh
11848e5ce07Smrgif test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then :
11921e67964Smrg  emulate sh
12021e67964Smrg  NULLCMD=:
12148e5ce07Smrg  # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which
12221e67964Smrg  # is contrary to our usage.  Disable this feature.
12321e67964Smrg  alias -g '${1+"$@"}'='"$@"'
124c43cc173Smrg  setopt NO_GLOB_SUBST
12521e67964Smrgelse
12648e5ce07Smrg  case `(set -o) 2>/dev/null` in *posix*) set -o posix ;; esac
12744584a44Smrgfi
12844584a44Smrg
12948e5ce07Smrg# NLS nuisances: We save the old values in case they are required later.
13048e5ce07Smrg_G_user_locale=
13148e5ce07Smrg_G_safe_locale=
13248e5ce07Smrgfor _G_var in LANG LANGUAGE LC_ALL LC_CTYPE LC_COLLATE LC_MESSAGES
1330eb1301bSmrgdo
13448e5ce07Smrg  eval "if test set = \"\${$_G_var+set}\"; then
13548e5ce07Smrg          save_$_G_var=\$$_G_var
13648e5ce07Smrg          $_G_var=C
13748e5ce07Smrg	  export $_G_var
13848e5ce07Smrg	  _G_user_locale=\"$_G_var=\\\$save_\$_G_var; \$_G_user_locale\"
13948e5ce07Smrg	  _G_safe_locale=\"$_G_var=C; \$_G_safe_locale\"
1400eb1301bSmrg	fi"
1410eb1301bSmrgdone
14244584a44Smrg
14348e5ce07Smrg# CDPATH.
14448e5ce07Smrg(unset CDPATH) >/dev/null 2>&1 && unset CDPATH
14544584a44Smrg
14648e5ce07Smrg# Make sure IFS has a sensible default
14748e5ce07Smrgsp=' '
14848e5ce07Smrgnl='
14948e5ce07Smrg'
15048e5ce07SmrgIFS="$sp	$nl"
15148e5ce07Smrg
15248e5ce07Smrg# There are apparently some retarded systems that use ';' as a PATH separator!
15348e5ce07Smrgif test "${PATH_SEPARATOR+set}" != set; then
15448e5ce07Smrg  PATH_SEPARATOR=:
15548e5ce07Smrg  (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && {
15648e5ce07Smrg    (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 ||
15748e5ce07Smrg      PATH_SEPARATOR=';'
15848e5ce07Smrg  }
15948e5ce07Smrgfi
16044584a44Smrg
16144584a44Smrg
16244584a44Smrg
16348e5ce07Smrg## ------------------------- ##
16448e5ce07Smrg## Locate command utilities. ##
16548e5ce07Smrg## ------------------------- ##
16648e5ce07Smrg
16748e5ce07Smrg
16848e5ce07Smrg# func_executable_p FILE
16948e5ce07Smrg# ----------------------
17048e5ce07Smrg# Check that FILE is an executable regular file.
17148e5ce07Smrgfunc_executable_p ()
17248e5ce07Smrg{
17348e5ce07Smrg    test -f "$1" && test -x "$1"
17448e5ce07Smrg}
17548e5ce07Smrg
17648e5ce07Smrg
17748e5ce07Smrg# func_path_progs PROGS_LIST CHECK_FUNC [PATH]
17848e5ce07Smrg# --------------------------------------------
17948e5ce07Smrg# Search for either a program that responds to --version with output
18048e5ce07Smrg# containing "GNU", or else returned by CHECK_FUNC otherwise, by
18148e5ce07Smrg# trying all the directories in PATH with each of the elements of
18248e5ce07Smrg# PROGS_LIST.
18348e5ce07Smrg#
18448e5ce07Smrg# CHECK_FUNC should accept the path to a candidate program, and
18548e5ce07Smrg# set $func_check_prog_result if it truncates its output less than
18648e5ce07Smrg# $_G_path_prog_max characters.
18748e5ce07Smrgfunc_path_progs ()
18848e5ce07Smrg{
18948e5ce07Smrg    _G_progs_list=$1
19048e5ce07Smrg    _G_check_func=$2
19148e5ce07Smrg    _G_PATH=${3-"$PATH"}
19248e5ce07Smrg
19348e5ce07Smrg    _G_path_prog_max=0
19448e5ce07Smrg    _G_path_prog_found=false
19548e5ce07Smrg    _G_save_IFS=$IFS; IFS=${PATH_SEPARATOR-:}
19648e5ce07Smrg    for _G_dir in $_G_PATH; do
19748e5ce07Smrg      IFS=$_G_save_IFS
19848e5ce07Smrg      test -z "$_G_dir" && _G_dir=.
19948e5ce07Smrg      for _G_prog_name in $_G_progs_list; do
20048e5ce07Smrg        for _exeext in '' .EXE; do
20148e5ce07Smrg          _G_path_prog=$_G_dir/$_G_prog_name$_exeext
20248e5ce07Smrg          func_executable_p "$_G_path_prog" || continue
20348e5ce07Smrg          case `"$_G_path_prog" --version 2>&1` in
20448e5ce07Smrg            *GNU*) func_path_progs_result=$_G_path_prog _G_path_prog_found=: ;;
20548e5ce07Smrg            *)     $_G_check_func $_G_path_prog
20648e5ce07Smrg		   func_path_progs_result=$func_check_prog_result
20748e5ce07Smrg		   ;;
20848e5ce07Smrg          esac
20948e5ce07Smrg          $_G_path_prog_found && break 3
21048e5ce07Smrg        done
21148e5ce07Smrg      done
21248e5ce07Smrg    done
21348e5ce07Smrg    IFS=$_G_save_IFS
21448e5ce07Smrg    test -z "$func_path_progs_result" && {
21548e5ce07Smrg      echo "no acceptable sed could be found in \$PATH" >&2
21648e5ce07Smrg      exit 1
21748e5ce07Smrg    }
21848e5ce07Smrg}
21948e5ce07Smrg
22048e5ce07Smrg
22148e5ce07Smrg# We want to be able to use the functions in this file before configure
22248e5ce07Smrg# has figured out where the best binaries are kept, which means we have
22348e5ce07Smrg# to search for them ourselves - except when the results are already set
22448e5ce07Smrg# where we skip the searches.
22548e5ce07Smrg
22648e5ce07Smrg# Unless the user overrides by setting SED, search the path for either GNU
22748e5ce07Smrg# sed, or the sed that truncates its output the least.
22848e5ce07Smrgtest -z "$SED" && {
22948e5ce07Smrg  _G_sed_script=s/aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa/bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb/
23048e5ce07Smrg  for _G_i in 1 2 3 4 5 6 7; do
23148e5ce07Smrg    _G_sed_script=$_G_sed_script$nl$_G_sed_script
23248e5ce07Smrg  done
23348e5ce07Smrg  echo "$_G_sed_script" 2>/dev/null | sed 99q >conftest.sed
23448e5ce07Smrg  _G_sed_script=
23548e5ce07Smrg
23648e5ce07Smrg  func_check_prog_sed ()
23748e5ce07Smrg  {
23848e5ce07Smrg    _G_path_prog=$1
23948e5ce07Smrg
24048e5ce07Smrg    _G_count=0
24148e5ce07Smrg    printf 0123456789 >conftest.in
24248e5ce07Smrg    while :
24348e5ce07Smrg    do
24448e5ce07Smrg      cat conftest.in conftest.in >conftest.tmp
24548e5ce07Smrg      mv conftest.tmp conftest.in
24648e5ce07Smrg      cp conftest.in conftest.nl
24748e5ce07Smrg      echo '' >> conftest.nl
24848e5ce07Smrg      "$_G_path_prog" -f conftest.sed <conftest.nl >conftest.out 2>/dev/null || break
24948e5ce07Smrg      diff conftest.out conftest.nl >/dev/null 2>&1 || break
25048e5ce07Smrg      _G_count=`expr $_G_count + 1`
25148e5ce07Smrg      if test "$_G_count" -gt "$_G_path_prog_max"; then
25248e5ce07Smrg        # Best one so far, save it but keep looking for a better one
25348e5ce07Smrg        func_check_prog_result=$_G_path_prog
25448e5ce07Smrg        _G_path_prog_max=$_G_count
25548e5ce07Smrg      fi
25648e5ce07Smrg      # 10*(2^10) chars as input seems more than enough
25748e5ce07Smrg      test 10 -lt "$_G_count" && break
25848e5ce07Smrg    done
25948e5ce07Smrg    rm -f conftest.in conftest.tmp conftest.nl conftest.out
26048e5ce07Smrg  }
26148e5ce07Smrg
26248e5ce07Smrg  func_path_progs "sed gsed" func_check_prog_sed $PATH:/usr/xpg4/bin
26348e5ce07Smrg  rm -f conftest.sed
26448e5ce07Smrg  SED=$func_path_progs_result
26548e5ce07Smrg}
26648e5ce07Smrg
26748e5ce07Smrg
26848e5ce07Smrg# Unless the user overrides by setting GREP, search the path for either GNU
26948e5ce07Smrg# grep, or the grep that truncates its output the least.
27048e5ce07Smrgtest -z "$GREP" && {
27148e5ce07Smrg  func_check_prog_grep ()
27248e5ce07Smrg  {
27348e5ce07Smrg    _G_path_prog=$1
27448e5ce07Smrg
27548e5ce07Smrg    _G_count=0
27648e5ce07Smrg    _G_path_prog_max=0
27748e5ce07Smrg    printf 0123456789 >conftest.in
27848e5ce07Smrg    while :
27948e5ce07Smrg    do
28048e5ce07Smrg      cat conftest.in conftest.in >conftest.tmp
28148e5ce07Smrg      mv conftest.tmp conftest.in
28248e5ce07Smrg      cp conftest.in conftest.nl
28348e5ce07Smrg      echo 'GREP' >> conftest.nl
28448e5ce07Smrg      "$_G_path_prog" -e 'GREP$' -e '-(cannot match)-' <conftest.nl >conftest.out 2>/dev/null || break
28548e5ce07Smrg      diff conftest.out conftest.nl >/dev/null 2>&1 || break
28648e5ce07Smrg      _G_count=`expr $_G_count + 1`
28748e5ce07Smrg      if test "$_G_count" -gt "$_G_path_prog_max"; then
28848e5ce07Smrg        # Best one so far, save it but keep looking for a better one
28948e5ce07Smrg        func_check_prog_result=$_G_path_prog
29048e5ce07Smrg        _G_path_prog_max=$_G_count
29148e5ce07Smrg      fi
29248e5ce07Smrg      # 10*(2^10) chars as input seems more than enough
29348e5ce07Smrg      test 10 -lt "$_G_count" && break
29448e5ce07Smrg    done
29548e5ce07Smrg    rm -f conftest.in conftest.tmp conftest.nl conftest.out
29648e5ce07Smrg  }
29748e5ce07Smrg
29848e5ce07Smrg  func_path_progs "grep ggrep" func_check_prog_grep $PATH:/usr/xpg4/bin
29948e5ce07Smrg  GREP=$func_path_progs_result
30048e5ce07Smrg}
30148e5ce07Smrg
30248e5ce07Smrg
30348e5ce07Smrg## ------------------------------- ##
30448e5ce07Smrg## User overridable command paths. ##
30548e5ce07Smrg## ------------------------------- ##
30648e5ce07Smrg
30748e5ce07Smrg# All uppercase variable names are used for environment variables.  These
30848e5ce07Smrg# variables can be overridden by the user before calling a script that
30948e5ce07Smrg# uses them if a suitable command of that name is not already available
31048e5ce07Smrg# in the command search PATH.
311c27c18e8Smrg
312c27c18e8Smrg: ${CP="cp -f"}
31348e5ce07Smrg: ${ECHO="printf %s\n"}
31448e5ce07Smrg: ${EGREP="$GREP -E"}
31548e5ce07Smrg: ${FGREP="$GREP -F"}
31648e5ce07Smrg: ${LN_S="ln -s"}
317c27c18e8Smrg: ${MAKE="make"}
318c27c18e8Smrg: ${MKDIR="mkdir"}
319c27c18e8Smrg: ${MV="mv -f"}
320c27c18e8Smrg: ${RM="rm -f"}
321c27c18e8Smrg: ${SHELL="${CONFIG_SHELL-/bin/sh}"}
322b789ec8aSmrg
323b789ec8aSmrg
32448e5ce07Smrg## -------------------- ##
32548e5ce07Smrg## Useful sed snippets. ##
32648e5ce07Smrg## -------------------- ##
327b789ec8aSmrg
32848e5ce07Smrgsed_dirname='s|/[^/]*$||'
32948e5ce07Smrgsed_basename='s|^.*/||'
330b789ec8aSmrg
33148e5ce07Smrg# Sed substitution that helps us do robust quoting.  It backslashifies
33248e5ce07Smrg# metacharacters that are still active within double-quoted strings.
33348e5ce07Smrgsed_quote_subst='s|\([`"$\\]\)|\\\1|g'
334b789ec8aSmrg
33548e5ce07Smrg# Same as above, but do not quote variable references.
33648e5ce07Smrgsed_double_quote_subst='s/\(["`\\]\)/\\\1/g'
337c43cc173Smrg
33848e5ce07Smrg# Sed substitution that turns a string into a regex matching for the
33948e5ce07Smrg# string literally.
34048e5ce07Smrgsed_make_literal_regex='s|[].[^$\\*\/]|\\&|g'
341c27c18e8Smrg
34248e5ce07Smrg# Sed substitution that converts a w32 file name or path
34348e5ce07Smrg# that contains forward slashes, into one that contains
34448e5ce07Smrg# (escaped) backslashes.  A very naive implementation.
34548e5ce07Smrgsed_naive_backslashify='s|\\\\*|\\|g;s|/|\\|g;s|\\|\\\\|g'
34648e5ce07Smrg
34748e5ce07Smrg# Re-'\' parameter expansions in output of sed_double_quote_subst that
34848e5ce07Smrg# were '\'-ed in input to the same.  If an odd number of '\' preceded a
34948e5ce07Smrg# '$' in input to sed_double_quote_subst, that '$' was protected from
35048e5ce07Smrg# expansion.  Since each input '\' is now two '\'s, look for any number
35148e5ce07Smrg# of runs of four '\'s followed by two '\'s and then a '$'.  '\' that '$'.
35248e5ce07Smrg_G_bs='\\'
35348e5ce07Smrg_G_bs2='\\\\'
35448e5ce07Smrg_G_bs4='\\\\\\\\'
35548e5ce07Smrg_G_dollar='\$'
35648e5ce07Smrgsed_double_backslash="\
35748e5ce07Smrg  s/$_G_bs4/&\\
35848e5ce07Smrg/g
35948e5ce07Smrg  s/^$_G_bs2$_G_dollar/$_G_bs&/
36048e5ce07Smrg  s/\\([^$_G_bs]\\)$_G_bs2$_G_dollar/\\1$_G_bs2$_G_bs$_G_dollar/g
36148e5ce07Smrg  s/\n//g"
36237eb1ca1Smrg
36337eb1ca1Smrg
36448e5ce07Smrg## ----------------- ##
36548e5ce07Smrg## Global variables. ##
36648e5ce07Smrg## ----------------- ##
36737eb1ca1Smrg
36848e5ce07Smrg# Except for the global variables explicitly listed below, the following
36948e5ce07Smrg# functions in the '^func_' namespace, and the '^require_' namespace
37048e5ce07Smrg# variables initialised in the 'Resource management' section, sourcing
37148e5ce07Smrg# this file will not pollute your global namespace with anything
37248e5ce07Smrg# else. There's no portable way to scope variables in Bourne shell
37348e5ce07Smrg# though, so actually running these functions will sometimes place
37448e5ce07Smrg# results into a variable named after the function, and often use
37548e5ce07Smrg# temporary variables in the '^_G_' namespace. If you are careful to
37648e5ce07Smrg# avoid using those namespaces casually in your sourcing script, things
37748e5ce07Smrg# should continue to work as you expect. And, of course, you can freely
37848e5ce07Smrg# overwrite any of the functions or variables defined here before
37948e5ce07Smrg# calling anything to customize them.
38037eb1ca1Smrg
38148e5ce07SmrgEXIT_SUCCESS=0
38248e5ce07SmrgEXIT_FAILURE=1
38348e5ce07SmrgEXIT_MISMATCH=63  # $? = 63 is used to indicate version mismatch to missing.
38448e5ce07SmrgEXIT_SKIP=77	  # $? = 77 is used to indicate a skipped test to automake.
3850eb1301bSmrg
38648e5ce07Smrg# Allow overriding, eg assuming that you follow the convention of
38748e5ce07Smrg# putting '$debug_cmd' at the start of all your functions, you can get
38848e5ce07Smrg# bash to show function call trace with:
38948e5ce07Smrg#
39048e5ce07Smrg#    debug_cmd='eval echo "${FUNCNAME[0]} $*" >&2' bash your-script-name
39148e5ce07Smrgdebug_cmd=${debug_cmd-":"}
39248e5ce07Smrgexit_cmd=:
3930eb1301bSmrg
39448e5ce07Smrg# By convention, finish your script with:
39548e5ce07Smrg#
39648e5ce07Smrg#    exit $exit_status
39748e5ce07Smrg#
39848e5ce07Smrg# so that you can set exit_status to non-zero if you want to indicate
39948e5ce07Smrg# something went wrong during execution without actually bailing out at
40048e5ce07Smrg# the point of failure.
40148e5ce07Smrgexit_status=$EXIT_SUCCESS
4020eb1301bSmrg
40348e5ce07Smrg# Work around backward compatibility issue on IRIX 6.5. On IRIX 6.4+, sh
40448e5ce07Smrg# is ksh but when the shell is invoked as "sh" and the current value of
40548e5ce07Smrg# the _XPG environment variable is not equal to 1 (one), the special
40648e5ce07Smrg# positional parameter $0, within a function call, is the name of the
40748e5ce07Smrg# function.
40848e5ce07Smrgprogpath=$0
409c27c18e8Smrg
41048e5ce07Smrg# The name of this program.
41148e5ce07Smrgprogname=`$ECHO "$progpath" |$SED "$sed_basename"`
412c27c18e8Smrg
41348e5ce07Smrg# Make sure we have an absolute progpath for reexecution:
414c27c18e8Smrgcase $progpath in
415c27c18e8Smrg  [\\/]*|[A-Za-z]:\\*) ;;
416c27c18e8Smrg  *[\\/]*)
41748e5ce07Smrg     progdir=`$ECHO "$progpath" |$SED "$sed_dirname"`
418c27c18e8Smrg     progdir=`cd "$progdir" && pwd`
41948e5ce07Smrg     progpath=$progdir/$progname
420c27c18e8Smrg     ;;
421c27c18e8Smrg  *)
42248e5ce07Smrg     _G_IFS=$IFS
423f1ee322dSmrg     IFS=${PATH_SEPARATOR-:}
424c27c18e8Smrg     for progdir in $PATH; do
42548e5ce07Smrg       IFS=$_G_IFS
426c27c18e8Smrg       test -x "$progdir/$progname" && break
427c27c18e8Smrg     done
42848e5ce07Smrg     IFS=$_G_IFS
429c27c18e8Smrg     test -n "$progdir" || progdir=`pwd`
43048e5ce07Smrg     progpath=$progdir/$progname
431c27c18e8Smrg     ;;
432c27c18e8Smrgesac
433c27c18e8Smrg
434c27c18e8Smrg
43548e5ce07Smrg## ----------------- ##
43648e5ce07Smrg## Standard options. ##
43748e5ce07Smrg## ----------------- ##
438b789ec8aSmrg
43948e5ce07Smrg# The following options affect the operation of the functions defined
44048e5ce07Smrg# below, and should be set appropriately depending on run-time para-
44148e5ce07Smrg# meters passed on the command line.
442c27c18e8Smrg
443c27c18e8Smrgopt_dry_run=false
444c27c18e8Smrgopt_quiet=false
445c27c18e8Smrgopt_verbose=false
446c27c18e8Smrg
44748e5ce07Smrg# Categories 'all' and 'none' are always available.  Append any others
44848e5ce07Smrg# you will pass as the first argument to func_warning from your own
44948e5ce07Smrg# code.
45048e5ce07Smrgwarning_categories=
451c27c18e8Smrg
45248e5ce07Smrg# By default, display warnings according to 'opt_warning_types'.  Set
45348e5ce07Smrg# 'warning_func'  to ':' to elide all warnings, or func_fatal_error to
45448e5ce07Smrg# treat the next displayed warning as a fatal error.
45548e5ce07Smrgwarning_func=func_warn_and_continue
456c27c18e8Smrg
45748e5ce07Smrg# Set to 'all' to display all warnings, 'none' to suppress all
45848e5ce07Smrg# warnings, or a space delimited list of some subset of
45948e5ce07Smrg# 'warning_categories' to display only the listed warnings.
46048e5ce07Smrgopt_warning_types=all
461c27c18e8Smrg
46237eb1ca1Smrg
46348e5ce07Smrg## -------------------- ##
46448e5ce07Smrg## Resource management. ##
46548e5ce07Smrg## -------------------- ##
466c27c18e8Smrg
46748e5ce07Smrg# This section contains definitions for functions that each ensure a
46848e5ce07Smrg# particular resource (a file, or a non-empty configuration variable for
46948e5ce07Smrg# example) is available, and if appropriate to extract default values
47048e5ce07Smrg# from pertinent package files. Call them using their associated
47148e5ce07Smrg# 'require_*' variable to ensure that they are executed, at most, once.
47248e5ce07Smrg#
47348e5ce07Smrg# It's entirely deliberate that calling these functions can set
47448e5ce07Smrg# variables that don't obey the namespace limitations obeyed by the rest
47548e5ce07Smrg# of this file, in order that that they be as useful as possible to
47648e5ce07Smrg# callers.
477c27c18e8Smrg
478c27c18e8Smrg
47948e5ce07Smrg# require_term_colors
48048e5ce07Smrg# -------------------
48148e5ce07Smrg# Allow display of bold text on terminals that support it.
48248e5ce07Smrgrequire_term_colors=func_require_term_colors
48348e5ce07Smrgfunc_require_term_colors ()
484c27c18e8Smrg{
48548e5ce07Smrg    $debug_cmd
48648e5ce07Smrg
48748e5ce07Smrg    test -t 1 && {
48848e5ce07Smrg      # COLORTERM and USE_ANSI_COLORS environment variables take
48948e5ce07Smrg      # precedence, because most terminfo databases neglect to describe
49048e5ce07Smrg      # whether color sequences are supported.
49148e5ce07Smrg      test -n "${COLORTERM+set}" && : ${USE_ANSI_COLORS="1"}
49248e5ce07Smrg
49348e5ce07Smrg      if test 1 = "$USE_ANSI_COLORS"; then
49448e5ce07Smrg        # Standard ANSI escape sequences
49548e5ce07Smrg        tc_reset='[0m'
49648e5ce07Smrg        tc_bold='[1m';   tc_standout='[7m'
49748e5ce07Smrg        tc_red='[31m';   tc_green='[32m'
49848e5ce07Smrg        tc_blue='[34m';  tc_cyan='[36m'
49948e5ce07Smrg      else
50048e5ce07Smrg        # Otherwise trust the terminfo database after all.
50148e5ce07Smrg        test -n "`tput sgr0 2>/dev/null`" && {
50248e5ce07Smrg          tc_reset=`tput sgr0`
50348e5ce07Smrg          test -n "`tput bold 2>/dev/null`" && tc_bold=`tput bold`
50448e5ce07Smrg          tc_standout=$tc_bold
50548e5ce07Smrg          test -n "`tput smso 2>/dev/null`" && tc_standout=`tput smso`
50648e5ce07Smrg          test -n "`tput setaf 1 2>/dev/null`" && tc_red=`tput setaf 1`
50748e5ce07Smrg          test -n "`tput setaf 2 2>/dev/null`" && tc_green=`tput setaf 2`
50848e5ce07Smrg          test -n "`tput setaf 4 2>/dev/null`" && tc_blue=`tput setaf 4`
50948e5ce07Smrg          test -n "`tput setaf 5 2>/dev/null`" && tc_cyan=`tput setaf 5`
51048e5ce07Smrg        }
51148e5ce07Smrg      fi
51248e5ce07Smrg    }
513c27c18e8Smrg
51448e5ce07Smrg    require_term_colors=:
515c27c18e8Smrg}
516c27c18e8Smrg
517c27c18e8Smrg
51848e5ce07Smrg## ----------------- ##
51948e5ce07Smrg## Function library. ##
52048e5ce07Smrg## ----------------- ##
52148e5ce07Smrg
52248e5ce07Smrg# This section contains a variety of useful functions to call in your
52348e5ce07Smrg# scripts. Take note of the portable wrappers for features provided by
52448e5ce07Smrg# some modern shells, which will fall back to slower equivalents on
52548e5ce07Smrg# less featureful shells.
52648e5ce07Smrg
52748e5ce07Smrg
52848e5ce07Smrg# func_append VAR VALUE
52948e5ce07Smrg# ---------------------
53048e5ce07Smrg# Append VALUE onto the existing contents of VAR.
53148e5ce07Smrg
53248e5ce07Smrg  # We should try to minimise forks, especially on Windows where they are
53348e5ce07Smrg  # unreasonably slow, so skip the feature probes when bash or zsh are
53448e5ce07Smrg  # being used:
53548e5ce07Smrg  if test set = "${BASH_VERSION+set}${ZSH_VERSION+set}"; then
53648e5ce07Smrg    : ${_G_HAVE_ARITH_OP="yes"}
53748e5ce07Smrg    : ${_G_HAVE_XSI_OPS="yes"}
53848e5ce07Smrg    # The += operator was introduced in bash 3.1
53948e5ce07Smrg    case $BASH_VERSION in
54048e5ce07Smrg      [12].* | 3.0 | 3.0*) ;;
54148e5ce07Smrg      *)
54248e5ce07Smrg        : ${_G_HAVE_PLUSEQ_OP="yes"}
54348e5ce07Smrg        ;;
54448e5ce07Smrg    esac
54548e5ce07Smrg  fi
54648e5ce07Smrg
54748e5ce07Smrg  # _G_HAVE_PLUSEQ_OP
54848e5ce07Smrg  # Can be empty, in which case the shell is probed, "yes" if += is
54948e5ce07Smrg  # useable or anything else if it does not work.
55048e5ce07Smrg  test -z "$_G_HAVE_PLUSEQ_OP" \
55148e5ce07Smrg    && (eval 'x=a; x+=" b"; test "a b" = "$x"') 2>/dev/null \
55248e5ce07Smrg    && _G_HAVE_PLUSEQ_OP=yes
55348e5ce07Smrg
55448e5ce07Smrgif test yes = "$_G_HAVE_PLUSEQ_OP"
55548e5ce07Smrgthen
55648e5ce07Smrg  # This is an XSI compatible shell, allowing a faster implementation...
55748e5ce07Smrg  eval 'func_append ()
55848e5ce07Smrg  {
55948e5ce07Smrg    $debug_cmd
56048e5ce07Smrg
56148e5ce07Smrg    eval "$1+=\$2"
56248e5ce07Smrg  }'
56348e5ce07Smrgelse
56448e5ce07Smrg  # ...otherwise fall back to using expr, which is often a shell builtin.
56548e5ce07Smrg  func_append ()
56648e5ce07Smrg  {
56748e5ce07Smrg    $debug_cmd
56848e5ce07Smrg
56948e5ce07Smrg    eval "$1=\$$1\$2"
57048e5ce07Smrg  }
57148e5ce07Smrgfi
57248e5ce07Smrg
57348e5ce07Smrg
57448e5ce07Smrg# func_append_quoted VAR VALUE
57548e5ce07Smrg# ----------------------------
57648e5ce07Smrg# Quote VALUE and append to the end of shell variable VAR, separated
57748e5ce07Smrg# by a space.
57848e5ce07Smrgif test yes = "$_G_HAVE_PLUSEQ_OP"; then
57948e5ce07Smrg  eval 'func_append_quoted ()
58048e5ce07Smrg  {
58148e5ce07Smrg    $debug_cmd
58248e5ce07Smrg
58348e5ce07Smrg    func_quote_for_eval "$2"
58448e5ce07Smrg    eval "$1+=\\ \$func_quote_for_eval_result"
58548e5ce07Smrg  }'
58648e5ce07Smrgelse
58748e5ce07Smrg  func_append_quoted ()
58848e5ce07Smrg  {
58948e5ce07Smrg    $debug_cmd
59048e5ce07Smrg
59148e5ce07Smrg    func_quote_for_eval "$2"
59248e5ce07Smrg    eval "$1=\$$1\\ \$func_quote_for_eval_result"
59348e5ce07Smrg  }
59448e5ce07Smrgfi
59548e5ce07Smrg
59648e5ce07Smrg
59748e5ce07Smrg# func_append_uniq VAR VALUE
59848e5ce07Smrg# --------------------------
59948e5ce07Smrg# Append unique VALUE onto the existing contents of VAR, assuming
60048e5ce07Smrg# entries are delimited by the first character of VALUE.  For example:
60148e5ce07Smrg#
60248e5ce07Smrg#   func_append_uniq options " --another-option option-argument"
60348e5ce07Smrg#
60448e5ce07Smrg# will only append to $options if " --another-option option-argument "
60548e5ce07Smrg# is not already present somewhere in $options already (note spaces at
60648e5ce07Smrg# each end implied by leading space in second argument).
60748e5ce07Smrgfunc_append_uniq ()
60848e5ce07Smrg{
60948e5ce07Smrg    $debug_cmd
61048e5ce07Smrg
61148e5ce07Smrg    eval _G_current_value='`$ECHO $'$1'`'
61248e5ce07Smrg    _G_delim=`expr "$2" : '\(.\)'`
61348e5ce07Smrg
61448e5ce07Smrg    case $_G_delim$_G_current_value$_G_delim in
61548e5ce07Smrg      *"$2$_G_delim"*) ;;
61648e5ce07Smrg      *) func_append "$@" ;;
61748e5ce07Smrg    esac
61848e5ce07Smrg}
61948e5ce07Smrg
62048e5ce07Smrg
62148e5ce07Smrg# func_arith TERM...
62248e5ce07Smrg# ------------------
62348e5ce07Smrg# Set func_arith_result to the result of evaluating TERMs.
62448e5ce07Smrg  test -z "$_G_HAVE_ARITH_OP" \
62548e5ce07Smrg    && (eval 'test 2 = $(( 1 + 1 ))') 2>/dev/null \
62648e5ce07Smrg    && _G_HAVE_ARITH_OP=yes
62748e5ce07Smrg
62848e5ce07Smrgif test yes = "$_G_HAVE_ARITH_OP"; then
62948e5ce07Smrg  eval 'func_arith ()
63048e5ce07Smrg  {
63148e5ce07Smrg    $debug_cmd
63248e5ce07Smrg
63348e5ce07Smrg    func_arith_result=$(( $* ))
63448e5ce07Smrg  }'
63548e5ce07Smrgelse
63648e5ce07Smrg  func_arith ()
63748e5ce07Smrg  {
63848e5ce07Smrg    $debug_cmd
63948e5ce07Smrg
64048e5ce07Smrg    func_arith_result=`expr "$@"`
64148e5ce07Smrg  }
64248e5ce07Smrgfi
64348e5ce07Smrg
64448e5ce07Smrg
64548e5ce07Smrg# func_basename FILE
64648e5ce07Smrg# ------------------
64748e5ce07Smrg# Set func_basename_result to FILE with everything up to and including
64848e5ce07Smrg# the last / stripped.
64948e5ce07Smrgif test yes = "$_G_HAVE_XSI_OPS"; then
65048e5ce07Smrg  # If this shell supports suffix pattern removal, then use it to avoid
65148e5ce07Smrg  # forking. Hide the definitions single quotes in case the shell chokes
65248e5ce07Smrg  # on unsupported syntax...
65348e5ce07Smrg  _b='func_basename_result=${1##*/}'
65448e5ce07Smrg  _d='case $1 in
65548e5ce07Smrg        */*) func_dirname_result=${1%/*}$2 ;;
65648e5ce07Smrg        *  ) func_dirname_result=$3        ;;
65748e5ce07Smrg      esac'
65848e5ce07Smrg
65948e5ce07Smrgelse
66048e5ce07Smrg  # ...otherwise fall back to using sed.
66148e5ce07Smrg  _b='func_basename_result=`$ECHO "$1" |$SED "$sed_basename"`'
66248e5ce07Smrg  _d='func_dirname_result=`$ECHO "$1"  |$SED "$sed_dirname"`
66348e5ce07Smrg      if test "X$func_dirname_result" = "X$1"; then
66448e5ce07Smrg        func_dirname_result=$3
66548e5ce07Smrg      else
66648e5ce07Smrg        func_append func_dirname_result "$2"
66748e5ce07Smrg      fi'
66848e5ce07Smrgfi
66948e5ce07Smrg
67048e5ce07Smrgeval 'func_basename ()
67148e5ce07Smrg{
67248e5ce07Smrg    $debug_cmd
67348e5ce07Smrg
67448e5ce07Smrg    '"$_b"'
67548e5ce07Smrg}'
67648e5ce07Smrg
67748e5ce07Smrg
67848e5ce07Smrg# func_dirname FILE APPEND NONDIR_REPLACEMENT
67948e5ce07Smrg# -------------------------------------------
68048e5ce07Smrg# Compute the dirname of FILE.  If nonempty, add APPEND to the result,
68148e5ce07Smrg# otherwise set result to NONDIR_REPLACEMENT.
68248e5ce07Smrgeval 'func_dirname ()
68348e5ce07Smrg{
68448e5ce07Smrg    $debug_cmd
68548e5ce07Smrg
68648e5ce07Smrg    '"$_d"'
68748e5ce07Smrg}'
68848e5ce07Smrg
68948e5ce07Smrg
69048e5ce07Smrg# func_dirname_and_basename FILE APPEND NONDIR_REPLACEMENT
69148e5ce07Smrg# --------------------------------------------------------
69248e5ce07Smrg# Perform func_basename and func_dirname in a single function
69348e5ce07Smrg# call:
69448e5ce07Smrg#   dirname:  Compute the dirname of FILE.  If nonempty,
69548e5ce07Smrg#             add APPEND to the result, otherwise set result
69648e5ce07Smrg#             to NONDIR_REPLACEMENT.
69748e5ce07Smrg#             value returned in "$func_dirname_result"
69848e5ce07Smrg#   basename: Compute filename of FILE.
69948e5ce07Smrg#             value retuned in "$func_basename_result"
70048e5ce07Smrg# For efficiency, we do not delegate to the functions above but instead
70148e5ce07Smrg# duplicate the functionality here.
70248e5ce07Smrgeval 'func_dirname_and_basename ()
70348e5ce07Smrg{
70448e5ce07Smrg    $debug_cmd
70548e5ce07Smrg
70648e5ce07Smrg    '"$_b"'
70748e5ce07Smrg    '"$_d"'
70848e5ce07Smrg}'
70948e5ce07Smrg
71048e5ce07Smrg
71148e5ce07Smrg# func_echo ARG...
71248e5ce07Smrg# ----------------
71348e5ce07Smrg# Echo program name prefixed message.
71448e5ce07Smrgfunc_echo ()
71548e5ce07Smrg{
71648e5ce07Smrg    $debug_cmd
71748e5ce07Smrg
71848e5ce07Smrg    _G_message=$*
71948e5ce07Smrg
72048e5ce07Smrg    func_echo_IFS=$IFS
72148e5ce07Smrg    IFS=$nl
72248e5ce07Smrg    for _G_line in $_G_message; do
72348e5ce07Smrg      IFS=$func_echo_IFS
72448e5ce07Smrg      $ECHO "$progname: $_G_line"
72548e5ce07Smrg    done
72648e5ce07Smrg    IFS=$func_echo_IFS
72748e5ce07Smrg}
72848e5ce07Smrg
72948e5ce07Smrg
73048e5ce07Smrg# func_echo_all ARG...
73148e5ce07Smrg# --------------------
73248e5ce07Smrg# Invoke $ECHO with all args, space-separated.
73348e5ce07Smrgfunc_echo_all ()
73448e5ce07Smrg{
73548e5ce07Smrg    $ECHO "$*"
73648e5ce07Smrg}
73748e5ce07Smrg
73848e5ce07Smrg
73948e5ce07Smrg# func_echo_infix_1 INFIX ARG...
74048e5ce07Smrg# ------------------------------
74148e5ce07Smrg# Echo program name, followed by INFIX on the first line, with any
74248e5ce07Smrg# additional lines not showing INFIX.
74348e5ce07Smrgfunc_echo_infix_1 ()
74448e5ce07Smrg{
74548e5ce07Smrg    $debug_cmd
74648e5ce07Smrg
74748e5ce07Smrg    $require_term_colors
74848e5ce07Smrg
74948e5ce07Smrg    _G_infix=$1; shift
75048e5ce07Smrg    _G_indent=$_G_infix
75148e5ce07Smrg    _G_prefix="$progname: $_G_infix: "
75248e5ce07Smrg    _G_message=$*
75348e5ce07Smrg
75448e5ce07Smrg    # Strip color escape sequences before counting printable length
75548e5ce07Smrg    for _G_tc in "$tc_reset" "$tc_bold" "$tc_standout" "$tc_red" "$tc_green" "$tc_blue" "$tc_cyan"
75648e5ce07Smrg    do
75748e5ce07Smrg      test -n "$_G_tc" && {
75848e5ce07Smrg        _G_esc_tc=`$ECHO "$_G_tc" | $SED "$sed_make_literal_regex"`
75948e5ce07Smrg        _G_indent=`$ECHO "$_G_indent" | $SED "s|$_G_esc_tc||g"`
76048e5ce07Smrg      }
76148e5ce07Smrg    done
76248e5ce07Smrg    _G_indent="$progname: "`echo "$_G_indent" | $SED 's|.| |g'`"  " ## exclude from sc_prohibit_nested_quotes
76348e5ce07Smrg
76448e5ce07Smrg    func_echo_infix_1_IFS=$IFS
76548e5ce07Smrg    IFS=$nl
76648e5ce07Smrg    for _G_line in $_G_message; do
76748e5ce07Smrg      IFS=$func_echo_infix_1_IFS
76848e5ce07Smrg      $ECHO "$_G_prefix$tc_bold$_G_line$tc_reset" >&2
76948e5ce07Smrg      _G_prefix=$_G_indent
77048e5ce07Smrg    done
77148e5ce07Smrg    IFS=$func_echo_infix_1_IFS
77248e5ce07Smrg}
77348e5ce07Smrg
77448e5ce07Smrg
77548e5ce07Smrg# func_error ARG...
77648e5ce07Smrg# -----------------
77748e5ce07Smrg# Echo program name prefixed message to standard error.
77848e5ce07Smrgfunc_error ()
77948e5ce07Smrg{
78048e5ce07Smrg    $debug_cmd
78148e5ce07Smrg
78248e5ce07Smrg    $require_term_colors
78348e5ce07Smrg
78448e5ce07Smrg    func_echo_infix_1 "  $tc_standout${tc_red}error$tc_reset" "$*" >&2
78548e5ce07Smrg}
78648e5ce07Smrg
78748e5ce07Smrg
78848e5ce07Smrg# func_fatal_error ARG...
78948e5ce07Smrg# -----------------------
79048e5ce07Smrg# Echo program name prefixed message to standard error, and exit.
79148e5ce07Smrgfunc_fatal_error ()
79248e5ce07Smrg{
79348e5ce07Smrg    $debug_cmd
79448e5ce07Smrg
79548e5ce07Smrg    func_error "$*"
79648e5ce07Smrg    exit $EXIT_FAILURE
79748e5ce07Smrg}
79848e5ce07Smrg
79948e5ce07Smrg
80048e5ce07Smrg# func_grep EXPRESSION FILENAME
80148e5ce07Smrg# -----------------------------
802c27c18e8Smrg# Check whether EXPRESSION matches any line of FILENAME, without output.
803c27c18e8Smrgfunc_grep ()
804c27c18e8Smrg{
80548e5ce07Smrg    $debug_cmd
80648e5ce07Smrg
807c27c18e8Smrg    $GREP "$1" "$2" >/dev/null 2>&1
808c27c18e8Smrg}
809c27c18e8Smrg
810c27c18e8Smrg
81148e5ce07Smrg# func_len STRING
81248e5ce07Smrg# ---------------
81348e5ce07Smrg# Set func_len_result to the length of STRING. STRING may not
81448e5ce07Smrg# start with a hyphen.
81548e5ce07Smrg  test -z "$_G_HAVE_XSI_OPS" \
81648e5ce07Smrg    && (eval 'x=a/b/c;
81748e5ce07Smrg      test 5aa/bb/cc = "${#x}${x%%/*}${x%/*}${x#*/}${x##*/}"') 2>/dev/null \
81848e5ce07Smrg    && _G_HAVE_XSI_OPS=yes
81948e5ce07Smrg
82048e5ce07Smrgif test yes = "$_G_HAVE_XSI_OPS"; then
82148e5ce07Smrg  eval 'func_len ()
82248e5ce07Smrg  {
82348e5ce07Smrg    $debug_cmd
82448e5ce07Smrg
82548e5ce07Smrg    func_len_result=${#1}
82648e5ce07Smrg  }'
82748e5ce07Smrgelse
82848e5ce07Smrg  func_len ()
82948e5ce07Smrg  {
83048e5ce07Smrg    $debug_cmd
83148e5ce07Smrg
83248e5ce07Smrg    func_len_result=`expr "$1" : ".*" 2>/dev/null || echo $max_cmd_len`
83348e5ce07Smrg  }
83448e5ce07Smrgfi
83548e5ce07Smrg
83648e5ce07Smrg
83748e5ce07Smrg# func_mkdir_p DIRECTORY-PATH
83848e5ce07Smrg# ---------------------------
839c27c18e8Smrg# Make sure the entire path to DIRECTORY-PATH is available.
840c27c18e8Smrgfunc_mkdir_p ()
841c27c18e8Smrg{
84248e5ce07Smrg    $debug_cmd
84348e5ce07Smrg
84448e5ce07Smrg    _G_directory_path=$1
84548e5ce07Smrg    _G_dir_list=
846c27c18e8Smrg
84748e5ce07Smrg    if test -n "$_G_directory_path" && test : != "$opt_dry_run"; then
84844584a44Smrg
84948e5ce07Smrg      # Protect directory names starting with '-'
85048e5ce07Smrg      case $_G_directory_path in
85148e5ce07Smrg        -*) _G_directory_path=./$_G_directory_path ;;
852c27c18e8Smrg      esac
853c27c18e8Smrg
854c27c18e8Smrg      # While some portion of DIR does not yet exist...
85548e5ce07Smrg      while test ! -d "$_G_directory_path"; do
856c27c18e8Smrg        # ...make a list in topmost first order.  Use a colon delimited
857c27c18e8Smrg	# list incase some portion of path contains whitespace.
85848e5ce07Smrg        _G_dir_list=$_G_directory_path:$_G_dir_list
859c27c18e8Smrg
860c27c18e8Smrg        # If the last portion added has no slash in it, the list is done
86148e5ce07Smrg        case $_G_directory_path in */*) ;; *) break ;; esac
862c27c18e8Smrg
863c27c18e8Smrg        # ...otherwise throw away the child directory and loop
86448e5ce07Smrg        _G_directory_path=`$ECHO "$_G_directory_path" | $SED -e "$sed_dirname"`
865c27c18e8Smrg      done
86648e5ce07Smrg      _G_dir_list=`$ECHO "$_G_dir_list" | $SED 's|:*$||'`
867c27c18e8Smrg
86848e5ce07Smrg      func_mkdir_p_IFS=$IFS; IFS=:
86948e5ce07Smrg      for _G_dir in $_G_dir_list; do
87048e5ce07Smrg	IFS=$func_mkdir_p_IFS
87148e5ce07Smrg        # mkdir can fail with a 'File exist' error if two processes
872c27c18e8Smrg        # try to create one of the directories concurrently.  Don't
873c27c18e8Smrg        # stop in that case!
87448e5ce07Smrg        $MKDIR "$_G_dir" 2>/dev/null || :
875c27c18e8Smrg      done
87648e5ce07Smrg      IFS=$func_mkdir_p_IFS
877c27c18e8Smrg
878c27c18e8Smrg      # Bail out if we (or some other process) failed to create a directory.
87948e5ce07Smrg      test -d "$_G_directory_path" || \
88048e5ce07Smrg        func_fatal_error "Failed to create '$1'"
881c27c18e8Smrg    fi
882c27c18e8Smrg}
883c43cc173Smrg
884c43cc173Smrg
88548e5ce07Smrg# func_mktempdir [BASENAME]
88648e5ce07Smrg# -------------------------
887c43cc173Smrg# Make a temporary directory that won't clash with other running
888c43cc173Smrg# libtool processes, and avoids race conditions if possible.  If
88948e5ce07Smrg# given, BASENAME is the basename for that directory.
890c43cc173Smrgfunc_mktempdir ()
891c43cc173Smrg{
89248e5ce07Smrg    $debug_cmd
89348e5ce07Smrg
89448e5ce07Smrg    _G_template=${TMPDIR-/tmp}/${1-$progname}
89544584a44Smrg
89648e5ce07Smrg    if test : = "$opt_dry_run"; then
897c43cc173Smrg      # Return a directory name, but don't create it in dry-run mode
89848e5ce07Smrg      _G_tmpdir=$_G_template-$$
899c43cc173Smrg    else
900c43cc173Smrg
901c43cc173Smrg      # If mktemp works, use that first and foremost
90248e5ce07Smrg      _G_tmpdir=`mktemp -d "$_G_template-XXXXXXXX" 2>/dev/null`
903c43cc173Smrg
90448e5ce07Smrg      if test ! -d "$_G_tmpdir"; then
905c27c18e8Smrg        # Failing that, at least try and use $RANDOM to avoid a race
90648e5ce07Smrg        _G_tmpdir=$_G_template-${RANDOM-0}$$
907c43cc173Smrg
90848e5ce07Smrg        func_mktempdir_umask=`umask`
909c27c18e8Smrg        umask 0077
91048e5ce07Smrg        $MKDIR "$_G_tmpdir"
91148e5ce07Smrg        umask $func_mktempdir_umask
912c43cc173Smrg      fi
913c43cc173Smrg
914c43cc173Smrg      # If we're not in dry-run mode, bomb out on failure
91548e5ce07Smrg      test -d "$_G_tmpdir" || \
91648e5ce07Smrg        func_fatal_error "cannot create temporary directory '$_G_tmpdir'"
917c43cc173Smrg    fi
918c43cc173Smrg
91948e5ce07Smrg    $ECHO "$_G_tmpdir"
92044584a44Smrg}
92144584a44Smrg
92244584a44Smrg
92348e5ce07Smrg# func_normal_abspath PATH
92448e5ce07Smrg# ------------------------
92548e5ce07Smrg# Remove doubled-up and trailing slashes, "." path components,
92648e5ce07Smrg# and cancel out any ".." path components in PATH after making
92748e5ce07Smrg# it an absolute path.
92848e5ce07Smrgfunc_normal_abspath ()
92944584a44Smrg{
93048e5ce07Smrg    $debug_cmd
93144584a44Smrg
93248e5ce07Smrg    # These SED scripts presuppose an absolute path with a trailing slash.
93348e5ce07Smrg    _G_pathcar='s|^/\([^/]*\).*$|\1|'
93448e5ce07Smrg    _G_pathcdr='s|^/[^/]*||'
93548e5ce07Smrg    _G_removedotparts=':dotsl
93648e5ce07Smrg		s|/\./|/|g
93748e5ce07Smrg		t dotsl
93848e5ce07Smrg		s|/\.$|/|'
93948e5ce07Smrg    _G_collapseslashes='s|/\{1,\}|/|g'
94048e5ce07Smrg    _G_finalslash='s|/*$|/|'
94148e5ce07Smrg
94248e5ce07Smrg    # Start from root dir and reassemble the path.
94348e5ce07Smrg    func_normal_abspath_result=
94448e5ce07Smrg    func_normal_abspath_tpath=$1
94548e5ce07Smrg    func_normal_abspath_altnamespace=
94648e5ce07Smrg    case $func_normal_abspath_tpath in
94748e5ce07Smrg      "")
94848e5ce07Smrg        # Empty path, that just means $cwd.
94948e5ce07Smrg        func_stripname '' '/' "`pwd`"
95048e5ce07Smrg        func_normal_abspath_result=$func_stripname_result
95148e5ce07Smrg        return
95248e5ce07Smrg        ;;
95348e5ce07Smrg      # The next three entries are used to spot a run of precisely
95448e5ce07Smrg      # two leading slashes without using negated character classes;
95548e5ce07Smrg      # we take advantage of case's first-match behaviour.
95648e5ce07Smrg      ///*)
95748e5ce07Smrg        # Unusual form of absolute path, do nothing.
95848e5ce07Smrg        ;;
95948e5ce07Smrg      //*)
96048e5ce07Smrg        # Not necessarily an ordinary path; POSIX reserves leading '//'
96148e5ce07Smrg        # and for example Cygwin uses it to access remote file shares
96248e5ce07Smrg        # over CIFS/SMB, so we conserve a leading double slash if found.
96348e5ce07Smrg        func_normal_abspath_altnamespace=/
96448e5ce07Smrg        ;;
96548e5ce07Smrg      /*)
96648e5ce07Smrg        # Absolute path, do nothing.
96744584a44Smrg        ;;
9680eb1301bSmrg      *)
96948e5ce07Smrg        # Relative path, prepend $cwd.
97048e5ce07Smrg        func_normal_abspath_tpath=`pwd`/$func_normal_abspath_tpath
97148e5ce07Smrg        ;;
97244584a44Smrg    esac
97348e5ce07Smrg
97448e5ce07Smrg    # Cancel out all the simple stuff to save iterations.  We also want
97548e5ce07Smrg    # the path to end with a slash for ease of parsing, so make sure
97648e5ce07Smrg    # there is one (and only one) here.
97748e5ce07Smrg    func_normal_abspath_tpath=`$ECHO "$func_normal_abspath_tpath" | $SED \
97848e5ce07Smrg          -e "$_G_removedotparts" -e "$_G_collapseslashes" -e "$_G_finalslash"`
97948e5ce07Smrg    while :; do
98048e5ce07Smrg      # Processed it all yet?
98148e5ce07Smrg      if test / = "$func_normal_abspath_tpath"; then
98248e5ce07Smrg        # If we ascended to the root using ".." the result may be empty now.
98348e5ce07Smrg        if test -z "$func_normal_abspath_result"; then
98448e5ce07Smrg          func_normal_abspath_result=/
98548e5ce07Smrg        fi
98648e5ce07Smrg        break
98748e5ce07Smrg      fi
98848e5ce07Smrg      func_normal_abspath_tcomponent=`$ECHO "$func_normal_abspath_tpath" | $SED \
98948e5ce07Smrg          -e "$_G_pathcar"`
99048e5ce07Smrg      func_normal_abspath_tpath=`$ECHO "$func_normal_abspath_tpath" | $SED \
99148e5ce07Smrg          -e "$_G_pathcdr"`
99248e5ce07Smrg      # Figure out what to do with it
99348e5ce07Smrg      case $func_normal_abspath_tcomponent in
99448e5ce07Smrg        "")
99548e5ce07Smrg          # Trailing empty path component, ignore it.
99648e5ce07Smrg          ;;
99748e5ce07Smrg        ..)
99848e5ce07Smrg          # Parent dir; strip last assembled component from result.
99948e5ce07Smrg          func_dirname "$func_normal_abspath_result"
100048e5ce07Smrg          func_normal_abspath_result=$func_dirname_result
100148e5ce07Smrg          ;;
100248e5ce07Smrg        *)
100348e5ce07Smrg          # Actual path component, append it.
100448e5ce07Smrg          func_append func_normal_abspath_result "/$func_normal_abspath_tcomponent"
100548e5ce07Smrg          ;;
100648e5ce07Smrg      esac
100748e5ce07Smrg    done
100848e5ce07Smrg    # Restore leading double-slash if one was found on entry.
100948e5ce07Smrg    func_normal_abspath_result=$func_normal_abspath_altnamespace$func_normal_abspath_result
101048e5ce07Smrg}
101148e5ce07Smrg
101248e5ce07Smrg
101348e5ce07Smrg# func_notquiet ARG...
101448e5ce07Smrg# --------------------
101548e5ce07Smrg# Echo program name prefixed message only when not in quiet mode.
101648e5ce07Smrgfunc_notquiet ()
101748e5ce07Smrg{
101848e5ce07Smrg    $debug_cmd
101948e5ce07Smrg
102048e5ce07Smrg    $opt_quiet || func_echo ${1+"$@"}
102148e5ce07Smrg
102248e5ce07Smrg    # A bug in bash halts the script if the last line of a function
102348e5ce07Smrg    # fails when set -e is in force, so we need another command to
102448e5ce07Smrg    # work around that:
102548e5ce07Smrg    :
102648e5ce07Smrg}
102748e5ce07Smrg
102848e5ce07Smrg
102948e5ce07Smrg# func_relative_path SRCDIR DSTDIR
103048e5ce07Smrg# --------------------------------
103148e5ce07Smrg# Set func_relative_path_result to the relative path from SRCDIR to DSTDIR.
103248e5ce07Smrgfunc_relative_path ()
103348e5ce07Smrg{
103448e5ce07Smrg    $debug_cmd
103548e5ce07Smrg
103648e5ce07Smrg    func_relative_path_result=
103748e5ce07Smrg    func_normal_abspath "$1"
103848e5ce07Smrg    func_relative_path_tlibdir=$func_normal_abspath_result
103948e5ce07Smrg    func_normal_abspath "$2"
104048e5ce07Smrg    func_relative_path_tbindir=$func_normal_abspath_result
104148e5ce07Smrg
104248e5ce07Smrg    # Ascend the tree starting from libdir
104348e5ce07Smrg    while :; do
104448e5ce07Smrg      # check if we have found a prefix of bindir
104548e5ce07Smrg      case $func_relative_path_tbindir in
104648e5ce07Smrg        $func_relative_path_tlibdir)
104748e5ce07Smrg          # found an exact match
104848e5ce07Smrg          func_relative_path_tcancelled=
104948e5ce07Smrg          break
105048e5ce07Smrg          ;;
105148e5ce07Smrg        $func_relative_path_tlibdir*)
105248e5ce07Smrg          # found a matching prefix
105348e5ce07Smrg          func_stripname "$func_relative_path_tlibdir" '' "$func_relative_path_tbindir"
105448e5ce07Smrg          func_relative_path_tcancelled=$func_stripname_result
105548e5ce07Smrg          if test -z "$func_relative_path_result"; then
105648e5ce07Smrg            func_relative_path_result=.
105748e5ce07Smrg          fi
105848e5ce07Smrg          break
105948e5ce07Smrg          ;;
106048e5ce07Smrg        *)
106148e5ce07Smrg          func_dirname $func_relative_path_tlibdir
106248e5ce07Smrg          func_relative_path_tlibdir=$func_dirname_result
106348e5ce07Smrg          if test -z "$func_relative_path_tlibdir"; then
106448e5ce07Smrg            # Have to descend all the way to the root!
106548e5ce07Smrg            func_relative_path_result=../$func_relative_path_result
106648e5ce07Smrg            func_relative_path_tcancelled=$func_relative_path_tbindir
106748e5ce07Smrg            break
106848e5ce07Smrg          fi
106948e5ce07Smrg          func_relative_path_result=../$func_relative_path_result
107048e5ce07Smrg          ;;
107148e5ce07Smrg      esac
107248e5ce07Smrg    done
107348e5ce07Smrg
107448e5ce07Smrg    # Now calculate path; take care to avoid doubling-up slashes.
107548e5ce07Smrg    func_stripname '' '/' "$func_relative_path_result"
107648e5ce07Smrg    func_relative_path_result=$func_stripname_result
107748e5ce07Smrg    func_stripname '/' '/' "$func_relative_path_tcancelled"
107848e5ce07Smrg    if test -n "$func_stripname_result"; then
107948e5ce07Smrg      func_append func_relative_path_result "/$func_stripname_result"
108048e5ce07Smrg    fi
108148e5ce07Smrg
108248e5ce07Smrg    # Normalisation. If bindir is libdir, return '.' else relative path.
108348e5ce07Smrg    if test -n "$func_relative_path_result"; then
108448e5ce07Smrg      func_stripname './' '' "$func_relative_path_result"
108548e5ce07Smrg      func_relative_path_result=$func_stripname_result
108648e5ce07Smrg    fi
108748e5ce07Smrg
108848e5ce07Smrg    test -n "$func_relative_path_result" || func_relative_path_result=.
108948e5ce07Smrg
109048e5ce07Smrg    :
109144584a44Smrg}
109244584a44Smrg
109344584a44Smrg
10944940c694Smrg# func_quote ARG
10954940c694Smrg# --------------
10964940c694Smrg# Aesthetically quote one ARG, store the result into $func_quote_result.  Note
10974940c694Smrg# that we keep attention to performance here (so far O(N) complexity as long as
10984940c694Smrg# func_append is O(1)).
10994940c694Smrgfunc_quote ()
11004940c694Smrg{
11014940c694Smrg    $debug_cmd
11024940c694Smrg
11034940c694Smrg    func_quote_result=$1
11044940c694Smrg
11054940c694Smrg    case $func_quote_result in
11064940c694Smrg      *[\\\`\"\$]*)
11074940c694Smrg        case $func_quote_result in
11084940c694Smrg          *[\[\*\?]*)
11094940c694Smrg            func_quote_result=`$ECHO "$func_quote_result" | $SED "$sed_quote_subst"`
11104940c694Smrg            return 0
11114940c694Smrg            ;;
11124940c694Smrg        esac
11134940c694Smrg
11144940c694Smrg        func_quote_old_IFS=$IFS
11154940c694Smrg        for _G_char in '\' '`' '"' '$'
11164940c694Smrg        do
11174940c694Smrg          # STATE($1) PREV($2) SEPARATOR($3)
11184940c694Smrg          set start "" ""
11194940c694Smrg          func_quote_result=dummy"$_G_char$func_quote_result$_G_char"dummy
11204940c694Smrg          IFS=$_G_char
11214940c694Smrg          for _G_part in $func_quote_result
11224940c694Smrg          do
11234940c694Smrg            case $1 in
11244940c694Smrg            quote)
11254940c694Smrg              func_append func_quote_result "$3$2"
11264940c694Smrg              set quote "$_G_part" "\\$_G_char"
11274940c694Smrg              ;;
11284940c694Smrg            start)
11294940c694Smrg              set first "" ""
11304940c694Smrg              func_quote_result=
11314940c694Smrg              ;;
11324940c694Smrg            first)
11334940c694Smrg              set quote "$_G_part" ""
11344940c694Smrg              ;;
11354940c694Smrg            esac
11364940c694Smrg          done
11374940c694Smrg          IFS=$func_quote_old_IFS
11384940c694Smrg        done
11394940c694Smrg        ;;
11404940c694Smrg      *) ;;
11414940c694Smrg    esac
11424940c694Smrg}
11434940c694Smrg
11444940c694Smrg
114548e5ce07Smrg# func_quote_for_eval ARG...
114648e5ce07Smrg# --------------------------
114748e5ce07Smrg# Aesthetically quote ARGs to be evaled later.
114848e5ce07Smrg# This function returns two values:
114948e5ce07Smrg#   i) func_quote_for_eval_result
115048e5ce07Smrg#      double-quoted, suitable for a subsequent eval
115148e5ce07Smrg#  ii) func_quote_for_eval_unquoted_result
115248e5ce07Smrg#      has all characters that are still active within double
115348e5ce07Smrg#      quotes backslashified.
115448e5ce07Smrgfunc_quote_for_eval ()
115548e5ce07Smrg{
115648e5ce07Smrg    $debug_cmd
115748e5ce07Smrg
115848e5ce07Smrg    func_quote_for_eval_unquoted_result=
115948e5ce07Smrg    func_quote_for_eval_result=
116048e5ce07Smrg    while test 0 -lt $#; do
11614940c694Smrg      func_quote "$1"
11624940c694Smrg      _G_unquoted_arg=$func_quote_result
116348e5ce07Smrg      if test -n "$func_quote_for_eval_unquoted_result"; then
116448e5ce07Smrg	func_append func_quote_for_eval_unquoted_result " $_G_unquoted_arg"
116548e5ce07Smrg      else
116648e5ce07Smrg        func_append func_quote_for_eval_unquoted_result "$_G_unquoted_arg"
116748e5ce07Smrg      fi
116848e5ce07Smrg
116948e5ce07Smrg      case $_G_unquoted_arg in
117048e5ce07Smrg        # Double-quote args containing shell metacharacters to delay
117148e5ce07Smrg        # word splitting, command substitution and variable expansion
117248e5ce07Smrg        # for a subsequent eval.
117348e5ce07Smrg        # Many Bourne shells cannot handle close brackets correctly
117448e5ce07Smrg        # in scan sets, so we specify it separately.
117548e5ce07Smrg        *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \	]*|*]*|"")
117648e5ce07Smrg          _G_quoted_arg=\"$_G_unquoted_arg\"
117748e5ce07Smrg          ;;
117848e5ce07Smrg        *)
117948e5ce07Smrg          _G_quoted_arg=$_G_unquoted_arg
118048e5ce07Smrg	  ;;
118148e5ce07Smrg      esac
118248e5ce07Smrg
118348e5ce07Smrg      if test -n "$func_quote_for_eval_result"; then
118448e5ce07Smrg	func_append func_quote_for_eval_result " $_G_quoted_arg"
118548e5ce07Smrg      else
118648e5ce07Smrg        func_append func_quote_for_eval_result "$_G_quoted_arg"
118748e5ce07Smrg      fi
118848e5ce07Smrg      shift
118948e5ce07Smrg    done
119048e5ce07Smrg}
119148e5ce07Smrg
119248e5ce07Smrg
119348e5ce07Smrg# func_quote_for_expand ARG
119448e5ce07Smrg# -------------------------
11950eb1301bSmrg# Aesthetically quote ARG to be evaled later; same as above,
11960eb1301bSmrg# but do not quote variable references.
11970eb1301bSmrgfunc_quote_for_expand ()
119844584a44Smrg{
119948e5ce07Smrg    $debug_cmd
120048e5ce07Smrg
120144584a44Smrg    case $1 in
12020eb1301bSmrg      *[\\\`\"]*)
120348e5ce07Smrg	_G_arg=`$ECHO "$1" | $SED \
120448e5ce07Smrg	    -e "$sed_double_quote_subst" -e "$sed_double_backslash"` ;;
12050eb1301bSmrg      *)
120648e5ce07Smrg        _G_arg=$1 ;;
120744584a44Smrg    esac
120844584a44Smrg
120948e5ce07Smrg    case $_G_arg in
12100eb1301bSmrg      # Double-quote args containing shell metacharacters to delay
12110eb1301bSmrg      # word splitting and command substitution for a subsequent eval.
12120eb1301bSmrg      # Many Bourne shells cannot handle close brackets correctly
12130eb1301bSmrg      # in scan sets, so we specify it separately.
12140eb1301bSmrg      *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \	]*|*]*|"")
121548e5ce07Smrg        _G_arg=\"$_G_arg\"
12160eb1301bSmrg        ;;
12170eb1301bSmrg    esac
121844584a44Smrg
121948e5ce07Smrg    func_quote_for_expand_result=$_G_arg
122048e5ce07Smrg}
122148e5ce07Smrg
122248e5ce07Smrg
122348e5ce07Smrg# func_stripname PREFIX SUFFIX NAME
122448e5ce07Smrg# ---------------------------------
122548e5ce07Smrg# strip PREFIX and SUFFIX from NAME, and store in func_stripname_result.
122648e5ce07Smrg# PREFIX and SUFFIX must not contain globbing or regex special
122748e5ce07Smrg# characters, hashes, percent signs, but SUFFIX may contain a leading
122848e5ce07Smrg# dot (in which case that matches only a dot).
122948e5ce07Smrgif test yes = "$_G_HAVE_XSI_OPS"; then
123048e5ce07Smrg  eval 'func_stripname ()
123148e5ce07Smrg  {
123248e5ce07Smrg    $debug_cmd
123348e5ce07Smrg
123448e5ce07Smrg    # pdksh 5.2.14 does not do ${X%$Y} correctly if both X and Y are
123548e5ce07Smrg    # positional parameters, so assign one to ordinary variable first.
123648e5ce07Smrg    func_stripname_result=$3
123748e5ce07Smrg    func_stripname_result=${func_stripname_result#"$1"}
123848e5ce07Smrg    func_stripname_result=${func_stripname_result%"$2"}
123948e5ce07Smrg  }'
124048e5ce07Smrgelse
124148e5ce07Smrg  func_stripname ()
124248e5ce07Smrg  {
124348e5ce07Smrg    $debug_cmd
124448e5ce07Smrg
124548e5ce07Smrg    case $2 in
124648e5ce07Smrg      .*) func_stripname_result=`$ECHO "$3" | $SED -e "s%^$1%%" -e "s%\\\\$2\$%%"`;;
124748e5ce07Smrg      *)  func_stripname_result=`$ECHO "$3" | $SED -e "s%^$1%%" -e "s%$2\$%%"`;;
124848e5ce07Smrg    esac
124948e5ce07Smrg  }
125048e5ce07Smrgfi
125148e5ce07Smrg
125248e5ce07Smrg
125348e5ce07Smrg# func_show_eval CMD [FAIL_EXP]
125448e5ce07Smrg# -----------------------------
125548e5ce07Smrg# Unless opt_quiet is true, then output CMD.  Then, if opt_dryrun is
125648e5ce07Smrg# not true, evaluate CMD.  If the evaluation of CMD fails, and FAIL_EXP
125748e5ce07Smrg# is given, then evaluate it.
125848e5ce07Smrgfunc_show_eval ()
125948e5ce07Smrg{
126048e5ce07Smrg    $debug_cmd
126148e5ce07Smrg
126248e5ce07Smrg    _G_cmd=$1
126348e5ce07Smrg    _G_fail_exp=${2-':'}
126448e5ce07Smrg
126548e5ce07Smrg    func_quote_for_expand "$_G_cmd"
126648e5ce07Smrg    eval "func_notquiet $func_quote_for_expand_result"
126748e5ce07Smrg
126848e5ce07Smrg    $opt_dry_run || {
126948e5ce07Smrg      eval "$_G_cmd"
127048e5ce07Smrg      _G_status=$?
127148e5ce07Smrg      if test 0 -ne "$_G_status"; then
127248e5ce07Smrg	eval "(exit $_G_status); $_G_fail_exp"
127348e5ce07Smrg      fi
127448e5ce07Smrg    }
127548e5ce07Smrg}
127648e5ce07Smrg
127748e5ce07Smrg
127848e5ce07Smrg# func_show_eval_locale CMD [FAIL_EXP]
127948e5ce07Smrg# ------------------------------------
128048e5ce07Smrg# Unless opt_quiet is true, then output CMD.  Then, if opt_dryrun is
128148e5ce07Smrg# not true, evaluate CMD.  If the evaluation of CMD fails, and FAIL_EXP
128248e5ce07Smrg# is given, then evaluate it.  Use the saved locale for evaluation.
128348e5ce07Smrgfunc_show_eval_locale ()
128448e5ce07Smrg{
128548e5ce07Smrg    $debug_cmd
128648e5ce07Smrg
128748e5ce07Smrg    _G_cmd=$1
128848e5ce07Smrg    _G_fail_exp=${2-':'}
128948e5ce07Smrg
129048e5ce07Smrg    $opt_quiet || {
129148e5ce07Smrg      func_quote_for_expand "$_G_cmd"
129248e5ce07Smrg      eval "func_echo $func_quote_for_expand_result"
129348e5ce07Smrg    }
129448e5ce07Smrg
129548e5ce07Smrg    $opt_dry_run || {
129648e5ce07Smrg      eval "$_G_user_locale
129748e5ce07Smrg	    $_G_cmd"
129848e5ce07Smrg      _G_status=$?
129948e5ce07Smrg      eval "$_G_safe_locale"
130048e5ce07Smrg      if test 0 -ne "$_G_status"; then
130148e5ce07Smrg	eval "(exit $_G_status); $_G_fail_exp"
130248e5ce07Smrg      fi
130348e5ce07Smrg    }
130448e5ce07Smrg}
130548e5ce07Smrg
130648e5ce07Smrg
130748e5ce07Smrg# func_tr_sh
130848e5ce07Smrg# ----------
130948e5ce07Smrg# Turn $1 into a string suitable for a shell variable name.
131048e5ce07Smrg# Result is stored in $func_tr_sh_result.  All characters
131148e5ce07Smrg# not in the set a-zA-Z0-9_ are replaced with '_'. Further,
131248e5ce07Smrg# if $1 begins with a digit, a '_' is prepended as well.
131348e5ce07Smrgfunc_tr_sh ()
131448e5ce07Smrg{
131548e5ce07Smrg    $debug_cmd
131648e5ce07Smrg
131748e5ce07Smrg    case $1 in
131848e5ce07Smrg    [0-9]* | *[!a-zA-Z0-9_]*)
131948e5ce07Smrg      func_tr_sh_result=`$ECHO "$1" | $SED -e 's/^\([0-9]\)/_\1/' -e 's/[^a-zA-Z0-9_]/_/g'`
132048e5ce07Smrg      ;;
132148e5ce07Smrg    * )
132248e5ce07Smrg      func_tr_sh_result=$1
132348e5ce07Smrg      ;;
132448e5ce07Smrg    esac
132548e5ce07Smrg}
132648e5ce07Smrg
132748e5ce07Smrg
132848e5ce07Smrg# func_verbose ARG...
132948e5ce07Smrg# -------------------
133048e5ce07Smrg# Echo program name prefixed message in verbose mode only.
133148e5ce07Smrgfunc_verbose ()
133248e5ce07Smrg{
133348e5ce07Smrg    $debug_cmd
133448e5ce07Smrg
133548e5ce07Smrg    $opt_verbose && func_echo "$*"
133648e5ce07Smrg
133748e5ce07Smrg    :
133848e5ce07Smrg}
133948e5ce07Smrg
134048e5ce07Smrg
134148e5ce07Smrg# func_warn_and_continue ARG...
134248e5ce07Smrg# -----------------------------
134348e5ce07Smrg# Echo program name prefixed warning message to standard error.
134448e5ce07Smrgfunc_warn_and_continue ()
134548e5ce07Smrg{
134648e5ce07Smrg    $debug_cmd
134748e5ce07Smrg
134848e5ce07Smrg    $require_term_colors
134948e5ce07Smrg
135048e5ce07Smrg    func_echo_infix_1 "${tc_red}warning$tc_reset" "$*" >&2
135148e5ce07Smrg}
135248e5ce07Smrg
135348e5ce07Smrg
135448e5ce07Smrg# func_warning CATEGORY ARG...
135548e5ce07Smrg# ----------------------------
135648e5ce07Smrg# Echo program name prefixed warning message to standard error. Warning
135748e5ce07Smrg# messages can be filtered according to CATEGORY, where this function
135848e5ce07Smrg# elides messages where CATEGORY is not listed in the global variable
135948e5ce07Smrg# 'opt_warning_types'.
136048e5ce07Smrgfunc_warning ()
136148e5ce07Smrg{
136248e5ce07Smrg    $debug_cmd
136348e5ce07Smrg
136448e5ce07Smrg    # CATEGORY must be in the warning_categories list!
136548e5ce07Smrg    case " $warning_categories " in
136648e5ce07Smrg      *" $1 "*) ;;
136748e5ce07Smrg      *) func_internal_error "invalid warning category '$1'" ;;
136848e5ce07Smrg    esac
136948e5ce07Smrg
137048e5ce07Smrg    _G_category=$1
137148e5ce07Smrg    shift
137248e5ce07Smrg
137348e5ce07Smrg    case " $opt_warning_types " in
137448e5ce07Smrg      *" $_G_category "*) $warning_func ${1+"$@"} ;;
137548e5ce07Smrg    esac
1376c43cc173Smrg}
1377c43cc173Smrg
1378c43cc173Smrg
137948e5ce07Smrg# func_sort_ver VER1 VER2
138048e5ce07Smrg# -----------------------
138148e5ce07Smrg# 'sort -V' is not generally available.
138248e5ce07Smrg# Note this deviates from the version comparison in automake
138348e5ce07Smrg# in that it treats 1.5 < 1.5.0, and treats 1.4.4a < 1.4-p3a
138448e5ce07Smrg# but this should suffice as we won't be specifying old
138548e5ce07Smrg# version formats or redundant trailing .0 in bootstrap.conf.
138648e5ce07Smrg# If we did want full compatibility then we should probably
138748e5ce07Smrg# use m4_version_compare from autoconf.
138848e5ce07Smrgfunc_sort_ver ()
138948e5ce07Smrg{
139048e5ce07Smrg    $debug_cmd
139148e5ce07Smrg
139248e5ce07Smrg    printf '%s\n%s\n' "$1" "$2" \
139348e5ce07Smrg      | 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
139448e5ce07Smrg}
139548e5ce07Smrg
139648e5ce07Smrg# func_lt_ver PREV CURR
139748e5ce07Smrg# ---------------------
139848e5ce07Smrg# Return true if PREV and CURR are in the correct order according to
139948e5ce07Smrg# func_sort_ver, otherwise false.  Use it like this:
140048e5ce07Smrg#
140148e5ce07Smrg#  func_lt_ver "$prev_ver" "$proposed_ver" || func_fatal_error "..."
140248e5ce07Smrgfunc_lt_ver ()
140348e5ce07Smrg{
140448e5ce07Smrg    $debug_cmd
140548e5ce07Smrg
140648e5ce07Smrg    test "x$1" = x`func_sort_ver "$1" "$2" | $SED 1q`
140748e5ce07Smrg}
140848e5ce07Smrg
140948e5ce07Smrg
141048e5ce07Smrg# Local variables:
141148e5ce07Smrg# mode: shell-script
141248e5ce07Smrg# sh-indentation: 2
141348e5ce07Smrg# eval: (add-hook 'before-save-hook 'time-stamp)
141448e5ce07Smrg# time-stamp-pattern: "10/scriptversion=%:y-%02m-%02d.%02H; # UTC"
141548e5ce07Smrg# time-stamp-time-zone: "UTC"
141648e5ce07Smrg# End:
141748e5ce07Smrg#! /bin/sh
141848e5ce07Smrg
141948e5ce07Smrg# Set a version string for this script.
142048e5ce07Smrgscriptversion=2014-01-07.03; # UTC
142148e5ce07Smrg
142248e5ce07Smrg# A portable, pluggable option parser for Bourne shell.
142348e5ce07Smrg# Written by Gary V. Vaughan, 2010
142448e5ce07Smrg
142548e5ce07Smrg# Copyright (C) 2010-2015 Free Software Foundation, Inc.
142648e5ce07Smrg# This is free software; see the source for copying conditions.  There is NO
142748e5ce07Smrg# warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
142848e5ce07Smrg
142948e5ce07Smrg# This program is free software: you can redistribute it and/or modify
143048e5ce07Smrg# it under the terms of the GNU General Public License as published by
143148e5ce07Smrg# the Free Software Foundation, either version 3 of the License, or
143248e5ce07Smrg# (at your option) any later version.
143348e5ce07Smrg
143448e5ce07Smrg# This program is distributed in the hope that it will be useful,
143548e5ce07Smrg# but WITHOUT ANY WARRANTY; without even the implied warranty of
143648e5ce07Smrg# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
143748e5ce07Smrg# GNU General Public License for more details.
143848e5ce07Smrg
143948e5ce07Smrg# You should have received a copy of the GNU General Public License
144048e5ce07Smrg# along with this program.  If not, see <http://www.gnu.org/licenses/>.
144148e5ce07Smrg
144248e5ce07Smrg# Please report bugs or propose patches to gary@gnu.org.
144348e5ce07Smrg
144448e5ce07Smrg
144548e5ce07Smrg## ------ ##
144648e5ce07Smrg## Usage. ##
144748e5ce07Smrg## ------ ##
144848e5ce07Smrg
144948e5ce07Smrg# This file is a library for parsing options in your shell scripts along
145048e5ce07Smrg# with assorted other useful supporting features that you can make use
145148e5ce07Smrg# of too.
145248e5ce07Smrg#
145348e5ce07Smrg# For the simplest scripts you might need only:
145448e5ce07Smrg#
145548e5ce07Smrg#   #!/bin/sh
145648e5ce07Smrg#   . relative/path/to/funclib.sh
145748e5ce07Smrg#   . relative/path/to/options-parser
145848e5ce07Smrg#   scriptversion=1.0
145948e5ce07Smrg#   func_options ${1+"$@"}
146048e5ce07Smrg#   eval set dummy "$func_options_result"; shift
146148e5ce07Smrg#   ...rest of your script...
146248e5ce07Smrg#
146348e5ce07Smrg# In order for the '--version' option to work, you will need to have a
146448e5ce07Smrg# suitably formatted comment like the one at the top of this file
146548e5ce07Smrg# starting with '# Written by ' and ending with '# warranty; '.
146648e5ce07Smrg#
146748e5ce07Smrg# For '-h' and '--help' to work, you will also need a one line
146848e5ce07Smrg# description of your script's purpose in a comment directly above the
146948e5ce07Smrg# '# Written by ' line, like the one at the top of this file.
147048e5ce07Smrg#
147148e5ce07Smrg# The default options also support '--debug', which will turn on shell
147248e5ce07Smrg# execution tracing (see the comment above debug_cmd below for another
147348e5ce07Smrg# use), and '--verbose' and the func_verbose function to allow your script
147448e5ce07Smrg# to display verbose messages only when your user has specified
147548e5ce07Smrg# '--verbose'.
147648e5ce07Smrg#
147748e5ce07Smrg# After sourcing this file, you can plug processing for additional
147848e5ce07Smrg# options by amending the variables from the 'Configuration' section
147948e5ce07Smrg# below, and following the instructions in the 'Option parsing'
148048e5ce07Smrg# section further down.
148148e5ce07Smrg
148248e5ce07Smrg## -------------- ##
148348e5ce07Smrg## Configuration. ##
148448e5ce07Smrg## -------------- ##
148548e5ce07Smrg
148648e5ce07Smrg# You should override these variables in your script after sourcing this
148748e5ce07Smrg# file so that they reflect the customisations you have added to the
148848e5ce07Smrg# option parser.
148948e5ce07Smrg
149048e5ce07Smrg# The usage line for option parsing errors and the start of '-h' and
149148e5ce07Smrg# '--help' output messages. You can embed shell variables for delayed
149248e5ce07Smrg# expansion at the time the message is displayed, but you will need to
149348e5ce07Smrg# quote other shell meta-characters carefully to prevent them being
149448e5ce07Smrg# expanded when the contents are evaled.
149548e5ce07Smrgusage='$progpath [OPTION]...'
149648e5ce07Smrg
149748e5ce07Smrg# Short help message in response to '-h' and '--help'.  Add to this or
149848e5ce07Smrg# override it after sourcing this library to reflect the full set of
149948e5ce07Smrg# options your script accepts.
150048e5ce07Smrgusage_message="\
150148e5ce07Smrg       --debug        enable verbose shell tracing
150248e5ce07Smrg   -W, --warnings=CATEGORY
150348e5ce07Smrg                      report the warnings falling in CATEGORY [all]
150448e5ce07Smrg   -v, --verbose      verbosely report processing
150548e5ce07Smrg       --version      print version information and exit
150648e5ce07Smrg   -h, --help         print short or long help message and exit
150748e5ce07Smrg"
150848e5ce07Smrg
150948e5ce07Smrg# Additional text appended to 'usage_message' in response to '--help'.
151048e5ce07Smrglong_help_message="
151148e5ce07SmrgWarning categories include:
151248e5ce07Smrg       'all'          show all warnings
151348e5ce07Smrg       'none'         turn off all the warnings
151448e5ce07Smrg       'error'        warnings are treated as fatal errors"
151548e5ce07Smrg
151648e5ce07Smrg# Help message printed before fatal option parsing errors.
151748e5ce07Smrgfatal_help="Try '\$progname --help' for more information."
151848e5ce07Smrg
151948e5ce07Smrg
152048e5ce07Smrg
152148e5ce07Smrg## ------------------------- ##
152248e5ce07Smrg## Hook function management. ##
152348e5ce07Smrg## ------------------------- ##
152448e5ce07Smrg
152548e5ce07Smrg# This section contains functions for adding, removing, and running hooks
152648e5ce07Smrg# to the main code.  A hook is just a named list of of function, that can
152748e5ce07Smrg# be run in order later on.
152848e5ce07Smrg
152948e5ce07Smrg# func_hookable FUNC_NAME
153048e5ce07Smrg# -----------------------
153148e5ce07Smrg# Declare that FUNC_NAME will run hooks added with
153248e5ce07Smrg# 'func_add_hook FUNC_NAME ...'.
153348e5ce07Smrgfunc_hookable ()
153448e5ce07Smrg{
153548e5ce07Smrg    $debug_cmd
153648e5ce07Smrg
153748e5ce07Smrg    func_append hookable_fns " $1"
153848e5ce07Smrg}
153948e5ce07Smrg
154048e5ce07Smrg
154148e5ce07Smrg# func_add_hook FUNC_NAME HOOK_FUNC
154248e5ce07Smrg# ---------------------------------
154348e5ce07Smrg# Request that FUNC_NAME call HOOK_FUNC before it returns.  FUNC_NAME must
154448e5ce07Smrg# first have been declared "hookable" by a call to 'func_hookable'.
154548e5ce07Smrgfunc_add_hook ()
154648e5ce07Smrg{
154748e5ce07Smrg    $debug_cmd
154848e5ce07Smrg
154948e5ce07Smrg    case " $hookable_fns " in
155048e5ce07Smrg      *" $1 "*) ;;
155148e5ce07Smrg      *) func_fatal_error "'$1' does not accept hook functions." ;;
155248e5ce07Smrg    esac
155348e5ce07Smrg
155448e5ce07Smrg    eval func_append ${1}_hooks '" $2"'
155548e5ce07Smrg}
155648e5ce07Smrg
155748e5ce07Smrg
155848e5ce07Smrg# func_remove_hook FUNC_NAME HOOK_FUNC
155948e5ce07Smrg# ------------------------------------
156048e5ce07Smrg# Remove HOOK_FUNC from the list of functions called by FUNC_NAME.
156148e5ce07Smrgfunc_remove_hook ()
156248e5ce07Smrg{
156348e5ce07Smrg    $debug_cmd
156448e5ce07Smrg
156548e5ce07Smrg    eval ${1}_hooks='`$ECHO "\$'$1'_hooks" |$SED "s| '$2'||"`'
156648e5ce07Smrg}
156748e5ce07Smrg
156848e5ce07Smrg
156948e5ce07Smrg# func_run_hooks FUNC_NAME [ARG]...
157048e5ce07Smrg# ---------------------------------
157148e5ce07Smrg# Run all hook functions registered to FUNC_NAME.
157248e5ce07Smrg# It is assumed that the list of hook functions contains nothing more
157348e5ce07Smrg# than a whitespace-delimited list of legal shell function names, and
157448e5ce07Smrg# no effort is wasted trying to catch shell meta-characters or preserve
157548e5ce07Smrg# whitespace.
157648e5ce07Smrgfunc_run_hooks ()
157748e5ce07Smrg{
157848e5ce07Smrg    $debug_cmd
157948e5ce07Smrg
158048e5ce07Smrg    case " $hookable_fns " in
158148e5ce07Smrg      *" $1 "*) ;;
158248e5ce07Smrg      *) func_fatal_error "'$1' does not support hook funcions.n" ;;
158348e5ce07Smrg    esac
158448e5ce07Smrg
158548e5ce07Smrg    eval _G_hook_fns=\$$1_hooks; shift
158648e5ce07Smrg
158748e5ce07Smrg    for _G_hook in $_G_hook_fns; do
158848e5ce07Smrg      eval $_G_hook '"$@"'
158948e5ce07Smrg
159048e5ce07Smrg      # store returned options list back into positional
159148e5ce07Smrg      # parameters for next 'cmd' execution.
159248e5ce07Smrg      eval _G_hook_result=\$${_G_hook}_result
159348e5ce07Smrg      eval set dummy "$_G_hook_result"; shift
159448e5ce07Smrg    done
159548e5ce07Smrg
159648e5ce07Smrg    func_quote_for_eval ${1+"$@"}
159748e5ce07Smrg    func_run_hooks_result=$func_quote_for_eval_result
159848e5ce07Smrg}
159948e5ce07Smrg
160048e5ce07Smrg
160148e5ce07Smrg
160248e5ce07Smrg## --------------- ##
160348e5ce07Smrg## Option parsing. ##
160448e5ce07Smrg## --------------- ##
160548e5ce07Smrg
160648e5ce07Smrg# In order to add your own option parsing hooks, you must accept the
160748e5ce07Smrg# full positional parameter list in your hook function, remove any
160848e5ce07Smrg# options that you action, and then pass back the remaining unprocessed
160948e5ce07Smrg# options in '<hooked_function_name>_result', escaped suitably for
161048e5ce07Smrg# 'eval'.  Like this:
161148e5ce07Smrg#
161248e5ce07Smrg#    my_options_prep ()
161348e5ce07Smrg#    {
161448e5ce07Smrg#        $debug_cmd
161548e5ce07Smrg#
161648e5ce07Smrg#        # Extend the existing usage message.
161748e5ce07Smrg#        usage_message=$usage_message'
161848e5ce07Smrg#      -s, --silent       don'\''t print informational messages
161948e5ce07Smrg#    '
162048e5ce07Smrg#
162148e5ce07Smrg#        func_quote_for_eval ${1+"$@"}
162248e5ce07Smrg#        my_options_prep_result=$func_quote_for_eval_result
162348e5ce07Smrg#    }
162448e5ce07Smrg#    func_add_hook func_options_prep my_options_prep
162548e5ce07Smrg#
162648e5ce07Smrg#
162748e5ce07Smrg#    my_silent_option ()
162848e5ce07Smrg#    {
162948e5ce07Smrg#        $debug_cmd
163048e5ce07Smrg#
163148e5ce07Smrg#        # Note that for efficiency, we parse as many options as we can
163248e5ce07Smrg#        # recognise in a loop before passing the remainder back to the
163348e5ce07Smrg#        # caller on the first unrecognised argument we encounter.
163448e5ce07Smrg#        while test $# -gt 0; do
163548e5ce07Smrg#          opt=$1; shift
163648e5ce07Smrg#          case $opt in
163748e5ce07Smrg#            --silent|-s) opt_silent=: ;;
163848e5ce07Smrg#            # Separate non-argument short options:
163948e5ce07Smrg#            -s*)         func_split_short_opt "$_G_opt"
164048e5ce07Smrg#                         set dummy "$func_split_short_opt_name" \
164148e5ce07Smrg#                             "-$func_split_short_opt_arg" ${1+"$@"}
164248e5ce07Smrg#                         shift
164348e5ce07Smrg#                         ;;
164448e5ce07Smrg#            *)            set dummy "$_G_opt" "$*"; shift; break ;;
164548e5ce07Smrg#          esac
164648e5ce07Smrg#        done
164748e5ce07Smrg#
164848e5ce07Smrg#        func_quote_for_eval ${1+"$@"}
164948e5ce07Smrg#        my_silent_option_result=$func_quote_for_eval_result
165048e5ce07Smrg#    }
165148e5ce07Smrg#    func_add_hook func_parse_options my_silent_option
165248e5ce07Smrg#
165348e5ce07Smrg#
165448e5ce07Smrg#    my_option_validation ()
165548e5ce07Smrg#    {
165648e5ce07Smrg#        $debug_cmd
165748e5ce07Smrg#
165848e5ce07Smrg#        $opt_silent && $opt_verbose && func_fatal_help "\
165948e5ce07Smrg#    '--silent' and '--verbose' options are mutually exclusive."
166048e5ce07Smrg#
166148e5ce07Smrg#        func_quote_for_eval ${1+"$@"}
166248e5ce07Smrg#        my_option_validation_result=$func_quote_for_eval_result
166348e5ce07Smrg#    }
166448e5ce07Smrg#    func_add_hook func_validate_options my_option_validation
166548e5ce07Smrg#
166648e5ce07Smrg# You'll alse need to manually amend $usage_message to reflect the extra
166748e5ce07Smrg# options you parse.  It's preferable to append if you can, so that
166848e5ce07Smrg# multiple option parsing hooks can be added safely.
166948e5ce07Smrg
167048e5ce07Smrg
167148e5ce07Smrg# func_options [ARG]...
167248e5ce07Smrg# ---------------------
167348e5ce07Smrg# All the functions called inside func_options are hookable. See the
167448e5ce07Smrg# individual implementations for details.
167548e5ce07Smrgfunc_hookable func_options
167648e5ce07Smrgfunc_options ()
1677c43cc173Smrg{
167848e5ce07Smrg    $debug_cmd
167944584a44Smrg
168048e5ce07Smrg    func_options_prep ${1+"$@"}
168148e5ce07Smrg    eval func_parse_options \
168248e5ce07Smrg        ${func_options_prep_result+"$func_options_prep_result"}
168348e5ce07Smrg    eval func_validate_options \
168448e5ce07Smrg        ${func_parse_options_result+"$func_parse_options_result"}
168544584a44Smrg
168648e5ce07Smrg    eval func_run_hooks func_options \
168748e5ce07Smrg        ${func_validate_options_result+"$func_validate_options_result"}
168848e5ce07Smrg
168948e5ce07Smrg    # save modified positional parameters for caller
169048e5ce07Smrg    func_options_result=$func_run_hooks_result
1691c43cc173Smrg}
1692c43cc173Smrg
1693c43cc173Smrg
169448e5ce07Smrg# func_options_prep [ARG]...
169548e5ce07Smrg# --------------------------
169648e5ce07Smrg# All initialisations required before starting the option parse loop.
169748e5ce07Smrg# Note that when calling hook functions, we pass through the list of
169848e5ce07Smrg# positional parameters.  If a hook function modifies that list, and
169948e5ce07Smrg# needs to propogate that back to rest of this script, then the complete
170048e5ce07Smrg# modified list must be put in 'func_run_hooks_result' before
170148e5ce07Smrg# returning.
170248e5ce07Smrgfunc_hookable func_options_prep
170348e5ce07Smrgfunc_options_prep ()
1704c43cc173Smrg{
170548e5ce07Smrg    $debug_cmd
1706c27c18e8Smrg
170748e5ce07Smrg    # Option defaults:
170848e5ce07Smrg    opt_verbose=false
170948e5ce07Smrg    opt_warning_types=
171044584a44Smrg
171148e5ce07Smrg    func_run_hooks func_options_prep ${1+"$@"}
171248e5ce07Smrg
171348e5ce07Smrg    # save modified positional parameters for caller
171448e5ce07Smrg    func_options_prep_result=$func_run_hooks_result
1715c43cc173Smrg}
1716c43cc173Smrg
171748e5ce07Smrg
171848e5ce07Smrg# func_parse_options [ARG]...
171948e5ce07Smrg# ---------------------------
172048e5ce07Smrg# The main option parsing loop.
172148e5ce07Smrgfunc_hookable func_parse_options
172248e5ce07Smrgfunc_parse_options ()
1723c43cc173Smrg{
172448e5ce07Smrg    $debug_cmd
172548e5ce07Smrg
172648e5ce07Smrg    func_parse_options_result=
172748e5ce07Smrg
172848e5ce07Smrg    # this just eases exit handling
172948e5ce07Smrg    while test $# -gt 0; do
173048e5ce07Smrg      # Defer to hook functions for initial option parsing, so they
173148e5ce07Smrg      # get priority in the event of reusing an option name.
173248e5ce07Smrg      func_run_hooks func_parse_options ${1+"$@"}
173348e5ce07Smrg
173448e5ce07Smrg      # Adjust func_parse_options positional parameters to match
173548e5ce07Smrg      eval set dummy "$func_run_hooks_result"; shift
173648e5ce07Smrg
173748e5ce07Smrg      # Break out of the loop if we already parsed every option.
173848e5ce07Smrg      test $# -gt 0 || break
173948e5ce07Smrg
174048e5ce07Smrg      _G_opt=$1
174148e5ce07Smrg      shift
174248e5ce07Smrg      case $_G_opt in
174348e5ce07Smrg        --debug|-x)   debug_cmd='set -x'
174448e5ce07Smrg                      func_echo "enabling shell trace mode"
174548e5ce07Smrg                      $debug_cmd
174648e5ce07Smrg                      ;;
174748e5ce07Smrg
174848e5ce07Smrg        --no-warnings|--no-warning|--no-warn)
174948e5ce07Smrg                      set dummy --warnings none ${1+"$@"}
175048e5ce07Smrg                      shift
175148e5ce07Smrg		      ;;
175248e5ce07Smrg
175348e5ce07Smrg        --warnings|--warning|-W)
175448e5ce07Smrg                      test $# = 0 && func_missing_arg $_G_opt && break
175548e5ce07Smrg                      case " $warning_categories $1" in
175648e5ce07Smrg                        *" $1 "*)
175748e5ce07Smrg                          # trailing space prevents matching last $1 above
175848e5ce07Smrg                          func_append_uniq opt_warning_types " $1"
175948e5ce07Smrg                          ;;
176048e5ce07Smrg                        *all)
176148e5ce07Smrg                          opt_warning_types=$warning_categories
176248e5ce07Smrg                          ;;
176348e5ce07Smrg                        *none)
176448e5ce07Smrg                          opt_warning_types=none
176548e5ce07Smrg                          warning_func=:
176648e5ce07Smrg                          ;;
176748e5ce07Smrg                        *error)
176848e5ce07Smrg                          opt_warning_types=$warning_categories
176948e5ce07Smrg                          warning_func=func_fatal_error
177048e5ce07Smrg                          ;;
177148e5ce07Smrg                        *)
177248e5ce07Smrg                          func_fatal_error \
177348e5ce07Smrg                             "unsupported warning category: '$1'"
177448e5ce07Smrg                          ;;
177548e5ce07Smrg                      esac
177648e5ce07Smrg                      shift
177748e5ce07Smrg                      ;;
177848e5ce07Smrg
177948e5ce07Smrg        --verbose|-v) opt_verbose=: ;;
178048e5ce07Smrg        --version)    func_version ;;
178148e5ce07Smrg        -\?|-h)       func_usage ;;
178248e5ce07Smrg        --help)       func_help ;;
178348e5ce07Smrg
178448e5ce07Smrg	# Separate optargs to long options (plugins may need this):
178548e5ce07Smrg	--*=*)        func_split_equals "$_G_opt"
178648e5ce07Smrg	              set dummy "$func_split_equals_lhs" \
178748e5ce07Smrg                          "$func_split_equals_rhs" ${1+"$@"}
178848e5ce07Smrg                      shift
178948e5ce07Smrg                      ;;
179048e5ce07Smrg
179148e5ce07Smrg       # Separate optargs to short options:
179248e5ce07Smrg        -W*)
179348e5ce07Smrg                      func_split_short_opt "$_G_opt"
179448e5ce07Smrg                      set dummy "$func_split_short_opt_name" \
179548e5ce07Smrg                          "$func_split_short_opt_arg" ${1+"$@"}
179648e5ce07Smrg                      shift
179748e5ce07Smrg                      ;;
179848e5ce07Smrg
179948e5ce07Smrg        # Separate non-argument short options:
180048e5ce07Smrg        -\?*|-h*|-v*|-x*)
180148e5ce07Smrg                      func_split_short_opt "$_G_opt"
180248e5ce07Smrg                      set dummy "$func_split_short_opt_name" \
180348e5ce07Smrg                          "-$func_split_short_opt_arg" ${1+"$@"}
180448e5ce07Smrg                      shift
180548e5ce07Smrg                      ;;
180648e5ce07Smrg
180748e5ce07Smrg        --)           break ;;
180848e5ce07Smrg        -*)           func_fatal_help "unrecognised option: '$_G_opt'" ;;
180948e5ce07Smrg        *)            set dummy "$_G_opt" ${1+"$@"}; shift; break ;;
181048e5ce07Smrg      esac
181148e5ce07Smrg    done
181248e5ce07Smrg
181348e5ce07Smrg    # save modified positional parameters for caller
181448e5ce07Smrg    func_quote_for_eval ${1+"$@"}
181548e5ce07Smrg    func_parse_options_result=$func_quote_for_eval_result
1816b789ec8aSmrg}
1817b789ec8aSmrg
1818c43cc173Smrg
181948e5ce07Smrg# func_validate_options [ARG]...
182048e5ce07Smrg# ------------------------------
182148e5ce07Smrg# Perform any sanity checks on option settings and/or unconsumed
182248e5ce07Smrg# arguments.
182348e5ce07Smrgfunc_hookable func_validate_options
182448e5ce07Smrgfunc_validate_options ()
18250eb1301bSmrg{
182648e5ce07Smrg    $debug_cmd
1827b789ec8aSmrg
182848e5ce07Smrg    # Display all warnings if -W was not given.
182948e5ce07Smrg    test -n "$opt_warning_types" || opt_warning_types=" $warning_categories"
183048e5ce07Smrg
183148e5ce07Smrg    func_run_hooks func_validate_options ${1+"$@"}
183248e5ce07Smrg
183348e5ce07Smrg    # Bail if the options were screwed!
183448e5ce07Smrg    $exit_cmd $EXIT_FAILURE
183548e5ce07Smrg
183648e5ce07Smrg    # save modified positional parameters for caller
183748e5ce07Smrg    func_validate_options_result=$func_run_hooks_result
18380eb1301bSmrg}
183944584a44Smrg
184048e5ce07Smrg
184148e5ce07Smrg
184248e5ce07Smrg## ----------------- ##
184348e5ce07Smrg## Helper functions. ##
184448e5ce07Smrg## ----------------- ##
184548e5ce07Smrg
184648e5ce07Smrg# This section contains the helper functions used by the rest of the
184748e5ce07Smrg# hookable option parser framework in ascii-betical order.
184848e5ce07Smrg
184948e5ce07Smrg
185048e5ce07Smrg# func_fatal_help ARG...
185148e5ce07Smrg# ----------------------
185248e5ce07Smrg# Echo program name prefixed message to standard error, followed by
185348e5ce07Smrg# a help hint, and exit.
185448e5ce07Smrgfunc_fatal_help ()
1855c27c18e8Smrg{
185648e5ce07Smrg    $debug_cmd
1857b789ec8aSmrg
185848e5ce07Smrg    eval \$ECHO \""Usage: $usage"\"
185948e5ce07Smrg    eval \$ECHO \""$fatal_help"\"
186048e5ce07Smrg    func_error ${1+"$@"}
186148e5ce07Smrg    exit $EXIT_FAILURE
1862c27c18e8Smrg}
1863c27c18e8Smrg
186448e5ce07Smrg
186548e5ce07Smrg# func_help
186648e5ce07Smrg# ---------
186748e5ce07Smrg# Echo long help message to standard output and exit.
1868c27c18e8Smrgfunc_help ()
1869c27c18e8Smrg{
187048e5ce07Smrg    $debug_cmd
187148e5ce07Smrg
187248e5ce07Smrg    func_usage_message
187348e5ce07Smrg    $ECHO "$long_help_message"
187448e5ce07Smrg    exit 0
1875c27c18e8Smrg}
1876c27c18e8Smrg
187748e5ce07Smrg
187848e5ce07Smrg# func_missing_arg ARGNAME
187948e5ce07Smrg# ------------------------
1880c27c18e8Smrg# Echo program name prefixed message to standard error and set global
1881c27c18e8Smrg# exit_cmd.
1882c27c18e8Smrgfunc_missing_arg ()
1883c27c18e8Smrg{
188448e5ce07Smrg    $debug_cmd
1885b789ec8aSmrg
188648e5ce07Smrg    func_error "Missing argument for '$1'."
1887c27c18e8Smrg    exit_cmd=exit
1888c43cc173Smrg}
1889c43cc173Smrg
1890c43cc173Smrg
189148e5ce07Smrg# func_split_equals STRING
189248e5ce07Smrg# ------------------------
189348e5ce07Smrg# Set func_split_equals_lhs and func_split_equals_rhs shell variables after
189448e5ce07Smrg# splitting STRING at the '=' sign.
189548e5ce07Smrgtest -z "$_G_HAVE_XSI_OPS" \
189648e5ce07Smrg    && (eval 'x=a/b/c;
189748e5ce07Smrg      test 5aa/bb/cc = "${#x}${x%%/*}${x%/*}${x#*/}${x##*/}"') 2>/dev/null \
189848e5ce07Smrg    && _G_HAVE_XSI_OPS=yes
189948e5ce07Smrg
190048e5ce07Smrgif test yes = "$_G_HAVE_XSI_OPS"
190148e5ce07Smrgthen
190248e5ce07Smrg  # This is an XSI compatible shell, allowing a faster implementation...
190348e5ce07Smrg  eval 'func_split_equals ()
190448e5ce07Smrg  {
190548e5ce07Smrg      $debug_cmd
190648e5ce07Smrg
190748e5ce07Smrg      func_split_equals_lhs=${1%%=*}
190848e5ce07Smrg      func_split_equals_rhs=${1#*=}
190948e5ce07Smrg      test "x$func_split_equals_lhs" = "x$1" \
191048e5ce07Smrg        && func_split_equals_rhs=
191148e5ce07Smrg  }'
191248e5ce07Smrgelse
191348e5ce07Smrg  # ...otherwise fall back to using expr, which is often a shell builtin.
191448e5ce07Smrg  func_split_equals ()
191548e5ce07Smrg  {
191648e5ce07Smrg      $debug_cmd
191748e5ce07Smrg
191848e5ce07Smrg      func_split_equals_lhs=`expr "x$1" : 'x\([^=]*\)'`
191948e5ce07Smrg      func_split_equals_rhs=
192048e5ce07Smrg      test "x$func_split_equals_lhs" = "x$1" \
192148e5ce07Smrg        || func_split_equals_rhs=`expr "x$1" : 'x[^=]*=\(.*\)$'`
192248e5ce07Smrg  }
192348e5ce07Smrgfi #func_split_equals
192448e5ce07Smrg
192548e5ce07Smrg
192648e5ce07Smrg# func_split_short_opt SHORTOPT
192748e5ce07Smrg# -----------------------------
1928b789ec8aSmrg# Set func_split_short_opt_name and func_split_short_opt_arg shell
1929b789ec8aSmrg# variables after splitting SHORTOPT after the 2nd character.
193048e5ce07Smrgif test yes = "$_G_HAVE_XSI_OPS"
193148e5ce07Smrgthen
193248e5ce07Smrg  # This is an XSI compatible shell, allowing a faster implementation...
193348e5ce07Smrg  eval 'func_split_short_opt ()
193448e5ce07Smrg  {
193548e5ce07Smrg      $debug_cmd
193648e5ce07Smrg
193748e5ce07Smrg      func_split_short_opt_arg=${1#??}
193848e5ce07Smrg      func_split_short_opt_name=${1%"$func_split_short_opt_arg"}
193948e5ce07Smrg  }'
194048e5ce07Smrgelse
194148e5ce07Smrg  # ...otherwise fall back to using expr, which is often a shell builtin.
194248e5ce07Smrg  func_split_short_opt ()
194348e5ce07Smrg  {
194448e5ce07Smrg      $debug_cmd
194548e5ce07Smrg
194648e5ce07Smrg      func_split_short_opt_name=`expr "x$1" : 'x-\(.\)'`
194748e5ce07Smrg      func_split_short_opt_arg=`expr "x$1" : 'x-.\(.*\)$'`
194848e5ce07Smrg  }
194948e5ce07Smrgfi #func_split_short_opt
195048e5ce07Smrg
195148e5ce07Smrg
195248e5ce07Smrg# func_usage
195348e5ce07Smrg# ----------
195448e5ce07Smrg# Echo short help message to standard output and exit.
195548e5ce07Smrgfunc_usage ()
1956b789ec8aSmrg{
195748e5ce07Smrg    $debug_cmd
1958b789ec8aSmrg
195948e5ce07Smrg    func_usage_message
196048e5ce07Smrg    $ECHO "Run '$progname --help |${PAGER-more}' for full usage"
196148e5ce07Smrg    exit 0
196248e5ce07Smrg}
1963b789ec8aSmrg
1964b789ec8aSmrg
196548e5ce07Smrg# func_usage_message
196648e5ce07Smrg# ------------------
196748e5ce07Smrg# Echo short help message to standard output.
196848e5ce07Smrgfunc_usage_message ()
1969b789ec8aSmrg{
197048e5ce07Smrg    $debug_cmd
1971b789ec8aSmrg
197248e5ce07Smrg    eval \$ECHO \""Usage: $usage"\"
197348e5ce07Smrg    echo
197448e5ce07Smrg    $SED -n 's|^# ||
197548e5ce07Smrg        /^Written by/{
197648e5ce07Smrg          x;p;x
197748e5ce07Smrg        }
197848e5ce07Smrg	h
197948e5ce07Smrg	/^Written by/q' < "$progpath"
198048e5ce07Smrg    echo
198148e5ce07Smrg    eval \$ECHO \""$usage_message"\"
198248e5ce07Smrg}
1983b789ec8aSmrg
1984c43cc173Smrg
198548e5ce07Smrg# func_version
198648e5ce07Smrg# ------------
198748e5ce07Smrg# Echo version message to standard output and exit.
198848e5ce07Smrgfunc_version ()
198948e5ce07Smrg{
199048e5ce07Smrg    $debug_cmd
1991c27c18e8Smrg
199248e5ce07Smrg    printf '%s\n' "$progname $scriptversion"
199348e5ce07Smrg    $SED -n '
199448e5ce07Smrg        /(C)/!b go
199548e5ce07Smrg        :more
199648e5ce07Smrg        /\./!{
199748e5ce07Smrg          N
199848e5ce07Smrg          s|\n# | |
199948e5ce07Smrg          b more
200048e5ce07Smrg        }
200148e5ce07Smrg        :go
200248e5ce07Smrg        /^# Written by /,/# warranty; / {
200348e5ce07Smrg          s|^# ||
200448e5ce07Smrg          s|^# *$||
200548e5ce07Smrg          s|\((C)\)[ 0-9,-]*[ ,-]\([1-9][0-9]* \)|\1 \2|
200648e5ce07Smrg          p
200748e5ce07Smrg        }
200848e5ce07Smrg        /^# Written by / {
200948e5ce07Smrg          s|^# ||
201048e5ce07Smrg          p
201148e5ce07Smrg        }
201248e5ce07Smrg        /^warranty; /q' < "$progpath"
2013c27c18e8Smrg
201448e5ce07Smrg    exit $?
201548e5ce07Smrg}
2016c27c18e8Smrg
2017c43cc173Smrg
201848e5ce07Smrg# Local variables:
201948e5ce07Smrg# mode: shell-script
202048e5ce07Smrg# sh-indentation: 2
202148e5ce07Smrg# eval: (add-hook 'before-save-hook 'time-stamp)
202248e5ce07Smrg# time-stamp-pattern: "10/scriptversion=%:y-%02m-%02d.%02H; # UTC"
202348e5ce07Smrg# time-stamp-time-zone: "UTC"
202448e5ce07Smrg# End:
2025c43cc173Smrg
202648e5ce07Smrg# Set a version string.
202748e5ce07Smrgscriptversion='(GNU libtool) 2.4.6'
2028c43cc173Smrg
2029c27c18e8Smrg
203048e5ce07Smrg# func_echo ARG...
203148e5ce07Smrg# ----------------
203248e5ce07Smrg# Libtool also displays the current mode in messages, so override
203348e5ce07Smrg# funclib.sh func_echo with this custom definition.
203448e5ce07Smrgfunc_echo ()
2035b789ec8aSmrg{
203648e5ce07Smrg    $debug_cmd
2037b789ec8aSmrg
203848e5ce07Smrg    _G_message=$*
203948e5ce07Smrg
204048e5ce07Smrg    func_echo_IFS=$IFS
204148e5ce07Smrg    IFS=$nl
204248e5ce07Smrg    for _G_line in $_G_message; do
204348e5ce07Smrg      IFS=$func_echo_IFS
204448e5ce07Smrg      $ECHO "$progname${opt_mode+: $opt_mode}: $_G_line"
204548e5ce07Smrg    done
204648e5ce07Smrg    IFS=$func_echo_IFS
204748e5ce07Smrg}
2048b789ec8aSmrg
2049b789ec8aSmrg
205048e5ce07Smrg# func_warning ARG...
205148e5ce07Smrg# -------------------
205248e5ce07Smrg# Libtool warnings are not categorized, so override funclib.sh
205348e5ce07Smrg# func_warning with this simpler definition.
205448e5ce07Smrgfunc_warning ()
2055b789ec8aSmrg{
205648e5ce07Smrg    $debug_cmd
205748e5ce07Smrg
205848e5ce07Smrg    $warning_func ${1+"$@"}
205948e5ce07Smrg}
206048e5ce07Smrg
2061b789ec8aSmrg
206248e5ce07Smrg## ---------------- ##
206348e5ce07Smrg## Options parsing. ##
206448e5ce07Smrg## ---------------- ##
206548e5ce07Smrg
206648e5ce07Smrg# Hook in the functions to make sure our own options are parsed during
206748e5ce07Smrg# the option parsing loop.
206848e5ce07Smrg
206948e5ce07Smrgusage='$progpath [OPTION]... [MODE-ARG]...'
207048e5ce07Smrg
207148e5ce07Smrg# Short help message in response to '-h'.
207248e5ce07Smrgusage_message="Options:
207348e5ce07Smrg       --config             show all configuration variables
207448e5ce07Smrg       --debug              enable verbose shell tracing
207548e5ce07Smrg   -n, --dry-run            display commands without modifying any files
207648e5ce07Smrg       --features           display basic configuration information and exit
207748e5ce07Smrg       --mode=MODE          use operation mode MODE
207848e5ce07Smrg       --no-warnings        equivalent to '-Wnone'
207948e5ce07Smrg       --preserve-dup-deps  don't remove duplicate dependency libraries
208048e5ce07Smrg       --quiet, --silent    don't print informational messages
208148e5ce07Smrg       --tag=TAG            use configuration variables from tag TAG
208248e5ce07Smrg   -v, --verbose            print more informational messages than default
208348e5ce07Smrg       --version            print version information
208448e5ce07Smrg   -W, --warnings=CATEGORY  report the warnings falling in CATEGORY [all]
208548e5ce07Smrg   -h, --help, --help-all   print short, long, or detailed help message
208648e5ce07Smrg"
2087b789ec8aSmrg
208848e5ce07Smrg# Additional text appended to 'usage_message' in response to '--help'.
208948e5ce07Smrgfunc_help ()
20900eb1301bSmrg{
209148e5ce07Smrg    $debug_cmd
209248e5ce07Smrg
209348e5ce07Smrg    func_usage_message
209448e5ce07Smrg    $ECHO "$long_help_message
209548e5ce07Smrg
209648e5ce07SmrgMODE must be one of the following:
209748e5ce07Smrg
209848e5ce07Smrg       clean           remove files from the build directory
209948e5ce07Smrg       compile         compile a source file into a libtool object
210048e5ce07Smrg       execute         automatically set library path, then run a program
210148e5ce07Smrg       finish          complete the installation of libtool libraries
210248e5ce07Smrg       install         install libraries or executables
210348e5ce07Smrg       link            create a library or an executable
210448e5ce07Smrg       uninstall       remove libraries from an installed directory
210548e5ce07Smrg
210648e5ce07SmrgMODE-ARGS vary depending on the MODE.  When passed as first option,
210748e5ce07Smrg'--mode=MODE' may be abbreviated as 'MODE' or a unique abbreviation of that.
210848e5ce07SmrgTry '$progname --help --mode=MODE' for a more detailed description of MODE.
210948e5ce07Smrg
211048e5ce07SmrgWhen reporting a bug, please describe a test case to reproduce it and
211148e5ce07Smrginclude the following information:
211248e5ce07Smrg
211348e5ce07Smrg       host-triplet:   $host
211448e5ce07Smrg       shell:          $SHELL
211548e5ce07Smrg       compiler:       $LTCC
211648e5ce07Smrg       compiler flags: $LTCFLAGS
211748e5ce07Smrg       linker:         $LD (gnu? $with_gnu_ld)
211848e5ce07Smrg       version:        $progname (GNU libtool) 2.4.6
211948e5ce07Smrg       automake:       `($AUTOMAKE --version) 2>/dev/null |$SED 1q`
212048e5ce07Smrg       autoconf:       `($AUTOCONF --version) 2>/dev/null |$SED 1q`
212148e5ce07Smrg
212248e5ce07SmrgReport bugs to <bug-libtool@gnu.org>.
212348e5ce07SmrgGNU libtool home page: <http://www.gnu.org/software/libtool/>.
212448e5ce07SmrgGeneral help using GNU software: <http://www.gnu.org/gethelp/>."
212548e5ce07Smrg    exit 0
212648e5ce07Smrg}
212744584a44Smrg
212844584a44Smrg
212948e5ce07Smrg# func_lo2o OBJECT-NAME
213048e5ce07Smrg# ---------------------
213148e5ce07Smrg# Transform OBJECT-NAME from a '.lo' suffix to the platform specific
213248e5ce07Smrg# object suffix.
213344584a44Smrg
213448e5ce07Smrglo2o=s/\\.lo\$/.$objext/
213548e5ce07Smrgo2lo=s/\\.$objext\$/.lo/
213644584a44Smrg
213748e5ce07Smrgif test yes = "$_G_HAVE_XSI_OPS"; then
213848e5ce07Smrg  eval 'func_lo2o ()
213948e5ce07Smrg  {
214048e5ce07Smrg    case $1 in
214148e5ce07Smrg      *.lo) func_lo2o_result=${1%.lo}.$objext ;;
214248e5ce07Smrg      *   ) func_lo2o_result=$1               ;;
214348e5ce07Smrg    esac
214448e5ce07Smrg  }'
214548e5ce07Smrg
214648e5ce07Smrg  # func_xform LIBOBJ-OR-SOURCE
214748e5ce07Smrg  # ---------------------------
214848e5ce07Smrg  # Transform LIBOBJ-OR-SOURCE from a '.o' or '.c' (or otherwise)
214948e5ce07Smrg  # suffix to a '.lo' libtool-object suffix.
215048e5ce07Smrg  eval 'func_xform ()
215148e5ce07Smrg  {
215248e5ce07Smrg    func_xform_result=${1%.*}.lo
215348e5ce07Smrg  }'
215448e5ce07Smrgelse
215548e5ce07Smrg  # ...otherwise fall back to using sed.
215648e5ce07Smrg  func_lo2o ()
215748e5ce07Smrg  {
215848e5ce07Smrg    func_lo2o_result=`$ECHO "$1" | $SED "$lo2o"`
215948e5ce07Smrg  }
216048e5ce07Smrg
216148e5ce07Smrg  func_xform ()
216248e5ce07Smrg  {
216348e5ce07Smrg    func_xform_result=`$ECHO "$1" | $SED 's|\.[^.]*$|.lo|'`
216448e5ce07Smrg  }
216548e5ce07Smrgfi
2166b789ec8aSmrg
2167b789ec8aSmrg
216848e5ce07Smrg# func_fatal_configuration ARG...
216948e5ce07Smrg# -------------------------------
2170c27c18e8Smrg# Echo program name prefixed message to standard error, followed by
2171c27c18e8Smrg# a configuration failure hint, and exit.
2172c27c18e8Smrgfunc_fatal_configuration ()
2173c27c18e8Smrg{
217448e5ce07Smrg    func__fatal_error ${1+"$@"} \
217548e5ce07Smrg      "See the $PACKAGE documentation for more information." \
217648e5ce07Smrg      "Fatal configuration error."
2177c27c18e8Smrg}
2178c43cc173Smrg
217921e67964Smrg
2180c27c18e8Smrg# func_config
218148e5ce07Smrg# -----------
2182c27c18e8Smrg# Display the configuration for all the tags in this script.
2183c27c18e8Smrgfunc_config ()
2184c27c18e8Smrg{
2185c27c18e8Smrg    re_begincf='^# ### BEGIN LIBTOOL'
2186c27c18e8Smrg    re_endcf='^# ### END LIBTOOL'
2187c27c18e8Smrg
2188c27c18e8Smrg    # Default configuration.
2189c27c18e8Smrg    $SED "1,/$re_begincf CONFIG/d;/$re_endcf CONFIG/,\$d" < "$progpath"
2190c43cc173Smrg
2191c43cc173Smrg    # Now print the configurations for the tags.
2192c43cc173Smrg    for tagname in $taglist; do
2193c27c18e8Smrg      $SED -n "/$re_begincf TAG CONFIG: $tagname\$/,/$re_endcf TAG CONFIG: $tagname\$/p" < "$progpath"
2194c43cc173Smrg    done
2195c43cc173Smrg
2196c27c18e8Smrg    exit $?
2197c27c18e8Smrg}
2198c43cc173Smrg
219948e5ce07Smrg
2200c27c18e8Smrg# func_features
220148e5ce07Smrg# -------------
2202c27c18e8Smrg# Display the features supported by this script.
2203c27c18e8Smrgfunc_features ()
2204c27c18e8Smrg{
220537eb1ca1Smrg    echo "host: $host"
220648e5ce07Smrg    if test yes = "$build_libtool_libs"; then
220737eb1ca1Smrg      echo "enable shared libraries"
2208c43cc173Smrg    else
220937eb1ca1Smrg      echo "disable shared libraries"
2210c43cc173Smrg    fi
221148e5ce07Smrg    if test yes = "$build_old_libs"; then
221237eb1ca1Smrg      echo "enable static libraries"
2213c43cc173Smrg    else
221437eb1ca1Smrg      echo "disable static libraries"
2215c43cc173Smrg    fi
2216c27c18e8Smrg
2217c43cc173Smrg    exit $?
2218c27c18e8Smrg}
2219c43cc173Smrg
222048e5ce07Smrg
222148e5ce07Smrg# func_enable_tag TAGNAME
222248e5ce07Smrg# -----------------------
2223c27c18e8Smrg# Verify that TAGNAME is valid, and either flag an error and exit, or
2224c27c18e8Smrg# enable the TAGNAME tag.  We also add TAGNAME to the global $taglist
2225c27c18e8Smrg# variable here.
2226c27c18e8Smrgfunc_enable_tag ()
2227c27c18e8Smrg{
222848e5ce07Smrg    # Global variable:
222948e5ce07Smrg    tagname=$1
2230c43cc173Smrg
223148e5ce07Smrg    re_begincf="^# ### BEGIN LIBTOOL TAG CONFIG: $tagname\$"
223248e5ce07Smrg    re_endcf="^# ### END LIBTOOL TAG CONFIG: $tagname\$"
223348e5ce07Smrg    sed_extractcf=/$re_begincf/,/$re_endcf/p
2234c43cc173Smrg
223548e5ce07Smrg    # Validate tagname.
223648e5ce07Smrg    case $tagname in
223748e5ce07Smrg      *[!-_A-Za-z0-9,/]*)
223848e5ce07Smrg        func_fatal_error "invalid tag name: $tagname"
223948e5ce07Smrg        ;;
224048e5ce07Smrg    esac
2241c43cc173Smrg
224248e5ce07Smrg    # Don't test for the "default" C tag, as we know it's
224348e5ce07Smrg    # there but not specially marked.
224448e5ce07Smrg    case $tagname in
224548e5ce07Smrg        CC) ;;
2246c27c18e8Smrg    *)
224748e5ce07Smrg        if $GREP "$re_begincf" "$progpath" >/dev/null 2>&1; then
224848e5ce07Smrg	  taglist="$taglist $tagname"
224948e5ce07Smrg
225048e5ce07Smrg	  # Evaluate the configuration.  Be careful to quote the path
225148e5ce07Smrg	  # and the sed script, to avoid splitting on whitespace, but
225248e5ce07Smrg	  # also don't use non-portable quotes within backquotes within
225348e5ce07Smrg	  # quotes we have to do it in 2 steps:
225448e5ce07Smrg	  extractedcf=`$SED -n -e "$sed_extractcf" < "$progpath"`
225548e5ce07Smrg	  eval "$extractedcf"
225648e5ce07Smrg        else
225748e5ce07Smrg	  func_error "ignoring unknown tag $tagname"
225848e5ce07Smrg        fi
225948e5ce07Smrg        ;;
226048e5ce07Smrg    esac
2261c27c18e8Smrg}
2262c27c18e8Smrg
226348e5ce07Smrg
2264b789ec8aSmrg# func_check_version_match
226548e5ce07Smrg# ------------------------
2266b789ec8aSmrg# Ensure that we are using m4 macros, and libtool script from the same
2267b789ec8aSmrg# release of libtool.
2268b789ec8aSmrgfunc_check_version_match ()
2269c27c18e8Smrg{
227048e5ce07Smrg    if test "$package_revision" != "$macro_revision"; then
227148e5ce07Smrg      if test "$VERSION" != "$macro_version"; then
227248e5ce07Smrg        if test -z "$macro_version"; then
227348e5ce07Smrg          cat >&2 <<_LT_EOF
2274b789ec8aSmrg$progname: Version mismatch error.  This is $PACKAGE $VERSION, but the
2275b789ec8aSmrg$progname: definition of this LT_INIT comes from an older release.
2276b789ec8aSmrg$progname: You should recreate aclocal.m4 with macros from $PACKAGE $VERSION
2277b789ec8aSmrg$progname: and run autoconf again.
2278b789ec8aSmrg_LT_EOF
227948e5ce07Smrg        else
228048e5ce07Smrg          cat >&2 <<_LT_EOF
2281b789ec8aSmrg$progname: Version mismatch error.  This is $PACKAGE $VERSION, but the
2282b789ec8aSmrg$progname: definition of this LT_INIT comes from $PACKAGE $macro_version.
2283b789ec8aSmrg$progname: You should recreate aclocal.m4 with macros from $PACKAGE $VERSION
2284b789ec8aSmrg$progname: and run autoconf again.
2285b789ec8aSmrg_LT_EOF
228648e5ce07Smrg        fi
228748e5ce07Smrg      else
228848e5ce07Smrg        cat >&2 <<_LT_EOF
2289b789ec8aSmrg$progname: Version mismatch error.  This is $PACKAGE $VERSION, revision $package_revision,
2290b789ec8aSmrg$progname: but the definition of this LT_INIT comes from revision $macro_revision.
2291b789ec8aSmrg$progname: You should recreate aclocal.m4 with macros from revision $package_revision
2292b789ec8aSmrg$progname: of $PACKAGE $VERSION and run autoconf again.
2293b789ec8aSmrg_LT_EOF
229448e5ce07Smrg      fi
2295b789ec8aSmrg
229648e5ce07Smrg      exit $EXIT_MISMATCH
229748e5ce07Smrg    fi
22980eb1301bSmrg}
2299b789ec8aSmrg
2300c43cc173Smrg
230148e5ce07Smrg# libtool_options_prep [ARG]...
230248e5ce07Smrg# -----------------------------
230348e5ce07Smrg# Preparation for options parsed by libtool.
230448e5ce07Smrglibtool_options_prep ()
230548e5ce07Smrg{
230648e5ce07Smrg    $debug_mode
2307b789ec8aSmrg
230848e5ce07Smrg    # Option defaults:
230948e5ce07Smrg    opt_config=false
231048e5ce07Smrg    opt_dlopen=
231148e5ce07Smrg    opt_dry_run=false
231248e5ce07Smrg    opt_help=false
231348e5ce07Smrg    opt_mode=
231448e5ce07Smrg    opt_preserve_dup_deps=false
231548e5ce07Smrg    opt_quiet=false
2316b789ec8aSmrg
231748e5ce07Smrg    nonopt=
231848e5ce07Smrg    preserve_args=
231944584a44Smrg
232048e5ce07Smrg    # Shorthand for --mode=foo, only valid as the first argument
232148e5ce07Smrg    case $1 in
232248e5ce07Smrg    clean|clea|cle|cl)
232348e5ce07Smrg      shift; set dummy --mode clean ${1+"$@"}; shift
232448e5ce07Smrg      ;;
232548e5ce07Smrg    compile|compil|compi|comp|com|co|c)
232648e5ce07Smrg      shift; set dummy --mode compile ${1+"$@"}; shift
232748e5ce07Smrg      ;;
232848e5ce07Smrg    execute|execut|execu|exec|exe|ex|e)
232948e5ce07Smrg      shift; set dummy --mode execute ${1+"$@"}; shift
233048e5ce07Smrg      ;;
233148e5ce07Smrg    finish|finis|fini|fin|fi|f)
233248e5ce07Smrg      shift; set dummy --mode finish ${1+"$@"}; shift
233348e5ce07Smrg      ;;
233448e5ce07Smrg    install|instal|insta|inst|ins|in|i)
233548e5ce07Smrg      shift; set dummy --mode install ${1+"$@"}; shift
233648e5ce07Smrg      ;;
233748e5ce07Smrg    link|lin|li|l)
233848e5ce07Smrg      shift; set dummy --mode link ${1+"$@"}; shift
233948e5ce07Smrg      ;;
234048e5ce07Smrg    uninstall|uninstal|uninsta|uninst|unins|unin|uni|un|u)
234148e5ce07Smrg      shift; set dummy --mode uninstall ${1+"$@"}; shift
234248e5ce07Smrg      ;;
234348e5ce07Smrg    esac
234448e5ce07Smrg
234548e5ce07Smrg    # Pass back the list of options.
234648e5ce07Smrg    func_quote_for_eval ${1+"$@"}
234748e5ce07Smrg    libtool_options_prep_result=$func_quote_for_eval_result
234848e5ce07Smrg}
234948e5ce07Smrgfunc_add_hook func_options_prep libtool_options_prep
2350b789ec8aSmrg
2351b789ec8aSmrg
235248e5ce07Smrg# libtool_parse_options [ARG]...
235348e5ce07Smrg# ---------------------------------
235448e5ce07Smrg# Provide handling for libtool specific options.
235548e5ce07Smrglibtool_parse_options ()
2356b789ec8aSmrg{
235748e5ce07Smrg    $debug_cmd
2358c27c18e8Smrg
235948e5ce07Smrg    # Perform our own loop to consume as many options as possible in
236048e5ce07Smrg    # each iteration.
236148e5ce07Smrg    while test $# -gt 0; do
236248e5ce07Smrg      _G_opt=$1
236348e5ce07Smrg      shift
236448e5ce07Smrg      case $_G_opt in
236548e5ce07Smrg        --dry-run|--dryrun|-n)
236648e5ce07Smrg                        opt_dry_run=:
236748e5ce07Smrg                        ;;
236848e5ce07Smrg
236948e5ce07Smrg        --config)       func_config ;;
237048e5ce07Smrg
237148e5ce07Smrg        --dlopen|-dlopen)
237248e5ce07Smrg                        opt_dlopen="${opt_dlopen+$opt_dlopen
237348e5ce07Smrg}$1"
237448e5ce07Smrg                        shift
237548e5ce07Smrg                        ;;
237648e5ce07Smrg
237748e5ce07Smrg        --preserve-dup-deps)
237848e5ce07Smrg                        opt_preserve_dup_deps=: ;;
237948e5ce07Smrg
238048e5ce07Smrg        --features)     func_features ;;
238148e5ce07Smrg
238248e5ce07Smrg        --finish)       set dummy --mode finish ${1+"$@"}; shift ;;
238348e5ce07Smrg
238448e5ce07Smrg        --help)         opt_help=: ;;
238548e5ce07Smrg
238648e5ce07Smrg        --help-all)     opt_help=': help-all' ;;
238748e5ce07Smrg
238848e5ce07Smrg        --mode)         test $# = 0 && func_missing_arg $_G_opt && break
238948e5ce07Smrg                        opt_mode=$1
239048e5ce07Smrg                        case $1 in
239148e5ce07Smrg                          # Valid mode arguments:
239248e5ce07Smrg                          clean|compile|execute|finish|install|link|relink|uninstall) ;;
239348e5ce07Smrg
239448e5ce07Smrg                          # Catch anything else as an error
239548e5ce07Smrg                          *) func_error "invalid argument for $_G_opt"
239648e5ce07Smrg                             exit_cmd=exit
239748e5ce07Smrg                             break
239848e5ce07Smrg                             ;;
239948e5ce07Smrg                        esac
240048e5ce07Smrg                        shift
240148e5ce07Smrg                        ;;
240248e5ce07Smrg
240348e5ce07Smrg        --no-silent|--no-quiet)
240448e5ce07Smrg                        opt_quiet=false
240548e5ce07Smrg                        func_append preserve_args " $_G_opt"
240648e5ce07Smrg                        ;;
240748e5ce07Smrg
240848e5ce07Smrg        --no-warnings|--no-warning|--no-warn)
240948e5ce07Smrg                        opt_warning=false
241048e5ce07Smrg                        func_append preserve_args " $_G_opt"
241148e5ce07Smrg                        ;;
241248e5ce07Smrg
241348e5ce07Smrg        --no-verbose)
241448e5ce07Smrg                        opt_verbose=false
241548e5ce07Smrg                        func_append preserve_args " $_G_opt"
241648e5ce07Smrg                        ;;
241748e5ce07Smrg
241848e5ce07Smrg        --silent|--quiet)
241948e5ce07Smrg                        opt_quiet=:
242048e5ce07Smrg                        opt_verbose=false
242148e5ce07Smrg                        func_append preserve_args " $_G_opt"
242248e5ce07Smrg                        ;;
242348e5ce07Smrg
242448e5ce07Smrg        --tag)          test $# = 0 && func_missing_arg $_G_opt && break
242548e5ce07Smrg                        opt_tag=$1
242648e5ce07Smrg                        func_append preserve_args " $_G_opt $1"
242748e5ce07Smrg                        func_enable_tag "$1"
242848e5ce07Smrg                        shift
242948e5ce07Smrg                        ;;
243048e5ce07Smrg
243148e5ce07Smrg        --verbose|-v)   opt_quiet=false
243248e5ce07Smrg                        opt_verbose=:
243348e5ce07Smrg                        func_append preserve_args " $_G_opt"
243448e5ce07Smrg                        ;;
243548e5ce07Smrg
243648e5ce07Smrg	# An option not handled by this hook function:
243748e5ce07Smrg        *)		set dummy "$_G_opt" ${1+"$@"};	shift; break  ;;
243848e5ce07Smrg      esac
243948e5ce07Smrg    done
2440b789ec8aSmrg
2441b789ec8aSmrg
244248e5ce07Smrg    # save modified positional parameters for caller
244348e5ce07Smrg    func_quote_for_eval ${1+"$@"}
244448e5ce07Smrg    libtool_parse_options_result=$func_quote_for_eval_result
244548e5ce07Smrg}
244648e5ce07Smrgfunc_add_hook func_parse_options libtool_parse_options
2447c27c18e8Smrg
2448c43cc173Smrg
2449c27c18e8Smrg
245048e5ce07Smrg# libtool_validate_options [ARG]...
245148e5ce07Smrg# ---------------------------------
245248e5ce07Smrg# Perform any sanity checks on option settings and/or unconsumed
245348e5ce07Smrg# arguments.
245448e5ce07Smrglibtool_validate_options ()
245548e5ce07Smrg{
245648e5ce07Smrg    # save first non-option argument
245748e5ce07Smrg    if test 0 -lt $#; then
245848e5ce07Smrg      nonopt=$1
245948e5ce07Smrg      shift
2460c27c18e8Smrg    fi
2461c27c18e8Smrg
246248e5ce07Smrg    # preserve --debug
246348e5ce07Smrg    test : = "$debug_cmd" || func_append preserve_args " --debug"
246444584a44Smrg
246548e5ce07Smrg    case $host in
246648e5ce07Smrg      # Solaris2 added to fix http://debbugs.gnu.org/cgi/bugreport.cgi?bug=16452
246748e5ce07Smrg      # see also: http://gcc.gnu.org/bugzilla/show_bug.cgi?id=59788
246848e5ce07Smrg      *cygwin* | *mingw* | *pw32* | *cegcc* | *solaris2* | *os2*)
246948e5ce07Smrg        # don't eliminate duplications in $postdeps and $predeps
247048e5ce07Smrg        opt_duplicate_compiler_generated_deps=:
247148e5ce07Smrg        ;;
247248e5ce07Smrg      *)
247348e5ce07Smrg        opt_duplicate_compiler_generated_deps=$opt_preserve_dup_deps
247448e5ce07Smrg        ;;
247548e5ce07Smrg    esac
247644584a44Smrg
247748e5ce07Smrg    $opt_help || {
247848e5ce07Smrg      # Sanity checks first:
247948e5ce07Smrg      func_check_version_match
2480c27c18e8Smrg
248148e5ce07Smrg      test yes != "$build_libtool_libs" \
248248e5ce07Smrg        && test yes != "$build_old_libs" \
248348e5ce07Smrg        && func_fatal_configuration "not configured to build any kind of library"
2484c27c18e8Smrg
248548e5ce07Smrg      # Darwin sucks
248648e5ce07Smrg      eval std_shrext=\"$shrext_cmds\"
248748e5ce07Smrg
248848e5ce07Smrg      # Only execute mode is allowed to have -dlopen flags.
248948e5ce07Smrg      if test -n "$opt_dlopen" && test execute != "$opt_mode"; then
249048e5ce07Smrg        func_error "unrecognized option '-dlopen'"
249148e5ce07Smrg        $ECHO "$help" 1>&2
249248e5ce07Smrg        exit $EXIT_FAILURE
249348e5ce07Smrg      fi
249448e5ce07Smrg
249548e5ce07Smrg      # Change the help message to a mode-specific one.
249648e5ce07Smrg      generic_help=$help
249748e5ce07Smrg      help="Try '$progname --help --mode=$opt_mode' for more information."
249848e5ce07Smrg    }
249948e5ce07Smrg
250048e5ce07Smrg    # Pass back the unparsed argument list
250148e5ce07Smrg    func_quote_for_eval ${1+"$@"}
250248e5ce07Smrg    libtool_validate_options_result=$func_quote_for_eval_result
2503b789ec8aSmrg}
250448e5ce07Smrgfunc_add_hook func_validate_options libtool_validate_options
250548e5ce07Smrg
2506c27c18e8Smrg
250748e5ce07Smrg# Process options as early as possible so that --help and --version
250848e5ce07Smrg# can return quickly.
250948e5ce07Smrgfunc_options ${1+"$@"}
251048e5ce07Smrgeval set dummy "$func_options_result"; shift
251144584a44Smrg
2512c43cc173Smrg
2513c43cc173Smrg
2514b789ec8aSmrg## ----------- ##
2515b789ec8aSmrg##    Main.    ##
2516b789ec8aSmrg## ----------- ##
2517c43cc173Smrg
251848e5ce07Smrgmagic='%%%MAGIC variable%%%'
251948e5ce07Smrgmagic_exe='%%%MAGIC EXE variable%%%'
252048e5ce07Smrg
252148e5ce07Smrg# Global variables.
252248e5ce07Smrgextracted_archives=
252348e5ce07Smrgextracted_serial=0
252448e5ce07Smrg
252548e5ce07Smrg# If this variable is set in any of the actions, the command in it
252648e5ce07Smrg# will be execed at the end.  This prevents here-documents from being
252748e5ce07Smrg# left over by shells.
252848e5ce07Smrgexec_cmd=
252948e5ce07Smrg
253048e5ce07Smrg
253148e5ce07Smrg# A function that is used when there is no print builtin or printf.
253248e5ce07Smrgfunc_fallback_echo ()
253348e5ce07Smrg{
253448e5ce07Smrg  eval 'cat <<_LTECHO_EOF
253548e5ce07Smrg$1
253648e5ce07Smrg_LTECHO_EOF'
253748e5ce07Smrg}
253848e5ce07Smrg
253948e5ce07Smrg# func_generated_by_libtool
254048e5ce07Smrg# True iff stdin has been generated by Libtool. This function is only
254148e5ce07Smrg# a basic sanity check; it will hardly flush out determined imposters.
254248e5ce07Smrgfunc_generated_by_libtool_p ()
254348e5ce07Smrg{
254448e5ce07Smrg  $GREP "^# Generated by .*$PACKAGE" > /dev/null 2>&1
254548e5ce07Smrg}
254648e5ce07Smrg
2547c27c18e8Smrg# func_lalib_p file
254848e5ce07Smrg# True iff FILE is a libtool '.la' library or '.lo' object file.
2549c27c18e8Smrg# This function is only a basic sanity check; it will hardly flush out
2550c27c18e8Smrg# determined imposters.
2551c27c18e8Smrgfunc_lalib_p ()
2552c27c18e8Smrg{
2553c27c18e8Smrg    test -f "$1" &&
255448e5ce07Smrg      $SED -e 4q "$1" 2>/dev/null | func_generated_by_libtool_p
2555c27c18e8Smrg}
2556c43cc173Smrg
2557c27c18e8Smrg# func_lalib_unsafe_p file
255848e5ce07Smrg# True iff FILE is a libtool '.la' library or '.lo' object file.
2559c27c18e8Smrg# This function implements the same check as func_lalib_p without
2560c27c18e8Smrg# resorting to external programs.  To this end, it redirects stdin and
2561c27c18e8Smrg# closes it afterwards, without saving the original file descriptor.
2562c27c18e8Smrg# As a safety measure, use it only where a negative result would be
256348e5ce07Smrg# fatal anyway.  Works if 'file' does not exist.
2564c27c18e8Smrgfunc_lalib_unsafe_p ()
2565c27c18e8Smrg{
2566c27c18e8Smrg    lalib_p=no
2567c27c18e8Smrg    if test -f "$1" && test -r "$1" && exec 5<&0 <"$1"; then
2568c27c18e8Smrg	for lalib_p_l in 1 2 3 4
2569c27c18e8Smrg	do
2570c27c18e8Smrg	    read lalib_p_line
257148e5ce07Smrg	    case $lalib_p_line in
2572c27c18e8Smrg		\#\ Generated\ by\ *$PACKAGE* ) lalib_p=yes; break;;
2573c27c18e8Smrg	    esac
2574c27c18e8Smrg	done
2575c27c18e8Smrg	exec 0<&5 5<&-
2576c27c18e8Smrg    fi
257748e5ce07Smrg    test yes = "$lalib_p"
2578c27c18e8Smrg}
2579c43cc173Smrg
2580c27c18e8Smrg# func_ltwrapper_script_p file
2581c27c18e8Smrg# True iff FILE is a libtool wrapper script
2582c27c18e8Smrg# This function is only a basic sanity check; it will hardly flush out
2583c27c18e8Smrg# determined imposters.
2584c27c18e8Smrgfunc_ltwrapper_script_p ()
2585c27c18e8Smrg{
258648e5ce07Smrg    test -f "$1" &&
258748e5ce07Smrg      $lt_truncate_bin < "$1" 2>/dev/null | func_generated_by_libtool_p
2588c27c18e8Smrg}
2589c43cc173Smrg
2590c27c18e8Smrg# func_ltwrapper_executable_p file
2591c27c18e8Smrg# True iff FILE is a libtool wrapper executable
2592c27c18e8Smrg# This function is only a basic sanity check; it will hardly flush out
2593c27c18e8Smrg# determined imposters.
2594c27c18e8Smrgfunc_ltwrapper_executable_p ()
2595c27c18e8Smrg{
2596c27c18e8Smrg    func_ltwrapper_exec_suffix=
2597c27c18e8Smrg    case $1 in
2598c27c18e8Smrg    *.exe) ;;
2599c27c18e8Smrg    *) func_ltwrapper_exec_suffix=.exe ;;
2600c27c18e8Smrg    esac
2601c27c18e8Smrg    $GREP "$magic_exe" "$1$func_ltwrapper_exec_suffix" >/dev/null 2>&1
2602c27c18e8Smrg}
2603c43cc173Smrg
2604c27c18e8Smrg# func_ltwrapper_scriptname file
2605c27c18e8Smrg# Assumes file is an ltwrapper_executable
2606c27c18e8Smrg# uses $file to determine the appropriate filename for a
2607c27c18e8Smrg# temporary ltwrapper_script.
2608c27c18e8Smrgfunc_ltwrapper_scriptname ()
2609c27c18e8Smrg{
2610b789ec8aSmrg    func_dirname_and_basename "$1" "" "."
2611b789ec8aSmrg    func_stripname '' '.exe' "$func_basename_result"
261248e5ce07Smrg    func_ltwrapper_scriptname_result=$func_dirname_result/$objdir/${func_stripname_result}_ltshwrapper
2613c27c18e8Smrg}
2614c27c18e8Smrg
2615c27c18e8Smrg# func_ltwrapper_p file
2616c27c18e8Smrg# True iff FILE is a libtool wrapper script or wrapper executable
2617c27c18e8Smrg# This function is only a basic sanity check; it will hardly flush out
2618c27c18e8Smrg# determined imposters.
2619c27c18e8Smrgfunc_ltwrapper_p ()
2620c27c18e8Smrg{
2621c27c18e8Smrg    func_ltwrapper_script_p "$1" || func_ltwrapper_executable_p "$1"
2622c27c18e8Smrg}
2623c27c18e8Smrg
2624c27c18e8Smrg
2625c27c18e8Smrg# func_execute_cmds commands fail_cmd
2626c27c18e8Smrg# Execute tilde-delimited COMMANDS.
2627c27c18e8Smrg# If FAIL_CMD is given, eval that upon failure.
2628c27c18e8Smrg# FAIL_CMD may read-access the current command in variable CMD!
2629c27c18e8Smrgfunc_execute_cmds ()
2630c27c18e8Smrg{
263148e5ce07Smrg    $debug_cmd
263248e5ce07Smrg
2633c27c18e8Smrg    save_ifs=$IFS; IFS='~'
2634c27c18e8Smrg    for cmd in $1; do
263548e5ce07Smrg      IFS=$sp$nl
26360eb1301bSmrg      eval cmd=\"$cmd\"
263748e5ce07Smrg      IFS=$save_ifs
2638c27c18e8Smrg      func_show_eval "$cmd" "${2-:}"
2639c27c18e8Smrg    done
2640c27c18e8Smrg    IFS=$save_ifs
2641c27c18e8Smrg}
2642c27c18e8Smrg
2643c27c18e8Smrg
2644c27c18e8Smrg# func_source file
2645c27c18e8Smrg# Source FILE, adding directory component if necessary.
2646c27c18e8Smrg# Note that it is not necessary on cygwin/mingw to append a dot to
2647c27c18e8Smrg# FILE even if both FILE and FILE.exe exist: automatic-append-.exe
2648c27c18e8Smrg# behavior happens only for exec(3), not for open(2)!  Also, sourcing
264948e5ce07Smrg# 'FILE.' does not work on cygwin managed mounts.
2650c27c18e8Smrgfunc_source ()
2651c27c18e8Smrg{
265248e5ce07Smrg    $debug_cmd
265348e5ce07Smrg
2654c27c18e8Smrg    case $1 in
2655c27c18e8Smrg    */* | *\\*)	. "$1" ;;
2656c27c18e8Smrg    *)		. "./$1" ;;
2657c27c18e8Smrg    esac
2658c27c18e8Smrg}
2659c27c18e8Smrg
2660c27c18e8Smrg
2661b789ec8aSmrg# func_resolve_sysroot PATH
2662b789ec8aSmrg# Replace a leading = in PATH with a sysroot.  Store the result into
2663b789ec8aSmrg# func_resolve_sysroot_result
2664b789ec8aSmrgfunc_resolve_sysroot ()
2665b789ec8aSmrg{
2666b789ec8aSmrg  func_resolve_sysroot_result=$1
2667b789ec8aSmrg  case $func_resolve_sysroot_result in
2668b789ec8aSmrg  =*)
2669b789ec8aSmrg    func_stripname '=' '' "$func_resolve_sysroot_result"
2670b789ec8aSmrg    func_resolve_sysroot_result=$lt_sysroot$func_stripname_result
2671b789ec8aSmrg    ;;
2672b789ec8aSmrg  esac
2673b789ec8aSmrg}
2674b789ec8aSmrg
2675b789ec8aSmrg# func_replace_sysroot PATH
2676b789ec8aSmrg# If PATH begins with the sysroot, replace it with = and
2677b789ec8aSmrg# store the result into func_replace_sysroot_result.
2678b789ec8aSmrgfunc_replace_sysroot ()
2679b789ec8aSmrg{
268048e5ce07Smrg  case $lt_sysroot:$1 in
2681b789ec8aSmrg  ?*:"$lt_sysroot"*)
2682b789ec8aSmrg    func_stripname "$lt_sysroot" '' "$1"
268348e5ce07Smrg    func_replace_sysroot_result='='$func_stripname_result
2684b789ec8aSmrg    ;;
2685b789ec8aSmrg  *)
2686b789ec8aSmrg    # Including no sysroot.
2687b789ec8aSmrg    func_replace_sysroot_result=$1
2688b789ec8aSmrg    ;;
2689b789ec8aSmrg  esac
2690b789ec8aSmrg}
2691b789ec8aSmrg
2692c27c18e8Smrg# func_infer_tag arg
2693c27c18e8Smrg# Infer tagged configuration to use if any are available and
2694c27c18e8Smrg# if one wasn't chosen via the "--tag" command line option.
2695c27c18e8Smrg# Only attempt this if the compiler in the base compile
2696c27c18e8Smrg# command doesn't match the default compiler.
2697c27c18e8Smrg# arg is usually of the form 'gcc ...'
2698c27c18e8Smrgfunc_infer_tag ()
2699c27c18e8Smrg{
270048e5ce07Smrg    $debug_cmd
270148e5ce07Smrg
2702c27c18e8Smrg    if test -n "$available_tags" && test -z "$tagname"; then
2703c27c18e8Smrg      CC_quoted=
2704c27c18e8Smrg      for arg in $CC; do
2705b789ec8aSmrg	func_append_quoted CC_quoted "$arg"
2706c27c18e8Smrg      done
270737eb1ca1Smrg      CC_expanded=`func_echo_all $CC`
270837eb1ca1Smrg      CC_quoted_expanded=`func_echo_all $CC_quoted`
2709c27c18e8Smrg      case $@ in
2710c27c18e8Smrg      # Blanks in the command may have been stripped by the calling shell,
2711c27c18e8Smrg      # but not from the CC environment variable when configure was run.
271237eb1ca1Smrg      " $CC "* | "$CC "* | " $CC_expanded "* | "$CC_expanded "* | \
271337eb1ca1Smrg      " $CC_quoted"* | "$CC_quoted "* | " $CC_quoted_expanded "* | "$CC_quoted_expanded "*) ;;
2714c27c18e8Smrg      # Blanks at the start of $base_compile will cause this to fail
2715c27c18e8Smrg      # if we don't check for them as well.
2716c27c18e8Smrg      *)
2717c27c18e8Smrg	for z in $available_tags; do
2718c27c18e8Smrg	  if $GREP "^# ### BEGIN LIBTOOL TAG CONFIG: $z$" < "$progpath" > /dev/null; then
2719c27c18e8Smrg	    # Evaluate the configuration.
272048e5ce07Smrg	    eval "`$SED -n -e '/^# ### BEGIN LIBTOOL TAG CONFIG: '$z'$/,/^# ### END LIBTOOL TAG CONFIG: '$z'$/p' < $progpath`"
2721c27c18e8Smrg	    CC_quoted=
2722c27c18e8Smrg	    for arg in $CC; do
2723c27c18e8Smrg	      # Double-quote args containing other shell metacharacters.
2724b789ec8aSmrg	      func_append_quoted CC_quoted "$arg"
2725c27c18e8Smrg	    done
272637eb1ca1Smrg	    CC_expanded=`func_echo_all $CC`
272737eb1ca1Smrg	    CC_quoted_expanded=`func_echo_all $CC_quoted`
2728c27c18e8Smrg	    case "$@ " in
272937eb1ca1Smrg	    " $CC "* | "$CC "* | " $CC_expanded "* | "$CC_expanded "* | \
273037eb1ca1Smrg	    " $CC_quoted"* | "$CC_quoted "* | " $CC_quoted_expanded "* | "$CC_quoted_expanded "*)
2731c27c18e8Smrg	      # The compiler in the base compile command matches
2732c27c18e8Smrg	      # the one in the tagged configuration.
2733c27c18e8Smrg	      # Assume this is the tagged configuration we want.
2734c27c18e8Smrg	      tagname=$z
2735c27c18e8Smrg	      break
2736c27c18e8Smrg	      ;;
2737c27c18e8Smrg	    esac
2738c27c18e8Smrg	  fi
2739c27c18e8Smrg	done
2740c27c18e8Smrg	# If $tagname still isn't set, then no tagged configuration
2741c27c18e8Smrg	# was found and let the user know that the "--tag" command
2742c27c18e8Smrg	# line option must be used.
2743c27c18e8Smrg	if test -z "$tagname"; then
2744c27c18e8Smrg	  func_echo "unable to infer tagged configuration"
274548e5ce07Smrg	  func_fatal_error "specify a tag with '--tag'"
2746c27c18e8Smrg#	else
2747c27c18e8Smrg#	  func_verbose "using $tagname tagged configuration"
2748c27c18e8Smrg	fi
2749c27c18e8Smrg	;;
2750c27c18e8Smrg      esac
2751c27c18e8Smrg    fi
2752c27c18e8Smrg}
2753c27c18e8Smrg
2754c27c18e8Smrg
2755c27c18e8Smrg
2756b789ec8aSmrg# func_write_libtool_object output_name pic_name nonpic_name
2757b789ec8aSmrg# Create a libtool object file (analogous to a ".la" file),
2758b789ec8aSmrg# but don't create it if we're doing a dry run.
2759b789ec8aSmrgfunc_write_libtool_object ()
2760b789ec8aSmrg{
276148e5ce07Smrg    write_libobj=$1
276248e5ce07Smrg    if test yes = "$build_libtool_libs"; then
276348e5ce07Smrg      write_lobj=\'$2\'
2764b789ec8aSmrg    else
2765b789ec8aSmrg      write_lobj=none
2766b789ec8aSmrg    fi
2767b789ec8aSmrg
276848e5ce07Smrg    if test yes = "$build_old_libs"; then
276948e5ce07Smrg      write_oldobj=\'$3\'
2770b789ec8aSmrg    else
2771b789ec8aSmrg      write_oldobj=none
2772b789ec8aSmrg    fi
2773b789ec8aSmrg
2774b789ec8aSmrg    $opt_dry_run || {
2775b789ec8aSmrg      cat >${write_libobj}T <<EOF
2776b789ec8aSmrg# $write_libobj - a libtool object file
277748e5ce07Smrg# Generated by $PROGRAM (GNU $PACKAGE) $VERSION
2778b789ec8aSmrg#
2779b789ec8aSmrg# Please DO NOT delete this file!
2780b789ec8aSmrg# It is necessary for linking the library.
2781b789ec8aSmrg
2782b789ec8aSmrg# Name of the PIC object.
2783b789ec8aSmrgpic_object=$write_lobj
2784b789ec8aSmrg
2785b789ec8aSmrg# Name of the non-PIC object
2786b789ec8aSmrgnon_pic_object=$write_oldobj
2787b789ec8aSmrg
2788b789ec8aSmrgEOF
278948e5ce07Smrg      $MV "${write_libobj}T" "$write_libobj"
2790b789ec8aSmrg    }
2791b789ec8aSmrg}
2792b789ec8aSmrg
2793b789ec8aSmrg
2794b789ec8aSmrg##################################################
2795b789ec8aSmrg# FILE NAME AND PATH CONVERSION HELPER FUNCTIONS #
2796b789ec8aSmrg##################################################
2797b789ec8aSmrg
2798b789ec8aSmrg# func_convert_core_file_wine_to_w32 ARG
2799b789ec8aSmrg# Helper function used by file name conversion functions when $build is *nix,
2800b789ec8aSmrg# and $host is mingw, cygwin, or some other w32 environment. Relies on a
2801b789ec8aSmrg# correctly configured wine environment available, with the winepath program
2802b789ec8aSmrg# in $build's $PATH.
2803b789ec8aSmrg#
2804b789ec8aSmrg# ARG is the $build file name to be converted to w32 format.
2805b789ec8aSmrg# Result is available in $func_convert_core_file_wine_to_w32_result, and will
2806b789ec8aSmrg# be empty on error (or when ARG is empty)
2807b789ec8aSmrgfunc_convert_core_file_wine_to_w32 ()
2808b789ec8aSmrg{
280948e5ce07Smrg  $debug_cmd
281048e5ce07Smrg
281148e5ce07Smrg  func_convert_core_file_wine_to_w32_result=$1
2812b789ec8aSmrg  if test -n "$1"; then
2813b789ec8aSmrg    # Unfortunately, winepath does not exit with a non-zero error code, so we
2814b789ec8aSmrg    # are forced to check the contents of stdout. On the other hand, if the
2815b789ec8aSmrg    # command is not found, the shell will set an exit code of 127 and print
2816b789ec8aSmrg    # *an error message* to stdout. So we must check for both error code of
2817b789ec8aSmrg    # zero AND non-empty stdout, which explains the odd construction:
2818b789ec8aSmrg    func_convert_core_file_wine_to_w32_tmp=`winepath -w "$1" 2>/dev/null`
281948e5ce07Smrg    if test "$?" -eq 0 && test -n "$func_convert_core_file_wine_to_w32_tmp"; then
2820b789ec8aSmrg      func_convert_core_file_wine_to_w32_result=`$ECHO "$func_convert_core_file_wine_to_w32_tmp" |
282148e5ce07Smrg        $SED -e "$sed_naive_backslashify"`
2822b789ec8aSmrg    else
2823b789ec8aSmrg      func_convert_core_file_wine_to_w32_result=
2824b789ec8aSmrg    fi
2825b789ec8aSmrg  fi
2826b789ec8aSmrg}
2827b789ec8aSmrg# end: func_convert_core_file_wine_to_w32
2828b789ec8aSmrg
2829b789ec8aSmrg
2830b789ec8aSmrg# func_convert_core_path_wine_to_w32 ARG
2831b789ec8aSmrg# Helper function used by path conversion functions when $build is *nix, and
2832b789ec8aSmrg# $host is mingw, cygwin, or some other w32 environment. Relies on a correctly
2833b789ec8aSmrg# configured wine environment available, with the winepath program in $build's
2834b789ec8aSmrg# $PATH. Assumes ARG has no leading or trailing path separator characters.
2835b789ec8aSmrg#
2836b789ec8aSmrg# ARG is path to be converted from $build format to win32.
2837b789ec8aSmrg# Result is available in $func_convert_core_path_wine_to_w32_result.
2838b789ec8aSmrg# Unconvertible file (directory) names in ARG are skipped; if no directory names
2839b789ec8aSmrg# are convertible, then the result may be empty.
2840b789ec8aSmrgfunc_convert_core_path_wine_to_w32 ()
2841b789ec8aSmrg{
284248e5ce07Smrg  $debug_cmd
284348e5ce07Smrg
2844b789ec8aSmrg  # unfortunately, winepath doesn't convert paths, only file names
284548e5ce07Smrg  func_convert_core_path_wine_to_w32_result=
2846b789ec8aSmrg  if test -n "$1"; then
2847b789ec8aSmrg    oldIFS=$IFS
2848b789ec8aSmrg    IFS=:
2849b789ec8aSmrg    for func_convert_core_path_wine_to_w32_f in $1; do
2850b789ec8aSmrg      IFS=$oldIFS
2851b789ec8aSmrg      func_convert_core_file_wine_to_w32 "$func_convert_core_path_wine_to_w32_f"
285248e5ce07Smrg      if test -n "$func_convert_core_file_wine_to_w32_result"; then
2853b789ec8aSmrg        if test -z "$func_convert_core_path_wine_to_w32_result"; then
285448e5ce07Smrg          func_convert_core_path_wine_to_w32_result=$func_convert_core_file_wine_to_w32_result
2855b789ec8aSmrg        else
2856b789ec8aSmrg          func_append func_convert_core_path_wine_to_w32_result ";$func_convert_core_file_wine_to_w32_result"
2857b789ec8aSmrg        fi
2858b789ec8aSmrg      fi
2859b789ec8aSmrg    done
2860b789ec8aSmrg    IFS=$oldIFS
2861b789ec8aSmrg  fi
2862b789ec8aSmrg}
2863b789ec8aSmrg# end: func_convert_core_path_wine_to_w32
2864b789ec8aSmrg
2865b789ec8aSmrg
2866b789ec8aSmrg# func_cygpath ARGS...
2867b789ec8aSmrg# Wrapper around calling the cygpath program via LT_CYGPATH. This is used when
2868b789ec8aSmrg# when (1) $build is *nix and Cygwin is hosted via a wine environment; or (2)
2869b789ec8aSmrg# $build is MSYS and $host is Cygwin, or (3) $build is Cygwin. In case (1) or
2870b789ec8aSmrg# (2), returns the Cygwin file name or path in func_cygpath_result (input
2871b789ec8aSmrg# file name or path is assumed to be in w32 format, as previously converted
2872b789ec8aSmrg# from $build's *nix or MSYS format). In case (3), returns the w32 file name
2873b789ec8aSmrg# or path in func_cygpath_result (input file name or path is assumed to be in
2874b789ec8aSmrg# Cygwin format). Returns an empty string on error.
2875b789ec8aSmrg#
2876b789ec8aSmrg# ARGS are passed to cygpath, with the last one being the file name or path to
2877b789ec8aSmrg# be converted.
2878b789ec8aSmrg#
2879b789ec8aSmrg# Specify the absolute *nix (or w32) name to cygpath in the LT_CYGPATH
2880b789ec8aSmrg# environment variable; do not put it in $PATH.
2881b789ec8aSmrgfunc_cygpath ()
2882b789ec8aSmrg{
288348e5ce07Smrg  $debug_cmd
288448e5ce07Smrg
2885b789ec8aSmrg  if test -n "$LT_CYGPATH" && test -f "$LT_CYGPATH"; then
2886b789ec8aSmrg    func_cygpath_result=`$LT_CYGPATH "$@" 2>/dev/null`
2887b789ec8aSmrg    if test "$?" -ne 0; then
2888b789ec8aSmrg      # on failure, ensure result is empty
2889b789ec8aSmrg      func_cygpath_result=
2890b789ec8aSmrg    fi
2891b789ec8aSmrg  else
2892b789ec8aSmrg    func_cygpath_result=
289348e5ce07Smrg    func_error "LT_CYGPATH is empty or specifies non-existent file: '$LT_CYGPATH'"
2894b789ec8aSmrg  fi
2895b789ec8aSmrg}
2896b789ec8aSmrg#end: func_cygpath
2897b789ec8aSmrg
2898b789ec8aSmrg
2899b789ec8aSmrg# func_convert_core_msys_to_w32 ARG
2900b789ec8aSmrg# Convert file name or path ARG from MSYS format to w32 format.  Return
2901b789ec8aSmrg# result in func_convert_core_msys_to_w32_result.
2902b789ec8aSmrgfunc_convert_core_msys_to_w32 ()
2903b789ec8aSmrg{
290448e5ce07Smrg  $debug_cmd
290548e5ce07Smrg
2906b789ec8aSmrg  # awkward: cmd appends spaces to result
2907b789ec8aSmrg  func_convert_core_msys_to_w32_result=`( cmd //c echo "$1" ) 2>/dev/null |
290848e5ce07Smrg    $SED -e 's/[ ]*$//' -e "$sed_naive_backslashify"`
2909b789ec8aSmrg}
2910b789ec8aSmrg#end: func_convert_core_msys_to_w32
2911b789ec8aSmrg
2912b789ec8aSmrg
2913b789ec8aSmrg# func_convert_file_check ARG1 ARG2
2914b789ec8aSmrg# Verify that ARG1 (a file name in $build format) was converted to $host
2915b789ec8aSmrg# format in ARG2. Otherwise, emit an error message, but continue (resetting
2916b789ec8aSmrg# func_to_host_file_result to ARG1).
2917b789ec8aSmrgfunc_convert_file_check ()
2918b789ec8aSmrg{
291948e5ce07Smrg  $debug_cmd
292048e5ce07Smrg
292148e5ce07Smrg  if test -z "$2" && test -n "$1"; then
2922b789ec8aSmrg    func_error "Could not determine host file name corresponding to"
292348e5ce07Smrg    func_error "  '$1'"
2924b789ec8aSmrg    func_error "Continuing, but uninstalled executables may not work."
2925b789ec8aSmrg    # Fallback:
292648e5ce07Smrg    func_to_host_file_result=$1
2927b789ec8aSmrg  fi
2928b789ec8aSmrg}
2929b789ec8aSmrg# end func_convert_file_check
2930b789ec8aSmrg
2931b789ec8aSmrg
2932b789ec8aSmrg# func_convert_path_check FROM_PATHSEP TO_PATHSEP FROM_PATH TO_PATH
2933b789ec8aSmrg# Verify that FROM_PATH (a path in $build format) was converted to $host
2934b789ec8aSmrg# format in TO_PATH. Otherwise, emit an error message, but continue, resetting
2935b789ec8aSmrg# func_to_host_file_result to a simplistic fallback value (see below).
2936b789ec8aSmrgfunc_convert_path_check ()
2937b789ec8aSmrg{
293848e5ce07Smrg  $debug_cmd
293948e5ce07Smrg
2940b789ec8aSmrg  if test -z "$4" && test -n "$3"; then
2941b789ec8aSmrg    func_error "Could not determine the host path corresponding to"
294248e5ce07Smrg    func_error "  '$3'"
2943b789ec8aSmrg    func_error "Continuing, but uninstalled executables may not work."
2944b789ec8aSmrg    # Fallback.  This is a deliberately simplistic "conversion" and
2945b789ec8aSmrg    # should not be "improved".  See libtool.info.
2946b789ec8aSmrg    if test "x$1" != "x$2"; then
2947b789ec8aSmrg      lt_replace_pathsep_chars="s|$1|$2|g"
2948b789ec8aSmrg      func_to_host_path_result=`echo "$3" |
2949b789ec8aSmrg        $SED -e "$lt_replace_pathsep_chars"`
2950b789ec8aSmrg    else
295148e5ce07Smrg      func_to_host_path_result=$3
2952b789ec8aSmrg    fi
2953b789ec8aSmrg  fi
2954b789ec8aSmrg}
2955b789ec8aSmrg# end func_convert_path_check
2956b789ec8aSmrg
2957b789ec8aSmrg
2958b789ec8aSmrg# func_convert_path_front_back_pathsep FRONTPAT BACKPAT REPL ORIG
2959b789ec8aSmrg# Modifies func_to_host_path_result by prepending REPL if ORIG matches FRONTPAT
2960b789ec8aSmrg# and appending REPL if ORIG matches BACKPAT.
2961b789ec8aSmrgfunc_convert_path_front_back_pathsep ()
2962b789ec8aSmrg{
296348e5ce07Smrg  $debug_cmd
296448e5ce07Smrg
2965b789ec8aSmrg  case $4 in
296648e5ce07Smrg  $1 ) func_to_host_path_result=$3$func_to_host_path_result
2967b789ec8aSmrg    ;;
2968b789ec8aSmrg  esac
2969b789ec8aSmrg  case $4 in
2970b789ec8aSmrg  $2 ) func_append func_to_host_path_result "$3"
2971b789ec8aSmrg    ;;
2972b789ec8aSmrg  esac
2973b789ec8aSmrg}
2974b789ec8aSmrg# end func_convert_path_front_back_pathsep
2975b789ec8aSmrg
2976b789ec8aSmrg
2977b789ec8aSmrg##################################################
2978b789ec8aSmrg# $build to $host FILE NAME CONVERSION FUNCTIONS #
2979b789ec8aSmrg##################################################
298048e5ce07Smrg# invoked via '$to_host_file_cmd ARG'
2981b789ec8aSmrg#
2982b789ec8aSmrg# In each case, ARG is the path to be converted from $build to $host format.
2983b789ec8aSmrg# Result will be available in $func_to_host_file_result.
2984b789ec8aSmrg
2985b789ec8aSmrg
2986b789ec8aSmrg# func_to_host_file ARG
2987b789ec8aSmrg# Converts the file name ARG from $build format to $host format. Return result
2988b789ec8aSmrg# in func_to_host_file_result.
2989b789ec8aSmrgfunc_to_host_file ()
2990b789ec8aSmrg{
299148e5ce07Smrg  $debug_cmd
299248e5ce07Smrg
2993b789ec8aSmrg  $to_host_file_cmd "$1"
2994b789ec8aSmrg}
2995b789ec8aSmrg# end func_to_host_file
2996b789ec8aSmrg
2997b789ec8aSmrg
2998b789ec8aSmrg# func_to_tool_file ARG LAZY
2999b789ec8aSmrg# converts the file name ARG from $build format to toolchain format. Return
3000b789ec8aSmrg# result in func_to_tool_file_result.  If the conversion in use is listed
3001b789ec8aSmrg# in (the comma separated) LAZY, no conversion takes place.
3002b789ec8aSmrgfunc_to_tool_file ()
3003b789ec8aSmrg{
300448e5ce07Smrg  $debug_cmd
300548e5ce07Smrg
3006b789ec8aSmrg  case ,$2, in
3007b789ec8aSmrg    *,"$to_tool_file_cmd",*)
3008b789ec8aSmrg      func_to_tool_file_result=$1
3009b789ec8aSmrg      ;;
3010b789ec8aSmrg    *)
3011b789ec8aSmrg      $to_tool_file_cmd "$1"
3012b789ec8aSmrg      func_to_tool_file_result=$func_to_host_file_result
3013b789ec8aSmrg      ;;
3014b789ec8aSmrg  esac
3015b789ec8aSmrg}
3016b789ec8aSmrg# end func_to_tool_file
3017b789ec8aSmrg
3018b789ec8aSmrg
3019b789ec8aSmrg# func_convert_file_noop ARG
3020b789ec8aSmrg# Copy ARG to func_to_host_file_result.
3021b789ec8aSmrgfunc_convert_file_noop ()
3022b789ec8aSmrg{
302348e5ce07Smrg  func_to_host_file_result=$1
3024b789ec8aSmrg}
3025b789ec8aSmrg# end func_convert_file_noop
3026b789ec8aSmrg
3027b789ec8aSmrg
3028b789ec8aSmrg# func_convert_file_msys_to_w32 ARG
3029b789ec8aSmrg# Convert file name ARG from (mingw) MSYS to (mingw) w32 format; automatic
3030b789ec8aSmrg# conversion to w32 is not available inside the cwrapper.  Returns result in
3031b789ec8aSmrg# func_to_host_file_result.
3032b789ec8aSmrgfunc_convert_file_msys_to_w32 ()
3033b789ec8aSmrg{
303448e5ce07Smrg  $debug_cmd
303548e5ce07Smrg
303648e5ce07Smrg  func_to_host_file_result=$1
3037b789ec8aSmrg  if test -n "$1"; then
3038b789ec8aSmrg    func_convert_core_msys_to_w32 "$1"
303948e5ce07Smrg    func_to_host_file_result=$func_convert_core_msys_to_w32_result
3040b789ec8aSmrg  fi
3041b789ec8aSmrg  func_convert_file_check "$1" "$func_to_host_file_result"
3042b789ec8aSmrg}
3043b789ec8aSmrg# end func_convert_file_msys_to_w32
3044b789ec8aSmrg
3045b789ec8aSmrg
3046b789ec8aSmrg# func_convert_file_cygwin_to_w32 ARG
3047b789ec8aSmrg# Convert file name ARG from Cygwin to w32 format.  Returns result in
3048b789ec8aSmrg# func_to_host_file_result.
3049b789ec8aSmrgfunc_convert_file_cygwin_to_w32 ()
3050b789ec8aSmrg{
305148e5ce07Smrg  $debug_cmd
305248e5ce07Smrg
305348e5ce07Smrg  func_to_host_file_result=$1
3054b789ec8aSmrg  if test -n "$1"; then
3055b789ec8aSmrg    # because $build is cygwin, we call "the" cygpath in $PATH; no need to use
3056b789ec8aSmrg    # LT_CYGPATH in this case.
3057b789ec8aSmrg    func_to_host_file_result=`cygpath -m "$1"`
3058b789ec8aSmrg  fi
3059b789ec8aSmrg  func_convert_file_check "$1" "$func_to_host_file_result"
3060b789ec8aSmrg}
3061b789ec8aSmrg# end func_convert_file_cygwin_to_w32
3062b789ec8aSmrg
3063b789ec8aSmrg
3064b789ec8aSmrg# func_convert_file_nix_to_w32 ARG
3065b789ec8aSmrg# Convert file name ARG from *nix to w32 format.  Requires a wine environment
3066b789ec8aSmrg# and a working winepath. Returns result in func_to_host_file_result.
3067b789ec8aSmrgfunc_convert_file_nix_to_w32 ()
3068b789ec8aSmrg{
306948e5ce07Smrg  $debug_cmd
307048e5ce07Smrg
307148e5ce07Smrg  func_to_host_file_result=$1
3072b789ec8aSmrg  if test -n "$1"; then
3073b789ec8aSmrg    func_convert_core_file_wine_to_w32 "$1"
307448e5ce07Smrg    func_to_host_file_result=$func_convert_core_file_wine_to_w32_result
3075b789ec8aSmrg  fi
3076b789ec8aSmrg  func_convert_file_check "$1" "$func_to_host_file_result"
3077b789ec8aSmrg}
3078b789ec8aSmrg# end func_convert_file_nix_to_w32
3079b789ec8aSmrg
3080b789ec8aSmrg
3081b789ec8aSmrg# func_convert_file_msys_to_cygwin ARG
3082b789ec8aSmrg# Convert file name ARG from MSYS to Cygwin format.  Requires LT_CYGPATH set.
3083b789ec8aSmrg# Returns result in func_to_host_file_result.
3084b789ec8aSmrgfunc_convert_file_msys_to_cygwin ()
3085b789ec8aSmrg{
308648e5ce07Smrg  $debug_cmd
308748e5ce07Smrg
308848e5ce07Smrg  func_to_host_file_result=$1
3089b789ec8aSmrg  if test -n "$1"; then
3090b789ec8aSmrg    func_convert_core_msys_to_w32 "$1"
3091b789ec8aSmrg    func_cygpath -u "$func_convert_core_msys_to_w32_result"
309248e5ce07Smrg    func_to_host_file_result=$func_cygpath_result
3093b789ec8aSmrg  fi
3094b789ec8aSmrg  func_convert_file_check "$1" "$func_to_host_file_result"
3095b789ec8aSmrg}
3096b789ec8aSmrg# end func_convert_file_msys_to_cygwin
3097b789ec8aSmrg
3098b789ec8aSmrg
3099b789ec8aSmrg# func_convert_file_nix_to_cygwin ARG
3100b789ec8aSmrg# Convert file name ARG from *nix to Cygwin format.  Requires Cygwin installed
3101b789ec8aSmrg# in a wine environment, working winepath, and LT_CYGPATH set.  Returns result
3102b789ec8aSmrg# in func_to_host_file_result.
3103b789ec8aSmrgfunc_convert_file_nix_to_cygwin ()
3104b789ec8aSmrg{
310548e5ce07Smrg  $debug_cmd
310648e5ce07Smrg
310748e5ce07Smrg  func_to_host_file_result=$1
3108b789ec8aSmrg  if test -n "$1"; then
3109b789ec8aSmrg    # convert from *nix to w32, then use cygpath to convert from w32 to cygwin.
3110b789ec8aSmrg    func_convert_core_file_wine_to_w32 "$1"
3111b789ec8aSmrg    func_cygpath -u "$func_convert_core_file_wine_to_w32_result"
311248e5ce07Smrg    func_to_host_file_result=$func_cygpath_result
3113b789ec8aSmrg  fi
3114b789ec8aSmrg  func_convert_file_check "$1" "$func_to_host_file_result"
3115b789ec8aSmrg}
3116b789ec8aSmrg# end func_convert_file_nix_to_cygwin
3117b789ec8aSmrg
3118b789ec8aSmrg
3119b789ec8aSmrg#############################################
3120b789ec8aSmrg# $build to $host PATH CONVERSION FUNCTIONS #
3121b789ec8aSmrg#############################################
312248e5ce07Smrg# invoked via '$to_host_path_cmd ARG'
3123b789ec8aSmrg#
3124b789ec8aSmrg# In each case, ARG is the path to be converted from $build to $host format.
3125b789ec8aSmrg# The result will be available in $func_to_host_path_result.
3126b789ec8aSmrg#
3127b789ec8aSmrg# Path separators are also converted from $build format to $host format.  If
3128b789ec8aSmrg# ARG begins or ends with a path separator character, it is preserved (but
3129b789ec8aSmrg# converted to $host format) on output.
3130b789ec8aSmrg#
3131b789ec8aSmrg# All path conversion functions are named using the following convention:
3132b789ec8aSmrg#   file name conversion function    : func_convert_file_X_to_Y ()
3133b789ec8aSmrg#   path conversion function         : func_convert_path_X_to_Y ()
3134b789ec8aSmrg# where, for any given $build/$host combination the 'X_to_Y' value is the
3135b789ec8aSmrg# same.  If conversion functions are added for new $build/$host combinations,
3136b789ec8aSmrg# the two new functions must follow this pattern, or func_init_to_host_path_cmd
3137b789ec8aSmrg# will break.
3138b789ec8aSmrg
3139b789ec8aSmrg
3140b789ec8aSmrg# func_init_to_host_path_cmd
3141b789ec8aSmrg# Ensures that function "pointer" variable $to_host_path_cmd is set to the
3142b789ec8aSmrg# appropriate value, based on the value of $to_host_file_cmd.
3143b789ec8aSmrgto_host_path_cmd=
3144b789ec8aSmrgfunc_init_to_host_path_cmd ()
3145b789ec8aSmrg{
314648e5ce07Smrg  $debug_cmd
314748e5ce07Smrg
3148b789ec8aSmrg  if test -z "$to_host_path_cmd"; then
3149b789ec8aSmrg    func_stripname 'func_convert_file_' '' "$to_host_file_cmd"
315048e5ce07Smrg    to_host_path_cmd=func_convert_path_$func_stripname_result
3151b789ec8aSmrg  fi
3152b789ec8aSmrg}
3153b789ec8aSmrg
3154b789ec8aSmrg
3155b789ec8aSmrg# func_to_host_path ARG
3156b789ec8aSmrg# Converts the path ARG from $build format to $host format. Return result
3157b789ec8aSmrg# in func_to_host_path_result.
3158b789ec8aSmrgfunc_to_host_path ()
3159b789ec8aSmrg{
316048e5ce07Smrg  $debug_cmd
316148e5ce07Smrg
3162b789ec8aSmrg  func_init_to_host_path_cmd
3163b789ec8aSmrg  $to_host_path_cmd "$1"
3164b789ec8aSmrg}
3165b789ec8aSmrg# end func_to_host_path
3166b789ec8aSmrg
3167b789ec8aSmrg
3168b789ec8aSmrg# func_convert_path_noop ARG
3169b789ec8aSmrg# Copy ARG to func_to_host_path_result.
3170b789ec8aSmrgfunc_convert_path_noop ()
3171b789ec8aSmrg{
317248e5ce07Smrg  func_to_host_path_result=$1
3173b789ec8aSmrg}
3174b789ec8aSmrg# end func_convert_path_noop
3175b789ec8aSmrg
3176b789ec8aSmrg
3177b789ec8aSmrg# func_convert_path_msys_to_w32 ARG
3178b789ec8aSmrg# Convert path ARG from (mingw) MSYS to (mingw) w32 format; automatic
3179b789ec8aSmrg# conversion to w32 is not available inside the cwrapper.  Returns result in
3180b789ec8aSmrg# func_to_host_path_result.
3181b789ec8aSmrgfunc_convert_path_msys_to_w32 ()
3182c27c18e8Smrg{
318348e5ce07Smrg  $debug_cmd
318448e5ce07Smrg
318548e5ce07Smrg  func_to_host_path_result=$1
3186b789ec8aSmrg  if test -n "$1"; then
3187b789ec8aSmrg    # Remove leading and trailing path separator characters from ARG.  MSYS
3188b789ec8aSmrg    # behavior is inconsistent here; cygpath turns them into '.;' and ';.';
3189b789ec8aSmrg    # and winepath ignores them completely.
3190b789ec8aSmrg    func_stripname : : "$1"
3191b789ec8aSmrg    func_to_host_path_tmp1=$func_stripname_result
3192b789ec8aSmrg    func_convert_core_msys_to_w32 "$func_to_host_path_tmp1"
319348e5ce07Smrg    func_to_host_path_result=$func_convert_core_msys_to_w32_result
3194b789ec8aSmrg    func_convert_path_check : ";" \
3195b789ec8aSmrg      "$func_to_host_path_tmp1" "$func_to_host_path_result"
3196b789ec8aSmrg    func_convert_path_front_back_pathsep ":*" "*:" ";" "$1"
3197b789ec8aSmrg  fi
3198b789ec8aSmrg}
3199b789ec8aSmrg# end func_convert_path_msys_to_w32
3200c27c18e8Smrg
3201c27c18e8Smrg
3202b789ec8aSmrg# func_convert_path_cygwin_to_w32 ARG
3203b789ec8aSmrg# Convert path ARG from Cygwin to w32 format.  Returns result in
3204b789ec8aSmrg# func_to_host_file_result.
3205b789ec8aSmrgfunc_convert_path_cygwin_to_w32 ()
3206b789ec8aSmrg{
320748e5ce07Smrg  $debug_cmd
320848e5ce07Smrg
320948e5ce07Smrg  func_to_host_path_result=$1
3210b789ec8aSmrg  if test -n "$1"; then
3211b789ec8aSmrg    # See func_convert_path_msys_to_w32:
3212b789ec8aSmrg    func_stripname : : "$1"
3213b789ec8aSmrg    func_to_host_path_tmp1=$func_stripname_result
3214b789ec8aSmrg    func_to_host_path_result=`cygpath -m -p "$func_to_host_path_tmp1"`
3215b789ec8aSmrg    func_convert_path_check : ";" \
3216b789ec8aSmrg      "$func_to_host_path_tmp1" "$func_to_host_path_result"
3217b789ec8aSmrg    func_convert_path_front_back_pathsep ":*" "*:" ";" "$1"
3218b789ec8aSmrg  fi
3219b789ec8aSmrg}
3220b789ec8aSmrg# end func_convert_path_cygwin_to_w32
3221c27c18e8Smrg
3222c27c18e8Smrg
3223b789ec8aSmrg# func_convert_path_nix_to_w32 ARG
3224b789ec8aSmrg# Convert path ARG from *nix to w32 format.  Requires a wine environment and
3225b789ec8aSmrg# a working winepath.  Returns result in func_to_host_file_result.
3226b789ec8aSmrgfunc_convert_path_nix_to_w32 ()
3227b789ec8aSmrg{
322848e5ce07Smrg  $debug_cmd
322948e5ce07Smrg
323048e5ce07Smrg  func_to_host_path_result=$1
3231b789ec8aSmrg  if test -n "$1"; then
3232b789ec8aSmrg    # See func_convert_path_msys_to_w32:
3233b789ec8aSmrg    func_stripname : : "$1"
3234b789ec8aSmrg    func_to_host_path_tmp1=$func_stripname_result
3235b789ec8aSmrg    func_convert_core_path_wine_to_w32 "$func_to_host_path_tmp1"
323648e5ce07Smrg    func_to_host_path_result=$func_convert_core_path_wine_to_w32_result
3237b789ec8aSmrg    func_convert_path_check : ";" \
3238b789ec8aSmrg      "$func_to_host_path_tmp1" "$func_to_host_path_result"
3239b789ec8aSmrg    func_convert_path_front_back_pathsep ":*" "*:" ";" "$1"
3240b789ec8aSmrg  fi
3241b789ec8aSmrg}
3242b789ec8aSmrg# end func_convert_path_nix_to_w32
3243c27c18e8Smrg
3244b789ec8aSmrg
3245b789ec8aSmrg# func_convert_path_msys_to_cygwin ARG
3246b789ec8aSmrg# Convert path ARG from MSYS to Cygwin format.  Requires LT_CYGPATH set.
3247b789ec8aSmrg# Returns result in func_to_host_file_result.
3248b789ec8aSmrgfunc_convert_path_msys_to_cygwin ()
3249b789ec8aSmrg{
325048e5ce07Smrg  $debug_cmd
325148e5ce07Smrg
325248e5ce07Smrg  func_to_host_path_result=$1
3253b789ec8aSmrg  if test -n "$1"; then
3254b789ec8aSmrg    # See func_convert_path_msys_to_w32:
3255b789ec8aSmrg    func_stripname : : "$1"
3256b789ec8aSmrg    func_to_host_path_tmp1=$func_stripname_result
3257b789ec8aSmrg    func_convert_core_msys_to_w32 "$func_to_host_path_tmp1"
3258b789ec8aSmrg    func_cygpath -u -p "$func_convert_core_msys_to_w32_result"
325948e5ce07Smrg    func_to_host_path_result=$func_cygpath_result
3260b789ec8aSmrg    func_convert_path_check : : \
3261b789ec8aSmrg      "$func_to_host_path_tmp1" "$func_to_host_path_result"
3262b789ec8aSmrg    func_convert_path_front_back_pathsep ":*" "*:" : "$1"
3263b789ec8aSmrg  fi
3264b789ec8aSmrg}
3265b789ec8aSmrg# end func_convert_path_msys_to_cygwin
3266b789ec8aSmrg
3267b789ec8aSmrg
3268b789ec8aSmrg# func_convert_path_nix_to_cygwin ARG
3269b789ec8aSmrg# Convert path ARG from *nix to Cygwin format.  Requires Cygwin installed in a
3270b789ec8aSmrg# a wine environment, working winepath, and LT_CYGPATH set.  Returns result in
3271b789ec8aSmrg# func_to_host_file_result.
3272b789ec8aSmrgfunc_convert_path_nix_to_cygwin ()
3273b789ec8aSmrg{
327448e5ce07Smrg  $debug_cmd
327548e5ce07Smrg
327648e5ce07Smrg  func_to_host_path_result=$1
3277b789ec8aSmrg  if test -n "$1"; then
3278b789ec8aSmrg    # Remove leading and trailing path separator characters from
3279b789ec8aSmrg    # ARG. msys behavior is inconsistent here, cygpath turns them
3280b789ec8aSmrg    # into '.;' and ';.', and winepath ignores them completely.
3281b789ec8aSmrg    func_stripname : : "$1"
3282b789ec8aSmrg    func_to_host_path_tmp1=$func_stripname_result
3283b789ec8aSmrg    func_convert_core_path_wine_to_w32 "$func_to_host_path_tmp1"
3284b789ec8aSmrg    func_cygpath -u -p "$func_convert_core_path_wine_to_w32_result"
328548e5ce07Smrg    func_to_host_path_result=$func_cygpath_result
3286b789ec8aSmrg    func_convert_path_check : : \
3287b789ec8aSmrg      "$func_to_host_path_tmp1" "$func_to_host_path_result"
3288b789ec8aSmrg    func_convert_path_front_back_pathsep ":*" "*:" : "$1"
3289b789ec8aSmrg  fi
3290c27c18e8Smrg}
3291b789ec8aSmrg# end func_convert_path_nix_to_cygwin
3292b789ec8aSmrg
3293c27c18e8Smrg
329448e5ce07Smrg# func_dll_def_p FILE
329548e5ce07Smrg# True iff FILE is a Windows DLL '.def' file.
329648e5ce07Smrg# Keep in sync with _LT_DLL_DEF_P in libtool.m4
329748e5ce07Smrgfunc_dll_def_p ()
329848e5ce07Smrg{
329948e5ce07Smrg  $debug_cmd
330048e5ce07Smrg
330148e5ce07Smrg  func_dll_def_p_tmp=`$SED -n \
330248e5ce07Smrg    -e 's/^[	 ]*//' \
330348e5ce07Smrg    -e '/^\(;.*\)*$/d' \
330448e5ce07Smrg    -e 's/^\(EXPORTS\|LIBRARY\)\([	 ].*\)*$/DEF/p' \
330548e5ce07Smrg    -e q \
330648e5ce07Smrg    "$1"`
330748e5ce07Smrg  test DEF = "$func_dll_def_p_tmp"
330848e5ce07Smrg}
330948e5ce07Smrg
331048e5ce07Smrg
3311c27c18e8Smrg# func_mode_compile arg...
3312c27c18e8Smrgfunc_mode_compile ()
3313c27c18e8Smrg{
331448e5ce07Smrg    $debug_cmd
331548e5ce07Smrg
3316c27c18e8Smrg    # Get the compilation command and the source file.
3317c27c18e8Smrg    base_compile=
331848e5ce07Smrg    srcfile=$nonopt  #  always keep a non-empty value in "srcfile"
3319c27c18e8Smrg    suppress_opt=yes
3320c27c18e8Smrg    suppress_output=
3321c27c18e8Smrg    arg_mode=normal
3322c27c18e8Smrg    libobj=
3323c27c18e8Smrg    later=
3324c27c18e8Smrg    pie_flag=
3325c27c18e8Smrg
3326c27c18e8Smrg    for arg
3327c27c18e8Smrg    do
3328c27c18e8Smrg      case $arg_mode in
3329c27c18e8Smrg      arg  )
3330c27c18e8Smrg	# do not "continue".  Instead, add this to base_compile
333148e5ce07Smrg	lastarg=$arg
3332c27c18e8Smrg	arg_mode=normal
3333c27c18e8Smrg	;;
3334c27c18e8Smrg
3335c27c18e8Smrg      target )
333648e5ce07Smrg	libobj=$arg
3337c27c18e8Smrg	arg_mode=normal
3338c27c18e8Smrg	continue
3339c27c18e8Smrg	;;
3340c27c18e8Smrg
3341c27c18e8Smrg      normal )
3342c27c18e8Smrg	# Accept any command-line options.
3343c27c18e8Smrg	case $arg in
3344c27c18e8Smrg	-o)
3345c27c18e8Smrg	  test -n "$libobj" && \
334648e5ce07Smrg	    func_fatal_error "you cannot specify '-o' more than once"
3347c27c18e8Smrg	  arg_mode=target
3348c27c18e8Smrg	  continue
3349c27c18e8Smrg	  ;;
3350c27c18e8Smrg
3351c27c18e8Smrg	-pie | -fpie | -fPIE)
3352b789ec8aSmrg          func_append pie_flag " $arg"
3353c27c18e8Smrg	  continue
3354c27c18e8Smrg	  ;;
3355c27c18e8Smrg
3356c27c18e8Smrg	-shared | -static | -prefer-pic | -prefer-non-pic)
3357b789ec8aSmrg	  func_append later " $arg"
3358c27c18e8Smrg	  continue
3359c27c18e8Smrg	  ;;
3360c27c18e8Smrg
3361c27c18e8Smrg	-no-suppress)
3362c43cc173Smrg	  suppress_opt=no
3363c43cc173Smrg	  continue
3364c43cc173Smrg	  ;;
3365c43cc173Smrg
3366c43cc173Smrg	-Xcompiler)
3367c43cc173Smrg	  arg_mode=arg  #  the next one goes into the "base_compile" arg list
3368c43cc173Smrg	  continue      #  The current "srcfile" will either be retained or
3369c43cc173Smrg	  ;;            #  replaced later.  I would guess that would be a bug.
3370c43cc173Smrg
3371c43cc173Smrg	-Wc,*)
3372c27c18e8Smrg	  func_stripname '-Wc,' '' "$arg"
3373c27c18e8Smrg	  args=$func_stripname_result
3374c43cc173Smrg	  lastarg=
337548e5ce07Smrg	  save_ifs=$IFS; IFS=,
3376c27c18e8Smrg	  for arg in $args; do
337748e5ce07Smrg	    IFS=$save_ifs
3378b789ec8aSmrg	    func_append_quoted lastarg "$arg"
3379c43cc173Smrg	  done
338048e5ce07Smrg	  IFS=$save_ifs
3381c27c18e8Smrg	  func_stripname ' ' '' "$lastarg"
3382c27c18e8Smrg	  lastarg=$func_stripname_result
3383c43cc173Smrg
3384c43cc173Smrg	  # Add the arguments to base_compile.
3385b789ec8aSmrg	  func_append base_compile " $lastarg"
3386c43cc173Smrg	  continue
3387c43cc173Smrg	  ;;
3388c43cc173Smrg
3389c27c18e8Smrg	*)
3390c43cc173Smrg	  # Accept the current argument as the source file.
3391c43cc173Smrg	  # The previous "srcfile" becomes the current argument.
3392c43cc173Smrg	  #
339348e5ce07Smrg	  lastarg=$srcfile
339448e5ce07Smrg	  srcfile=$arg
3395c43cc173Smrg	  ;;
3396c43cc173Smrg	esac  #  case $arg
3397c43cc173Smrg	;;
3398c43cc173Smrg      esac    #  case $arg_mode
3399c43cc173Smrg
3400c43cc173Smrg      # Aesthetically quote the previous argument.
3401b789ec8aSmrg      func_append_quoted base_compile "$lastarg"
3402c43cc173Smrg    done # for arg
3403c43cc173Smrg
3404c43cc173Smrg    case $arg_mode in
3405c43cc173Smrg    arg)
3406c27c18e8Smrg      func_fatal_error "you must specify an argument for -Xcompile"
3407c43cc173Smrg      ;;
3408c43cc173Smrg    target)
340948e5ce07Smrg      func_fatal_error "you must specify a target with '-o'"
3410c43cc173Smrg      ;;
3411c43cc173Smrg    *)
3412c43cc173Smrg      # Get the name of the library object.
3413c27c18e8Smrg      test -z "$libobj" && {
3414c27c18e8Smrg	func_basename "$srcfile"
341548e5ce07Smrg	libobj=$func_basename_result
3416c27c18e8Smrg      }
3417c43cc173Smrg      ;;
3418c43cc173Smrg    esac
3419c43cc173Smrg
3420c43cc173Smrg    # Recognize several different file suffixes.
3421c43cc173Smrg    # If the user specifies -o file.o, it is replaced with file.lo
3422c43cc173Smrg    case $libobj in
3423c27c18e8Smrg    *.[cCFSifmso] | \
3424c27c18e8Smrg    *.ada | *.adb | *.ads | *.asm | \
3425c27c18e8Smrg    *.c++ | *.cc | *.ii | *.class | *.cpp | *.cxx | \
3426f1ee322dSmrg    *.[fF][09]? | *.for | *.java | *.go | *.obj | *.sx | *.cu | *.cup)
3427c27c18e8Smrg      func_xform "$libobj"
3428c27c18e8Smrg      libobj=$func_xform_result
3429c27c18e8Smrg      ;;
3430c43cc173Smrg    esac
3431c43cc173Smrg
3432c43cc173Smrg    case $libobj in
3433c27c18e8Smrg    *.lo) func_lo2o "$libobj"; obj=$func_lo2o_result ;;
3434c43cc173Smrg    *)
343548e5ce07Smrg      func_fatal_error "cannot determine name of library object from '$libobj'"
3436c43cc173Smrg      ;;
3437c43cc173Smrg    esac
3438c43cc173Smrg
3439c43cc173Smrg    func_infer_tag $base_compile
3440c43cc173Smrg
3441c43cc173Smrg    for arg in $later; do
3442c43cc173Smrg      case $arg in
3443c27c18e8Smrg      -shared)
344448e5ce07Smrg	test yes = "$build_libtool_libs" \
344548e5ce07Smrg	  || func_fatal_configuration "cannot build a shared library"
3446c27c18e8Smrg	build_old_libs=no
3447c27c18e8Smrg	continue
3448c27c18e8Smrg	;;
3449c27c18e8Smrg
3450c43cc173Smrg      -static)
3451c27c18e8Smrg	build_libtool_libs=no
3452c43cc173Smrg	build_old_libs=yes
3453c43cc173Smrg	continue
3454c43cc173Smrg	;;
3455c43cc173Smrg
3456c43cc173Smrg      -prefer-pic)
3457c43cc173Smrg	pic_mode=yes
3458c43cc173Smrg	continue
3459c43cc173Smrg	;;
3460c43cc173Smrg
3461c43cc173Smrg      -prefer-non-pic)
3462c43cc173Smrg	pic_mode=no
3463c43cc173Smrg	continue
3464c43cc173Smrg	;;
3465c43cc173Smrg      esac
3466c43cc173Smrg    done
3467c43cc173Smrg
3468c27c18e8Smrg    func_quote_for_eval "$libobj"
3469c27c18e8Smrg    test "X$libobj" != "X$func_quote_for_eval_result" \
3470c27c18e8Smrg      && $ECHO "X$libobj" | $GREP '[]~#^*{};<>?"'"'"'	 &()|`$[]' \
347148e5ce07Smrg      && func_warning "libobj name '$libobj' may not contain shell special characters."
3472c27c18e8Smrg    func_dirname_and_basename "$obj" "/" ""
347348e5ce07Smrg    objname=$func_basename_result
347448e5ce07Smrg    xdir=$func_dirname_result
347548e5ce07Smrg    lobj=$xdir$objdir/$objname
3476c43cc173Smrg
3477c27c18e8Smrg    test -z "$base_compile" && \
3478c27c18e8Smrg      func_fatal_help "you must specify a compilation command"
3479c43cc173Smrg
3480c43cc173Smrg    # Delete any leftover library objects.
348148e5ce07Smrg    if test yes = "$build_old_libs"; then
3482c43cc173Smrg      removelist="$obj $lobj $libobj ${libobj}T"
3483c43cc173Smrg    else
3484c43cc173Smrg      removelist="$lobj $libobj ${libobj}T"
3485c43cc173Smrg    fi
3486c43cc173Smrg
3487c43cc173Smrg    # On Cygwin there's no "real" PIC flag so we must build both object types
3488c43cc173Smrg    case $host_os in
3489c27c18e8Smrg    cygwin* | mingw* | pw32* | os2* | cegcc*)
3490c43cc173Smrg      pic_mode=default
3491c43cc173Smrg      ;;
3492c43cc173Smrg    esac
349348e5ce07Smrg    if test no = "$pic_mode" && test pass_all != "$deplibs_check_method"; then
3494c43cc173Smrg      # non-PIC code in shared libraries is not supported
3495c43cc173Smrg      pic_mode=default
3496c43cc173Smrg    fi
3497c43cc173Smrg
3498c43cc173Smrg    # Calculate the filename of the output object if compiler does
3499c43cc173Smrg    # not support -o with -c
350048e5ce07Smrg    if test no = "$compiler_c_o"; then
350148e5ce07Smrg      output_obj=`$ECHO "$srcfile" | $SED 's%^.*/%%; s%\.[^.]*$%%'`.$objext
350248e5ce07Smrg      lockfile=$output_obj.lock
3503c43cc173Smrg    else
3504c43cc173Smrg      output_obj=
3505c43cc173Smrg      need_locks=no
3506c43cc173Smrg      lockfile=
3507c43cc173Smrg    fi
3508c43cc173Smrg
3509c43cc173Smrg    # Lock this critical section if it is needed
3510c43cc173Smrg    # We use this script file to make the link, it avoids creating a new file
351148e5ce07Smrg    if test yes = "$need_locks"; then
3512c27c18e8Smrg      until $opt_dry_run || ln "$progpath" "$lockfile" 2>/dev/null; do
3513c27c18e8Smrg	func_echo "Waiting for $lockfile to be removed"
3514c43cc173Smrg	sleep 2
3515c43cc173Smrg      done
351648e5ce07Smrg    elif test warn = "$need_locks"; then
3517c43cc173Smrg      if test -f "$lockfile"; then
3518c27c18e8Smrg	$ECHO "\
3519c43cc173Smrg*** ERROR, $lockfile exists and contains:
3520c43cc173Smrg`cat $lockfile 2>/dev/null`
3521c43cc173Smrg
3522c43cc173SmrgThis indicates that another process is trying to use the same
3523c43cc173Smrgtemporary object file, and libtool could not work around it because
352448e5ce07Smrgyour compiler does not support '-c' and '-o' together.  If you
3525c43cc173Smrgrepeat this compilation, it may succeed, by chance, but you had better
3526c43cc173Smrgavoid parallel builds (make -j) in this platform, or get a better
3527c43cc173Smrgcompiler."
3528c43cc173Smrg
3529c27c18e8Smrg	$opt_dry_run || $RM $removelist
3530c43cc173Smrg	exit $EXIT_FAILURE
3531c43cc173Smrg      fi
3532b789ec8aSmrg      func_append removelist " $output_obj"
3533c27c18e8Smrg      $ECHO "$srcfile" > "$lockfile"
3534c43cc173Smrg    fi
3535c43cc173Smrg
3536c27c18e8Smrg    $opt_dry_run || $RM $removelist
3537b789ec8aSmrg    func_append removelist " $lockfile"
3538c27c18e8Smrg    trap '$opt_dry_run || $RM $removelist; exit $EXIT_FAILURE' 1 2 15
3539c27c18e8Smrg
3540b789ec8aSmrg    func_to_tool_file "$srcfile" func_convert_file_msys_to_w32
3541b789ec8aSmrg    srcfile=$func_to_tool_file_result
3542c27c18e8Smrg    func_quote_for_eval "$srcfile"
3543c27c18e8Smrg    qsrcfile=$func_quote_for_eval_result
3544c43cc173Smrg
3545c43cc173Smrg    # Only build a PIC object if we are building libtool libraries.
354648e5ce07Smrg    if test yes = "$build_libtool_libs"; then
3547c43cc173Smrg      # Without this assignment, base_compile gets emptied.
3548c43cc173Smrg      fbsd_hideous_sh_bug=$base_compile
3549c43cc173Smrg
355048e5ce07Smrg      if test no != "$pic_mode"; then
3551c43cc173Smrg	command="$base_compile $qsrcfile $pic_flag"
3552c43cc173Smrg      else
3553c43cc173Smrg	# Don't build PIC code
3554c43cc173Smrg	command="$base_compile $qsrcfile"
3555c43cc173Smrg      fi
3556c43cc173Smrg
3557c27c18e8Smrg      func_mkdir_p "$xdir$objdir"
3558c43cc173Smrg
3559c43cc173Smrg      if test -z "$output_obj"; then
3560c43cc173Smrg	# Place PIC objects in $objdir
3561b789ec8aSmrg	func_append command " -o $lobj"
3562c43cc173Smrg      fi
3563c43cc173Smrg
3564c27c18e8Smrg      func_show_eval_locale "$command"	\
3565c27c18e8Smrg          'test -n "$output_obj" && $RM $removelist; exit $EXIT_FAILURE'
3566c43cc173Smrg
356748e5ce07Smrg      if test warn = "$need_locks" &&
3568c43cc173Smrg	 test "X`cat $lockfile 2>/dev/null`" != "X$srcfile"; then
3569c27c18e8Smrg	$ECHO "\
3570c43cc173Smrg*** ERROR, $lockfile contains:
3571c43cc173Smrg`cat $lockfile 2>/dev/null`
3572c43cc173Smrg
3573c43cc173Smrgbut it should contain:
3574c43cc173Smrg$srcfile
3575c43cc173Smrg
3576c43cc173SmrgThis indicates that another process is trying to use the same
3577c43cc173Smrgtemporary object file, and libtool could not work around it because
357848e5ce07Smrgyour compiler does not support '-c' and '-o' together.  If you
3579c43cc173Smrgrepeat this compilation, it may succeed, by chance, but you had better
3580c43cc173Smrgavoid parallel builds (make -j) in this platform, or get a better
3581c43cc173Smrgcompiler."
3582c43cc173Smrg
3583c27c18e8Smrg	$opt_dry_run || $RM $removelist
3584c43cc173Smrg	exit $EXIT_FAILURE
3585c43cc173Smrg      fi
3586c43cc173Smrg
3587c43cc173Smrg      # Just move the object if needed, then go on to compile the next one
3588c43cc173Smrg      if test -n "$output_obj" && test "X$output_obj" != "X$lobj"; then
3589c27c18e8Smrg	func_show_eval '$MV "$output_obj" "$lobj"' \
3590c27c18e8Smrg	  'error=$?; $opt_dry_run || $RM $removelist; exit $error'
3591c43cc173Smrg      fi
3592c43cc173Smrg
3593c43cc173Smrg      # Allow error messages only from the first compilation.
359448e5ce07Smrg      if test yes = "$suppress_opt"; then
3595c27c18e8Smrg	suppress_output=' >/dev/null 2>&1'
3596c43cc173Smrg      fi
3597c43cc173Smrg    fi
3598c43cc173Smrg
3599c43cc173Smrg    # Only build a position-dependent object if we build old libraries.
360048e5ce07Smrg    if test yes = "$build_old_libs"; then
360148e5ce07Smrg      if test yes != "$pic_mode"; then
3602c43cc173Smrg	# Don't build PIC code
3603c27c18e8Smrg	command="$base_compile $qsrcfile$pie_flag"
3604c43cc173Smrg      else
3605c43cc173Smrg	command="$base_compile $qsrcfile $pic_flag"
3606c43cc173Smrg      fi
360748e5ce07Smrg      if test yes = "$compiler_c_o"; then
3608b789ec8aSmrg	func_append command " -o $obj"
3609c43cc173Smrg      fi
3610c43cc173Smrg
3611c43cc173Smrg      # Suppress compiler output if we already did a PIC compilation.
3612b789ec8aSmrg      func_append command "$suppress_output"
3613c27c18e8Smrg      func_show_eval_locale "$command" \
3614c27c18e8Smrg        '$opt_dry_run || $RM $removelist; exit $EXIT_FAILURE'
3615c43cc173Smrg
361648e5ce07Smrg      if test warn = "$need_locks" &&
3617c43cc173Smrg	 test "X`cat $lockfile 2>/dev/null`" != "X$srcfile"; then
3618c27c18e8Smrg	$ECHO "\
3619c43cc173Smrg*** ERROR, $lockfile contains:
3620c43cc173Smrg`cat $lockfile 2>/dev/null`
3621c43cc173Smrg
3622c43cc173Smrgbut it should contain:
3623c43cc173Smrg$srcfile
3624c43cc173Smrg
3625c43cc173SmrgThis indicates that another process is trying to use the same
3626c43cc173Smrgtemporary object file, and libtool could not work around it because
362748e5ce07Smrgyour compiler does not support '-c' and '-o' together.  If you
3628c43cc173Smrgrepeat this compilation, it may succeed, by chance, but you had better
3629c43cc173Smrgavoid parallel builds (make -j) in this platform, or get a better
3630c43cc173Smrgcompiler."
3631c43cc173Smrg
3632c27c18e8Smrg	$opt_dry_run || $RM $removelist
3633c43cc173Smrg	exit $EXIT_FAILURE
3634c43cc173Smrg      fi
3635c43cc173Smrg
3636c43cc173Smrg      # Just move the object if needed
3637c43cc173Smrg      if test -n "$output_obj" && test "X$output_obj" != "X$obj"; then
3638c27c18e8Smrg	func_show_eval '$MV "$output_obj" "$obj"' \
3639c27c18e8Smrg	  'error=$?; $opt_dry_run || $RM $removelist; exit $error'
3640c43cc173Smrg      fi
3641c43cc173Smrg    fi
3642c43cc173Smrg
3643c27c18e8Smrg    $opt_dry_run || {
3644c27c18e8Smrg      func_write_libtool_object "$libobj" "$objdir/$objname" "$objname"
3645c43cc173Smrg
3646c27c18e8Smrg      # Unlock the critical section if it was locked
364748e5ce07Smrg      if test no != "$need_locks"; then
3648c27c18e8Smrg	removelist=$lockfile
3649c27c18e8Smrg        $RM "$lockfile"
3650c27c18e8Smrg      fi
3651c27c18e8Smrg    }
3652c43cc173Smrg
3653c43cc173Smrg    exit $EXIT_SUCCESS
3654c27c18e8Smrg}
3655c43cc173Smrg
3656c27c18e8Smrg$opt_help || {
365748e5ce07Smrg  test compile = "$opt_mode" && func_mode_compile ${1+"$@"}
3658c27c18e8Smrg}
3659c43cc173Smrg
3660c27c18e8Smrgfunc_mode_help ()
3661c27c18e8Smrg{
3662c27c18e8Smrg    # We need to display help for each of the modes.
3663b789ec8aSmrg    case $opt_mode in
3664c27c18e8Smrg      "")
3665c27c18e8Smrg        # Generic help is extracted from the usage comments
3666c27c18e8Smrg        # at the start of this file.
3667c27c18e8Smrg        func_help
3668c27c18e8Smrg        ;;
3669c43cc173Smrg
3670c27c18e8Smrg      clean)
3671c27c18e8Smrg        $ECHO \
3672c27c18e8Smrg"Usage: $progname [OPTION]... --mode=clean RM [RM-OPTION]... FILE...
3673c43cc173Smrg
3674c27c18e8SmrgRemove files from the build directory.
3675c43cc173Smrg
3676c27c18e8SmrgRM is the name of the program to use to delete files associated with each FILE
367748e5ce07Smrg(typically '/bin/rm').  RM-OPTIONS are options (such as '-f') to be passed
3678c27c18e8Smrgto RM.
3679c43cc173Smrg
3680c27c18e8SmrgIf FILE is a libtool library, object or program, all the files associated
3681c27c18e8Smrgwith it are deleted. Otherwise, only FILE itself is deleted using RM."
3682c27c18e8Smrg        ;;
3683c43cc173Smrg
3684c27c18e8Smrg      compile)
3685c27c18e8Smrg      $ECHO \
3686c27c18e8Smrg"Usage: $progname [OPTION]... --mode=compile COMPILE-COMMAND... SOURCEFILE
3687c43cc173Smrg
3688c27c18e8SmrgCompile a source file into a libtool library object.
3689c43cc173Smrg
3690c27c18e8SmrgThis mode accepts the following additional options:
3691c43cc173Smrg
3692c27c18e8Smrg  -o OUTPUT-FILE    set the output file name to OUTPUT-FILE
3693c27c18e8Smrg  -no-suppress      do not suppress compiler output for multiple passes
369437eb1ca1Smrg  -prefer-pic       try to build PIC objects only
369537eb1ca1Smrg  -prefer-non-pic   try to build non-PIC objects only
369648e5ce07Smrg  -shared           do not build a '.o' file suitable for static linking
369748e5ce07Smrg  -static           only build a '.o' file suitable for static linking
369837eb1ca1Smrg  -Wc,FLAG          pass FLAG directly to the compiler
3699c43cc173Smrg
370048e5ce07SmrgCOMPILE-COMMAND is a command to be used in creating a 'standard' object file
3701c27c18e8Smrgfrom the given SOURCEFILE.
3702c43cc173Smrg
3703c27c18e8SmrgThe output file name is determined by removing the directory component from
370448e5ce07SmrgSOURCEFILE, then substituting the C source code suffix '.c' with the
370548e5ce07Smrglibrary object suffix, '.lo'."
3706c27c18e8Smrg        ;;
3707c43cc173Smrg
3708c27c18e8Smrg      execute)
3709c27c18e8Smrg        $ECHO \
3710c27c18e8Smrg"Usage: $progname [OPTION]... --mode=execute COMMAND [ARGS]...
3711c43cc173Smrg
3712c27c18e8SmrgAutomatically set library path, then run a program.
3713c43cc173Smrg
3714c27c18e8SmrgThis mode accepts the following additional options:
3715c43cc173Smrg
3716c27c18e8Smrg  -dlopen FILE      add the directory containing FILE to the library path
3717c43cc173Smrg
371848e5ce07SmrgThis mode sets the library path environment variable according to '-dlopen'
3719c27c18e8Smrgflags.
3720c43cc173Smrg
3721c27c18e8SmrgIf any of the ARGS are libtool executable wrappers, then they are translated
3722c27c18e8Smrginto their corresponding uninstalled binary, and any of their required library
3723c27c18e8Smrgdirectories are added to the library path.
3724c43cc173Smrg
3725c27c18e8SmrgThen, COMMAND is executed, with ARGS as arguments."
3726c27c18e8Smrg        ;;
3727c43cc173Smrg
3728c27c18e8Smrg      finish)
3729c27c18e8Smrg        $ECHO \
3730c27c18e8Smrg"Usage: $progname [OPTION]... --mode=finish [LIBDIR]...
3731c43cc173Smrg
3732c27c18e8SmrgComplete the installation of libtool libraries.
3733c43cc173Smrg
3734c27c18e8SmrgEach LIBDIR is a directory that contains libtool libraries.
3735c43cc173Smrg
3736c27c18e8SmrgThe commands that this mode executes may require superuser privileges.  Use
373748e5ce07Smrgthe '--dry-run' option if you just want to see what would be executed."
3738c27c18e8Smrg        ;;
3739c43cc173Smrg
3740c27c18e8Smrg      install)
3741c27c18e8Smrg        $ECHO \
3742c27c18e8Smrg"Usage: $progname [OPTION]... --mode=install INSTALL-COMMAND...
3743c43cc173Smrg
3744c27c18e8SmrgInstall executables or libraries.
3745c43cc173Smrg
3746c27c18e8SmrgINSTALL-COMMAND is the installation command.  The first component should be
374748e5ce07Smrgeither the 'install' or 'cp' program.
3748c43cc173Smrg
3749c27c18e8SmrgThe following components of INSTALL-COMMAND are treated specially:
3750c43cc173Smrg
375137eb1ca1Smrg  -inst-prefix-dir PREFIX-DIR  Use PREFIX-DIR as a staging area for installation
3752c43cc173Smrg
3753c27c18e8SmrgThe rest of the components are interpreted as arguments to that command (only
3754c27c18e8SmrgBSD-compatible install options are recognized)."
3755c27c18e8Smrg        ;;
3756c43cc173Smrg
3757c27c18e8Smrg      link)
3758c27c18e8Smrg        $ECHO \
3759c27c18e8Smrg"Usage: $progname [OPTION]... --mode=link LINK-COMMAND...
3760c43cc173Smrg
3761c27c18e8SmrgLink object files or libraries together to form another library, or to
3762c27c18e8Smrgcreate an executable program.
3763c43cc173Smrg
3764c27c18e8SmrgLINK-COMMAND is a command using the C compiler that you would use to create
3765c27c18e8Smrga program from several object files.
3766c43cc173Smrg
3767c27c18e8SmrgThe following components of LINK-COMMAND are treated specially:
3768c43cc173Smrg
3769c27c18e8Smrg  -all-static       do not do any dynamic linking at all
3770c27c18e8Smrg  -avoid-version    do not add a version suffix if possible
377137eb1ca1Smrg  -bindir BINDIR    specify path to binaries directory (for systems where
377237eb1ca1Smrg                    libraries must be found in the PATH setting at runtime)
377348e5ce07Smrg  -dlopen FILE      '-dlpreopen' FILE if it cannot be dlopened at runtime
3774c27c18e8Smrg  -dlpreopen FILE   link in FILE and add its symbols to lt_preloaded_symbols
3775c27c18e8Smrg  -export-dynamic   allow symbols from OUTPUT-FILE to be resolved with dlsym(3)
3776c27c18e8Smrg  -export-symbols SYMFILE
3777c27c18e8Smrg                    try to export only the symbols listed in SYMFILE
3778c27c18e8Smrg  -export-symbols-regex REGEX
3779c27c18e8Smrg                    try to export only the symbols matching REGEX
3780c27c18e8Smrg  -LLIBDIR          search LIBDIR for required installed libraries
3781c27c18e8Smrg  -lNAME            OUTPUT-FILE requires the installed library libNAME
3782c27c18e8Smrg  -module           build a library that can dlopened
3783c27c18e8Smrg  -no-fast-install  disable the fast-install mode
3784c27c18e8Smrg  -no-install       link a not-installable executable
3785c27c18e8Smrg  -no-undefined     declare that a library does not refer to external symbols
3786c27c18e8Smrg  -o OUTPUT-FILE    create OUTPUT-FILE from the specified objects
378748e5ce07Smrg  -objectlist FILE  use a list of object files found in FILE to specify objects
378848e5ce07Smrg  -os2dllname NAME  force a short DLL name on OS/2 (no effect on other OSes)
3789c27c18e8Smrg  -precious-files-regex REGEX
3790c27c18e8Smrg                    don't remove output files matching REGEX
3791c27c18e8Smrg  -release RELEASE  specify package release information
3792c27c18e8Smrg  -rpath LIBDIR     the created library will eventually be installed in LIBDIR
3793c27c18e8Smrg  -R[ ]LIBDIR       add LIBDIR to the runtime path of programs and libraries
3794c27c18e8Smrg  -shared           only do dynamic linking of libtool libraries
3795c27c18e8Smrg  -shrext SUFFIX    override the standard shared library file extension
3796c27c18e8Smrg  -static           do not do any dynamic linking of uninstalled libtool libraries
3797c27c18e8Smrg  -static-libtool-libs
3798c27c18e8Smrg                    do not do any dynamic linking of libtool libraries
3799c27c18e8Smrg  -version-info CURRENT[:REVISION[:AGE]]
3800c27c18e8Smrg                    specify library version info [each variable defaults to 0]
3801c27c18e8Smrg  -weak LIBNAME     declare that the target provides the LIBNAME interface
380237eb1ca1Smrg  -Wc,FLAG
380337eb1ca1Smrg  -Xcompiler FLAG   pass linker-specific FLAG directly to the compiler
380437eb1ca1Smrg  -Wl,FLAG
380537eb1ca1Smrg  -Xlinker FLAG     pass linker-specific FLAG directly to the linker
380637eb1ca1Smrg  -XCClinker FLAG   pass link-specific FLAG to the compiler driver (CC)
3807c43cc173Smrg
380848e5ce07SmrgAll other options (arguments beginning with '-') are ignored.
3809c43cc173Smrg
381048e5ce07SmrgEvery other argument is treated as a filename.  Files ending in '.la' are
3811c27c18e8Smrgtreated as uninstalled libtool libraries, other files are standard or library
3812c27c18e8Smrgobject files.
3813c43cc173Smrg
381448e5ce07SmrgIf the OUTPUT-FILE ends in '.la', then a libtool library is created,
381548e5ce07Smrgonly library objects ('.lo' files) may be specified, and '-rpath' is
3816c27c18e8Smrgrequired, except when creating a convenience library.
3817c43cc173Smrg
381848e5ce07SmrgIf OUTPUT-FILE ends in '.a' or '.lib', then a standard library is created
381948e5ce07Smrgusing 'ar' and 'ranlib', or on Windows using 'lib'.
3820c43cc173Smrg
382148e5ce07SmrgIf OUTPUT-FILE ends in '.lo' or '.$objext', then a reloadable object file
3822c27c18e8Smrgis created, otherwise an executable program is created."
3823c43cc173Smrg        ;;
3824c43cc173Smrg
3825c27c18e8Smrg      uninstall)
3826c27c18e8Smrg        $ECHO \
3827c27c18e8Smrg"Usage: $progname [OPTION]... --mode=uninstall RM [RM-OPTION]... FILE...
3828c43cc173Smrg
3829c27c18e8SmrgRemove libraries from an installation directory.
3830c43cc173Smrg
3831c27c18e8SmrgRM is the name of the program to use to delete files associated with each FILE
383248e5ce07Smrg(typically '/bin/rm').  RM-OPTIONS are options (such as '-f') to be passed
3833c27c18e8Smrgto RM.
3834c43cc173Smrg
3835c27c18e8SmrgIf FILE is a libtool library, all the files associated with it are deleted.
3836c27c18e8SmrgOtherwise, only FILE itself is deleted using RM."
3837c27c18e8Smrg        ;;
3838c43cc173Smrg
3839c27c18e8Smrg      *)
384048e5ce07Smrg        func_fatal_help "invalid operation mode '$opt_mode'"
3841c27c18e8Smrg        ;;
3842c27c18e8Smrg    esac
3843c43cc173Smrg
384437eb1ca1Smrg    echo
384548e5ce07Smrg    $ECHO "Try '$progname --help' for more information about other modes."
3846c27c18e8Smrg}
3847c43cc173Smrg
384837eb1ca1Smrg# Now that we've collected a possible --mode arg, show help if necessary
384937eb1ca1Smrgif $opt_help; then
385048e5ce07Smrg  if test : = "$opt_help"; then
385137eb1ca1Smrg    func_mode_help
385237eb1ca1Smrg  else
385337eb1ca1Smrg    {
385437eb1ca1Smrg      func_help noexit
3855b789ec8aSmrg      for opt_mode in compile link execute install finish uninstall clean; do
385637eb1ca1Smrg	func_mode_help
385737eb1ca1Smrg      done
385848e5ce07Smrg    } | $SED -n '1p; 2,$s/^Usage:/  or: /p'
385937eb1ca1Smrg    {
386037eb1ca1Smrg      func_help noexit
3861b789ec8aSmrg      for opt_mode in compile link execute install finish uninstall clean; do
386237eb1ca1Smrg	echo
386337eb1ca1Smrg	func_mode_help
386437eb1ca1Smrg      done
386537eb1ca1Smrg    } |
386648e5ce07Smrg    $SED '1d
386737eb1ca1Smrg      /^When reporting/,/^Report/{
386837eb1ca1Smrg	H
386937eb1ca1Smrg	d
387037eb1ca1Smrg      }
387137eb1ca1Smrg      $x
387237eb1ca1Smrg      /information about other modes/d
387337eb1ca1Smrg      /more detailed .*MODE/d
387437eb1ca1Smrg      s/^Usage:.*--mode=\([^ ]*\) .*/Description of \1 mode:/'
387537eb1ca1Smrg  fi
387637eb1ca1Smrg  exit $?
387737eb1ca1Smrgfi
3878c43cc173Smrg
3879c43cc173Smrg
3880c27c18e8Smrg# func_mode_execute arg...
3881c27c18e8Smrgfunc_mode_execute ()
3882c27c18e8Smrg{
388348e5ce07Smrg    $debug_cmd
388448e5ce07Smrg
3885c27c18e8Smrg    # The first argument is the command name.
388648e5ce07Smrg    cmd=$nonopt
3887c27c18e8Smrg    test -z "$cmd" && \
3888c27c18e8Smrg      func_fatal_help "you must specify a COMMAND"
3889c43cc173Smrg
3890c27c18e8Smrg    # Handle -dlopen flags immediately.
3891b789ec8aSmrg    for file in $opt_dlopen; do
3892c27c18e8Smrg      test -f "$file" \
389348e5ce07Smrg	|| func_fatal_help "'$file' is not a file"
3894c43cc173Smrg
3895c27c18e8Smrg      dir=
3896c27c18e8Smrg      case $file in
3897c27c18e8Smrg      *.la)
3898b789ec8aSmrg	func_resolve_sysroot "$file"
3899b789ec8aSmrg	file=$func_resolve_sysroot_result
3900b789ec8aSmrg
3901c27c18e8Smrg	# Check to see that this really is a libtool archive.
3902c27c18e8Smrg	func_lalib_unsafe_p "$file" \
390348e5ce07Smrg	  || func_fatal_help "'$lib' is not a valid libtool archive"
3904c43cc173Smrg
3905c27c18e8Smrg	# Read the libtool library.
3906c27c18e8Smrg	dlname=
3907c27c18e8Smrg	library_names=
3908c27c18e8Smrg	func_source "$file"
3909c43cc173Smrg
3910c27c18e8Smrg	# Skip this library if it cannot be dlopened.
3911c27c18e8Smrg	if test -z "$dlname"; then
3912c27c18e8Smrg	  # Warn if it was a shared library.
3913c27c18e8Smrg	  test -n "$library_names" && \
391448e5ce07Smrg	    func_warning "'$file' was not linked with '-export-dynamic'"
3915c27c18e8Smrg	  continue
3916c27c18e8Smrg	fi
3917c43cc173Smrg
3918c27c18e8Smrg	func_dirname "$file" "" "."
391948e5ce07Smrg	dir=$func_dirname_result
3920c43cc173Smrg
3921c27c18e8Smrg	if test -f "$dir/$objdir/$dlname"; then
3922b789ec8aSmrg	  func_append dir "/$objdir"
3923c27c18e8Smrg	else
3924c27c18e8Smrg	  if test ! -f "$dir/$dlname"; then
392548e5ce07Smrg	    func_fatal_error "cannot find '$dlname' in '$dir' or '$dir/$objdir'"
3926c27c18e8Smrg	  fi
3927c27c18e8Smrg	fi
3928c43cc173Smrg	;;
3929c43cc173Smrg
3930c27c18e8Smrg      *.lo)
3931c27c18e8Smrg	# Just add the directory containing the .lo file.
3932c27c18e8Smrg	func_dirname "$file" "" "."
393348e5ce07Smrg	dir=$func_dirname_result
3934c43cc173Smrg	;;
3935c43cc173Smrg
3936c27c18e8Smrg      *)
393748e5ce07Smrg	func_warning "'-dlopen' is ignored for non-libtool libraries and objects"
3938c43cc173Smrg	continue
3939c43cc173Smrg	;;
3940c27c18e8Smrg      esac
3941c43cc173Smrg
3942c27c18e8Smrg      # Get the absolute pathname.
3943c27c18e8Smrg      absdir=`cd "$dir" && pwd`
394448e5ce07Smrg      test -n "$absdir" && dir=$absdir
3945c43cc173Smrg
3946c27c18e8Smrg      # Now add the directory to shlibpath_var.
3947c27c18e8Smrg      if eval "test -z \"\$$shlibpath_var\""; then
3948c27c18e8Smrg	eval "$shlibpath_var=\"\$dir\""
3949c27c18e8Smrg      else
3950c27c18e8Smrg	eval "$shlibpath_var=\"\$dir:\$$shlibpath_var\""
3951c27c18e8Smrg      fi
3952c27c18e8Smrg    done
3953c43cc173Smrg
3954c27c18e8Smrg    # This variable tells wrapper scripts just to set shlibpath_var
3955c27c18e8Smrg    # rather than running their programs.
395648e5ce07Smrg    libtool_execute_magic=$magic
3957c43cc173Smrg
3958c27c18e8Smrg    # Check if any of the arguments is a wrapper script.
3959c27c18e8Smrg    args=
3960c27c18e8Smrg    for file
3961c27c18e8Smrg    do
3962c27c18e8Smrg      case $file in
396337eb1ca1Smrg      -* | *.la | *.lo ) ;;
3964c27c18e8Smrg      *)
3965c27c18e8Smrg	# Do a test to see if this is really a libtool program.
3966c27c18e8Smrg	if func_ltwrapper_script_p "$file"; then
3967c27c18e8Smrg	  func_source "$file"
3968c27c18e8Smrg	  # Transform arg to wrapped name.
396948e5ce07Smrg	  file=$progdir/$program
3970c27c18e8Smrg	elif func_ltwrapper_executable_p "$file"; then
3971c27c18e8Smrg	  func_ltwrapper_scriptname "$file"
3972c27c18e8Smrg	  func_source "$func_ltwrapper_scriptname_result"
3973c27c18e8Smrg	  # Transform arg to wrapped name.
397448e5ce07Smrg	  file=$progdir/$program
3975c27c18e8Smrg	fi
3976c27c18e8Smrg	;;
3977c27c18e8Smrg      esac
3978c27c18e8Smrg      # Quote arguments (to preserve shell metacharacters).
3979b789ec8aSmrg      func_append_quoted args "$file"
3980c27c18e8Smrg    done
3981c43cc173Smrg
398248e5ce07Smrg    if $opt_dry_run; then
398348e5ce07Smrg      # Display what would be done.
398448e5ce07Smrg      if test -n "$shlibpath_var"; then
398548e5ce07Smrg	eval "\$ECHO \"\$shlibpath_var=\$$shlibpath_var\""
398648e5ce07Smrg	echo "export $shlibpath_var"
398748e5ce07Smrg      fi
398848e5ce07Smrg      $ECHO "$cmd$args"
398948e5ce07Smrg      exit $EXIT_SUCCESS
399048e5ce07Smrg    else
3991c27c18e8Smrg      if test -n "$shlibpath_var"; then
3992c27c18e8Smrg	# Export the shlibpath_var.
3993c27c18e8Smrg	eval "export $shlibpath_var"
3994c27c18e8Smrg      fi
3995c43cc173Smrg
3996c27c18e8Smrg      # Restore saved environment variables
3997c27c18e8Smrg      for lt_var in LANG LANGUAGE LC_ALL LC_CTYPE LC_COLLATE LC_MESSAGES
3998c27c18e8Smrg      do
3999c27c18e8Smrg	eval "if test \"\${save_$lt_var+set}\" = set; then
4000c27c18e8Smrg                $lt_var=\$save_$lt_var; export $lt_var
4001c43cc173Smrg	      else
4002c27c18e8Smrg		$lt_unset $lt_var
4003c27c18e8Smrg	      fi"
4004c27c18e8Smrg      done
4005c43cc173Smrg
4006c27c18e8Smrg      # Now prepare to actually exec the command.
400748e5ce07Smrg      exec_cmd=\$cmd$args
4008c27c18e8Smrg    fi
4009c27c18e8Smrg}
4010c43cc173Smrg
401148e5ce07Smrgtest execute = "$opt_mode" && func_mode_execute ${1+"$@"}
4012c43cc173Smrg
4013c43cc173Smrg
4014c27c18e8Smrg# func_mode_finish arg...
4015c27c18e8Smrgfunc_mode_finish ()
4016c27c18e8Smrg{
401748e5ce07Smrg    $debug_cmd
401848e5ce07Smrg
4019b789ec8aSmrg    libs=
4020b789ec8aSmrg    libdirs=
4021c27c18e8Smrg    admincmds=
4022c43cc173Smrg
4023b789ec8aSmrg    for opt in "$nonopt" ${1+"$@"}
4024b789ec8aSmrg    do
4025b789ec8aSmrg      if test -d "$opt"; then
4026b789ec8aSmrg	func_append libdirs " $opt"
4027b789ec8aSmrg
4028b789ec8aSmrg      elif test -f "$opt"; then
4029b789ec8aSmrg	if func_lalib_unsafe_p "$opt"; then
4030b789ec8aSmrg	  func_append libs " $opt"
4031b789ec8aSmrg	else
403248e5ce07Smrg	  func_warning "'$opt' is not a valid libtool archive"
4033b789ec8aSmrg	fi
4034b789ec8aSmrg
4035b789ec8aSmrg      else
403648e5ce07Smrg	func_fatal_error "invalid argument '$opt'"
4037b789ec8aSmrg      fi
4038b789ec8aSmrg    done
4039b789ec8aSmrg
4040b789ec8aSmrg    if test -n "$libs"; then
4041b789ec8aSmrg      if test -n "$lt_sysroot"; then
4042b789ec8aSmrg        sysroot_regex=`$ECHO "$lt_sysroot" | $SED "$sed_make_literal_regex"`
4043b789ec8aSmrg        sysroot_cmd="s/\([ ']\)$sysroot_regex/\1/g;"
4044b789ec8aSmrg      else
4045b789ec8aSmrg        sysroot_cmd=
4046b789ec8aSmrg      fi
4047b789ec8aSmrg
4048b789ec8aSmrg      # Remove sysroot references
4049b789ec8aSmrg      if $opt_dry_run; then
4050b789ec8aSmrg        for lib in $libs; do
405148e5ce07Smrg          echo "removing references to $lt_sysroot and '=' prefixes from $lib"
4052b789ec8aSmrg        done
4053b789ec8aSmrg      else
4054b789ec8aSmrg        tmpdir=`func_mktempdir`
4055b789ec8aSmrg        for lib in $libs; do
405648e5ce07Smrg	  $SED -e "$sysroot_cmd s/\([ ']-[LR]\)=/\1/g; s/\([ ']\)=/\1/g" $lib \
4057b789ec8aSmrg	    > $tmpdir/tmp-la
4058b789ec8aSmrg	  mv -f $tmpdir/tmp-la $lib
4059b789ec8aSmrg	done
4060b789ec8aSmrg        ${RM}r "$tmpdir"
4061b789ec8aSmrg      fi
4062b789ec8aSmrg    fi
4063c43cc173Smrg
4064b789ec8aSmrg    if test -n "$finish_cmds$finish_eval" && test -n "$libdirs"; then
4065c27c18e8Smrg      for libdir in $libdirs; do
4066c27c18e8Smrg	if test -n "$finish_cmds"; then
4067c27c18e8Smrg	  # Do each command in the finish commands.
4068c27c18e8Smrg	  func_execute_cmds "$finish_cmds" 'admincmds="$admincmds
4069c27c18e8Smrg'"$cmd"'"'
4070c43cc173Smrg	fi
4071c27c18e8Smrg	if test -n "$finish_eval"; then
4072c27c18e8Smrg	  # Do the single finish_eval.
4073c27c18e8Smrg	  eval cmds=\"$finish_eval\"
4074b789ec8aSmrg	  $opt_dry_run || eval "$cmds" || func_append admincmds "
4075c27c18e8Smrg       $cmds"
4076c27c18e8Smrg	fi
4077c27c18e8Smrg      done
4078c27c18e8Smrg    fi
4079c43cc173Smrg
4080c27c18e8Smrg    # Exit here if they wanted silent mode.
408148e5ce07Smrg    $opt_quiet && exit $EXIT_SUCCESS
4082c43cc173Smrg
4083b789ec8aSmrg    if test -n "$finish_cmds$finish_eval" && test -n "$libdirs"; then
4084b789ec8aSmrg      echo "----------------------------------------------------------------------"
4085b789ec8aSmrg      echo "Libraries have been installed in:"
4086b789ec8aSmrg      for libdir in $libdirs; do
4087b789ec8aSmrg	$ECHO "   $libdir"
4088b789ec8aSmrg      done
4089b789ec8aSmrg      echo
4090b789ec8aSmrg      echo "If you ever happen to want to link against installed libraries"
4091b789ec8aSmrg      echo "in a given directory, LIBDIR, you must either use libtool, and"
409248e5ce07Smrg      echo "specify the full pathname of the library, or use the '-LLIBDIR'"
4093b789ec8aSmrg      echo "flag during linking and do at least one of the following:"
4094b789ec8aSmrg      if test -n "$shlibpath_var"; then
409548e5ce07Smrg	echo "   - add LIBDIR to the '$shlibpath_var' environment variable"
4096b789ec8aSmrg	echo "     during execution"
4097b789ec8aSmrg      fi
4098b789ec8aSmrg      if test -n "$runpath_var"; then
409948e5ce07Smrg	echo "   - add LIBDIR to the '$runpath_var' environment variable"
4100b789ec8aSmrg	echo "     during linking"
4101b789ec8aSmrg      fi
4102b789ec8aSmrg      if test -n "$hardcode_libdir_flag_spec"; then
4103b789ec8aSmrg	libdir=LIBDIR
4104b789ec8aSmrg	eval flag=\"$hardcode_libdir_flag_spec\"
4105c43cc173Smrg
410648e5ce07Smrg	$ECHO "   - use the '$flag' linker flag"
4107b789ec8aSmrg      fi
4108b789ec8aSmrg      if test -n "$admincmds"; then
4109b789ec8aSmrg	$ECHO "   - have your system administrator run these commands:$admincmds"
4110b789ec8aSmrg      fi
4111b789ec8aSmrg      if test -f /etc/ld.so.conf; then
411248e5ce07Smrg	echo "   - have your system administrator add LIBDIR to '/etc/ld.so.conf'"
4113b789ec8aSmrg      fi
4114b789ec8aSmrg      echo
4115c27c18e8Smrg
4116b789ec8aSmrg      echo "See any operating system documentation about shared libraries for"
4117b789ec8aSmrg      case $host in
4118b789ec8aSmrg	solaris2.[6789]|solaris2.1[0-9])
4119b789ec8aSmrg	  echo "more information, such as the ld(1), crle(1) and ld.so(8) manual"
4120b789ec8aSmrg	  echo "pages."
4121b789ec8aSmrg	  ;;
4122b789ec8aSmrg	*)
4123b789ec8aSmrg	  echo "more information, such as the ld(1) and ld.so(8) manual pages."
4124b789ec8aSmrg	  ;;
4125b789ec8aSmrg      esac
4126b789ec8aSmrg      echo "----------------------------------------------------------------------"
4127b789ec8aSmrg    fi
4128c27c18e8Smrg    exit $EXIT_SUCCESS
4129c27c18e8Smrg}
4130c27c18e8Smrg
413148e5ce07Smrgtest finish = "$opt_mode" && func_mode_finish ${1+"$@"}
4132c27c18e8Smrg
4133c27c18e8Smrg
4134c27c18e8Smrg# func_mode_install arg...
4135c27c18e8Smrgfunc_mode_install ()
4136c27c18e8Smrg{
413748e5ce07Smrg    $debug_cmd
413848e5ce07Smrg
4139c27c18e8Smrg    # There may be an optional sh(1) argument at the beginning of
4140c27c18e8Smrg    # install_prog (especially on Windows NT).
414148e5ce07Smrg    if test "$SHELL" = "$nonopt" || test /bin/sh = "$nonopt" ||
4142c27c18e8Smrg       # Allow the use of GNU shtool's install command.
414348e5ce07Smrg       case $nonopt in *shtool*) :;; *) false;; esac
414448e5ce07Smrg    then
4145c27c18e8Smrg      # Aesthetically quote it.
4146c27c18e8Smrg      func_quote_for_eval "$nonopt"
4147c27c18e8Smrg      install_prog="$func_quote_for_eval_result "
4148c27c18e8Smrg      arg=$1
4149c27c18e8Smrg      shift
4150c27c18e8Smrg    else
4151c27c18e8Smrg      install_prog=
4152c27c18e8Smrg      arg=$nonopt
4153c27c18e8Smrg    fi
4154c27c18e8Smrg
4155c27c18e8Smrg    # The real first argument should be the name of the installation program.
4156c27c18e8Smrg    # Aesthetically quote it.
4157c27c18e8Smrg    func_quote_for_eval "$arg"
4158b789ec8aSmrg    func_append install_prog "$func_quote_for_eval_result"
415937eb1ca1Smrg    install_shared_prog=$install_prog
416037eb1ca1Smrg    case " $install_prog " in
416137eb1ca1Smrg      *[\\\ /]cp\ *) install_cp=: ;;
416237eb1ca1Smrg      *) install_cp=false ;;
416337eb1ca1Smrg    esac
4164c27c18e8Smrg
4165c27c18e8Smrg    # We need to accept at least all the BSD install flags.
4166c27c18e8Smrg    dest=
4167c27c18e8Smrg    files=
4168c27c18e8Smrg    opts=
4169c27c18e8Smrg    prev=
4170c27c18e8Smrg    install_type=
417148e5ce07Smrg    isdir=false
4172c27c18e8Smrg    stripme=
417337eb1ca1Smrg    no_mode=:
4174c27c18e8Smrg    for arg
4175c27c18e8Smrg    do
417637eb1ca1Smrg      arg2=
4177c27c18e8Smrg      if test -n "$dest"; then
4178b789ec8aSmrg	func_append files " $dest"
4179c27c18e8Smrg	dest=$arg
4180c27c18e8Smrg	continue
4181c27c18e8Smrg      fi
4182c27c18e8Smrg
4183c27c18e8Smrg      case $arg in
418448e5ce07Smrg      -d) isdir=: ;;
4185c27c18e8Smrg      -f)
418637eb1ca1Smrg	if $install_cp; then :; else
418737eb1ca1Smrg	  prev=$arg
418837eb1ca1Smrg	fi
4189c27c18e8Smrg	;;
4190c27c18e8Smrg      -g | -m | -o)
4191c27c18e8Smrg	prev=$arg
4192c27c18e8Smrg	;;
4193c27c18e8Smrg      -s)
4194c27c18e8Smrg	stripme=" -s"
4195c27c18e8Smrg	continue
4196c27c18e8Smrg	;;
4197c27c18e8Smrg      -*)
4198c27c18e8Smrg	;;
4199c27c18e8Smrg      *)
4200c27c18e8Smrg	# If the previous option needed an argument, then skip it.
4201c27c18e8Smrg	if test -n "$prev"; then
420248e5ce07Smrg	  if test X-m = "X$prev" && test -n "$install_override_mode"; then
420337eb1ca1Smrg	    arg2=$install_override_mode
420437eb1ca1Smrg	    no_mode=false
420537eb1ca1Smrg	  fi
4206c43cc173Smrg	  prev=
4207c43cc173Smrg	else
4208c27c18e8Smrg	  dest=$arg
4209c27c18e8Smrg	  continue
4210c43cc173Smrg	fi
4211c43cc173Smrg	;;
4212c27c18e8Smrg      esac
4213c43cc173Smrg
4214c27c18e8Smrg      # Aesthetically quote the argument.
4215c27c18e8Smrg      func_quote_for_eval "$arg"
4216b789ec8aSmrg      func_append install_prog " $func_quote_for_eval_result"
421737eb1ca1Smrg      if test -n "$arg2"; then
421837eb1ca1Smrg	func_quote_for_eval "$arg2"
421937eb1ca1Smrg      fi
4220b789ec8aSmrg      func_append install_shared_prog " $func_quote_for_eval_result"
4221c27c18e8Smrg    done
4222c43cc173Smrg
4223c27c18e8Smrg    test -z "$install_prog" && \
4224c27c18e8Smrg      func_fatal_help "you must specify an install program"
4225c43cc173Smrg
4226c27c18e8Smrg    test -n "$prev" && \
422748e5ce07Smrg      func_fatal_help "the '$prev' option requires an argument"
4228c43cc173Smrg
422937eb1ca1Smrg    if test -n "$install_override_mode" && $no_mode; then
423037eb1ca1Smrg      if $install_cp; then :; else
423137eb1ca1Smrg	func_quote_for_eval "$install_override_mode"
4232b789ec8aSmrg	func_append install_shared_prog " -m $func_quote_for_eval_result"
423337eb1ca1Smrg      fi
423437eb1ca1Smrg    fi
423537eb1ca1Smrg
4236c27c18e8Smrg    if test -z "$files"; then
4237c27c18e8Smrg      if test -z "$dest"; then
4238c27c18e8Smrg	func_fatal_help "no file or destination specified"
4239c27c18e8Smrg      else
4240c27c18e8Smrg	func_fatal_help "you must specify a destination"
4241c27c18e8Smrg      fi
4242c43cc173Smrg    fi
4243c43cc173Smrg
4244c27c18e8Smrg    # Strip any trailing slash from the destination.
4245c27c18e8Smrg    func_stripname '' '/' "$dest"
4246c27c18e8Smrg    dest=$func_stripname_result
4247c43cc173Smrg
4248c27c18e8Smrg    # Check to see that the destination is a directory.
424948e5ce07Smrg    test -d "$dest" && isdir=:
425048e5ce07Smrg    if $isdir; then
425148e5ce07Smrg      destdir=$dest
4252c27c18e8Smrg      destname=
4253c43cc173Smrg    else
4254c27c18e8Smrg      func_dirname_and_basename "$dest" "" "."
425548e5ce07Smrg      destdir=$func_dirname_result
425648e5ce07Smrg      destname=$func_basename_result
4257c43cc173Smrg
4258c27c18e8Smrg      # Not a directory, so check to see that there is only one file specified.
4259c27c18e8Smrg      set dummy $files; shift
4260c27c18e8Smrg      test "$#" -gt 1 && \
426148e5ce07Smrg	func_fatal_help "'$dest' is not a directory"
4262c43cc173Smrg    fi
4263c27c18e8Smrg    case $destdir in
4264c27c18e8Smrg    [\\/]* | [A-Za-z]:[\\/]*) ;;
4265c43cc173Smrg    *)
4266c27c18e8Smrg      for file in $files; do
4267c27c18e8Smrg	case $file in
4268c27c18e8Smrg	*.lo) ;;
4269c27c18e8Smrg	*)
427048e5ce07Smrg	  func_fatal_help "'$destdir' must be an absolute directory name"
4271c27c18e8Smrg	  ;;
4272c27c18e8Smrg	esac
4273c27c18e8Smrg      done
4274c43cc173Smrg      ;;
4275c43cc173Smrg    esac
4276c43cc173Smrg
4277c27c18e8Smrg    # This variable tells wrapper scripts just to set variables rather
4278c27c18e8Smrg    # than running their programs.
427948e5ce07Smrg    libtool_install_magic=$magic
4280c43cc173Smrg
4281c27c18e8Smrg    staticlibs=
4282c27c18e8Smrg    future_libdirs=
4283c27c18e8Smrg    current_libdirs=
4284c27c18e8Smrg    for file in $files; do
4285c43cc173Smrg
4286c27c18e8Smrg      # Do each installation.
4287c27c18e8Smrg      case $file in
4288c27c18e8Smrg      *.$libext)
4289c27c18e8Smrg	# Do the static libraries later.
4290b789ec8aSmrg	func_append staticlibs " $file"
4291c27c18e8Smrg	;;
4292c27c18e8Smrg
4293c27c18e8Smrg      *.la)
4294b789ec8aSmrg	func_resolve_sysroot "$file"
4295b789ec8aSmrg	file=$func_resolve_sysroot_result
4296b789ec8aSmrg
4297c27c18e8Smrg	# Check to see that this really is a libtool archive.
4298c27c18e8Smrg	func_lalib_unsafe_p "$file" \
429948e5ce07Smrg	  || func_fatal_help "'$file' is not a valid libtool archive"
4300c27c18e8Smrg
4301c27c18e8Smrg	library_names=
4302c27c18e8Smrg	old_library=
4303c27c18e8Smrg	relink_command=
4304c27c18e8Smrg	func_source "$file"
4305c27c18e8Smrg
4306c27c18e8Smrg	# Add the libdir to current_libdirs if it is the destination.
4307c27c18e8Smrg	if test "X$destdir" = "X$libdir"; then
4308c27c18e8Smrg	  case "$current_libdirs " in
4309c27c18e8Smrg	  *" $libdir "*) ;;
4310b789ec8aSmrg	  *) func_append current_libdirs " $libdir" ;;
4311c43cc173Smrg	  esac
4312c27c18e8Smrg	else
4313c27c18e8Smrg	  # Note the libdir as a future libdir.
4314c27c18e8Smrg	  case "$future_libdirs " in
4315c27c18e8Smrg	  *" $libdir "*) ;;
4316b789ec8aSmrg	  *) func_append future_libdirs " $libdir" ;;
4317c27c18e8Smrg	  esac
4318c27c18e8Smrg	fi
4319c43cc173Smrg
4320c27c18e8Smrg	func_dirname "$file" "/" ""
432148e5ce07Smrg	dir=$func_dirname_result
4322b789ec8aSmrg	func_append dir "$objdir"
4323c27c18e8Smrg
4324c27c18e8Smrg	if test -n "$relink_command"; then
4325c27c18e8Smrg	  # Determine the prefix the user has applied to our future dir.
432637eb1ca1Smrg	  inst_prefix_dir=`$ECHO "$destdir" | $SED -e "s%$libdir\$%%"`
4327c27c18e8Smrg
4328c27c18e8Smrg	  # Don't allow the user to place us outside of our expected
4329c27c18e8Smrg	  # location b/c this prevents finding dependent libraries that
4330c27c18e8Smrg	  # are installed to the same prefix.
4331c27c18e8Smrg	  # At present, this check doesn't affect windows .dll's that
4332c27c18e8Smrg	  # are installed into $libdir/../bin (currently, that works fine)
4333c27c18e8Smrg	  # but it's something to keep an eye on.
4334c27c18e8Smrg	  test "$inst_prefix_dir" = "$destdir" && \
433548e5ce07Smrg	    func_fatal_error "error: cannot install '$file' to a directory not ending in $libdir"
4336c27c18e8Smrg
4337c27c18e8Smrg	  if test -n "$inst_prefix_dir"; then
4338c27c18e8Smrg	    # Stick the inst_prefix_dir data into the link command.
433937eb1ca1Smrg	    relink_command=`$ECHO "$relink_command" | $SED "s%@inst_prefix_dir@%-inst-prefix-dir $inst_prefix_dir%"`
4340c27c18e8Smrg	  else
434137eb1ca1Smrg	    relink_command=`$ECHO "$relink_command" | $SED "s%@inst_prefix_dir@%%"`
4342c27c18e8Smrg	  fi
4343c27c18e8Smrg
434448e5ce07Smrg	  func_warning "relinking '$file'"
4345c27c18e8Smrg	  func_show_eval "$relink_command" \
434648e5ce07Smrg	    'func_fatal_error "error: relink '\''$file'\'' with the above command before installing it"'
4347c27c18e8Smrg	fi
4348c27c18e8Smrg
4349c27c18e8Smrg	# See the names of the shared library.
4350c27c18e8Smrg	set dummy $library_names; shift
4351c27c18e8Smrg	if test -n "$1"; then
435248e5ce07Smrg	  realname=$1
4353c27c18e8Smrg	  shift
4354c27c18e8Smrg
435548e5ce07Smrg	  srcname=$realname
435648e5ce07Smrg	  test -n "$relink_command" && srcname=${realname}T
4357c27c18e8Smrg
4358c27c18e8Smrg	  # Install the shared library and build the symlinks.
435937eb1ca1Smrg	  func_show_eval "$install_shared_prog $dir/$srcname $destdir/$realname" \
4360c27c18e8Smrg	      'exit $?'
436148e5ce07Smrg	  tstripme=$stripme
4362c27c18e8Smrg	  case $host_os in
4363c27c18e8Smrg	  cygwin* | mingw* | pw32* | cegcc*)
4364c27c18e8Smrg	    case $realname in
4365c27c18e8Smrg	    *.dll.a)
436648e5ce07Smrg	      tstripme=
436748e5ce07Smrg	      ;;
436848e5ce07Smrg	    esac
436948e5ce07Smrg	    ;;
437048e5ce07Smrg	  os2*)
437148e5ce07Smrg	    case $realname in
437248e5ce07Smrg	    *_dll.a)
437348e5ce07Smrg	      tstripme=
4374c27c18e8Smrg	      ;;
4375c27c18e8Smrg	    esac
4376c43cc173Smrg	    ;;
4377c43cc173Smrg	  esac
4378c27c18e8Smrg	  if test -n "$tstripme" && test -n "$striplib"; then
4379c27c18e8Smrg	    func_show_eval "$striplib $destdir/$realname" 'exit $?'
4380c43cc173Smrg	  fi
4381c27c18e8Smrg
4382c27c18e8Smrg	  if test "$#" -gt 0; then
4383c27c18e8Smrg	    # Delete the old symlinks, and create new ones.
438448e5ce07Smrg	    # Try 'ln -sf' first, because the 'ln' binary might depend on
4385c27c18e8Smrg	    # the symlink we replace!  Solaris /bin/ln does not understand -f,
4386c27c18e8Smrg	    # so we also need to try rm && ln -s.
4387c27c18e8Smrg	    for linkname
4388c27c18e8Smrg	    do
4389c27c18e8Smrg	      test "$linkname" != "$realname" \
4390c27c18e8Smrg		&& func_show_eval "(cd $destdir && { $LN_S -f $realname $linkname || { $RM $linkname && $LN_S $realname $linkname; }; })"
4391c43cc173Smrg	    done
4392c43cc173Smrg	  fi
4393c43cc173Smrg
4394c27c18e8Smrg	  # Do each command in the postinstall commands.
439548e5ce07Smrg	  lib=$destdir/$realname
4396c27c18e8Smrg	  func_execute_cmds "$postinstall_cmds" 'exit $?'
4397c43cc173Smrg	fi
4398c43cc173Smrg
4399c27c18e8Smrg	# Install the pseudo-library for information purposes.
4400c27c18e8Smrg	func_basename "$file"
440148e5ce07Smrg	name=$func_basename_result
440248e5ce07Smrg	instname=$dir/${name}i
4403c27c18e8Smrg	func_show_eval "$install_prog $instname $destdir/$name" 'exit $?'
4404c43cc173Smrg
4405c27c18e8Smrg	# Maybe install the static library, too.
4406b789ec8aSmrg	test -n "$old_library" && func_append staticlibs " $dir/$old_library"
4407c27c18e8Smrg	;;
4408c43cc173Smrg
4409c27c18e8Smrg      *.lo)
4410c27c18e8Smrg	# Install (i.e. copy) a libtool object.
4411c43cc173Smrg
4412c27c18e8Smrg	# Figure out destination file name, if it wasn't already specified.
4413c27c18e8Smrg	if test -n "$destname"; then
441448e5ce07Smrg	  destfile=$destdir/$destname
4415c27c18e8Smrg	else
4416c27c18e8Smrg	  func_basename "$file"
441748e5ce07Smrg	  destfile=$func_basename_result
441848e5ce07Smrg	  destfile=$destdir/$destfile
4419c43cc173Smrg	fi
4420c43cc173Smrg
4421c27c18e8Smrg	# Deduce the name of the destination old-style object file.
4422c27c18e8Smrg	case $destfile in
4423c27c18e8Smrg	*.lo)
4424c27c18e8Smrg	  func_lo2o "$destfile"
4425c27c18e8Smrg	  staticdest=$func_lo2o_result
4426c27c18e8Smrg	  ;;
4427c27c18e8Smrg	*.$objext)
442848e5ce07Smrg	  staticdest=$destfile
4429c27c18e8Smrg	  destfile=
4430c27c18e8Smrg	  ;;
4431c27c18e8Smrg	*)
443248e5ce07Smrg	  func_fatal_help "cannot copy a libtool object to '$destfile'"
4433c27c18e8Smrg	  ;;
4434c27c18e8Smrg	esac
4435c43cc173Smrg
4436c27c18e8Smrg	# Install the libtool object if requested.
4437c27c18e8Smrg	test -n "$destfile" && \
4438c27c18e8Smrg	  func_show_eval "$install_prog $file $destfile" 'exit $?'
4439c43cc173Smrg
4440c27c18e8Smrg	# Install the old object if enabled.
444148e5ce07Smrg	if test yes = "$build_old_libs"; then
4442c27c18e8Smrg	  # Deduce the name of the old-style object file.
4443c27c18e8Smrg	  func_lo2o "$file"
4444c27c18e8Smrg	  staticobj=$func_lo2o_result
4445c27c18e8Smrg	  func_show_eval "$install_prog \$staticobj \$staticdest" 'exit $?'
4446c43cc173Smrg	fi
4447c27c18e8Smrg	exit $EXIT_SUCCESS
4448c27c18e8Smrg	;;
4449c43cc173Smrg
4450c27c18e8Smrg      *)
4451c27c18e8Smrg	# Figure out destination file name, if it wasn't already specified.
4452c27c18e8Smrg	if test -n "$destname"; then
445348e5ce07Smrg	  destfile=$destdir/$destname
4454c27c18e8Smrg	else
4455c27c18e8Smrg	  func_basename "$file"
445648e5ce07Smrg	  destfile=$func_basename_result
445748e5ce07Smrg	  destfile=$destdir/$destfile
4458c27c18e8Smrg	fi
4459c43cc173Smrg
4460c27c18e8Smrg	# If the file is missing, and there is a .exe on the end, strip it
4461c27c18e8Smrg	# because it is most likely a libtool script we actually want to
4462c27c18e8Smrg	# install
446348e5ce07Smrg	stripped_ext=
4464c27c18e8Smrg	case $file in
4465c27c18e8Smrg	  *.exe)
4466c27c18e8Smrg	    if test ! -f "$file"; then
4467c27c18e8Smrg	      func_stripname '' '.exe' "$file"
4468c27c18e8Smrg	      file=$func_stripname_result
446948e5ce07Smrg	      stripped_ext=.exe
4470c27c18e8Smrg	    fi
4471c27c18e8Smrg	    ;;
4472c27c18e8Smrg	esac
4473c27c18e8Smrg
4474c27c18e8Smrg	# Do a test to see if this is really a libtool program.
4475c27c18e8Smrg	case $host in
4476c27c18e8Smrg	*cygwin* | *mingw*)
4477c27c18e8Smrg	    if func_ltwrapper_executable_p "$file"; then
4478c27c18e8Smrg	      func_ltwrapper_scriptname "$file"
4479c27c18e8Smrg	      wrapper=$func_ltwrapper_scriptname_result
4480c27c18e8Smrg	    else
4481c27c18e8Smrg	      func_stripname '' '.exe' "$file"
4482c27c18e8Smrg	      wrapper=$func_stripname_result
4483c27c18e8Smrg	    fi
4484c27c18e8Smrg	    ;;
4485c43cc173Smrg	*)
4486c27c18e8Smrg	    wrapper=$file
4487c27c18e8Smrg	    ;;
4488c27c18e8Smrg	esac
4489c27c18e8Smrg	if func_ltwrapper_script_p "$wrapper"; then
4490c27c18e8Smrg	  notinst_deplibs=
4491c27c18e8Smrg	  relink_command=
4492c27c18e8Smrg
4493c27c18e8Smrg	  func_source "$wrapper"
4494c27c18e8Smrg
4495c27c18e8Smrg	  # Check the variables that should have been set.
4496c27c18e8Smrg	  test -z "$generated_by_libtool_version" && \
449748e5ce07Smrg	    func_fatal_error "invalid libtool wrapper script '$wrapper'"
4498c27c18e8Smrg
449948e5ce07Smrg	  finalize=:
4500c27c18e8Smrg	  for lib in $notinst_deplibs; do
4501c27c18e8Smrg	    # Check to see that each library is installed.
4502c27c18e8Smrg	    libdir=
4503c27c18e8Smrg	    if test -f "$lib"; then
4504c27c18e8Smrg	      func_source "$lib"
4505c27c18e8Smrg	    fi
450648e5ce07Smrg	    libfile=$libdir/`$ECHO "$lib" | $SED 's%^.*/%%g'`
4507c27c18e8Smrg	    if test -n "$libdir" && test ! -f "$libfile"; then
450848e5ce07Smrg	      func_warning "'$lib' has not been installed in '$libdir'"
450948e5ce07Smrg	      finalize=false
4510c27c18e8Smrg	    fi
4511c27c18e8Smrg	  done
4512c27c18e8Smrg
4513c27c18e8Smrg	  relink_command=
4514c27c18e8Smrg	  func_source "$wrapper"
4515c27c18e8Smrg
4516c27c18e8Smrg	  outputname=
451748e5ce07Smrg	  if test no = "$fast_install" && test -n "$relink_command"; then
4518c27c18e8Smrg	    $opt_dry_run || {
451948e5ce07Smrg	      if $finalize; then
4520c27c18e8Smrg	        tmpdir=`func_mktempdir`
4521c27c18e8Smrg		func_basename "$file$stripped_ext"
452248e5ce07Smrg		file=$func_basename_result
452348e5ce07Smrg	        outputname=$tmpdir/$file
4524c27c18e8Smrg	        # Replace the output file specification.
452537eb1ca1Smrg	        relink_command=`$ECHO "$relink_command" | $SED 's%@OUTPUT@%'"$outputname"'%g'`
4526c27c18e8Smrg
452748e5ce07Smrg	        $opt_quiet || {
4528c27c18e8Smrg	          func_quote_for_expand "$relink_command"
4529c27c18e8Smrg		  eval "func_echo $func_quote_for_expand_result"
4530c27c18e8Smrg	        }
4531c27c18e8Smrg	        if eval "$relink_command"; then :
4532c27c18e8Smrg	          else
453348e5ce07Smrg		  func_error "error: relink '$file' with the above command before installing it"
4534c27c18e8Smrg		  $opt_dry_run || ${RM}r "$tmpdir"
4535c27c18e8Smrg		  continue
4536c27c18e8Smrg	        fi
453748e5ce07Smrg	        file=$outputname
4538c27c18e8Smrg	      else
453948e5ce07Smrg	        func_warning "cannot relink '$file'"
4540c27c18e8Smrg	      fi
4541c27c18e8Smrg	    }
4542c27c18e8Smrg	  else
4543c27c18e8Smrg	    # Install the binary that we compiled earlier.
454437eb1ca1Smrg	    file=`$ECHO "$file$stripped_ext" | $SED "s%\([^/]*\)$%$objdir/\1%"`
4545c43cc173Smrg	  fi
4546c27c18e8Smrg	fi
4547c27c18e8Smrg
4548c27c18e8Smrg	# remove .exe since cygwin /usr/bin/install will append another
4549c27c18e8Smrg	# one anyway
4550c27c18e8Smrg	case $install_prog,$host in
4551c27c18e8Smrg	*/usr/bin/install*,*cygwin*)
4552c27c18e8Smrg	  case $file:$destfile in
4553c27c18e8Smrg	  *.exe:*.exe)
4554c27c18e8Smrg	    # this is ok
4555c27c18e8Smrg	    ;;
4556c27c18e8Smrg	  *.exe:*)
4557c27c18e8Smrg	    destfile=$destfile.exe
4558c27c18e8Smrg	    ;;
4559c27c18e8Smrg	  *:*.exe)
4560c27c18e8Smrg	    func_stripname '' '.exe' "$destfile"
4561c27c18e8Smrg	    destfile=$func_stripname_result
4562c27c18e8Smrg	    ;;
4563c27c18e8Smrg	  esac
4564c43cc173Smrg	  ;;
4565c43cc173Smrg	esac
4566c27c18e8Smrg	func_show_eval "$install_prog\$stripme \$file \$destfile" 'exit $?'
4567c27c18e8Smrg	$opt_dry_run || if test -n "$outputname"; then
4568c27c18e8Smrg	  ${RM}r "$tmpdir"
4569c27c18e8Smrg	fi
4570c27c18e8Smrg	;;
4571c27c18e8Smrg      esac
4572c27c18e8Smrg    done
4573c43cc173Smrg
4574c27c18e8Smrg    for file in $staticlibs; do
4575c27c18e8Smrg      func_basename "$file"
457648e5ce07Smrg      name=$func_basename_result
4577c27c18e8Smrg
4578c27c18e8Smrg      # Set up the ranlib parameters.
457948e5ce07Smrg      oldlib=$destdir/$name
4580f1ee322dSmrg      func_to_tool_file "$oldlib" func_convert_file_msys_to_w32
4581f1ee322dSmrg      tool_oldlib=$func_to_tool_file_result
4582c27c18e8Smrg
4583c27c18e8Smrg      func_show_eval "$install_prog \$file \$oldlib" 'exit $?'
4584c27c18e8Smrg
4585c27c18e8Smrg      if test -n "$stripme" && test -n "$old_striplib"; then
4586f1ee322dSmrg	func_show_eval "$old_striplib $tool_oldlib" 'exit $?'
4587c27c18e8Smrg      fi
4588c27c18e8Smrg
4589c27c18e8Smrg      # Do each command in the postinstall commands.
4590c27c18e8Smrg      func_execute_cmds "$old_postinstall_cmds" 'exit $?'
4591c27c18e8Smrg    done
4592c27c18e8Smrg
4593c27c18e8Smrg    test -n "$future_libdirs" && \
459448e5ce07Smrg      func_warning "remember to run '$progname --finish$future_libdirs'"
4595c27c18e8Smrg
4596c27c18e8Smrg    if test -n "$current_libdirs"; then
4597c27c18e8Smrg      # Maybe just do a dry run.
4598c27c18e8Smrg      $opt_dry_run && current_libdirs=" -n$current_libdirs"
459948e5ce07Smrg      exec_cmd='$SHELL "$progpath" $preserve_args --finish$current_libdirs'
4600c27c18e8Smrg    else
4601c27c18e8Smrg      exit $EXIT_SUCCESS
4602c27c18e8Smrg    fi
4603c27c18e8Smrg}
4604c27c18e8Smrg
460548e5ce07Smrgtest install = "$opt_mode" && func_mode_install ${1+"$@"}
4606c27c18e8Smrg
4607c27c18e8Smrg
4608c27c18e8Smrg# func_generate_dlsyms outputname originator pic_p
4609c27c18e8Smrg# Extract symbols from dlprefiles and create ${outputname}S.o with
4610c27c18e8Smrg# a dlpreopen symbol table.
4611c27c18e8Smrgfunc_generate_dlsyms ()
4612c27c18e8Smrg{
461348e5ce07Smrg    $debug_cmd
461448e5ce07Smrg
461548e5ce07Smrg    my_outputname=$1
461648e5ce07Smrg    my_originator=$2
461748e5ce07Smrg    my_pic_p=${3-false}
461848e5ce07Smrg    my_prefix=`$ECHO "$my_originator" | $SED 's%[^a-zA-Z0-9]%_%g'`
4619c27c18e8Smrg    my_dlsyms=
4620c27c18e8Smrg
462148e5ce07Smrg    if test -n "$dlfiles$dlprefiles" || test no != "$dlself"; then
4622c27c18e8Smrg      if test -n "$NM" && test -n "$global_symbol_pipe"; then
462348e5ce07Smrg	my_dlsyms=${my_outputname}S.c
4624c27c18e8Smrg      else
4625c27c18e8Smrg	func_error "not configured to extract global symbols from dlpreopened files"
4626c27c18e8Smrg      fi
4627c27c18e8Smrg    fi
4628c27c18e8Smrg
4629c27c18e8Smrg    if test -n "$my_dlsyms"; then
4630c27c18e8Smrg      case $my_dlsyms in
4631c27c18e8Smrg      "") ;;
4632c27c18e8Smrg      *.c)
4633c27c18e8Smrg	# Discover the nlist of each of the dlfiles.
463448e5ce07Smrg	nlist=$output_objdir/$my_outputname.nm
4635c27c18e8Smrg
4636c27c18e8Smrg	func_show_eval "$RM $nlist ${nlist}S ${nlist}T"
4637c27c18e8Smrg
4638c27c18e8Smrg	# Parse the name list into a source file.
4639c27c18e8Smrg	func_verbose "creating $output_objdir/$my_dlsyms"
4640c27c18e8Smrg
4641c27c18e8Smrg	$opt_dry_run || $ECHO > "$output_objdir/$my_dlsyms" "\
464248e5ce07Smrg/* $my_dlsyms - symbol resolution table for '$my_outputname' dlsym emulation. */
464348e5ce07Smrg/* Generated by $PROGRAM (GNU $PACKAGE) $VERSION */
4644c27c18e8Smrg
4645c27c18e8Smrg#ifdef __cplusplus
4646c27c18e8Smrgextern \"C\" {
4647c27c18e8Smrg#endif
4648c27c18e8Smrg
464948e5ce07Smrg#if defined __GNUC__ && (((__GNUC__ == 4) && (__GNUC_MINOR__ >= 4)) || (__GNUC__ > 4))
465037eb1ca1Smrg#pragma GCC diagnostic ignored \"-Wstrict-prototypes\"
465137eb1ca1Smrg#endif
465237eb1ca1Smrg
4653b789ec8aSmrg/* Keep this code in sync between libtool.m4, ltmain, lt_system.h, and tests.  */
465448e5ce07Smrg#if defined _WIN32 || defined __CYGWIN__ || defined _WIN32_WCE
465548e5ce07Smrg/* DATA imports from DLLs on WIN32 can't be const, because runtime
4656b789ec8aSmrg   relocations are performed -- see ld's documentation on pseudo-relocs.  */
4657b789ec8aSmrg# define LT_DLSYM_CONST
465848e5ce07Smrg#elif defined __osf__
4659b789ec8aSmrg/* This system does not cope well with relocations in const data.  */
4660b789ec8aSmrg# define LT_DLSYM_CONST
4661b789ec8aSmrg#else
4662b789ec8aSmrg# define LT_DLSYM_CONST const
4663b789ec8aSmrg#endif
4664b789ec8aSmrg
466548e5ce07Smrg#define STREQ(s1, s2) (strcmp ((s1), (s2)) == 0)
466648e5ce07Smrg
4667c27c18e8Smrg/* External symbol declarations for the compiler. */\
4668c27c18e8Smrg"
4669c27c18e8Smrg
467048e5ce07Smrg	if test yes = "$dlself"; then
467148e5ce07Smrg	  func_verbose "generating symbol list for '$output'"
4672c27c18e8Smrg
4673c27c18e8Smrg	  $opt_dry_run || echo ': @PROGRAM@ ' > "$nlist"
4674c27c18e8Smrg
4675c27c18e8Smrg	  # Add our own program objects to the symbol list.
467637eb1ca1Smrg	  progfiles=`$ECHO "$objs$old_deplibs" | $SP2NL | $SED "$lo2o" | $NL2SP`
4677c27c18e8Smrg	  for progfile in $progfiles; do
4678b789ec8aSmrg	    func_to_tool_file "$progfile" func_convert_file_msys_to_w32
467948e5ce07Smrg	    func_verbose "extracting global C symbols from '$func_to_tool_file_result'"
4680b789ec8aSmrg	    $opt_dry_run || eval "$NM $func_to_tool_file_result | $global_symbol_pipe >> '$nlist'"
4681c27c18e8Smrg	  done
4682c27c18e8Smrg
4683c27c18e8Smrg	  if test -n "$exclude_expsyms"; then
4684c27c18e8Smrg	    $opt_dry_run || {
4685c27c18e8Smrg	      eval '$EGREP -v " ($exclude_expsyms)$" "$nlist" > "$nlist"T'
4686c27c18e8Smrg	      eval '$MV "$nlist"T "$nlist"'
4687c27c18e8Smrg	    }
4688c43cc173Smrg	  fi
4689c27c18e8Smrg
4690c27c18e8Smrg	  if test -n "$export_symbols_regex"; then
4691c27c18e8Smrg	    $opt_dry_run || {
4692c27c18e8Smrg	      eval '$EGREP -e "$export_symbols_regex" "$nlist" > "$nlist"T'
4693c27c18e8Smrg	      eval '$MV "$nlist"T "$nlist"'
4694c27c18e8Smrg	    }
4695c27c18e8Smrg	  fi
4696c27c18e8Smrg
4697c27c18e8Smrg	  # Prepare the list of exported symbols
4698c27c18e8Smrg	  if test -z "$export_symbols"; then
469948e5ce07Smrg	    export_symbols=$output_objdir/$outputname.exp
4700c27c18e8Smrg	    $opt_dry_run || {
4701c27c18e8Smrg	      $RM $export_symbols
470248e5ce07Smrg	      eval "$SED -n -e '/^: @PROGRAM@ $/d' -e 's/^.* \(.*\)$/\1/p' "'< "$nlist" > "$export_symbols"'
4703c27c18e8Smrg	      case $host in
4704c27c18e8Smrg	      *cygwin* | *mingw* | *cegcc* )
4705c27c18e8Smrg                eval "echo EXPORTS "'> "$output_objdir/$outputname.def"'
4706c27c18e8Smrg                eval 'cat "$export_symbols" >> "$output_objdir/$outputname.def"'
4707c27c18e8Smrg	        ;;
4708c27c18e8Smrg	      esac
4709c27c18e8Smrg	    }
4710c43cc173Smrg	  else
4711c27c18e8Smrg	    $opt_dry_run || {
471248e5ce07Smrg	      eval "$SED -e 's/\([].[*^$]\)/\\\\\1/g' -e 's/^/ /' -e 's/$/$/'"' < "$export_symbols" > "$output_objdir/$outputname.exp"'
4713c27c18e8Smrg	      eval '$GREP -f "$output_objdir/$outputname.exp" < "$nlist" > "$nlist"T'
4714c27c18e8Smrg	      eval '$MV "$nlist"T "$nlist"'
4715c27c18e8Smrg	      case $host in
471637eb1ca1Smrg	        *cygwin* | *mingw* | *cegcc* )
4717c27c18e8Smrg	          eval "echo EXPORTS "'> "$output_objdir/$outputname.def"'
4718c27c18e8Smrg	          eval 'cat "$nlist" >> "$output_objdir/$outputname.def"'
4719c27c18e8Smrg	          ;;
4720c27c18e8Smrg	      esac
4721c27c18e8Smrg	    }
4722c43cc173Smrg	  fi
4723c27c18e8Smrg	fi
4724c43cc173Smrg
4725c27c18e8Smrg	for dlprefile in $dlprefiles; do
472648e5ce07Smrg	  func_verbose "extracting global C symbols from '$dlprefile'"
4727c27c18e8Smrg	  func_basename "$dlprefile"
472848e5ce07Smrg	  name=$func_basename_result
4729b789ec8aSmrg          case $host in
4730b789ec8aSmrg	    *cygwin* | *mingw* | *cegcc* )
4731b789ec8aSmrg	      # if an import library, we need to obtain dlname
4732b789ec8aSmrg	      if func_win32_import_lib_p "$dlprefile"; then
4733b789ec8aSmrg	        func_tr_sh "$dlprefile"
4734b789ec8aSmrg	        eval "curr_lafile=\$libfile_$func_tr_sh_result"
473548e5ce07Smrg	        dlprefile_dlbasename=
4736b789ec8aSmrg	        if test -n "$curr_lafile" && func_lalib_p "$curr_lafile"; then
4737b789ec8aSmrg	          # Use subshell, to avoid clobbering current variable values
4738b789ec8aSmrg	          dlprefile_dlname=`source "$curr_lafile" && echo "$dlname"`
473948e5ce07Smrg	          if test -n "$dlprefile_dlname"; then
4740b789ec8aSmrg	            func_basename "$dlprefile_dlname"
474148e5ce07Smrg	            dlprefile_dlbasename=$func_basename_result
4742b789ec8aSmrg	          else
4743b789ec8aSmrg	            # no lafile. user explicitly requested -dlpreopen <import library>.
4744b789ec8aSmrg	            $sharedlib_from_linklib_cmd "$dlprefile"
4745b789ec8aSmrg	            dlprefile_dlbasename=$sharedlib_from_linklib_result
4746b789ec8aSmrg	          fi
4747b789ec8aSmrg	        fi
4748b789ec8aSmrg	        $opt_dry_run || {
474948e5ce07Smrg	          if test -n "$dlprefile_dlbasename"; then
4750b789ec8aSmrg	            eval '$ECHO ": $dlprefile_dlbasename" >> "$nlist"'
4751b789ec8aSmrg	          else
4752b789ec8aSmrg	            func_warning "Could not compute DLL name from $name"
4753b789ec8aSmrg	            eval '$ECHO ": $name " >> "$nlist"'
4754b789ec8aSmrg	          fi
4755b789ec8aSmrg	          func_to_tool_file "$dlprefile" func_convert_file_msys_to_w32
4756b789ec8aSmrg	          eval "$NM \"$func_to_tool_file_result\" 2>/dev/null | $global_symbol_pipe |
4757b789ec8aSmrg	            $SED -e '/I __imp/d' -e 's/I __nm_/D /;s/_nm__//' >> '$nlist'"
4758b789ec8aSmrg	        }
4759b789ec8aSmrg	      else # not an import lib
4760b789ec8aSmrg	        $opt_dry_run || {
4761b789ec8aSmrg	          eval '$ECHO ": $name " >> "$nlist"'
4762b789ec8aSmrg	          func_to_tool_file "$dlprefile" func_convert_file_msys_to_w32
4763b789ec8aSmrg	          eval "$NM \"$func_to_tool_file_result\" 2>/dev/null | $global_symbol_pipe >> '$nlist'"
4764b789ec8aSmrg	        }
4765b789ec8aSmrg	      fi
4766b789ec8aSmrg	    ;;
4767b789ec8aSmrg	    *)
4768b789ec8aSmrg	      $opt_dry_run || {
4769b789ec8aSmrg	        eval '$ECHO ": $name " >> "$nlist"'
4770b789ec8aSmrg	        func_to_tool_file "$dlprefile" func_convert_file_msys_to_w32
4771b789ec8aSmrg	        eval "$NM \"$func_to_tool_file_result\" 2>/dev/null | $global_symbol_pipe >> '$nlist'"
4772b789ec8aSmrg	      }
4773b789ec8aSmrg	    ;;
4774b789ec8aSmrg          esac
4775c27c18e8Smrg	done
4776c27c18e8Smrg
4777c27c18e8Smrg	$opt_dry_run || {
4778c27c18e8Smrg	  # Make sure we have at least an empty file.
4779c27c18e8Smrg	  test -f "$nlist" || : > "$nlist"
4780c27c18e8Smrg
4781c27c18e8Smrg	  if test -n "$exclude_expsyms"; then
4782c27c18e8Smrg	    $EGREP -v " ($exclude_expsyms)$" "$nlist" > "$nlist"T
4783c27c18e8Smrg	    $MV "$nlist"T "$nlist"
4784c43cc173Smrg	  fi
4785c27c18e8Smrg
4786c27c18e8Smrg	  # Try sorting and uniquifying the output.
4787c27c18e8Smrg	  if $GREP -v "^: " < "$nlist" |
4788c27c18e8Smrg	      if sort -k 3 </dev/null >/dev/null 2>&1; then
4789c27c18e8Smrg		sort -k 3
4790c27c18e8Smrg	      else
4791c27c18e8Smrg		sort +2
4792c27c18e8Smrg	      fi |
4793c27c18e8Smrg	      uniq > "$nlist"S; then
4794c27c18e8Smrg	    :
4795c43cc173Smrg	  else
4796c27c18e8Smrg	    $GREP -v "^: " < "$nlist" > "$nlist"S
4797c43cc173Smrg	  fi
4798c43cc173Smrg
4799c27c18e8Smrg	  if test -f "$nlist"S; then
4800c27c18e8Smrg	    eval "$global_symbol_to_cdecl"' < "$nlist"S >> "$output_objdir/$my_dlsyms"'
4801c43cc173Smrg	  else
480237eb1ca1Smrg	    echo '/* NONE */' >> "$output_objdir/$my_dlsyms"
4803c43cc173Smrg	  fi
4804c43cc173Smrg
480548e5ce07Smrg	  func_show_eval '$RM "${nlist}I"'
480648e5ce07Smrg	  if test -n "$global_symbol_to_import"; then
480748e5ce07Smrg	    eval "$global_symbol_to_import"' < "$nlist"S > "$nlist"I'
480848e5ce07Smrg	  fi
480948e5ce07Smrg
481037eb1ca1Smrg	  echo >> "$output_objdir/$my_dlsyms" "\
4811c43cc173Smrg
4812c27c18e8Smrg/* The mapping between symbol names and symbols.  */
4813c27c18e8Smrgtypedef struct {
4814c27c18e8Smrg  const char *name;
4815c27c18e8Smrg  void *address;
4816c27c18e8Smrg} lt_dlsymlist;
4817b789ec8aSmrgextern LT_DLSYM_CONST lt_dlsymlist
481848e5ce07Smrglt_${my_prefix}_LTX_preloaded_symbols[];\
481948e5ce07Smrg"
482048e5ce07Smrg
482148e5ce07Smrg	  if test -s "$nlist"I; then
482248e5ce07Smrg	    echo >> "$output_objdir/$my_dlsyms" "\
482348e5ce07Smrgstatic void lt_syminit(void)
482448e5ce07Smrg{
482548e5ce07Smrg  LT_DLSYM_CONST lt_dlsymlist *symbol = lt_${my_prefix}_LTX_preloaded_symbols;
482648e5ce07Smrg  for (; symbol->name; ++symbol)
482748e5ce07Smrg    {"
482848e5ce07Smrg	    $SED 's/.*/      if (STREQ (symbol->name, \"&\")) symbol->address = (void *) \&&;/' < "$nlist"I >> "$output_objdir/$my_dlsyms"
482948e5ce07Smrg	    echo >> "$output_objdir/$my_dlsyms" "\
483048e5ce07Smrg    }
483148e5ce07Smrg}"
483248e5ce07Smrg	  fi
483348e5ce07Smrg	  echo >> "$output_objdir/$my_dlsyms" "\
4834b789ec8aSmrgLT_DLSYM_CONST lt_dlsymlist
4835c27c18e8Smrglt_${my_prefix}_LTX_preloaded_symbols[] =
483648e5ce07Smrg{ {\"$my_originator\", (void *) 0},"
483748e5ce07Smrg
483848e5ce07Smrg	  if test -s "$nlist"I; then
483948e5ce07Smrg	    echo >> "$output_objdir/$my_dlsyms" "\
484048e5ce07Smrg  {\"@INIT@\", (void *) &lt_syminit},"
484148e5ce07Smrg	  fi
4842c43cc173Smrg
4843c27c18e8Smrg	  case $need_lib_prefix in
4844c27c18e8Smrg	  no)
4845c27c18e8Smrg	    eval "$global_symbol_to_c_name_address" < "$nlist" >> "$output_objdir/$my_dlsyms"
4846c27c18e8Smrg	    ;;
4847c27c18e8Smrg	  *)
4848c27c18e8Smrg	    eval "$global_symbol_to_c_name_address_lib_prefix" < "$nlist" >> "$output_objdir/$my_dlsyms"
4849c27c18e8Smrg	    ;;
4850c27c18e8Smrg	  esac
485137eb1ca1Smrg	  echo >> "$output_objdir/$my_dlsyms" "\
4852c27c18e8Smrg  {0, (void *) 0}
4853c27c18e8Smrg};
4854c43cc173Smrg
4855c27c18e8Smrg/* This works around a problem in FreeBSD linker */
4856c27c18e8Smrg#ifdef FREEBSD_WORKAROUND
4857c27c18e8Smrgstatic const void *lt_preloaded_setup() {
4858c27c18e8Smrg  return lt_${my_prefix}_LTX_preloaded_symbols;
4859c27c18e8Smrg}
4860c27c18e8Smrg#endif
4861c43cc173Smrg
4862c27c18e8Smrg#ifdef __cplusplus
4863c27c18e8Smrg}
4864c27c18e8Smrg#endif\
4865c27c18e8Smrg"
4866c27c18e8Smrg	} # !$opt_dry_run
4867c43cc173Smrg
4868c27c18e8Smrg	pic_flag_for_symtable=
4869c27c18e8Smrg	case "$compile_command " in
4870c27c18e8Smrg	*" -static "*) ;;
4871c27c18e8Smrg	*)
4872c27c18e8Smrg	  case $host in
4873c27c18e8Smrg	  # compiling the symbol table file with pic_flag works around
4874c27c18e8Smrg	  # a FreeBSD bug that causes programs to crash when -lm is
4875c27c18e8Smrg	  # linked before any other PIC object.  But we must not use
4876c27c18e8Smrg	  # pic_flag when linking with -static.  The problem exists in
4877c27c18e8Smrg	  # FreeBSD 2.2.6 and is fixed in FreeBSD 3.1.
4878f1ee322dSmrg	  *-*-freebsd2.*|*-*-freebsd3.0*|*-*-freebsdelf3.0*)
4879c27c18e8Smrg	    pic_flag_for_symtable=" $pic_flag -DFREEBSD_WORKAROUND" ;;
4880c27c18e8Smrg	  *-*-hpux*)
4881c27c18e8Smrg	    pic_flag_for_symtable=" $pic_flag"  ;;
4882c27c18e8Smrg	  *)
488348e5ce07Smrg	    $my_pic_p && pic_flag_for_symtable=" $pic_flag"
4884c27c18e8Smrg	    ;;
4885c27c18e8Smrg	  esac
4886c27c18e8Smrg	  ;;
4887c27c18e8Smrg	esac
4888c27c18e8Smrg	symtab_cflags=
4889c27c18e8Smrg	for arg in $LTCFLAGS; do
4890c27c18e8Smrg	  case $arg in
4891c27c18e8Smrg	  -pie | -fpie | -fPIE) ;;
4892b789ec8aSmrg	  *) func_append symtab_cflags " $arg" ;;
4893c27c18e8Smrg	  esac
4894c27c18e8Smrg	done
4895c43cc173Smrg
4896c27c18e8Smrg	# Now compile the dynamic symbol file.
4897c27c18e8Smrg	func_show_eval '(cd $output_objdir && $LTCC$symtab_cflags -c$no_builtin_flag$pic_flag_for_symtable "$my_dlsyms")' 'exit $?'
4898c43cc173Smrg
4899c27c18e8Smrg	# Clean up the generated files.
490048e5ce07Smrg	func_show_eval '$RM "$output_objdir/$my_dlsyms" "$nlist" "${nlist}S" "${nlist}T" "${nlist}I"'
4901c43cc173Smrg
4902c27c18e8Smrg	# Transform the symbol file into the correct name.
490348e5ce07Smrg	symfileobj=$output_objdir/${my_outputname}S.$objext
4904c27c18e8Smrg	case $host in
4905c27c18e8Smrg	*cygwin* | *mingw* | *cegcc* )
4906c27c18e8Smrg	  if test -f "$output_objdir/$my_outputname.def"; then
490737eb1ca1Smrg	    compile_command=`$ECHO "$compile_command" | $SED "s%@SYMFILE@%$output_objdir/$my_outputname.def $symfileobj%"`
490837eb1ca1Smrg	    finalize_command=`$ECHO "$finalize_command" | $SED "s%@SYMFILE@%$output_objdir/$my_outputname.def $symfileobj%"`
4909c27c18e8Smrg	  else
491037eb1ca1Smrg	    compile_command=`$ECHO "$compile_command" | $SED "s%@SYMFILE@%$symfileobj%"`
491137eb1ca1Smrg	    finalize_command=`$ECHO "$finalize_command" | $SED "s%@SYMFILE@%$symfileobj%"`
4912c27c18e8Smrg	  fi
4913c27c18e8Smrg	  ;;
4914c27c18e8Smrg	*)
491537eb1ca1Smrg	  compile_command=`$ECHO "$compile_command" | $SED "s%@SYMFILE@%$symfileobj%"`
491637eb1ca1Smrg	  finalize_command=`$ECHO "$finalize_command" | $SED "s%@SYMFILE@%$symfileobj%"`
4917c27c18e8Smrg	  ;;
4918c27c18e8Smrg	esac
4919c27c18e8Smrg	;;
4920c27c18e8Smrg      *)
492148e5ce07Smrg	func_fatal_error "unknown suffix for '$my_dlsyms'"
4922c27c18e8Smrg	;;
4923c27c18e8Smrg      esac
4924c27c18e8Smrg    else
4925c27c18e8Smrg      # We keep going just in case the user didn't refer to
4926c27c18e8Smrg      # lt_preloaded_symbols.  The linker will fail if global_symbol_pipe
4927c27c18e8Smrg      # really was required.
4928c43cc173Smrg
4929c27c18e8Smrg      # Nullify the symbol file.
493037eb1ca1Smrg      compile_command=`$ECHO "$compile_command" | $SED "s% @SYMFILE@%%"`
493137eb1ca1Smrg      finalize_command=`$ECHO "$finalize_command" | $SED "s% @SYMFILE@%%"`
4932c27c18e8Smrg    fi
4933c27c18e8Smrg}
4934c43cc173Smrg
493548e5ce07Smrg# func_cygming_gnu_implib_p ARG
493648e5ce07Smrg# This predicate returns with zero status (TRUE) if
493748e5ce07Smrg# ARG is a GNU/binutils-style import library. Returns
493848e5ce07Smrg# with nonzero status (FALSE) otherwise.
493948e5ce07Smrgfunc_cygming_gnu_implib_p ()
494048e5ce07Smrg{
494148e5ce07Smrg  $debug_cmd
494248e5ce07Smrg
494348e5ce07Smrg  func_to_tool_file "$1" func_convert_file_msys_to_w32
494448e5ce07Smrg  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)$'`
494548e5ce07Smrg  test -n "$func_cygming_gnu_implib_tmp"
494648e5ce07Smrg}
494748e5ce07Smrg
494848e5ce07Smrg# func_cygming_ms_implib_p ARG
494948e5ce07Smrg# This predicate returns with zero status (TRUE) if
495048e5ce07Smrg# ARG is an MS-style import library. Returns
495148e5ce07Smrg# with nonzero status (FALSE) otherwise.
495248e5ce07Smrgfunc_cygming_ms_implib_p ()
495348e5ce07Smrg{
495448e5ce07Smrg  $debug_cmd
495548e5ce07Smrg
495648e5ce07Smrg  func_to_tool_file "$1" func_convert_file_msys_to_w32
495748e5ce07Smrg  func_cygming_ms_implib_tmp=`$NM "$func_to_tool_file_result" | eval "$global_symbol_pipe" | $GREP '_NULL_IMPORT_DESCRIPTOR'`
495848e5ce07Smrg  test -n "$func_cygming_ms_implib_tmp"
495948e5ce07Smrg}
496048e5ce07Smrg
4961c27c18e8Smrg# func_win32_libid arg
4962c27c18e8Smrg# return the library type of file 'arg'
4963c27c18e8Smrg#
4964c27c18e8Smrg# Need a lot of goo to handle *both* DLLs and import libs
4965c27c18e8Smrg# Has to be a shell function in order to 'eat' the argument
4966c27c18e8Smrg# that is supplied when $file_magic_command is called.
496737eb1ca1Smrg# Despite the name, also deal with 64 bit binaries.
4968c27c18e8Smrgfunc_win32_libid ()
4969c27c18e8Smrg{
497048e5ce07Smrg  $debug_cmd
497148e5ce07Smrg
497248e5ce07Smrg  win32_libid_type=unknown
4973c27c18e8Smrg  win32_fileres=`file -L $1 2>/dev/null`
4974c27c18e8Smrg  case $win32_fileres in
4975c27c18e8Smrg  *ar\ archive\ import\ library*) # definitely import
4976c27c18e8Smrg    win32_libid_type="x86 archive import"
4977c27c18e8Smrg    ;;
4978c27c18e8Smrg  *ar\ archive*) # could be an import, or static
497937eb1ca1Smrg    # Keep the egrep pattern in sync with the one in _LT_CHECK_MAGIC_METHOD.
4980c27c18e8Smrg    if eval $OBJDUMP -f $1 | $SED -e '10q' 2>/dev/null |
498137eb1ca1Smrg       $EGREP 'file format (pei*-i386(.*architecture: i386)?|pe-arm-wince|pe-x86-64)' >/dev/null; then
498248e5ce07Smrg      case $nm_interface in
498348e5ce07Smrg      "MS dumpbin")
498448e5ce07Smrg	if func_cygming_ms_implib_p "$1" ||
498548e5ce07Smrg	   func_cygming_gnu_implib_p "$1"
498648e5ce07Smrg	then
498748e5ce07Smrg	  win32_nmres=import
498848e5ce07Smrg	else
498948e5ce07Smrg	  win32_nmres=
499048e5ce07Smrg	fi
499148e5ce07Smrg	;;
499248e5ce07Smrg      *)
499348e5ce07Smrg	func_to_tool_file "$1" func_convert_file_msys_to_w32
499448e5ce07Smrg	win32_nmres=`eval $NM -f posix -A \"$func_to_tool_file_result\" |
499548e5ce07Smrg	  $SED -n -e '
4996c27c18e8Smrg	    1,100{
4997c27c18e8Smrg		/ I /{
499848e5ce07Smrg		    s|.*|import|
4999c27c18e8Smrg		    p
5000c27c18e8Smrg		    q
5001c27c18e8Smrg		}
5002c27c18e8Smrg	    }'`
500348e5ce07Smrg	;;
500448e5ce07Smrg      esac
5005c27c18e8Smrg      case $win32_nmres in
5006c27c18e8Smrg      import*)  win32_libid_type="x86 archive import";;
5007c27c18e8Smrg      *)        win32_libid_type="x86 archive static";;
5008c27c18e8Smrg      esac
5009c27c18e8Smrg    fi
5010c27c18e8Smrg    ;;
5011c27c18e8Smrg  *DLL*)
5012c27c18e8Smrg    win32_libid_type="x86 DLL"
5013c27c18e8Smrg    ;;
5014c27c18e8Smrg  *executable*) # but shell scripts are "executable" too...
5015c27c18e8Smrg    case $win32_fileres in
5016c27c18e8Smrg    *MS\ Windows\ PE\ Intel*)
5017c27c18e8Smrg      win32_libid_type="x86 DLL"
5018c27c18e8Smrg      ;;
5019c27c18e8Smrg    esac
5020c27c18e8Smrg    ;;
5021c27c18e8Smrg  esac
5022c27c18e8Smrg  $ECHO "$win32_libid_type"
5023c27c18e8Smrg}
5024c43cc173Smrg
5025b789ec8aSmrg# func_cygming_dll_for_implib ARG
5026b789ec8aSmrg#
5027b789ec8aSmrg# Platform-specific function to extract the
5028b789ec8aSmrg# name of the DLL associated with the specified
5029b789ec8aSmrg# import library ARG.
5030b789ec8aSmrg# Invoked by eval'ing the libtool variable
5031b789ec8aSmrg#    $sharedlib_from_linklib_cmd
5032b789ec8aSmrg# Result is available in the variable
5033b789ec8aSmrg#    $sharedlib_from_linklib_result
5034b789ec8aSmrgfunc_cygming_dll_for_implib ()
5035b789ec8aSmrg{
503648e5ce07Smrg  $debug_cmd
503748e5ce07Smrg
5038b789ec8aSmrg  sharedlib_from_linklib_result=`$DLLTOOL --identify-strict --identify "$1"`
5039b789ec8aSmrg}
5040b789ec8aSmrg
5041b789ec8aSmrg# func_cygming_dll_for_implib_fallback_core SECTION_NAME LIBNAMEs
5042b789ec8aSmrg#
5043b789ec8aSmrg# The is the core of a fallback implementation of a
5044b789ec8aSmrg# platform-specific function to extract the name of the
5045b789ec8aSmrg# DLL associated with the specified import library LIBNAME.
5046b789ec8aSmrg#
5047b789ec8aSmrg# SECTION_NAME is either .idata$6 or .idata$7, depending
5048b789ec8aSmrg# on the platform and compiler that created the implib.
5049b789ec8aSmrg#
5050b789ec8aSmrg# Echos the name of the DLL associated with the
5051b789ec8aSmrg# specified import library.
5052b789ec8aSmrgfunc_cygming_dll_for_implib_fallback_core ()
5053b789ec8aSmrg{
505448e5ce07Smrg  $debug_cmd
505548e5ce07Smrg
5056b789ec8aSmrg  match_literal=`$ECHO "$1" | $SED "$sed_make_literal_regex"`
5057b789ec8aSmrg  $OBJDUMP -s --section "$1" "$2" 2>/dev/null |
5058b789ec8aSmrg    $SED '/^Contents of section '"$match_literal"':/{
5059b789ec8aSmrg      # Place marker at beginning of archive member dllname section
5060b789ec8aSmrg      s/.*/====MARK====/
5061b789ec8aSmrg      p
5062b789ec8aSmrg      d
5063b789ec8aSmrg    }
5064b789ec8aSmrg    # These lines can sometimes be longer than 43 characters, but
5065b789ec8aSmrg    # are always uninteresting
5066b789ec8aSmrg    /:[	 ]*file format pe[i]\{,1\}-/d
5067b789ec8aSmrg    /^In archive [^:]*:/d
5068b789ec8aSmrg    # Ensure marker is printed
5069b789ec8aSmrg    /^====MARK====/p
5070b789ec8aSmrg    # Remove all lines with less than 43 characters
5071b789ec8aSmrg    /^.\{43\}/!d
5072b789ec8aSmrg    # From remaining lines, remove first 43 characters
5073b789ec8aSmrg    s/^.\{43\}//' |
5074b789ec8aSmrg    $SED -n '
5075b789ec8aSmrg      # Join marker and all lines until next marker into a single line
5076b789ec8aSmrg      /^====MARK====/ b para
5077b789ec8aSmrg      H
5078b789ec8aSmrg      $ b para
5079b789ec8aSmrg      b
5080b789ec8aSmrg      :para
5081b789ec8aSmrg      x
5082b789ec8aSmrg      s/\n//g
5083b789ec8aSmrg      # Remove the marker
5084b789ec8aSmrg      s/^====MARK====//
5085b789ec8aSmrg      # Remove trailing dots and whitespace
5086b789ec8aSmrg      s/[\. \t]*$//
5087b789ec8aSmrg      # Print
5088b789ec8aSmrg      /./p' |
5089b789ec8aSmrg    # we now have a list, one entry per line, of the stringified
5090b789ec8aSmrg    # contents of the appropriate section of all members of the
509148e5ce07Smrg    # archive that possess that section. Heuristic: eliminate
509248e5ce07Smrg    # all those that have a first or second character that is
5093b789ec8aSmrg    # a '.' (that is, objdump's representation of an unprintable
5094b789ec8aSmrg    # character.) This should work for all archives with less than
5095b789ec8aSmrg    # 0x302f exports -- but will fail for DLLs whose name actually
5096b789ec8aSmrg    # begins with a literal '.' or a single character followed by
5097b789ec8aSmrg    # a '.'.
5098b789ec8aSmrg    #
5099b789ec8aSmrg    # Of those that remain, print the first one.
5100b789ec8aSmrg    $SED -e '/^\./d;/^.\./d;q'
5101b789ec8aSmrg}
5102b789ec8aSmrg
5103b789ec8aSmrg# func_cygming_dll_for_implib_fallback ARG
5104b789ec8aSmrg# Platform-specific function to extract the
5105b789ec8aSmrg# name of the DLL associated with the specified
5106b789ec8aSmrg# import library ARG.
5107b789ec8aSmrg#
5108b789ec8aSmrg# This fallback implementation is for use when $DLLTOOL
5109b789ec8aSmrg# does not support the --identify-strict option.
5110b789ec8aSmrg# Invoked by eval'ing the libtool variable
5111b789ec8aSmrg#    $sharedlib_from_linklib_cmd
5112b789ec8aSmrg# Result is available in the variable
5113b789ec8aSmrg#    $sharedlib_from_linklib_result
5114b789ec8aSmrgfunc_cygming_dll_for_implib_fallback ()
5115b789ec8aSmrg{
511648e5ce07Smrg  $debug_cmd
511748e5ce07Smrg
511848e5ce07Smrg  if func_cygming_gnu_implib_p "$1"; then
5119b789ec8aSmrg    # binutils import library
5120b789ec8aSmrg    sharedlib_from_linklib_result=`func_cygming_dll_for_implib_fallback_core '.idata$7' "$1"`
512148e5ce07Smrg  elif func_cygming_ms_implib_p "$1"; then
5122b789ec8aSmrg    # ms-generated import library
5123b789ec8aSmrg    sharedlib_from_linklib_result=`func_cygming_dll_for_implib_fallback_core '.idata$6' "$1"`
5124b789ec8aSmrg  else
5125b789ec8aSmrg    # unknown
512648e5ce07Smrg    sharedlib_from_linklib_result=
5127b789ec8aSmrg  fi
5128b789ec8aSmrg}
5129c43cc173Smrg
5130c43cc173Smrg
5131c27c18e8Smrg# func_extract_an_archive dir oldlib
5132c27c18e8Smrgfunc_extract_an_archive ()
5133c27c18e8Smrg{
513448e5ce07Smrg    $debug_cmd
513548e5ce07Smrg
513648e5ce07Smrg    f_ex_an_ar_dir=$1; shift
513748e5ce07Smrg    f_ex_an_ar_oldlib=$1
513848e5ce07Smrg    if test yes = "$lock_old_archive_extraction"; then
513937eb1ca1Smrg      lockfile=$f_ex_an_ar_oldlib.lock
514037eb1ca1Smrg      until $opt_dry_run || ln "$progpath" "$lockfile" 2>/dev/null; do
514137eb1ca1Smrg	func_echo "Waiting for $lockfile to be removed"
514237eb1ca1Smrg	sleep 2
514337eb1ca1Smrg      done
514437eb1ca1Smrg    fi
514537eb1ca1Smrg    func_show_eval "(cd \$f_ex_an_ar_dir && $AR x \"\$f_ex_an_ar_oldlib\")" \
514637eb1ca1Smrg		   'stat=$?; rm -f "$lockfile"; exit $stat'
514748e5ce07Smrg    if test yes = "$lock_old_archive_extraction"; then
514837eb1ca1Smrg      $opt_dry_run || rm -f "$lockfile"
514937eb1ca1Smrg    fi
5150c27c18e8Smrg    if ($AR t "$f_ex_an_ar_oldlib" | sort | sort -uc >/dev/null 2>&1); then
5151c27c18e8Smrg     :
5152c27c18e8Smrg    else
5153c27c18e8Smrg      func_fatal_error "object name conflicts in archive: $f_ex_an_ar_dir/$f_ex_an_ar_oldlib"
5154c27c18e8Smrg    fi
5155c27c18e8Smrg}
5156c43cc173Smrg
5157c43cc173Smrg
5158c27c18e8Smrg# func_extract_archives gentop oldlib ...
5159c27c18e8Smrgfunc_extract_archives ()
5160c27c18e8Smrg{
516148e5ce07Smrg    $debug_cmd
516248e5ce07Smrg
516348e5ce07Smrg    my_gentop=$1; shift
5164c27c18e8Smrg    my_oldlibs=${1+"$@"}
516548e5ce07Smrg    my_oldobjs=
516648e5ce07Smrg    my_xlib=
516748e5ce07Smrg    my_xabs=
516848e5ce07Smrg    my_xdir=
5169c43cc173Smrg
5170c27c18e8Smrg    for my_xlib in $my_oldlibs; do
5171c27c18e8Smrg      # Extract the objects.
5172c27c18e8Smrg      case $my_xlib in
517348e5ce07Smrg	[\\/]* | [A-Za-z]:[\\/]*) my_xabs=$my_xlib ;;
5174c27c18e8Smrg	*) my_xabs=`pwd`"/$my_xlib" ;;
5175c27c18e8Smrg      esac
5176c27c18e8Smrg      func_basename "$my_xlib"
517748e5ce07Smrg      my_xlib=$func_basename_result
5178c27c18e8Smrg      my_xlib_u=$my_xlib
5179c27c18e8Smrg      while :; do
5180c27c18e8Smrg        case " $extracted_archives " in
5181c27c18e8Smrg	*" $my_xlib_u "*)
5182c27c18e8Smrg	  func_arith $extracted_serial + 1
5183c27c18e8Smrg	  extracted_serial=$func_arith_result
5184c27c18e8Smrg	  my_xlib_u=lt$extracted_serial-$my_xlib ;;
5185c27c18e8Smrg	*) break ;;
5186c27c18e8Smrg	esac
5187c27c18e8Smrg      done
5188c27c18e8Smrg      extracted_archives="$extracted_archives $my_xlib_u"
518948e5ce07Smrg      my_xdir=$my_gentop/$my_xlib_u
5190c43cc173Smrg
5191c27c18e8Smrg      func_mkdir_p "$my_xdir"
5192c27c18e8Smrg
5193c27c18e8Smrg      case $host in
5194c27c18e8Smrg      *-darwin*)
5195c27c18e8Smrg	func_verbose "Extracting $my_xabs"
5196c27c18e8Smrg	# Do not bother doing anything if just a dry run
5197c27c18e8Smrg	$opt_dry_run || {
5198c27c18e8Smrg	  darwin_orig_dir=`pwd`
5199c27c18e8Smrg	  cd $my_xdir || exit $?
5200c27c18e8Smrg	  darwin_archive=$my_xabs
5201c27c18e8Smrg	  darwin_curdir=`pwd`
520248e5ce07Smrg	  func_basename "$darwin_archive"
520348e5ce07Smrg	  darwin_base_archive=$func_basename_result
5204c27c18e8Smrg	  darwin_arches=`$LIPO -info "$darwin_archive" 2>/dev/null | $GREP Architectures 2>/dev/null || true`
5205c27c18e8Smrg	  if test -n "$darwin_arches"; then
5206c27c18e8Smrg	    darwin_arches=`$ECHO "$darwin_arches" | $SED -e 's/.*are://'`
5207c27c18e8Smrg	    darwin_arch=
5208c27c18e8Smrg	    func_verbose "$darwin_base_archive has multiple architectures $darwin_arches"
520948e5ce07Smrg	    for darwin_arch in  $darwin_arches; do
521048e5ce07Smrg	      func_mkdir_p "unfat-$$/$darwin_base_archive-$darwin_arch"
521148e5ce07Smrg	      $LIPO -thin $darwin_arch -output "unfat-$$/$darwin_base_archive-$darwin_arch/$darwin_base_archive" "$darwin_archive"
521248e5ce07Smrg	      cd "unfat-$$/$darwin_base_archive-$darwin_arch"
521348e5ce07Smrg	      func_extract_an_archive "`pwd`" "$darwin_base_archive"
5214c27c18e8Smrg	      cd "$darwin_curdir"
521548e5ce07Smrg	      $RM "unfat-$$/$darwin_base_archive-$darwin_arch/$darwin_base_archive"
5216c27c18e8Smrg	    done # $darwin_arches
5217c27c18e8Smrg            ## Okay now we've a bunch of thin objects, gotta fatten them up :)
521848e5ce07Smrg	    darwin_filelist=`find unfat-$$ -type f -name \*.o -print -o -name \*.lo -print | $SED -e "$sed_basename" | sort -u`
5219c27c18e8Smrg	    darwin_file=
5220c27c18e8Smrg	    darwin_files=
5221c27c18e8Smrg	    for darwin_file in $darwin_filelist; do
522237eb1ca1Smrg	      darwin_files=`find unfat-$$ -name $darwin_file -print | sort | $NL2SP`
5223c27c18e8Smrg	      $LIPO -create -output "$darwin_file" $darwin_files
5224c27c18e8Smrg	    done # $darwin_filelist
5225c27c18e8Smrg	    $RM -rf unfat-$$
5226c27c18e8Smrg	    cd "$darwin_orig_dir"
5227c43cc173Smrg	  else
5228c27c18e8Smrg	    cd $darwin_orig_dir
5229c27c18e8Smrg	    func_extract_an_archive "$my_xdir" "$my_xabs"
5230c27c18e8Smrg	  fi # $darwin_arches
5231c27c18e8Smrg	} # !$opt_dry_run
5232c27c18e8Smrg	;;
5233c27c18e8Smrg      *)
5234c27c18e8Smrg        func_extract_an_archive "$my_xdir" "$my_xabs"
5235c27c18e8Smrg	;;
5236c27c18e8Smrg      esac
523737eb1ca1Smrg      my_oldobjs="$my_oldobjs "`find $my_xdir -name \*.$objext -print -o -name \*.lo -print | sort | $NL2SP`
5238c27c18e8Smrg    done
5239c43cc173Smrg
524048e5ce07Smrg    func_extract_archives_result=$my_oldobjs
5241c27c18e8Smrg}
5242c43cc173Smrg
5243c43cc173Smrg
524437eb1ca1Smrg# func_emit_wrapper [arg=no]
524537eb1ca1Smrg#
524637eb1ca1Smrg# Emit a libtool wrapper script on stdout.
524737eb1ca1Smrg# Don't directly open a file because we may want to
524837eb1ca1Smrg# incorporate the script contents within a cygwin/mingw
524937eb1ca1Smrg# wrapper executable.  Must ONLY be called from within
525037eb1ca1Smrg# func_mode_link because it depends on a number of variables
525137eb1ca1Smrg# set therein.
5252c27c18e8Smrg#
525337eb1ca1Smrg# ARG is the value that the WRAPPER_SCRIPT_BELONGS_IN_OBJDIR
525437eb1ca1Smrg# variable will take.  If 'yes', then the emitted script
525548e5ce07Smrg# will assume that the directory where it is stored is
525637eb1ca1Smrg# the $objdir directory.  This is a cygwin/mingw-specific
525737eb1ca1Smrg# behavior.
525837eb1ca1Smrgfunc_emit_wrapper ()
5259c27c18e8Smrg{
526037eb1ca1Smrg	func_emit_wrapper_arg1=${1-no}
5261c43cc173Smrg
5262c27c18e8Smrg	$ECHO "\
5263c27c18e8Smrg#! $SHELL
5264c43cc173Smrg
5265c27c18e8Smrg# $output - temporary wrapper script for $objdir/$outputname
526648e5ce07Smrg# Generated by $PROGRAM (GNU $PACKAGE) $VERSION
5267c27c18e8Smrg#
5268c27c18e8Smrg# The $output program cannot be directly executed until all the libtool
5269c27c18e8Smrg# libraries that it depends on are installed.
5270c27c18e8Smrg#
5271c27c18e8Smrg# This wrapper script should never be moved out of the build directory.
5272c27c18e8Smrg# If it is, it will not operate correctly.
5273c43cc173Smrg
5274c27c18e8Smrg# Sed substitution that helps us do robust quoting.  It backslashifies
5275c27c18e8Smrg# metacharacters that are still active within double-quoted strings.
5276c27c18e8Smrgsed_quote_subst='$sed_quote_subst'
5277c43cc173Smrg
5278c27c18e8Smrg# Be Bourne compatible
5279c27c18e8Smrgif test -n \"\${ZSH_VERSION+set}\" && (emulate sh) >/dev/null 2>&1; then
5280c27c18e8Smrg  emulate sh
5281c27c18e8Smrg  NULLCMD=:
5282c27c18e8Smrg  # Zsh 3.x and 4.x performs word splitting on \${1+\"\$@\"}, which
5283c27c18e8Smrg  # is contrary to our usage.  Disable this feature.
5284c27c18e8Smrg  alias -g '\${1+\"\$@\"}'='\"\$@\"'
5285c27c18e8Smrg  setopt NO_GLOB_SUBST
5286c27c18e8Smrgelse
5287c27c18e8Smrg  case \`(set -o) 2>/dev/null\` in *posix*) set -o posix;; esac
5288c27c18e8Smrgfi
5289c27c18e8SmrgBIN_SH=xpg4; export BIN_SH # for Tru64
5290c27c18e8SmrgDUALCASE=1; export DUALCASE # for MKS sh
5291c43cc173Smrg
5292c27c18e8Smrg# The HP-UX ksh and POSIX shell print the target directory to stdout
5293c27c18e8Smrg# if CDPATH is set.
5294c27c18e8Smrg(unset CDPATH) >/dev/null 2>&1 && unset CDPATH
5295c43cc173Smrg
5296c27c18e8Smrgrelink_command=\"$relink_command\"
5297c43cc173Smrg
5298c27c18e8Smrg# This environment variable determines our operation mode.
5299c27c18e8Smrgif test \"\$libtool_install_magic\" = \"$magic\"; then
5300c27c18e8Smrg  # install mode needs the following variables:
5301c27c18e8Smrg  generated_by_libtool_version='$macro_version'
5302c27c18e8Smrg  notinst_deplibs='$notinst_deplibs'
5303c27c18e8Smrgelse
5304c27c18e8Smrg  # When we are sourced in execute mode, \$file and \$ECHO are already set.
5305c27c18e8Smrg  if test \"\$libtool_execute_magic\" != \"$magic\"; then
530637eb1ca1Smrg    file=\"\$0\""
530737eb1ca1Smrg
53084940c694Smrg    func_quote "$ECHO"
53094940c694Smrg    qECHO=$func_quote_result
531037eb1ca1Smrg    $ECHO "\
531137eb1ca1Smrg
531237eb1ca1Smrg# A function that is used when there is no print builtin or printf.
531337eb1ca1Smrgfunc_fallback_echo ()
531437eb1ca1Smrg{
531537eb1ca1Smrg  eval 'cat <<_LTECHO_EOF
531637eb1ca1Smrg\$1
531737eb1ca1Smrg_LTECHO_EOF'
531837eb1ca1Smrg}
531937eb1ca1Smrg    ECHO=\"$qECHO\"
532037eb1ca1Smrg  fi
532137eb1ca1Smrg
532237eb1ca1Smrg# Very basic option parsing. These options are (a) specific to
532337eb1ca1Smrg# the libtool wrapper, (b) are identical between the wrapper
532448e5ce07Smrg# /script/ and the wrapper /executable/ that is used only on
532537eb1ca1Smrg# windows platforms, and (c) all begin with the string "--lt-"
532648e5ce07Smrg# (application programs are unlikely to have options that match
532737eb1ca1Smrg# this pattern).
532837eb1ca1Smrg#
532937eb1ca1Smrg# There are only two supported options: --lt-debug and
533037eb1ca1Smrg# --lt-dump-script. There is, deliberately, no --lt-help.
533137eb1ca1Smrg#
533237eb1ca1Smrg# The first argument to this parsing function should be the
533337eb1ca1Smrg# script's $0 value, followed by "$@".
533437eb1ca1Smrglt_option_debug=
533537eb1ca1Smrgfunc_parse_lt_options ()
533637eb1ca1Smrg{
533737eb1ca1Smrg  lt_script_arg0=\$0
533837eb1ca1Smrg  shift
533937eb1ca1Smrg  for lt_opt
534037eb1ca1Smrg  do
534137eb1ca1Smrg    case \"\$lt_opt\" in
534237eb1ca1Smrg    --lt-debug) lt_option_debug=1 ;;
534337eb1ca1Smrg    --lt-dump-script)
534437eb1ca1Smrg        lt_dump_D=\`\$ECHO \"X\$lt_script_arg0\" | $SED -e 's/^X//' -e 's%/[^/]*$%%'\`
534537eb1ca1Smrg        test \"X\$lt_dump_D\" = \"X\$lt_script_arg0\" && lt_dump_D=.
534637eb1ca1Smrg        lt_dump_F=\`\$ECHO \"X\$lt_script_arg0\" | $SED -e 's/^X//' -e 's%^.*/%%'\`
534737eb1ca1Smrg        cat \"\$lt_dump_D/\$lt_dump_F\"
534837eb1ca1Smrg        exit 0
534937eb1ca1Smrg      ;;
535037eb1ca1Smrg    --lt-*)
535137eb1ca1Smrg        \$ECHO \"Unrecognized --lt- option: '\$lt_opt'\" 1>&2
535237eb1ca1Smrg        exit 1
535337eb1ca1Smrg      ;;
535437eb1ca1Smrg    esac
535537eb1ca1Smrg  done
535637eb1ca1Smrg
535737eb1ca1Smrg  # Print the debug banner immediately:
535837eb1ca1Smrg  if test -n \"\$lt_option_debug\"; then
535948e5ce07Smrg    echo \"$outputname:$output:\$LINENO: libtool wrapper (GNU $PACKAGE) $VERSION\" 1>&2
536037eb1ca1Smrg  fi
536137eb1ca1Smrg}
536237eb1ca1Smrg
536337eb1ca1Smrg# Used when --lt-debug. Prints its arguments to stdout
536437eb1ca1Smrg# (redirection is the responsibility of the caller)
536537eb1ca1Smrgfunc_lt_dump_args ()
536637eb1ca1Smrg{
536737eb1ca1Smrg  lt_dump_args_N=1;
536837eb1ca1Smrg  for lt_arg
536937eb1ca1Smrg  do
537048e5ce07Smrg    \$ECHO \"$outputname:$output:\$LINENO: newargv[\$lt_dump_args_N]: \$lt_arg\"
537137eb1ca1Smrg    lt_dump_args_N=\`expr \$lt_dump_args_N + 1\`
537237eb1ca1Smrg  done
537337eb1ca1Smrg}
537437eb1ca1Smrg
537537eb1ca1Smrg# Core function for launching the target application
537637eb1ca1Smrgfunc_exec_program_core ()
537737eb1ca1Smrg{
5378c27c18e8Smrg"
537937eb1ca1Smrg  case $host in
538037eb1ca1Smrg  # Backslashes separate directories on plain windows
538137eb1ca1Smrg  *-*-mingw | *-*-os2* | *-cegcc*)
538237eb1ca1Smrg    $ECHO "\
538337eb1ca1Smrg      if test -n \"\$lt_option_debug\"; then
538448e5ce07Smrg        \$ECHO \"$outputname:$output:\$LINENO: newargv[0]: \$progdir\\\\\$program\" 1>&2
538537eb1ca1Smrg        func_lt_dump_args \${1+\"\$@\"} 1>&2
538637eb1ca1Smrg      fi
538737eb1ca1Smrg      exec \"\$progdir\\\\\$program\" \${1+\"\$@\"}
538837eb1ca1Smrg"
538937eb1ca1Smrg    ;;
539037eb1ca1Smrg
539137eb1ca1Smrg  *)
539237eb1ca1Smrg    $ECHO "\
539337eb1ca1Smrg      if test -n \"\$lt_option_debug\"; then
539448e5ce07Smrg        \$ECHO \"$outputname:$output:\$LINENO: newargv[0]: \$progdir/\$program\" 1>&2
539537eb1ca1Smrg        func_lt_dump_args \${1+\"\$@\"} 1>&2
539637eb1ca1Smrg      fi
539737eb1ca1Smrg      exec \"\$progdir/\$program\" \${1+\"\$@\"}
539837eb1ca1Smrg"
539937eb1ca1Smrg    ;;
540037eb1ca1Smrg  esac
540137eb1ca1Smrg  $ECHO "\
540237eb1ca1Smrg      \$ECHO \"\$0: cannot exec \$program \$*\" 1>&2
540337eb1ca1Smrg      exit 1
540437eb1ca1Smrg}
540537eb1ca1Smrg
540637eb1ca1Smrg# A function to encapsulate launching the target application
540737eb1ca1Smrg# Strips options in the --lt-* namespace from \$@ and
540837eb1ca1Smrg# launches target application with the remaining arguments.
540937eb1ca1Smrgfunc_exec_program ()
541037eb1ca1Smrg{
5411f1ee322dSmrg  case \" \$* \" in
5412f1ee322dSmrg  *\\ --lt-*)
5413f1ee322dSmrg    for lt_wr_arg
5414f1ee322dSmrg    do
5415f1ee322dSmrg      case \$lt_wr_arg in
5416f1ee322dSmrg      --lt-*) ;;
5417f1ee322dSmrg      *) set x \"\$@\" \"\$lt_wr_arg\"; shift;;
5418f1ee322dSmrg      esac
5419f1ee322dSmrg      shift
5420f1ee322dSmrg    done ;;
5421f1ee322dSmrg  esac
542237eb1ca1Smrg  func_exec_program_core \${1+\"\$@\"}
542337eb1ca1Smrg}
542437eb1ca1Smrg
542537eb1ca1Smrg  # Parse options
542637eb1ca1Smrg  func_parse_lt_options \"\$0\" \${1+\"\$@\"}
5427c43cc173Smrg
5428c27c18e8Smrg  # Find the directory that this script lives in.
542937eb1ca1Smrg  thisdir=\`\$ECHO \"\$file\" | $SED 's%/[^/]*$%%'\`
5430c27c18e8Smrg  test \"x\$thisdir\" = \"x\$file\" && thisdir=.
5431c43cc173Smrg
5432c27c18e8Smrg  # Follow symbolic links until we get to the real thisdir.
543337eb1ca1Smrg  file=\`ls -ld \"\$file\" | $SED -n 's/.*-> //p'\`
5434c27c18e8Smrg  while test -n \"\$file\"; do
543537eb1ca1Smrg    destdir=\`\$ECHO \"\$file\" | $SED 's%/[^/]*\$%%'\`
5436c27c18e8Smrg
5437c27c18e8Smrg    # If there was a directory component, then change thisdir.
5438c27c18e8Smrg    if test \"x\$destdir\" != \"x\$file\"; then
5439c27c18e8Smrg      case \"\$destdir\" in
5440c27c18e8Smrg      [\\\\/]* | [A-Za-z]:[\\\\/]*) thisdir=\"\$destdir\" ;;
5441c27c18e8Smrg      *) thisdir=\"\$thisdir/\$destdir\" ;;
5442c43cc173Smrg      esac
5443c27c18e8Smrg    fi
5444c43cc173Smrg
544537eb1ca1Smrg    file=\`\$ECHO \"\$file\" | $SED 's%^.*/%%'\`
544637eb1ca1Smrg    file=\`ls -ld \"\$thisdir/\$file\" | $SED -n 's/.*-> //p'\`
5447c27c18e8Smrg  done
5448c43cc173Smrg
5449c27c18e8Smrg  # Usually 'no', except on cygwin/mingw when embedded into
5450c27c18e8Smrg  # the cwrapper.
545137eb1ca1Smrg  WRAPPER_SCRIPT_BELONGS_IN_OBJDIR=$func_emit_wrapper_arg1
5452c27c18e8Smrg  if test \"\$WRAPPER_SCRIPT_BELONGS_IN_OBJDIR\" = \"yes\"; then
5453c27c18e8Smrg    # special case for '.'
5454c27c18e8Smrg    if test \"\$thisdir\" = \".\"; then
5455c27c18e8Smrg      thisdir=\`pwd\`
5456c27c18e8Smrg    fi
5457c27c18e8Smrg    # remove .libs from thisdir
5458c27c18e8Smrg    case \"\$thisdir\" in
545937eb1ca1Smrg    *[\\\\/]$objdir ) thisdir=\`\$ECHO \"\$thisdir\" | $SED 's%[\\\\/][^\\\\/]*$%%'\` ;;
5460c27c18e8Smrg    $objdir )   thisdir=. ;;
5461c27c18e8Smrg    esac
5462c27c18e8Smrg  fi
5463c27c18e8Smrg
5464c27c18e8Smrg  # Try to get the absolute directory name.
5465c27c18e8Smrg  absdir=\`cd \"\$thisdir\" && pwd\`
5466c27c18e8Smrg  test -n \"\$absdir\" && thisdir=\"\$absdir\"
5467c27c18e8Smrg"
5468c27c18e8Smrg
546948e5ce07Smrg	if test yes = "$fast_install"; then
5470c27c18e8Smrg	  $ECHO "\
5471c27c18e8Smrg  program=lt-'$outputname'$exeext
5472c27c18e8Smrg  progdir=\"\$thisdir/$objdir\"
5473c27c18e8Smrg
5474c27c18e8Smrg  if test ! -f \"\$progdir/\$program\" ||
547548e5ce07Smrg     { file=\`ls -1dt \"\$progdir/\$program\" \"\$progdir/../\$program\" 2>/dev/null | $SED 1q\`; \\
5476c27c18e8Smrg       test \"X\$file\" != \"X\$progdir/\$program\"; }; then
5477c27c18e8Smrg
5478c27c18e8Smrg    file=\"\$\$-\$program\"
5479c27c18e8Smrg
5480c27c18e8Smrg    if test ! -d \"\$progdir\"; then
5481c27c18e8Smrg      $MKDIR \"\$progdir\"
5482c27c18e8Smrg    else
5483c27c18e8Smrg      $RM \"\$progdir/\$file\"
5484c27c18e8Smrg    fi"
5485c27c18e8Smrg
5486c27c18e8Smrg	  $ECHO "\
5487c27c18e8Smrg
5488c27c18e8Smrg    # relink executable if necessary
5489c27c18e8Smrg    if test -n \"\$relink_command\"; then
5490c27c18e8Smrg      if relink_command_output=\`eval \$relink_command 2>&1\`; then :
5491c27c18e8Smrg      else
549248e5ce07Smrg	\$ECHO \"\$relink_command_output\" >&2
5493c27c18e8Smrg	$RM \"\$progdir/\$file\"
5494c27c18e8Smrg	exit 1
5495c43cc173Smrg      fi
5496c27c18e8Smrg    fi
5497c43cc173Smrg
5498c27c18e8Smrg    $MV \"\$progdir/\$file\" \"\$progdir/\$program\" 2>/dev/null ||
5499c27c18e8Smrg    { $RM \"\$progdir/\$program\";
5500c27c18e8Smrg      $MV \"\$progdir/\$file\" \"\$progdir/\$program\"; }
5501c27c18e8Smrg    $RM \"\$progdir/\$file\"
5502c27c18e8Smrg  fi"
5503c27c18e8Smrg	else
5504c27c18e8Smrg	  $ECHO "\
5505c27c18e8Smrg  program='$outputname'
5506c27c18e8Smrg  progdir=\"\$thisdir/$objdir\"
5507c27c18e8Smrg"
5508c43cc173Smrg	fi
5509c43cc173Smrg
5510c27c18e8Smrg	$ECHO "\
5511c27c18e8Smrg
5512c27c18e8Smrg  if test -f \"\$progdir/\$program\"; then"
5513c27c18e8Smrg
5514b789ec8aSmrg	# fixup the dll searchpath if we need to.
5515b789ec8aSmrg	#
5516b789ec8aSmrg	# Fix the DLL searchpath if we need to.  Do this before prepending
5517b789ec8aSmrg	# to shlibpath, because on Windows, both are PATH and uninstalled
5518b789ec8aSmrg	# libraries must come first.
5519b789ec8aSmrg	if test -n "$dllsearchpath"; then
5520b789ec8aSmrg	  $ECHO "\
5521b789ec8aSmrg    # Add the dll search path components to the executable PATH
5522b789ec8aSmrg    PATH=$dllsearchpath:\$PATH
5523b789ec8aSmrg"
5524b789ec8aSmrg	fi
5525b789ec8aSmrg
5526c27c18e8Smrg	# Export our shlibpath_var if we have one.
552748e5ce07Smrg	if test yes = "$shlibpath_overrides_runpath" && test -n "$shlibpath_var" && test -n "$temp_rpath"; then
5528c27c18e8Smrg	  $ECHO "\
5529c27c18e8Smrg    # Add our own library path to $shlibpath_var
5530c27c18e8Smrg    $shlibpath_var=\"$temp_rpath\$$shlibpath_var\"
5531c27c18e8Smrg
5532c27c18e8Smrg    # Some systems cannot cope with colon-terminated $shlibpath_var
5533c27c18e8Smrg    # The second colon is a workaround for a bug in BeOS R4 sed
553437eb1ca1Smrg    $shlibpath_var=\`\$ECHO \"\$$shlibpath_var\" | $SED 's/::*\$//'\`
5535c27c18e8Smrg
5536c27c18e8Smrg    export $shlibpath_var
5537c27c18e8Smrg"
5538c43cc173Smrg	fi
5539c43cc173Smrg
5540c27c18e8Smrg	$ECHO "\
5541c27c18e8Smrg    if test \"\$libtool_execute_magic\" != \"$magic\"; then
5542c27c18e8Smrg      # Run the actual program with our arguments.
554337eb1ca1Smrg      func_exec_program \${1+\"\$@\"}
5544c27c18e8Smrg    fi
5545c27c18e8Smrg  else
5546c27c18e8Smrg    # The program doesn't exist.
554748e5ce07Smrg    \$ECHO \"\$0: error: '\$progdir/\$program' does not exist\" 1>&2
5548c27c18e8Smrg    \$ECHO \"This script is just a wrapper for \$program.\" 1>&2
554937eb1ca1Smrg    \$ECHO \"See the $PACKAGE documentation for more information.\" 1>&2
5550c27c18e8Smrg    exit 1
5551c27c18e8Smrg  fi
5552c27c18e8Smrgfi\
5553c27c18e8Smrg"
5554c27c18e8Smrg}
5555c43cc173Smrg
5556c43cc173Smrg
5557c27c18e8Smrg# func_emit_cwrapperexe_src
5558c27c18e8Smrg# emit the source code for a wrapper executable on stdout
5559c27c18e8Smrg# Must ONLY be called from within func_mode_link because
5560c27c18e8Smrg# it depends on a number of variable set therein.
5561c27c18e8Smrgfunc_emit_cwrapperexe_src ()
5562c27c18e8Smrg{
5563c27c18e8Smrg	cat <<EOF
5564c43cc173Smrg
5565c27c18e8Smrg/* $cwrappersource - temporary wrapper executable for $objdir/$outputname
556648e5ce07Smrg   Generated by $PROGRAM (GNU $PACKAGE) $VERSION
5567c43cc173Smrg
5568c27c18e8Smrg   The $output program cannot be directly executed until all the libtool
5569c27c18e8Smrg   libraries that it depends on are installed.
5570c43cc173Smrg
5571c27c18e8Smrg   This wrapper executable should never be moved out of the build directory.
5572c27c18e8Smrg   If it is, it will not operate correctly.
5573c27c18e8Smrg*/
5574c27c18e8SmrgEOF
5575c27c18e8Smrg	    cat <<"EOF"
557637eb1ca1Smrg#ifdef _MSC_VER
557737eb1ca1Smrg# define _CRT_SECURE_NO_DEPRECATE 1
557837eb1ca1Smrg#endif
5579c27c18e8Smrg#include <stdio.h>
5580c27c18e8Smrg#include <stdlib.h>
5581c27c18e8Smrg#ifdef _MSC_VER
5582c27c18e8Smrg# include <direct.h>
5583c27c18e8Smrg# include <process.h>
5584c27c18e8Smrg# include <io.h>
5585c27c18e8Smrg#else
5586c27c18e8Smrg# include <unistd.h>
5587c27c18e8Smrg# include <stdint.h>
5588c27c18e8Smrg# ifdef __CYGWIN__
5589c27c18e8Smrg#  include <io.h>
5590c27c18e8Smrg# endif
5591c27c18e8Smrg#endif
5592c27c18e8Smrg#include <malloc.h>
5593c27c18e8Smrg#include <stdarg.h>
5594c27c18e8Smrg#include <assert.h>
5595c27c18e8Smrg#include <string.h>
5596c27c18e8Smrg#include <ctype.h>
5597c27c18e8Smrg#include <errno.h>
5598c27c18e8Smrg#include <fcntl.h>
5599c27c18e8Smrg#include <sys/stat.h>
5600c43cc173Smrg
560148e5ce07Smrg#define STREQ(s1, s2) (strcmp ((s1), (s2)) == 0)
560248e5ce07Smrg
560337eb1ca1Smrg/* declarations of non-ANSI functions */
560448e5ce07Smrg#if defined __MINGW32__
560537eb1ca1Smrg# ifdef __STRICT_ANSI__
560637eb1ca1Smrgint _putenv (const char *);
560737eb1ca1Smrg# endif
560848e5ce07Smrg#elif defined __CYGWIN__
560937eb1ca1Smrg# ifdef __STRICT_ANSI__
561037eb1ca1Smrgchar *realpath (const char *, char *);
561137eb1ca1Smrgint putenv (char *);
561237eb1ca1Smrgint setenv (const char *, const char *, int);
561337eb1ca1Smrg# endif
561448e5ce07Smrg/* #elif defined other_platform || defined ... */
561537eb1ca1Smrg#endif
561637eb1ca1Smrg
561737eb1ca1Smrg/* portability defines, excluding path handling macros */
561848e5ce07Smrg#if defined _MSC_VER
561937eb1ca1Smrg# define setmode _setmode
562037eb1ca1Smrg# define stat    _stat
562137eb1ca1Smrg# define chmod   _chmod
562237eb1ca1Smrg# define getcwd  _getcwd
562337eb1ca1Smrg# define putenv  _putenv
562437eb1ca1Smrg# define S_IXUSR _S_IEXEC
562548e5ce07Smrg#elif defined __MINGW32__
562637eb1ca1Smrg# define setmode _setmode
562737eb1ca1Smrg# define stat    _stat
562837eb1ca1Smrg# define chmod   _chmod
562937eb1ca1Smrg# define getcwd  _getcwd
563037eb1ca1Smrg# define putenv  _putenv
563148e5ce07Smrg#elif defined __CYGWIN__
563237eb1ca1Smrg# define HAVE_SETENV
563337eb1ca1Smrg# define FOPEN_WB "wb"
563448e5ce07Smrg/* #elif defined other platforms ... */
563537eb1ca1Smrg#endif
563637eb1ca1Smrg
563748e5ce07Smrg#if defined PATH_MAX
5638c27c18e8Smrg# define LT_PATHMAX PATH_MAX
563948e5ce07Smrg#elif defined MAXPATHLEN
5640c27c18e8Smrg# define LT_PATHMAX MAXPATHLEN
5641c27c18e8Smrg#else
5642c27c18e8Smrg# define LT_PATHMAX 1024
5643c27c18e8Smrg#endif
5644c43cc173Smrg
5645c27c18e8Smrg#ifndef S_IXOTH
5646c27c18e8Smrg# define S_IXOTH 0
5647c27c18e8Smrg#endif
5648c27c18e8Smrg#ifndef S_IXGRP
5649c27c18e8Smrg# define S_IXGRP 0
5650c27c18e8Smrg#endif
5651c43cc173Smrg
565237eb1ca1Smrg/* path handling portability macros */
5653c27c18e8Smrg#ifndef DIR_SEPARATOR
5654c27c18e8Smrg# define DIR_SEPARATOR '/'
5655c27c18e8Smrg# define PATH_SEPARATOR ':'
5656c27c18e8Smrg#endif
5657c43cc173Smrg
565848e5ce07Smrg#if defined _WIN32 || defined __MSDOS__ || defined __DJGPP__ || \
565948e5ce07Smrg  defined __OS2__
5660c27c18e8Smrg# define HAVE_DOS_BASED_FILE_SYSTEM
5661c27c18e8Smrg# define FOPEN_WB "wb"
5662c27c18e8Smrg# ifndef DIR_SEPARATOR_2
5663c27c18e8Smrg#  define DIR_SEPARATOR_2 '\\'
5664c27c18e8Smrg# endif
5665c27c18e8Smrg# ifndef PATH_SEPARATOR_2
5666c27c18e8Smrg#  define PATH_SEPARATOR_2 ';'
5667c27c18e8Smrg# endif
5668c27c18e8Smrg#endif
5669c43cc173Smrg
5670c27c18e8Smrg#ifndef DIR_SEPARATOR_2
5671c27c18e8Smrg# define IS_DIR_SEPARATOR(ch) ((ch) == DIR_SEPARATOR)
5672c27c18e8Smrg#else /* DIR_SEPARATOR_2 */
5673c27c18e8Smrg# define IS_DIR_SEPARATOR(ch) \
5674c27c18e8Smrg	(((ch) == DIR_SEPARATOR) || ((ch) == DIR_SEPARATOR_2))
5675c27c18e8Smrg#endif /* DIR_SEPARATOR_2 */
5676c43cc173Smrg
5677c27c18e8Smrg#ifndef PATH_SEPARATOR_2
5678c27c18e8Smrg# define IS_PATH_SEPARATOR(ch) ((ch) == PATH_SEPARATOR)
5679c27c18e8Smrg#else /* PATH_SEPARATOR_2 */
5680c27c18e8Smrg# define IS_PATH_SEPARATOR(ch) ((ch) == PATH_SEPARATOR_2)
5681c27c18e8Smrg#endif /* PATH_SEPARATOR_2 */
5682c43cc173Smrg
5683c27c18e8Smrg#ifndef FOPEN_WB
5684c27c18e8Smrg# define FOPEN_WB "w"
5685c27c18e8Smrg#endif
5686c27c18e8Smrg#ifndef _O_BINARY
5687c27c18e8Smrg# define _O_BINARY 0
5688c27c18e8Smrg#endif
5689c43cc173Smrg
5690c27c18e8Smrg#define XMALLOC(type, num)      ((type *) xmalloc ((num) * sizeof(type)))
5691c27c18e8Smrg#define XFREE(stale) do { \
569248e5ce07Smrg  if (stale) { free (stale); stale = 0; } \
5693c27c18e8Smrg} while (0)
5694c43cc173Smrg
569548e5ce07Smrg#if defined LT_DEBUGWRAPPER
569637eb1ca1Smrgstatic int lt_debug = 1;
5697c27c18e8Smrg#else
569837eb1ca1Smrgstatic int lt_debug = 0;
5699c27c18e8Smrg#endif
5700c43cc173Smrg
570137eb1ca1Smrgconst char *program_name = "libtool-wrapper"; /* in case xstrdup fails */
5702c43cc173Smrg
5703c27c18e8Smrgvoid *xmalloc (size_t num);
5704c27c18e8Smrgchar *xstrdup (const char *string);
5705c27c18e8Smrgconst char *base_name (const char *name);
5706c27c18e8Smrgchar *find_executable (const char *wrapper);
5707c27c18e8Smrgchar *chase_symlinks (const char *pathspec);
5708c27c18e8Smrgint make_executable (const char *path);
5709c27c18e8Smrgint check_executable (const char *path);
5710c27c18e8Smrgchar *strendzap (char *str, const char *pat);
571137eb1ca1Smrgvoid lt_debugprintf (const char *file, int line, const char *fmt, ...);
571237eb1ca1Smrgvoid lt_fatal (const char *file, int line, const char *message, ...);
571337eb1ca1Smrgstatic const char *nonnull (const char *s);
571437eb1ca1Smrgstatic const char *nonempty (const char *s);
5715c27c18e8Smrgvoid lt_setenv (const char *name, const char *value);
5716c27c18e8Smrgchar *lt_extend_str (const char *orig_value, const char *add, int to_end);
5717c27c18e8Smrgvoid lt_update_exe_path (const char *name, const char *value);
5718c27c18e8Smrgvoid lt_update_lib_path (const char *name, const char *value);
571937eb1ca1Smrgchar **prepare_spawn (char **argv);
572037eb1ca1Smrgvoid lt_dump_script (FILE *f);
5721c27c18e8SmrgEOF
5722c27c18e8Smrg
5723c27c18e8Smrg	    cat <<EOF
572448e5ce07Smrg#if __GNUC__ < 4 || (__GNUC__ == 4 && __GNUC_MINOR__ < 5)
572548e5ce07Smrg# define externally_visible volatile
572648e5ce07Smrg#else
572748e5ce07Smrg# define externally_visible __attribute__((externally_visible)) volatile
572848e5ce07Smrg#endif
572948e5ce07Smrgexternally_visible const char * MAGIC_EXE = "$magic_exe";
5730c27c18e8Smrgconst char * LIB_PATH_VARNAME = "$shlibpath_var";
5731c27c18e8SmrgEOF
5732c43cc173Smrg
573348e5ce07Smrg	    if test yes = "$shlibpath_overrides_runpath" && test -n "$shlibpath_var" && test -n "$temp_rpath"; then
5734b789ec8aSmrg              func_to_host_path "$temp_rpath"
5735c27c18e8Smrg	      cat <<EOF
5736b789ec8aSmrgconst char * LIB_PATH_VALUE   = "$func_to_host_path_result";
5737c27c18e8SmrgEOF
5738c27c18e8Smrg	    else
5739c27c18e8Smrg	      cat <<"EOF"
5740c27c18e8Smrgconst char * LIB_PATH_VALUE   = "";
5741c27c18e8SmrgEOF
5742c27c18e8Smrg	    fi
5743c43cc173Smrg
5744c27c18e8Smrg	    if test -n "$dllsearchpath"; then
5745b789ec8aSmrg              func_to_host_path "$dllsearchpath:"
5746c27c18e8Smrg	      cat <<EOF
5747c27c18e8Smrgconst char * EXE_PATH_VARNAME = "PATH";
5748b789ec8aSmrgconst char * EXE_PATH_VALUE   = "$func_to_host_path_result";
5749c27c18e8SmrgEOF
5750c27c18e8Smrg	    else
5751c27c18e8Smrg	      cat <<"EOF"
5752c27c18e8Smrgconst char * EXE_PATH_VARNAME = "";
5753c27c18e8Smrgconst char * EXE_PATH_VALUE   = "";
5754c27c18e8SmrgEOF
5755c27c18e8Smrg	    fi
5756c43cc173Smrg
575748e5ce07Smrg	    if test yes = "$fast_install"; then
5758c27c18e8Smrg	      cat <<EOF
5759c27c18e8Smrgconst char * TARGET_PROGRAM_NAME = "lt-$outputname"; /* hopefully, no .exe */
5760c27c18e8SmrgEOF
5761c27c18e8Smrg	    else
5762c27c18e8Smrg	      cat <<EOF
5763c27c18e8Smrgconst char * TARGET_PROGRAM_NAME = "$outputname"; /* hopefully, no .exe */
5764c27c18e8SmrgEOF
5765c27c18e8Smrg	    fi
5766c43cc173Smrg
5767c43cc173Smrg
5768c27c18e8Smrg	    cat <<"EOF"
5769c43cc173Smrg
5770c27c18e8Smrg#define LTWRAPPER_OPTION_PREFIX         "--lt-"
5771c43cc173Smrg
5772c27c18e8Smrgstatic const char *ltwrapper_option_prefix = LTWRAPPER_OPTION_PREFIX;
5773c27c18e8Smrgstatic const char *dumpscript_opt       = LTWRAPPER_OPTION_PREFIX "dump-script";
577437eb1ca1Smrgstatic const char *debug_opt            = LTWRAPPER_OPTION_PREFIX "debug";
5775c27c18e8Smrg
5776c27c18e8Smrgint
5777c27c18e8Smrgmain (int argc, char *argv[])
5778c27c18e8Smrg{
5779c27c18e8Smrg  char **newargz;
5780c27c18e8Smrg  int  newargc;
5781c27c18e8Smrg  char *tmp_pathspec;
5782c27c18e8Smrg  char *actual_cwrapper_path;
5783c27c18e8Smrg  char *actual_cwrapper_name;
5784c27c18e8Smrg  char *target_name;
5785c27c18e8Smrg  char *lt_argv_zero;
578648e5ce07Smrg  int rval = 127;
5787c27c18e8Smrg
5788c27c18e8Smrg  int i;
5789c27c18e8Smrg
5790c27c18e8Smrg  program_name = (char *) xstrdup (base_name (argv[0]));
579148e5ce07Smrg  newargz = XMALLOC (char *, (size_t) argc + 1);
5792c27c18e8Smrg
579337eb1ca1Smrg  /* very simple arg parsing; don't want to rely on getopt
579437eb1ca1Smrg   * also, copy all non cwrapper options to newargz, except
579537eb1ca1Smrg   * argz[0], which is handled differently
579637eb1ca1Smrg   */
579737eb1ca1Smrg  newargc=0;
5798c27c18e8Smrg  for (i = 1; i < argc; i++)
5799c27c18e8Smrg    {
580048e5ce07Smrg      if (STREQ (argv[i], dumpscript_opt))
5801c27c18e8Smrg	{
5802c27c18e8SmrgEOF
580348e5ce07Smrg	    case $host in
5804c27c18e8Smrg	      *mingw* | *cygwin* )
5805c27c18e8Smrg		# make stdout use "unix" line endings
5806c27c18e8Smrg		echo "          setmode(1,_O_BINARY);"
5807c27c18e8Smrg		;;
5808c27c18e8Smrg	      esac
5809c27c18e8Smrg
5810c27c18e8Smrg	    cat <<"EOF"
581137eb1ca1Smrg	  lt_dump_script (stdout);
5812c27c18e8Smrg	  return 0;
5813c27c18e8Smrg	}
581448e5ce07Smrg      if (STREQ (argv[i], debug_opt))
581537eb1ca1Smrg	{
581637eb1ca1Smrg          lt_debug = 1;
581737eb1ca1Smrg          continue;
581837eb1ca1Smrg	}
581948e5ce07Smrg      if (STREQ (argv[i], ltwrapper_option_prefix))
582037eb1ca1Smrg        {
582137eb1ca1Smrg          /* however, if there is an option in the LTWRAPPER_OPTION_PREFIX
582237eb1ca1Smrg             namespace, but it is not one of the ones we know about and
582337eb1ca1Smrg             have already dealt with, above (inluding dump-script), then
582437eb1ca1Smrg             report an error. Otherwise, targets might begin to believe
582537eb1ca1Smrg             they are allowed to use options in the LTWRAPPER_OPTION_PREFIX
582637eb1ca1Smrg             namespace. The first time any user complains about this, we'll
582737eb1ca1Smrg             need to make LTWRAPPER_OPTION_PREFIX a configure-time option
582837eb1ca1Smrg             or a configure.ac-settable value.
582937eb1ca1Smrg           */
583037eb1ca1Smrg          lt_fatal (__FILE__, __LINE__,
583137eb1ca1Smrg		    "unrecognized %s option: '%s'",
583237eb1ca1Smrg                    ltwrapper_option_prefix, argv[i]);
583337eb1ca1Smrg        }
583437eb1ca1Smrg      /* otherwise ... */
583537eb1ca1Smrg      newargz[++newargc] = xstrdup (argv[i]);
5836c27c18e8Smrg    }
583737eb1ca1Smrg  newargz[++newargc] = NULL;
583837eb1ca1Smrg
583937eb1ca1SmrgEOF
584037eb1ca1Smrg	    cat <<EOF
584137eb1ca1Smrg  /* The GNU banner must be the first non-error debug message */
584248e5ce07Smrg  lt_debugprintf (__FILE__, __LINE__, "libtool wrapper (GNU $PACKAGE) $VERSION\n");
584337eb1ca1SmrgEOF
584437eb1ca1Smrg	    cat <<"EOF"
584537eb1ca1Smrg  lt_debugprintf (__FILE__, __LINE__, "(main) argv[0]: %s\n", argv[0]);
584637eb1ca1Smrg  lt_debugprintf (__FILE__, __LINE__, "(main) program_name: %s\n", program_name);
5847c27c18e8Smrg
5848c27c18e8Smrg  tmp_pathspec = find_executable (argv[0]);
5849c27c18e8Smrg  if (tmp_pathspec == NULL)
585037eb1ca1Smrg    lt_fatal (__FILE__, __LINE__, "couldn't find %s", argv[0]);
585137eb1ca1Smrg  lt_debugprintf (__FILE__, __LINE__,
585237eb1ca1Smrg                  "(main) found exe (before symlink chase) at: %s\n",
585337eb1ca1Smrg		  tmp_pathspec);
5854c27c18e8Smrg
5855c27c18e8Smrg  actual_cwrapper_path = chase_symlinks (tmp_pathspec);
585637eb1ca1Smrg  lt_debugprintf (__FILE__, __LINE__,
585737eb1ca1Smrg                  "(main) found exe (after symlink chase) at: %s\n",
585837eb1ca1Smrg		  actual_cwrapper_path);
5859c27c18e8Smrg  XFREE (tmp_pathspec);
5860c27c18e8Smrg
586137eb1ca1Smrg  actual_cwrapper_name = xstrdup (base_name (actual_cwrapper_path));
5862c27c18e8Smrg  strendzap (actual_cwrapper_path, actual_cwrapper_name);
5863c27c18e8Smrg
5864c27c18e8Smrg  /* wrapper name transforms */
5865c27c18e8Smrg  strendzap (actual_cwrapper_name, ".exe");
5866c27c18e8Smrg  tmp_pathspec = lt_extend_str (actual_cwrapper_name, ".exe", 1);
5867c27c18e8Smrg  XFREE (actual_cwrapper_name);
5868c27c18e8Smrg  actual_cwrapper_name = tmp_pathspec;
5869c27c18e8Smrg  tmp_pathspec = 0;
5870c27c18e8Smrg
5871c27c18e8Smrg  /* target_name transforms -- use actual target program name; might have lt- prefix */
5872c27c18e8Smrg  target_name = xstrdup (base_name (TARGET_PROGRAM_NAME));
5873c27c18e8Smrg  strendzap (target_name, ".exe");
5874c27c18e8Smrg  tmp_pathspec = lt_extend_str (target_name, ".exe", 1);
5875c27c18e8Smrg  XFREE (target_name);
5876c27c18e8Smrg  target_name = tmp_pathspec;
5877c27c18e8Smrg  tmp_pathspec = 0;
5878c27c18e8Smrg
587937eb1ca1Smrg  lt_debugprintf (__FILE__, __LINE__,
588037eb1ca1Smrg		  "(main) libtool target name: %s\n",
588137eb1ca1Smrg		  target_name);
5882c27c18e8SmrgEOF
5883c27c18e8Smrg
5884c27c18e8Smrg	    cat <<EOF
5885c27c18e8Smrg  newargz[0] =
5886c27c18e8Smrg    XMALLOC (char, (strlen (actual_cwrapper_path) +
5887c27c18e8Smrg		    strlen ("$objdir") + 1 + strlen (actual_cwrapper_name) + 1));
5888c27c18e8Smrg  strcpy (newargz[0], actual_cwrapper_path);
5889c27c18e8Smrg  strcat (newargz[0], "$objdir");
5890c27c18e8Smrg  strcat (newargz[0], "/");
5891c27c18e8SmrgEOF
5892c27c18e8Smrg
5893c27c18e8Smrg	    cat <<"EOF"
5894c27c18e8Smrg  /* stop here, and copy so we don't have to do this twice */
5895c27c18e8Smrg  tmp_pathspec = xstrdup (newargz[0]);
5896c27c18e8Smrg
5897c27c18e8Smrg  /* do NOT want the lt- prefix here, so use actual_cwrapper_name */
5898c27c18e8Smrg  strcat (newargz[0], actual_cwrapper_name);
5899c27c18e8Smrg
5900c27c18e8Smrg  /* DO want the lt- prefix here if it exists, so use target_name */
5901c27c18e8Smrg  lt_argv_zero = lt_extend_str (tmp_pathspec, target_name, 1);
5902c27c18e8Smrg  XFREE (tmp_pathspec);
5903c27c18e8Smrg  tmp_pathspec = NULL;
5904c27c18e8SmrgEOF
5905c27c18e8Smrg
5906c27c18e8Smrg	    case $host_os in
5907c27c18e8Smrg	      mingw*)
5908c27c18e8Smrg	    cat <<"EOF"
5909c27c18e8Smrg  {
5910c27c18e8Smrg    char* p;
5911c27c18e8Smrg    while ((p = strchr (newargz[0], '\\')) != NULL)
5912c27c18e8Smrg      {
5913c27c18e8Smrg	*p = '/';
5914c27c18e8Smrg      }
5915c27c18e8Smrg    while ((p = strchr (lt_argv_zero, '\\')) != NULL)
5916c27c18e8Smrg      {
5917c27c18e8Smrg	*p = '/';
5918c27c18e8Smrg      }
5919c27c18e8Smrg  }
5920c27c18e8SmrgEOF
5921c43cc173Smrg	    ;;
5922c27c18e8Smrg	    esac
5923c27c18e8Smrg
5924c27c18e8Smrg	    cat <<"EOF"
5925c27c18e8Smrg  XFREE (target_name);
5926c27c18e8Smrg  XFREE (actual_cwrapper_path);
5927c27c18e8Smrg  XFREE (actual_cwrapper_name);
5928c27c18e8Smrg
5929c27c18e8Smrg  lt_setenv ("BIN_SH", "xpg4"); /* for Tru64 */
5930c27c18e8Smrg  lt_setenv ("DUALCASE", "1");  /* for MSK sh */
5931b789ec8aSmrg  /* Update the DLL searchpath.  EXE_PATH_VALUE ($dllsearchpath) must
5932b789ec8aSmrg     be prepended before (that is, appear after) LIB_PATH_VALUE ($temp_rpath)
5933b789ec8aSmrg     because on Windows, both *_VARNAMEs are PATH but uninstalled
5934b789ec8aSmrg     libraries must come first. */
5935c27c18e8Smrg  lt_update_exe_path (EXE_PATH_VARNAME, EXE_PATH_VALUE);
5936b789ec8aSmrg  lt_update_lib_path (LIB_PATH_VARNAME, LIB_PATH_VALUE);
5937c27c18e8Smrg
593837eb1ca1Smrg  lt_debugprintf (__FILE__, __LINE__, "(main) lt_argv_zero: %s\n",
593937eb1ca1Smrg		  nonnull (lt_argv_zero));
5940c27c18e8Smrg  for (i = 0; i < newargc; i++)
5941c27c18e8Smrg    {
594237eb1ca1Smrg      lt_debugprintf (__FILE__, __LINE__, "(main) newargz[%d]: %s\n",
594337eb1ca1Smrg		      i, nonnull (newargz[i]));
5944c27c18e8Smrg    }
5945c43cc173Smrg
5946c43cc173SmrgEOF
5947c43cc173Smrg
5948c27c18e8Smrg	    case $host_os in
5949c27c18e8Smrg	      mingw*)
5950c27c18e8Smrg		cat <<"EOF"
5951c27c18e8Smrg  /* execv doesn't actually work on mingw as expected on unix */
595237eb1ca1Smrg  newargz = prepare_spawn (newargz);
595348e5ce07Smrg  rval = (int) _spawnv (_P_WAIT, lt_argv_zero, (const char * const *) newargz);
5954c27c18e8Smrg  if (rval == -1)
5955c27c18e8Smrg    {
5956c27c18e8Smrg      /* failed to start process */
595737eb1ca1Smrg      lt_debugprintf (__FILE__, __LINE__,
595837eb1ca1Smrg		      "(main) failed to launch target \"%s\": %s\n",
595937eb1ca1Smrg		      lt_argv_zero, nonnull (strerror (errno)));
5960c27c18e8Smrg      return 127;
5961c27c18e8Smrg    }
5962c27c18e8Smrg  return rval;
5963c27c18e8SmrgEOF
5964c27c18e8Smrg		;;
5965c27c18e8Smrg	      *)
5966c27c18e8Smrg		cat <<"EOF"
5967c27c18e8Smrg  execv (lt_argv_zero, newargz);
5968c27c18e8Smrg  return rval; /* =127, but avoids unused variable warning */
5969c27c18e8SmrgEOF
5970c27c18e8Smrg		;;
5971c27c18e8Smrg	    esac
5972c43cc173Smrg
5973c27c18e8Smrg	    cat <<"EOF"
5974c27c18e8Smrg}
5975c43cc173Smrg
5976c27c18e8Smrgvoid *
5977c27c18e8Smrgxmalloc (size_t num)
5978c27c18e8Smrg{
5979c27c18e8Smrg  void *p = (void *) malloc (num);
5980c27c18e8Smrg  if (!p)
598137eb1ca1Smrg    lt_fatal (__FILE__, __LINE__, "memory exhausted");
5982c43cc173Smrg
5983c27c18e8Smrg  return p;
5984c27c18e8Smrg}
5985c43cc173Smrg
5986c27c18e8Smrgchar *
5987c27c18e8Smrgxstrdup (const char *string)
5988c27c18e8Smrg{
5989c27c18e8Smrg  return string ? strcpy ((char *) xmalloc (strlen (string) + 1),
5990c27c18e8Smrg			  string) : NULL;
5991c27c18e8Smrg}
5992c43cc173Smrg
5993c27c18e8Smrgconst char *
5994c27c18e8Smrgbase_name (const char *name)
5995c27c18e8Smrg{
5996c27c18e8Smrg  const char *base;
5997c43cc173Smrg
599848e5ce07Smrg#if defined HAVE_DOS_BASED_FILE_SYSTEM
5999c27c18e8Smrg  /* Skip over the disk name in MSDOS pathnames. */
6000c27c18e8Smrg  if (isalpha ((unsigned char) name[0]) && name[1] == ':')
6001c27c18e8Smrg    name += 2;
6002c27c18e8Smrg#endif
6003c43cc173Smrg
6004c27c18e8Smrg  for (base = name; *name; name++)
6005c27c18e8Smrg    if (IS_DIR_SEPARATOR (*name))
6006c27c18e8Smrg      base = name + 1;
6007c27c18e8Smrg  return base;
6008c27c18e8Smrg}
6009c43cc173Smrg
6010c27c18e8Smrgint
6011c27c18e8Smrgcheck_executable (const char *path)
6012c27c18e8Smrg{
6013c27c18e8Smrg  struct stat st;
6014c43cc173Smrg
601537eb1ca1Smrg  lt_debugprintf (__FILE__, __LINE__, "(check_executable): %s\n",
601637eb1ca1Smrg                  nonempty (path));
6017c27c18e8Smrg  if ((!path) || (!*path))
6018c27c18e8Smrg    return 0;
6019c43cc173Smrg
6020c27c18e8Smrg  if ((stat (path, &st) >= 0)
6021c27c18e8Smrg      && (st.st_mode & (S_IXUSR | S_IXGRP | S_IXOTH)))
6022c27c18e8Smrg    return 1;
6023c27c18e8Smrg  else
6024c27c18e8Smrg    return 0;
6025c27c18e8Smrg}
6026c43cc173Smrg
6027c27c18e8Smrgint
6028c27c18e8Smrgmake_executable (const char *path)
6029c27c18e8Smrg{
6030c27c18e8Smrg  int rval = 0;
6031c27c18e8Smrg  struct stat st;
6032c43cc173Smrg
603337eb1ca1Smrg  lt_debugprintf (__FILE__, __LINE__, "(make_executable): %s\n",
603437eb1ca1Smrg                  nonempty (path));
6035c27c18e8Smrg  if ((!path) || (!*path))
6036c27c18e8Smrg    return 0;
6037c43cc173Smrg
6038c27c18e8Smrg  if (stat (path, &st) >= 0)
6039c27c18e8Smrg    {
6040c27c18e8Smrg      rval = chmod (path, st.st_mode | S_IXOTH | S_IXGRP | S_IXUSR);
6041c27c18e8Smrg    }
6042c27c18e8Smrg  return rval;
6043c27c18e8Smrg}
6044c43cc173Smrg
6045c27c18e8Smrg/* Searches for the full path of the wrapper.  Returns
6046c27c18e8Smrg   newly allocated full path name if found, NULL otherwise
6047c27c18e8Smrg   Does not chase symlinks, even on platforms that support them.
6048c27c18e8Smrg*/
6049c27c18e8Smrgchar *
6050c27c18e8Smrgfind_executable (const char *wrapper)
6051c27c18e8Smrg{
6052c27c18e8Smrg  int has_slash = 0;
6053c27c18e8Smrg  const char *p;
6054c27c18e8Smrg  const char *p_next;
6055c27c18e8Smrg  /* static buffer for getcwd */
6056c27c18e8Smrg  char tmp[LT_PATHMAX + 1];
605748e5ce07Smrg  size_t tmp_len;
6058c27c18e8Smrg  char *concat_name;
6059c43cc173Smrg
606037eb1ca1Smrg  lt_debugprintf (__FILE__, __LINE__, "(find_executable): %s\n",
606137eb1ca1Smrg                  nonempty (wrapper));
6062c43cc173Smrg
6063c27c18e8Smrg  if ((wrapper == NULL) || (*wrapper == '\0'))
6064c27c18e8Smrg    return NULL;
6065c43cc173Smrg
6066c27c18e8Smrg  /* Absolute path? */
606748e5ce07Smrg#if defined HAVE_DOS_BASED_FILE_SYSTEM
6068c27c18e8Smrg  if (isalpha ((unsigned char) wrapper[0]) && wrapper[1] == ':')
6069c27c18e8Smrg    {
6070c27c18e8Smrg      concat_name = xstrdup (wrapper);
6071c27c18e8Smrg      if (check_executable (concat_name))
6072c27c18e8Smrg	return concat_name;
6073c27c18e8Smrg      XFREE (concat_name);
6074c27c18e8Smrg    }
6075c27c18e8Smrg  else
6076c27c18e8Smrg    {
6077c27c18e8Smrg#endif
6078c27c18e8Smrg      if (IS_DIR_SEPARATOR (wrapper[0]))
6079c27c18e8Smrg	{
6080c27c18e8Smrg	  concat_name = xstrdup (wrapper);
6081c27c18e8Smrg	  if (check_executable (concat_name))
6082c27c18e8Smrg	    return concat_name;
6083c27c18e8Smrg	  XFREE (concat_name);
6084c27c18e8Smrg	}
608548e5ce07Smrg#if defined HAVE_DOS_BASED_FILE_SYSTEM
6086c27c18e8Smrg    }
6087c27c18e8Smrg#endif
6088c43cc173Smrg
6089c27c18e8Smrg  for (p = wrapper; *p; p++)
6090c27c18e8Smrg    if (*p == '/')
6091c27c18e8Smrg      {
6092c27c18e8Smrg	has_slash = 1;
6093c27c18e8Smrg	break;
6094c27c18e8Smrg      }
6095c27c18e8Smrg  if (!has_slash)
6096c27c18e8Smrg    {
6097c27c18e8Smrg      /* no slashes; search PATH */
6098c27c18e8Smrg      const char *path = getenv ("PATH");
6099c27c18e8Smrg      if (path != NULL)
6100c27c18e8Smrg	{
6101c27c18e8Smrg	  for (p = path; *p; p = p_next)
6102c27c18e8Smrg	    {
6103c27c18e8Smrg	      const char *q;
6104c27c18e8Smrg	      size_t p_len;
6105c27c18e8Smrg	      for (q = p; *q; q++)
6106c27c18e8Smrg		if (IS_PATH_SEPARATOR (*q))
6107c27c18e8Smrg		  break;
610848e5ce07Smrg	      p_len = (size_t) (q - p);
6109c27c18e8Smrg	      p_next = (*q == '\0' ? q : q + 1);
6110c27c18e8Smrg	      if (p_len == 0)
6111c27c18e8Smrg		{
6112c27c18e8Smrg		  /* empty path: current directory */
6113c27c18e8Smrg		  if (getcwd (tmp, LT_PATHMAX) == NULL)
611437eb1ca1Smrg		    lt_fatal (__FILE__, __LINE__, "getcwd failed: %s",
611537eb1ca1Smrg                              nonnull (strerror (errno)));
6116c27c18e8Smrg		  tmp_len = strlen (tmp);
6117c27c18e8Smrg		  concat_name =
6118c27c18e8Smrg		    XMALLOC (char, tmp_len + 1 + strlen (wrapper) + 1);
6119c27c18e8Smrg		  memcpy (concat_name, tmp, tmp_len);
6120c27c18e8Smrg		  concat_name[tmp_len] = '/';
6121c27c18e8Smrg		  strcpy (concat_name + tmp_len + 1, wrapper);
6122c27c18e8Smrg		}
6123c27c18e8Smrg	      else
6124c27c18e8Smrg		{
6125c27c18e8Smrg		  concat_name =
6126c27c18e8Smrg		    XMALLOC (char, p_len + 1 + strlen (wrapper) + 1);
6127c27c18e8Smrg		  memcpy (concat_name, p, p_len);
6128c27c18e8Smrg		  concat_name[p_len] = '/';
6129c27c18e8Smrg		  strcpy (concat_name + p_len + 1, wrapper);
6130c27c18e8Smrg		}
6131c27c18e8Smrg	      if (check_executable (concat_name))
6132c27c18e8Smrg		return concat_name;
6133c27c18e8Smrg	      XFREE (concat_name);
6134c27c18e8Smrg	    }
6135c27c18e8Smrg	}
6136c27c18e8Smrg      /* not found in PATH; assume curdir */
6137c27c18e8Smrg    }
6138c27c18e8Smrg  /* Relative path | not found in path: prepend cwd */
6139c27c18e8Smrg  if (getcwd (tmp, LT_PATHMAX) == NULL)
614037eb1ca1Smrg    lt_fatal (__FILE__, __LINE__, "getcwd failed: %s",
614137eb1ca1Smrg              nonnull (strerror (errno)));
6142c27c18e8Smrg  tmp_len = strlen (tmp);
6143c27c18e8Smrg  concat_name = XMALLOC (char, tmp_len + 1 + strlen (wrapper) + 1);
6144c27c18e8Smrg  memcpy (concat_name, tmp, tmp_len);
6145c27c18e8Smrg  concat_name[tmp_len] = '/';
6146c27c18e8Smrg  strcpy (concat_name + tmp_len + 1, wrapper);
6147c43cc173Smrg
6148c27c18e8Smrg  if (check_executable (concat_name))
6149c27c18e8Smrg    return concat_name;
6150c27c18e8Smrg  XFREE (concat_name);
6151c27c18e8Smrg  return NULL;
6152c27c18e8Smrg}
6153c43cc173Smrg
6154c27c18e8Smrgchar *
6155c27c18e8Smrgchase_symlinks (const char *pathspec)
6156c27c18e8Smrg{
6157c27c18e8Smrg#ifndef S_ISLNK
6158c27c18e8Smrg  return xstrdup (pathspec);
6159c27c18e8Smrg#else
6160c27c18e8Smrg  char buf[LT_PATHMAX];
6161c27c18e8Smrg  struct stat s;
6162c27c18e8Smrg  char *tmp_pathspec = xstrdup (pathspec);
6163c27c18e8Smrg  char *p;
6164c27c18e8Smrg  int has_symlinks = 0;
6165c27c18e8Smrg  while (strlen (tmp_pathspec) && !has_symlinks)
6166c27c18e8Smrg    {
616737eb1ca1Smrg      lt_debugprintf (__FILE__, __LINE__,
616837eb1ca1Smrg		      "checking path component for symlinks: %s\n",
616937eb1ca1Smrg		      tmp_pathspec);
6170c27c18e8Smrg      if (lstat (tmp_pathspec, &s) == 0)
6171c27c18e8Smrg	{
6172c27c18e8Smrg	  if (S_ISLNK (s.st_mode) != 0)
6173c27c18e8Smrg	    {
6174c27c18e8Smrg	      has_symlinks = 1;
6175c27c18e8Smrg	      break;
6176c27c18e8Smrg	    }
6177c43cc173Smrg
6178c27c18e8Smrg	  /* search backwards for last DIR_SEPARATOR */
6179c27c18e8Smrg	  p = tmp_pathspec + strlen (tmp_pathspec) - 1;
6180c27c18e8Smrg	  while ((p > tmp_pathspec) && (!IS_DIR_SEPARATOR (*p)))
6181c27c18e8Smrg	    p--;
6182c27c18e8Smrg	  if ((p == tmp_pathspec) && (!IS_DIR_SEPARATOR (*p)))
6183c27c18e8Smrg	    {
6184c27c18e8Smrg	      /* no more DIR_SEPARATORS left */
6185c27c18e8Smrg	      break;
6186c27c18e8Smrg	    }
6187c27c18e8Smrg	  *p = '\0';
6188c27c18e8Smrg	}
6189c27c18e8Smrg      else
6190c27c18e8Smrg	{
619137eb1ca1Smrg	  lt_fatal (__FILE__, __LINE__,
619237eb1ca1Smrg		    "error accessing file \"%s\": %s",
619337eb1ca1Smrg		    tmp_pathspec, nonnull (strerror (errno)));
6194c27c18e8Smrg	}
6195c27c18e8Smrg    }
6196c27c18e8Smrg  XFREE (tmp_pathspec);
6197c43cc173Smrg
6198c27c18e8Smrg  if (!has_symlinks)
6199c27c18e8Smrg    {
6200c27c18e8Smrg      return xstrdup (pathspec);
6201c27c18e8Smrg    }
6202c43cc173Smrg
6203c27c18e8Smrg  tmp_pathspec = realpath (pathspec, buf);
6204c27c18e8Smrg  if (tmp_pathspec == 0)
6205c27c18e8Smrg    {
620637eb1ca1Smrg      lt_fatal (__FILE__, __LINE__,
620737eb1ca1Smrg		"could not follow symlinks for %s", pathspec);
6208c27c18e8Smrg    }
6209c27c18e8Smrg  return xstrdup (tmp_pathspec);
6210c27c18e8Smrg#endif
6211c27c18e8Smrg}
6212c43cc173Smrg
6213c27c18e8Smrgchar *
6214c27c18e8Smrgstrendzap (char *str, const char *pat)
6215c27c18e8Smrg{
6216c27c18e8Smrg  size_t len, patlen;
6217c43cc173Smrg
6218c27c18e8Smrg  assert (str != NULL);
6219c27c18e8Smrg  assert (pat != NULL);
6220c43cc173Smrg
6221c27c18e8Smrg  len = strlen (str);
6222c27c18e8Smrg  patlen = strlen (pat);
6223c43cc173Smrg
6224c27c18e8Smrg  if (patlen <= len)
6225c27c18e8Smrg    {
6226c27c18e8Smrg      str += len - patlen;
622748e5ce07Smrg      if (STREQ (str, pat))
6228c27c18e8Smrg	*str = '\0';
6229c27c18e8Smrg    }
6230c27c18e8Smrg  return str;
6231c27c18e8Smrg}
6232c43cc173Smrg
623337eb1ca1Smrgvoid
623437eb1ca1Smrglt_debugprintf (const char *file, int line, const char *fmt, ...)
623537eb1ca1Smrg{
623637eb1ca1Smrg  va_list args;
623737eb1ca1Smrg  if (lt_debug)
623837eb1ca1Smrg    {
623937eb1ca1Smrg      (void) fprintf (stderr, "%s:%s:%d: ", program_name, file, line);
624037eb1ca1Smrg      va_start (args, fmt);
624137eb1ca1Smrg      (void) vfprintf (stderr, fmt, args);
624237eb1ca1Smrg      va_end (args);
624337eb1ca1Smrg    }
624437eb1ca1Smrg}
624537eb1ca1Smrg
6246c27c18e8Smrgstatic void
624737eb1ca1Smrglt_error_core (int exit_status, const char *file,
624837eb1ca1Smrg	       int line, const char *mode,
6249c27c18e8Smrg	       const char *message, va_list ap)
6250c27c18e8Smrg{
625137eb1ca1Smrg  fprintf (stderr, "%s:%s:%d: %s: ", program_name, file, line, mode);
6252c27c18e8Smrg  vfprintf (stderr, message, ap);
6253c27c18e8Smrg  fprintf (stderr, ".\n");
6254c43cc173Smrg
6255c27c18e8Smrg  if (exit_status >= 0)
6256c27c18e8Smrg    exit (exit_status);
6257c27c18e8Smrg}
6258c43cc173Smrg
6259c27c18e8Smrgvoid
626037eb1ca1Smrglt_fatal (const char *file, int line, const char *message, ...)
6261c27c18e8Smrg{
6262c27c18e8Smrg  va_list ap;
6263c27c18e8Smrg  va_start (ap, message);
626437eb1ca1Smrg  lt_error_core (EXIT_FAILURE, file, line, "FATAL", message, ap);
6265c27c18e8Smrg  va_end (ap);
6266c27c18e8Smrg}
6267c43cc173Smrg
626837eb1ca1Smrgstatic const char *
626937eb1ca1Smrgnonnull (const char *s)
627037eb1ca1Smrg{
627137eb1ca1Smrg  return s ? s : "(null)";
627237eb1ca1Smrg}
627337eb1ca1Smrg
627437eb1ca1Smrgstatic const char *
627537eb1ca1Smrgnonempty (const char *s)
627637eb1ca1Smrg{
627737eb1ca1Smrg  return (s && !*s) ? "(empty)" : nonnull (s);
627837eb1ca1Smrg}
627937eb1ca1Smrg
6280c27c18e8Smrgvoid
6281c27c18e8Smrglt_setenv (const char *name, const char *value)
6282c27c18e8Smrg{
628337eb1ca1Smrg  lt_debugprintf (__FILE__, __LINE__,
628437eb1ca1Smrg		  "(lt_setenv) setting '%s' to '%s'\n",
628537eb1ca1Smrg                  nonnull (name), nonnull (value));
6286c27c18e8Smrg  {
6287c27c18e8Smrg#ifdef HAVE_SETENV
6288c27c18e8Smrg    /* always make a copy, for consistency with !HAVE_SETENV */
6289c27c18e8Smrg    char *str = xstrdup (value);
6290c27c18e8Smrg    setenv (name, str, 1);
6291c27c18e8Smrg#else
629248e5ce07Smrg    size_t len = strlen (name) + 1 + strlen (value) + 1;
6293c27c18e8Smrg    char *str = XMALLOC (char, len);
6294c27c18e8Smrg    sprintf (str, "%s=%s", name, value);
6295c27c18e8Smrg    if (putenv (str) != EXIT_SUCCESS)
6296c27c18e8Smrg      {
6297c27c18e8Smrg        XFREE (str);
6298c27c18e8Smrg      }
6299c27c18e8Smrg#endif
6300c27c18e8Smrg  }
6301c27c18e8Smrg}
6302c43cc173Smrg
6303c27c18e8Smrgchar *
6304c27c18e8Smrglt_extend_str (const char *orig_value, const char *add, int to_end)
6305c27c18e8Smrg{
6306c27c18e8Smrg  char *new_value;
6307c27c18e8Smrg  if (orig_value && *orig_value)
6308c27c18e8Smrg    {
630948e5ce07Smrg      size_t orig_value_len = strlen (orig_value);
631048e5ce07Smrg      size_t add_len = strlen (add);
6311c27c18e8Smrg      new_value = XMALLOC (char, add_len + orig_value_len + 1);
6312c27c18e8Smrg      if (to_end)
6313c27c18e8Smrg        {
6314c27c18e8Smrg          strcpy (new_value, orig_value);
6315c27c18e8Smrg          strcpy (new_value + orig_value_len, add);
6316c27c18e8Smrg        }
6317c27c18e8Smrg      else
6318c27c18e8Smrg        {
6319c27c18e8Smrg          strcpy (new_value, add);
6320c27c18e8Smrg          strcpy (new_value + add_len, orig_value);
6321c27c18e8Smrg        }
6322c27c18e8Smrg    }
6323c27c18e8Smrg  else
6324c27c18e8Smrg    {
6325c27c18e8Smrg      new_value = xstrdup (add);
6326c27c18e8Smrg    }
6327c27c18e8Smrg  return new_value;
6328c27c18e8Smrg}
6329c43cc173Smrg
6330c27c18e8Smrgvoid
6331c27c18e8Smrglt_update_exe_path (const char *name, const char *value)
6332c27c18e8Smrg{
633337eb1ca1Smrg  lt_debugprintf (__FILE__, __LINE__,
633437eb1ca1Smrg		  "(lt_update_exe_path) modifying '%s' by prepending '%s'\n",
633537eb1ca1Smrg                  nonnull (name), nonnull (value));
6336c43cc173Smrg
6337c27c18e8Smrg  if (name && *name && value && *value)
6338c27c18e8Smrg    {
6339c27c18e8Smrg      char *new_value = lt_extend_str (getenv (name), value, 0);
6340c27c18e8Smrg      /* some systems can't cope with a ':'-terminated path #' */
634148e5ce07Smrg      size_t len = strlen (new_value);
634248e5ce07Smrg      while ((len > 0) && IS_PATH_SEPARATOR (new_value[len-1]))
6343c27c18e8Smrg        {
634448e5ce07Smrg          new_value[--len] = '\0';
6345c27c18e8Smrg        }
6346c27c18e8Smrg      lt_setenv (name, new_value);
6347c27c18e8Smrg      XFREE (new_value);
6348c27c18e8Smrg    }
6349c27c18e8Smrg}
6350c43cc173Smrg
6351c27c18e8Smrgvoid
6352c27c18e8Smrglt_update_lib_path (const char *name, const char *value)
6353c27c18e8Smrg{
635437eb1ca1Smrg  lt_debugprintf (__FILE__, __LINE__,
635537eb1ca1Smrg		  "(lt_update_lib_path) modifying '%s' by prepending '%s'\n",
635637eb1ca1Smrg                  nonnull (name), nonnull (value));
6357c43cc173Smrg
6358c27c18e8Smrg  if (name && *name && value && *value)
6359c27c18e8Smrg    {
6360c27c18e8Smrg      char *new_value = lt_extend_str (getenv (name), value, 0);
6361c27c18e8Smrg      lt_setenv (name, new_value);
6362c27c18e8Smrg      XFREE (new_value);
6363c27c18e8Smrg    }
6364c27c18e8Smrg}
6365c43cc173Smrg
636637eb1ca1SmrgEOF
636737eb1ca1Smrg	    case $host_os in
636837eb1ca1Smrg	      mingw*)
636937eb1ca1Smrg		cat <<"EOF"
637037eb1ca1Smrg
637137eb1ca1Smrg/* Prepares an argument vector before calling spawn().
637237eb1ca1Smrg   Note that spawn() does not by itself call the command interpreter
637337eb1ca1Smrg     (getenv ("COMSPEC") != NULL ? getenv ("COMSPEC") :
637437eb1ca1Smrg      ({ OSVERSIONINFO v; v.dwOSVersionInfoSize = sizeof(OSVERSIONINFO);
637537eb1ca1Smrg         GetVersionEx(&v);
637637eb1ca1Smrg         v.dwPlatformId == VER_PLATFORM_WIN32_NT;
637737eb1ca1Smrg      }) ? "cmd.exe" : "command.com").
637837eb1ca1Smrg   Instead it simply concatenates the arguments, separated by ' ', and calls
637937eb1ca1Smrg   CreateProcess().  We must quote the arguments since Win32 CreateProcess()
638037eb1ca1Smrg   interprets characters like ' ', '\t', '\\', '"' (but not '<' and '>') in a
638137eb1ca1Smrg   special way:
638237eb1ca1Smrg   - Space and tab are interpreted as delimiters. They are not treated as
638337eb1ca1Smrg     delimiters if they are surrounded by double quotes: "...".
638437eb1ca1Smrg   - Unescaped double quotes are removed from the input. Their only effect is
638537eb1ca1Smrg     that within double quotes, space and tab are treated like normal
638637eb1ca1Smrg     characters.
638737eb1ca1Smrg   - Backslashes not followed by double quotes are not special.
638837eb1ca1Smrg   - But 2*n+1 backslashes followed by a double quote become
638937eb1ca1Smrg     n backslashes followed by a double quote (n >= 0):
639037eb1ca1Smrg       \" -> "
639137eb1ca1Smrg       \\\" -> \"
639237eb1ca1Smrg       \\\\\" -> \\"
639337eb1ca1Smrg */
639437eb1ca1Smrg#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"
639537eb1ca1Smrg#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"
639637eb1ca1Smrgchar **
639737eb1ca1Smrgprepare_spawn (char **argv)
639837eb1ca1Smrg{
639937eb1ca1Smrg  size_t argc;
640037eb1ca1Smrg  char **new_argv;
640137eb1ca1Smrg  size_t i;
640237eb1ca1Smrg
640337eb1ca1Smrg  /* Count number of arguments.  */
640437eb1ca1Smrg  for (argc = 0; argv[argc] != NULL; argc++)
640537eb1ca1Smrg    ;
640637eb1ca1Smrg
640737eb1ca1Smrg  /* Allocate new argument vector.  */
640837eb1ca1Smrg  new_argv = XMALLOC (char *, argc + 1);
640937eb1ca1Smrg
641037eb1ca1Smrg  /* Put quoted arguments into the new argument vector.  */
641137eb1ca1Smrg  for (i = 0; i < argc; i++)
641237eb1ca1Smrg    {
641337eb1ca1Smrg      const char *string = argv[i];
641437eb1ca1Smrg
641537eb1ca1Smrg      if (string[0] == '\0')
641637eb1ca1Smrg	new_argv[i] = xstrdup ("\"\"");
641737eb1ca1Smrg      else if (strpbrk (string, SHELL_SPECIAL_CHARS) != NULL)
641837eb1ca1Smrg	{
641937eb1ca1Smrg	  int quote_around = (strpbrk (string, SHELL_SPACE_CHARS) != NULL);
642037eb1ca1Smrg	  size_t length;
642137eb1ca1Smrg	  unsigned int backslashes;
642237eb1ca1Smrg	  const char *s;
642337eb1ca1Smrg	  char *quoted_string;
642437eb1ca1Smrg	  char *p;
642537eb1ca1Smrg
642637eb1ca1Smrg	  length = 0;
642737eb1ca1Smrg	  backslashes = 0;
642837eb1ca1Smrg	  if (quote_around)
642937eb1ca1Smrg	    length++;
643037eb1ca1Smrg	  for (s = string; *s != '\0'; s++)
643137eb1ca1Smrg	    {
643237eb1ca1Smrg	      char c = *s;
643337eb1ca1Smrg	      if (c == '"')
643437eb1ca1Smrg		length += backslashes + 1;
643537eb1ca1Smrg	      length++;
643637eb1ca1Smrg	      if (c == '\\')
643737eb1ca1Smrg		backslashes++;
643837eb1ca1Smrg	      else
643937eb1ca1Smrg		backslashes = 0;
644037eb1ca1Smrg	    }
644137eb1ca1Smrg	  if (quote_around)
644237eb1ca1Smrg	    length += backslashes + 1;
644337eb1ca1Smrg
644437eb1ca1Smrg	  quoted_string = XMALLOC (char, length + 1);
644537eb1ca1Smrg
644637eb1ca1Smrg	  p = quoted_string;
644737eb1ca1Smrg	  backslashes = 0;
644837eb1ca1Smrg	  if (quote_around)
644937eb1ca1Smrg	    *p++ = '"';
645037eb1ca1Smrg	  for (s = string; *s != '\0'; s++)
645137eb1ca1Smrg	    {
645237eb1ca1Smrg	      char c = *s;
645337eb1ca1Smrg	      if (c == '"')
645437eb1ca1Smrg		{
645537eb1ca1Smrg		  unsigned int j;
645637eb1ca1Smrg		  for (j = backslashes + 1; j > 0; j--)
645737eb1ca1Smrg		    *p++ = '\\';
645837eb1ca1Smrg		}
645937eb1ca1Smrg	      *p++ = c;
646037eb1ca1Smrg	      if (c == '\\')
646137eb1ca1Smrg		backslashes++;
646237eb1ca1Smrg	      else
646337eb1ca1Smrg		backslashes = 0;
646437eb1ca1Smrg	    }
646537eb1ca1Smrg	  if (quote_around)
646637eb1ca1Smrg	    {
646737eb1ca1Smrg	      unsigned int j;
646837eb1ca1Smrg	      for (j = backslashes; j > 0; j--)
646937eb1ca1Smrg		*p++ = '\\';
647037eb1ca1Smrg	      *p++ = '"';
647137eb1ca1Smrg	    }
647237eb1ca1Smrg	  *p = '\0';
647337eb1ca1Smrg
647437eb1ca1Smrg	  new_argv[i] = quoted_string;
647537eb1ca1Smrg	}
647637eb1ca1Smrg      else
647737eb1ca1Smrg	new_argv[i] = (char *) string;
647837eb1ca1Smrg    }
647937eb1ca1Smrg  new_argv[argc] = NULL;
648037eb1ca1Smrg
648137eb1ca1Smrg  return new_argv;
648237eb1ca1Smrg}
648337eb1ca1SmrgEOF
648437eb1ca1Smrg		;;
648537eb1ca1Smrg	    esac
648637eb1ca1Smrg
648737eb1ca1Smrg            cat <<"EOF"
648837eb1ca1Smrgvoid lt_dump_script (FILE* f)
648937eb1ca1Smrg{
649037eb1ca1SmrgEOF
649137eb1ca1Smrg	    func_emit_wrapper yes |
6492f1ee322dSmrg	      $SED -n -e '
6493f1ee322dSmrgs/^\(.\{79\}\)\(..*\)/\1\
6494f1ee322dSmrg\2/
6495f1ee322dSmrgh
6496f1ee322dSmrgs/\([\\"]\)/\\\1/g
6497f1ee322dSmrgs/$/\\n/
6498f1ee322dSmrgs/\([^\n]*\).*/  fputs ("\1", f);/p
6499f1ee322dSmrgg
6500f1ee322dSmrgD'
650137eb1ca1Smrg            cat <<"EOF"
650237eb1ca1Smrg}
6503c27c18e8SmrgEOF
6504c27c18e8Smrg}
6505c27c18e8Smrg# end: func_emit_cwrapperexe_src
6506c43cc173Smrg
650737eb1ca1Smrg# func_win32_import_lib_p ARG
650837eb1ca1Smrg# True if ARG is an import lib, as indicated by $file_magic_cmd
650937eb1ca1Smrgfunc_win32_import_lib_p ()
651037eb1ca1Smrg{
651148e5ce07Smrg    $debug_cmd
651248e5ce07Smrg
651337eb1ca1Smrg    case `eval $file_magic_cmd \"\$1\" 2>/dev/null | $SED -e 10q` in
651437eb1ca1Smrg    *import*) : ;;
651537eb1ca1Smrg    *) false ;;
651637eb1ca1Smrg    esac
651737eb1ca1Smrg}
651837eb1ca1Smrg
651948e5ce07Smrg# func_suncc_cstd_abi
652048e5ce07Smrg# !!ONLY CALL THIS FOR SUN CC AFTER $compile_command IS FULLY EXPANDED!!
652148e5ce07Smrg# Several compiler flags select an ABI that is incompatible with the
652248e5ce07Smrg# Cstd library. Avoid specifying it if any are in CXXFLAGS.
652348e5ce07Smrgfunc_suncc_cstd_abi ()
652448e5ce07Smrg{
652548e5ce07Smrg    $debug_cmd
652648e5ce07Smrg
652748e5ce07Smrg    case " $compile_command " in
652848e5ce07Smrg    *" -compat=g "*|*\ -std=c++[0-9][0-9]\ *|*" -library=stdcxx4 "*|*" -library=stlport4 "*)
652948e5ce07Smrg      suncc_use_cstd_abi=no
653048e5ce07Smrg      ;;
653148e5ce07Smrg    *)
653248e5ce07Smrg      suncc_use_cstd_abi=yes
653348e5ce07Smrg      ;;
653448e5ce07Smrg    esac
653548e5ce07Smrg}
653648e5ce07Smrg
6537c27c18e8Smrg# func_mode_link arg...
6538c27c18e8Smrgfunc_mode_link ()
6539c27c18e8Smrg{
654048e5ce07Smrg    $debug_cmd
654148e5ce07Smrg
6542c27c18e8Smrg    case $host in
6543c27c18e8Smrg    *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-cegcc*)
6544c27c18e8Smrg      # It is impossible to link a dll without this setting, and
6545c27c18e8Smrg      # we shouldn't force the makefile maintainer to figure out
654648e5ce07Smrg      # what system we are compiling for in order to pass an extra
6547c27c18e8Smrg      # flag for every libtool invocation.
6548c27c18e8Smrg      # allow_undefined=no
6549c43cc173Smrg
6550c27c18e8Smrg      # FIXME: Unfortunately, there are problems with the above when trying
655148e5ce07Smrg      # to make a dll that has undefined symbols, in which case not
6552c27c18e8Smrg      # even a static library is built.  For now, we need to specify
6553c27c18e8Smrg      # -no-undefined on the libtool link line when we can be certain
6554c27c18e8Smrg      # that all symbols are satisfied, otherwise we get a static library.
6555c27c18e8Smrg      allow_undefined=yes
6556c27c18e8Smrg      ;;
6557c27c18e8Smrg    *)
6558c27c18e8Smrg      allow_undefined=yes
6559c27c18e8Smrg      ;;
6560c27c18e8Smrg    esac
6561c27c18e8Smrg    libtool_args=$nonopt
6562c27c18e8Smrg    base_compile="$nonopt $@"
6563c27c18e8Smrg    compile_command=$nonopt
6564c27c18e8Smrg    finalize_command=$nonopt
6565c43cc173Smrg
6566c27c18e8Smrg    compile_rpath=
6567c27c18e8Smrg    finalize_rpath=
6568c27c18e8Smrg    compile_shlibpath=
6569c27c18e8Smrg    finalize_shlibpath=
6570c27c18e8Smrg    convenience=
6571c27c18e8Smrg    old_convenience=
6572c27c18e8Smrg    deplibs=
6573c27c18e8Smrg    old_deplibs=
6574c27c18e8Smrg    compiler_flags=
6575c27c18e8Smrg    linker_flags=
6576c27c18e8Smrg    dllsearchpath=
6577c27c18e8Smrg    lib_search_path=`pwd`
6578c27c18e8Smrg    inst_prefix_dir=
6579c27c18e8Smrg    new_inherited_linker_flags=
6580c43cc173Smrg
6581c27c18e8Smrg    avoid_version=no
658237eb1ca1Smrg    bindir=
6583c27c18e8Smrg    dlfiles=
6584c27c18e8Smrg    dlprefiles=
6585c27c18e8Smrg    dlself=no
6586c27c18e8Smrg    export_dynamic=no
6587c27c18e8Smrg    export_symbols=
6588c27c18e8Smrg    export_symbols_regex=
6589c27c18e8Smrg    generated=
6590c27c18e8Smrg    libobjs=
6591c27c18e8Smrg    ltlibs=
6592c27c18e8Smrg    module=no
6593c27c18e8Smrg    no_install=no
6594c27c18e8Smrg    objs=
659548e5ce07Smrg    os2dllname=
6596c27c18e8Smrg    non_pic_objects=
6597c27c18e8Smrg    precious_files_regex=
6598c27c18e8Smrg    prefer_static_libs=no
659948e5ce07Smrg    preload=false
6600c27c18e8Smrg    prev=
6601c27c18e8Smrg    prevarg=
6602c27c18e8Smrg    release=
6603c27c18e8Smrg    rpath=
6604c27c18e8Smrg    xrpath=
6605c27c18e8Smrg    perm_rpath=
6606c27c18e8Smrg    temp_rpath=
6607c27c18e8Smrg    thread_safe=no
6608c27c18e8Smrg    vinfo=
6609c27c18e8Smrg    vinfo_number=no
6610c27c18e8Smrg    weak_libs=
661148e5ce07Smrg    single_module=$wl-single_module
6612c27c18e8Smrg    func_infer_tag $base_compile
6613c43cc173Smrg
6614c27c18e8Smrg    # We need to know -static, to get the right output filenames.
6615c27c18e8Smrg    for arg
6616c27c18e8Smrg    do
6617c27c18e8Smrg      case $arg in
6618c27c18e8Smrg      -shared)
661948e5ce07Smrg	test yes != "$build_libtool_libs" \
662048e5ce07Smrg	  && func_fatal_configuration "cannot build a shared library"
6621c27c18e8Smrg	build_old_libs=no
6622c27c18e8Smrg	break
6623c27c18e8Smrg	;;
6624c27c18e8Smrg      -all-static | -static | -static-libtool-libs)
6625c27c18e8Smrg	case $arg in
6626c27c18e8Smrg	-all-static)
662748e5ce07Smrg	  if test yes = "$build_libtool_libs" && test -z "$link_static_flag"; then
6628c27c18e8Smrg	    func_warning "complete static linking is impossible in this configuration"
6629c27c18e8Smrg	  fi
6630c27c18e8Smrg	  if test -n "$link_static_flag"; then
6631c27c18e8Smrg	    dlopen_self=$dlopen_self_static
6632c27c18e8Smrg	  fi
6633c27c18e8Smrg	  prefer_static_libs=yes
6634c27c18e8Smrg	  ;;
6635c27c18e8Smrg	-static)
6636c27c18e8Smrg	  if test -z "$pic_flag" && test -n "$link_static_flag"; then
6637c27c18e8Smrg	    dlopen_self=$dlopen_self_static
6638c27c18e8Smrg	  fi
6639c27c18e8Smrg	  prefer_static_libs=built
6640c27c18e8Smrg	  ;;
6641c27c18e8Smrg	-static-libtool-libs)
6642c27c18e8Smrg	  if test -z "$pic_flag" && test -n "$link_static_flag"; then
6643c27c18e8Smrg	    dlopen_self=$dlopen_self_static
6644c27c18e8Smrg	  fi
6645c27c18e8Smrg	  prefer_static_libs=yes
6646c27c18e8Smrg	  ;;
6647c27c18e8Smrg	esac
6648c27c18e8Smrg	build_libtool_libs=no
6649c27c18e8Smrg	build_old_libs=yes
6650c27c18e8Smrg	break
6651c43cc173Smrg	;;
6652c43cc173Smrg      esac
6653c27c18e8Smrg    done
6654c43cc173Smrg
6655c27c18e8Smrg    # See if our shared archives depend on static archives.
6656c27c18e8Smrg    test -n "$old_archive_from_new_cmds" && build_old_libs=yes
6657c43cc173Smrg
6658c27c18e8Smrg    # Go through the arguments, transforming them on the way.
6659c27c18e8Smrg    while test "$#" -gt 0; do
666048e5ce07Smrg      arg=$1
6661c27c18e8Smrg      shift
6662c27c18e8Smrg      func_quote_for_eval "$arg"
6663c27c18e8Smrg      qarg=$func_quote_for_eval_unquoted_result
6664c27c18e8Smrg      func_append libtool_args " $func_quote_for_eval_result"
6665c43cc173Smrg
6666c27c18e8Smrg      # If the previous option needs an argument, assign it.
6667c27c18e8Smrg      if test -n "$prev"; then
6668c27c18e8Smrg	case $prev in
6669c27c18e8Smrg	output)
6670c27c18e8Smrg	  func_append compile_command " @OUTPUT@"
6671c27c18e8Smrg	  func_append finalize_command " @OUTPUT@"
6672c43cc173Smrg	  ;;
6673c43cc173Smrg	esac
6674c43cc173Smrg
6675c27c18e8Smrg	case $prev in
667637eb1ca1Smrg	bindir)
667748e5ce07Smrg	  bindir=$arg
667837eb1ca1Smrg	  prev=
667937eb1ca1Smrg	  continue
668037eb1ca1Smrg	  ;;
6681c27c18e8Smrg	dlfiles|dlprefiles)
668248e5ce07Smrg	  $preload || {
6683c27c18e8Smrg	    # Add the symbol object into the linking commands.
6684c27c18e8Smrg	    func_append compile_command " @SYMFILE@"
6685c27c18e8Smrg	    func_append finalize_command " @SYMFILE@"
668648e5ce07Smrg	    preload=:
668748e5ce07Smrg	  }
6688c27c18e8Smrg	  case $arg in
6689c27c18e8Smrg	  *.la | *.lo) ;;  # We handle these cases below.
6690c27c18e8Smrg	  force)
669148e5ce07Smrg	    if test no = "$dlself"; then
6692c27c18e8Smrg	      dlself=needless
6693c27c18e8Smrg	      export_dynamic=yes
6694c27c18e8Smrg	    fi
6695c27c18e8Smrg	    prev=
6696c27c18e8Smrg	    continue
6697c27c18e8Smrg	    ;;
6698c27c18e8Smrg	  self)
669948e5ce07Smrg	    if test dlprefiles = "$prev"; then
6700c27c18e8Smrg	      dlself=yes
670148e5ce07Smrg	    elif test dlfiles = "$prev" && test yes != "$dlopen_self"; then
6702c27c18e8Smrg	      dlself=yes
6703c43cc173Smrg	    else
6704c27c18e8Smrg	      dlself=needless
6705c27c18e8Smrg	      export_dynamic=yes
6706c43cc173Smrg	    fi
6707c27c18e8Smrg	    prev=
6708c27c18e8Smrg	    continue
6709c27c18e8Smrg	    ;;
6710c27c18e8Smrg	  *)
671148e5ce07Smrg	    if test dlfiles = "$prev"; then
6712b789ec8aSmrg	      func_append dlfiles " $arg"
6713c27c18e8Smrg	    else
6714b789ec8aSmrg	      func_append dlprefiles " $arg"
6715c27c18e8Smrg	    fi
6716c27c18e8Smrg	    prev=
6717c27c18e8Smrg	    continue
6718c27c18e8Smrg	    ;;
6719c43cc173Smrg	  esac
6720c43cc173Smrg	  ;;
6721c27c18e8Smrg	expsyms)
672248e5ce07Smrg	  export_symbols=$arg
6723c27c18e8Smrg	  test -f "$arg" \
672448e5ce07Smrg	    || func_fatal_error "symbol file '$arg' does not exist"
6725c27c18e8Smrg	  prev=
6726c27c18e8Smrg	  continue
6727c27c18e8Smrg	  ;;
6728c27c18e8Smrg	expsyms_regex)
672948e5ce07Smrg	  export_symbols_regex=$arg
6730c27c18e8Smrg	  prev=
6731c27c18e8Smrg	  continue
6732c27c18e8Smrg	  ;;
6733c27c18e8Smrg	framework)
6734c27c18e8Smrg	  case $host in
6735c27c18e8Smrg	    *-*-darwin*)
6736c27c18e8Smrg	      case "$deplibs " in
6737c27c18e8Smrg		*" $qarg.ltframework "*) ;;
6738b789ec8aSmrg		*) func_append deplibs " $qarg.ltframework" # this is fixed later
6739c27c18e8Smrg		   ;;
6740c43cc173Smrg	      esac
6741c27c18e8Smrg	      ;;
6742c43cc173Smrg	  esac
6743c27c18e8Smrg	  prev=
6744c27c18e8Smrg	  continue
6745c27c18e8Smrg	  ;;
6746c27c18e8Smrg	inst_prefix)
674748e5ce07Smrg	  inst_prefix_dir=$arg
674848e5ce07Smrg	  prev=
674948e5ce07Smrg	  continue
675048e5ce07Smrg	  ;;
675148e5ce07Smrg	mllvm)
675248e5ce07Smrg	  # Clang does not use LLVM to link, so we can simply discard any
675348e5ce07Smrg	  # '-mllvm $arg' options when doing the link step.
6754c27c18e8Smrg	  prev=
6755c27c18e8Smrg	  continue
6756c27c18e8Smrg	  ;;
6757c27c18e8Smrg	objectlist)
6758c27c18e8Smrg	  if test -f "$arg"; then
6759c27c18e8Smrg	    save_arg=$arg
6760c27c18e8Smrg	    moreargs=
6761c27c18e8Smrg	    for fil in `cat "$save_arg"`
6762c27c18e8Smrg	    do
6763b789ec8aSmrg#	      func_append moreargs " $fil"
6764c27c18e8Smrg	      arg=$fil
6765c27c18e8Smrg	      # A libtool-controlled object.
6766c43cc173Smrg
6767c27c18e8Smrg	      # Check to see that this really is a libtool object.
6768c27c18e8Smrg	      if func_lalib_unsafe_p "$arg"; then
6769c27c18e8Smrg		pic_object=
6770c27c18e8Smrg		non_pic_object=
6771c43cc173Smrg
6772c27c18e8Smrg		# Read the .lo file
6773c27c18e8Smrg		func_source "$arg"
6774c43cc173Smrg
6775c27c18e8Smrg		if test -z "$pic_object" ||
6776c27c18e8Smrg		   test -z "$non_pic_object" ||
677748e5ce07Smrg		   test none = "$pic_object" &&
677848e5ce07Smrg		   test none = "$non_pic_object"; then
677948e5ce07Smrg		  func_fatal_error "cannot find name of object for '$arg'"
6780c27c18e8Smrg		fi
6781c43cc173Smrg
6782c27c18e8Smrg		# Extract subdirectory from the argument.
6783c27c18e8Smrg		func_dirname "$arg" "/" ""
678448e5ce07Smrg		xdir=$func_dirname_result
6785c43cc173Smrg
678648e5ce07Smrg		if test none != "$pic_object"; then
6787c27c18e8Smrg		  # Prepend the subdirectory the object is found in.
678848e5ce07Smrg		  pic_object=$xdir$pic_object
6789c43cc173Smrg
679048e5ce07Smrg		  if test dlfiles = "$prev"; then
679148e5ce07Smrg		    if test yes = "$build_libtool_libs" && test yes = "$dlopen_support"; then
6792b789ec8aSmrg		      func_append dlfiles " $pic_object"
6793c27c18e8Smrg		      prev=
6794c27c18e8Smrg		      continue
6795c27c18e8Smrg		    else
6796c27c18e8Smrg		      # If libtool objects are unsupported, then we need to preload.
6797c27c18e8Smrg		      prev=dlprefiles
6798c27c18e8Smrg		    fi
6799c27c18e8Smrg		  fi
6800c43cc173Smrg
6801c27c18e8Smrg		  # CHECK ME:  I think I busted this.  -Ossama
680248e5ce07Smrg		  if test dlprefiles = "$prev"; then
6803c27c18e8Smrg		    # Preload the old-style object.
6804b789ec8aSmrg		    func_append dlprefiles " $pic_object"
6805c27c18e8Smrg		    prev=
6806c27c18e8Smrg		  fi
6807c43cc173Smrg
6808c27c18e8Smrg		  # A PIC object.
6809c27c18e8Smrg		  func_append libobjs " $pic_object"
681048e5ce07Smrg		  arg=$pic_object
6811c27c18e8Smrg		fi
6812c43cc173Smrg
6813c27c18e8Smrg		# Non-PIC object.
681448e5ce07Smrg		if test none != "$non_pic_object"; then
6815c27c18e8Smrg		  # Prepend the subdirectory the object is found in.
681648e5ce07Smrg		  non_pic_object=$xdir$non_pic_object
6817c43cc173Smrg
6818c27c18e8Smrg		  # A standard non-PIC object
6819c27c18e8Smrg		  func_append non_pic_objects " $non_pic_object"
682048e5ce07Smrg		  if test -z "$pic_object" || test none = "$pic_object"; then
682148e5ce07Smrg		    arg=$non_pic_object
6822c27c18e8Smrg		  fi
6823c27c18e8Smrg		else
6824c27c18e8Smrg		  # If the PIC object exists, use it instead.
6825c27c18e8Smrg		  # $xdir was prepended to $pic_object above.
682648e5ce07Smrg		  non_pic_object=$pic_object
6827c27c18e8Smrg		  func_append non_pic_objects " $non_pic_object"
6828c27c18e8Smrg		fi
6829c27c18e8Smrg	      else
6830c27c18e8Smrg		# Only an error if not doing a dry-run.
6831c27c18e8Smrg		if $opt_dry_run; then
6832c27c18e8Smrg		  # Extract subdirectory from the argument.
6833c27c18e8Smrg		  func_dirname "$arg" "/" ""
683448e5ce07Smrg		  xdir=$func_dirname_result
6835c27c18e8Smrg
6836c27c18e8Smrg		  func_lo2o "$arg"
6837c27c18e8Smrg		  pic_object=$xdir$objdir/$func_lo2o_result
6838c27c18e8Smrg		  non_pic_object=$xdir$func_lo2o_result
6839c27c18e8Smrg		  func_append libobjs " $pic_object"
6840c27c18e8Smrg		  func_append non_pic_objects " $non_pic_object"
6841c27c18e8Smrg	        else
684248e5ce07Smrg		  func_fatal_error "'$arg' is not a valid libtool object"
6843c27c18e8Smrg		fi
6844c27c18e8Smrg	      fi
6845c43cc173Smrg	    done
6846c27c18e8Smrg	  else
684748e5ce07Smrg	    func_fatal_error "link input file '$arg' does not exist"
6848c43cc173Smrg	  fi
6849c27c18e8Smrg	  arg=$save_arg
6850c27c18e8Smrg	  prev=
6851c27c18e8Smrg	  continue
6852c27c18e8Smrg	  ;;
685348e5ce07Smrg	os2dllname)
685448e5ce07Smrg	  os2dllname=$arg
685548e5ce07Smrg	  prev=
685648e5ce07Smrg	  continue
685748e5ce07Smrg	  ;;
6858c27c18e8Smrg	precious_regex)
685948e5ce07Smrg	  precious_files_regex=$arg
6860c27c18e8Smrg	  prev=
6861c27c18e8Smrg	  continue
6862c27c18e8Smrg	  ;;
6863c27c18e8Smrg	release)
686448e5ce07Smrg	  release=-$arg
6865c27c18e8Smrg	  prev=
6866c27c18e8Smrg	  continue
6867c27c18e8Smrg	  ;;
6868c27c18e8Smrg	rpath | xrpath)
6869c27c18e8Smrg	  # We need an absolute path.
6870c27c18e8Smrg	  case $arg in
6871c27c18e8Smrg	  [\\/]* | [A-Za-z]:[\\/]*) ;;
6872c27c18e8Smrg	  *)
6873c27c18e8Smrg	    func_fatal_error "only absolute run-paths are allowed"
6874c27c18e8Smrg	    ;;
6875c43cc173Smrg	  esac
687648e5ce07Smrg	  if test rpath = "$prev"; then
6877c27c18e8Smrg	    case "$rpath " in
6878c27c18e8Smrg	    *" $arg "*) ;;
6879b789ec8aSmrg	    *) func_append rpath " $arg" ;;
6880c27c18e8Smrg	    esac
6881c27c18e8Smrg	  else
6882c27c18e8Smrg	    case "$xrpath " in
6883c27c18e8Smrg	    *" $arg "*) ;;
6884b789ec8aSmrg	    *) func_append xrpath " $arg" ;;
6885c27c18e8Smrg	    esac
6886c27c18e8Smrg	  fi
6887c27c18e8Smrg	  prev=
6888c27c18e8Smrg	  continue
6889c27c18e8Smrg	  ;;
6890c27c18e8Smrg	shrext)
689148e5ce07Smrg	  shrext_cmds=$arg
6892c27c18e8Smrg	  prev=
6893c27c18e8Smrg	  continue
6894c27c18e8Smrg	  ;;
6895c27c18e8Smrg	weak)
6896b789ec8aSmrg	  func_append weak_libs " $arg"
6897c27c18e8Smrg	  prev=
6898c27c18e8Smrg	  continue
6899c27c18e8Smrg	  ;;
6900c27c18e8Smrg	xcclinker)
6901b789ec8aSmrg	  func_append linker_flags " $qarg"
6902b789ec8aSmrg	  func_append compiler_flags " $qarg"
6903c27c18e8Smrg	  prev=
6904c27c18e8Smrg	  func_append compile_command " $qarg"
6905c27c18e8Smrg	  func_append finalize_command " $qarg"
6906c27c18e8Smrg	  continue
6907c27c18e8Smrg	  ;;
6908c27c18e8Smrg	xcompiler)
6909b789ec8aSmrg	  func_append compiler_flags " $qarg"
6910c27c18e8Smrg	  prev=
6911c27c18e8Smrg	  func_append compile_command " $qarg"
6912c27c18e8Smrg	  func_append finalize_command " $qarg"
6913c27c18e8Smrg	  continue
6914c27c18e8Smrg	  ;;
6915c27c18e8Smrg	xlinker)
6916b789ec8aSmrg	  func_append linker_flags " $qarg"
6917b789ec8aSmrg	  func_append compiler_flags " $wl$qarg"
6918c27c18e8Smrg	  prev=
6919c27c18e8Smrg	  func_append compile_command " $wl$qarg"
6920c27c18e8Smrg	  func_append finalize_command " $wl$qarg"
6921c27c18e8Smrg	  continue
6922c43cc173Smrg	  ;;
6923c43cc173Smrg	*)
6924c27c18e8Smrg	  eval "$prev=\"\$arg\""
6925c27c18e8Smrg	  prev=
6926c27c18e8Smrg	  continue
6927c43cc173Smrg	  ;;
6928c43cc173Smrg	esac
6929c27c18e8Smrg      fi # test -n "$prev"
6930c43cc173Smrg
693148e5ce07Smrg      prevarg=$arg
6932c43cc173Smrg
6933c27c18e8Smrg      case $arg in
6934c27c18e8Smrg      -all-static)
6935c27c18e8Smrg	if test -n "$link_static_flag"; then
6936c27c18e8Smrg	  # See comment for -static flag below, for more details.
6937c27c18e8Smrg	  func_append compile_command " $link_static_flag"
6938c27c18e8Smrg	  func_append finalize_command " $link_static_flag"
6939c43cc173Smrg	fi
6940c27c18e8Smrg	continue
6941c27c18e8Smrg	;;
6942c43cc173Smrg
6943c27c18e8Smrg      -allow-undefined)
6944c27c18e8Smrg	# FIXME: remove this flag sometime in the future.
694548e5ce07Smrg	func_fatal_error "'-allow-undefined' must not be used because it is the default"
6946c27c18e8Smrg	;;
6947c43cc173Smrg
6948c27c18e8Smrg      -avoid-version)
6949c27c18e8Smrg	avoid_version=yes
6950c27c18e8Smrg	continue
6951c27c18e8Smrg	;;
6952c43cc173Smrg
695337eb1ca1Smrg      -bindir)
695437eb1ca1Smrg	prev=bindir
695537eb1ca1Smrg	continue
695637eb1ca1Smrg	;;
695737eb1ca1Smrg
6958c27c18e8Smrg      -dlopen)
6959c27c18e8Smrg	prev=dlfiles
6960c27c18e8Smrg	continue
6961c27c18e8Smrg	;;
6962c43cc173Smrg
6963c27c18e8Smrg      -dlpreopen)
6964c27c18e8Smrg	prev=dlprefiles
6965c27c18e8Smrg	continue
6966c27c18e8Smrg	;;
6967c43cc173Smrg
6968c27c18e8Smrg      -export-dynamic)
6969c27c18e8Smrg	export_dynamic=yes
6970c27c18e8Smrg	continue
6971c27c18e8Smrg	;;
6972c43cc173Smrg
6973c27c18e8Smrg      -export-symbols | -export-symbols-regex)
6974c27c18e8Smrg	if test -n "$export_symbols" || test -n "$export_symbols_regex"; then
6975c27c18e8Smrg	  func_fatal_error "more than one -exported-symbols argument is not allowed"
6976c27c18e8Smrg	fi
697748e5ce07Smrg	if test X-export-symbols = "X$arg"; then
6978c27c18e8Smrg	  prev=expsyms
6979c43cc173Smrg	else
6980c27c18e8Smrg	  prev=expsyms_regex
6981c43cc173Smrg	fi
6982c27c18e8Smrg	continue
6983c27c18e8Smrg	;;
6984c43cc173Smrg
6985c27c18e8Smrg      -framework)
6986c27c18e8Smrg	prev=framework
6987c27c18e8Smrg	continue
6988c27c18e8Smrg	;;
6989c43cc173Smrg
6990c27c18e8Smrg      -inst-prefix-dir)
6991c27c18e8Smrg	prev=inst_prefix
6992c27c18e8Smrg	continue
6993c27c18e8Smrg	;;
6994c43cc173Smrg
6995c27c18e8Smrg      # The native IRIX linker understands -LANG:*, -LIST:* and -LNO:*
6996c27c18e8Smrg      # so, if we see these flags be careful not to treat them like -L
6997c27c18e8Smrg      -L[A-Z][A-Z]*:*)
6998c27c18e8Smrg	case $with_gcc/$host in
6999c27c18e8Smrg	no/*-*-irix* | /*-*-irix*)
7000c27c18e8Smrg	  func_append compile_command " $arg"
7001c27c18e8Smrg	  func_append finalize_command " $arg"
7002c27c18e8Smrg	  ;;
7003c27c18e8Smrg	esac
7004c27c18e8Smrg	continue
7005c27c18e8Smrg	;;
7006c43cc173Smrg
7007c27c18e8Smrg      -L*)
7008b789ec8aSmrg	func_stripname "-L" '' "$arg"
7009b789ec8aSmrg	if test -z "$func_stripname_result"; then
7010c27c18e8Smrg	  if test "$#" -gt 0; then
701148e5ce07Smrg	    func_fatal_error "require no space between '-L' and '$1'"
7012c43cc173Smrg	  else
701348e5ce07Smrg	    func_fatal_error "need path for '-L' option"
7014c43cc173Smrg	  fi
7015c27c18e8Smrg	fi
7016b789ec8aSmrg	func_resolve_sysroot "$func_stripname_result"
7017b789ec8aSmrg	dir=$func_resolve_sysroot_result
7018c27c18e8Smrg	# We need an absolute path.
7019c27c18e8Smrg	case $dir in
7020c27c18e8Smrg	[\\/]* | [A-Za-z]:[\\/]*) ;;
7021c27c18e8Smrg	*)
7022c27c18e8Smrg	  absdir=`cd "$dir" && pwd`
7023c27c18e8Smrg	  test -z "$absdir" && \
702448e5ce07Smrg	    func_fatal_error "cannot determine absolute directory name of '$dir'"
702548e5ce07Smrg	  dir=$absdir
7026c27c18e8Smrg	  ;;
7027c43cc173Smrg	esac
7028c27c18e8Smrg	case "$deplibs " in
7029b789ec8aSmrg	*" -L$dir "* | *" $arg "*)
7030b789ec8aSmrg	  # Will only happen for absolute or sysroot arguments
7031b789ec8aSmrg	  ;;
7032c27c18e8Smrg	*)
7033b789ec8aSmrg	  # Preserve sysroot, but never include relative directories
7034b789ec8aSmrg	  case $dir in
7035b789ec8aSmrg	    [\\/]* | [A-Za-z]:[\\/]* | =*) func_append deplibs " $arg" ;;
7036b789ec8aSmrg	    *) func_append deplibs " -L$dir" ;;
7037b789ec8aSmrg	  esac
7038b789ec8aSmrg	  func_append lib_search_path " $dir"
7039c27c18e8Smrg	  ;;
7040c43cc173Smrg	esac
7041c43cc173Smrg	case $host in
7042c27c18e8Smrg	*-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-cegcc*)
704337eb1ca1Smrg	  testbindir=`$ECHO "$dir" | $SED 's*/lib$*/bin*'`
7044c27c18e8Smrg	  case :$dllsearchpath: in
7045c27c18e8Smrg	  *":$dir:"*) ;;
7046c27c18e8Smrg	  ::) dllsearchpath=$dir;;
7047b789ec8aSmrg	  *) func_append dllsearchpath ":$dir";;
7048c27c18e8Smrg	  esac
7049c27c18e8Smrg	  case :$dllsearchpath: in
7050c27c18e8Smrg	  *":$testbindir:"*) ;;
7051c27c18e8Smrg	  ::) dllsearchpath=$testbindir;;
7052b789ec8aSmrg	  *) func_append dllsearchpath ":$testbindir";;
7053c27c18e8Smrg	  esac
7054c27c18e8Smrg	  ;;
7055c43cc173Smrg	esac
7056c27c18e8Smrg	continue
7057c27c18e8Smrg	;;
7058c43cc173Smrg
7059c27c18e8Smrg      -l*)
706048e5ce07Smrg	if test X-lc = "X$arg" || test X-lm = "X$arg"; then
7061c27c18e8Smrg	  case $host in
706237eb1ca1Smrg	  *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-beos* | *-cegcc* | *-*-haiku*)
7063c27c18e8Smrg	    # These systems don't actually have a C or math library (as such)
7064c27c18e8Smrg	    continue
7065c27c18e8Smrg	    ;;
7066c27c18e8Smrg	  *-*-os2*)
7067c27c18e8Smrg	    # These systems don't actually have a C library (as such)
706848e5ce07Smrg	    test X-lc = "X$arg" && continue
7069c27c18e8Smrg	    ;;
707048e5ce07Smrg	  *-*-openbsd* | *-*-freebsd* | *-*-dragonfly* | *-*-bitrig*)
7071c27c18e8Smrg	    # Do not include libc due to us having libc/libc_r.
707248e5ce07Smrg	    test X-lc = "X$arg" && continue
7073c27c18e8Smrg	    ;;
7074c27c18e8Smrg	  *-*-rhapsody* | *-*-darwin1.[012])
7075c27c18e8Smrg	    # Rhapsody C and math libraries are in the System framework
7076b789ec8aSmrg	    func_append deplibs " System.ltframework"
7077c27c18e8Smrg	    continue
7078c27c18e8Smrg	    ;;
7079c27c18e8Smrg	  *-*-sco3.2v5* | *-*-sco5v6*)
7080c27c18e8Smrg	    # Causes problems with __ctype
708148e5ce07Smrg	    test X-lc = "X$arg" && continue
7082c27c18e8Smrg	    ;;
7083c27c18e8Smrg	  *-*-sysv4.2uw2* | *-*-sysv5* | *-*-unixware* | *-*-OpenUNIX*)
7084c27c18e8Smrg	    # Compiler inserts libc in the correct place for threads to work
708548e5ce07Smrg	    test X-lc = "X$arg" && continue
7086c27c18e8Smrg	    ;;
7087c27c18e8Smrg	  esac
708848e5ce07Smrg	elif test X-lc_r = "X$arg"; then
7089c27c18e8Smrg	 case $host in
709048e5ce07Smrg	 *-*-openbsd* | *-*-freebsd* | *-*-dragonfly* | *-*-bitrig*)
7091c27c18e8Smrg	   # Do not include libc_r directly, use -pthread flag.
7092c27c18e8Smrg	   continue
7093c27c18e8Smrg	   ;;
7094c27c18e8Smrg	 esac
7095c27c18e8Smrg	fi
7096b789ec8aSmrg	func_append deplibs " $arg"
7097c27c18e8Smrg	continue
7098c27c18e8Smrg	;;
7099c43cc173Smrg
710048e5ce07Smrg      -mllvm)
710148e5ce07Smrg	prev=mllvm
710248e5ce07Smrg	continue
710348e5ce07Smrg	;;
710448e5ce07Smrg
7105c27c18e8Smrg      -module)
7106c27c18e8Smrg	module=yes
7107c27c18e8Smrg	continue
7108c27c18e8Smrg	;;
7109c43cc173Smrg
7110c27c18e8Smrg      # Tru64 UNIX uses -model [arg] to determine the layout of C++
7111c27c18e8Smrg      # classes, name mangling, and exception handling.
7112c27c18e8Smrg      # Darwin uses the -arch flag to determine output architecture.
7113b789ec8aSmrg      -model|-arch|-isysroot|--sysroot)
7114b789ec8aSmrg	func_append compiler_flags " $arg"
7115c27c18e8Smrg	func_append compile_command " $arg"
7116c27c18e8Smrg	func_append finalize_command " $arg"
7117c27c18e8Smrg	prev=xcompiler
7118c27c18e8Smrg	continue
7119c27c18e8Smrg	;;
7120c43cc173Smrg
7121f1ee322dSmrg      -mt|-mthreads|-kthread|-Kthread|-pthread|-pthreads|--thread-safe \
7122f1ee322dSmrg      |-threads|-fopenmp|-openmp|-mp|-xopenmp|-omp|-qsmp=*)
7123b789ec8aSmrg	func_append compiler_flags " $arg"
7124c27c18e8Smrg	func_append compile_command " $arg"
7125c27c18e8Smrg	func_append finalize_command " $arg"
7126c27c18e8Smrg	case "$new_inherited_linker_flags " in
7127c27c18e8Smrg	    *" $arg "*) ;;
7128b789ec8aSmrg	    * ) func_append new_inherited_linker_flags " $arg" ;;
7129c27c18e8Smrg	esac
7130c27c18e8Smrg	continue
7131c27c18e8Smrg	;;
7132c43cc173Smrg
7133c27c18e8Smrg      -multi_module)
713448e5ce07Smrg	single_module=$wl-multi_module
7135c27c18e8Smrg	continue
7136c27c18e8Smrg	;;
7137c43cc173Smrg
7138c27c18e8Smrg      -no-fast-install)
7139c27c18e8Smrg	fast_install=no
7140c27c18e8Smrg	continue
7141c27c18e8Smrg	;;
7142c43cc173Smrg
7143c27c18e8Smrg      -no-install)
7144c27c18e8Smrg	case $host in
7145c27c18e8Smrg	*-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-*-darwin* | *-cegcc*)
7146c27c18e8Smrg	  # The PATH hackery in wrapper scripts is required on Windows
7147c27c18e8Smrg	  # and Darwin in order for the loader to find any dlls it needs.
714848e5ce07Smrg	  func_warning "'-no-install' is ignored for $host"
714948e5ce07Smrg	  func_warning "assuming '-no-fast-install' instead"
7150c27c18e8Smrg	  fast_install=no
7151c27c18e8Smrg	  ;;
7152c27c18e8Smrg	*) no_install=yes ;;
7153c27c18e8Smrg	esac
7154c27c18e8Smrg	continue
7155c27c18e8Smrg	;;
7156c43cc173Smrg
7157c27c18e8Smrg      -no-undefined)
7158c27c18e8Smrg	allow_undefined=no
7159c27c18e8Smrg	continue
7160c27c18e8Smrg	;;
7161c43cc173Smrg
7162c27c18e8Smrg      -objectlist)
7163c27c18e8Smrg	prev=objectlist
7164c27c18e8Smrg	continue
7165c27c18e8Smrg	;;
7166c43cc173Smrg
716748e5ce07Smrg      -os2dllname)
716848e5ce07Smrg	prev=os2dllname
716948e5ce07Smrg	continue
717048e5ce07Smrg	;;
717148e5ce07Smrg
7172c27c18e8Smrg      -o) prev=output ;;
7173c43cc173Smrg
7174c27c18e8Smrg      -precious-files-regex)
7175c27c18e8Smrg	prev=precious_regex
7176c27c18e8Smrg	continue
7177c27c18e8Smrg	;;
7178c43cc173Smrg
7179c27c18e8Smrg      -release)
7180c27c18e8Smrg	prev=release
7181c27c18e8Smrg	continue
7182c27c18e8Smrg	;;
7183c43cc173Smrg
7184c27c18e8Smrg      -rpath)
7185c27c18e8Smrg	prev=rpath
7186c27c18e8Smrg	continue
7187c27c18e8Smrg	;;
7188c43cc173Smrg
7189c27c18e8Smrg      -R)
7190c27c18e8Smrg	prev=xrpath
7191c27c18e8Smrg	continue
7192c27c18e8Smrg	;;
7193c43cc173Smrg
7194c27c18e8Smrg      -R*)
7195c27c18e8Smrg	func_stripname '-R' '' "$arg"
7196c27c18e8Smrg	dir=$func_stripname_result
7197c27c18e8Smrg	# We need an absolute path.
7198c27c18e8Smrg	case $dir in
7199c27c18e8Smrg	[\\/]* | [A-Za-z]:[\\/]*) ;;
7200b789ec8aSmrg	=*)
7201b789ec8aSmrg	  func_stripname '=' '' "$dir"
7202b789ec8aSmrg	  dir=$lt_sysroot$func_stripname_result
7203b789ec8aSmrg	  ;;
7204c27c18e8Smrg	*)
7205c27c18e8Smrg	  func_fatal_error "only absolute run-paths are allowed"
7206c27c18e8Smrg	  ;;
7207c27c18e8Smrg	esac
7208c27c18e8Smrg	case "$xrpath " in
7209c27c18e8Smrg	*" $dir "*) ;;
7210b789ec8aSmrg	*) func_append xrpath " $dir" ;;
7211c27c18e8Smrg	esac
7212c27c18e8Smrg	continue
7213c27c18e8Smrg	;;
7214c43cc173Smrg
7215c27c18e8Smrg      -shared)
7216c27c18e8Smrg	# The effects of -shared are defined in a previous loop.
7217c27c18e8Smrg	continue
7218c27c18e8Smrg	;;
7219c43cc173Smrg
7220c27c18e8Smrg      -shrext)
7221c27c18e8Smrg	prev=shrext
7222c27c18e8Smrg	continue
7223c27c18e8Smrg	;;
7224c43cc173Smrg
7225c27c18e8Smrg      -static | -static-libtool-libs)
7226c27c18e8Smrg	# The effects of -static are defined in a previous loop.
7227c27c18e8Smrg	# We used to do the same as -all-static on platforms that
7228c27c18e8Smrg	# didn't have a PIC flag, but the assumption that the effects
7229c27c18e8Smrg	# would be equivalent was wrong.  It would break on at least
7230c27c18e8Smrg	# Digital Unix and AIX.
7231c27c18e8Smrg	continue
7232c27c18e8Smrg	;;
7233c43cc173Smrg
7234c27c18e8Smrg      -thread-safe)
7235c27c18e8Smrg	thread_safe=yes
7236c27c18e8Smrg	continue
7237c27c18e8Smrg	;;
7238c43cc173Smrg
7239c27c18e8Smrg      -version-info)
7240c27c18e8Smrg	prev=vinfo
7241c27c18e8Smrg	continue
7242c27c18e8Smrg	;;
7243c43cc173Smrg
7244c27c18e8Smrg      -version-number)
7245c27c18e8Smrg	prev=vinfo
7246c27c18e8Smrg	vinfo_number=yes
7247c27c18e8Smrg	continue
7248c27c18e8Smrg	;;
7249c43cc173Smrg
7250c27c18e8Smrg      -weak)
7251c27c18e8Smrg        prev=weak
7252c27c18e8Smrg	continue
7253c27c18e8Smrg	;;
7254c43cc173Smrg
7255c27c18e8Smrg      -Wc,*)
7256c27c18e8Smrg	func_stripname '-Wc,' '' "$arg"
7257c27c18e8Smrg	args=$func_stripname_result
7258c27c18e8Smrg	arg=
725948e5ce07Smrg	save_ifs=$IFS; IFS=,
7260c27c18e8Smrg	for flag in $args; do
726148e5ce07Smrg	  IFS=$save_ifs
7262c27c18e8Smrg          func_quote_for_eval "$flag"
7263b789ec8aSmrg	  func_append arg " $func_quote_for_eval_result"
7264b789ec8aSmrg	  func_append compiler_flags " $func_quote_for_eval_result"
7265c27c18e8Smrg	done
726648e5ce07Smrg	IFS=$save_ifs
7267c27c18e8Smrg	func_stripname ' ' '' "$arg"
7268c27c18e8Smrg	arg=$func_stripname_result
7269c27c18e8Smrg	;;
7270c43cc173Smrg
7271c27c18e8Smrg      -Wl,*)
7272c27c18e8Smrg	func_stripname '-Wl,' '' "$arg"
7273c27c18e8Smrg	args=$func_stripname_result
7274c27c18e8Smrg	arg=
727548e5ce07Smrg	save_ifs=$IFS; IFS=,
7276c27c18e8Smrg	for flag in $args; do
727748e5ce07Smrg	  IFS=$save_ifs
7278c27c18e8Smrg          func_quote_for_eval "$flag"
7279b789ec8aSmrg	  func_append arg " $wl$func_quote_for_eval_result"
7280b789ec8aSmrg	  func_append compiler_flags " $wl$func_quote_for_eval_result"
7281b789ec8aSmrg	  func_append linker_flags " $func_quote_for_eval_result"
7282c27c18e8Smrg	done
728348e5ce07Smrg	IFS=$save_ifs
7284c27c18e8Smrg	func_stripname ' ' '' "$arg"
7285c27c18e8Smrg	arg=$func_stripname_result
7286c27c18e8Smrg	;;
7287c43cc173Smrg
7288c27c18e8Smrg      -Xcompiler)
7289c27c18e8Smrg	prev=xcompiler
7290c27c18e8Smrg	continue
7291c27c18e8Smrg	;;
7292c43cc173Smrg
7293c27c18e8Smrg      -Xlinker)
7294c27c18e8Smrg	prev=xlinker
7295c27c18e8Smrg	continue
7296c27c18e8Smrg	;;
7297c43cc173Smrg
7298c27c18e8Smrg      -XCClinker)
7299c27c18e8Smrg	prev=xcclinker
7300c27c18e8Smrg	continue
7301c27c18e8Smrg	;;
7302c43cc173Smrg
7303c27c18e8Smrg      # -msg_* for osf cc
7304c27c18e8Smrg      -msg_*)
7305c27c18e8Smrg	func_quote_for_eval "$arg"
730648e5ce07Smrg	arg=$func_quote_for_eval_result
7307c27c18e8Smrg	;;
7308c43cc173Smrg
730937eb1ca1Smrg      # Flags to be passed through unchanged, with rationale:
731037eb1ca1Smrg      # -64, -mips[0-9]      enable 64-bit mode for the SGI compiler
731137eb1ca1Smrg      # -r[0-9][0-9]*        specify processor for the SGI compiler
731237eb1ca1Smrg      # -xarch=*, -xtarget=* enable 64-bit mode for the Sun compiler
731337eb1ca1Smrg      # +DA*, +DD*           enable 64-bit mode for the HP compiler
731437eb1ca1Smrg      # -q*                  compiler args for the IBM compiler
731537eb1ca1Smrg      # -m*, -t[45]*, -txscale* architecture-specific flags for GCC
731637eb1ca1Smrg      # -F/path              path to uninstalled frameworks, gcc on darwin
731737eb1ca1Smrg      # -p, -pg, --coverage, -fprofile-*  profiling flags for GCC
731848e5ce07Smrg      # -fstack-protector*   stack protector flags for GCC
731937eb1ca1Smrg      # @file                GCC response files
732037eb1ca1Smrg      # -tp=*                Portland pgcc target processor selection
7321b789ec8aSmrg      # --sysroot=*          for sysroot support
732248e5ce07Smrg      # -O*, -g*, -flto*, -fwhopr*, -fuse-linker-plugin GCC link-time optimization
73234940c694Smrg      # -specs=*             GCC specs files
732448e5ce07Smrg      # -stdlib=*            select c++ std lib with clang
73254940c694Smrg      # -fsanitize=*         Clang/GCC memory and address sanitizer
73264940c694Smrg      # -fuse-ld=*           Linker select flags for GCC
7327c27c18e8Smrg      -64|-mips[0-9]|-r[0-9][0-9]*|-xarch=*|-xtarget=*|+DA*|+DD*|-q*|-m*| \
7328b789ec8aSmrg      -t[45]*|-txscale*|-p|-pg|--coverage|-fprofile-*|-F*|@*|-tp=*|--sysroot=*| \
73294940c694Smrg      -O*|-g*|-flto*|-fwhopr*|-fuse-linker-plugin|-fstack-protector*|-stdlib=*| \
73304940c694Smrg      -specs=*|-fsanitize=*|-fuse-ld=*)
7331c27c18e8Smrg        func_quote_for_eval "$arg"
733248e5ce07Smrg	arg=$func_quote_for_eval_result
7333c27c18e8Smrg        func_append compile_command " $arg"
7334c27c18e8Smrg        func_append finalize_command " $arg"
7335b789ec8aSmrg        func_append compiler_flags " $arg"
7336c27c18e8Smrg        continue
7337c27c18e8Smrg        ;;
7338c43cc173Smrg
733948e5ce07Smrg      -Z*)
734048e5ce07Smrg        if test os2 = "`expr $host : '.*\(os2\)'`"; then
734148e5ce07Smrg          # OS/2 uses -Zxxx to specify OS/2-specific options
734248e5ce07Smrg	  compiler_flags="$compiler_flags $arg"
734348e5ce07Smrg	  func_append compile_command " $arg"
734448e5ce07Smrg	  func_append finalize_command " $arg"
734548e5ce07Smrg	  case $arg in
734648e5ce07Smrg	  -Zlinker | -Zstack)
734748e5ce07Smrg	    prev=xcompiler
734848e5ce07Smrg	    ;;
734948e5ce07Smrg	  esac
735048e5ce07Smrg	  continue
735148e5ce07Smrg        else
735248e5ce07Smrg	  # Otherwise treat like 'Some other compiler flag' below
735348e5ce07Smrg	  func_quote_for_eval "$arg"
735448e5ce07Smrg	  arg=$func_quote_for_eval_result
735548e5ce07Smrg        fi
735648e5ce07Smrg	;;
735748e5ce07Smrg
7358c27c18e8Smrg      # Some other compiler flag.
7359c27c18e8Smrg      -* | +*)
7360c27c18e8Smrg        func_quote_for_eval "$arg"
736148e5ce07Smrg	arg=$func_quote_for_eval_result
7362c27c18e8Smrg	;;
7363c43cc173Smrg
7364c27c18e8Smrg      *.$objext)
7365c27c18e8Smrg	# A standard object.
7366b789ec8aSmrg	func_append objs " $arg"
7367c27c18e8Smrg	;;
7368c43cc173Smrg
7369c27c18e8Smrg      *.lo)
7370c27c18e8Smrg	# A libtool-controlled object.
7371c43cc173Smrg
7372c27c18e8Smrg	# Check to see that this really is a libtool object.
7373c27c18e8Smrg	if func_lalib_unsafe_p "$arg"; then
7374c27c18e8Smrg	  pic_object=
7375c27c18e8Smrg	  non_pic_object=
7376c43cc173Smrg
7377c27c18e8Smrg	  # Read the .lo file
7378c27c18e8Smrg	  func_source "$arg"
7379c43cc173Smrg
7380c27c18e8Smrg	  if test -z "$pic_object" ||
7381c27c18e8Smrg	     test -z "$non_pic_object" ||
738248e5ce07Smrg	     test none = "$pic_object" &&
738348e5ce07Smrg	     test none = "$non_pic_object"; then
738448e5ce07Smrg	    func_fatal_error "cannot find name of object for '$arg'"
7385c27c18e8Smrg	  fi
7386c43cc173Smrg
7387c27c18e8Smrg	  # Extract subdirectory from the argument.
7388c27c18e8Smrg	  func_dirname "$arg" "/" ""
738948e5ce07Smrg	  xdir=$func_dirname_result
7390c43cc173Smrg
739148e5ce07Smrg	  test none = "$pic_object" || {
7392c27c18e8Smrg	    # Prepend the subdirectory the object is found in.
739348e5ce07Smrg	    pic_object=$xdir$pic_object
7394c43cc173Smrg
739548e5ce07Smrg	    if test dlfiles = "$prev"; then
739648e5ce07Smrg	      if test yes = "$build_libtool_libs" && test yes = "$dlopen_support"; then
7397b789ec8aSmrg		func_append dlfiles " $pic_object"
7398c27c18e8Smrg		prev=
7399c27c18e8Smrg		continue
7400c27c18e8Smrg	      else
7401c27c18e8Smrg		# If libtool objects are unsupported, then we need to preload.
7402c27c18e8Smrg		prev=dlprefiles
7403c27c18e8Smrg	      fi
7404c27c18e8Smrg	    fi
7405c43cc173Smrg
7406c27c18e8Smrg	    # CHECK ME:  I think I busted this.  -Ossama
740748e5ce07Smrg	    if test dlprefiles = "$prev"; then
7408c27c18e8Smrg	      # Preload the old-style object.
7409b789ec8aSmrg	      func_append dlprefiles " $pic_object"
7410c27c18e8Smrg	      prev=
7411c27c18e8Smrg	    fi
7412c43cc173Smrg
7413c27c18e8Smrg	    # A PIC object.
7414c27c18e8Smrg	    func_append libobjs " $pic_object"
741548e5ce07Smrg	    arg=$pic_object
741648e5ce07Smrg	  }
7417c43cc173Smrg
7418c27c18e8Smrg	  # Non-PIC object.
741948e5ce07Smrg	  if test none != "$non_pic_object"; then
7420c27c18e8Smrg	    # Prepend the subdirectory the object is found in.
742148e5ce07Smrg	    non_pic_object=$xdir$non_pic_object
7422c43cc173Smrg
7423c27c18e8Smrg	    # A standard non-PIC object
7424c27c18e8Smrg	    func_append non_pic_objects " $non_pic_object"
742548e5ce07Smrg	    if test -z "$pic_object" || test none = "$pic_object"; then
742648e5ce07Smrg	      arg=$non_pic_object
7427c27c18e8Smrg	    fi
7428c27c18e8Smrg	  else
7429c27c18e8Smrg	    # If the PIC object exists, use it instead.
7430c27c18e8Smrg	    # $xdir was prepended to $pic_object above.
743148e5ce07Smrg	    non_pic_object=$pic_object
7432c27c18e8Smrg	    func_append non_pic_objects " $non_pic_object"
7433c27c18e8Smrg	  fi
7434c27c18e8Smrg	else
7435c27c18e8Smrg	  # Only an error if not doing a dry-run.
7436c27c18e8Smrg	  if $opt_dry_run; then
7437c27c18e8Smrg	    # Extract subdirectory from the argument.
7438c27c18e8Smrg	    func_dirname "$arg" "/" ""
743948e5ce07Smrg	    xdir=$func_dirname_result
7440c27c18e8Smrg
7441c27c18e8Smrg	    func_lo2o "$arg"
7442c27c18e8Smrg	    pic_object=$xdir$objdir/$func_lo2o_result
7443c27c18e8Smrg	    non_pic_object=$xdir$func_lo2o_result
7444c27c18e8Smrg	    func_append libobjs " $pic_object"
7445c27c18e8Smrg	    func_append non_pic_objects " $non_pic_object"
7446c27c18e8Smrg	  else
744748e5ce07Smrg	    func_fatal_error "'$arg' is not a valid libtool object"
7448c27c18e8Smrg	  fi
7449c27c18e8Smrg	fi
7450c27c18e8Smrg	;;
7451c43cc173Smrg
7452c27c18e8Smrg      *.$libext)
7453c27c18e8Smrg	# An archive.
7454b789ec8aSmrg	func_append deplibs " $arg"
7455b789ec8aSmrg	func_append old_deplibs " $arg"
7456c27c18e8Smrg	continue
7457c27c18e8Smrg	;;
7458c43cc173Smrg
7459c27c18e8Smrg      *.la)
7460c27c18e8Smrg	# A libtool-controlled library.
7461c43cc173Smrg
7462b789ec8aSmrg	func_resolve_sysroot "$arg"
746348e5ce07Smrg	if test dlfiles = "$prev"; then
7464c27c18e8Smrg	  # This library was specified with -dlopen.
7465b789ec8aSmrg	  func_append dlfiles " $func_resolve_sysroot_result"
7466c27c18e8Smrg	  prev=
746748e5ce07Smrg	elif test dlprefiles = "$prev"; then
7468c27c18e8Smrg	  # The library was specified with -dlpreopen.
7469b789ec8aSmrg	  func_append dlprefiles " $func_resolve_sysroot_result"
7470c27c18e8Smrg	  prev=
7471c27c18e8Smrg	else
7472b789ec8aSmrg	  func_append deplibs " $func_resolve_sysroot_result"
7473c27c18e8Smrg	fi
7474c27c18e8Smrg	continue
7475c27c18e8Smrg	;;
7476c43cc173Smrg
7477c27c18e8Smrg      # Some other compiler argument.
7478c27c18e8Smrg      *)
7479c27c18e8Smrg	# Unknown arguments in both finalize_command and compile_command need
7480c27c18e8Smrg	# to be aesthetically quoted because they are evaled later.
7481c27c18e8Smrg	func_quote_for_eval "$arg"
748248e5ce07Smrg	arg=$func_quote_for_eval_result
7483c27c18e8Smrg	;;
7484c27c18e8Smrg      esac # arg
7485c43cc173Smrg
7486c27c18e8Smrg      # Now actually substitute the argument into the commands.
7487c27c18e8Smrg      if test -n "$arg"; then
7488c27c18e8Smrg	func_append compile_command " $arg"
7489c27c18e8Smrg	func_append finalize_command " $arg"
7490c27c18e8Smrg      fi
7491c27c18e8Smrg    done # argument parsing loop
749221e67964Smrg
7493c27c18e8Smrg    test -n "$prev" && \
749448e5ce07Smrg      func_fatal_help "the '$prevarg' option requires an argument"
7495c43cc173Smrg
749648e5ce07Smrg    if test yes = "$export_dynamic" && test -n "$export_dynamic_flag_spec"; then
7497c27c18e8Smrg      eval arg=\"$export_dynamic_flag_spec\"
7498c27c18e8Smrg      func_append compile_command " $arg"
7499c27c18e8Smrg      func_append finalize_command " $arg"
7500c27c18e8Smrg    fi
7501c43cc173Smrg
7502c27c18e8Smrg    oldlibs=
7503c27c18e8Smrg    # calculate the name of the file, without its directory
7504c27c18e8Smrg    func_basename "$output"
750548e5ce07Smrg    outputname=$func_basename_result
750648e5ce07Smrg    libobjs_save=$libobjs
7507c27c18e8Smrg
7508c27c18e8Smrg    if test -n "$shlibpath_var"; then
7509c27c18e8Smrg      # get the directories listed in $shlibpath_var
751048e5ce07Smrg      eval shlib_search_path=\`\$ECHO \"\$$shlibpath_var\" \| \$SED \'s/:/ /g\'\`
7511c43cc173Smrg    else
7512c27c18e8Smrg      shlib_search_path=
7513c43cc173Smrg    fi
7514c27c18e8Smrg    eval sys_lib_search_path=\"$sys_lib_search_path_spec\"
7515c27c18e8Smrg    eval sys_lib_dlsearch_path=\"$sys_lib_dlsearch_path_spec\"
7516c43cc173Smrg
751748e5ce07Smrg    # Definition is injected by LT_CONFIG during libtool generation.
751848e5ce07Smrg    func_munge_path_list sys_lib_dlsearch_path "$LT_SYS_LIBRARY_PATH"
751948e5ce07Smrg
7520c27c18e8Smrg    func_dirname "$output" "/" ""
752148e5ce07Smrg    output_objdir=$func_dirname_result$objdir
7522b789ec8aSmrg    func_to_tool_file "$output_objdir/"
7523b789ec8aSmrg    tool_output_objdir=$func_to_tool_file_result
7524c27c18e8Smrg    # Create the object directory.
7525c27c18e8Smrg    func_mkdir_p "$output_objdir"
7526c43cc173Smrg
7527c27c18e8Smrg    # Determine the type of output
7528c27c18e8Smrg    case $output in
7529c27c18e8Smrg    "")
7530c27c18e8Smrg      func_fatal_help "you must specify an output file"
7531c27c18e8Smrg      ;;
7532c27c18e8Smrg    *.$libext) linkmode=oldlib ;;
7533c27c18e8Smrg    *.lo | *.$objext) linkmode=obj ;;
7534c27c18e8Smrg    *.la) linkmode=lib ;;
7535c27c18e8Smrg    *) linkmode=prog ;; # Anything else should be a program.
7536c27c18e8Smrg    esac
7537c27c18e8Smrg
7538c27c18e8Smrg    specialdeplibs=
7539c27c18e8Smrg
7540c27c18e8Smrg    libs=
7541c27c18e8Smrg    # Find all interdependent deplibs by searching for libraries
7542c27c18e8Smrg    # that are linked more than once (e.g. -la -lb -la)
7543c27c18e8Smrg    for deplib in $deplibs; do
754448e5ce07Smrg      if $opt_preserve_dup_deps; then
7545c27c18e8Smrg	case "$libs " in
7546b789ec8aSmrg	*" $deplib "*) func_append specialdeplibs " $deplib" ;;
7547c27c18e8Smrg	esac
7548c27c18e8Smrg      fi
7549b789ec8aSmrg      func_append libs " $deplib"
7550c27c18e8Smrg    done
7551c27c18e8Smrg
755248e5ce07Smrg    if test lib = "$linkmode"; then
7553c27c18e8Smrg      libs="$predeps $libs $compiler_lib_search_path $postdeps"
7554c27c18e8Smrg
7555c27c18e8Smrg      # Compute libraries that are listed more than once in $predeps
7556c27c18e8Smrg      # $postdeps and mark them as special (i.e., whose duplicates are
7557c27c18e8Smrg      # not to be eliminated).
7558c27c18e8Smrg      pre_post_deps=
7559c27c18e8Smrg      if $opt_duplicate_compiler_generated_deps; then
7560c27c18e8Smrg	for pre_post_dep in $predeps $postdeps; do
7561c27c18e8Smrg	  case "$pre_post_deps " in
7562b789ec8aSmrg	  *" $pre_post_dep "*) func_append specialdeplibs " $pre_post_deps" ;;
7563c27c18e8Smrg	  esac
7564b789ec8aSmrg	  func_append pre_post_deps " $pre_post_dep"
7565c27c18e8Smrg	done
7566c27c18e8Smrg      fi
7567c27c18e8Smrg      pre_post_deps=
7568c27c18e8Smrg    fi
7569c27c18e8Smrg
7570c27c18e8Smrg    deplibs=
7571c27c18e8Smrg    newdependency_libs=
7572c27c18e8Smrg    newlib_search_path=
7573c27c18e8Smrg    need_relink=no # whether we're linking any uninstalled libtool libraries
7574c27c18e8Smrg    notinst_deplibs= # not-installed libtool libraries
7575c27c18e8Smrg    notinst_path= # paths that contain not-installed libtool libraries
7576c27c18e8Smrg
7577c27c18e8Smrg    case $linkmode in
7578c27c18e8Smrg    lib)
7579c27c18e8Smrg	passes="conv dlpreopen link"
7580c27c18e8Smrg	for file in $dlfiles $dlprefiles; do
7581c27c18e8Smrg	  case $file in
7582c27c18e8Smrg	  *.la) ;;
7583c27c18e8Smrg	  *)
758448e5ce07Smrg	    func_fatal_help "libraries can '-dlopen' only libtool libraries: $file"
7585c27c18e8Smrg	    ;;
7586c27c18e8Smrg	  esac
7587c27c18e8Smrg	done
7588c27c18e8Smrg	;;
7589c27c18e8Smrg    prog)
7590c27c18e8Smrg	compile_deplibs=
7591c27c18e8Smrg	finalize_deplibs=
759248e5ce07Smrg	alldeplibs=false
7593c27c18e8Smrg	newdlfiles=
7594c27c18e8Smrg	newdlprefiles=
7595c27c18e8Smrg	passes="conv scan dlopen dlpreopen link"
7596c27c18e8Smrg	;;
7597c27c18e8Smrg    *)  passes="conv"
7598c27c18e8Smrg	;;
7599c27c18e8Smrg    esac
7600c27c18e8Smrg
7601c27c18e8Smrg    for pass in $passes; do
7602c27c18e8Smrg      # The preopen pass in lib mode reverses $deplibs; put it back here
7603c27c18e8Smrg      # so that -L comes before libs that need it for instance...
760448e5ce07Smrg      if test lib,link = "$linkmode,$pass"; then
7605c27c18e8Smrg	## FIXME: Find the place where the list is rebuilt in the wrong
7606c27c18e8Smrg	##        order, and fix it there properly
7607c27c18e8Smrg        tmp_deplibs=
7608c27c18e8Smrg	for deplib in $deplibs; do
7609c27c18e8Smrg	  tmp_deplibs="$deplib $tmp_deplibs"
7610c27c18e8Smrg	done
761148e5ce07Smrg	deplibs=$tmp_deplibs
7612c27c18e8Smrg      fi
7613c27c18e8Smrg
761448e5ce07Smrg      if test lib,link = "$linkmode,$pass" ||
761548e5ce07Smrg	 test prog,scan = "$linkmode,$pass"; then
761648e5ce07Smrg	libs=$deplibs
7617c27c18e8Smrg	deplibs=
7618c27c18e8Smrg      fi
761948e5ce07Smrg      if test prog = "$linkmode"; then
7620c27c18e8Smrg	case $pass in
762148e5ce07Smrg	dlopen) libs=$dlfiles ;;
762248e5ce07Smrg	dlpreopen) libs=$dlprefiles ;;
762348e5ce07Smrg	link) libs="$deplibs %DEPLIBS% $dependency_libs" ;;
7624c27c18e8Smrg	esac
7625c27c18e8Smrg      fi
762648e5ce07Smrg      if test lib,dlpreopen = "$linkmode,$pass"; then
7627c27c18e8Smrg	# Collect and forward deplibs of preopened libtool libs
7628c27c18e8Smrg	for lib in $dlprefiles; do
7629c27c18e8Smrg	  # Ignore non-libtool-libs
7630c27c18e8Smrg	  dependency_libs=
7631b789ec8aSmrg	  func_resolve_sysroot "$lib"
7632c27c18e8Smrg	  case $lib in
7633b789ec8aSmrg	  *.la)	func_source "$func_resolve_sysroot_result" ;;
7634c27c18e8Smrg	  esac
7635c27c18e8Smrg
7636c27c18e8Smrg	  # Collect preopened libtool deplibs, except any this library
7637c27c18e8Smrg	  # has declared as weak libs
7638c27c18e8Smrg	  for deplib in $dependency_libs; do
763937eb1ca1Smrg	    func_basename "$deplib"
764037eb1ca1Smrg            deplib_base=$func_basename_result
7641c27c18e8Smrg	    case " $weak_libs " in
7642c27c18e8Smrg	    *" $deplib_base "*) ;;
7643b789ec8aSmrg	    *) func_append deplibs " $deplib" ;;
7644c27c18e8Smrg	    esac
7645c27c18e8Smrg	  done
7646c27c18e8Smrg	done
764748e5ce07Smrg	libs=$dlprefiles
7648c27c18e8Smrg      fi
764948e5ce07Smrg      if test dlopen = "$pass"; then
7650c27c18e8Smrg	# Collect dlpreopened libraries
765148e5ce07Smrg	save_deplibs=$deplibs
7652c27c18e8Smrg	deplibs=
7653c27c18e8Smrg      fi
7654c27c18e8Smrg
7655c27c18e8Smrg      for deplib in $libs; do
7656c27c18e8Smrg	lib=
765748e5ce07Smrg	found=false
7658c27c18e8Smrg	case $deplib in
7659f1ee322dSmrg	-mt|-mthreads|-kthread|-Kthread|-pthread|-pthreads|--thread-safe \
7660f1ee322dSmrg        |-threads|-fopenmp|-openmp|-mp|-xopenmp|-omp|-qsmp=*)
766148e5ce07Smrg	  if test prog,link = "$linkmode,$pass"; then
7662c27c18e8Smrg	    compile_deplibs="$deplib $compile_deplibs"
7663c27c18e8Smrg	    finalize_deplibs="$deplib $finalize_deplibs"
7664c27c18e8Smrg	  else
7665b789ec8aSmrg	    func_append compiler_flags " $deplib"
766648e5ce07Smrg	    if test lib = "$linkmode"; then
7667c27c18e8Smrg		case "$new_inherited_linker_flags " in
7668c27c18e8Smrg		    *" $deplib "*) ;;
7669b789ec8aSmrg		    * ) func_append new_inherited_linker_flags " $deplib" ;;
7670c27c18e8Smrg		esac
7671c27c18e8Smrg	    fi
7672c27c18e8Smrg	  fi
7673c27c18e8Smrg	  continue
7674c27c18e8Smrg	  ;;
7675c27c18e8Smrg	-l*)
767648e5ce07Smrg	  if test lib != "$linkmode" && test prog != "$linkmode"; then
767748e5ce07Smrg	    func_warning "'-l' is ignored for archives/objects"
7678c27c18e8Smrg	    continue
7679c27c18e8Smrg	  fi
7680c27c18e8Smrg	  func_stripname '-l' '' "$deplib"
7681c27c18e8Smrg	  name=$func_stripname_result
768248e5ce07Smrg	  if test lib = "$linkmode"; then
7683c27c18e8Smrg	    searchdirs="$newlib_search_path $lib_search_path $compiler_lib_search_dirs $sys_lib_search_path $shlib_search_path"
7684c27c18e8Smrg	  else
7685c27c18e8Smrg	    searchdirs="$newlib_search_path $lib_search_path $sys_lib_search_path $shlib_search_path"
7686c27c18e8Smrg	  fi
7687c27c18e8Smrg	  for searchdir in $searchdirs; do
7688c27c18e8Smrg	    for search_ext in .la $std_shrext .so .a; do
7689c27c18e8Smrg	      # Search the libtool library
769048e5ce07Smrg	      lib=$searchdir/lib$name$search_ext
7691c27c18e8Smrg	      if test -f "$lib"; then
769248e5ce07Smrg		if test .la = "$search_ext"; then
769348e5ce07Smrg		  found=:
7694c27c18e8Smrg		else
769548e5ce07Smrg		  found=false
7696c27c18e8Smrg		fi
7697c27c18e8Smrg		break 2
7698c27c18e8Smrg	      fi
7699c27c18e8Smrg	    done
7700c27c18e8Smrg	  done
770148e5ce07Smrg	  if $found; then
770248e5ce07Smrg	    # deplib is a libtool library
7703c27c18e8Smrg	    # If $allow_libtool_libs_with_static_runtimes && $deplib is a stdlib,
7704c27c18e8Smrg	    # We need to do some special things here, and not later.
770548e5ce07Smrg	    if test yes = "$allow_libtool_libs_with_static_runtimes"; then
7706c27c18e8Smrg	      case " $predeps $postdeps " in
7707c27c18e8Smrg	      *" $deplib "*)
7708c27c18e8Smrg		if func_lalib_p "$lib"; then
7709c27c18e8Smrg		  library_names=
7710c27c18e8Smrg		  old_library=
7711c27c18e8Smrg		  func_source "$lib"
7712c27c18e8Smrg		  for l in $old_library $library_names; do
771348e5ce07Smrg		    ll=$l
7714c27c18e8Smrg		  done
771548e5ce07Smrg		  if test "X$ll" = "X$old_library"; then # only static version available
771648e5ce07Smrg		    found=false
7717c27c18e8Smrg		    func_dirname "$lib" "" "."
771848e5ce07Smrg		    ladir=$func_dirname_result
7719c27c18e8Smrg		    lib=$ladir/$old_library
772048e5ce07Smrg		    if test prog,link = "$linkmode,$pass"; then
7721c27c18e8Smrg		      compile_deplibs="$deplib $compile_deplibs"
7722c27c18e8Smrg		      finalize_deplibs="$deplib $finalize_deplibs"
7723c27c18e8Smrg		    else
7724c27c18e8Smrg		      deplibs="$deplib $deplibs"
772548e5ce07Smrg		      test lib = "$linkmode" && newdependency_libs="$deplib $newdependency_libs"
7726c27c18e8Smrg		    fi
7727c27c18e8Smrg		    continue
7728c27c18e8Smrg		  fi
7729c27c18e8Smrg		fi
7730c27c18e8Smrg		;;
7731c27c18e8Smrg	      *) ;;
7732c27c18e8Smrg	      esac
7733c27c18e8Smrg	    fi
773448e5ce07Smrg	  else
773548e5ce07Smrg	    # deplib doesn't seem to be a libtool library
773648e5ce07Smrg	    if test prog,link = "$linkmode,$pass"; then
773748e5ce07Smrg	      compile_deplibs="$deplib $compile_deplibs"
773848e5ce07Smrg	      finalize_deplibs="$deplib $finalize_deplibs"
773948e5ce07Smrg	    else
774048e5ce07Smrg	      deplibs="$deplib $deplibs"
774148e5ce07Smrg	      test lib = "$linkmode" && newdependency_libs="$deplib $newdependency_libs"
774248e5ce07Smrg	    fi
774348e5ce07Smrg	    continue
7744c27c18e8Smrg	  fi
7745c27c18e8Smrg	  ;; # -l
7746c27c18e8Smrg	*.ltframework)
774748e5ce07Smrg	  if test prog,link = "$linkmode,$pass"; then
7748c27c18e8Smrg	    compile_deplibs="$deplib $compile_deplibs"
7749c27c18e8Smrg	    finalize_deplibs="$deplib $finalize_deplibs"
7750c27c18e8Smrg	  else
7751c27c18e8Smrg	    deplibs="$deplib $deplibs"
775248e5ce07Smrg	    if test lib = "$linkmode"; then
7753c27c18e8Smrg		case "$new_inherited_linker_flags " in
7754c27c18e8Smrg		    *" $deplib "*) ;;
7755b789ec8aSmrg		    * ) func_append new_inherited_linker_flags " $deplib" ;;
7756c27c18e8Smrg		esac
7757c27c18e8Smrg	    fi
7758c27c18e8Smrg	  fi
7759c27c18e8Smrg	  continue
7760c27c18e8Smrg	  ;;
7761c27c18e8Smrg	-L*)
7762c27c18e8Smrg	  case $linkmode in
7763c27c18e8Smrg	  lib)
7764c27c18e8Smrg	    deplibs="$deplib $deplibs"
776548e5ce07Smrg	    test conv = "$pass" && continue
7766c27c18e8Smrg	    newdependency_libs="$deplib $newdependency_libs"
7767c27c18e8Smrg	    func_stripname '-L' '' "$deplib"
7768b789ec8aSmrg	    func_resolve_sysroot "$func_stripname_result"
7769b789ec8aSmrg	    func_append newlib_search_path " $func_resolve_sysroot_result"
7770c27c18e8Smrg	    ;;
7771c27c18e8Smrg	  prog)
777248e5ce07Smrg	    if test conv = "$pass"; then
7773c27c18e8Smrg	      deplibs="$deplib $deplibs"
7774c27c18e8Smrg	      continue
7775c27c18e8Smrg	    fi
777648e5ce07Smrg	    if test scan = "$pass"; then
7777c27c18e8Smrg	      deplibs="$deplib $deplibs"
7778c27c18e8Smrg	    else
7779c27c18e8Smrg	      compile_deplibs="$deplib $compile_deplibs"
7780c27c18e8Smrg	      finalize_deplibs="$deplib $finalize_deplibs"
7781c27c18e8Smrg	    fi
7782c27c18e8Smrg	    func_stripname '-L' '' "$deplib"
7783b789ec8aSmrg	    func_resolve_sysroot "$func_stripname_result"
7784b789ec8aSmrg	    func_append newlib_search_path " $func_resolve_sysroot_result"
7785c27c18e8Smrg	    ;;
7786c27c18e8Smrg	  *)
778748e5ce07Smrg	    func_warning "'-L' is ignored for archives/objects"
7788c27c18e8Smrg	    ;;
7789c27c18e8Smrg	  esac # linkmode
7790c27c18e8Smrg	  continue
7791c27c18e8Smrg	  ;; # -L
7792c27c18e8Smrg	-R*)
779348e5ce07Smrg	  if test link = "$pass"; then
7794c27c18e8Smrg	    func_stripname '-R' '' "$deplib"
7795b789ec8aSmrg	    func_resolve_sysroot "$func_stripname_result"
7796b789ec8aSmrg	    dir=$func_resolve_sysroot_result
7797c27c18e8Smrg	    # Make sure the xrpath contains only unique directories.
7798c27c18e8Smrg	    case "$xrpath " in
7799c27c18e8Smrg	    *" $dir "*) ;;
7800b789ec8aSmrg	    *) func_append xrpath " $dir" ;;
7801c27c18e8Smrg	    esac
7802c27c18e8Smrg	  fi
7803c27c18e8Smrg	  deplibs="$deplib $deplibs"
7804c27c18e8Smrg	  continue
7805c27c18e8Smrg	  ;;
7806b789ec8aSmrg	*.la)
7807b789ec8aSmrg	  func_resolve_sysroot "$deplib"
7808b789ec8aSmrg	  lib=$func_resolve_sysroot_result
7809b789ec8aSmrg	  ;;
7810c27c18e8Smrg	*.$libext)
781148e5ce07Smrg	  if test conv = "$pass"; then
7812c27c18e8Smrg	    deplibs="$deplib $deplibs"
7813c27c18e8Smrg	    continue
7814c27c18e8Smrg	  fi
7815c27c18e8Smrg	  case $linkmode in
7816c27c18e8Smrg	  lib)
7817c27c18e8Smrg	    # Linking convenience modules into shared libraries is allowed,
7818c27c18e8Smrg	    # but linking other static libraries is non-portable.
7819c27c18e8Smrg	    case " $dlpreconveniencelibs " in
7820c27c18e8Smrg	    *" $deplib "*) ;;
7821c27c18e8Smrg	    *)
782248e5ce07Smrg	      valid_a_lib=false
7823c27c18e8Smrg	      case $deplibs_check_method in
7824c27c18e8Smrg		match_pattern*)
7825c27c18e8Smrg		  set dummy $deplibs_check_method; shift
7826c27c18e8Smrg		  match_pattern_regex=`expr "$deplibs_check_method" : "$1 \(.*\)"`
782737eb1ca1Smrg		  if eval "\$ECHO \"$deplib\"" 2>/dev/null | $SED 10q \
7828c27c18e8Smrg		    | $EGREP "$match_pattern_regex" > /dev/null; then
782948e5ce07Smrg		    valid_a_lib=:
7830c27c18e8Smrg		  fi
7831c27c18e8Smrg		;;
7832c27c18e8Smrg		pass_all)
783348e5ce07Smrg		  valid_a_lib=:
7834c27c18e8Smrg		;;
7835c27c18e8Smrg	      esac
783648e5ce07Smrg	      if $valid_a_lib; then
783748e5ce07Smrg		echo
783848e5ce07Smrg		$ECHO "*** Warning: Linking the shared library $output against the"
783948e5ce07Smrg		$ECHO "*** static library $deplib is not portable!"
784048e5ce07Smrg		deplibs="$deplib $deplibs"
784148e5ce07Smrg	      else
784237eb1ca1Smrg		echo
7843c27c18e8Smrg		$ECHO "*** Warning: Trying to link with static lib archive $deplib."
784437eb1ca1Smrg		echo "*** I have the capability to make that library automatically link in when"
784537eb1ca1Smrg		echo "*** you link to this library.  But I can only do this if you have a"
784637eb1ca1Smrg		echo "*** shared version of the library, which you do not appear to have"
784737eb1ca1Smrg		echo "*** because the file extensions .$libext of this argument makes me believe"
784837eb1ca1Smrg		echo "*** that it is just a static archive that I should not use here."
7849c27c18e8Smrg	      fi
7850c27c18e8Smrg	      ;;
7851c27c18e8Smrg	    esac
7852c27c18e8Smrg	    continue
7853c27c18e8Smrg	    ;;
7854c27c18e8Smrg	  prog)
785548e5ce07Smrg	    if test link != "$pass"; then
7856c27c18e8Smrg	      deplibs="$deplib $deplibs"
7857c27c18e8Smrg	    else
7858c27c18e8Smrg	      compile_deplibs="$deplib $compile_deplibs"
7859c27c18e8Smrg	      finalize_deplibs="$deplib $finalize_deplibs"
7860c27c18e8Smrg	    fi
7861c27c18e8Smrg	    continue
7862c27c18e8Smrg	    ;;
7863c27c18e8Smrg	  esac # linkmode
7864c27c18e8Smrg	  ;; # *.$libext
7865c27c18e8Smrg	*.lo | *.$objext)
786648e5ce07Smrg	  if test conv = "$pass"; then
7867c27c18e8Smrg	    deplibs="$deplib $deplibs"
786848e5ce07Smrg	  elif test prog = "$linkmode"; then
786948e5ce07Smrg	    if test dlpreopen = "$pass" || test yes != "$dlopen_support" || test no = "$build_libtool_libs"; then
7870c27c18e8Smrg	      # If there is no dlopen support or we're linking statically,
7871c27c18e8Smrg	      # we need to preload.
7872b789ec8aSmrg	      func_append newdlprefiles " $deplib"
7873c27c18e8Smrg	      compile_deplibs="$deplib $compile_deplibs"
7874c27c18e8Smrg	      finalize_deplibs="$deplib $finalize_deplibs"
7875c27c18e8Smrg	    else
7876b789ec8aSmrg	      func_append newdlfiles " $deplib"
7877c27c18e8Smrg	    fi
7878c27c18e8Smrg	  fi
7879c27c18e8Smrg	  continue
7880c27c18e8Smrg	  ;;
7881c27c18e8Smrg	%DEPLIBS%)
788248e5ce07Smrg	  alldeplibs=:
7883c27c18e8Smrg	  continue
7884c27c18e8Smrg	  ;;
7885c27c18e8Smrg	esac # case $deplib
7886c27c18e8Smrg
788748e5ce07Smrg	$found || test -f "$lib" \
788848e5ce07Smrg	  || func_fatal_error "cannot find the library '$lib' or unhandled argument '$deplib'"
7889c27c18e8Smrg
7890c27c18e8Smrg	# Check to see that this really is a libtool archive.
7891c27c18e8Smrg	func_lalib_unsafe_p "$lib" \
789248e5ce07Smrg	  || func_fatal_error "'$lib' is not a valid libtool archive"
7893c27c18e8Smrg
7894c27c18e8Smrg	func_dirname "$lib" "" "."
789548e5ce07Smrg	ladir=$func_dirname_result
7896c27c18e8Smrg
7897c27c18e8Smrg	dlname=
7898c27c18e8Smrg	dlopen=
7899c27c18e8Smrg	dlpreopen=
7900c27c18e8Smrg	libdir=
7901c27c18e8Smrg	library_names=
7902c27c18e8Smrg	old_library=
7903c27c18e8Smrg	inherited_linker_flags=
7904c27c18e8Smrg	# If the library was installed with an old release of libtool,
7905c27c18e8Smrg	# it will not redefine variables installed, or shouldnotlink
7906c27c18e8Smrg	installed=yes
7907c27c18e8Smrg	shouldnotlink=no
7908c27c18e8Smrg	avoidtemprpath=
7909c27c18e8Smrg
7910c27c18e8Smrg
7911c27c18e8Smrg	# Read the .la file
7912c27c18e8Smrg	func_source "$lib"
7913c27c18e8Smrg
7914c27c18e8Smrg	# Convert "-framework foo" to "foo.ltframework"
7915c27c18e8Smrg	if test -n "$inherited_linker_flags"; then
791637eb1ca1Smrg	  tmp_inherited_linker_flags=`$ECHO "$inherited_linker_flags" | $SED 's/-framework \([^ $]*\)/\1.ltframework/g'`
7917c27c18e8Smrg	  for tmp_inherited_linker_flag in $tmp_inherited_linker_flags; do
7918c27c18e8Smrg	    case " $new_inherited_linker_flags " in
7919c27c18e8Smrg	      *" $tmp_inherited_linker_flag "*) ;;
7920b789ec8aSmrg	      *) func_append new_inherited_linker_flags " $tmp_inherited_linker_flag";;
7921c27c18e8Smrg	    esac
7922c27c18e8Smrg	  done
7923c27c18e8Smrg	fi
792437eb1ca1Smrg	dependency_libs=`$ECHO " $dependency_libs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'`
792548e5ce07Smrg	if test lib,link = "$linkmode,$pass" ||
792648e5ce07Smrg	   test prog,scan = "$linkmode,$pass" ||
792748e5ce07Smrg	   { test prog != "$linkmode" && test lib != "$linkmode"; }; then
7928b789ec8aSmrg	  test -n "$dlopen" && func_append dlfiles " $dlopen"
7929b789ec8aSmrg	  test -n "$dlpreopen" && func_append dlprefiles " $dlpreopen"
7930c27c18e8Smrg	fi
7931c27c18e8Smrg
793248e5ce07Smrg	if test conv = "$pass"; then
7933c27c18e8Smrg	  # Only check for convenience libraries
7934c27c18e8Smrg	  deplibs="$lib $deplibs"
7935c27c18e8Smrg	  if test -z "$libdir"; then
7936c27c18e8Smrg	    if test -z "$old_library"; then
793748e5ce07Smrg	      func_fatal_error "cannot find name of link library for '$lib'"
7938c27c18e8Smrg	    fi
7939c27c18e8Smrg	    # It is a libtool convenience library, so add in its objects.
7940b789ec8aSmrg	    func_append convenience " $ladir/$objdir/$old_library"
7941b789ec8aSmrg	    func_append old_convenience " $ladir/$objdir/$old_library"
794248e5ce07Smrg	  elif test prog != "$linkmode" && test lib != "$linkmode"; then
794348e5ce07Smrg	    func_fatal_error "'$lib' is not a convenience library"
7944c27c18e8Smrg	  fi
794548e5ce07Smrg	  tmp_libs=
794648e5ce07Smrg	  for deplib in $dependency_libs; do
794748e5ce07Smrg	    deplibs="$deplib $deplibs"
794848e5ce07Smrg	    if $opt_preserve_dup_deps; then
794948e5ce07Smrg	      case "$tmp_libs " in
795048e5ce07Smrg	      *" $deplib "*) func_append specialdeplibs " $deplib" ;;
795148e5ce07Smrg	      esac
795248e5ce07Smrg	    fi
795348e5ce07Smrg	    func_append tmp_libs " $deplib"
795448e5ce07Smrg	  done
7955c27c18e8Smrg	  continue
7956c27c18e8Smrg	fi # $pass = conv
7957c27c18e8Smrg
7958c27c18e8Smrg
7959c27c18e8Smrg	# Get the name of the library we link against.
7960c27c18e8Smrg	linklib=
7961b789ec8aSmrg	if test -n "$old_library" &&
796248e5ce07Smrg	   { test yes = "$prefer_static_libs" ||
796348e5ce07Smrg	     test built,no = "$prefer_static_libs,$installed"; }; then
7964b789ec8aSmrg	  linklib=$old_library
7965b789ec8aSmrg	else
7966b789ec8aSmrg	  for l in $old_library $library_names; do
796748e5ce07Smrg	    linklib=$l
7968b789ec8aSmrg	  done
7969b789ec8aSmrg	fi
7970c27c18e8Smrg	if test -z "$linklib"; then
797148e5ce07Smrg	  func_fatal_error "cannot find name of link library for '$lib'"
7972c27c18e8Smrg	fi
7973c27c18e8Smrg
7974c27c18e8Smrg	# This library was specified with -dlopen.
797548e5ce07Smrg	if test dlopen = "$pass"; then
797648e5ce07Smrg	  test -z "$libdir" \
797748e5ce07Smrg	    && func_fatal_error "cannot -dlopen a convenience library: '$lib'"
7978c27c18e8Smrg	  if test -z "$dlname" ||
797948e5ce07Smrg	     test yes != "$dlopen_support" ||
798048e5ce07Smrg	     test no = "$build_libtool_libs"
798148e5ce07Smrg	  then
7982c27c18e8Smrg	    # If there is no dlname, no dlopen support or we're linking
7983c27c18e8Smrg	    # statically, we need to preload.  We also need to preload any
7984c27c18e8Smrg	    # dependent libraries so libltdl's deplib preloader doesn't
7985c27c18e8Smrg	    # bomb out in the load deplibs phase.
7986b789ec8aSmrg	    func_append dlprefiles " $lib $dependency_libs"
7987c27c18e8Smrg	  else
7988b789ec8aSmrg	    func_append newdlfiles " $lib"
7989c27c18e8Smrg	  fi
7990c27c18e8Smrg	  continue
7991c27c18e8Smrg	fi # $pass = dlopen
7992c27c18e8Smrg
7993c27c18e8Smrg	# We need an absolute path.
7994c27c18e8Smrg	case $ladir in
799548e5ce07Smrg	[\\/]* | [A-Za-z]:[\\/]*) abs_ladir=$ladir ;;
7996c27c18e8Smrg	*)
7997c27c18e8Smrg	  abs_ladir=`cd "$ladir" && pwd`
7998c27c18e8Smrg	  if test -z "$abs_ladir"; then
799948e5ce07Smrg	    func_warning "cannot determine absolute directory name of '$ladir'"
8000c27c18e8Smrg	    func_warning "passing it literally to the linker, although it might fail"
800148e5ce07Smrg	    abs_ladir=$ladir
8002c27c18e8Smrg	  fi
8003c27c18e8Smrg	  ;;
8004c27c18e8Smrg	esac
8005c27c18e8Smrg	func_basename "$lib"
800648e5ce07Smrg	laname=$func_basename_result
8007c27c18e8Smrg
8008c27c18e8Smrg	# Find the relevant object directory and library name.
800948e5ce07Smrg	if test yes = "$installed"; then
8010b789ec8aSmrg	  if test ! -f "$lt_sysroot$libdir/$linklib" && test -f "$abs_ladir/$linklib"; then
801148e5ce07Smrg	    func_warning "library '$lib' was moved."
801248e5ce07Smrg	    dir=$ladir
801348e5ce07Smrg	    absdir=$abs_ladir
801448e5ce07Smrg	    libdir=$abs_ladir
8015c27c18e8Smrg	  else
801648e5ce07Smrg	    dir=$lt_sysroot$libdir
801748e5ce07Smrg	    absdir=$lt_sysroot$libdir
8018c27c18e8Smrg	  fi
801948e5ce07Smrg	  test yes = "$hardcode_automatic" && avoidtemprpath=yes
8020c27c18e8Smrg	else
8021c27c18e8Smrg	  if test ! -f "$ladir/$objdir/$linklib" && test -f "$abs_ladir/$linklib"; then
802248e5ce07Smrg	    dir=$ladir
802348e5ce07Smrg	    absdir=$abs_ladir
8024c27c18e8Smrg	    # Remove this search path later
8025b789ec8aSmrg	    func_append notinst_path " $abs_ladir"
8026c27c18e8Smrg	  else
802748e5ce07Smrg	    dir=$ladir/$objdir
802848e5ce07Smrg	    absdir=$abs_ladir/$objdir
8029c27c18e8Smrg	    # Remove this search path later
8030b789ec8aSmrg	    func_append notinst_path " $abs_ladir"
8031c27c18e8Smrg	  fi
8032c27c18e8Smrg	fi # $installed = yes
8033c27c18e8Smrg	func_stripname 'lib' '.la' "$laname"
8034c27c18e8Smrg	name=$func_stripname_result
8035c27c18e8Smrg
8036c27c18e8Smrg	# This library was specified with -dlpreopen.
803748e5ce07Smrg	if test dlpreopen = "$pass"; then
803848e5ce07Smrg	  if test -z "$libdir" && test prog = "$linkmode"; then
803948e5ce07Smrg	    func_fatal_error "only libraries may -dlpreopen a convenience library: '$lib'"
8040c27c18e8Smrg	  fi
804148e5ce07Smrg	  case $host in
8042b789ec8aSmrg	    # special handling for platforms with PE-DLLs.
8043b789ec8aSmrg	    *cygwin* | *mingw* | *cegcc* )
8044b789ec8aSmrg	      # Linker will automatically link against shared library if both
8045b789ec8aSmrg	      # static and shared are present.  Therefore, ensure we extract
8046b789ec8aSmrg	      # symbols from the import library if a shared library is present
8047b789ec8aSmrg	      # (otherwise, the dlopen module name will be incorrect).  We do
8048b789ec8aSmrg	      # this by putting the import library name into $newdlprefiles.
8049b789ec8aSmrg	      # We recover the dlopen module name by 'saving' the la file
8050b789ec8aSmrg	      # name in a special purpose variable, and (later) extracting the
8051b789ec8aSmrg	      # dlname from the la file.
8052b789ec8aSmrg	      if test -n "$dlname"; then
8053b789ec8aSmrg	        func_tr_sh "$dir/$linklib"
8054b789ec8aSmrg	        eval "libfile_$func_tr_sh_result=\$abs_ladir/\$laname"
8055b789ec8aSmrg	        func_append newdlprefiles " $dir/$linklib"
8056b789ec8aSmrg	      else
8057b789ec8aSmrg	        func_append newdlprefiles " $dir/$old_library"
8058b789ec8aSmrg	        # Keep a list of preopened convenience libraries to check
8059b789ec8aSmrg	        # that they are being used correctly in the link pass.
8060b789ec8aSmrg	        test -z "$libdir" && \
8061b789ec8aSmrg	          func_append dlpreconveniencelibs " $dir/$old_library"
8062b789ec8aSmrg	      fi
8063b789ec8aSmrg	    ;;
8064b789ec8aSmrg	    * )
8065b789ec8aSmrg	      # Prefer using a static library (so that no silly _DYNAMIC symbols
8066b789ec8aSmrg	      # are required to link).
8067b789ec8aSmrg	      if test -n "$old_library"; then
8068b789ec8aSmrg	        func_append newdlprefiles " $dir/$old_library"
8069b789ec8aSmrg	        # Keep a list of preopened convenience libraries to check
8070b789ec8aSmrg	        # that they are being used correctly in the link pass.
8071b789ec8aSmrg	        test -z "$libdir" && \
8072b789ec8aSmrg	          func_append dlpreconveniencelibs " $dir/$old_library"
8073b789ec8aSmrg	      # Otherwise, use the dlname, so that lt_dlopen finds it.
8074b789ec8aSmrg	      elif test -n "$dlname"; then
8075b789ec8aSmrg	        func_append newdlprefiles " $dir/$dlname"
8076b789ec8aSmrg	      else
8077b789ec8aSmrg	        func_append newdlprefiles " $dir/$linklib"
8078b789ec8aSmrg	      fi
8079b789ec8aSmrg	    ;;
8080b789ec8aSmrg	  esac
8081c27c18e8Smrg	fi # $pass = dlpreopen
8082c27c18e8Smrg
8083c27c18e8Smrg	if test -z "$libdir"; then
8084c27c18e8Smrg	  # Link the convenience library
808548e5ce07Smrg	  if test lib = "$linkmode"; then
8086c27c18e8Smrg	    deplibs="$dir/$old_library $deplibs"
808748e5ce07Smrg	  elif test prog,link = "$linkmode,$pass"; then
8088c27c18e8Smrg	    compile_deplibs="$dir/$old_library $compile_deplibs"
8089c27c18e8Smrg	    finalize_deplibs="$dir/$old_library $finalize_deplibs"
8090c27c18e8Smrg	  else
8091c27c18e8Smrg	    deplibs="$lib $deplibs" # used for prog,scan pass
8092c27c18e8Smrg	  fi
8093c27c18e8Smrg	  continue
8094c27c18e8Smrg	fi
8095c27c18e8Smrg
8096c27c18e8Smrg
809748e5ce07Smrg	if test prog = "$linkmode" && test link != "$pass"; then
8098b789ec8aSmrg	  func_append newlib_search_path " $ladir"
8099c27c18e8Smrg	  deplibs="$lib $deplibs"
8100c27c18e8Smrg
810148e5ce07Smrg	  linkalldeplibs=false
810248e5ce07Smrg	  if test no != "$link_all_deplibs" || test -z "$library_names" ||
810348e5ce07Smrg	     test no = "$build_libtool_libs"; then
810448e5ce07Smrg	    linkalldeplibs=:
8105c27c18e8Smrg	  fi
8106c27c18e8Smrg
8107c27c18e8Smrg	  tmp_libs=
8108c27c18e8Smrg	  for deplib in $dependency_libs; do
8109c27c18e8Smrg	    case $deplib in
8110c27c18e8Smrg	    -L*) func_stripname '-L' '' "$deplib"
8111b789ec8aSmrg	         func_resolve_sysroot "$func_stripname_result"
8112b789ec8aSmrg	         func_append newlib_search_path " $func_resolve_sysroot_result"
8113c27c18e8Smrg		 ;;
8114c27c18e8Smrg	    esac
8115c27c18e8Smrg	    # Need to link against all dependency_libs?
811648e5ce07Smrg	    if $linkalldeplibs; then
8117c27c18e8Smrg	      deplibs="$deplib $deplibs"
8118c27c18e8Smrg	    else
8119c27c18e8Smrg	      # Need to hardcode shared library paths
8120c27c18e8Smrg	      # or/and link against static libraries
8121c27c18e8Smrg	      newdependency_libs="$deplib $newdependency_libs"
8122c27c18e8Smrg	    fi
812348e5ce07Smrg	    if $opt_preserve_dup_deps; then
8124c27c18e8Smrg	      case "$tmp_libs " in
8125b789ec8aSmrg	      *" $deplib "*) func_append specialdeplibs " $deplib" ;;
8126c27c18e8Smrg	      esac
8127c27c18e8Smrg	    fi
8128b789ec8aSmrg	    func_append tmp_libs " $deplib"
8129c27c18e8Smrg	  done # for deplib
8130c27c18e8Smrg	  continue
8131c27c18e8Smrg	fi # $linkmode = prog...
8132c27c18e8Smrg
813348e5ce07Smrg	if test prog,link = "$linkmode,$pass"; then
8134c27c18e8Smrg	  if test -n "$library_names" &&
813548e5ce07Smrg	     { { test no = "$prefer_static_libs" ||
813648e5ce07Smrg	         test built,yes = "$prefer_static_libs,$installed"; } ||
8137c27c18e8Smrg	       test -z "$old_library"; }; then
8138c27c18e8Smrg	    # We need to hardcode the library path
813948e5ce07Smrg	    if test -n "$shlibpath_var" && test -z "$avoidtemprpath"; then
8140c27c18e8Smrg	      # Make sure the rpath contains only unique directories.
814148e5ce07Smrg	      case $temp_rpath: in
8142c27c18e8Smrg	      *"$absdir:"*) ;;
8143b789ec8aSmrg	      *) func_append temp_rpath "$absdir:" ;;
8144c27c18e8Smrg	      esac
8145c27c18e8Smrg	    fi
8146c27c18e8Smrg
8147c27c18e8Smrg	    # Hardcode the library path.
8148c27c18e8Smrg	    # Skip directories that are in the system default run-time
8149c27c18e8Smrg	    # search path.
8150c27c18e8Smrg	    case " $sys_lib_dlsearch_path " in
8151c27c18e8Smrg	    *" $absdir "*) ;;
8152c27c18e8Smrg	    *)
8153c27c18e8Smrg	      case "$compile_rpath " in
8154c27c18e8Smrg	      *" $absdir "*) ;;
8155b789ec8aSmrg	      *) func_append compile_rpath " $absdir" ;;
8156c27c18e8Smrg	      esac
8157c27c18e8Smrg	      ;;
8158c27c18e8Smrg	    esac
8159c27c18e8Smrg	    case " $sys_lib_dlsearch_path " in
8160c27c18e8Smrg	    *" $libdir "*) ;;
8161c27c18e8Smrg	    *)
8162c27c18e8Smrg	      case "$finalize_rpath " in
8163c27c18e8Smrg	      *" $libdir "*) ;;
8164b789ec8aSmrg	      *) func_append finalize_rpath " $libdir" ;;
8165c27c18e8Smrg	      esac
8166c27c18e8Smrg	      ;;
8167c27c18e8Smrg	    esac
8168c27c18e8Smrg	  fi # $linkmode,$pass = prog,link...
8169c27c18e8Smrg
817048e5ce07Smrg	  if $alldeplibs &&
817148e5ce07Smrg	     { test pass_all = "$deplibs_check_method" ||
817248e5ce07Smrg	       { test yes = "$build_libtool_libs" &&
8173c27c18e8Smrg		 test -n "$library_names"; }; }; then
8174c27c18e8Smrg	    # We only need to search for static libraries
8175c27c18e8Smrg	    continue
8176c27c18e8Smrg	  fi
8177c27c18e8Smrg	fi
8178c27c18e8Smrg
8179c27c18e8Smrg	link_static=no # Whether the deplib will be linked statically
8180c27c18e8Smrg	use_static_libs=$prefer_static_libs
818148e5ce07Smrg	if test built = "$use_static_libs" && test yes = "$installed"; then
8182c27c18e8Smrg	  use_static_libs=no
8183c27c18e8Smrg	fi
8184c27c18e8Smrg	if test -n "$library_names" &&
818548e5ce07Smrg	   { test no = "$use_static_libs" || test -z "$old_library"; }; then
8186c27c18e8Smrg	  case $host in
818748e5ce07Smrg	  *cygwin* | *mingw* | *cegcc* | *os2*)
8188c27c18e8Smrg	      # No point in relinking DLLs because paths are not encoded
8189b789ec8aSmrg	      func_append notinst_deplibs " $lib"
8190c27c18e8Smrg	      need_relink=no
8191c27c18e8Smrg	    ;;
8192c27c18e8Smrg	  *)
819348e5ce07Smrg	    if test no = "$installed"; then
8194b789ec8aSmrg	      func_append notinst_deplibs " $lib"
8195c27c18e8Smrg	      need_relink=yes
8196c27c18e8Smrg	    fi
8197c27c18e8Smrg	    ;;
8198c27c18e8Smrg	  esac
8199c27c18e8Smrg	  # This is a shared library
8200c27c18e8Smrg
8201c27c18e8Smrg	  # Warn about portability, can't link against -module's on some
8202c27c18e8Smrg	  # systems (darwin).  Don't bleat about dlopened modules though!
820348e5ce07Smrg	  dlopenmodule=
8204c27c18e8Smrg	  for dlpremoduletest in $dlprefiles; do
8205c27c18e8Smrg	    if test "X$dlpremoduletest" = "X$lib"; then
820648e5ce07Smrg	      dlopenmodule=$dlpremoduletest
8207c27c18e8Smrg	      break
8208c27c18e8Smrg	    fi
8209c27c18e8Smrg	  done
821048e5ce07Smrg	  if test -z "$dlopenmodule" && test yes = "$shouldnotlink" && test link = "$pass"; then
821137eb1ca1Smrg	    echo
821248e5ce07Smrg	    if test prog = "$linkmode"; then
8213c27c18e8Smrg	      $ECHO "*** Warning: Linking the executable $output against the loadable module"
8214c27c18e8Smrg	    else
8215c27c18e8Smrg	      $ECHO "*** Warning: Linking the shared library $output against the loadable module"
8216c27c18e8Smrg	    fi
8217c27c18e8Smrg	    $ECHO "*** $linklib is not portable!"
8218c27c18e8Smrg	  fi
821948e5ce07Smrg	  if test lib = "$linkmode" &&
822048e5ce07Smrg	     test yes = "$hardcode_into_libs"; then
8221c27c18e8Smrg	    # Hardcode the library path.
8222c27c18e8Smrg	    # Skip directories that are in the system default run-time
8223c27c18e8Smrg	    # search path.
8224c27c18e8Smrg	    case " $sys_lib_dlsearch_path " in
8225c27c18e8Smrg	    *" $absdir "*) ;;
8226c27c18e8Smrg	    *)
8227c27c18e8Smrg	      case "$compile_rpath " in
8228c27c18e8Smrg	      *" $absdir "*) ;;
8229b789ec8aSmrg	      *) func_append compile_rpath " $absdir" ;;
8230c27c18e8Smrg	      esac
8231c27c18e8Smrg	      ;;
8232c27c18e8Smrg	    esac
8233c27c18e8Smrg	    case " $sys_lib_dlsearch_path " in
8234c27c18e8Smrg	    *" $libdir "*) ;;
8235c27c18e8Smrg	    *)
8236c27c18e8Smrg	      case "$finalize_rpath " in
8237c27c18e8Smrg	      *" $libdir "*) ;;
8238b789ec8aSmrg	      *) func_append finalize_rpath " $libdir" ;;
8239c27c18e8Smrg	      esac
8240c27c18e8Smrg	      ;;
8241c27c18e8Smrg	    esac
8242c27c18e8Smrg	  fi
8243c27c18e8Smrg
8244c27c18e8Smrg	  if test -n "$old_archive_from_expsyms_cmds"; then
8245c27c18e8Smrg	    # figure out the soname
8246c27c18e8Smrg	    set dummy $library_names
8247c27c18e8Smrg	    shift
824848e5ce07Smrg	    realname=$1
8249c27c18e8Smrg	    shift
8250c27c18e8Smrg	    libname=`eval "\\$ECHO \"$libname_spec\""`
8251c27c18e8Smrg	    # use dlname if we got it. it's perfectly good, no?
8252c27c18e8Smrg	    if test -n "$dlname"; then
825348e5ce07Smrg	      soname=$dlname
8254c27c18e8Smrg	    elif test -n "$soname_spec"; then
8255c27c18e8Smrg	      # bleh windows
8256c27c18e8Smrg	      case $host in
825748e5ce07Smrg	      *cygwin* | mingw* | *cegcc* | *os2*)
8258c27c18e8Smrg	        func_arith $current - $age
8259c27c18e8Smrg		major=$func_arith_result
826048e5ce07Smrg		versuffix=-$major
8261c27c18e8Smrg		;;
8262c27c18e8Smrg	      esac
8263c27c18e8Smrg	      eval soname=\"$soname_spec\"
8264c27c18e8Smrg	    else
826548e5ce07Smrg	      soname=$realname
8266c27c18e8Smrg	    fi
8267c27c18e8Smrg
8268c27c18e8Smrg	    # Make a new name for the extract_expsyms_cmds to use
826948e5ce07Smrg	    soroot=$soname
8270c27c18e8Smrg	    func_basename "$soroot"
827148e5ce07Smrg	    soname=$func_basename_result
8272c27c18e8Smrg	    func_stripname 'lib' '.dll' "$soname"
8273c27c18e8Smrg	    newlib=libimp-$func_stripname_result.a
8274c27c18e8Smrg
8275c27c18e8Smrg	    # If the library has no export list, then create one now
8276c27c18e8Smrg	    if test -f "$output_objdir/$soname-def"; then :
8277c27c18e8Smrg	    else
827848e5ce07Smrg	      func_verbose "extracting exported symbol list from '$soname'"
8279c27c18e8Smrg	      func_execute_cmds "$extract_expsyms_cmds" 'exit $?'
8280c27c18e8Smrg	    fi
8281c27c18e8Smrg
8282c27c18e8Smrg	    # Create $newlib
8283c27c18e8Smrg	    if test -f "$output_objdir/$newlib"; then :; else
828448e5ce07Smrg	      func_verbose "generating import library for '$soname'"
8285c27c18e8Smrg	      func_execute_cmds "$old_archive_from_expsyms_cmds" 'exit $?'
8286c27c18e8Smrg	    fi
8287c27c18e8Smrg	    # make sure the library variables are pointing to the new library
8288c27c18e8Smrg	    dir=$output_objdir
8289c27c18e8Smrg	    linklib=$newlib
8290c27c18e8Smrg	  fi # test -n "$old_archive_from_expsyms_cmds"
8291c27c18e8Smrg
829248e5ce07Smrg	  if test prog = "$linkmode" || test relink != "$opt_mode"; then
8293c27c18e8Smrg	    add_shlibpath=
8294c27c18e8Smrg	    add_dir=
8295c27c18e8Smrg	    add=
8296c27c18e8Smrg	    lib_linked=yes
8297c27c18e8Smrg	    case $hardcode_action in
8298c27c18e8Smrg	    immediate | unsupported)
829948e5ce07Smrg	      if test no = "$hardcode_direct"; then
830048e5ce07Smrg		add=$dir/$linklib
8301c27c18e8Smrg		case $host in
830248e5ce07Smrg		  *-*-sco3.2v5.0.[024]*) add_dir=-L$dir ;;
830348e5ce07Smrg		  *-*-sysv4*uw2*) add_dir=-L$dir ;;
8304c27c18e8Smrg		  *-*-sysv5OpenUNIX* | *-*-sysv5UnixWare7.[01].[10]* | \
830548e5ce07Smrg		    *-*-unixware7*) add_dir=-L$dir ;;
8306c27c18e8Smrg		  *-*-darwin* )
830748e5ce07Smrg		    # if the lib is a (non-dlopened) module then we cannot
8308c27c18e8Smrg		    # link against it, someone is ignoring the earlier warnings
8309c27c18e8Smrg		    if /usr/bin/file -L $add 2> /dev/null |
831048e5ce07Smrg			 $GREP ": [^:]* bundle" >/dev/null; then
8311c27c18e8Smrg		      if test "X$dlopenmodule" != "X$lib"; then
8312c27c18e8Smrg			$ECHO "*** Warning: lib $linklib is a module, not a shared library"
831348e5ce07Smrg			if test -z "$old_library"; then
831437eb1ca1Smrg			  echo
831537eb1ca1Smrg			  echo "*** And there doesn't seem to be a static archive available"
831637eb1ca1Smrg			  echo "*** The link will probably fail, sorry"
8317c27c18e8Smrg			else
831848e5ce07Smrg			  add=$dir/$old_library
8319c27c18e8Smrg			fi
8320c27c18e8Smrg		      elif test -n "$old_library"; then
832148e5ce07Smrg			add=$dir/$old_library
8322c27c18e8Smrg		      fi
8323c27c18e8Smrg		    fi
8324c27c18e8Smrg		esac
832548e5ce07Smrg	      elif test no = "$hardcode_minus_L"; then
8326c27c18e8Smrg		case $host in
832748e5ce07Smrg		*-*-sunos*) add_shlibpath=$dir ;;
8328c27c18e8Smrg		esac
832948e5ce07Smrg		add_dir=-L$dir
833048e5ce07Smrg		add=-l$name
833148e5ce07Smrg	      elif test no = "$hardcode_shlibpath_var"; then
833248e5ce07Smrg		add_shlibpath=$dir
833348e5ce07Smrg		add=-l$name
8334c27c18e8Smrg	      else
8335c27c18e8Smrg		lib_linked=no
8336c27c18e8Smrg	      fi
8337c27c18e8Smrg	      ;;
8338c27c18e8Smrg	    relink)
833948e5ce07Smrg	      if test yes = "$hardcode_direct" &&
834048e5ce07Smrg	         test no = "$hardcode_direct_absolute"; then
834148e5ce07Smrg		add=$dir/$linklib
834248e5ce07Smrg	      elif test yes = "$hardcode_minus_L"; then
834348e5ce07Smrg		add_dir=-L$absdir
8344c27c18e8Smrg		# Try looking first in the location we're being installed to.
8345c27c18e8Smrg		if test -n "$inst_prefix_dir"; then
8346c27c18e8Smrg		  case $libdir in
8347c27c18e8Smrg		    [\\/]*)
8348b789ec8aSmrg		      func_append add_dir " -L$inst_prefix_dir$libdir"
8349c27c18e8Smrg		      ;;
8350c27c18e8Smrg		  esac
8351c27c18e8Smrg		fi
835248e5ce07Smrg		add=-l$name
835348e5ce07Smrg	      elif test yes = "$hardcode_shlibpath_var"; then
835448e5ce07Smrg		add_shlibpath=$dir
835548e5ce07Smrg		add=-l$name
8356c27c18e8Smrg	      else
8357c27c18e8Smrg		lib_linked=no
8358c27c18e8Smrg	      fi
8359c27c18e8Smrg	      ;;
8360c27c18e8Smrg	    *) lib_linked=no ;;
8361c27c18e8Smrg	    esac
8362c27c18e8Smrg
836348e5ce07Smrg	    if test yes != "$lib_linked"; then
8364c27c18e8Smrg	      func_fatal_configuration "unsupported hardcode properties"
8365c27c18e8Smrg	    fi
8366c27c18e8Smrg
8367c27c18e8Smrg	    if test -n "$add_shlibpath"; then
8368c27c18e8Smrg	      case :$compile_shlibpath: in
8369c27c18e8Smrg	      *":$add_shlibpath:"*) ;;
8370b789ec8aSmrg	      *) func_append compile_shlibpath "$add_shlibpath:" ;;
8371c27c18e8Smrg	      esac
8372c27c18e8Smrg	    fi
837348e5ce07Smrg	    if test prog = "$linkmode"; then
8374c27c18e8Smrg	      test -n "$add_dir" && compile_deplibs="$add_dir $compile_deplibs"
8375c27c18e8Smrg	      test -n "$add" && compile_deplibs="$add $compile_deplibs"
8376c27c18e8Smrg	    else
8377c27c18e8Smrg	      test -n "$add_dir" && deplibs="$add_dir $deplibs"
8378c27c18e8Smrg	      test -n "$add" && deplibs="$add $deplibs"
837948e5ce07Smrg	      if test yes != "$hardcode_direct" &&
838048e5ce07Smrg		 test yes != "$hardcode_minus_L" &&
838148e5ce07Smrg		 test yes = "$hardcode_shlibpath_var"; then
8382c27c18e8Smrg		case :$finalize_shlibpath: in
8383c27c18e8Smrg		*":$libdir:"*) ;;
8384b789ec8aSmrg		*) func_append finalize_shlibpath "$libdir:" ;;
8385c27c18e8Smrg		esac
8386c27c18e8Smrg	      fi
8387c27c18e8Smrg	    fi
8388c27c18e8Smrg	  fi
8389c27c18e8Smrg
839048e5ce07Smrg	  if test prog = "$linkmode" || test relink = "$opt_mode"; then
8391c27c18e8Smrg	    add_shlibpath=
8392c27c18e8Smrg	    add_dir=
8393c27c18e8Smrg	    add=
8394c27c18e8Smrg	    # Finalize command for both is simple: just hardcode it.
839548e5ce07Smrg	    if test yes = "$hardcode_direct" &&
839648e5ce07Smrg	       test no = "$hardcode_direct_absolute"; then
839748e5ce07Smrg	      add=$libdir/$linklib
839848e5ce07Smrg	    elif test yes = "$hardcode_minus_L"; then
839948e5ce07Smrg	      add_dir=-L$libdir
840048e5ce07Smrg	      add=-l$name
840148e5ce07Smrg	    elif test yes = "$hardcode_shlibpath_var"; then
8402c27c18e8Smrg	      case :$finalize_shlibpath: in
8403c27c18e8Smrg	      *":$libdir:"*) ;;
8404b789ec8aSmrg	      *) func_append finalize_shlibpath "$libdir:" ;;
8405c27c18e8Smrg	      esac
840648e5ce07Smrg	      add=-l$name
840748e5ce07Smrg	    elif test yes = "$hardcode_automatic"; then
8408c27c18e8Smrg	      if test -n "$inst_prefix_dir" &&
840948e5ce07Smrg		 test -f "$inst_prefix_dir$libdir/$linklib"; then
841048e5ce07Smrg		add=$inst_prefix_dir$libdir/$linklib
8411c27c18e8Smrg	      else
841248e5ce07Smrg		add=$libdir/$linklib
8413c27c18e8Smrg	      fi
8414c27c18e8Smrg	    else
8415c27c18e8Smrg	      # We cannot seem to hardcode it, guess we'll fake it.
841648e5ce07Smrg	      add_dir=-L$libdir
8417c27c18e8Smrg	      # Try looking first in the location we're being installed to.
8418c27c18e8Smrg	      if test -n "$inst_prefix_dir"; then
8419c27c18e8Smrg		case $libdir in
8420c27c18e8Smrg		  [\\/]*)
8421b789ec8aSmrg		    func_append add_dir " -L$inst_prefix_dir$libdir"
8422c27c18e8Smrg		    ;;
8423c27c18e8Smrg		esac
8424c27c18e8Smrg	      fi
842548e5ce07Smrg	      add=-l$name
8426c27c18e8Smrg	    fi
8427c27c18e8Smrg
842848e5ce07Smrg	    if test prog = "$linkmode"; then
8429c27c18e8Smrg	      test -n "$add_dir" && finalize_deplibs="$add_dir $finalize_deplibs"
8430c27c18e8Smrg	      test -n "$add" && finalize_deplibs="$add $finalize_deplibs"
8431c27c18e8Smrg	    else
8432c27c18e8Smrg	      test -n "$add_dir" && deplibs="$add_dir $deplibs"
8433c27c18e8Smrg	      test -n "$add" && deplibs="$add $deplibs"
8434c27c18e8Smrg	    fi
8435c27c18e8Smrg	  fi
843648e5ce07Smrg	elif test prog = "$linkmode"; then
8437c27c18e8Smrg	  # Here we assume that one of hardcode_direct or hardcode_minus_L
8438c27c18e8Smrg	  # is not unsupported.  This is valid on all known static and
8439c27c18e8Smrg	  # shared platforms.
844048e5ce07Smrg	  if test unsupported != "$hardcode_direct"; then
844148e5ce07Smrg	    test -n "$old_library" && linklib=$old_library
8442c27c18e8Smrg	    compile_deplibs="$dir/$linklib $compile_deplibs"
8443c27c18e8Smrg	    finalize_deplibs="$dir/$linklib $finalize_deplibs"
8444c27c18e8Smrg	  else
8445c27c18e8Smrg	    compile_deplibs="-l$name -L$dir $compile_deplibs"
8446c27c18e8Smrg	    finalize_deplibs="-l$name -L$dir $finalize_deplibs"
8447c27c18e8Smrg	  fi
844848e5ce07Smrg	elif test yes = "$build_libtool_libs"; then
8449c27c18e8Smrg	  # Not a shared library
845048e5ce07Smrg	  if test pass_all != "$deplibs_check_method"; then
8451c27c18e8Smrg	    # We're trying link a shared library against a static one
8452c27c18e8Smrg	    # but the system doesn't support it.
8453c27c18e8Smrg
8454c27c18e8Smrg	    # Just print a warning and add the library to dependency_libs so
8455c27c18e8Smrg	    # that the program can be linked against the static library.
845637eb1ca1Smrg	    echo
845748e5ce07Smrg	    $ECHO "*** Warning: This system cannot link to static lib archive $lib."
845837eb1ca1Smrg	    echo "*** I have the capability to make that library automatically link in when"
845937eb1ca1Smrg	    echo "*** you link to this library.  But I can only do this if you have a"
846037eb1ca1Smrg	    echo "*** shared version of the library, which you do not appear to have."
846148e5ce07Smrg	    if test yes = "$module"; then
846237eb1ca1Smrg	      echo "*** But as you try to build a module library, libtool will still create "
846337eb1ca1Smrg	      echo "*** a static module, that should work as long as the dlopening application"
846437eb1ca1Smrg	      echo "*** is linked with the -dlopen flag to resolve symbols at runtime."
8465c27c18e8Smrg	      if test -z "$global_symbol_pipe"; then
846637eb1ca1Smrg		echo
846737eb1ca1Smrg		echo "*** However, this would only work if libtool was able to extract symbol"
846848e5ce07Smrg		echo "*** lists from a program, using 'nm' or equivalent, but libtool could"
846937eb1ca1Smrg		echo "*** not find such a program.  So, this module is probably useless."
847048e5ce07Smrg		echo "*** 'nm' from GNU binutils and a full rebuild may help."
8471c27c18e8Smrg	      fi
847248e5ce07Smrg	      if test no = "$build_old_libs"; then
8473c27c18e8Smrg		build_libtool_libs=module
8474c27c18e8Smrg		build_old_libs=yes
8475c27c18e8Smrg	      else
8476c27c18e8Smrg		build_libtool_libs=no
8477c27c18e8Smrg	      fi
8478c27c18e8Smrg	    fi
8479c27c18e8Smrg	  else
8480c27c18e8Smrg	    deplibs="$dir/$old_library $deplibs"
8481c27c18e8Smrg	    link_static=yes
8482c27c18e8Smrg	  fi
8483c27c18e8Smrg	fi # link shared/static library?
8484c27c18e8Smrg
848548e5ce07Smrg	if test lib = "$linkmode"; then
8486c27c18e8Smrg	  if test -n "$dependency_libs" &&
848748e5ce07Smrg	     { test yes != "$hardcode_into_libs" ||
848848e5ce07Smrg	       test yes = "$build_old_libs" ||
848948e5ce07Smrg	       test yes = "$link_static"; }; then
8490c27c18e8Smrg	    # Extract -R from dependency_libs
8491c27c18e8Smrg	    temp_deplibs=
8492c27c18e8Smrg	    for libdir in $dependency_libs; do
8493c27c18e8Smrg	      case $libdir in
8494c27c18e8Smrg	      -R*) func_stripname '-R' '' "$libdir"
8495c27c18e8Smrg	           temp_xrpath=$func_stripname_result
8496c27c18e8Smrg		   case " $xrpath " in
8497c27c18e8Smrg		   *" $temp_xrpath "*) ;;
8498b789ec8aSmrg		   *) func_append xrpath " $temp_xrpath";;
8499c27c18e8Smrg		   esac;;
8500b789ec8aSmrg	      *) func_append temp_deplibs " $libdir";;
8501c27c18e8Smrg	      esac
8502c27c18e8Smrg	    done
850348e5ce07Smrg	    dependency_libs=$temp_deplibs
8504c27c18e8Smrg	  fi
8505c27c18e8Smrg
8506b789ec8aSmrg	  func_append newlib_search_path " $absdir"
8507c27c18e8Smrg	  # Link against this library
850848e5ce07Smrg	  test no = "$link_static" && newdependency_libs="$abs_ladir/$laname $newdependency_libs"
8509c27c18e8Smrg	  # ... and its dependency_libs
8510c27c18e8Smrg	  tmp_libs=
8511c27c18e8Smrg	  for deplib in $dependency_libs; do
8512c27c18e8Smrg	    newdependency_libs="$deplib $newdependency_libs"
8513b789ec8aSmrg	    case $deplib in
8514b789ec8aSmrg              -L*) func_stripname '-L' '' "$deplib"
8515b789ec8aSmrg                   func_resolve_sysroot "$func_stripname_result";;
8516b789ec8aSmrg              *) func_resolve_sysroot "$deplib" ;;
8517b789ec8aSmrg            esac
851848e5ce07Smrg	    if $opt_preserve_dup_deps; then
8519c27c18e8Smrg	      case "$tmp_libs " in
8520b789ec8aSmrg	      *" $func_resolve_sysroot_result "*)
8521b789ec8aSmrg                func_append specialdeplibs " $func_resolve_sysroot_result" ;;
8522c27c18e8Smrg	      esac
8523c27c18e8Smrg	    fi
8524b789ec8aSmrg	    func_append tmp_libs " $func_resolve_sysroot_result"
8525c27c18e8Smrg	  done
8526c27c18e8Smrg
852748e5ce07Smrg	  if test no != "$link_all_deplibs"; then
8528c27c18e8Smrg	    # Add the search paths of all dependency libraries
8529c27c18e8Smrg	    for deplib in $dependency_libs; do
853037eb1ca1Smrg	      path=
8531c27c18e8Smrg	      case $deplib in
853248e5ce07Smrg	      -L*) path=$deplib ;;
8533c27c18e8Smrg	      *.la)
8534b789ec8aSmrg	        func_resolve_sysroot "$deplib"
8535b789ec8aSmrg	        deplib=$func_resolve_sysroot_result
8536c27c18e8Smrg	        func_dirname "$deplib" "" "."
8537b789ec8aSmrg		dir=$func_dirname_result
8538c27c18e8Smrg		# We need an absolute path.
8539c27c18e8Smrg		case $dir in
854048e5ce07Smrg		[\\/]* | [A-Za-z]:[\\/]*) absdir=$dir ;;
8541c27c18e8Smrg		*)
8542c27c18e8Smrg		  absdir=`cd "$dir" && pwd`
8543c27c18e8Smrg		  if test -z "$absdir"; then
854448e5ce07Smrg		    func_warning "cannot determine absolute directory name of '$dir'"
854548e5ce07Smrg		    absdir=$dir
8546c27c18e8Smrg		  fi
8547c27c18e8Smrg		  ;;
8548c27c18e8Smrg		esac
8549c27c18e8Smrg		if $GREP "^installed=no" $deplib > /dev/null; then
8550c27c18e8Smrg		case $host in
8551c27c18e8Smrg		*-*-darwin*)
8552c27c18e8Smrg		  depdepl=
855348e5ce07Smrg		  eval deplibrary_names=`$SED -n -e 's/^library_names=\(.*\)$/\1/p' $deplib`
855448e5ce07Smrg		  if test -n "$deplibrary_names"; then
855548e5ce07Smrg		    for tmp in $deplibrary_names; do
8556c27c18e8Smrg		      depdepl=$tmp
8557c27c18e8Smrg		    done
855848e5ce07Smrg		    if test -f "$absdir/$objdir/$depdepl"; then
855948e5ce07Smrg		      depdepl=$absdir/$objdir/$depdepl
856048e5ce07Smrg		      darwin_install_name=`$OTOOL -L $depdepl | awk '{if (NR == 2) {print $1;exit}}'`
8561c27c18e8Smrg                      if test -z "$darwin_install_name"; then
856248e5ce07Smrg                          darwin_install_name=`$OTOOL64 -L $depdepl  | awk '{if (NR == 2) {print $1;exit}}'`
8563c27c18e8Smrg                      fi
856448e5ce07Smrg		      func_append compiler_flags " $wl-dylib_file $wl$darwin_install_name:$depdepl"
856548e5ce07Smrg		      func_append linker_flags " -dylib_file $darwin_install_name:$depdepl"
8566c27c18e8Smrg		      path=
8567c27c18e8Smrg		    fi
8568c27c18e8Smrg		  fi
8569c27c18e8Smrg		  ;;
8570c27c18e8Smrg		*)
857148e5ce07Smrg		  path=-L$absdir/$objdir
8572c27c18e8Smrg		  ;;
8573c27c18e8Smrg		esac
8574c27c18e8Smrg		else
857548e5ce07Smrg		  eval libdir=`$SED -n -e 's/^libdir=\(.*\)$/\1/p' $deplib`
8576c27c18e8Smrg		  test -z "$libdir" && \
857748e5ce07Smrg		    func_fatal_error "'$deplib' is not a valid libtool archive"
8578c27c18e8Smrg		  test "$absdir" != "$libdir" && \
857948e5ce07Smrg		    func_warning "'$deplib' seems to be moved"
8580c27c18e8Smrg
858148e5ce07Smrg		  path=-L$absdir
8582c27c18e8Smrg		fi
8583c27c18e8Smrg		;;
8584c27c18e8Smrg	      esac
8585c27c18e8Smrg	      case " $deplibs " in
8586c27c18e8Smrg	      *" $path "*) ;;
8587c27c18e8Smrg	      *) deplibs="$path $deplibs" ;;
8588c27c18e8Smrg	      esac
8589c27c18e8Smrg	    done
8590c27c18e8Smrg	  fi # link_all_deplibs != no
8591c27c18e8Smrg	fi # linkmode = lib
8592c27c18e8Smrg      done # for deplib in $libs
859348e5ce07Smrg      if test link = "$pass"; then
859448e5ce07Smrg	if test prog = "$linkmode"; then
8595c27c18e8Smrg	  compile_deplibs="$new_inherited_linker_flags $compile_deplibs"
8596c27c18e8Smrg	  finalize_deplibs="$new_inherited_linker_flags $finalize_deplibs"
8597c27c18e8Smrg	else
859837eb1ca1Smrg	  compiler_flags="$compiler_flags "`$ECHO " $new_inherited_linker_flags" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'`
8599c27c18e8Smrg	fi
8600c27c18e8Smrg      fi
860148e5ce07Smrg      dependency_libs=$newdependency_libs
860248e5ce07Smrg      if test dlpreopen = "$pass"; then
8603c27c18e8Smrg	# Link the dlpreopened libraries before other libraries
8604c27c18e8Smrg	for deplib in $save_deplibs; do
8605c27c18e8Smrg	  deplibs="$deplib $deplibs"
8606c27c18e8Smrg	done
8607c27c18e8Smrg      fi
860848e5ce07Smrg      if test dlopen != "$pass"; then
860948e5ce07Smrg	test conv = "$pass" || {
8610c27c18e8Smrg	  # Make sure lib_search_path contains only unique directories.
8611c27c18e8Smrg	  lib_search_path=
8612c27c18e8Smrg	  for dir in $newlib_search_path; do
8613c27c18e8Smrg	    case "$lib_search_path " in
8614c27c18e8Smrg	    *" $dir "*) ;;
8615b789ec8aSmrg	    *) func_append lib_search_path " $dir" ;;
8616c27c18e8Smrg	    esac
8617c27c18e8Smrg	  done
8618c27c18e8Smrg	  newlib_search_path=
861948e5ce07Smrg	}
8620c27c18e8Smrg
862148e5ce07Smrg	if test prog,link = "$linkmode,$pass"; then
86220eb1301bSmrg	  vars="compile_deplibs finalize_deplibs"
862348e5ce07Smrg	else
862448e5ce07Smrg	  vars=deplibs
8625c27c18e8Smrg	fi
8626c27c18e8Smrg	for var in $vars dependency_libs; do
8627c27c18e8Smrg	  # Add libraries to $var in reverse order
8628c27c18e8Smrg	  eval tmp_libs=\"\$$var\"
8629c27c18e8Smrg	  new_libs=
8630c27c18e8Smrg	  for deplib in $tmp_libs; do
8631c27c18e8Smrg	    # FIXME: Pedantically, this is the right thing to do, so
8632c27c18e8Smrg	    #        that some nasty dependency loop isn't accidentally
8633c27c18e8Smrg	    #        broken:
8634c27c18e8Smrg	    #new_libs="$deplib $new_libs"
8635c27c18e8Smrg	    # Pragmatically, this seems to cause very few problems in
8636c27c18e8Smrg	    # practice:
8637c27c18e8Smrg	    case $deplib in
8638c27c18e8Smrg	    -L*) new_libs="$deplib $new_libs" ;;
8639c27c18e8Smrg	    -R*) ;;
8640c27c18e8Smrg	    *)
8641c27c18e8Smrg	      # And here is the reason: when a library appears more
8642c27c18e8Smrg	      # than once as an explicit dependence of a library, or
8643c27c18e8Smrg	      # is implicitly linked in more than once by the
8644c27c18e8Smrg	      # compiler, it is considered special, and multiple
8645c27c18e8Smrg	      # occurrences thereof are not removed.  Compare this
8646c27c18e8Smrg	      # with having the same library being listed as a
8647c27c18e8Smrg	      # dependency of multiple other libraries: in this case,
8648c27c18e8Smrg	      # we know (pedantically, we assume) the library does not
8649c27c18e8Smrg	      # need to be listed more than once, so we keep only the
8650c27c18e8Smrg	      # last copy.  This is not always right, but it is rare
8651c27c18e8Smrg	      # enough that we require users that really mean to play
8652c27c18e8Smrg	      # such unportable linking tricks to link the library
8653c27c18e8Smrg	      # using -Wl,-lname, so that libtool does not consider it
8654c27c18e8Smrg	      # for duplicate removal.
8655c27c18e8Smrg	      case " $specialdeplibs " in
8656c27c18e8Smrg	      *" $deplib "*) new_libs="$deplib $new_libs" ;;
8657c27c18e8Smrg	      *)
8658c27c18e8Smrg		case " $new_libs " in
8659c27c18e8Smrg		*" $deplib "*) ;;
8660c27c18e8Smrg		*) new_libs="$deplib $new_libs" ;;
8661c27c18e8Smrg		esac
8662c27c18e8Smrg		;;
8663c27c18e8Smrg	      esac
8664c27c18e8Smrg	      ;;
8665c27c18e8Smrg	    esac
8666c27c18e8Smrg	  done
8667c27c18e8Smrg	  tmp_libs=
8668c27c18e8Smrg	  for deplib in $new_libs; do
8669c27c18e8Smrg	    case $deplib in
8670c27c18e8Smrg	    -L*)
8671c27c18e8Smrg	      case " $tmp_libs " in
8672c27c18e8Smrg	      *" $deplib "*) ;;
8673b789ec8aSmrg	      *) func_append tmp_libs " $deplib" ;;
8674c27c18e8Smrg	      esac
8675c27c18e8Smrg	      ;;
8676b789ec8aSmrg	    *) func_append tmp_libs " $deplib" ;;
8677c27c18e8Smrg	    esac
8678c27c18e8Smrg	  done
8679c27c18e8Smrg	  eval $var=\"$tmp_libs\"
8680c27c18e8Smrg	done # for var
8681c27c18e8Smrg      fi
868248e5ce07Smrg
868348e5ce07Smrg      # Add Sun CC postdeps if required:
868448e5ce07Smrg      test CXX = "$tagname" && {
868548e5ce07Smrg        case $host_os in
868648e5ce07Smrg        linux*)
868748e5ce07Smrg          case `$CC -V 2>&1 | sed 5q` in
868848e5ce07Smrg          *Sun\ C*) # Sun C++ 5.9
868948e5ce07Smrg            func_suncc_cstd_abi
869048e5ce07Smrg
869148e5ce07Smrg            if test no != "$suncc_use_cstd_abi"; then
869248e5ce07Smrg              func_append postdeps ' -library=Cstd -library=Crun'
869348e5ce07Smrg            fi
869448e5ce07Smrg            ;;
869548e5ce07Smrg          esac
869648e5ce07Smrg          ;;
869748e5ce07Smrg
869848e5ce07Smrg        solaris*)
869948e5ce07Smrg          func_cc_basename "$CC"
870048e5ce07Smrg          case $func_cc_basename_result in
870148e5ce07Smrg          CC* | sunCC*)
870248e5ce07Smrg            func_suncc_cstd_abi
870348e5ce07Smrg
870448e5ce07Smrg            if test no != "$suncc_use_cstd_abi"; then
870548e5ce07Smrg              func_append postdeps ' -library=Cstd -library=Crun'
870648e5ce07Smrg            fi
870748e5ce07Smrg            ;;
870848e5ce07Smrg          esac
870948e5ce07Smrg          ;;
871048e5ce07Smrg        esac
871148e5ce07Smrg      }
871248e5ce07Smrg
8713c27c18e8Smrg      # Last step: remove runtime libs from dependency_libs
8714c27c18e8Smrg      # (they stay in deplibs)
8715c27c18e8Smrg      tmp_libs=
871648e5ce07Smrg      for i in $dependency_libs; do
8717c27c18e8Smrg	case " $predeps $postdeps $compiler_lib_search_path " in
8718c27c18e8Smrg	*" $i "*)
871948e5ce07Smrg	  i=
8720c27c18e8Smrg	  ;;
8721c27c18e8Smrg	esac
872248e5ce07Smrg	if test -n "$i"; then
8723b789ec8aSmrg	  func_append tmp_libs " $i"
8724c27c18e8Smrg	fi
8725c27c18e8Smrg      done
8726c27c18e8Smrg      dependency_libs=$tmp_libs
8727c27c18e8Smrg    done # for pass
872848e5ce07Smrg    if test prog = "$linkmode"; then
872948e5ce07Smrg      dlfiles=$newdlfiles
8730c27c18e8Smrg    fi
873148e5ce07Smrg    if test prog = "$linkmode" || test lib = "$linkmode"; then
873248e5ce07Smrg      dlprefiles=$newdlprefiles
8733c27c18e8Smrg    fi
8734c27c18e8Smrg
8735c27c18e8Smrg    case $linkmode in
8736c27c18e8Smrg    oldlib)
873748e5ce07Smrg      if test -n "$dlfiles$dlprefiles" || test no != "$dlself"; then
873848e5ce07Smrg	func_warning "'-dlopen' is ignored for archives"
8739c27c18e8Smrg      fi
8740c27c18e8Smrg
8741c27c18e8Smrg      case " $deplibs" in
8742c27c18e8Smrg      *\ -l* | *\ -L*)
874348e5ce07Smrg	func_warning "'-l' and '-L' are ignored for archives" ;;
8744c27c18e8Smrg      esac
8745c27c18e8Smrg
8746c27c18e8Smrg      test -n "$rpath" && \
874748e5ce07Smrg	func_warning "'-rpath' is ignored for archives"
8748c27c18e8Smrg
8749c27c18e8Smrg      test -n "$xrpath" && \
875048e5ce07Smrg	func_warning "'-R' is ignored for archives"
8751c27c18e8Smrg
8752c27c18e8Smrg      test -n "$vinfo" && \
875348e5ce07Smrg	func_warning "'-version-info/-version-number' is ignored for archives"
8754c27c18e8Smrg
8755c27c18e8Smrg      test -n "$release" && \
875648e5ce07Smrg	func_warning "'-release' is ignored for archives"
8757c27c18e8Smrg
8758c27c18e8Smrg      test -n "$export_symbols$export_symbols_regex" && \
875948e5ce07Smrg	func_warning "'-export-symbols' is ignored for archives"
8760c27c18e8Smrg
8761c27c18e8Smrg      # Now set the variables for building old libraries.
8762c27c18e8Smrg      build_libtool_libs=no
876348e5ce07Smrg      oldlibs=$output
8764b789ec8aSmrg      func_append objs "$old_deplibs"
8765c27c18e8Smrg      ;;
8766c27c18e8Smrg
8767c27c18e8Smrg    lib)
876848e5ce07Smrg      # Make sure we only generate libraries of the form 'libNAME.la'.
8769c27c18e8Smrg      case $outputname in
8770c27c18e8Smrg      lib*)
8771c27c18e8Smrg	func_stripname 'lib' '.la' "$outputname"
8772c27c18e8Smrg	name=$func_stripname_result
8773c27c18e8Smrg	eval shared_ext=\"$shrext_cmds\"
8774c27c18e8Smrg	eval libname=\"$libname_spec\"
8775c27c18e8Smrg	;;
8776c27c18e8Smrg      *)
877748e5ce07Smrg	test no = "$module" \
877848e5ce07Smrg	  && func_fatal_help "libtool library '$output' must begin with 'lib'"
8779c27c18e8Smrg
878048e5ce07Smrg	if test no != "$need_lib_prefix"; then
8781c27c18e8Smrg	  # Add the "lib" prefix for modules if required
8782c27c18e8Smrg	  func_stripname '' '.la' "$outputname"
8783c27c18e8Smrg	  name=$func_stripname_result
8784c27c18e8Smrg	  eval shared_ext=\"$shrext_cmds\"
8785c27c18e8Smrg	  eval libname=\"$libname_spec\"
8786c27c18e8Smrg	else
8787c27c18e8Smrg	  func_stripname '' '.la' "$outputname"
8788c27c18e8Smrg	  libname=$func_stripname_result
8789c27c18e8Smrg	fi
8790c27c18e8Smrg	;;
8791c27c18e8Smrg      esac
8792c27c18e8Smrg
8793c27c18e8Smrg      if test -n "$objs"; then
879448e5ce07Smrg	if test pass_all != "$deplibs_check_method"; then
879548e5ce07Smrg	  func_fatal_error "cannot build libtool library '$output' from non-libtool objects on this host:$objs"
8796c27c18e8Smrg	else
879737eb1ca1Smrg	  echo
8798c27c18e8Smrg	  $ECHO "*** Warning: Linking the shared library $output against the non-libtool"
8799c27c18e8Smrg	  $ECHO "*** objects $objs is not portable!"
8800b789ec8aSmrg	  func_append libobjs " $objs"
8801c27c18e8Smrg	fi
8802c27c18e8Smrg      fi
8803c27c18e8Smrg
880448e5ce07Smrg      test no = "$dlself" \
880548e5ce07Smrg	|| func_warning "'-dlopen self' is ignored for libtool libraries"
8806c27c18e8Smrg
8807c27c18e8Smrg      set dummy $rpath
8808c27c18e8Smrg      shift
880948e5ce07Smrg      test 1 -lt "$#" \
881048e5ce07Smrg	&& func_warning "ignoring multiple '-rpath's for a libtool library"
8811c27c18e8Smrg
881248e5ce07Smrg      install_libdir=$1
8813c27c18e8Smrg
8814c27c18e8Smrg      oldlibs=
8815c27c18e8Smrg      if test -z "$rpath"; then
881648e5ce07Smrg	if test yes = "$build_libtool_libs"; then
8817c27c18e8Smrg	  # Building a libtool convenience library.
881848e5ce07Smrg	  # Some compilers have problems with a '.al' extension so
8819c27c18e8Smrg	  # convenience libraries should have the same extension an
8820c27c18e8Smrg	  # archive normally would.
8821c27c18e8Smrg	  oldlibs="$output_objdir/$libname.$libext $oldlibs"
8822c27c18e8Smrg	  build_libtool_libs=convenience
8823c27c18e8Smrg	  build_old_libs=yes
8824c27c18e8Smrg	fi
8825c27c18e8Smrg
8826c27c18e8Smrg	test -n "$vinfo" && \
882748e5ce07Smrg	  func_warning "'-version-info/-version-number' is ignored for convenience libraries"
8828c27c18e8Smrg
8829c27c18e8Smrg	test -n "$release" && \
883048e5ce07Smrg	  func_warning "'-release' is ignored for convenience libraries"
8831c27c18e8Smrg      else
8832c27c18e8Smrg
8833c27c18e8Smrg	# Parse the version information argument.
883448e5ce07Smrg	save_ifs=$IFS; IFS=:
8835c27c18e8Smrg	set dummy $vinfo 0 0 0
8836c27c18e8Smrg	shift
883748e5ce07Smrg	IFS=$save_ifs
8838c27c18e8Smrg
8839c27c18e8Smrg	test -n "$7" && \
884048e5ce07Smrg	  func_fatal_help "too many parameters to '-version-info'"
8841c27c18e8Smrg
8842c27c18e8Smrg	# convert absolute version numbers to libtool ages
8843c27c18e8Smrg	# this retains compatibility with .la files and attempts
8844c27c18e8Smrg	# to make the code below a bit more comprehensible
8845c27c18e8Smrg
8846c27c18e8Smrg	case $vinfo_number in
8847c27c18e8Smrg	yes)
884848e5ce07Smrg	  number_major=$1
884948e5ce07Smrg	  number_minor=$2
885048e5ce07Smrg	  number_revision=$3
8851c27c18e8Smrg	  #
8852c27c18e8Smrg	  # There are really only two kinds -- those that
8853c27c18e8Smrg	  # use the current revision as the major version
8854c27c18e8Smrg	  # and those that subtract age and use age as
8855c27c18e8Smrg	  # a minor version.  But, then there is irix
885648e5ce07Smrg	  # that has an extra 1 added just for fun
8857c27c18e8Smrg	  #
8858c27c18e8Smrg	  case $version_type in
8859f1ee322dSmrg	  # correct linux to gnu/linux during the next big refactor
886048e5ce07Smrg	  darwin|freebsd-elf|linux|osf|windows|none)
8861c27c18e8Smrg	    func_arith $number_major + $number_minor
8862c27c18e8Smrg	    current=$func_arith_result
886348e5ce07Smrg	    age=$number_minor
886448e5ce07Smrg	    revision=$number_revision
8865c27c18e8Smrg	    ;;
886648e5ce07Smrg	  freebsd-aout|qnx|sunos)
886748e5ce07Smrg	    current=$number_major
886848e5ce07Smrg	    revision=$number_minor
886948e5ce07Smrg	    age=0
8870c27c18e8Smrg	    ;;
8871c27c18e8Smrg	  irix|nonstopux)
8872c27c18e8Smrg	    func_arith $number_major + $number_minor
8873c27c18e8Smrg	    current=$func_arith_result
887448e5ce07Smrg	    age=$number_minor
887548e5ce07Smrg	    revision=$number_minor
8876c27c18e8Smrg	    lt_irix_increment=no
8877c27c18e8Smrg	    ;;
8878c27c18e8Smrg	  esac
8879c27c18e8Smrg	  ;;
8880c27c18e8Smrg	no)
888148e5ce07Smrg	  current=$1
888248e5ce07Smrg	  revision=$2
888348e5ce07Smrg	  age=$3
8884c27c18e8Smrg	  ;;
8885c27c18e8Smrg	esac
8886c27c18e8Smrg
8887c27c18e8Smrg	# Check that each of the things are valid numbers.
8888c27c18e8Smrg	case $current in
8889c27c18e8Smrg	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]) ;;
8890c27c18e8Smrg	*)
889148e5ce07Smrg	  func_error "CURRENT '$current' must be a nonnegative integer"
889248e5ce07Smrg	  func_fatal_error "'$vinfo' is not valid version information"
8893c27c18e8Smrg	  ;;
8894c27c18e8Smrg	esac
8895c27c18e8Smrg
8896c27c18e8Smrg	case $revision in
8897c27c18e8Smrg	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]) ;;
8898c27c18e8Smrg	*)
889948e5ce07Smrg	  func_error "REVISION '$revision' must be a nonnegative integer"
890048e5ce07Smrg	  func_fatal_error "'$vinfo' is not valid version information"
8901c27c18e8Smrg	  ;;
8902c27c18e8Smrg	esac
8903c27c18e8Smrg
8904c27c18e8Smrg	case $age in
8905c27c18e8Smrg	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]) ;;
8906c27c18e8Smrg	*)
890748e5ce07Smrg	  func_error "AGE '$age' must be a nonnegative integer"
890848e5ce07Smrg	  func_fatal_error "'$vinfo' is not valid version information"
8909c27c18e8Smrg	  ;;
8910c27c18e8Smrg	esac
8911c27c18e8Smrg
8912c27c18e8Smrg	if test "$age" -gt "$current"; then
891348e5ce07Smrg	  func_error "AGE '$age' is greater than the current interface number '$current'"
891448e5ce07Smrg	  func_fatal_error "'$vinfo' is not valid version information"
8915c27c18e8Smrg	fi
8916c27c18e8Smrg
8917c27c18e8Smrg	# Calculate the version variables.
8918c27c18e8Smrg	major=
8919c27c18e8Smrg	versuffix=
8920c27c18e8Smrg	verstring=
8921c27c18e8Smrg	case $version_type in
8922c27c18e8Smrg	none) ;;
8923c27c18e8Smrg
8924c27c18e8Smrg	darwin)
8925c27c18e8Smrg	  # Like Linux, but with the current version available in
8926c27c18e8Smrg	  # verstring for coding it into the library header
8927c27c18e8Smrg	  func_arith $current - $age
8928c27c18e8Smrg	  major=.$func_arith_result
892948e5ce07Smrg	  versuffix=$major.$age.$revision
8930c27c18e8Smrg	  # Darwin ld doesn't like 0 for these options...
8931c27c18e8Smrg	  func_arith $current + 1
8932c27c18e8Smrg	  minor_current=$func_arith_result
893348e5ce07Smrg	  xlcverstring="$wl-compatibility_version $wl$minor_current $wl-current_version $wl$minor_current.$revision"
8934c27c18e8Smrg	  verstring="-compatibility_version $minor_current -current_version $minor_current.$revision"
893548e5ce07Smrg          # On Darwin other compilers
893648e5ce07Smrg          case $CC in
893748e5ce07Smrg              nagfor*)
893848e5ce07Smrg                  verstring="$wl-compatibility_version $wl$minor_current $wl-current_version $wl$minor_current.$revision"
893948e5ce07Smrg                  ;;
894048e5ce07Smrg              *)
894148e5ce07Smrg                  verstring="-compatibility_version $minor_current -current_version $minor_current.$revision"
894248e5ce07Smrg                  ;;
894348e5ce07Smrg          esac
8944c27c18e8Smrg	  ;;
8945c27c18e8Smrg
8946c27c18e8Smrg	freebsd-aout)
894748e5ce07Smrg	  major=.$current
894848e5ce07Smrg	  versuffix=.$current.$revision
8949c27c18e8Smrg	  ;;
8950c27c18e8Smrg
8951c27c18e8Smrg	freebsd-elf)
895248e5ce07Smrg	  func_arith $current - $age
895348e5ce07Smrg	  major=.$func_arith_result
895448e5ce07Smrg	  versuffix=$major.$age.$revision
8955c27c18e8Smrg	  ;;
8956c27c18e8Smrg
8957c27c18e8Smrg	irix | nonstopux)
895848e5ce07Smrg	  if test no = "$lt_irix_increment"; then
8959c27c18e8Smrg	    func_arith $current - $age
8960c27c18e8Smrg	  else
8961c27c18e8Smrg	    func_arith $current - $age + 1
8962c27c18e8Smrg	  fi
8963c27c18e8Smrg	  major=$func_arith_result
8964c27c18e8Smrg
8965c27c18e8Smrg	  case $version_type in
8966c27c18e8Smrg	    nonstopux) verstring_prefix=nonstopux ;;
8967c27c18e8Smrg	    *)         verstring_prefix=sgi ;;
8968c27c18e8Smrg	  esac
896948e5ce07Smrg	  verstring=$verstring_prefix$major.$revision
8970c27c18e8Smrg
8971c27c18e8Smrg	  # Add in all the interfaces that we are compatible with.
8972c27c18e8Smrg	  loop=$revision
897348e5ce07Smrg	  while test 0 -ne "$loop"; do
8974c27c18e8Smrg	    func_arith $revision - $loop
8975c27c18e8Smrg	    iface=$func_arith_result
8976c27c18e8Smrg	    func_arith $loop - 1
8977c27c18e8Smrg	    loop=$func_arith_result
897848e5ce07Smrg	    verstring=$verstring_prefix$major.$iface:$verstring
8979c27c18e8Smrg	  done
8980c27c18e8Smrg
898148e5ce07Smrg	  # Before this point, $major must not contain '.'.
8982c27c18e8Smrg	  major=.$major
898348e5ce07Smrg	  versuffix=$major.$revision
8984c27c18e8Smrg	  ;;
8985c27c18e8Smrg
8986f1ee322dSmrg	linux) # correct to gnu/linux during the next big refactor
8987c27c18e8Smrg	  func_arith $current - $age
8988c27c18e8Smrg	  major=.$func_arith_result
898948e5ce07Smrg	  versuffix=$major.$age.$revision
8990c27c18e8Smrg	  ;;
8991c27c18e8Smrg
8992c27c18e8Smrg	osf)
8993c27c18e8Smrg	  func_arith $current - $age
8994c27c18e8Smrg	  major=.$func_arith_result
899548e5ce07Smrg	  versuffix=.$current.$age.$revision
899648e5ce07Smrg	  verstring=$current.$age.$revision
8997c27c18e8Smrg
8998c27c18e8Smrg	  # Add in all the interfaces that we are compatible with.
8999c27c18e8Smrg	  loop=$age
900048e5ce07Smrg	  while test 0 -ne "$loop"; do
9001c27c18e8Smrg	    func_arith $current - $loop
9002c27c18e8Smrg	    iface=$func_arith_result
9003c27c18e8Smrg	    func_arith $loop - 1
9004c27c18e8Smrg	    loop=$func_arith_result
900548e5ce07Smrg	    verstring=$verstring:$iface.0
9006c27c18e8Smrg	  done
9007c27c18e8Smrg
9008c27c18e8Smrg	  # Make executables depend on our current version.
900948e5ce07Smrg	  func_append verstring ":$current.0"
9010c27c18e8Smrg	  ;;
9011c27c18e8Smrg
9012c27c18e8Smrg	qnx)
901348e5ce07Smrg	  major=.$current
901448e5ce07Smrg	  versuffix=.$current
901548e5ce07Smrg	  ;;
901648e5ce07Smrg
901748e5ce07Smrg	sco)
901848e5ce07Smrg	  major=.$current
901948e5ce07Smrg	  versuffix=.$current
9020c27c18e8Smrg	  ;;
9021c27c18e8Smrg
9022c27c18e8Smrg	sunos)
902348e5ce07Smrg	  major=.$current
902448e5ce07Smrg	  versuffix=.$current.$revision
9025c27c18e8Smrg	  ;;
9026c27c18e8Smrg
9027c27c18e8Smrg	windows)
9028c27c18e8Smrg	  # Use '-' rather than '.', since we only want one
902948e5ce07Smrg	  # extension on DOS 8.3 file systems.
9030c27c18e8Smrg	  func_arith $current - $age
9031c27c18e8Smrg	  major=$func_arith_result
903248e5ce07Smrg	  versuffix=-$major
9033c27c18e8Smrg	  ;;
9034c27c18e8Smrg
9035c27c18e8Smrg	*)
903648e5ce07Smrg	  func_fatal_configuration "unknown library version type '$version_type'"
9037c27c18e8Smrg	  ;;
9038c27c18e8Smrg	esac
9039c27c18e8Smrg
9040c27c18e8Smrg	# Clear the version info if we defaulted, and they specified a release.
9041c27c18e8Smrg	if test -z "$vinfo" && test -n "$release"; then
9042c27c18e8Smrg	  major=
9043c27c18e8Smrg	  case $version_type in
9044c27c18e8Smrg	  darwin)
9045c27c18e8Smrg	    # we can't check for "0.0" in archive_cmds due to quoting
9046c27c18e8Smrg	    # problems, so we reset it completely
9047c27c18e8Smrg	    verstring=
9048c27c18e8Smrg	    ;;
9049c27c18e8Smrg	  *)
905048e5ce07Smrg	    verstring=0.0
9051c27c18e8Smrg	    ;;
9052c27c18e8Smrg	  esac
905348e5ce07Smrg	  if test no = "$need_version"; then
9054c27c18e8Smrg	    versuffix=
9055c27c18e8Smrg	  else
905648e5ce07Smrg	    versuffix=.0.0
9057c27c18e8Smrg	  fi
9058c27c18e8Smrg	fi
9059c27c18e8Smrg
9060c27c18e8Smrg	# Remove version info from name if versioning should be avoided
906148e5ce07Smrg	if test yes,no = "$avoid_version,$need_version"; then
9062c27c18e8Smrg	  major=
9063c27c18e8Smrg	  versuffix=
906448e5ce07Smrg	  verstring=
9065c27c18e8Smrg	fi
9066c27c18e8Smrg
9067c27c18e8Smrg	# Check to see if the archive will have undefined symbols.
906848e5ce07Smrg	if test yes = "$allow_undefined"; then
906948e5ce07Smrg	  if test unsupported = "$allow_undefined_flag"; then
907048e5ce07Smrg	    if test yes = "$build_old_libs"; then
907148e5ce07Smrg	      func_warning "undefined symbols not allowed in $host shared libraries; building static only"
907248e5ce07Smrg	      build_libtool_libs=no
907348e5ce07Smrg	    else
907448e5ce07Smrg	      func_fatal_error "can't build $host shared library unless -no-undefined is specified"
907548e5ce07Smrg	    fi
9076c27c18e8Smrg	  fi
9077c27c18e8Smrg	else
9078c27c18e8Smrg	  # Don't allow undefined symbols.
907948e5ce07Smrg	  allow_undefined_flag=$no_undefined_flag
9080c27c18e8Smrg	fi
9081c27c18e8Smrg
9082c27c18e8Smrg      fi
9083c27c18e8Smrg
908448e5ce07Smrg      func_generate_dlsyms "$libname" "$libname" :
9085b789ec8aSmrg      func_append libobjs " $symfileobj"
908648e5ce07Smrg      test " " = "$libobjs" && libobjs=
9087c27c18e8Smrg
908848e5ce07Smrg      if test relink != "$opt_mode"; then
9089c27c18e8Smrg	# Remove our outputs, but don't remove object files since they
9090c27c18e8Smrg	# may have been created when compiling PIC objects.
9091c27c18e8Smrg	removelist=
9092c27c18e8Smrg	tempremovelist=`$ECHO "$output_objdir/*"`
9093c27c18e8Smrg	for p in $tempremovelist; do
9094c27c18e8Smrg	  case $p in
9095c27c18e8Smrg	    *.$objext | *.gcno)
9096c27c18e8Smrg	       ;;
909748e5ce07Smrg	    $output_objdir/$outputname | $output_objdir/$libname.* | $output_objdir/$libname$release.*)
909848e5ce07Smrg	       if test -n "$precious_files_regex"; then
9099c27c18e8Smrg		 if $ECHO "$p" | $EGREP -e "$precious_files_regex" >/dev/null 2>&1
9100c27c18e8Smrg		 then
9101c27c18e8Smrg		   continue
9102c27c18e8Smrg		 fi
9103c27c18e8Smrg	       fi
9104b789ec8aSmrg	       func_append removelist " $p"
9105c27c18e8Smrg	       ;;
9106c27c18e8Smrg	    *) ;;
9107c27c18e8Smrg	  esac
9108c27c18e8Smrg	done
9109c27c18e8Smrg	test -n "$removelist" && \
9110c27c18e8Smrg	  func_show_eval "${RM}r \$removelist"
9111c27c18e8Smrg      fi
9112c27c18e8Smrg
9113c27c18e8Smrg      # Now set the variables for building old libraries.
911448e5ce07Smrg      if test yes = "$build_old_libs" && test convenience != "$build_libtool_libs"; then
9115b789ec8aSmrg	func_append oldlibs " $output_objdir/$libname.$libext"
9116c27c18e8Smrg
9117c27c18e8Smrg	# Transform .lo files to .o files.
911848e5ce07Smrg	oldobjs="$objs "`$ECHO "$libobjs" | $SP2NL | $SED "/\.$libext$/d; $lo2o" | $NL2SP`
9119c27c18e8Smrg      fi
9120c27c18e8Smrg
9121c27c18e8Smrg      # Eliminate all temporary directories.
9122c27c18e8Smrg      #for path in $notinst_path; do
912337eb1ca1Smrg      #	lib_search_path=`$ECHO "$lib_search_path " | $SED "s% $path % %g"`
912437eb1ca1Smrg      #	deplibs=`$ECHO "$deplibs " | $SED "s% -L$path % %g"`
912537eb1ca1Smrg      #	dependency_libs=`$ECHO "$dependency_libs " | $SED "s% -L$path % %g"`
9126c27c18e8Smrg      #done
9127c27c18e8Smrg
9128c27c18e8Smrg      if test -n "$xrpath"; then
9129c27c18e8Smrg	# If the user specified any rpath flags, then add them.
9130c27c18e8Smrg	temp_xrpath=
9131c27c18e8Smrg	for libdir in $xrpath; do
9132b789ec8aSmrg	  func_replace_sysroot "$libdir"
9133b789ec8aSmrg	  func_append temp_xrpath " -R$func_replace_sysroot_result"
9134c27c18e8Smrg	  case "$finalize_rpath " in
9135c27c18e8Smrg	  *" $libdir "*) ;;
9136b789ec8aSmrg	  *) func_append finalize_rpath " $libdir" ;;
9137c27c18e8Smrg	  esac
9138c27c18e8Smrg	done
913948e5ce07Smrg	if test yes != "$hardcode_into_libs" || test yes = "$build_old_libs"; then
9140c27c18e8Smrg	  dependency_libs="$temp_xrpath $dependency_libs"
9141c27c18e8Smrg	fi
9142c27c18e8Smrg      fi
9143c27c18e8Smrg
9144c27c18e8Smrg      # Make sure dlfiles contains only unique files that won't be dlpreopened
914548e5ce07Smrg      old_dlfiles=$dlfiles
9146c27c18e8Smrg      dlfiles=
9147c27c18e8Smrg      for lib in $old_dlfiles; do
9148c27c18e8Smrg	case " $dlprefiles $dlfiles " in
9149c27c18e8Smrg	*" $lib "*) ;;
9150b789ec8aSmrg	*) func_append dlfiles " $lib" ;;
9151c27c18e8Smrg	esac
9152c27c18e8Smrg      done
9153c27c18e8Smrg
9154c27c18e8Smrg      # Make sure dlprefiles contains only unique files
915548e5ce07Smrg      old_dlprefiles=$dlprefiles
9156c27c18e8Smrg      dlprefiles=
9157c27c18e8Smrg      for lib in $old_dlprefiles; do
9158c27c18e8Smrg	case "$dlprefiles " in
9159c27c18e8Smrg	*" $lib "*) ;;
9160b789ec8aSmrg	*) func_append dlprefiles " $lib" ;;
9161c27c18e8Smrg	esac
9162c27c18e8Smrg      done
9163c27c18e8Smrg
916448e5ce07Smrg      if test yes = "$build_libtool_libs"; then
9165c27c18e8Smrg	if test -n "$rpath"; then
9166c27c18e8Smrg	  case $host in
916737eb1ca1Smrg	  *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-*-beos* | *-cegcc* | *-*-haiku*)
9168c27c18e8Smrg	    # these systems don't actually have a c library (as such)!
9169c27c18e8Smrg	    ;;
9170c27c18e8Smrg	  *-*-rhapsody* | *-*-darwin1.[012])
9171c27c18e8Smrg	    # Rhapsody C library is in the System framework
9172b789ec8aSmrg	    func_append deplibs " System.ltframework"
9173c27c18e8Smrg	    ;;
9174c27c18e8Smrg	  *-*-netbsd*)
9175c27c18e8Smrg	    # Don't link with libc until the a.out ld.so is fixed.
9176c27c18e8Smrg	    ;;
9177c27c18e8Smrg	  *-*-openbsd* | *-*-freebsd* | *-*-dragonfly*)
9178c27c18e8Smrg	    # Do not include libc due to us having libc/libc_r.
9179c27c18e8Smrg	    ;;
9180c27c18e8Smrg	  *-*-sco3.2v5* | *-*-sco5v6*)
9181c27c18e8Smrg	    # Causes problems with __ctype
9182c27c18e8Smrg	    ;;
9183c27c18e8Smrg	  *-*-sysv4.2uw2* | *-*-sysv5* | *-*-unixware* | *-*-OpenUNIX*)
9184c27c18e8Smrg	    # Compiler inserts libc in the correct place for threads to work
9185c27c18e8Smrg	    ;;
9186c27c18e8Smrg	  *)
9187c27c18e8Smrg	    # Add libc to deplibs on all other systems if necessary.
918848e5ce07Smrg	    if test yes = "$build_libtool_need_lc"; then
9189b789ec8aSmrg	      func_append deplibs " -lc"
9190c27c18e8Smrg	    fi
9191c27c18e8Smrg	    ;;
9192c27c18e8Smrg	  esac
9193c27c18e8Smrg	fi
9194c27c18e8Smrg
9195c27c18e8Smrg	# Transform deplibs into only deplibs that can be linked in shared.
9196c27c18e8Smrg	name_save=$name
9197c27c18e8Smrg	libname_save=$libname
9198c27c18e8Smrg	release_save=$release
9199c27c18e8Smrg	versuffix_save=$versuffix
9200c27c18e8Smrg	major_save=$major
9201c27c18e8Smrg	# I'm not sure if I'm treating the release correctly.  I think
9202c27c18e8Smrg	# release should show up in the -l (ie -lgmp5) so we don't want to
9203c27c18e8Smrg	# add it in twice.  Is that correct?
920448e5ce07Smrg	release=
920548e5ce07Smrg	versuffix=
920648e5ce07Smrg	major=
9207c27c18e8Smrg	newdeplibs=
9208c27c18e8Smrg	droppeddeps=no
9209c27c18e8Smrg	case $deplibs_check_method in
9210c27c18e8Smrg	pass_all)
9211c27c18e8Smrg	  # Don't check for shared/static.  Everything works.
9212c27c18e8Smrg	  # This might be a little naive.  We might want to check
9213c27c18e8Smrg	  # whether the library exists or not.  But this is on
9214c27c18e8Smrg	  # osf3 & osf4 and I'm not really sure... Just
9215c27c18e8Smrg	  # implementing what was already the behavior.
9216c27c18e8Smrg	  newdeplibs=$deplibs
9217c27c18e8Smrg	  ;;
9218c27c18e8Smrg	test_compile)
9219c27c18e8Smrg	  # This code stresses the "libraries are programs" paradigm to its
9220c27c18e8Smrg	  # limits. Maybe even breaks it.  We compile a program, linking it
9221c27c18e8Smrg	  # against the deplibs as a proxy for the library.  Then we can check
9222c27c18e8Smrg	  # whether they linked in statically or dynamically with ldd.
9223c27c18e8Smrg	  $opt_dry_run || $RM conftest.c
9224c27c18e8Smrg	  cat > conftest.c <<EOF
9225c27c18e8Smrg	  int main() { return 0; }
9226c27c18e8SmrgEOF
9227c27c18e8Smrg	  $opt_dry_run || $RM conftest
9228c27c18e8Smrg	  if $LTCC $LTCFLAGS -o conftest conftest.c $deplibs; then
9229c27c18e8Smrg	    ldd_output=`ldd conftest`
9230c27c18e8Smrg	    for i in $deplibs; do
9231c27c18e8Smrg	      case $i in
9232c27c18e8Smrg	      -l*)
9233c27c18e8Smrg		func_stripname -l '' "$i"
9234c27c18e8Smrg		name=$func_stripname_result
923548e5ce07Smrg		if test yes = "$allow_libtool_libs_with_static_runtimes"; then
9236c27c18e8Smrg		  case " $predeps $postdeps " in
9237c27c18e8Smrg		  *" $i "*)
9238b789ec8aSmrg		    func_append newdeplibs " $i"
923948e5ce07Smrg		    i=
9240c27c18e8Smrg		    ;;
9241c27c18e8Smrg		  esac
9242c27c18e8Smrg		fi
924348e5ce07Smrg		if test -n "$i"; then
9244c27c18e8Smrg		  libname=`eval "\\$ECHO \"$libname_spec\""`
9245c27c18e8Smrg		  deplib_matches=`eval "\\$ECHO \"$library_names_spec\""`
9246c27c18e8Smrg		  set dummy $deplib_matches; shift
9247c27c18e8Smrg		  deplib_match=$1
924848e5ce07Smrg		  if test `expr "$ldd_output" : ".*$deplib_match"` -ne 0; then
9249b789ec8aSmrg		    func_append newdeplibs " $i"
9250c27c18e8Smrg		  else
9251c27c18e8Smrg		    droppeddeps=yes
925237eb1ca1Smrg		    echo
9253c27c18e8Smrg		    $ECHO "*** Warning: dynamic linker does not accept needed library $i."
925437eb1ca1Smrg		    echo "*** I have the capability to make that library automatically link in when"
925537eb1ca1Smrg		    echo "*** you link to this library.  But I can only do this if you have a"
925637eb1ca1Smrg		    echo "*** shared version of the library, which I believe you do not have"
925737eb1ca1Smrg		    echo "*** because a test_compile did reveal that the linker did not use it for"
925837eb1ca1Smrg		    echo "*** its dynamic dependency list that programs get resolved with at runtime."
9259c27c18e8Smrg		  fi
9260c27c18e8Smrg		fi
9261c27c18e8Smrg		;;
9262c27c18e8Smrg	      *)
9263b789ec8aSmrg		func_append newdeplibs " $i"
9264c27c18e8Smrg		;;
9265c27c18e8Smrg	      esac
9266c27c18e8Smrg	    done
9267c27c18e8Smrg	  else
9268c27c18e8Smrg	    # Error occurred in the first compile.  Let's try to salvage
9269c27c18e8Smrg	    # the situation: Compile a separate program for each library.
9270c27c18e8Smrg	    for i in $deplibs; do
9271c27c18e8Smrg	      case $i in
9272c27c18e8Smrg	      -l*)
9273c27c18e8Smrg		func_stripname -l '' "$i"
9274c27c18e8Smrg		name=$func_stripname_result
9275c27c18e8Smrg		$opt_dry_run || $RM conftest
9276c27c18e8Smrg		if $LTCC $LTCFLAGS -o conftest conftest.c $i; then
9277c27c18e8Smrg		  ldd_output=`ldd conftest`
927848e5ce07Smrg		  if test yes = "$allow_libtool_libs_with_static_runtimes"; then
9279c27c18e8Smrg		    case " $predeps $postdeps " in
9280c27c18e8Smrg		    *" $i "*)
9281b789ec8aSmrg		      func_append newdeplibs " $i"
928248e5ce07Smrg		      i=
9283c27c18e8Smrg		      ;;
9284c27c18e8Smrg		    esac
9285c27c18e8Smrg		  fi
928648e5ce07Smrg		  if test -n "$i"; then
9287c27c18e8Smrg		    libname=`eval "\\$ECHO \"$libname_spec\""`
9288c27c18e8Smrg		    deplib_matches=`eval "\\$ECHO \"$library_names_spec\""`
9289c27c18e8Smrg		    set dummy $deplib_matches; shift
9290c27c18e8Smrg		    deplib_match=$1
929148e5ce07Smrg		    if test `expr "$ldd_output" : ".*$deplib_match"` -ne 0; then
9292b789ec8aSmrg		      func_append newdeplibs " $i"
9293c27c18e8Smrg		    else
9294c27c18e8Smrg		      droppeddeps=yes
929537eb1ca1Smrg		      echo
9296c27c18e8Smrg		      $ECHO "*** Warning: dynamic linker does not accept needed library $i."
929737eb1ca1Smrg		      echo "*** I have the capability to make that library automatically link in when"
929837eb1ca1Smrg		      echo "*** you link to this library.  But I can only do this if you have a"
929937eb1ca1Smrg		      echo "*** shared version of the library, which you do not appear to have"
930037eb1ca1Smrg		      echo "*** because a test_compile did reveal that the linker did not use this one"
930137eb1ca1Smrg		      echo "*** as a dynamic dependency that programs can get resolved with at runtime."
9302c27c18e8Smrg		    fi
9303c27c18e8Smrg		  fi
9304c27c18e8Smrg		else
9305c27c18e8Smrg		  droppeddeps=yes
930637eb1ca1Smrg		  echo
9307c27c18e8Smrg		  $ECHO "*** Warning!  Library $i is needed by this library but I was not able to"
930837eb1ca1Smrg		  echo "*** make it link in!  You will probably need to install it or some"
930937eb1ca1Smrg		  echo "*** library that it depends on before this library will be fully"
931037eb1ca1Smrg		  echo "*** functional.  Installing it before continuing would be even better."
9311c27c18e8Smrg		fi
9312c27c18e8Smrg		;;
9313c27c18e8Smrg	      *)
9314b789ec8aSmrg		func_append newdeplibs " $i"
9315c27c18e8Smrg		;;
9316c27c18e8Smrg	      esac
9317c27c18e8Smrg	    done
9318c27c18e8Smrg	  fi
9319c27c18e8Smrg	  ;;
9320c27c18e8Smrg	file_magic*)
9321c27c18e8Smrg	  set dummy $deplibs_check_method; shift
9322c27c18e8Smrg	  file_magic_regex=`expr "$deplibs_check_method" : "$1 \(.*\)"`
9323c27c18e8Smrg	  for a_deplib in $deplibs; do
9324c27c18e8Smrg	    case $a_deplib in
9325c27c18e8Smrg	    -l*)
9326c27c18e8Smrg	      func_stripname -l '' "$a_deplib"
9327c27c18e8Smrg	      name=$func_stripname_result
932848e5ce07Smrg	      if test yes = "$allow_libtool_libs_with_static_runtimes"; then
9329c27c18e8Smrg		case " $predeps $postdeps " in
9330c27c18e8Smrg		*" $a_deplib "*)
9331b789ec8aSmrg		  func_append newdeplibs " $a_deplib"
933248e5ce07Smrg		  a_deplib=
9333c27c18e8Smrg		  ;;
9334c27c18e8Smrg		esac
9335c27c18e8Smrg	      fi
933648e5ce07Smrg	      if test -n "$a_deplib"; then
9337c27c18e8Smrg		libname=`eval "\\$ECHO \"$libname_spec\""`
9338b789ec8aSmrg		if test -n "$file_magic_glob"; then
9339b789ec8aSmrg		  libnameglob=`func_echo_all "$libname" | $SED -e $file_magic_glob`
9340b789ec8aSmrg		else
9341b789ec8aSmrg		  libnameglob=$libname
9342b789ec8aSmrg		fi
934348e5ce07Smrg		test yes = "$want_nocaseglob" && nocaseglob=`shopt -p nocaseglob`
9344c27c18e8Smrg		for i in $lib_search_path $sys_lib_search_path $shlib_search_path; do
934548e5ce07Smrg		  if test yes = "$want_nocaseglob"; then
9346b789ec8aSmrg		    shopt -s nocaseglob
9347b789ec8aSmrg		    potential_libs=`ls $i/$libnameglob[.-]* 2>/dev/null`
9348b789ec8aSmrg		    $nocaseglob
9349b789ec8aSmrg		  else
9350b789ec8aSmrg		    potential_libs=`ls $i/$libnameglob[.-]* 2>/dev/null`
9351b789ec8aSmrg		  fi
9352c27c18e8Smrg		  for potent_lib in $potential_libs; do
9353c27c18e8Smrg		      # Follow soft links.
9354c27c18e8Smrg		      if ls -lLd "$potent_lib" 2>/dev/null |
9355c27c18e8Smrg			 $GREP " -> " >/dev/null; then
9356c27c18e8Smrg			continue
9357c27c18e8Smrg		      fi
9358c27c18e8Smrg		      # The statement above tries to avoid entering an
9359c27c18e8Smrg		      # endless loop below, in case of cyclic links.
9360c27c18e8Smrg		      # We might still enter an endless loop, since a link
9361c27c18e8Smrg		      # loop can be closed while we follow links,
9362c27c18e8Smrg		      # but so what?
936348e5ce07Smrg		      potlib=$potent_lib
9364c27c18e8Smrg		      while test -h "$potlib" 2>/dev/null; do
936548e5ce07Smrg			potliblink=`ls -ld $potlib | $SED 's/.* -> //'`
9366c27c18e8Smrg			case $potliblink in
936748e5ce07Smrg			[\\/]* | [A-Za-z]:[\\/]*) potlib=$potliblink;;
936848e5ce07Smrg			*) potlib=`$ECHO "$potlib" | $SED 's|[^/]*$||'`"$potliblink";;
9369c27c18e8Smrg			esac
9370c27c18e8Smrg		      done
9371c27c18e8Smrg		      if eval $file_magic_cmd \"\$potlib\" 2>/dev/null |
9372c27c18e8Smrg			 $SED -e 10q |
9373c27c18e8Smrg			 $EGREP "$file_magic_regex" > /dev/null; then
9374b789ec8aSmrg			func_append newdeplibs " $a_deplib"
937548e5ce07Smrg			a_deplib=
9376c27c18e8Smrg			break 2
9377c27c18e8Smrg		      fi
9378c27c18e8Smrg		  done
9379c27c18e8Smrg		done
9380c27c18e8Smrg	      fi
938148e5ce07Smrg	      if test -n "$a_deplib"; then
9382c27c18e8Smrg		droppeddeps=yes
938337eb1ca1Smrg		echo
9384c27c18e8Smrg		$ECHO "*** Warning: linker path does not have real file for library $a_deplib."
938537eb1ca1Smrg		echo "*** I have the capability to make that library automatically link in when"
938637eb1ca1Smrg		echo "*** you link to this library.  But I can only do this if you have a"
938737eb1ca1Smrg		echo "*** shared version of the library, which you do not appear to have"
938837eb1ca1Smrg		echo "*** because I did check the linker path looking for a file starting"
938948e5ce07Smrg		if test -z "$potlib"; then
9390c27c18e8Smrg		  $ECHO "*** with $libname but no candidates were found. (...for file magic test)"
9391c27c18e8Smrg		else
9392c27c18e8Smrg		  $ECHO "*** with $libname and none of the candidates passed a file format test"
9393c27c18e8Smrg		  $ECHO "*** using a file magic. Last file checked: $potlib"
9394c27c18e8Smrg		fi
9395c27c18e8Smrg	      fi
9396c27c18e8Smrg	      ;;
9397c27c18e8Smrg	    *)
9398c27c18e8Smrg	      # Add a -L argument.
9399b789ec8aSmrg	      func_append newdeplibs " $a_deplib"
9400c27c18e8Smrg	      ;;
9401c27c18e8Smrg	    esac
9402c27c18e8Smrg	  done # Gone through all deplibs.
9403c27c18e8Smrg	  ;;
9404c27c18e8Smrg	match_pattern*)
9405c27c18e8Smrg	  set dummy $deplibs_check_method; shift
9406c27c18e8Smrg	  match_pattern_regex=`expr "$deplibs_check_method" : "$1 \(.*\)"`
9407c27c18e8Smrg	  for a_deplib in $deplibs; do
9408c27c18e8Smrg	    case $a_deplib in
9409c27c18e8Smrg	    -l*)
9410c27c18e8Smrg	      func_stripname -l '' "$a_deplib"
9411c27c18e8Smrg	      name=$func_stripname_result
941248e5ce07Smrg	      if test yes = "$allow_libtool_libs_with_static_runtimes"; then
9413c27c18e8Smrg		case " $predeps $postdeps " in
9414c27c18e8Smrg		*" $a_deplib "*)
9415b789ec8aSmrg		  func_append newdeplibs " $a_deplib"
941648e5ce07Smrg		  a_deplib=
9417c27c18e8Smrg		  ;;
9418c27c18e8Smrg		esac
9419c27c18e8Smrg	      fi
942048e5ce07Smrg	      if test -n "$a_deplib"; then
9421c27c18e8Smrg		libname=`eval "\\$ECHO \"$libname_spec\""`
9422c27c18e8Smrg		for i in $lib_search_path $sys_lib_search_path $shlib_search_path; do
9423c27c18e8Smrg		  potential_libs=`ls $i/$libname[.-]* 2>/dev/null`
9424c27c18e8Smrg		  for potent_lib in $potential_libs; do
942548e5ce07Smrg		    potlib=$potent_lib # see symlink-check above in file_magic test
942637eb1ca1Smrg		    if eval "\$ECHO \"$potent_lib\"" 2>/dev/null | $SED 10q | \
9427c27c18e8Smrg		       $EGREP "$match_pattern_regex" > /dev/null; then
9428b789ec8aSmrg		      func_append newdeplibs " $a_deplib"
942948e5ce07Smrg		      a_deplib=
9430c27c18e8Smrg		      break 2
9431c27c18e8Smrg		    fi
9432c27c18e8Smrg		  done
9433c27c18e8Smrg		done
9434c27c18e8Smrg	      fi
943548e5ce07Smrg	      if test -n "$a_deplib"; then
9436c27c18e8Smrg		droppeddeps=yes
943737eb1ca1Smrg		echo
9438c27c18e8Smrg		$ECHO "*** Warning: linker path does not have real file for library $a_deplib."
943937eb1ca1Smrg		echo "*** I have the capability to make that library automatically link in when"
944037eb1ca1Smrg		echo "*** you link to this library.  But I can only do this if you have a"
944137eb1ca1Smrg		echo "*** shared version of the library, which you do not appear to have"
944237eb1ca1Smrg		echo "*** because I did check the linker path looking for a file starting"
944348e5ce07Smrg		if test -z "$potlib"; then
9444c27c18e8Smrg		  $ECHO "*** with $libname but no candidates were found. (...for regex pattern test)"
9445c27c18e8Smrg		else
9446c27c18e8Smrg		  $ECHO "*** with $libname and none of the candidates passed a file format test"
9447c27c18e8Smrg		  $ECHO "*** using a regex pattern. Last file checked: $potlib"
9448c27c18e8Smrg		fi
9449c27c18e8Smrg	      fi
9450c27c18e8Smrg	      ;;
9451c27c18e8Smrg	    *)
9452c27c18e8Smrg	      # Add a -L argument.
9453b789ec8aSmrg	      func_append newdeplibs " $a_deplib"
9454c27c18e8Smrg	      ;;
9455c27c18e8Smrg	    esac
9456c27c18e8Smrg	  done # Gone through all deplibs.
9457c27c18e8Smrg	  ;;
9458c27c18e8Smrg	none | unknown | *)
945948e5ce07Smrg	  newdeplibs=
946037eb1ca1Smrg	  tmp_deplibs=`$ECHO " $deplibs" | $SED 's/ -lc$//; s/ -[LR][^ ]*//g'`
946148e5ce07Smrg	  if test yes = "$allow_libtool_libs_with_static_runtimes"; then
946248e5ce07Smrg	    for i in $predeps $postdeps; do
9463c27c18e8Smrg	      # can't use Xsed below, because $i might contain '/'
946448e5ce07Smrg	      tmp_deplibs=`$ECHO " $tmp_deplibs" | $SED "s|$i||"`
9465c27c18e8Smrg	    done
9466c27c18e8Smrg	  fi
946737eb1ca1Smrg	  case $tmp_deplibs in
946837eb1ca1Smrg	  *[!\	\ ]*)
946937eb1ca1Smrg	    echo
947048e5ce07Smrg	    if test none = "$deplibs_check_method"; then
947137eb1ca1Smrg	      echo "*** Warning: inter-library dependencies are not supported in this platform."
9472c27c18e8Smrg	    else
947337eb1ca1Smrg	      echo "*** Warning: inter-library dependencies are not known to be supported."
9474c27c18e8Smrg	    fi
947537eb1ca1Smrg	    echo "*** All declared inter-library dependencies are being dropped."
9476c27c18e8Smrg	    droppeddeps=yes
947737eb1ca1Smrg	    ;;
947837eb1ca1Smrg	  esac
9479c27c18e8Smrg	  ;;
9480c27c18e8Smrg	esac
9481c27c18e8Smrg	versuffix=$versuffix_save
9482c27c18e8Smrg	major=$major_save
9483c27c18e8Smrg	release=$release_save
9484c27c18e8Smrg	libname=$libname_save
9485c27c18e8Smrg	name=$name_save
9486c27c18e8Smrg
9487c27c18e8Smrg	case $host in
9488c27c18e8Smrg	*-*-rhapsody* | *-*-darwin1.[012])
9489c27c18e8Smrg	  # On Rhapsody replace the C library with the System framework
949037eb1ca1Smrg	  newdeplibs=`$ECHO " $newdeplibs" | $SED 's/ -lc / System.ltframework /'`
9491c27c18e8Smrg	  ;;
9492c27c18e8Smrg	esac
9493c27c18e8Smrg
949448e5ce07Smrg	if test yes = "$droppeddeps"; then
949548e5ce07Smrg	  if test yes = "$module"; then
949637eb1ca1Smrg	    echo
949737eb1ca1Smrg	    echo "*** Warning: libtool could not satisfy all declared inter-library"
9498c27c18e8Smrg	    $ECHO "*** dependencies of module $libname.  Therefore, libtool will create"
949937eb1ca1Smrg	    echo "*** a static module, that should work as long as the dlopening"
950037eb1ca1Smrg	    echo "*** application is linked with the -dlopen flag."
9501c27c18e8Smrg	    if test -z "$global_symbol_pipe"; then
950237eb1ca1Smrg	      echo
950337eb1ca1Smrg	      echo "*** However, this would only work if libtool was able to extract symbol"
950448e5ce07Smrg	      echo "*** lists from a program, using 'nm' or equivalent, but libtool could"
950537eb1ca1Smrg	      echo "*** not find such a program.  So, this module is probably useless."
950648e5ce07Smrg	      echo "*** 'nm' from GNU binutils and a full rebuild may help."
9507c27c18e8Smrg	    fi
950848e5ce07Smrg	    if test no = "$build_old_libs"; then
950948e5ce07Smrg	      oldlibs=$output_objdir/$libname.$libext
9510c27c18e8Smrg	      build_libtool_libs=module
9511c27c18e8Smrg	      build_old_libs=yes
9512c27c18e8Smrg	    else
9513c27c18e8Smrg	      build_libtool_libs=no
9514c27c18e8Smrg	    fi
9515c27c18e8Smrg	  else
951637eb1ca1Smrg	    echo "*** The inter-library dependencies that have been dropped here will be"
951737eb1ca1Smrg	    echo "*** automatically added whenever a program is linked with this library"
951837eb1ca1Smrg	    echo "*** or is declared to -dlopen it."
9519c27c18e8Smrg
952048e5ce07Smrg	    if test no = "$allow_undefined"; then
952137eb1ca1Smrg	      echo
952237eb1ca1Smrg	      echo "*** Since this library must not contain undefined symbols,"
952337eb1ca1Smrg	      echo "*** because either the platform does not support them or"
952437eb1ca1Smrg	      echo "*** it was explicitly requested with -no-undefined,"
952537eb1ca1Smrg	      echo "*** libtool will only create a static version of it."
952648e5ce07Smrg	      if test no = "$build_old_libs"; then
952748e5ce07Smrg		oldlibs=$output_objdir/$libname.$libext
9528c27c18e8Smrg		build_libtool_libs=module
9529c27c18e8Smrg		build_old_libs=yes
9530c27c18e8Smrg	      else
9531c27c18e8Smrg		build_libtool_libs=no
9532c27c18e8Smrg	      fi
9533c27c18e8Smrg	    fi
9534c27c18e8Smrg	  fi
9535c27c18e8Smrg	fi
9536c27c18e8Smrg	# Done checking deplibs!
9537c27c18e8Smrg	deplibs=$newdeplibs
9538c27c18e8Smrg      fi
9539c27c18e8Smrg      # Time to change all our "foo.ltframework" stuff back to "-framework foo"
9540c27c18e8Smrg      case $host in
9541c27c18e8Smrg	*-*-darwin*)
954237eb1ca1Smrg	  newdeplibs=`$ECHO " $newdeplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'`
954337eb1ca1Smrg	  new_inherited_linker_flags=`$ECHO " $new_inherited_linker_flags" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'`
954437eb1ca1Smrg	  deplibs=`$ECHO " $deplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'`
9545c27c18e8Smrg	  ;;
9546c27c18e8Smrg      esac
9547c27c18e8Smrg
9548c27c18e8Smrg      # move library search paths that coincide with paths to not yet
9549c27c18e8Smrg      # installed libraries to the beginning of the library search list
9550c27c18e8Smrg      new_libs=
9551c27c18e8Smrg      for path in $notinst_path; do
9552c27c18e8Smrg	case " $new_libs " in
9553c27c18e8Smrg	*" -L$path/$objdir "*) ;;
9554c27c18e8Smrg	*)
9555c27c18e8Smrg	  case " $deplibs " in
9556c27c18e8Smrg	  *" -L$path/$objdir "*)
9557b789ec8aSmrg	    func_append new_libs " -L$path/$objdir" ;;
9558c27c18e8Smrg	  esac
9559c27c18e8Smrg	  ;;
9560c27c18e8Smrg	esac
9561c27c18e8Smrg      done
9562c27c18e8Smrg      for deplib in $deplibs; do
9563c27c18e8Smrg	case $deplib in
9564c27c18e8Smrg	-L*)
9565c27c18e8Smrg	  case " $new_libs " in
9566c27c18e8Smrg	  *" $deplib "*) ;;
9567b789ec8aSmrg	  *) func_append new_libs " $deplib" ;;
9568c27c18e8Smrg	  esac
9569c27c18e8Smrg	  ;;
9570b789ec8aSmrg	*) func_append new_libs " $deplib" ;;
9571c27c18e8Smrg	esac
9572c27c18e8Smrg      done
957348e5ce07Smrg      deplibs=$new_libs
9574c27c18e8Smrg
9575c27c18e8Smrg      # All the library-specific variables (install_libdir is set above).
9576c27c18e8Smrg      library_names=
9577c27c18e8Smrg      old_library=
9578c27c18e8Smrg      dlname=
9579c27c18e8Smrg
9580c27c18e8Smrg      # Test again, we may have decided not to build it any more
958148e5ce07Smrg      if test yes = "$build_libtool_libs"; then
958248e5ce07Smrg	# Remove $wl instances when linking with ld.
9583f1ee322dSmrg	# FIXME: should test the right _cmds variable.
9584f1ee322dSmrg	case $archive_cmds in
9585f1ee322dSmrg	  *\$LD\ *) wl= ;;
9586f1ee322dSmrg        esac
958748e5ce07Smrg	if test yes = "$hardcode_into_libs"; then
9588c27c18e8Smrg	  # Hardcode the library paths
9589c27c18e8Smrg	  hardcode_libdirs=
9590c27c18e8Smrg	  dep_rpath=
959148e5ce07Smrg	  rpath=$finalize_rpath
959248e5ce07Smrg	  test relink = "$opt_mode" || rpath=$compile_rpath$rpath
9593c27c18e8Smrg	  for libdir in $rpath; do
9594c27c18e8Smrg	    if test -n "$hardcode_libdir_flag_spec"; then
9595c27c18e8Smrg	      if test -n "$hardcode_libdir_separator"; then
9596b789ec8aSmrg		func_replace_sysroot "$libdir"
9597b789ec8aSmrg		libdir=$func_replace_sysroot_result
9598c27c18e8Smrg		if test -z "$hardcode_libdirs"; then
959948e5ce07Smrg		  hardcode_libdirs=$libdir
9600c27c18e8Smrg		else
9601c27c18e8Smrg		  # Just accumulate the unique libdirs.
9602c27c18e8Smrg		  case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in
9603c27c18e8Smrg		  *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*)
9604c27c18e8Smrg		    ;;
9605c27c18e8Smrg		  *)
9606b789ec8aSmrg		    func_append hardcode_libdirs "$hardcode_libdir_separator$libdir"
9607c27c18e8Smrg		    ;;
9608c27c18e8Smrg		  esac
9609c27c18e8Smrg		fi
9610c27c18e8Smrg	      else
9611c27c18e8Smrg		eval flag=\"$hardcode_libdir_flag_spec\"
9612b789ec8aSmrg		func_append dep_rpath " $flag"
9613c27c18e8Smrg	      fi
9614c27c18e8Smrg	    elif test -n "$runpath_var"; then
9615c27c18e8Smrg	      case "$perm_rpath " in
9616c27c18e8Smrg	      *" $libdir "*) ;;
9617f1ee322dSmrg	      *) func_append perm_rpath " $libdir" ;;
9618c27c18e8Smrg	      esac
9619c27c18e8Smrg	    fi
9620c27c18e8Smrg	  done
9621c27c18e8Smrg	  # Substitute the hardcoded libdirs into the rpath.
9622c27c18e8Smrg	  if test -n "$hardcode_libdir_separator" &&
9623c27c18e8Smrg	     test -n "$hardcode_libdirs"; then
962448e5ce07Smrg	    libdir=$hardcode_libdirs
9625f1ee322dSmrg	    eval "dep_rpath=\"$hardcode_libdir_flag_spec\""
9626c27c18e8Smrg	  fi
9627c27c18e8Smrg	  if test -n "$runpath_var" && test -n "$perm_rpath"; then
9628c27c18e8Smrg	    # We should set the runpath_var.
9629c27c18e8Smrg	    rpath=
9630c27c18e8Smrg	    for dir in $perm_rpath; do
9631b789ec8aSmrg	      func_append rpath "$dir:"
9632c27c18e8Smrg	    done
9633c27c18e8Smrg	    eval "$runpath_var='$rpath\$$runpath_var'; export $runpath_var"
9634c27c18e8Smrg	  fi
9635c27c18e8Smrg	  test -n "$dep_rpath" && deplibs="$dep_rpath $deplibs"
9636c27c18e8Smrg	fi
9637c43cc173Smrg
963848e5ce07Smrg	shlibpath=$finalize_shlibpath
963948e5ce07Smrg	test relink = "$opt_mode" || shlibpath=$compile_shlibpath$shlibpath
9640c27c18e8Smrg	if test -n "$shlibpath"; then
9641c27c18e8Smrg	  eval "$shlibpath_var='$shlibpath\$$shlibpath_var'; export $shlibpath_var"
9642c27c18e8Smrg	fi
9643c43cc173Smrg
9644c27c18e8Smrg	# Get the real and link names of the library.
9645c27c18e8Smrg	eval shared_ext=\"$shrext_cmds\"
9646c27c18e8Smrg	eval library_names=\"$library_names_spec\"
9647c27c18e8Smrg	set dummy $library_names
9648c27c18e8Smrg	shift
964948e5ce07Smrg	realname=$1
9650c27c18e8Smrg	shift
9651c43cc173Smrg
9652c27c18e8Smrg	if test -n "$soname_spec"; then
9653c27c18e8Smrg	  eval soname=\"$soname_spec\"
9654c27c18e8Smrg	else
965548e5ce07Smrg	  soname=$realname
9656c27c18e8Smrg	fi
9657c27c18e8Smrg	if test -z "$dlname"; then
9658c27c18e8Smrg	  dlname=$soname
9659c27c18e8Smrg	fi
9660c43cc173Smrg
966148e5ce07Smrg	lib=$output_objdir/$realname
9662c27c18e8Smrg	linknames=
9663c27c18e8Smrg	for link
9664c27c18e8Smrg	do
9665b789ec8aSmrg	  func_append linknames " $link"
9666c27c18e8Smrg	done
9667c43cc173Smrg
9668c27c18e8Smrg	# Use standard objects if they are pic
966937eb1ca1Smrg	test -z "$pic_flag" && libobjs=`$ECHO "$libobjs" | $SP2NL | $SED "$lo2o" | $NL2SP`
9670c27c18e8Smrg	test "X$libobjs" = "X " && libobjs=
9671c43cc173Smrg
9672c27c18e8Smrg	delfiles=
9673c27c18e8Smrg	if test -n "$export_symbols" && test -n "$include_expsyms"; then
9674c27c18e8Smrg	  $opt_dry_run || cp "$export_symbols" "$output_objdir/$libname.uexp"
967548e5ce07Smrg	  export_symbols=$output_objdir/$libname.uexp
9676b789ec8aSmrg	  func_append delfiles " $export_symbols"
9677c27c18e8Smrg	fi
9678c43cc173Smrg
9679c27c18e8Smrg	orig_export_symbols=
9680c27c18e8Smrg	case $host_os in
9681c27c18e8Smrg	cygwin* | mingw* | cegcc*)
9682c27c18e8Smrg	  if test -n "$export_symbols" && test -z "$export_symbols_regex"; then
9683c27c18e8Smrg	    # exporting using user supplied symfile
968448e5ce07Smrg	    func_dll_def_p "$export_symbols" || {
9685c27c18e8Smrg	      # and it's NOT already a .def file. Must figure out
9686c27c18e8Smrg	      # which of the given symbols are data symbols and tag
9687c27c18e8Smrg	      # them as such. So, trigger use of export_symbols_cmds.
9688c27c18e8Smrg	      # export_symbols gets reassigned inside the "prepare
9689c27c18e8Smrg	      # the list of exported symbols" if statement, so the
9690c27c18e8Smrg	      # include_expsyms logic still works.
969148e5ce07Smrg	      orig_export_symbols=$export_symbols
9692c27c18e8Smrg	      export_symbols=
9693c27c18e8Smrg	      always_export_symbols=yes
969448e5ce07Smrg	    }
9695c27c18e8Smrg	  fi
9696c27c18e8Smrg	  ;;
9697c27c18e8Smrg	esac
9698c43cc173Smrg
9699c27c18e8Smrg	# Prepare the list of exported symbols
9700c27c18e8Smrg	if test -z "$export_symbols"; then
970148e5ce07Smrg	  if test yes = "$always_export_symbols" || test -n "$export_symbols_regex"; then
970248e5ce07Smrg	    func_verbose "generating symbol list for '$libname.la'"
970348e5ce07Smrg	    export_symbols=$output_objdir/$libname.exp
9704c27c18e8Smrg	    $opt_dry_run || $RM $export_symbols
9705c27c18e8Smrg	    cmds=$export_symbols_cmds
970648e5ce07Smrg	    save_ifs=$IFS; IFS='~'
9707b789ec8aSmrg	    for cmd1 in $cmds; do
970848e5ce07Smrg	      IFS=$save_ifs
9709b789ec8aSmrg	      # Take the normal branch if the nm_file_list_spec branch
9710b789ec8aSmrg	      # doesn't work or if tool conversion is not needed.
9711b789ec8aSmrg	      case $nm_file_list_spec~$to_tool_file_cmd in
9712b789ec8aSmrg		*~func_convert_file_noop | *~func_convert_file_msys_to_w32 | ~*)
9713b789ec8aSmrg		  try_normal_branch=yes
9714b789ec8aSmrg		  eval cmd=\"$cmd1\"
9715b789ec8aSmrg		  func_len " $cmd"
9716b789ec8aSmrg		  len=$func_len_result
9717b789ec8aSmrg		  ;;
9718b789ec8aSmrg		*)
9719b789ec8aSmrg		  try_normal_branch=no
9720b789ec8aSmrg		  ;;
9721b789ec8aSmrg	      esac
972248e5ce07Smrg	      if test yes = "$try_normal_branch" \
9723b789ec8aSmrg		 && { test "$len" -lt "$max_cmd_len" \
9724b789ec8aSmrg		      || test "$max_cmd_len" -le -1; }
9725b789ec8aSmrg	      then
9726b789ec8aSmrg		func_show_eval "$cmd" 'exit $?'
9727b789ec8aSmrg		skipped_export=false
9728b789ec8aSmrg	      elif test -n "$nm_file_list_spec"; then
9729b789ec8aSmrg		func_basename "$output"
9730b789ec8aSmrg		output_la=$func_basename_result
9731b789ec8aSmrg		save_libobjs=$libobjs
9732b789ec8aSmrg		save_output=$output
973348e5ce07Smrg		output=$output_objdir/$output_la.nm
9734b789ec8aSmrg		func_to_tool_file "$output"
9735b789ec8aSmrg		libobjs=$nm_file_list_spec$func_to_tool_file_result
9736b789ec8aSmrg		func_append delfiles " $output"
9737b789ec8aSmrg		func_verbose "creating $NM input file list: $output"
9738b789ec8aSmrg		for obj in $save_libobjs; do
9739b789ec8aSmrg		  func_to_tool_file "$obj"
9740b789ec8aSmrg		  $ECHO "$func_to_tool_file_result"
9741b789ec8aSmrg		done > "$output"
9742b789ec8aSmrg		eval cmd=\"$cmd1\"
9743c27c18e8Smrg		func_show_eval "$cmd" 'exit $?'
9744b789ec8aSmrg		output=$save_output
9745b789ec8aSmrg		libobjs=$save_libobjs
9746c27c18e8Smrg		skipped_export=false
9747c27c18e8Smrg	      else
9748c27c18e8Smrg		# The command line is too long to execute in one step.
9749c27c18e8Smrg		func_verbose "using reloadable object file for export list..."
9750c27c18e8Smrg		skipped_export=:
9751c27c18e8Smrg		# Break out early, otherwise skipped_export may be
9752c27c18e8Smrg		# set to false by a later but shorter cmd.
9753c27c18e8Smrg		break
9754c27c18e8Smrg	      fi
9755c27c18e8Smrg	    done
975648e5ce07Smrg	    IFS=$save_ifs
975748e5ce07Smrg	    if test -n "$export_symbols_regex" && test : != "$skipped_export"; then
9758c27c18e8Smrg	      func_show_eval '$EGREP -e "$export_symbols_regex" "$export_symbols" > "${export_symbols}T"'
9759c27c18e8Smrg	      func_show_eval '$MV "${export_symbols}T" "$export_symbols"'
9760c27c18e8Smrg	    fi
9761c27c18e8Smrg	  fi
9762c27c18e8Smrg	fi
9763c43cc173Smrg
9764c27c18e8Smrg	if test -n "$export_symbols" && test -n "$include_expsyms"; then
976548e5ce07Smrg	  tmp_export_symbols=$export_symbols
976648e5ce07Smrg	  test -n "$orig_export_symbols" && tmp_export_symbols=$orig_export_symbols
976737eb1ca1Smrg	  $opt_dry_run || eval '$ECHO "$include_expsyms" | $SP2NL >> "$tmp_export_symbols"'
9768c27c18e8Smrg	fi
9769c43cc173Smrg
977048e5ce07Smrg	if test : != "$skipped_export" && test -n "$orig_export_symbols"; then
9771c27c18e8Smrg	  # The given exports_symbols file has to be filtered, so filter it.
977248e5ce07Smrg	  func_verbose "filter symbol list for '$libname.la' to tag DATA exports"
9773c27c18e8Smrg	  # FIXME: $output_objdir/$libname.filter potentially contains lots of
977448e5ce07Smrg	  # 's' commands, which not all seds can handle. GNU sed should be fine
9775c27c18e8Smrg	  # though. Also, the filter scales superlinearly with the number of
9776c27c18e8Smrg	  # global variables. join(1) would be nice here, but unfortunately
9777c27c18e8Smrg	  # isn't a blessed tool.
9778c27c18e8Smrg	  $opt_dry_run || $SED -e '/[ ,]DATA/!d;s,\(.*\)\([ \,].*\),s|^\1$|\1\2|,' < $export_symbols > $output_objdir/$libname.filter
9779b789ec8aSmrg	  func_append delfiles " $export_symbols $output_objdir/$libname.filter"
9780c27c18e8Smrg	  export_symbols=$output_objdir/$libname.def
9781c27c18e8Smrg	  $opt_dry_run || $SED -f $output_objdir/$libname.filter < $orig_export_symbols > $export_symbols
9782c43cc173Smrg	fi
9783c43cc173Smrg
9784c27c18e8Smrg	tmp_deplibs=
9785c27c18e8Smrg	for test_deplib in $deplibs; do
9786c27c18e8Smrg	  case " $convenience " in
9787c27c18e8Smrg	  *" $test_deplib "*) ;;
9788c27c18e8Smrg	  *)
9789b789ec8aSmrg	    func_append tmp_deplibs " $test_deplib"
9790c27c18e8Smrg	    ;;
9791c27c18e8Smrg	  esac
9792c27c18e8Smrg	done
979348e5ce07Smrg	deplibs=$tmp_deplibs
9794c43cc173Smrg
9795c27c18e8Smrg	if test -n "$convenience"; then
9796c27c18e8Smrg	  if test -n "$whole_archive_flag_spec" &&
979748e5ce07Smrg	    test yes = "$compiler_needs_object" &&
9798c27c18e8Smrg	    test -z "$libobjs"; then
9799c27c18e8Smrg	    # extract the archives, so we have objects to list.
9800c27c18e8Smrg	    # TODO: could optimize this to just extract one archive.
9801c27c18e8Smrg	    whole_archive_flag_spec=
9802c27c18e8Smrg	  fi
9803c27c18e8Smrg	  if test -n "$whole_archive_flag_spec"; then
9804c27c18e8Smrg	    save_libobjs=$libobjs
9805c27c18e8Smrg	    eval libobjs=\"\$libobjs $whole_archive_flag_spec\"
9806c27c18e8Smrg	    test "X$libobjs" = "X " && libobjs=
9807c27c18e8Smrg	  else
980848e5ce07Smrg	    gentop=$output_objdir/${outputname}x
9809b789ec8aSmrg	    func_append generated " $gentop"
9810c43cc173Smrg
9811c27c18e8Smrg	    func_extract_archives $gentop $convenience
9812b789ec8aSmrg	    func_append libobjs " $func_extract_archives_result"
9813c27c18e8Smrg	    test "X$libobjs" = "X " && libobjs=
9814c27c18e8Smrg	  fi
9815c27c18e8Smrg	fi
9816c43cc173Smrg
981748e5ce07Smrg	if test yes = "$thread_safe" && test -n "$thread_safe_flag_spec"; then
9818c27c18e8Smrg	  eval flag=\"$thread_safe_flag_spec\"
9819b789ec8aSmrg	  func_append linker_flags " $flag"
9820c27c18e8Smrg	fi
9821c43cc173Smrg
9822c27c18e8Smrg	# Make a backup of the uninstalled library when relinking
982348e5ce07Smrg	if test relink = "$opt_mode"; then
9824c27c18e8Smrg	  $opt_dry_run || eval '(cd $output_objdir && $RM ${realname}U && $MV $realname ${realname}U)' || exit $?
9825c43cc173Smrg	fi
9826c43cc173Smrg
9827c27c18e8Smrg	# Do each of the archive commands.
982848e5ce07Smrg	if test yes = "$module" && test -n "$module_cmds"; then
9829c27c18e8Smrg	  if test -n "$export_symbols" && test -n "$module_expsym_cmds"; then
9830c27c18e8Smrg	    eval test_cmds=\"$module_expsym_cmds\"
9831c27c18e8Smrg	    cmds=$module_expsym_cmds
9832c27c18e8Smrg	  else
9833c27c18e8Smrg	    eval test_cmds=\"$module_cmds\"
9834c27c18e8Smrg	    cmds=$module_cmds
9835c27c18e8Smrg	  fi
9836c27c18e8Smrg	else
9837c27c18e8Smrg	  if test -n "$export_symbols" && test -n "$archive_expsym_cmds"; then
9838c27c18e8Smrg	    eval test_cmds=\"$archive_expsym_cmds\"
9839c27c18e8Smrg	    cmds=$archive_expsym_cmds
9840c27c18e8Smrg	  else
9841c27c18e8Smrg	    eval test_cmds=\"$archive_cmds\"
9842c27c18e8Smrg	    cmds=$archive_cmds
9843c27c18e8Smrg	  fi
9844c43cc173Smrg	fi
9845c43cc173Smrg
984648e5ce07Smrg	if test : != "$skipped_export" &&
9847c27c18e8Smrg	   func_len " $test_cmds" &&
9848c27c18e8Smrg	   len=$func_len_result &&
9849c27c18e8Smrg	   test "$len" -lt "$max_cmd_len" || test "$max_cmd_len" -le -1; then
9850c27c18e8Smrg	  :
9851c27c18e8Smrg	else
9852c27c18e8Smrg	  # The command line is too long to link in one step, link piecewise
9853c27c18e8Smrg	  # or, if using GNU ld and skipped_export is not :, use a linker
9854c27c18e8Smrg	  # script.
9855c43cc173Smrg
9856c27c18e8Smrg	  # Save the value of $output and $libobjs because we want to
9857c27c18e8Smrg	  # use them later.  If we have whole_archive_flag_spec, we
9858c27c18e8Smrg	  # want to use save_libobjs as it was before
9859c27c18e8Smrg	  # whole_archive_flag_spec was expanded, because we can't
9860c27c18e8Smrg	  # assume the linker understands whole_archive_flag_spec.
9861c27c18e8Smrg	  # This may have to be revisited, in case too many
9862c27c18e8Smrg	  # convenience libraries get linked in and end up exceeding
9863c27c18e8Smrg	  # the spec.
9864c27c18e8Smrg	  if test -z "$convenience" || test -z "$whole_archive_flag_spec"; then
9865c27c18e8Smrg	    save_libobjs=$libobjs
9866c27c18e8Smrg	  fi
9867c27c18e8Smrg	  save_output=$output
986837eb1ca1Smrg	  func_basename "$output"
986937eb1ca1Smrg	  output_la=$func_basename_result
9870c43cc173Smrg
9871c27c18e8Smrg	  # Clear the reloadable object creation command queue and
9872c27c18e8Smrg	  # initialize k to one.
9873c27c18e8Smrg	  test_cmds=
9874c27c18e8Smrg	  concat_cmds=
9875c27c18e8Smrg	  objlist=
9876c27c18e8Smrg	  last_robj=
9877c27c18e8Smrg	  k=1
9878c43cc173Smrg
987948e5ce07Smrg	  if test -n "$save_libobjs" && test : != "$skipped_export" && test yes = "$with_gnu_ld"; then
988048e5ce07Smrg	    output=$output_objdir/$output_la.lnkscript
9881c27c18e8Smrg	    func_verbose "creating GNU ld script: $output"
988237eb1ca1Smrg	    echo 'INPUT (' > $output
9883c27c18e8Smrg	    for obj in $save_libobjs
9884c27c18e8Smrg	    do
9885b789ec8aSmrg	      func_to_tool_file "$obj"
9886b789ec8aSmrg	      $ECHO "$func_to_tool_file_result" >> $output
9887c27c18e8Smrg	    done
988837eb1ca1Smrg	    echo ')' >> $output
9889b789ec8aSmrg	    func_append delfiles " $output"
9890b789ec8aSmrg	    func_to_tool_file "$output"
9891b789ec8aSmrg	    output=$func_to_tool_file_result
989248e5ce07Smrg	  elif test -n "$save_libobjs" && test : != "$skipped_export" && test -n "$file_list_spec"; then
989348e5ce07Smrg	    output=$output_objdir/$output_la.lnk
9894c27c18e8Smrg	    func_verbose "creating linker input file list: $output"
9895c27c18e8Smrg	    : > $output
9896c27c18e8Smrg	    set x $save_libobjs
9897c27c18e8Smrg	    shift
9898c27c18e8Smrg	    firstobj=
989948e5ce07Smrg	    if test yes = "$compiler_needs_object"; then
9900c27c18e8Smrg	      firstobj="$1 "
9901c27c18e8Smrg	      shift
9902c27c18e8Smrg	    fi
9903c27c18e8Smrg	    for obj
9904c27c18e8Smrg	    do
9905b789ec8aSmrg	      func_to_tool_file "$obj"
9906b789ec8aSmrg	      $ECHO "$func_to_tool_file_result" >> $output
9907c27c18e8Smrg	    done
9908b789ec8aSmrg	    func_append delfiles " $output"
9909b789ec8aSmrg	    func_to_tool_file "$output"
9910b789ec8aSmrg	    output=$firstobj\"$file_list_spec$func_to_tool_file_result\"
9911c27c18e8Smrg	  else
9912c27c18e8Smrg	    if test -n "$save_libobjs"; then
9913c27c18e8Smrg	      func_verbose "creating reloadable object files..."
991448e5ce07Smrg	      output=$output_objdir/$output_la-$k.$objext
9915c27c18e8Smrg	      eval test_cmds=\"$reload_cmds\"
9916c27c18e8Smrg	      func_len " $test_cmds"
9917c27c18e8Smrg	      len0=$func_len_result
9918c27c18e8Smrg	      len=$len0
9919c27c18e8Smrg
9920c27c18e8Smrg	      # Loop over the list of objects to be linked.
9921c27c18e8Smrg	      for obj in $save_libobjs
9922c27c18e8Smrg	      do
9923c27c18e8Smrg		func_len " $obj"
9924c27c18e8Smrg		func_arith $len + $func_len_result
9925c27c18e8Smrg		len=$func_arith_result
992648e5ce07Smrg		if test -z "$objlist" ||
9927c27c18e8Smrg		   test "$len" -lt "$max_cmd_len"; then
9928c27c18e8Smrg		  func_append objlist " $obj"
9929c27c18e8Smrg		else
9930c27c18e8Smrg		  # The command $test_cmds is almost too long, add a
9931c27c18e8Smrg		  # command to the queue.
993248e5ce07Smrg		  if test 1 -eq "$k"; then
9933c27c18e8Smrg		    # The first file doesn't have a previous command to add.
993437eb1ca1Smrg		    reload_objs=$objlist
993537eb1ca1Smrg		    eval concat_cmds=\"$reload_cmds\"
9936c27c18e8Smrg		  else
9937c27c18e8Smrg		    # All subsequent reloadable object files will link in
9938c27c18e8Smrg		    # the last one created.
993937eb1ca1Smrg		    reload_objs="$objlist $last_robj"
994037eb1ca1Smrg		    eval concat_cmds=\"\$concat_cmds~$reload_cmds~\$RM $last_robj\"
9941c27c18e8Smrg		  fi
994248e5ce07Smrg		  last_robj=$output_objdir/$output_la-$k.$objext
9943c27c18e8Smrg		  func_arith $k + 1
9944c27c18e8Smrg		  k=$func_arith_result
994548e5ce07Smrg		  output=$output_objdir/$output_la-$k.$objext
994637eb1ca1Smrg		  objlist=" $obj"
9947c27c18e8Smrg		  func_len " $last_robj"
9948c27c18e8Smrg		  func_arith $len0 + $func_len_result
9949c27c18e8Smrg		  len=$func_arith_result
9950c27c18e8Smrg		fi
9951c27c18e8Smrg	      done
9952c27c18e8Smrg	      # Handle the remaining objects by creating one last
9953c27c18e8Smrg	      # reloadable object file.  All subsequent reloadable object
9954c27c18e8Smrg	      # files will link in the last one created.
9955c27c18e8Smrg	      test -z "$concat_cmds" || concat_cmds=$concat_cmds~
995637eb1ca1Smrg	      reload_objs="$objlist $last_robj"
995748e5ce07Smrg	      eval concat_cmds=\"\$concat_cmds$reload_cmds\"
9958c27c18e8Smrg	      if test -n "$last_robj"; then
995948e5ce07Smrg	        eval concat_cmds=\"\$concat_cmds~\$RM $last_robj\"
9960c27c18e8Smrg	      fi
9961b789ec8aSmrg	      func_append delfiles " $output"
9962c43cc173Smrg
9963c27c18e8Smrg	    else
9964c27c18e8Smrg	      output=
9965c27c18e8Smrg	    fi
9966c27c18e8Smrg
996748e5ce07Smrg	    ${skipped_export-false} && {
996848e5ce07Smrg	      func_verbose "generating symbol list for '$libname.la'"
996948e5ce07Smrg	      export_symbols=$output_objdir/$libname.exp
9970c27c18e8Smrg	      $opt_dry_run || $RM $export_symbols
9971c27c18e8Smrg	      libobjs=$output
9972c27c18e8Smrg	      # Append the command to create the export file.
9973c27c18e8Smrg	      test -z "$concat_cmds" || concat_cmds=$concat_cmds~
9974c27c18e8Smrg	      eval concat_cmds=\"\$concat_cmds$export_symbols_cmds\"
9975c27c18e8Smrg	      if test -n "$last_robj"; then
9976c27c18e8Smrg		eval concat_cmds=\"\$concat_cmds~\$RM $last_robj\"
9977c27c18e8Smrg	      fi
997848e5ce07Smrg	    }
9979c43cc173Smrg
9980c27c18e8Smrg	    test -n "$save_libobjs" &&
9981c27c18e8Smrg	      func_verbose "creating a temporary reloadable object file: $output"
9982c43cc173Smrg
9983c27c18e8Smrg	    # Loop through the commands generated above and execute them.
998448e5ce07Smrg	    save_ifs=$IFS; IFS='~'
9985c27c18e8Smrg	    for cmd in $concat_cmds; do
998648e5ce07Smrg	      IFS=$save_ifs
998748e5ce07Smrg	      $opt_quiet || {
9988c27c18e8Smrg		  func_quote_for_expand "$cmd"
9989c27c18e8Smrg		  eval "func_echo $func_quote_for_expand_result"
9990c27c18e8Smrg	      }
9991c27c18e8Smrg	      $opt_dry_run || eval "$cmd" || {
9992c27c18e8Smrg		lt_exit=$?
9993c27c18e8Smrg
9994c27c18e8Smrg		# Restore the uninstalled library and exit
999548e5ce07Smrg		if test relink = "$opt_mode"; then
9996c27c18e8Smrg		  ( cd "$output_objdir" && \
9997c27c18e8Smrg		    $RM "${realname}T" && \
9998c27c18e8Smrg		    $MV "${realname}U" "$realname" )
9999c27c18e8Smrg		fi
10000c43cc173Smrg
10001c27c18e8Smrg		exit $lt_exit
10002c27c18e8Smrg	      }
10003c27c18e8Smrg	    done
1000448e5ce07Smrg	    IFS=$save_ifs
10005c43cc173Smrg
10006c27c18e8Smrg	    if test -n "$export_symbols_regex" && ${skipped_export-false}; then
10007c27c18e8Smrg	      func_show_eval '$EGREP -e "$export_symbols_regex" "$export_symbols" > "${export_symbols}T"'
10008c27c18e8Smrg	      func_show_eval '$MV "${export_symbols}T" "$export_symbols"'
10009c43cc173Smrg	    fi
10010c43cc173Smrg	  fi
10011c43cc173Smrg
1001248e5ce07Smrg          ${skipped_export-false} && {
10013c27c18e8Smrg	    if test -n "$export_symbols" && test -n "$include_expsyms"; then
1001448e5ce07Smrg	      tmp_export_symbols=$export_symbols
1001548e5ce07Smrg	      test -n "$orig_export_symbols" && tmp_export_symbols=$orig_export_symbols
1001637eb1ca1Smrg	      $opt_dry_run || eval '$ECHO "$include_expsyms" | $SP2NL >> "$tmp_export_symbols"'
10017c27c18e8Smrg	    fi
10018c43cc173Smrg
10019c27c18e8Smrg	    if test -n "$orig_export_symbols"; then
10020c27c18e8Smrg	      # The given exports_symbols file has to be filtered, so filter it.
1002148e5ce07Smrg	      func_verbose "filter symbol list for '$libname.la' to tag DATA exports"
10022c27c18e8Smrg	      # FIXME: $output_objdir/$libname.filter potentially contains lots of
1002348e5ce07Smrg	      # 's' commands, which not all seds can handle. GNU sed should be fine
10024c27c18e8Smrg	      # though. Also, the filter scales superlinearly with the number of
10025c27c18e8Smrg	      # global variables. join(1) would be nice here, but unfortunately
10026c27c18e8Smrg	      # isn't a blessed tool.
10027c27c18e8Smrg	      $opt_dry_run || $SED -e '/[ ,]DATA/!d;s,\(.*\)\([ \,].*\),s|^\1$|\1\2|,' < $export_symbols > $output_objdir/$libname.filter
10028b789ec8aSmrg	      func_append delfiles " $export_symbols $output_objdir/$libname.filter"
10029c27c18e8Smrg	      export_symbols=$output_objdir/$libname.def
10030c27c18e8Smrg	      $opt_dry_run || $SED -f $output_objdir/$libname.filter < $orig_export_symbols > $export_symbols
10031c27c18e8Smrg	    fi
1003248e5ce07Smrg	  }
10033c43cc173Smrg
10034c27c18e8Smrg	  libobjs=$output
10035c27c18e8Smrg	  # Restore the value of output.
10036c27c18e8Smrg	  output=$save_output
10037c43cc173Smrg
10038c27c18e8Smrg	  if test -n "$convenience" && test -n "$whole_archive_flag_spec"; then
10039c27c18e8Smrg	    eval libobjs=\"\$libobjs $whole_archive_flag_spec\"
10040c27c18e8Smrg	    test "X$libobjs" = "X " && libobjs=
10041c27c18e8Smrg	  fi
10042c27c18e8Smrg	  # Expand the library linking commands again to reset the
10043c27c18e8Smrg	  # value of $libobjs for piecewise linking.
10044c27c18e8Smrg
10045c27c18e8Smrg	  # Do each of the archive commands.
1004648e5ce07Smrg	  if test yes = "$module" && test -n "$module_cmds"; then
10047c27c18e8Smrg	    if test -n "$export_symbols" && test -n "$module_expsym_cmds"; then
10048c27c18e8Smrg	      cmds=$module_expsym_cmds
10049c43cc173Smrg	    else
10050c27c18e8Smrg	      cmds=$module_cmds
10051c43cc173Smrg	    fi
10052c43cc173Smrg	  else
10053c27c18e8Smrg	    if test -n "$export_symbols" && test -n "$archive_expsym_cmds"; then
10054c27c18e8Smrg	      cmds=$archive_expsym_cmds
10055c27c18e8Smrg	    else
10056c27c18e8Smrg	      cmds=$archive_cmds
10057c27c18e8Smrg	    fi
10058c43cc173Smrg	  fi
10059c43cc173Smrg	fi
10060c43cc173Smrg
10061c27c18e8Smrg	if test -n "$delfiles"; then
10062c27c18e8Smrg	  # Append the command to remove temporary files to $cmds.
10063c27c18e8Smrg	  eval cmds=\"\$cmds~\$RM $delfiles\"
10064c27c18e8Smrg	fi
10065c43cc173Smrg
10066c27c18e8Smrg	# Add any objects from preloaded convenience libraries
10067c27c18e8Smrg	if test -n "$dlprefiles"; then
1006848e5ce07Smrg	  gentop=$output_objdir/${outputname}x
10069b789ec8aSmrg	  func_append generated " $gentop"
10070c43cc173Smrg
10071c27c18e8Smrg	  func_extract_archives $gentop $dlprefiles
10072b789ec8aSmrg	  func_append libobjs " $func_extract_archives_result"
10073c27c18e8Smrg	  test "X$libobjs" = "X " && libobjs=
10074c43cc173Smrg	fi
10075c43cc173Smrg
1007648e5ce07Smrg	save_ifs=$IFS; IFS='~'
10077c27c18e8Smrg	for cmd in $cmds; do
1007848e5ce07Smrg	  IFS=$sp$nl
10079c27c18e8Smrg	  eval cmd=\"$cmd\"
1008048e5ce07Smrg	  IFS=$save_ifs
1008148e5ce07Smrg	  $opt_quiet || {
10082c27c18e8Smrg	    func_quote_for_expand "$cmd"
10083c27c18e8Smrg	    eval "func_echo $func_quote_for_expand_result"
10084c27c18e8Smrg	  }
10085c27c18e8Smrg	  $opt_dry_run || eval "$cmd" || {
10086c27c18e8Smrg	    lt_exit=$?
10087c43cc173Smrg
10088c27c18e8Smrg	    # Restore the uninstalled library and exit
1008948e5ce07Smrg	    if test relink = "$opt_mode"; then
10090c27c18e8Smrg	      ( cd "$output_objdir" && \
10091c27c18e8Smrg	        $RM "${realname}T" && \
10092c27c18e8Smrg		$MV "${realname}U" "$realname" )
10093c43cc173Smrg	    fi
10094c43cc173Smrg
10095c27c18e8Smrg	    exit $lt_exit
10096c27c18e8Smrg	  }
10097c27c18e8Smrg	done
1009848e5ce07Smrg	IFS=$save_ifs
10099c43cc173Smrg
10100c27c18e8Smrg	# Restore the uninstalled library and exit
1010148e5ce07Smrg	if test relink = "$opt_mode"; then
10102c27c18e8Smrg	  $opt_dry_run || eval '(cd $output_objdir && $RM ${realname}T && $MV $realname ${realname}T && $MV ${realname}U $realname)' || exit $?
10103c43cc173Smrg
10104c27c18e8Smrg	  if test -n "$convenience"; then
10105c27c18e8Smrg	    if test -z "$whole_archive_flag_spec"; then
10106c27c18e8Smrg	      func_show_eval '${RM}r "$gentop"'
10107c27c18e8Smrg	    fi
10108c27c18e8Smrg	  fi
10109c43cc173Smrg
10110c27c18e8Smrg	  exit $EXIT_SUCCESS
10111c27c18e8Smrg	fi
10112c43cc173Smrg
10113c27c18e8Smrg	# Create links to the real library.
10114c27c18e8Smrg	for linkname in $linknames; do
10115c27c18e8Smrg	  if test "$realname" != "$linkname"; then
10116c27c18e8Smrg	    func_show_eval '(cd "$output_objdir" && $RM "$linkname" && $LN_S "$realname" "$linkname")' 'exit $?'
10117c43cc173Smrg	  fi
10118c43cc173Smrg	done
10119c43cc173Smrg
10120c27c18e8Smrg	# If -module or -export-dynamic was specified, set the dlname.
1012148e5ce07Smrg	if test yes = "$module" || test yes = "$export_dynamic"; then
10122c27c18e8Smrg	  # On all known operating systems, these are identical.
1012348e5ce07Smrg	  dlname=$soname
10124c27c18e8Smrg	fi
10125c27c18e8Smrg      fi
10126c43cc173Smrg      ;;
10127c43cc173Smrg
10128c27c18e8Smrg    obj)
1012948e5ce07Smrg      if test -n "$dlfiles$dlprefiles" || test no != "$dlself"; then
1013048e5ce07Smrg	func_warning "'-dlopen' is ignored for objects"
10131c27c18e8Smrg      fi
10132c43cc173Smrg
10133c27c18e8Smrg      case " $deplibs" in
10134c27c18e8Smrg      *\ -l* | *\ -L*)
1013548e5ce07Smrg	func_warning "'-l' and '-L' are ignored for objects" ;;
10136c43cc173Smrg      esac
10137c43cc173Smrg
10138c27c18e8Smrg      test -n "$rpath" && \
1013948e5ce07Smrg	func_warning "'-rpath' is ignored for objects"
10140c43cc173Smrg
10141c27c18e8Smrg      test -n "$xrpath" && \
1014248e5ce07Smrg	func_warning "'-R' is ignored for objects"
10143c43cc173Smrg
10144c27c18e8Smrg      test -n "$vinfo" && \
1014548e5ce07Smrg	func_warning "'-version-info' is ignored for objects"
10146c27c18e8Smrg
10147c27c18e8Smrg      test -n "$release" && \
1014848e5ce07Smrg	func_warning "'-release' is ignored for objects"
10149c27c18e8Smrg
10150c27c18e8Smrg      case $output in
10151c27c18e8Smrg      *.lo)
10152c27c18e8Smrg	test -n "$objs$old_deplibs" && \
1015348e5ce07Smrg	  func_fatal_error "cannot build library object '$output' from non-libtool objects"
10154c27c18e8Smrg
10155c27c18e8Smrg	libobj=$output
10156c27c18e8Smrg	func_lo2o "$libobj"
10157c27c18e8Smrg	obj=$func_lo2o_result
10158c43cc173Smrg	;;
10159c43cc173Smrg      *)
10160c27c18e8Smrg	libobj=
1016148e5ce07Smrg	obj=$output
10162c43cc173Smrg	;;
10163c43cc173Smrg      esac
10164c43cc173Smrg
10165c27c18e8Smrg      # Delete the old objects.
10166c27c18e8Smrg      $opt_dry_run || $RM $obj $libobj
10167c43cc173Smrg
10168c27c18e8Smrg      # Objects from convenience libraries.  This assumes
10169c27c18e8Smrg      # single-version convenience libraries.  Whenever we create
10170c27c18e8Smrg      # different ones for PIC/non-PIC, this we'll have to duplicate
10171c27c18e8Smrg      # the extraction.
10172c27c18e8Smrg      reload_conv_objs=
10173c27c18e8Smrg      gentop=
1017448e5ce07Smrg      # if reload_cmds runs $LD directly, get rid of -Wl from
1017548e5ce07Smrg      # whole_archive_flag_spec and hope we can get by with turning comma
1017648e5ce07Smrg      # into space.
1017748e5ce07Smrg      case $reload_cmds in
1017848e5ce07Smrg        *\$LD[\ \$]*) wl= ;;
1017948e5ce07Smrg      esac
10180c27c18e8Smrg      if test -n "$convenience"; then
10181c27c18e8Smrg	if test -n "$whole_archive_flag_spec"; then
10182c27c18e8Smrg	  eval tmp_whole_archive_flags=\"$whole_archive_flag_spec\"
1018348e5ce07Smrg	  test -n "$wl" || tmp_whole_archive_flags=`$ECHO "$tmp_whole_archive_flags" | $SED 's|,| |g'`
1018448e5ce07Smrg	  reload_conv_objs=$reload_objs\ $tmp_whole_archive_flags
10185c27c18e8Smrg	else
1018648e5ce07Smrg	  gentop=$output_objdir/${obj}x
10187b789ec8aSmrg	  func_append generated " $gentop"
10188c43cc173Smrg
10189c27c18e8Smrg	  func_extract_archives $gentop $convenience
10190c27c18e8Smrg	  reload_conv_objs="$reload_objs $func_extract_archives_result"
10191c27c18e8Smrg	fi
10192c43cc173Smrg      fi
10193c43cc173Smrg
10194b789ec8aSmrg      # If we're not building shared, we need to use non_pic_objs
1019548e5ce07Smrg      test yes = "$build_libtool_libs" || libobjs=$non_pic_objects
10196b789ec8aSmrg
10197c27c18e8Smrg      # Create the old-style object.
1019848e5ce07Smrg      reload_objs=$objs$old_deplibs' '`$ECHO "$libobjs" | $SP2NL | $SED "/\.$libext$/d; /\.lib$/d; $lo2o" | $NL2SP`' '$reload_conv_objs
10199c43cc173Smrg
1020048e5ce07Smrg      output=$obj
10201c27c18e8Smrg      func_execute_cmds "$reload_cmds" 'exit $?'
10202c43cc173Smrg
10203c27c18e8Smrg      # Exit if we aren't doing a library object file.
10204c27c18e8Smrg      if test -z "$libobj"; then
10205c27c18e8Smrg	if test -n "$gentop"; then
10206c27c18e8Smrg	  func_show_eval '${RM}r "$gentop"'
10207c27c18e8Smrg	fi
10208c27c18e8Smrg
10209c27c18e8Smrg	exit $EXIT_SUCCESS
10210c43cc173Smrg      fi
10211c27c18e8Smrg
1021248e5ce07Smrg      test yes = "$build_libtool_libs" || {
10213c27c18e8Smrg	if test -n "$gentop"; then
10214c27c18e8Smrg	  func_show_eval '${RM}r "$gentop"'
10215c27c18e8Smrg	fi
10216c27c18e8Smrg
10217c27c18e8Smrg	# Create an invalid libtool object if no PIC, so that we don't
10218c27c18e8Smrg	# accidentally link it into a program.
10219c27c18e8Smrg	# $show "echo timestamp > $libobj"
10220c27c18e8Smrg	# $opt_dry_run || eval "echo timestamp > $libobj" || exit $?
10221c27c18e8Smrg	exit $EXIT_SUCCESS
1022248e5ce07Smrg      }
10223c27c18e8Smrg
1022448e5ce07Smrg      if test -n "$pic_flag" || test default != "$pic_mode"; then
10225c27c18e8Smrg	# Only do commands if we really have different PIC objects.
10226c27c18e8Smrg	reload_objs="$libobjs $reload_conv_objs"
1022748e5ce07Smrg	output=$libobj
10228c27c18e8Smrg	func_execute_cmds "$reload_cmds" 'exit $?'
10229c27c18e8Smrg      fi
10230c27c18e8Smrg
10231c27c18e8Smrg      if test -n "$gentop"; then
10232c27c18e8Smrg	func_show_eval '${RM}r "$gentop"'
10233c27c18e8Smrg      fi
10234c27c18e8Smrg
10235c27c18e8Smrg      exit $EXIT_SUCCESS
10236c43cc173Smrg      ;;
10237c43cc173Smrg
10238c27c18e8Smrg    prog)
10239c27c18e8Smrg      case $host in
10240c27c18e8Smrg	*cygwin*) func_stripname '' '.exe' "$output"
10241c27c18e8Smrg	          output=$func_stripname_result.exe;;
10242c27c18e8Smrg      esac
10243c27c18e8Smrg      test -n "$vinfo" && \
1024448e5ce07Smrg	func_warning "'-version-info' is ignored for programs"
10245c43cc173Smrg
10246c27c18e8Smrg      test -n "$release" && \
1024748e5ce07Smrg	func_warning "'-release' is ignored for programs"
10248c43cc173Smrg
1024948e5ce07Smrg      $preload \
1025048e5ce07Smrg	&& test unknown,unknown,unknown = "$dlopen_support,$dlopen_self,$dlopen_self_static" \
1025148e5ce07Smrg	&& func_warning "'LT_INIT([dlopen])' not used. Assuming no dlopen support."
10252c27c18e8Smrg
10253c27c18e8Smrg      case $host in
10254c27c18e8Smrg      *-*-rhapsody* | *-*-darwin1.[012])
10255c27c18e8Smrg	# On Rhapsody replace the C library is the System framework
1025637eb1ca1Smrg	compile_deplibs=`$ECHO " $compile_deplibs" | $SED 's/ -lc / System.ltframework /'`
1025737eb1ca1Smrg	finalize_deplibs=`$ECHO " $finalize_deplibs" | $SED 's/ -lc / System.ltframework /'`
10258c43cc173Smrg	;;
10259c27c18e8Smrg      esac
10260c43cc173Smrg
10261c27c18e8Smrg      case $host in
10262c27c18e8Smrg      *-*-darwin*)
10263c27c18e8Smrg	# Don't allow lazy linking, it breaks C++ global constructors
10264c27c18e8Smrg	# But is supposedly fixed on 10.4 or later (yay!).
1026548e5ce07Smrg	if test CXX = "$tagname"; then
10266c27c18e8Smrg	  case ${MACOSX_DEPLOYMENT_TARGET-10.0} in
10267c27c18e8Smrg	    10.[0123])
1026848e5ce07Smrg	      func_append compile_command " $wl-bind_at_load"
1026948e5ce07Smrg	      func_append finalize_command " $wl-bind_at_load"
10270c27c18e8Smrg	    ;;
10271c27c18e8Smrg	  esac
10272c43cc173Smrg	fi
10273c27c18e8Smrg	# Time to change all our "foo.ltframework" stuff back to "-framework foo"
1027437eb1ca1Smrg	compile_deplibs=`$ECHO " $compile_deplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'`
1027537eb1ca1Smrg	finalize_deplibs=`$ECHO " $finalize_deplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'`
10276c27c18e8Smrg	;;
10277c27c18e8Smrg      esac
10278c43cc173Smrg
10279c43cc173Smrg
10280c27c18e8Smrg      # move library search paths that coincide with paths to not yet
10281c27c18e8Smrg      # installed libraries to the beginning of the library search list
10282c27c18e8Smrg      new_libs=
10283c27c18e8Smrg      for path in $notinst_path; do
10284c27c18e8Smrg	case " $new_libs " in
10285c27c18e8Smrg	*" -L$path/$objdir "*) ;;
10286c27c18e8Smrg	*)
10287c27c18e8Smrg	  case " $compile_deplibs " in
10288c27c18e8Smrg	  *" -L$path/$objdir "*)
10289b789ec8aSmrg	    func_append new_libs " -L$path/$objdir" ;;
10290c43cc173Smrg	  esac
10291c27c18e8Smrg	  ;;
10292c27c18e8Smrg	esac
10293c27c18e8Smrg      done
10294c27c18e8Smrg      for deplib in $compile_deplibs; do
10295c27c18e8Smrg	case $deplib in
10296c27c18e8Smrg	-L*)
10297c27c18e8Smrg	  case " $new_libs " in
10298c27c18e8Smrg	  *" $deplib "*) ;;
10299b789ec8aSmrg	  *) func_append new_libs " $deplib" ;;
10300c43cc173Smrg	  esac
10301c27c18e8Smrg	  ;;
10302b789ec8aSmrg	*) func_append new_libs " $deplib" ;;
10303c27c18e8Smrg	esac
10304c27c18e8Smrg      done
1030548e5ce07Smrg      compile_deplibs=$new_libs
10306c43cc173Smrg
10307c43cc173Smrg
10308b789ec8aSmrg      func_append compile_command " $compile_deplibs"
10309b789ec8aSmrg      func_append finalize_command " $finalize_deplibs"
10310c43cc173Smrg
10311c27c18e8Smrg      if test -n "$rpath$xrpath"; then
10312c27c18e8Smrg	# If the user specified any rpath flags, then add them.
10313c27c18e8Smrg	for libdir in $rpath $xrpath; do
10314c27c18e8Smrg	  # This is the magic to use -rpath.
10315c27c18e8Smrg	  case "$finalize_rpath " in
10316c27c18e8Smrg	  *" $libdir "*) ;;
10317b789ec8aSmrg	  *) func_append finalize_rpath " $libdir" ;;
10318c27c18e8Smrg	  esac
10319c27c18e8Smrg	done
10320c27c18e8Smrg      fi
10321c43cc173Smrg
10322c27c18e8Smrg      # Now hardcode the library paths
10323c27c18e8Smrg      rpath=
10324c27c18e8Smrg      hardcode_libdirs=
10325c27c18e8Smrg      for libdir in $compile_rpath $finalize_rpath; do
10326c27c18e8Smrg	if test -n "$hardcode_libdir_flag_spec"; then
10327c27c18e8Smrg	  if test -n "$hardcode_libdir_separator"; then
10328c27c18e8Smrg	    if test -z "$hardcode_libdirs"; then
1032948e5ce07Smrg	      hardcode_libdirs=$libdir
10330c27c18e8Smrg	    else
10331c27c18e8Smrg	      # Just accumulate the unique libdirs.
10332c27c18e8Smrg	      case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in
10333c27c18e8Smrg	      *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*)
10334c27c18e8Smrg		;;
10335c27c18e8Smrg	      *)
10336b789ec8aSmrg		func_append hardcode_libdirs "$hardcode_libdir_separator$libdir"
10337c27c18e8Smrg		;;
10338c27c18e8Smrg	      esac
10339c27c18e8Smrg	    fi
10340c43cc173Smrg	  else
10341c27c18e8Smrg	    eval flag=\"$hardcode_libdir_flag_spec\"
10342b789ec8aSmrg	    func_append rpath " $flag"
10343c43cc173Smrg	  fi
10344c27c18e8Smrg	elif test -n "$runpath_var"; then
10345c27c18e8Smrg	  case "$perm_rpath " in
10346c27c18e8Smrg	  *" $libdir "*) ;;
10347b789ec8aSmrg	  *) func_append perm_rpath " $libdir" ;;
10348c27c18e8Smrg	  esac
10349c27c18e8Smrg	fi
10350c27c18e8Smrg	case $host in
10351c27c18e8Smrg	*-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-cegcc*)
1035248e5ce07Smrg	  testbindir=`$ECHO "$libdir" | $SED -e 's*/lib$*/bin*'`
10353c27c18e8Smrg	  case :$dllsearchpath: in
10354c27c18e8Smrg	  *":$libdir:"*) ;;
10355c27c18e8Smrg	  ::) dllsearchpath=$libdir;;
10356b789ec8aSmrg	  *) func_append dllsearchpath ":$libdir";;
10357c27c18e8Smrg	  esac
10358c27c18e8Smrg	  case :$dllsearchpath: in
10359c27c18e8Smrg	  *":$testbindir:"*) ;;
10360c27c18e8Smrg	  ::) dllsearchpath=$testbindir;;
10361b789ec8aSmrg	  *) func_append dllsearchpath ":$testbindir";;
10362c27c18e8Smrg	  esac
10363c27c18e8Smrg	  ;;
10364c27c18e8Smrg	esac
10365c27c18e8Smrg      done
10366c27c18e8Smrg      # Substitute the hardcoded libdirs into the rpath.
10367c27c18e8Smrg      if test -n "$hardcode_libdir_separator" &&
10368c27c18e8Smrg	 test -n "$hardcode_libdirs"; then
1036948e5ce07Smrg	libdir=$hardcode_libdirs
10370c27c18e8Smrg	eval rpath=\" $hardcode_libdir_flag_spec\"
10371c27c18e8Smrg      fi
1037248e5ce07Smrg      compile_rpath=$rpath
10373c43cc173Smrg
10374c27c18e8Smrg      rpath=
10375c27c18e8Smrg      hardcode_libdirs=
10376c27c18e8Smrg      for libdir in $finalize_rpath; do
10377c27c18e8Smrg	if test -n "$hardcode_libdir_flag_spec"; then
10378c27c18e8Smrg	  if test -n "$hardcode_libdir_separator"; then
10379c27c18e8Smrg	    if test -z "$hardcode_libdirs"; then
1038048e5ce07Smrg	      hardcode_libdirs=$libdir
10381c27c18e8Smrg	    else
10382c27c18e8Smrg	      # Just accumulate the unique libdirs.
10383c27c18e8Smrg	      case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in
10384c27c18e8Smrg	      *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*)
10385c27c18e8Smrg		;;
10386c27c18e8Smrg	      *)
10387b789ec8aSmrg		func_append hardcode_libdirs "$hardcode_libdir_separator$libdir"
10388c27c18e8Smrg		;;
10389c27c18e8Smrg	      esac
10390c27c18e8Smrg	    fi
10391c43cc173Smrg	  else
10392c27c18e8Smrg	    eval flag=\"$hardcode_libdir_flag_spec\"
10393b789ec8aSmrg	    func_append rpath " $flag"
10394c43cc173Smrg	  fi
10395c27c18e8Smrg	elif test -n "$runpath_var"; then
10396c27c18e8Smrg	  case "$finalize_perm_rpath " in
10397c27c18e8Smrg	  *" $libdir "*) ;;
10398b789ec8aSmrg	  *) func_append finalize_perm_rpath " $libdir" ;;
10399c27c18e8Smrg	  esac
10400c43cc173Smrg	fi
10401c27c18e8Smrg      done
10402c27c18e8Smrg      # Substitute the hardcoded libdirs into the rpath.
10403c27c18e8Smrg      if test -n "$hardcode_libdir_separator" &&
10404c27c18e8Smrg	 test -n "$hardcode_libdirs"; then
1040548e5ce07Smrg	libdir=$hardcode_libdirs
10406c27c18e8Smrg	eval rpath=\" $hardcode_libdir_flag_spec\"
10407c27c18e8Smrg      fi
1040848e5ce07Smrg      finalize_rpath=$rpath
10409c43cc173Smrg
1041048e5ce07Smrg      if test -n "$libobjs" && test yes = "$build_old_libs"; then
10411c27c18e8Smrg	# Transform all the library objects into standard objects.
1041237eb1ca1Smrg	compile_command=`$ECHO "$compile_command" | $SP2NL | $SED "$lo2o" | $NL2SP`
1041337eb1ca1Smrg	finalize_command=`$ECHO "$finalize_command" | $SP2NL | $SED "$lo2o" | $NL2SP`
10414c27c18e8Smrg      fi
10415c43cc173Smrg
1041648e5ce07Smrg      func_generate_dlsyms "$outputname" "@PROGRAM@" false
10417c43cc173Smrg
10418c27c18e8Smrg      # template prelinking step
10419c27c18e8Smrg      if test -n "$prelink_cmds"; then
10420c27c18e8Smrg	func_execute_cmds "$prelink_cmds" 'exit $?'
10421c27c18e8Smrg      fi
10422c43cc173Smrg
1042348e5ce07Smrg      wrappers_required=:
10424c27c18e8Smrg      case $host in
1042537eb1ca1Smrg      *cegcc* | *mingw32ce*)
1042637eb1ca1Smrg        # Disable wrappers for cegcc and mingw32ce hosts, we are cross compiling anyway.
1042748e5ce07Smrg        wrappers_required=false
1042837eb1ca1Smrg        ;;
10429c27c18e8Smrg      *cygwin* | *mingw* )
1043048e5ce07Smrg        test yes = "$build_libtool_libs" || wrappers_required=false
10431c27c18e8Smrg        ;;
10432c27c18e8Smrg      *)
1043348e5ce07Smrg        if test no = "$need_relink" || test yes != "$build_libtool_libs"; then
1043448e5ce07Smrg          wrappers_required=false
10435c27c18e8Smrg        fi
10436c27c18e8Smrg        ;;
10437c27c18e8Smrg      esac
1043848e5ce07Smrg      $wrappers_required || {
10439c27c18e8Smrg	# Replace the output file specification.
1044037eb1ca1Smrg	compile_command=`$ECHO "$compile_command" | $SED 's%@OUTPUT@%'"$output"'%g'`
1044148e5ce07Smrg	link_command=$compile_command$compile_rpath
10442c43cc173Smrg
10443c27c18e8Smrg	# We have no uninstalled library dependencies, so finalize right now.
10444c27c18e8Smrg	exit_status=0
10445c27c18e8Smrg	func_show_eval "$link_command" 'exit_status=$?'
10446c43cc173Smrg
10447b789ec8aSmrg	if test -n "$postlink_cmds"; then
10448b789ec8aSmrg	  func_to_tool_file "$output"
10449b789ec8aSmrg	  postlink_cmds=`func_echo_all "$postlink_cmds" | $SED -e 's%@OUTPUT@%'"$output"'%g' -e 's%@TOOL_OUTPUT@%'"$func_to_tool_file_result"'%g'`
10450b789ec8aSmrg	  func_execute_cmds "$postlink_cmds" 'exit $?'
10451b789ec8aSmrg	fi
10452b789ec8aSmrg
10453c27c18e8Smrg	# Delete the generated files.
1045448e5ce07Smrg	if test -f "$output_objdir/${outputname}S.$objext"; then
1045548e5ce07Smrg	  func_show_eval '$RM "$output_objdir/${outputname}S.$objext"'
10456c43cc173Smrg	fi
10457c43cc173Smrg
10458c27c18e8Smrg	exit $exit_status
1045948e5ce07Smrg      }
10460c43cc173Smrg
10461c27c18e8Smrg      if test -n "$compile_shlibpath$finalize_shlibpath"; then
10462c27c18e8Smrg	compile_command="$shlibpath_var=\"$compile_shlibpath$finalize_shlibpath\$$shlibpath_var\" $compile_command"
10463c27c18e8Smrg      fi
10464c27c18e8Smrg      if test -n "$finalize_shlibpath"; then
10465c27c18e8Smrg	finalize_command="$shlibpath_var=\"$finalize_shlibpath\$$shlibpath_var\" $finalize_command"
10466c27c18e8Smrg      fi
10467c43cc173Smrg
10468c27c18e8Smrg      compile_var=
10469c27c18e8Smrg      finalize_var=
10470c27c18e8Smrg      if test -n "$runpath_var"; then
10471c27c18e8Smrg	if test -n "$perm_rpath"; then
10472c27c18e8Smrg	  # We should set the runpath_var.
10473c27c18e8Smrg	  rpath=
10474c27c18e8Smrg	  for dir in $perm_rpath; do
10475b789ec8aSmrg	    func_append rpath "$dir:"
10476c27c18e8Smrg	  done
10477c27c18e8Smrg	  compile_var="$runpath_var=\"$rpath\$$runpath_var\" "
10478c43cc173Smrg	fi
10479c27c18e8Smrg	if test -n "$finalize_perm_rpath"; then
10480c27c18e8Smrg	  # We should set the runpath_var.
10481c27c18e8Smrg	  rpath=
10482c27c18e8Smrg	  for dir in $finalize_perm_rpath; do
10483b789ec8aSmrg	    func_append rpath "$dir:"
10484c27c18e8Smrg	  done
10485c27c18e8Smrg	  finalize_var="$runpath_var=\"$rpath\$$runpath_var\" "
10486c43cc173Smrg	fi
10487c27c18e8Smrg      fi
10488c43cc173Smrg
1048948e5ce07Smrg      if test yes = "$no_install"; then
10490c27c18e8Smrg	# We don't need to create a wrapper script.
1049148e5ce07Smrg	link_command=$compile_var$compile_command$compile_rpath
10492c27c18e8Smrg	# Replace the output file specification.
1049337eb1ca1Smrg	link_command=`$ECHO "$link_command" | $SED 's%@OUTPUT@%'"$output"'%g'`
10494c27c18e8Smrg	# Delete the old output file.
10495c27c18e8Smrg	$opt_dry_run || $RM $output
10496c27c18e8Smrg	# Link the executable and exit
10497c27c18e8Smrg	func_show_eval "$link_command" 'exit $?'
10498b789ec8aSmrg
10499b789ec8aSmrg	if test -n "$postlink_cmds"; then
10500b789ec8aSmrg	  func_to_tool_file "$output"
10501b789ec8aSmrg	  postlink_cmds=`func_echo_all "$postlink_cmds" | $SED -e 's%@OUTPUT@%'"$output"'%g' -e 's%@TOOL_OUTPUT@%'"$func_to_tool_file_result"'%g'`
10502b789ec8aSmrg	  func_execute_cmds "$postlink_cmds" 'exit $?'
10503b789ec8aSmrg	fi
10504b789ec8aSmrg
10505c43cc173Smrg	exit $EXIT_SUCCESS
10506c27c18e8Smrg      fi
10507c43cc173Smrg
1050848e5ce07Smrg      case $hardcode_action,$fast_install in
1050948e5ce07Smrg        relink,*)
1051048e5ce07Smrg	  # Fast installation is not supported
1051148e5ce07Smrg	  link_command=$compile_var$compile_command$compile_rpath
1051248e5ce07Smrg	  relink_command=$finalize_var$finalize_command$finalize_rpath
10513c27c18e8Smrg
1051448e5ce07Smrg	  func_warning "this platform does not like uninstalled shared libraries"
1051548e5ce07Smrg	  func_warning "'$output' will be relinked during installation"
1051648e5ce07Smrg	  ;;
1051748e5ce07Smrg        *,yes)
1051848e5ce07Smrg	  link_command=$finalize_var$compile_command$finalize_rpath
1051948e5ce07Smrg	  relink_command=`$ECHO "$compile_var$compile_command$compile_rpath" | $SED 's%@OUTPUT@%\$progdir/\$file%g'`
1052048e5ce07Smrg          ;;
1052148e5ce07Smrg	*,no)
1052248e5ce07Smrg	  link_command=$compile_var$compile_command$compile_rpath
1052348e5ce07Smrg	  relink_command=$finalize_var$finalize_command$finalize_rpath
1052448e5ce07Smrg          ;;
1052548e5ce07Smrg	*,needless)
1052648e5ce07Smrg	  link_command=$finalize_var$compile_command$finalize_rpath
1052748e5ce07Smrg	  relink_command=
1052848e5ce07Smrg          ;;
1052948e5ce07Smrg      esac
10530c43cc173Smrg
10531c27c18e8Smrg      # Replace the output file specification.
1053237eb1ca1Smrg      link_command=`$ECHO "$link_command" | $SED 's%@OUTPUT@%'"$output_objdir/$outputname"'%g'`
10533c43cc173Smrg
10534c27c18e8Smrg      # Delete the old output files.
10535c27c18e8Smrg      $opt_dry_run || $RM $output $output_objdir/$outputname $output_objdir/lt-$outputname
10536c43cc173Smrg
10537c27c18e8Smrg      func_show_eval "$link_command" 'exit $?'
10538c43cc173Smrg
10539b789ec8aSmrg      if test -n "$postlink_cmds"; then
10540b789ec8aSmrg	func_to_tool_file "$output_objdir/$outputname"
10541b789ec8aSmrg	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'`
10542b789ec8aSmrg	func_execute_cmds "$postlink_cmds" 'exit $?'
10543b789ec8aSmrg      fi
10544b789ec8aSmrg
10545c27c18e8Smrg      # Now create the wrapper script.
10546c27c18e8Smrg      func_verbose "creating $output"
10547c43cc173Smrg
10548c27c18e8Smrg      # Quote the relink command for shipping.
10549c27c18e8Smrg      if test -n "$relink_command"; then
10550c27c18e8Smrg	# Preserve any variables that may affect compiler behavior
10551c27c18e8Smrg	for var in $variables_saved_for_relink; do
10552c27c18e8Smrg	  if eval test -z \"\${$var+set}\"; then
10553c27c18e8Smrg	    relink_command="{ test -z \"\${$var+set}\" || $lt_unset $var || { $var=; export $var; }; }; $relink_command"
10554c27c18e8Smrg	  elif eval var_value=\$$var; test -z "$var_value"; then
10555c27c18e8Smrg	    relink_command="$var=; export $var; $relink_command"
10556c43cc173Smrg	  else
10557c27c18e8Smrg	    func_quote_for_eval "$var_value"
10558c27c18e8Smrg	    relink_command="$var=$func_quote_for_eval_result; export $var; $relink_command"
10559c43cc173Smrg	  fi
10560c27c18e8Smrg	done
105614940c694Smrg	func_quote "(cd `pwd`; $relink_command)"
105624940c694Smrg	relink_command=$func_quote_result
10563c27c18e8Smrg      fi
10564c27c18e8Smrg
10565c27c18e8Smrg      # Only actually do things if not in dry run mode.
10566c27c18e8Smrg      $opt_dry_run || {
10567c27c18e8Smrg	# win32 will think the script is a binary if it has
10568c27c18e8Smrg	# a .exe suffix, so we strip it off here.
10569c27c18e8Smrg	case $output in
10570c27c18e8Smrg	  *.exe) func_stripname '' '.exe' "$output"
10571c27c18e8Smrg	         output=$func_stripname_result ;;
10572c27c18e8Smrg	esac
10573c27c18e8Smrg	# test for cygwin because mv fails w/o .exe extensions
10574c27c18e8Smrg	case $host in
10575c27c18e8Smrg	  *cygwin*)
10576c27c18e8Smrg	    exeext=.exe
10577c27c18e8Smrg	    func_stripname '' '.exe' "$outputname"
10578c27c18e8Smrg	    outputname=$func_stripname_result ;;
10579c27c18e8Smrg	  *) exeext= ;;
10580c43cc173Smrg	esac
10581c27c18e8Smrg	case $host in
10582c27c18e8Smrg	  *cygwin* | *mingw* )
10583c27c18e8Smrg	    func_dirname_and_basename "$output" "" "."
10584c27c18e8Smrg	    output_name=$func_basename_result
10585c27c18e8Smrg	    output_path=$func_dirname_result
1058648e5ce07Smrg	    cwrappersource=$output_path/$objdir/lt-$output_name.c
1058748e5ce07Smrg	    cwrapper=$output_path/$output_name.exe
10588c27c18e8Smrg	    $RM $cwrappersource $cwrapper
10589c27c18e8Smrg	    trap "$RM $cwrappersource $cwrapper; exit $EXIT_FAILURE" 1 2 15
10590c27c18e8Smrg
10591c27c18e8Smrg	    func_emit_cwrapperexe_src > $cwrappersource
10592c27c18e8Smrg
10593c27c18e8Smrg	    # The wrapper executable is built using the $host compiler,
10594c27c18e8Smrg	    # because it contains $host paths and files. If cross-
10595c27c18e8Smrg	    # compiling, it, like the target executable, must be
10596c27c18e8Smrg	    # executed on the $host or under an emulation environment.
10597c27c18e8Smrg	    $opt_dry_run || {
10598c27c18e8Smrg	      $LTCC $LTCFLAGS -o $cwrapper $cwrappersource
10599c27c18e8Smrg	      $STRIP $cwrapper
10600c27c18e8Smrg	    }
10601c43cc173Smrg
10602c27c18e8Smrg	    # Now, create the wrapper script for func_source use:
10603c27c18e8Smrg	    func_ltwrapper_scriptname $cwrapper
10604c27c18e8Smrg	    $RM $func_ltwrapper_scriptname_result
10605c27c18e8Smrg	    trap "$RM $func_ltwrapper_scriptname_result; exit $EXIT_FAILURE" 1 2 15
10606c27c18e8Smrg	    $opt_dry_run || {
10607c27c18e8Smrg	      # note: this script will not be executed, so do not chmod.
1060848e5ce07Smrg	      if test "x$build" = "x$host"; then
10609c27c18e8Smrg		$cwrapper --lt-dump-script > $func_ltwrapper_scriptname_result
10610c27c18e8Smrg	      else
10611c27c18e8Smrg		func_emit_wrapper no > $func_ltwrapper_scriptname_result
10612c27c18e8Smrg	      fi
10613c27c18e8Smrg	    }
10614c27c18e8Smrg	  ;;
10615c27c18e8Smrg	  * )
10616c27c18e8Smrg	    $RM $output
10617c27c18e8Smrg	    trap "$RM $output; exit $EXIT_FAILURE" 1 2 15
10618c43cc173Smrg
10619c27c18e8Smrg	    func_emit_wrapper no > $output
10620c27c18e8Smrg	    chmod +x $output
10621c27c18e8Smrg	  ;;
10622c27c18e8Smrg	esac
10623c27c18e8Smrg      }
10624c27c18e8Smrg      exit $EXIT_SUCCESS
10625c27c18e8Smrg      ;;
10626c27c18e8Smrg    esac
10627c43cc173Smrg
10628c27c18e8Smrg    # See if we need to build an old-fashioned archive.
10629c27c18e8Smrg    for oldlib in $oldlibs; do
10630c43cc173Smrg
1063148e5ce07Smrg      case $build_libtool_libs in
1063248e5ce07Smrg        convenience)
1063348e5ce07Smrg	  oldobjs="$libobjs_save $symfileobj"
1063448e5ce07Smrg	  addlibs=$convenience
1063544584a44Smrg	  build_libtool_libs=no
1063648e5ce07Smrg	  ;;
1063748e5ce07Smrg	module)
1063848e5ce07Smrg	  oldobjs=$libobjs_save
1063948e5ce07Smrg	  addlibs=$old_convenience
1064048e5ce07Smrg	  build_libtool_libs=no
1064148e5ce07Smrg          ;;
1064248e5ce07Smrg	*)
10643c27c18e8Smrg	  oldobjs="$old_deplibs $non_pic_objects"
1064448e5ce07Smrg	  $preload && test -f "$symfileobj" \
1064548e5ce07Smrg	    && func_append oldobjs " $symfileobj"
1064648e5ce07Smrg	  addlibs=$old_convenience
1064748e5ce07Smrg	  ;;
1064848e5ce07Smrg      esac
10649c43cc173Smrg
10650c27c18e8Smrg      if test -n "$addlibs"; then
1065148e5ce07Smrg	gentop=$output_objdir/${outputname}x
10652b789ec8aSmrg	func_append generated " $gentop"
10653c43cc173Smrg
10654c27c18e8Smrg	func_extract_archives $gentop $addlibs
10655b789ec8aSmrg	func_append oldobjs " $func_extract_archives_result"
10656c27c18e8Smrg      fi
10657c43cc173Smrg
10658c27c18e8Smrg      # Do each command in the archive commands.
1065948e5ce07Smrg      if test -n "$old_archive_from_new_cmds" && test yes = "$build_libtool_libs"; then
10660c27c18e8Smrg	cmds=$old_archive_from_new_cmds
10661c27c18e8Smrg      else
10662c43cc173Smrg
10663c27c18e8Smrg	# Add any objects from preloaded convenience libraries
10664c27c18e8Smrg	if test -n "$dlprefiles"; then
1066548e5ce07Smrg	  gentop=$output_objdir/${outputname}x
10666b789ec8aSmrg	  func_append generated " $gentop"
10667c43cc173Smrg
10668c27c18e8Smrg	  func_extract_archives $gentop $dlprefiles
10669b789ec8aSmrg	  func_append oldobjs " $func_extract_archives_result"
10670c27c18e8Smrg	fi
10671c43cc173Smrg
10672c27c18e8Smrg	# POSIX demands no paths to be encoded in archives.  We have
10673c27c18e8Smrg	# to avoid creating archives with duplicate basenames if we
10674c27c18e8Smrg	# might have to extract them afterwards, e.g., when creating a
10675c27c18e8Smrg	# static archive out of a convenience library, or when linking
10676c27c18e8Smrg	# the entirety of a libtool archive into another (currently
10677c27c18e8Smrg	# not supported by libtool).
10678c27c18e8Smrg	if (for obj in $oldobjs
10679c27c18e8Smrg	    do
10680c27c18e8Smrg	      func_basename "$obj"
10681c27c18e8Smrg	      $ECHO "$func_basename_result"
10682c27c18e8Smrg	    done | sort | sort -uc >/dev/null 2>&1); then
10683c27c18e8Smrg	  :
10684c27c18e8Smrg	else
1068537eb1ca1Smrg	  echo "copying selected object files to avoid basename conflicts..."
1068648e5ce07Smrg	  gentop=$output_objdir/${outputname}x
10687b789ec8aSmrg	  func_append generated " $gentop"
10688c27c18e8Smrg	  func_mkdir_p "$gentop"
10689c27c18e8Smrg	  save_oldobjs=$oldobjs
10690c27c18e8Smrg	  oldobjs=
10691c27c18e8Smrg	  counter=1
10692c27c18e8Smrg	  for obj in $save_oldobjs
10693c27c18e8Smrg	  do
10694c27c18e8Smrg	    func_basename "$obj"
1069548e5ce07Smrg	    objbase=$func_basename_result
10696c27c18e8Smrg	    case " $oldobjs " in
10697c27c18e8Smrg	    " ") oldobjs=$obj ;;
10698c27c18e8Smrg	    *[\ /]"$objbase "*)
10699c27c18e8Smrg	      while :; do
10700c27c18e8Smrg		# Make sure we don't pick an alternate name that also
10701c27c18e8Smrg		# overlaps.
10702c27c18e8Smrg		newobj=lt$counter-$objbase
10703c27c18e8Smrg		func_arith $counter + 1
10704c27c18e8Smrg		counter=$func_arith_result
10705c27c18e8Smrg		case " $oldobjs " in
10706c27c18e8Smrg		*[\ /]"$newobj "*) ;;
10707c27c18e8Smrg		*) if test ! -f "$gentop/$newobj"; then break; fi ;;
10708c27c18e8Smrg		esac
10709c27c18e8Smrg	      done
10710c27c18e8Smrg	      func_show_eval "ln $obj $gentop/$newobj || cp $obj $gentop/$newobj"
10711b789ec8aSmrg	      func_append oldobjs " $gentop/$newobj"
10712c27c18e8Smrg	      ;;
10713b789ec8aSmrg	    *) func_append oldobjs " $obj" ;;
10714c27c18e8Smrg	    esac
10715c43cc173Smrg	  done
10716c43cc173Smrg	fi
10717f1ee322dSmrg	func_to_tool_file "$oldlib" func_convert_file_msys_to_w32
10718f1ee322dSmrg	tool_oldlib=$func_to_tool_file_result
10719c27c18e8Smrg	eval cmds=\"$old_archive_cmds\"
10720c43cc173Smrg
10721c27c18e8Smrg	func_len " $cmds"
10722c27c18e8Smrg	len=$func_len_result
10723c27c18e8Smrg	if test "$len" -lt "$max_cmd_len" || test "$max_cmd_len" -le -1; then
10724c27c18e8Smrg	  cmds=$old_archive_cmds
10725b789ec8aSmrg	elif test -n "$archiver_list_spec"; then
10726b789ec8aSmrg	  func_verbose "using command file archive linking..."
10727b789ec8aSmrg	  for obj in $oldobjs
10728b789ec8aSmrg	  do
10729b789ec8aSmrg	    func_to_tool_file "$obj"
10730b789ec8aSmrg	    $ECHO "$func_to_tool_file_result"
10731b789ec8aSmrg	  done > $output_objdir/$libname.libcmd
10732b789ec8aSmrg	  func_to_tool_file "$output_objdir/$libname.libcmd"
10733b789ec8aSmrg	  oldobjs=" $archiver_list_spec$func_to_tool_file_result"
10734b789ec8aSmrg	  cmds=$old_archive_cmds
10735c27c18e8Smrg	else
10736c27c18e8Smrg	  # the command line is too long to link in one step, link in parts
10737c27c18e8Smrg	  func_verbose "using piecewise archive linking..."
10738c27c18e8Smrg	  save_RANLIB=$RANLIB
10739c27c18e8Smrg	  RANLIB=:
10740c27c18e8Smrg	  objlist=
10741c27c18e8Smrg	  concat_cmds=
10742c27c18e8Smrg	  save_oldobjs=$oldobjs
10743c27c18e8Smrg	  oldobjs=
10744c27c18e8Smrg	  # Is there a better way of finding the last object in the list?
10745c27c18e8Smrg	  for obj in $save_oldobjs
10746c27c18e8Smrg	  do
10747c27c18e8Smrg	    last_oldobj=$obj
10748c27c18e8Smrg	  done
10749c27c18e8Smrg	  eval test_cmds=\"$old_archive_cmds\"
10750c27c18e8Smrg	  func_len " $test_cmds"
10751c27c18e8Smrg	  len0=$func_len_result
10752c27c18e8Smrg	  len=$len0
10753c27c18e8Smrg	  for obj in $save_oldobjs
10754c27c18e8Smrg	  do
10755c27c18e8Smrg	    func_len " $obj"
10756c27c18e8Smrg	    func_arith $len + $func_len_result
10757c27c18e8Smrg	    len=$func_arith_result
10758c27c18e8Smrg	    func_append objlist " $obj"
10759c27c18e8Smrg	    if test "$len" -lt "$max_cmd_len"; then
10760c27c18e8Smrg	      :
10761c27c18e8Smrg	    else
10762c27c18e8Smrg	      # the above command should be used before it gets too long
10763c27c18e8Smrg	      oldobjs=$objlist
1076448e5ce07Smrg	      if test "$obj" = "$last_oldobj"; then
10765c27c18e8Smrg		RANLIB=$save_RANLIB
10766c27c18e8Smrg	      fi
10767c27c18e8Smrg	      test -z "$concat_cmds" || concat_cmds=$concat_cmds~
1076848e5ce07Smrg	      eval concat_cmds=\"\$concat_cmds$old_archive_cmds\"
10769c27c18e8Smrg	      objlist=
10770c27c18e8Smrg	      len=$len0
10771c27c18e8Smrg	    fi
10772c27c18e8Smrg	  done
10773c27c18e8Smrg	  RANLIB=$save_RANLIB
10774c27c18e8Smrg	  oldobjs=$objlist
1077548e5ce07Smrg	  if test -z "$oldobjs"; then
10776c27c18e8Smrg	    eval cmds=\"\$concat_cmds\"
10777c27c18e8Smrg	  else
10778c27c18e8Smrg	    eval cmds=\"\$concat_cmds~\$old_archive_cmds\"
10779c27c18e8Smrg	  fi
10780c27c18e8Smrg	fi
10781c27c18e8Smrg      fi
10782c27c18e8Smrg      func_execute_cmds "$cmds" 'exit $?'
10783c43cc173Smrg    done
10784c43cc173Smrg
10785c27c18e8Smrg    test -n "$generated" && \
10786c27c18e8Smrg      func_show_eval "${RM}r$generated"
10787c43cc173Smrg
10788c27c18e8Smrg    # Now create the libtool archive.
10789c27c18e8Smrg    case $output in
10790c27c18e8Smrg    *.la)
10791c27c18e8Smrg      old_library=
1079248e5ce07Smrg      test yes = "$build_old_libs" && old_library=$libname.$libext
10793c27c18e8Smrg      func_verbose "creating $output"
10794c43cc173Smrg
10795c27c18e8Smrg      # Preserve any variables that may affect compiler behavior
10796c27c18e8Smrg      for var in $variables_saved_for_relink; do
10797c27c18e8Smrg	if eval test -z \"\${$var+set}\"; then
10798c27c18e8Smrg	  relink_command="{ test -z \"\${$var+set}\" || $lt_unset $var || { $var=; export $var; }; }; $relink_command"
10799c27c18e8Smrg	elif eval var_value=\$$var; test -z "$var_value"; then
10800c27c18e8Smrg	  relink_command="$var=; export $var; $relink_command"
10801c43cc173Smrg	else
10802c27c18e8Smrg	  func_quote_for_eval "$var_value"
10803c27c18e8Smrg	  relink_command="$var=$func_quote_for_eval_result; export $var; $relink_command"
10804c43cc173Smrg	fi
10805c27c18e8Smrg      done
10806c27c18e8Smrg      # Quote the link command for shipping.
1080748e5ce07Smrg      relink_command="(cd `pwd`; $SHELL \"$progpath\" $preserve_args --mode=relink $libtool_args @inst_prefix_dir@)"
108084940c694Smrg      func_quote "$relink_command"
108094940c694Smrg      relink_command=$func_quote_result
1081048e5ce07Smrg      if test yes = "$hardcode_automatic"; then
10811c27c18e8Smrg	relink_command=
10812c27c18e8Smrg      fi
10813c43cc173Smrg
10814c27c18e8Smrg      # Only create the output if not a dry run.
10815c27c18e8Smrg      $opt_dry_run || {
10816c27c18e8Smrg	for installed in no yes; do
1081748e5ce07Smrg	  if test yes = "$installed"; then
10818c27c18e8Smrg	    if test -z "$install_libdir"; then
10819c27c18e8Smrg	      break
10820c27c18e8Smrg	    fi
1082148e5ce07Smrg	    output=$output_objdir/${outputname}i
10822c27c18e8Smrg	    # Replace all uninstalled libtool libraries with the installed ones
10823c27c18e8Smrg	    newdependency_libs=
10824c27c18e8Smrg	    for deplib in $dependency_libs; do
10825c27c18e8Smrg	      case $deplib in
10826c27c18e8Smrg	      *.la)
10827c27c18e8Smrg		func_basename "$deplib"
1082848e5ce07Smrg		name=$func_basename_result
10829f1ee322dSmrg		func_resolve_sysroot "$deplib"
1083048e5ce07Smrg		eval libdir=`$SED -n -e 's/^libdir=\(.*\)$/\1/p' $func_resolve_sysroot_result`
10831c27c18e8Smrg		test -z "$libdir" && \
1083248e5ce07Smrg		  func_fatal_error "'$deplib' is not a valid libtool archive"
10833b789ec8aSmrg		func_append newdependency_libs " ${lt_sysroot:+=}$libdir/$name"
10834b789ec8aSmrg		;;
10835b789ec8aSmrg	      -L*)
10836b789ec8aSmrg		func_stripname -L '' "$deplib"
10837b789ec8aSmrg		func_replace_sysroot "$func_stripname_result"
10838b789ec8aSmrg		func_append newdependency_libs " -L$func_replace_sysroot_result"
10839b789ec8aSmrg		;;
10840b789ec8aSmrg	      -R*)
10841b789ec8aSmrg		func_stripname -R '' "$deplib"
10842b789ec8aSmrg		func_replace_sysroot "$func_stripname_result"
10843b789ec8aSmrg		func_append newdependency_libs " -R$func_replace_sysroot_result"
10844c27c18e8Smrg		;;
10845b789ec8aSmrg	      *) func_append newdependency_libs " $deplib" ;;
10846c27c18e8Smrg	      esac
10847c27c18e8Smrg	    done
1084848e5ce07Smrg	    dependency_libs=$newdependency_libs
10849c27c18e8Smrg	    newdlfiles=
10850c27c18e8Smrg
10851c27c18e8Smrg	    for lib in $dlfiles; do
10852c27c18e8Smrg	      case $lib in
10853c27c18e8Smrg	      *.la)
10854c27c18e8Smrg	        func_basename "$lib"
1085548e5ce07Smrg		name=$func_basename_result
1085648e5ce07Smrg		eval libdir=`$SED -n -e 's/^libdir=\(.*\)$/\1/p' $lib`
10857c27c18e8Smrg		test -z "$libdir" && \
1085848e5ce07Smrg		  func_fatal_error "'$lib' is not a valid libtool archive"
10859b789ec8aSmrg		func_append newdlfiles " ${lt_sysroot:+=}$libdir/$name"
10860c27c18e8Smrg		;;
10861b789ec8aSmrg	      *) func_append newdlfiles " $lib" ;;
10862c27c18e8Smrg	      esac
10863c27c18e8Smrg	    done
1086448e5ce07Smrg	    dlfiles=$newdlfiles
10865c27c18e8Smrg	    newdlprefiles=
10866c27c18e8Smrg	    for lib in $dlprefiles; do
10867c27c18e8Smrg	      case $lib in
10868c27c18e8Smrg	      *.la)
10869c27c18e8Smrg		# Only pass preopened files to the pseudo-archive (for
10870c27c18e8Smrg		# eventual linking with the app. that links it) if we
10871c27c18e8Smrg		# didn't already link the preopened objects directly into
10872c27c18e8Smrg		# the library:
10873c27c18e8Smrg		func_basename "$lib"
1087448e5ce07Smrg		name=$func_basename_result
1087548e5ce07Smrg		eval libdir=`$SED -n -e 's/^libdir=\(.*\)$/\1/p' $lib`
10876c27c18e8Smrg		test -z "$libdir" && \
1087748e5ce07Smrg		  func_fatal_error "'$lib' is not a valid libtool archive"
10878b789ec8aSmrg		func_append newdlprefiles " ${lt_sysroot:+=}$libdir/$name"
10879c27c18e8Smrg		;;
10880c27c18e8Smrg	      esac
10881c27c18e8Smrg	    done
1088248e5ce07Smrg	    dlprefiles=$newdlprefiles
10883c27c18e8Smrg	  else
10884c27c18e8Smrg	    newdlfiles=
10885c27c18e8Smrg	    for lib in $dlfiles; do
10886c27c18e8Smrg	      case $lib in
1088748e5ce07Smrg		[\\/]* | [A-Za-z]:[\\/]*) abs=$lib ;;
10888c27c18e8Smrg		*) abs=`pwd`"/$lib" ;;
10889c27c18e8Smrg	      esac
10890b789ec8aSmrg	      func_append newdlfiles " $abs"
10891c27c18e8Smrg	    done
1089248e5ce07Smrg	    dlfiles=$newdlfiles
10893c27c18e8Smrg	    newdlprefiles=
10894c27c18e8Smrg	    for lib in $dlprefiles; do
10895c27c18e8Smrg	      case $lib in
1089648e5ce07Smrg		[\\/]* | [A-Za-z]:[\\/]*) abs=$lib ;;
10897c27c18e8Smrg		*) abs=`pwd`"/$lib" ;;
10898c27c18e8Smrg	      esac
10899b789ec8aSmrg	      func_append newdlprefiles " $abs"
10900c27c18e8Smrg	    done
1090148e5ce07Smrg	    dlprefiles=$newdlprefiles
10902c27c18e8Smrg	  fi
10903c27c18e8Smrg	  $RM $output
10904c27c18e8Smrg	  # place dlname in correct position for cygwin
1090537eb1ca1Smrg	  # In fact, it would be nice if we could use this code for all target
1090637eb1ca1Smrg	  # systems that can't hard-code library paths into their executables
1090737eb1ca1Smrg	  # and that have no shared library path variable independent of PATH,
1090837eb1ca1Smrg	  # but it turns out we can't easily determine that from inspecting
1090937eb1ca1Smrg	  # libtool variables, so we have to hard-code the OSs to which it
1091037eb1ca1Smrg	  # applies here; at the moment, that means platforms that use the PE
1091137eb1ca1Smrg	  # object format with DLL files.  See the long comment at the top of
1091237eb1ca1Smrg	  # tests/bindir.at for full details.
10913c27c18e8Smrg	  tdlname=$dlname
10914c27c18e8Smrg	  case $host,$output,$installed,$module,$dlname in
1091537eb1ca1Smrg	    *cygwin*,*lai,yes,no,*.dll | *mingw*,*lai,yes,no,*.dll | *cegcc*,*lai,yes,no,*.dll)
1091637eb1ca1Smrg	      # If a -bindir argument was supplied, place the dll there.
1091748e5ce07Smrg	      if test -n "$bindir"; then
1091837eb1ca1Smrg		func_relative_path "$install_libdir" "$bindir"
1091948e5ce07Smrg		tdlname=$func_relative_path_result/$dlname
1092037eb1ca1Smrg	      else
1092137eb1ca1Smrg		# Otherwise fall back on heuristic.
1092237eb1ca1Smrg		tdlname=../bin/$dlname
1092337eb1ca1Smrg	      fi
1092437eb1ca1Smrg	      ;;
10925c27c18e8Smrg	  esac
10926c27c18e8Smrg	  $ECHO > $output "\
10927c27c18e8Smrg# $outputname - a libtool library file
1092848e5ce07Smrg# Generated by $PROGRAM (GNU $PACKAGE) $VERSION
10929c27c18e8Smrg#
10930c27c18e8Smrg# Please DO NOT delete this file!
10931c27c18e8Smrg# It is necessary for linking the library.
10932c43cc173Smrg
10933c27c18e8Smrg# The name that we can dlopen(3).
10934c27c18e8Smrgdlname='$tdlname'
10935c43cc173Smrg
10936c27c18e8Smrg# Names of this library.
10937c27c18e8Smrglibrary_names='$library_names'
10938c43cc173Smrg
10939c27c18e8Smrg# The name of the static archive.
10940c27c18e8Smrgold_library='$old_library'
10941c43cc173Smrg
1094248e5ce07Smrg# Linker flags that cannot go in dependency_libs.
10943c27c18e8Smrginherited_linker_flags='$new_inherited_linker_flags'
10944c43cc173Smrg
10945c27c18e8Smrg# Libraries that this one depends upon.
10946c27c18e8Smrgdependency_libs='$dependency_libs'
10947c43cc173Smrg
10948c27c18e8Smrg# Names of additional weak libraries provided by this library
10949c27c18e8Smrgweak_library_names='$weak_libs'
10950c43cc173Smrg
10951c27c18e8Smrg# Version information for $libname.
10952c27c18e8Smrgcurrent=$current
10953c27c18e8Smrgage=$age
10954c27c18e8Smrgrevision=$revision
10955c43cc173Smrg
10956c27c18e8Smrg# Is this an already installed library?
10957c27c18e8Smrginstalled=$installed
10958c43cc173Smrg
10959c27c18e8Smrg# Should we warn about portability when linking against -modules?
10960c27c18e8Smrgshouldnotlink=$module
10961c43cc173Smrg
10962c27c18e8Smrg# Files to dlopen/dlpreopen
10963c27c18e8Smrgdlopen='$dlfiles'
10964c27c18e8Smrgdlpreopen='$dlprefiles'
10965c43cc173Smrg
10966c27c18e8Smrg# Directory that this library needs to be installed in:
10967c27c18e8Smrglibdir='$install_libdir'"
1096848e5ce07Smrg	  if test no,yes = "$installed,$need_relink"; then
10969c27c18e8Smrg	    $ECHO >> $output "\
10970c27c18e8Smrgrelink_command=\"$relink_command\""
10971c27c18e8Smrg	  fi
10972c27c18e8Smrg	done
10973c27c18e8Smrg      }
10974c43cc173Smrg
10975c27c18e8Smrg      # Do a symbolic link so that the libtool archive can be found in
10976c27c18e8Smrg      # LD_LIBRARY_PATH before the program is installed.
10977c27c18e8Smrg      func_show_eval '( cd "$output_objdir" && $RM "$outputname" && $LN_S "../$outputname" "$outputname" )' 'exit $?'
10978c27c18e8Smrg      ;;
10979c27c18e8Smrg    esac
10980c27c18e8Smrg    exit $EXIT_SUCCESS
10981c27c18e8Smrg}
10982c43cc173Smrg
1098348e5ce07Smrgif test link = "$opt_mode" || test relink = "$opt_mode"; then
1098448e5ce07Smrg  func_mode_link ${1+"$@"}
1098548e5ce07Smrgfi
10986c43cc173Smrg
10987c43cc173Smrg
10988c27c18e8Smrg# func_mode_uninstall arg...
10989c27c18e8Smrgfunc_mode_uninstall ()
10990c27c18e8Smrg{
1099148e5ce07Smrg    $debug_cmd
1099248e5ce07Smrg
1099348e5ce07Smrg    RM=$nonopt
10994c43cc173Smrg    files=
1099548e5ce07Smrg    rmforce=false
10996c43cc173Smrg    exit_status=0
10997c43cc173Smrg
10998c43cc173Smrg    # This variable tells wrapper scripts just to set variables rather
10999c43cc173Smrg    # than running their programs.
1100048e5ce07Smrg    libtool_install_magic=$magic
11001c43cc173Smrg
11002c43cc173Smrg    for arg
11003c43cc173Smrg    do
11004c43cc173Smrg      case $arg in
1100548e5ce07Smrg      -f) func_append RM " $arg"; rmforce=: ;;
11006b789ec8aSmrg      -*) func_append RM " $arg" ;;
11007b789ec8aSmrg      *) func_append files " $arg" ;;
11008c43cc173Smrg      esac
11009c43cc173Smrg    done
11010c43cc173Smrg
11011c27c18e8Smrg    test -z "$RM" && \
11012c27c18e8Smrg      func_fatal_help "you must specify an RM program"
11013c43cc173Smrg
11014c43cc173Smrg    rmdirs=
11015c43cc173Smrg
11016c43cc173Smrg    for file in $files; do
11017c27c18e8Smrg      func_dirname "$file" "" "."
1101848e5ce07Smrg      dir=$func_dirname_result
1101948e5ce07Smrg      if test . = "$dir"; then
1102048e5ce07Smrg	odir=$objdir
11021c43cc173Smrg      else
1102248e5ce07Smrg	odir=$dir/$objdir
11023c43cc173Smrg      fi
11024c27c18e8Smrg      func_basename "$file"
1102548e5ce07Smrg      name=$func_basename_result
1102648e5ce07Smrg      test uninstall = "$opt_mode" && odir=$dir
11027c43cc173Smrg
11028b789ec8aSmrg      # Remember odir for removal later, being careful to avoid duplicates
1102948e5ce07Smrg      if test clean = "$opt_mode"; then
11030c43cc173Smrg	case " $rmdirs " in
11031b789ec8aSmrg	  *" $odir "*) ;;
11032b789ec8aSmrg	  *) func_append rmdirs " $odir" ;;
11033c43cc173Smrg	esac
11034c43cc173Smrg      fi
11035c43cc173Smrg
11036c43cc173Smrg      # Don't error if the file doesn't exist and rm -f was used.
11037c27c18e8Smrg      if { test -L "$file"; } >/dev/null 2>&1 ||
11038c27c18e8Smrg	 { test -h "$file"; } >/dev/null 2>&1 ||
11039c27c18e8Smrg	 test -f "$file"; then
11040c43cc173Smrg	:
11041c43cc173Smrg      elif test -d "$file"; then
11042c43cc173Smrg	exit_status=1
11043c43cc173Smrg	continue
1104448e5ce07Smrg      elif $rmforce; then
11045c43cc173Smrg	continue
11046c43cc173Smrg      fi
11047c43cc173Smrg
1104848e5ce07Smrg      rmfiles=$file
11049c43cc173Smrg
11050c43cc173Smrg      case $name in
11051c43cc173Smrg      *.la)
11052c43cc173Smrg	# Possibly a libtool archive, so verify it.
11053c27c18e8Smrg	if func_lalib_p "$file"; then
11054c27c18e8Smrg	  func_source $dir/$name
11055c43cc173Smrg
11056c43cc173Smrg	  # Delete the libtool libraries and symlinks.
11057c43cc173Smrg	  for n in $library_names; do
11058b789ec8aSmrg	    func_append rmfiles " $odir/$n"
11059c43cc173Smrg	  done
11060b789ec8aSmrg	  test -n "$old_library" && func_append rmfiles " $odir/$old_library"
11061c43cc173Smrg
1106248e5ce07Smrg	  case $opt_mode in
11063c43cc173Smrg	  clean)
11064b789ec8aSmrg	    case " $library_names " in
11065c43cc173Smrg	    *" $dlname "*) ;;
11066b789ec8aSmrg	    *) test -n "$dlname" && func_append rmfiles " $odir/$dlname" ;;
11067c43cc173Smrg	    esac
11068b789ec8aSmrg	    test -n "$libdir" && func_append rmfiles " $odir/$name $odir/${name}i"
11069c43cc173Smrg	    ;;
11070c43cc173Smrg	  uninstall)
11071c43cc173Smrg	    if test -n "$library_names"; then
11072c43cc173Smrg	      # Do each command in the postuninstall commands.
1107348e5ce07Smrg	      func_execute_cmds "$postuninstall_cmds" '$rmforce || exit_status=1'
11074c43cc173Smrg	    fi
11075c43cc173Smrg
11076c43cc173Smrg	    if test -n "$old_library"; then
11077c43cc173Smrg	      # Do each command in the old_postuninstall commands.
1107848e5ce07Smrg	      func_execute_cmds "$old_postuninstall_cmds" '$rmforce || exit_status=1'
11079c43cc173Smrg	    fi
11080c43cc173Smrg	    # FIXME: should reinstall the best remaining shared library.
11081c43cc173Smrg	    ;;
11082c43cc173Smrg	  esac
11083c43cc173Smrg	fi
11084c43cc173Smrg	;;
11085c43cc173Smrg
11086c43cc173Smrg      *.lo)
11087c43cc173Smrg	# Possibly a libtool object, so verify it.
11088c27c18e8Smrg	if func_lalib_p "$file"; then
11089c43cc173Smrg
11090c43cc173Smrg	  # Read the .lo file
11091c27c18e8Smrg	  func_source $dir/$name
11092c43cc173Smrg
11093c43cc173Smrg	  # Add PIC object to the list of files to remove.
1109448e5ce07Smrg	  if test -n "$pic_object" && test none != "$pic_object"; then
11095b789ec8aSmrg	    func_append rmfiles " $dir/$pic_object"
11096c43cc173Smrg	  fi
11097c43cc173Smrg
11098c43cc173Smrg	  # Add non-PIC object to the list of files to remove.
1109948e5ce07Smrg	  if test -n "$non_pic_object" && test none != "$non_pic_object"; then
11100b789ec8aSmrg	    func_append rmfiles " $dir/$non_pic_object"
11101c43cc173Smrg	  fi
11102c43cc173Smrg	fi
11103c43cc173Smrg	;;
11104c43cc173Smrg
11105c43cc173Smrg      *)
1110648e5ce07Smrg	if test clean = "$opt_mode"; then
11107c43cc173Smrg	  noexename=$name
11108c43cc173Smrg	  case $file in
11109c43cc173Smrg	  *.exe)
11110c27c18e8Smrg	    func_stripname '' '.exe' "$file"
11111c27c18e8Smrg	    file=$func_stripname_result
11112c27c18e8Smrg	    func_stripname '' '.exe' "$name"
11113c27c18e8Smrg	    noexename=$func_stripname_result
11114c43cc173Smrg	    # $file with .exe has already been added to rmfiles,
11115c43cc173Smrg	    # add $file without .exe
11116b789ec8aSmrg	    func_append rmfiles " $file"
11117c43cc173Smrg	    ;;
11118c43cc173Smrg	  esac
11119c43cc173Smrg	  # Do a test to see if this is a libtool program.
11120c27c18e8Smrg	  if func_ltwrapper_p "$file"; then
11121c27c18e8Smrg	    if func_ltwrapper_executable_p "$file"; then
11122c27c18e8Smrg	      func_ltwrapper_scriptname "$file"
11123c27c18e8Smrg	      relink_command=
11124c27c18e8Smrg	      func_source $func_ltwrapper_scriptname_result
11125b789ec8aSmrg	      func_append rmfiles " $func_ltwrapper_scriptname_result"
11126c27c18e8Smrg	    else
11127c27c18e8Smrg	      relink_command=
11128c27c18e8Smrg	      func_source $dir/$noexename
11129c27c18e8Smrg	    fi
11130c43cc173Smrg
11131c43cc173Smrg	    # note $name still contains .exe if it was in $file originally
11132c43cc173Smrg	    # as does the version of $file that was added into $rmfiles
1113348e5ce07Smrg	    func_append rmfiles " $odir/$name $odir/${name}S.$objext"
1113448e5ce07Smrg	    if test yes = "$fast_install" && test -n "$relink_command"; then
11135b789ec8aSmrg	      func_append rmfiles " $odir/lt-$name"
11136c43cc173Smrg	    fi
1113748e5ce07Smrg	    if test "X$noexename" != "X$name"; then
1113848e5ce07Smrg	      func_append rmfiles " $odir/lt-$noexename.c"
11139c43cc173Smrg	    fi
11140c43cc173Smrg	  fi
11141c43cc173Smrg	fi
11142c43cc173Smrg	;;
11143c43cc173Smrg      esac
11144c27c18e8Smrg      func_show_eval "$RM $rmfiles" 'exit_status=1'
11145c43cc173Smrg    done
11146c43cc173Smrg
1114748e5ce07Smrg    # Try to remove the $objdir's in the directories where we deleted files
11148c43cc173Smrg    for dir in $rmdirs; do
11149c43cc173Smrg      if test -d "$dir"; then
11150c27c18e8Smrg	func_show_eval "rmdir $dir >/dev/null 2>&1"
11151c43cc173Smrg      fi
11152c43cc173Smrg    done
11153c43cc173Smrg
11154c43cc173Smrg    exit $exit_status
11155c27c18e8Smrg}
11156c43cc173Smrg
1115748e5ce07Smrgif test uninstall = "$opt_mode" || test clean = "$opt_mode"; then
1115848e5ce07Smrg  func_mode_uninstall ${1+"$@"}
1115948e5ce07Smrgfi
11160c43cc173Smrg
11161b789ec8aSmrgtest -z "$opt_mode" && {
1116248e5ce07Smrg  help=$generic_help
11163c27c18e8Smrg  func_fatal_help "you must specify a MODE"
11164c27c18e8Smrg}
11165c27c18e8Smrg
11166c27c18e8Smrgtest -z "$exec_cmd" && \
1116748e5ce07Smrg  func_fatal_help "invalid operation mode '$opt_mode'"
11168c43cc173Smrg
11169c43cc173Smrgif test -n "$exec_cmd"; then
11170c27c18e8Smrg  eval exec "$exec_cmd"
11171c43cc173Smrg  exit $EXIT_FAILURE
11172c43cc173Smrgfi
11173c43cc173Smrg
11174c27c18e8Smrgexit $exit_status
11175c43cc173Smrg
11176c43cc173Smrg
11177c43cc173Smrg# The TAGs below are defined such that we never get into a situation
1117848e5ce07Smrg# where we disable both kinds of libraries.  Given conflicting
11179c43cc173Smrg# choices, we go for a static library, that is the most portable,
11180c43cc173Smrg# since we can't tell whether shared libraries were disabled because
11181c43cc173Smrg# the user asked for that or because the platform doesn't support
11182c43cc173Smrg# them.  This is particularly important on AIX, because we don't
11183c43cc173Smrg# support having both static and shared libraries enabled at the same
11184c43cc173Smrg# time on that platform, so we default to a shared-only configuration.
11185c43cc173Smrg# If a disable-shared tag is given, we'll fallback to a static-only
11186c43cc173Smrg# configuration.  But we'll never go from static-only to shared-only.
11187c43cc173Smrg
11188c43cc173Smrg# ### BEGIN LIBTOOL TAG CONFIG: disable-shared
11189c27c18e8Smrgbuild_libtool_libs=no
11190c27c18e8Smrgbuild_old_libs=yes
11191c43cc173Smrg# ### END LIBTOOL TAG CONFIG: disable-shared
11192c43cc173Smrg
11193c43cc173Smrg# ### BEGIN LIBTOOL TAG CONFIG: disable-static
11194c27c18e8Smrgbuild_old_libs=`case $build_libtool_libs in yes) echo no;; *) echo yes;; esac`
11195c43cc173Smrg# ### END LIBTOOL TAG CONFIG: disable-static
11196c43cc173Smrg
11197c43cc173Smrg# Local Variables:
11198c43cc173Smrg# mode:shell-script
11199c43cc173Smrg# sh-indentation:2
11200c43cc173Smrg# End:
11201