ltmain.sh revision cdce750a
19d0ccd10Smrg#! /bin/sh
29d0ccd10Smrg## DO NOT EDIT - This file generated from ./build-aux/ltmain.in
39d0ccd10Smrg##               by inline-source v2014-01-03.01
4e169010aSmrg
59d0ccd10Smrg# libtool (GNU libtool) 2.4.6
69d0ccd10Smrg# Provide generalized library-building support services.
7e169010aSmrg# Written by Gordon Matzigkeit <gord@gnu.ai.mit.edu>, 1996
8e169010aSmrg
99d0ccd10Smrg# Copyright (C) 1996-2015 Free Software Foundation, Inc.
10e169010aSmrg# This is free software; see the source for copying conditions.  There is NO
11e169010aSmrg# warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
12e169010aSmrg
13e169010aSmrg# GNU Libtool is free software; you can redistribute it and/or modify
147914d74bSmrg# it under the terms of the GNU General Public License as published by
157914d74bSmrg# the Free Software Foundation; either version 2 of the License, or
167914d74bSmrg# (at your option) any later version.
177914d74bSmrg#
18e169010aSmrg# As a special exception to the GNU General Public License,
19e169010aSmrg# if you distribute this file as part of a program or library that
20e169010aSmrg# is built using GNU Libtool, you may include this file under the
21e169010aSmrg# same distribution terms that you use for the rest of that program.
22e169010aSmrg#
23e169010aSmrg# GNU Libtool is distributed in the hope that it will be useful, but
247914d74bSmrg# WITHOUT ANY WARRANTY; without even the implied warranty of
257914d74bSmrg# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
267914d74bSmrg# General Public License for more details.
277914d74bSmrg#
287914d74bSmrg# You should have received a copy of the GNU General Public License
299d0ccd10Smrg# along with this program.  If not, see <http://www.gnu.org/licenses/>.
30e169010aSmrg
31e169010aSmrg
32e8ead290SmrgPROGRAM=libtool
33e169010aSmrgPACKAGE=libtool
34cdce750aSmrgVERSION=2.4.6
359d0ccd10Smrgpackage_revision=2.4.6
36e169010aSmrg
379d0ccd10Smrg
389d0ccd10Smrg## ------ ##
399d0ccd10Smrg## Usage. ##
409d0ccd10Smrg## ------ ##
419d0ccd10Smrg
429d0ccd10Smrg# Run './libtool --help' for help with using this script from the
439d0ccd10Smrg# command line.
449d0ccd10Smrg
459d0ccd10Smrg
469d0ccd10Smrg## ------------------------------- ##
479d0ccd10Smrg## User overridable command paths. ##
489d0ccd10Smrg## ------------------------------- ##
499d0ccd10Smrg
509d0ccd10Smrg# After configure completes, it has a better idea of some of the
519d0ccd10Smrg# shell tools we need than the defaults used by the functions shared
529d0ccd10Smrg# with bootstrap, so set those here where they can still be over-
539d0ccd10Smrg# ridden by the user, but otherwise take precedence.
549d0ccd10Smrg
559d0ccd10Smrg: ${AUTOCONF="autoconf"}
569d0ccd10Smrg: ${AUTOMAKE="automake"}
579d0ccd10Smrg
589d0ccd10Smrg
599d0ccd10Smrg## -------------------------- ##
609d0ccd10Smrg## Source external libraries. ##
619d0ccd10Smrg## -------------------------- ##
629d0ccd10Smrg
639d0ccd10Smrg# Much of our low-level functionality needs to be sourced from external
649d0ccd10Smrg# libraries, which are installed to $pkgauxdir.
659d0ccd10Smrg
669d0ccd10Smrg# Set a version string for this script.
679d0ccd10Smrgscriptversion=2015-01-20.17; # UTC
689d0ccd10Smrg
699d0ccd10Smrg# General shell script boiler plate, and helper functions.
709d0ccd10Smrg# Written by Gary V. Vaughan, 2004
719d0ccd10Smrg
729d0ccd10Smrg# Copyright (C) 2004-2015 Free Software Foundation, Inc.
739d0ccd10Smrg# This is free software; see the source for copying conditions.  There is NO
749d0ccd10Smrg# warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
759d0ccd10Smrg
769d0ccd10Smrg# This program is free software; you can redistribute it and/or modify
779d0ccd10Smrg# it under the terms of the GNU General Public License as published by
789d0ccd10Smrg# the Free Software Foundation; either version 3 of the License, or
799d0ccd10Smrg# (at your option) any later version.
809d0ccd10Smrg
819d0ccd10Smrg# As a special exception to the GNU General Public License, if you distribute
829d0ccd10Smrg# this file as part of a program or library that is built using GNU Libtool,
839d0ccd10Smrg# you may include this file under the same distribution terms that you use
849d0ccd10Smrg# for the rest of that program.
859d0ccd10Smrg
869d0ccd10Smrg# This program is distributed in the hope that it will be useful,
879d0ccd10Smrg# but WITHOUT ANY WARRANTY; without even the implied warranty of
889d0ccd10Smrg# MERCHANTABILITY or FITNES FOR A PARTICULAR PURPOSE. See the GNU
899d0ccd10Smrg# General Public License for more details.
909d0ccd10Smrg
919d0ccd10Smrg# You should have received a copy of the GNU General Public License
929d0ccd10Smrg# along with this program. If not, see <http://www.gnu.org/licenses/>.
939d0ccd10Smrg
949d0ccd10Smrg# Please report bugs or propose patches to gary@gnu.org.
959d0ccd10Smrg
969d0ccd10Smrg
979d0ccd10Smrg## ------ ##
989d0ccd10Smrg## Usage. ##
999d0ccd10Smrg## ------ ##
1009d0ccd10Smrg
1019d0ccd10Smrg# Evaluate this file near the top of your script to gain access to
1029d0ccd10Smrg# the functions and variables defined here:
1039d0ccd10Smrg#
1049d0ccd10Smrg#   . `echo "$0" | ${SED-sed} 's|[^/]*$||'`/build-aux/funclib.sh
1059d0ccd10Smrg#
1069d0ccd10Smrg# If you need to override any of the default environment variable
1079d0ccd10Smrg# settings, do that before evaluating this file.
1089d0ccd10Smrg
1099d0ccd10Smrg
1109d0ccd10Smrg## -------------------- ##
1119d0ccd10Smrg## Shell normalisation. ##
1129d0ccd10Smrg## -------------------- ##
1139d0ccd10Smrg
1149d0ccd10Smrg# Some shells need a little help to be as Bourne compatible as possible.
1159d0ccd10Smrg# Before doing anything else, make sure all that help has been provided!
1169d0ccd10Smrg
1179d0ccd10SmrgDUALCASE=1; export DUALCASE # for MKS sh
1189d0ccd10Smrgif test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then :
119e169010aSmrg  emulate sh
120e169010aSmrg  NULLCMD=:
1219d0ccd10Smrg  # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which
122e169010aSmrg  # is contrary to our usage.  Disable this feature.
123e169010aSmrg  alias -g '${1+"$@"}'='"$@"'
124e169010aSmrg  setopt NO_GLOB_SUBST
125e169010aSmrgelse
1269d0ccd10Smrg  case `(set -o) 2>/dev/null` in *posix*) set -o posix ;; esac
127e169010aSmrgfi
128e8ead290Smrg
1299d0ccd10Smrg# NLS nuisances: We save the old values in case they are required later.
1309d0ccd10Smrg_G_user_locale=
1319d0ccd10Smrg_G_safe_locale=
1329d0ccd10Smrgfor _G_var in LANG LANGUAGE LC_ALL LC_CTYPE LC_COLLATE LC_MESSAGES
133e169010aSmrgdo
1349d0ccd10Smrg  eval "if test set = \"\${$_G_var+set}\"; then
1359d0ccd10Smrg          save_$_G_var=\$$_G_var
1369d0ccd10Smrg          $_G_var=C
1379d0ccd10Smrg	  export $_G_var
1389d0ccd10Smrg	  _G_user_locale=\"$_G_var=\\\$save_\$_G_var; \$_G_user_locale\"
1399d0ccd10Smrg	  _G_safe_locale=\"$_G_var=C; \$_G_safe_locale\"
140e169010aSmrg	fi"
141e169010aSmrgdone
142e169010aSmrg
1439d0ccd10Smrg# CDPATH.
1449d0ccd10Smrg(unset CDPATH) >/dev/null 2>&1 && unset CDPATH
145e169010aSmrg
1469d0ccd10Smrg# Make sure IFS has a sensible default
1479d0ccd10Smrgsp=' '
1489d0ccd10Smrgnl='
1499d0ccd10Smrg'
1509d0ccd10SmrgIFS="$sp	$nl"
1519d0ccd10Smrg
1529d0ccd10Smrg# There are apparently some retarded systems that use ';' as a PATH separator!
1539d0ccd10Smrgif test "${PATH_SEPARATOR+set}" != set; then
1549d0ccd10Smrg  PATH_SEPARATOR=:
1559d0ccd10Smrg  (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && {
1569d0ccd10Smrg    (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 ||
1579d0ccd10Smrg      PATH_SEPARATOR=';'
1589d0ccd10Smrg  }
1599d0ccd10Smrgfi
160e169010aSmrg
161e169010aSmrg
162e169010aSmrg
1639d0ccd10Smrg## ------------------------- ##
1649d0ccd10Smrg## Locate command utilities. ##
1659d0ccd10Smrg## ------------------------- ##
1669d0ccd10Smrg
1679d0ccd10Smrg
1689d0ccd10Smrg# func_executable_p FILE
1699d0ccd10Smrg# ----------------------
1709d0ccd10Smrg# Check that FILE is an executable regular file.
1719d0ccd10Smrgfunc_executable_p ()
1729d0ccd10Smrg{
1739d0ccd10Smrg    test -f "$1" && test -x "$1"
1749d0ccd10Smrg}
1759d0ccd10Smrg
1769d0ccd10Smrg
1779d0ccd10Smrg# func_path_progs PROGS_LIST CHECK_FUNC [PATH]
1789d0ccd10Smrg# --------------------------------------------
1799d0ccd10Smrg# Search for either a program that responds to --version with output
1809d0ccd10Smrg# containing "GNU", or else returned by CHECK_FUNC otherwise, by
1819d0ccd10Smrg# trying all the directories in PATH with each of the elements of
1829d0ccd10Smrg# PROGS_LIST.
1839d0ccd10Smrg#
1849d0ccd10Smrg# CHECK_FUNC should accept the path to a candidate program, and
1859d0ccd10Smrg# set $func_check_prog_result if it truncates its output less than
1869d0ccd10Smrg# $_G_path_prog_max characters.
1879d0ccd10Smrgfunc_path_progs ()
1889d0ccd10Smrg{
1899d0ccd10Smrg    _G_progs_list=$1
1909d0ccd10Smrg    _G_check_func=$2
1919d0ccd10Smrg    _G_PATH=${3-"$PATH"}
1929d0ccd10Smrg
1939d0ccd10Smrg    _G_path_prog_max=0
1949d0ccd10Smrg    _G_path_prog_found=false
1959d0ccd10Smrg    _G_save_IFS=$IFS; IFS=${PATH_SEPARATOR-:}
1969d0ccd10Smrg    for _G_dir in $_G_PATH; do
1979d0ccd10Smrg      IFS=$_G_save_IFS
1989d0ccd10Smrg      test -z "$_G_dir" && _G_dir=.
1999d0ccd10Smrg      for _G_prog_name in $_G_progs_list; do
2009d0ccd10Smrg        for _exeext in '' .EXE; do
2019d0ccd10Smrg          _G_path_prog=$_G_dir/$_G_prog_name$_exeext
2029d0ccd10Smrg          func_executable_p "$_G_path_prog" || continue
2039d0ccd10Smrg          case `"$_G_path_prog" --version 2>&1` in
2049d0ccd10Smrg            *GNU*) func_path_progs_result=$_G_path_prog _G_path_prog_found=: ;;
2059d0ccd10Smrg            *)     $_G_check_func $_G_path_prog
2069d0ccd10Smrg		   func_path_progs_result=$func_check_prog_result
2079d0ccd10Smrg		   ;;
2089d0ccd10Smrg          esac
2099d0ccd10Smrg          $_G_path_prog_found && break 3
2109d0ccd10Smrg        done
2119d0ccd10Smrg      done
2129d0ccd10Smrg    done
2139d0ccd10Smrg    IFS=$_G_save_IFS
2149d0ccd10Smrg    test -z "$func_path_progs_result" && {
2159d0ccd10Smrg      echo "no acceptable sed could be found in \$PATH" >&2
2169d0ccd10Smrg      exit 1
2179d0ccd10Smrg    }
2189d0ccd10Smrg}
2199d0ccd10Smrg
2209d0ccd10Smrg
2219d0ccd10Smrg# We want to be able to use the functions in this file before configure
2229d0ccd10Smrg# has figured out where the best binaries are kept, which means we have
2239d0ccd10Smrg# to search for them ourselves - except when the results are already set
2249d0ccd10Smrg# where we skip the searches.
2259d0ccd10Smrg
2269d0ccd10Smrg# Unless the user overrides by setting SED, search the path for either GNU
2279d0ccd10Smrg# sed, or the sed that truncates its output the least.
2289d0ccd10Smrgtest -z "$SED" && {
2299d0ccd10Smrg  _G_sed_script=s/aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa/bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb/
2309d0ccd10Smrg  for _G_i in 1 2 3 4 5 6 7; do
2319d0ccd10Smrg    _G_sed_script=$_G_sed_script$nl$_G_sed_script
2329d0ccd10Smrg  done
2339d0ccd10Smrg  echo "$_G_sed_script" 2>/dev/null | sed 99q >conftest.sed
2349d0ccd10Smrg  _G_sed_script=
2359d0ccd10Smrg
2369d0ccd10Smrg  func_check_prog_sed ()
2379d0ccd10Smrg  {
2389d0ccd10Smrg    _G_path_prog=$1
2399d0ccd10Smrg
2409d0ccd10Smrg    _G_count=0
2419d0ccd10Smrg    printf 0123456789 >conftest.in
2429d0ccd10Smrg    while :
2439d0ccd10Smrg    do
2449d0ccd10Smrg      cat conftest.in conftest.in >conftest.tmp
2459d0ccd10Smrg      mv conftest.tmp conftest.in
2469d0ccd10Smrg      cp conftest.in conftest.nl
2479d0ccd10Smrg      echo '' >> conftest.nl
2489d0ccd10Smrg      "$_G_path_prog" -f conftest.sed <conftest.nl >conftest.out 2>/dev/null || break
2499d0ccd10Smrg      diff conftest.out conftest.nl >/dev/null 2>&1 || break
2509d0ccd10Smrg      _G_count=`expr $_G_count + 1`
2519d0ccd10Smrg      if test "$_G_count" -gt "$_G_path_prog_max"; then
2529d0ccd10Smrg        # Best one so far, save it but keep looking for a better one
2539d0ccd10Smrg        func_check_prog_result=$_G_path_prog
2549d0ccd10Smrg        _G_path_prog_max=$_G_count
2559d0ccd10Smrg      fi
2569d0ccd10Smrg      # 10*(2^10) chars as input seems more than enough
2579d0ccd10Smrg      test 10 -lt "$_G_count" && break
2589d0ccd10Smrg    done
2599d0ccd10Smrg    rm -f conftest.in conftest.tmp conftest.nl conftest.out
2609d0ccd10Smrg  }
2619d0ccd10Smrg
2629d0ccd10Smrg  func_path_progs "sed gsed" func_check_prog_sed $PATH:/usr/xpg4/bin
2639d0ccd10Smrg  rm -f conftest.sed
2649d0ccd10Smrg  SED=$func_path_progs_result
2659d0ccd10Smrg}
2669d0ccd10Smrg
2679d0ccd10Smrg
2689d0ccd10Smrg# Unless the user overrides by setting GREP, search the path for either GNU
2699d0ccd10Smrg# grep, or the grep that truncates its output the least.
2709d0ccd10Smrgtest -z "$GREP" && {
2719d0ccd10Smrg  func_check_prog_grep ()
2729d0ccd10Smrg  {
2739d0ccd10Smrg    _G_path_prog=$1
2749d0ccd10Smrg
2759d0ccd10Smrg    _G_count=0
2769d0ccd10Smrg    _G_path_prog_max=0
2779d0ccd10Smrg    printf 0123456789 >conftest.in
2789d0ccd10Smrg    while :
2799d0ccd10Smrg    do
2809d0ccd10Smrg      cat conftest.in conftest.in >conftest.tmp
2819d0ccd10Smrg      mv conftest.tmp conftest.in
2829d0ccd10Smrg      cp conftest.in conftest.nl
2839d0ccd10Smrg      echo 'GREP' >> conftest.nl
2849d0ccd10Smrg      "$_G_path_prog" -e 'GREP$' -e '-(cannot match)-' <conftest.nl >conftest.out 2>/dev/null || break
2859d0ccd10Smrg      diff conftest.out conftest.nl >/dev/null 2>&1 || break
2869d0ccd10Smrg      _G_count=`expr $_G_count + 1`
2879d0ccd10Smrg      if test "$_G_count" -gt "$_G_path_prog_max"; then
2889d0ccd10Smrg        # Best one so far, save it but keep looking for a better one
2899d0ccd10Smrg        func_check_prog_result=$_G_path_prog
2909d0ccd10Smrg        _G_path_prog_max=$_G_count
2919d0ccd10Smrg      fi
2929d0ccd10Smrg      # 10*(2^10) chars as input seems more than enough
2939d0ccd10Smrg      test 10 -lt "$_G_count" && break
2949d0ccd10Smrg    done
2959d0ccd10Smrg    rm -f conftest.in conftest.tmp conftest.nl conftest.out
2969d0ccd10Smrg  }
2979d0ccd10Smrg
2989d0ccd10Smrg  func_path_progs "grep ggrep" func_check_prog_grep $PATH:/usr/xpg4/bin
2999d0ccd10Smrg  GREP=$func_path_progs_result
3009d0ccd10Smrg}
3019d0ccd10Smrg
3029d0ccd10Smrg
3039d0ccd10Smrg## ------------------------------- ##
3049d0ccd10Smrg## User overridable command paths. ##
3059d0ccd10Smrg## ------------------------------- ##
3069d0ccd10Smrg
3079d0ccd10Smrg# All uppercase variable names are used for environment variables.  These
3089d0ccd10Smrg# variables can be overridden by the user before calling a script that
3099d0ccd10Smrg# uses them if a suitable command of that name is not already available
3109d0ccd10Smrg# in the command search PATH.
311e169010aSmrg
312e169010aSmrg: ${CP="cp -f"}
3139d0ccd10Smrg: ${ECHO="printf %s\n"}
3149d0ccd10Smrg: ${EGREP="$GREP -E"}
3159d0ccd10Smrg: ${FGREP="$GREP -F"}
3169d0ccd10Smrg: ${LN_S="ln -s"}
317e169010aSmrg: ${MAKE="make"}
318e169010aSmrg: ${MKDIR="mkdir"}
319e169010aSmrg: ${MV="mv -f"}
320e169010aSmrg: ${RM="rm -f"}
321e169010aSmrg: ${SHELL="${CONFIG_SHELL-/bin/sh}"}
322e169010aSmrg
323e169010aSmrg
3249d0ccd10Smrg## -------------------- ##
3259d0ccd10Smrg## Useful sed snippets. ##
3269d0ccd10Smrg## -------------------- ##
327c63293b5Smrg
3289d0ccd10Smrgsed_dirname='s|/[^/]*$||'
3299d0ccd10Smrgsed_basename='s|^.*/||'
330c63293b5Smrg
3319d0ccd10Smrg# Sed substitution that helps us do robust quoting.  It backslashifies
3329d0ccd10Smrg# metacharacters that are still active within double-quoted strings.
3339d0ccd10Smrgsed_quote_subst='s|\([`"$\\]\)|\\\1|g'
334c63293b5Smrg
3359d0ccd10Smrg# Same as above, but do not quote variable references.
3369d0ccd10Smrgsed_double_quote_subst='s/\(["`\\]\)/\\\1/g'
337c63293b5Smrg
3389d0ccd10Smrg# Sed substitution that turns a string into a regex matching for the
3399d0ccd10Smrg# string literally.
3409d0ccd10Smrgsed_make_literal_regex='s|[].[^$\\*\/]|\\&|g'
341c63293b5Smrg
3429d0ccd10Smrg# Sed substitution that converts a w32 file name or path
3439d0ccd10Smrg# that contains forward slashes, into one that contains
3449d0ccd10Smrg# (escaped) backslashes.  A very naive implementation.
3459d0ccd10Smrgsed_naive_backslashify='s|\\\\*|\\|g;s|/|\\|g;s|\\|\\\\|g'
3469d0ccd10Smrg
3479d0ccd10Smrg# Re-'\' parameter expansions in output of sed_double_quote_subst that
3489d0ccd10Smrg# were '\'-ed in input to the same.  If an odd number of '\' preceded a
3499d0ccd10Smrg# '$' in input to sed_double_quote_subst, that '$' was protected from
3509d0ccd10Smrg# expansion.  Since each input '\' is now two '\'s, look for any number
3519d0ccd10Smrg# of runs of four '\'s followed by two '\'s and then a '$'.  '\' that '$'.
3529d0ccd10Smrg_G_bs='\\'
3539d0ccd10Smrg_G_bs2='\\\\'
3549d0ccd10Smrg_G_bs4='\\\\\\\\'
3559d0ccd10Smrg_G_dollar='\$'
3569d0ccd10Smrgsed_double_backslash="\
3579d0ccd10Smrg  s/$_G_bs4/&\\
3589d0ccd10Smrg/g
3599d0ccd10Smrg  s/^$_G_bs2$_G_dollar/$_G_bs&/
3609d0ccd10Smrg  s/\\([^$_G_bs]\\)$_G_bs2$_G_dollar/\\1$_G_bs2$_G_bs$_G_dollar/g
3619d0ccd10Smrg  s/\n//g"
362c63293b5Smrg
363e169010aSmrg
3649d0ccd10Smrg## ----------------- ##
3659d0ccd10Smrg## Global variables. ##
3669d0ccd10Smrg## ----------------- ##
3677914d74bSmrg
3689d0ccd10Smrg# Except for the global variables explicitly listed below, the following
3699d0ccd10Smrg# functions in the '^func_' namespace, and the '^require_' namespace
3709d0ccd10Smrg# variables initialised in the 'Resource management' section, sourcing
3719d0ccd10Smrg# this file will not pollute your global namespace with anything
3729d0ccd10Smrg# else. There's no portable way to scope variables in Bourne shell
3739d0ccd10Smrg# though, so actually running these functions will sometimes place
3749d0ccd10Smrg# results into a variable named after the function, and often use
3759d0ccd10Smrg# temporary variables in the '^_G_' namespace. If you are careful to
3769d0ccd10Smrg# avoid using those namespaces casually in your sourcing script, things
3779d0ccd10Smrg# should continue to work as you expect. And, of course, you can freely
3789d0ccd10Smrg# overwrite any of the functions or variables defined here before
3799d0ccd10Smrg# calling anything to customize them.
380e8ead290Smrg
3819d0ccd10SmrgEXIT_SUCCESS=0
3829d0ccd10SmrgEXIT_FAILURE=1
3839d0ccd10SmrgEXIT_MISMATCH=63  # $? = 63 is used to indicate version mismatch to missing.
3849d0ccd10SmrgEXIT_SKIP=77	  # $? = 77 is used to indicate a skipped test to automake.
385e8ead290Smrg
3869d0ccd10Smrg# Allow overriding, eg assuming that you follow the convention of
3879d0ccd10Smrg# putting '$debug_cmd' at the start of all your functions, you can get
3889d0ccd10Smrg# bash to show function call trace with:
3899d0ccd10Smrg#
3909d0ccd10Smrg#    debug_cmd='eval echo "${FUNCNAME[0]} $*" >&2' bash your-script-name
3919d0ccd10Smrgdebug_cmd=${debug_cmd-":"}
3929d0ccd10Smrgexit_cmd=:
393e8ead290Smrg
3949d0ccd10Smrg# By convention, finish your script with:
3959d0ccd10Smrg#
3969d0ccd10Smrg#    exit $exit_status
3979d0ccd10Smrg#
3989d0ccd10Smrg# so that you can set exit_status to non-zero if you want to indicate
3999d0ccd10Smrg# something went wrong during execution without actually bailing out at
4009d0ccd10Smrg# the point of failure.
4019d0ccd10Smrgexit_status=$EXIT_SUCCESS
402e8ead290Smrg
4039d0ccd10Smrg# Work around backward compatibility issue on IRIX 6.5. On IRIX 6.4+, sh
4049d0ccd10Smrg# is ksh but when the shell is invoked as "sh" and the current value of
4059d0ccd10Smrg# the _XPG environment variable is not equal to 1 (one), the special
4069d0ccd10Smrg# positional parameter $0, within a function call, is the name of the
4079d0ccd10Smrg# function.
4089d0ccd10Smrgprogpath=$0
4097914d74bSmrg
4109d0ccd10Smrg# The name of this program.
4119d0ccd10Smrgprogname=`$ECHO "$progpath" |$SED "$sed_basename"`
4127914d74bSmrg
4139d0ccd10Smrg# Make sure we have an absolute progpath for reexecution:
414e169010aSmrgcase $progpath in
415e169010aSmrg  [\\/]*|[A-Za-z]:\\*) ;;
416e169010aSmrg  *[\\/]*)
4179d0ccd10Smrg     progdir=`$ECHO "$progpath" |$SED "$sed_dirname"`
418e169010aSmrg     progdir=`cd "$progdir" && pwd`
4199d0ccd10Smrg     progpath=$progdir/$progname
420e169010aSmrg     ;;
421e169010aSmrg  *)
4229d0ccd10Smrg     _G_IFS=$IFS
423e6d5e4e0Smrg     IFS=${PATH_SEPARATOR-:}
424e169010aSmrg     for progdir in $PATH; do
4259d0ccd10Smrg       IFS=$_G_IFS
426e169010aSmrg       test -x "$progdir/$progname" && break
427e169010aSmrg     done
4289d0ccd10Smrg     IFS=$_G_IFS
429e169010aSmrg     test -n "$progdir" || progdir=`pwd`
4309d0ccd10Smrg     progpath=$progdir/$progname
431e169010aSmrg     ;;
432e169010aSmrgesac
4337914d74bSmrg
434e169010aSmrg
4359d0ccd10Smrg## ----------------- ##
4369d0ccd10Smrg## Standard options. ##
4379d0ccd10Smrg## ----------------- ##
438c63293b5Smrg
4399d0ccd10Smrg# The following options affect the operation of the functions defined
4409d0ccd10Smrg# below, and should be set appropriately depending on run-time para-
4419d0ccd10Smrg# meters passed on the command line.
442e169010aSmrg
443e169010aSmrgopt_dry_run=false
444e169010aSmrgopt_quiet=false
445e169010aSmrgopt_verbose=false
446e169010aSmrg
4479d0ccd10Smrg# Categories 'all' and 'none' are always available.  Append any others
4489d0ccd10Smrg# you will pass as the first argument to func_warning from your own
4499d0ccd10Smrg# code.
4509d0ccd10Smrgwarning_categories=
4517914d74bSmrg
4529d0ccd10Smrg# By default, display warnings according to 'opt_warning_types'.  Set
4539d0ccd10Smrg# 'warning_func'  to ':' to elide all warnings, or func_fatal_error to
4549d0ccd10Smrg# treat the next displayed warning as a fatal error.
4559d0ccd10Smrgwarning_func=func_warn_and_continue
4567914d74bSmrg
4579d0ccd10Smrg# Set to 'all' to display all warnings, 'none' to suppress all
4589d0ccd10Smrg# warnings, or a space delimited list of some subset of
4599d0ccd10Smrg# 'warning_categories' to display only the listed warnings.
4609d0ccd10Smrgopt_warning_types=all
4617914d74bSmrg
462e8ead290Smrg
4639d0ccd10Smrg## -------------------- ##
4649d0ccd10Smrg## Resource management. ##
4659d0ccd10Smrg## -------------------- ##
4667914d74bSmrg
4679d0ccd10Smrg# This section contains definitions for functions that each ensure a
4689d0ccd10Smrg# particular resource (a file, or a non-empty configuration variable for
4699d0ccd10Smrg# example) is available, and if appropriate to extract default values
4709d0ccd10Smrg# from pertinent package files. Call them using their associated
4719d0ccd10Smrg# 'require_*' variable to ensure that they are executed, at most, once.
4729d0ccd10Smrg#
4739d0ccd10Smrg# It's entirely deliberate that calling these functions can set
4749d0ccd10Smrg# variables that don't obey the namespace limitations obeyed by the rest
4759d0ccd10Smrg# of this file, in order that that they be as useful as possible to
4769d0ccd10Smrg# callers.
4777914d74bSmrg
4787914d74bSmrg
4799d0ccd10Smrg# require_term_colors
4809d0ccd10Smrg# -------------------
4819d0ccd10Smrg# Allow display of bold text on terminals that support it.
4829d0ccd10Smrgrequire_term_colors=func_require_term_colors
4839d0ccd10Smrgfunc_require_term_colors ()
484e169010aSmrg{
4859d0ccd10Smrg    $debug_cmd
4869d0ccd10Smrg
4879d0ccd10Smrg    test -t 1 && {
4889d0ccd10Smrg      # COLORTERM and USE_ANSI_COLORS environment variables take
4899d0ccd10Smrg      # precedence, because most terminfo databases neglect to describe
4909d0ccd10Smrg      # whether color sequences are supported.
4919d0ccd10Smrg      test -n "${COLORTERM+set}" && : ${USE_ANSI_COLORS="1"}
4929d0ccd10Smrg
4939d0ccd10Smrg      if test 1 = "$USE_ANSI_COLORS"; then
4949d0ccd10Smrg        # Standard ANSI escape sequences
4959d0ccd10Smrg        tc_reset='[0m'
4969d0ccd10Smrg        tc_bold='[1m';   tc_standout='[7m'
4979d0ccd10Smrg        tc_red='[31m';   tc_green='[32m'
4989d0ccd10Smrg        tc_blue='[34m';  tc_cyan='[36m'
4999d0ccd10Smrg      else
5009d0ccd10Smrg        # Otherwise trust the terminfo database after all.
5019d0ccd10Smrg        test -n "`tput sgr0 2>/dev/null`" && {
5029d0ccd10Smrg          tc_reset=`tput sgr0`
5039d0ccd10Smrg          test -n "`tput bold 2>/dev/null`" && tc_bold=`tput bold`
5049d0ccd10Smrg          tc_standout=$tc_bold
5059d0ccd10Smrg          test -n "`tput smso 2>/dev/null`" && tc_standout=`tput smso`
5069d0ccd10Smrg          test -n "`tput setaf 1 2>/dev/null`" && tc_red=`tput setaf 1`
5079d0ccd10Smrg          test -n "`tput setaf 2 2>/dev/null`" && tc_green=`tput setaf 2`
5089d0ccd10Smrg          test -n "`tput setaf 4 2>/dev/null`" && tc_blue=`tput setaf 4`
5099d0ccd10Smrg          test -n "`tput setaf 5 2>/dev/null`" && tc_cyan=`tput setaf 5`
5109d0ccd10Smrg        }
5119d0ccd10Smrg      fi
5129d0ccd10Smrg    }
5137914d74bSmrg
5149d0ccd10Smrg    require_term_colors=:
515e169010aSmrg}
5167914d74bSmrg
5177914d74bSmrg
5189d0ccd10Smrg## ----------------- ##
5199d0ccd10Smrg## Function library. ##
5209d0ccd10Smrg## ----------------- ##
5219d0ccd10Smrg
5229d0ccd10Smrg# This section contains a variety of useful functions to call in your
5239d0ccd10Smrg# scripts. Take note of the portable wrappers for features provided by
5249d0ccd10Smrg# some modern shells, which will fall back to slower equivalents on
5259d0ccd10Smrg# less featureful shells.
5269d0ccd10Smrg
5279d0ccd10Smrg
5289d0ccd10Smrg# func_append VAR VALUE
5299d0ccd10Smrg# ---------------------
5309d0ccd10Smrg# Append VALUE onto the existing contents of VAR.
5319d0ccd10Smrg
5329d0ccd10Smrg  # We should try to minimise forks, especially on Windows where they are
5339d0ccd10Smrg  # unreasonably slow, so skip the feature probes when bash or zsh are
5349d0ccd10Smrg  # being used:
5359d0ccd10Smrg  if test set = "${BASH_VERSION+set}${ZSH_VERSION+set}"; then
5369d0ccd10Smrg    : ${_G_HAVE_ARITH_OP="yes"}
5379d0ccd10Smrg    : ${_G_HAVE_XSI_OPS="yes"}
5389d0ccd10Smrg    # The += operator was introduced in bash 3.1
5399d0ccd10Smrg    case $BASH_VERSION in
5409d0ccd10Smrg      [12].* | 3.0 | 3.0*) ;;
5419d0ccd10Smrg      *)
5429d0ccd10Smrg        : ${_G_HAVE_PLUSEQ_OP="yes"}
5439d0ccd10Smrg        ;;
5449d0ccd10Smrg    esac
5459d0ccd10Smrg  fi
5469d0ccd10Smrg
5479d0ccd10Smrg  # _G_HAVE_PLUSEQ_OP
5489d0ccd10Smrg  # Can be empty, in which case the shell is probed, "yes" if += is
5499d0ccd10Smrg  # useable or anything else if it does not work.
5509d0ccd10Smrg  test -z "$_G_HAVE_PLUSEQ_OP" \
5519d0ccd10Smrg    && (eval 'x=a; x+=" b"; test "a b" = "$x"') 2>/dev/null \
5529d0ccd10Smrg    && _G_HAVE_PLUSEQ_OP=yes
5539d0ccd10Smrg
5549d0ccd10Smrgif test yes = "$_G_HAVE_PLUSEQ_OP"
5559d0ccd10Smrgthen
5569d0ccd10Smrg  # This is an XSI compatible shell, allowing a faster implementation...
5579d0ccd10Smrg  eval 'func_append ()
5589d0ccd10Smrg  {
5599d0ccd10Smrg    $debug_cmd
5609d0ccd10Smrg
5619d0ccd10Smrg    eval "$1+=\$2"
5629d0ccd10Smrg  }'
5639d0ccd10Smrgelse
5649d0ccd10Smrg  # ...otherwise fall back to using expr, which is often a shell builtin.
5659d0ccd10Smrg  func_append ()
5669d0ccd10Smrg  {
5679d0ccd10Smrg    $debug_cmd
5689d0ccd10Smrg
5699d0ccd10Smrg    eval "$1=\$$1\$2"
5709d0ccd10Smrg  }
5719d0ccd10Smrgfi
5729d0ccd10Smrg
5739d0ccd10Smrg
5749d0ccd10Smrg# func_append_quoted VAR VALUE
5759d0ccd10Smrg# ----------------------------
5769d0ccd10Smrg# Quote VALUE and append to the end of shell variable VAR, separated
5779d0ccd10Smrg# by a space.
5789d0ccd10Smrgif test yes = "$_G_HAVE_PLUSEQ_OP"; then
5799d0ccd10Smrg  eval 'func_append_quoted ()
5809d0ccd10Smrg  {
5819d0ccd10Smrg    $debug_cmd
5829d0ccd10Smrg
5839d0ccd10Smrg    func_quote_for_eval "$2"
5849d0ccd10Smrg    eval "$1+=\\ \$func_quote_for_eval_result"
5859d0ccd10Smrg  }'
5869d0ccd10Smrgelse
5879d0ccd10Smrg  func_append_quoted ()
5889d0ccd10Smrg  {
5899d0ccd10Smrg    $debug_cmd
5909d0ccd10Smrg
5919d0ccd10Smrg    func_quote_for_eval "$2"
5929d0ccd10Smrg    eval "$1=\$$1\\ \$func_quote_for_eval_result"
5939d0ccd10Smrg  }
5949d0ccd10Smrgfi
5959d0ccd10Smrg
5969d0ccd10Smrg
5979d0ccd10Smrg# func_append_uniq VAR VALUE
5989d0ccd10Smrg# --------------------------
5999d0ccd10Smrg# Append unique VALUE onto the existing contents of VAR, assuming
6009d0ccd10Smrg# entries are delimited by the first character of VALUE.  For example:
6019d0ccd10Smrg#
6029d0ccd10Smrg#   func_append_uniq options " --another-option option-argument"
6039d0ccd10Smrg#
6049d0ccd10Smrg# will only append to $options if " --another-option option-argument "
6059d0ccd10Smrg# is not already present somewhere in $options already (note spaces at
6069d0ccd10Smrg# each end implied by leading space in second argument).
6079d0ccd10Smrgfunc_append_uniq ()
6089d0ccd10Smrg{
6099d0ccd10Smrg    $debug_cmd
6109d0ccd10Smrg
6119d0ccd10Smrg    eval _G_current_value='`$ECHO $'$1'`'
6129d0ccd10Smrg    _G_delim=`expr "$2" : '\(.\)'`
6139d0ccd10Smrg
6149d0ccd10Smrg    case $_G_delim$_G_current_value$_G_delim in
6159d0ccd10Smrg      *"$2$_G_delim"*) ;;
6169d0ccd10Smrg      *) func_append "$@" ;;
6179d0ccd10Smrg    esac
6189d0ccd10Smrg}
6199d0ccd10Smrg
6209d0ccd10Smrg
6219d0ccd10Smrg# func_arith TERM...
6229d0ccd10Smrg# ------------------
6239d0ccd10Smrg# Set func_arith_result to the result of evaluating TERMs.
6249d0ccd10Smrg  test -z "$_G_HAVE_ARITH_OP" \
6259d0ccd10Smrg    && (eval 'test 2 = $(( 1 + 1 ))') 2>/dev/null \
6269d0ccd10Smrg    && _G_HAVE_ARITH_OP=yes
6279d0ccd10Smrg
6289d0ccd10Smrgif test yes = "$_G_HAVE_ARITH_OP"; then
6299d0ccd10Smrg  eval 'func_arith ()
6309d0ccd10Smrg  {
6319d0ccd10Smrg    $debug_cmd
6329d0ccd10Smrg
6339d0ccd10Smrg    func_arith_result=$(( $* ))
6349d0ccd10Smrg  }'
6359d0ccd10Smrgelse
6369d0ccd10Smrg  func_arith ()
6379d0ccd10Smrg  {
6389d0ccd10Smrg    $debug_cmd
6399d0ccd10Smrg
6409d0ccd10Smrg    func_arith_result=`expr "$@"`
6419d0ccd10Smrg  }
6429d0ccd10Smrgfi
6439d0ccd10Smrg
6449d0ccd10Smrg
6459d0ccd10Smrg# func_basename FILE
6469d0ccd10Smrg# ------------------
6479d0ccd10Smrg# Set func_basename_result to FILE with everything up to and including
6489d0ccd10Smrg# the last / stripped.
6499d0ccd10Smrgif test yes = "$_G_HAVE_XSI_OPS"; then
6509d0ccd10Smrg  # If this shell supports suffix pattern removal, then use it to avoid
6519d0ccd10Smrg  # forking. Hide the definitions single quotes in case the shell chokes
6529d0ccd10Smrg  # on unsupported syntax...
6539d0ccd10Smrg  _b='func_basename_result=${1##*/}'
6549d0ccd10Smrg  _d='case $1 in
6559d0ccd10Smrg        */*) func_dirname_result=${1%/*}$2 ;;
6569d0ccd10Smrg        *  ) func_dirname_result=$3        ;;
6579d0ccd10Smrg      esac'
6589d0ccd10Smrg
6599d0ccd10Smrgelse
6609d0ccd10Smrg  # ...otherwise fall back to using sed.
6619d0ccd10Smrg  _b='func_basename_result=`$ECHO "$1" |$SED "$sed_basename"`'
6629d0ccd10Smrg  _d='func_dirname_result=`$ECHO "$1"  |$SED "$sed_dirname"`
6639d0ccd10Smrg      if test "X$func_dirname_result" = "X$1"; then
6649d0ccd10Smrg        func_dirname_result=$3
6659d0ccd10Smrg      else
6669d0ccd10Smrg        func_append func_dirname_result "$2"
6679d0ccd10Smrg      fi'
6689d0ccd10Smrgfi
6699d0ccd10Smrg
6709d0ccd10Smrgeval 'func_basename ()
6719d0ccd10Smrg{
6729d0ccd10Smrg    $debug_cmd
6739d0ccd10Smrg
6749d0ccd10Smrg    '"$_b"'
6759d0ccd10Smrg}'
6769d0ccd10Smrg
6779d0ccd10Smrg
6789d0ccd10Smrg# func_dirname FILE APPEND NONDIR_REPLACEMENT
6799d0ccd10Smrg# -------------------------------------------
6809d0ccd10Smrg# Compute the dirname of FILE.  If nonempty, add APPEND to the result,
6819d0ccd10Smrg# otherwise set result to NONDIR_REPLACEMENT.
6829d0ccd10Smrgeval 'func_dirname ()
6839d0ccd10Smrg{
6849d0ccd10Smrg    $debug_cmd
6859d0ccd10Smrg
6869d0ccd10Smrg    '"$_d"'
6879d0ccd10Smrg}'
6889d0ccd10Smrg
6899d0ccd10Smrg
6909d0ccd10Smrg# func_dirname_and_basename FILE APPEND NONDIR_REPLACEMENT
6919d0ccd10Smrg# --------------------------------------------------------
6929d0ccd10Smrg# Perform func_basename and func_dirname in a single function
6939d0ccd10Smrg# call:
6949d0ccd10Smrg#   dirname:  Compute the dirname of FILE.  If nonempty,
6959d0ccd10Smrg#             add APPEND to the result, otherwise set result
6969d0ccd10Smrg#             to NONDIR_REPLACEMENT.
6979d0ccd10Smrg#             value returned in "$func_dirname_result"
6989d0ccd10Smrg#   basename: Compute filename of FILE.
6999d0ccd10Smrg#             value retuned in "$func_basename_result"
7009d0ccd10Smrg# For efficiency, we do not delegate to the functions above but instead
7019d0ccd10Smrg# duplicate the functionality here.
7029d0ccd10Smrgeval 'func_dirname_and_basename ()
7039d0ccd10Smrg{
7049d0ccd10Smrg    $debug_cmd
7059d0ccd10Smrg
7069d0ccd10Smrg    '"$_b"'
7079d0ccd10Smrg    '"$_d"'
7089d0ccd10Smrg}'
7099d0ccd10Smrg
7109d0ccd10Smrg
7119d0ccd10Smrg# func_echo ARG...
7129d0ccd10Smrg# ----------------
7139d0ccd10Smrg# Echo program name prefixed message.
7149d0ccd10Smrgfunc_echo ()
7159d0ccd10Smrg{
7169d0ccd10Smrg    $debug_cmd
7179d0ccd10Smrg
7189d0ccd10Smrg    _G_message=$*
7199d0ccd10Smrg
7209d0ccd10Smrg    func_echo_IFS=$IFS
7219d0ccd10Smrg    IFS=$nl
7229d0ccd10Smrg    for _G_line in $_G_message; do
7239d0ccd10Smrg      IFS=$func_echo_IFS
7249d0ccd10Smrg      $ECHO "$progname: $_G_line"
7259d0ccd10Smrg    done
7269d0ccd10Smrg    IFS=$func_echo_IFS
7279d0ccd10Smrg}
7289d0ccd10Smrg
7299d0ccd10Smrg
7309d0ccd10Smrg# func_echo_all ARG...
7319d0ccd10Smrg# --------------------
7329d0ccd10Smrg# Invoke $ECHO with all args, space-separated.
7339d0ccd10Smrgfunc_echo_all ()
7349d0ccd10Smrg{
7359d0ccd10Smrg    $ECHO "$*"
7369d0ccd10Smrg}
7379d0ccd10Smrg
7389d0ccd10Smrg
7399d0ccd10Smrg# func_echo_infix_1 INFIX ARG...
7409d0ccd10Smrg# ------------------------------
7419d0ccd10Smrg# Echo program name, followed by INFIX on the first line, with any
7429d0ccd10Smrg# additional lines not showing INFIX.
7439d0ccd10Smrgfunc_echo_infix_1 ()
7449d0ccd10Smrg{
7459d0ccd10Smrg    $debug_cmd
7469d0ccd10Smrg
7479d0ccd10Smrg    $require_term_colors
7489d0ccd10Smrg
7499d0ccd10Smrg    _G_infix=$1; shift
7509d0ccd10Smrg    _G_indent=$_G_infix
7519d0ccd10Smrg    _G_prefix="$progname: $_G_infix: "
7529d0ccd10Smrg    _G_message=$*
7539d0ccd10Smrg
7549d0ccd10Smrg    # Strip color escape sequences before counting printable length
7559d0ccd10Smrg    for _G_tc in "$tc_reset" "$tc_bold" "$tc_standout" "$tc_red" "$tc_green" "$tc_blue" "$tc_cyan"
7569d0ccd10Smrg    do
7579d0ccd10Smrg      test -n "$_G_tc" && {
7589d0ccd10Smrg        _G_esc_tc=`$ECHO "$_G_tc" | $SED "$sed_make_literal_regex"`
7599d0ccd10Smrg        _G_indent=`$ECHO "$_G_indent" | $SED "s|$_G_esc_tc||g"`
7609d0ccd10Smrg      }
7619d0ccd10Smrg    done
7629d0ccd10Smrg    _G_indent="$progname: "`echo "$_G_indent" | $SED 's|.| |g'`"  " ## exclude from sc_prohibit_nested_quotes
7639d0ccd10Smrg
7649d0ccd10Smrg    func_echo_infix_1_IFS=$IFS
7659d0ccd10Smrg    IFS=$nl
7669d0ccd10Smrg    for _G_line in $_G_message; do
7679d0ccd10Smrg      IFS=$func_echo_infix_1_IFS
7689d0ccd10Smrg      $ECHO "$_G_prefix$tc_bold$_G_line$tc_reset" >&2
7699d0ccd10Smrg      _G_prefix=$_G_indent
7709d0ccd10Smrg    done
7719d0ccd10Smrg    IFS=$func_echo_infix_1_IFS
7729d0ccd10Smrg}
7739d0ccd10Smrg
7749d0ccd10Smrg
7759d0ccd10Smrg# func_error ARG...
7769d0ccd10Smrg# -----------------
7779d0ccd10Smrg# Echo program name prefixed message to standard error.
7789d0ccd10Smrgfunc_error ()
7799d0ccd10Smrg{
7809d0ccd10Smrg    $debug_cmd
7819d0ccd10Smrg
7829d0ccd10Smrg    $require_term_colors
7839d0ccd10Smrg
7849d0ccd10Smrg    func_echo_infix_1 "  $tc_standout${tc_red}error$tc_reset" "$*" >&2
7859d0ccd10Smrg}
7869d0ccd10Smrg
7879d0ccd10Smrg
7889d0ccd10Smrg# func_fatal_error ARG...
7899d0ccd10Smrg# -----------------------
7909d0ccd10Smrg# Echo program name prefixed message to standard error, and exit.
7919d0ccd10Smrgfunc_fatal_error ()
7929d0ccd10Smrg{
7939d0ccd10Smrg    $debug_cmd
7949d0ccd10Smrg
7959d0ccd10Smrg    func_error "$*"
7969d0ccd10Smrg    exit $EXIT_FAILURE
7979d0ccd10Smrg}
7989d0ccd10Smrg
7999d0ccd10Smrg
8009d0ccd10Smrg# func_grep EXPRESSION FILENAME
8019d0ccd10Smrg# -----------------------------
802e169010aSmrg# Check whether EXPRESSION matches any line of FILENAME, without output.
803e169010aSmrgfunc_grep ()
804e169010aSmrg{
8059d0ccd10Smrg    $debug_cmd
8069d0ccd10Smrg
807e169010aSmrg    $GREP "$1" "$2" >/dev/null 2>&1
808e169010aSmrg}
809e169010aSmrg
810e169010aSmrg
8119d0ccd10Smrg# func_len STRING
8129d0ccd10Smrg# ---------------
8139d0ccd10Smrg# Set func_len_result to the length of STRING. STRING may not
8149d0ccd10Smrg# start with a hyphen.
8159d0ccd10Smrg  test -z "$_G_HAVE_XSI_OPS" \
8169d0ccd10Smrg    && (eval 'x=a/b/c;
8179d0ccd10Smrg      test 5aa/bb/cc = "${#x}${x%%/*}${x%/*}${x#*/}${x##*/}"') 2>/dev/null \
8189d0ccd10Smrg    && _G_HAVE_XSI_OPS=yes
8199d0ccd10Smrg
8209d0ccd10Smrgif test yes = "$_G_HAVE_XSI_OPS"; then
8219d0ccd10Smrg  eval 'func_len ()
8229d0ccd10Smrg  {
8239d0ccd10Smrg    $debug_cmd
8249d0ccd10Smrg
8259d0ccd10Smrg    func_len_result=${#1}
8269d0ccd10Smrg  }'
8279d0ccd10Smrgelse
8289d0ccd10Smrg  func_len ()
8299d0ccd10Smrg  {
8309d0ccd10Smrg    $debug_cmd
8319d0ccd10Smrg
8329d0ccd10Smrg    func_len_result=`expr "$1" : ".*" 2>/dev/null || echo $max_cmd_len`
8339d0ccd10Smrg  }
8349d0ccd10Smrgfi
8359d0ccd10Smrg
8369d0ccd10Smrg
8379d0ccd10Smrg# func_mkdir_p DIRECTORY-PATH
8389d0ccd10Smrg# ---------------------------
839e169010aSmrg# Make sure the entire path to DIRECTORY-PATH is available.
840e169010aSmrgfunc_mkdir_p ()
841e169010aSmrg{
8429d0ccd10Smrg    $debug_cmd
8439d0ccd10Smrg
8449d0ccd10Smrg    _G_directory_path=$1
8459d0ccd10Smrg    _G_dir_list=
846e169010aSmrg
8479d0ccd10Smrg    if test -n "$_G_directory_path" && test : != "$opt_dry_run"; then
848e169010aSmrg
8499d0ccd10Smrg      # Protect directory names starting with '-'
8509d0ccd10Smrg      case $_G_directory_path in
8519d0ccd10Smrg        -*) _G_directory_path=./$_G_directory_path ;;
852e169010aSmrg      esac
853e169010aSmrg
854e169010aSmrg      # While some portion of DIR does not yet exist...
8559d0ccd10Smrg      while test ! -d "$_G_directory_path"; do
856e169010aSmrg        # ...make a list in topmost first order.  Use a colon delimited
857e169010aSmrg	# list incase some portion of path contains whitespace.
8589d0ccd10Smrg        _G_dir_list=$_G_directory_path:$_G_dir_list
859e169010aSmrg
860e169010aSmrg        # If the last portion added has no slash in it, the list is done
8619d0ccd10Smrg        case $_G_directory_path in */*) ;; *) break ;; esac
862e169010aSmrg
863e169010aSmrg        # ...otherwise throw away the child directory and loop
8649d0ccd10Smrg        _G_directory_path=`$ECHO "$_G_directory_path" | $SED -e "$sed_dirname"`
865e169010aSmrg      done
8669d0ccd10Smrg      _G_dir_list=`$ECHO "$_G_dir_list" | $SED 's|:*$||'`
867e169010aSmrg
8689d0ccd10Smrg      func_mkdir_p_IFS=$IFS; IFS=:
8699d0ccd10Smrg      for _G_dir in $_G_dir_list; do
8709d0ccd10Smrg	IFS=$func_mkdir_p_IFS
8719d0ccd10Smrg        # mkdir can fail with a 'File exist' error if two processes
872e169010aSmrg        # try to create one of the directories concurrently.  Don't
873e169010aSmrg        # stop in that case!
8749d0ccd10Smrg        $MKDIR "$_G_dir" 2>/dev/null || :
875e169010aSmrg      done
8769d0ccd10Smrg      IFS=$func_mkdir_p_IFS
877e169010aSmrg
878e169010aSmrg      # Bail out if we (or some other process) failed to create a directory.
8799d0ccd10Smrg      test -d "$_G_directory_path" || \
8809d0ccd10Smrg        func_fatal_error "Failed to create '$1'"
881e169010aSmrg    fi
882e169010aSmrg}
8837914d74bSmrg
8847914d74bSmrg
8859d0ccd10Smrg# func_mktempdir [BASENAME]
8869d0ccd10Smrg# -------------------------
8877914d74bSmrg# Make a temporary directory that won't clash with other running
8887914d74bSmrg# libtool processes, and avoids race conditions if possible.  If
8899d0ccd10Smrg# given, BASENAME is the basename for that directory.
8907914d74bSmrgfunc_mktempdir ()
8917914d74bSmrg{
8929d0ccd10Smrg    $debug_cmd
8939d0ccd10Smrg
8949d0ccd10Smrg    _G_template=${TMPDIR-/tmp}/${1-$progname}
8957914d74bSmrg
8969d0ccd10Smrg    if test : = "$opt_dry_run"; then
8977914d74bSmrg      # Return a directory name, but don't create it in dry-run mode
8989d0ccd10Smrg      _G_tmpdir=$_G_template-$$
8997914d74bSmrg    else
9007914d74bSmrg
9017914d74bSmrg      # If mktemp works, use that first and foremost
9029d0ccd10Smrg      _G_tmpdir=`mktemp -d "$_G_template-XXXXXXXX" 2>/dev/null`
9037914d74bSmrg
9049d0ccd10Smrg      if test ! -d "$_G_tmpdir"; then
905e169010aSmrg        # Failing that, at least try and use $RANDOM to avoid a race
9069d0ccd10Smrg        _G_tmpdir=$_G_template-${RANDOM-0}$$
9077914d74bSmrg
9089d0ccd10Smrg        func_mktempdir_umask=`umask`
909e169010aSmrg        umask 0077
9109d0ccd10Smrg        $MKDIR "$_G_tmpdir"
9119d0ccd10Smrg        umask $func_mktempdir_umask
9127914d74bSmrg      fi
9137914d74bSmrg
9147914d74bSmrg      # If we're not in dry-run mode, bomb out on failure
9159d0ccd10Smrg      test -d "$_G_tmpdir" || \
9169d0ccd10Smrg        func_fatal_error "cannot create temporary directory '$_G_tmpdir'"
9177914d74bSmrg    fi
9187914d74bSmrg
9199d0ccd10Smrg    $ECHO "$_G_tmpdir"
9207914d74bSmrg}
9217914d74bSmrg
9227914d74bSmrg
9239d0ccd10Smrg# func_normal_abspath PATH
9249d0ccd10Smrg# ------------------------
9259d0ccd10Smrg# Remove doubled-up and trailing slashes, "." path components,
9269d0ccd10Smrg# and cancel out any ".." path components in PATH after making
9279d0ccd10Smrg# it an absolute path.
9289d0ccd10Smrgfunc_normal_abspath ()
9297914d74bSmrg{
9309d0ccd10Smrg    $debug_cmd
931e169010aSmrg
9329d0ccd10Smrg    # These SED scripts presuppose an absolute path with a trailing slash.
9339d0ccd10Smrg    _G_pathcar='s|^/\([^/]*\).*$|\1|'
9349d0ccd10Smrg    _G_pathcdr='s|^/[^/]*||'
9359d0ccd10Smrg    _G_removedotparts=':dotsl
9369d0ccd10Smrg		s|/\./|/|g
9379d0ccd10Smrg		t dotsl
9389d0ccd10Smrg		s|/\.$|/|'
9399d0ccd10Smrg    _G_collapseslashes='s|/\{1,\}|/|g'
9409d0ccd10Smrg    _G_finalslash='s|/*$|/|'
9419d0ccd10Smrg
9429d0ccd10Smrg    # Start from root dir and reassemble the path.
9439d0ccd10Smrg    func_normal_abspath_result=
9449d0ccd10Smrg    func_normal_abspath_tpath=$1
9459d0ccd10Smrg    func_normal_abspath_altnamespace=
9469d0ccd10Smrg    case $func_normal_abspath_tpath in
9479d0ccd10Smrg      "")
9489d0ccd10Smrg        # Empty path, that just means $cwd.
9499d0ccd10Smrg        func_stripname '' '/' "`pwd`"
9509d0ccd10Smrg        func_normal_abspath_result=$func_stripname_result
9519d0ccd10Smrg        return
9529d0ccd10Smrg        ;;
9539d0ccd10Smrg      # The next three entries are used to spot a run of precisely
9549d0ccd10Smrg      # two leading slashes without using negated character classes;
9559d0ccd10Smrg      # we take advantage of case's first-match behaviour.
9569d0ccd10Smrg      ///*)
9579d0ccd10Smrg        # Unusual form of absolute path, do nothing.
9589d0ccd10Smrg        ;;
9599d0ccd10Smrg      //*)
9609d0ccd10Smrg        # Not necessarily an ordinary path; POSIX reserves leading '//'
9619d0ccd10Smrg        # and for example Cygwin uses it to access remote file shares
9629d0ccd10Smrg        # over CIFS/SMB, so we conserve a leading double slash if found.
9639d0ccd10Smrg        func_normal_abspath_altnamespace=/
9649d0ccd10Smrg        ;;
9659d0ccd10Smrg      /*)
9669d0ccd10Smrg        # Absolute path, do nothing.
967e169010aSmrg        ;;
968e169010aSmrg      *)
9699d0ccd10Smrg        # Relative path, prepend $cwd.
9709d0ccd10Smrg        func_normal_abspath_tpath=`pwd`/$func_normal_abspath_tpath
9719d0ccd10Smrg        ;;
9727914d74bSmrg    esac
9739d0ccd10Smrg
9749d0ccd10Smrg    # Cancel out all the simple stuff to save iterations.  We also want
9759d0ccd10Smrg    # the path to end with a slash for ease of parsing, so make sure
9769d0ccd10Smrg    # there is one (and only one) here.
9779d0ccd10Smrg    func_normal_abspath_tpath=`$ECHO "$func_normal_abspath_tpath" | $SED \
9789d0ccd10Smrg          -e "$_G_removedotparts" -e "$_G_collapseslashes" -e "$_G_finalslash"`
9799d0ccd10Smrg    while :; do
9809d0ccd10Smrg      # Processed it all yet?
9819d0ccd10Smrg      if test / = "$func_normal_abspath_tpath"; then
9829d0ccd10Smrg        # If we ascended to the root using ".." the result may be empty now.
9839d0ccd10Smrg        if test -z "$func_normal_abspath_result"; then
9849d0ccd10Smrg          func_normal_abspath_result=/
9859d0ccd10Smrg        fi
9869d0ccd10Smrg        break
9879d0ccd10Smrg      fi
9889d0ccd10Smrg      func_normal_abspath_tcomponent=`$ECHO "$func_normal_abspath_tpath" | $SED \
9899d0ccd10Smrg          -e "$_G_pathcar"`
9909d0ccd10Smrg      func_normal_abspath_tpath=`$ECHO "$func_normal_abspath_tpath" | $SED \
9919d0ccd10Smrg          -e "$_G_pathcdr"`
9929d0ccd10Smrg      # Figure out what to do with it
9939d0ccd10Smrg      case $func_normal_abspath_tcomponent in
9949d0ccd10Smrg        "")
9959d0ccd10Smrg          # Trailing empty path component, ignore it.
9969d0ccd10Smrg          ;;
9979d0ccd10Smrg        ..)
9989d0ccd10Smrg          # Parent dir; strip last assembled component from result.
9999d0ccd10Smrg          func_dirname "$func_normal_abspath_result"
10009d0ccd10Smrg          func_normal_abspath_result=$func_dirname_result
10019d0ccd10Smrg          ;;
10029d0ccd10Smrg        *)
10039d0ccd10Smrg          # Actual path component, append it.
10049d0ccd10Smrg          func_append func_normal_abspath_result "/$func_normal_abspath_tcomponent"
10059d0ccd10Smrg          ;;
10069d0ccd10Smrg      esac
10079d0ccd10Smrg    done
10089d0ccd10Smrg    # Restore leading double-slash if one was found on entry.
10099d0ccd10Smrg    func_normal_abspath_result=$func_normal_abspath_altnamespace$func_normal_abspath_result
10109d0ccd10Smrg}
10119d0ccd10Smrg
10129d0ccd10Smrg
10139d0ccd10Smrg# func_notquiet ARG...
10149d0ccd10Smrg# --------------------
10159d0ccd10Smrg# Echo program name prefixed message only when not in quiet mode.
10169d0ccd10Smrgfunc_notquiet ()
10179d0ccd10Smrg{
10189d0ccd10Smrg    $debug_cmd
10199d0ccd10Smrg
10209d0ccd10Smrg    $opt_quiet || func_echo ${1+"$@"}
10219d0ccd10Smrg
10229d0ccd10Smrg    # A bug in bash halts the script if the last line of a function
10239d0ccd10Smrg    # fails when set -e is in force, so we need another command to
10249d0ccd10Smrg    # work around that:
10259d0ccd10Smrg    :
10269d0ccd10Smrg}
10279d0ccd10Smrg
10289d0ccd10Smrg
10299d0ccd10Smrg# func_relative_path SRCDIR DSTDIR
10309d0ccd10Smrg# --------------------------------
10319d0ccd10Smrg# Set func_relative_path_result to the relative path from SRCDIR to DSTDIR.
10329d0ccd10Smrgfunc_relative_path ()
10339d0ccd10Smrg{
10349d0ccd10Smrg    $debug_cmd
10359d0ccd10Smrg
10369d0ccd10Smrg    func_relative_path_result=
10379d0ccd10Smrg    func_normal_abspath "$1"
10389d0ccd10Smrg    func_relative_path_tlibdir=$func_normal_abspath_result
10399d0ccd10Smrg    func_normal_abspath "$2"
10409d0ccd10Smrg    func_relative_path_tbindir=$func_normal_abspath_result
10419d0ccd10Smrg
10429d0ccd10Smrg    # Ascend the tree starting from libdir
10439d0ccd10Smrg    while :; do
10449d0ccd10Smrg      # check if we have found a prefix of bindir
10459d0ccd10Smrg      case $func_relative_path_tbindir in
10469d0ccd10Smrg        $func_relative_path_tlibdir)
10479d0ccd10Smrg          # found an exact match
10489d0ccd10Smrg          func_relative_path_tcancelled=
10499d0ccd10Smrg          break
10509d0ccd10Smrg          ;;
10519d0ccd10Smrg        $func_relative_path_tlibdir*)
10529d0ccd10Smrg          # found a matching prefix
10539d0ccd10Smrg          func_stripname "$func_relative_path_tlibdir" '' "$func_relative_path_tbindir"
10549d0ccd10Smrg          func_relative_path_tcancelled=$func_stripname_result
10559d0ccd10Smrg          if test -z "$func_relative_path_result"; then
10569d0ccd10Smrg            func_relative_path_result=.
10579d0ccd10Smrg          fi
10589d0ccd10Smrg          break
10599d0ccd10Smrg          ;;
10609d0ccd10Smrg        *)
10619d0ccd10Smrg          func_dirname $func_relative_path_tlibdir
10629d0ccd10Smrg          func_relative_path_tlibdir=$func_dirname_result
10639d0ccd10Smrg          if test -z "$func_relative_path_tlibdir"; then
10649d0ccd10Smrg            # Have to descend all the way to the root!
10659d0ccd10Smrg            func_relative_path_result=../$func_relative_path_result
10669d0ccd10Smrg            func_relative_path_tcancelled=$func_relative_path_tbindir
10679d0ccd10Smrg            break
10689d0ccd10Smrg          fi
10699d0ccd10Smrg          func_relative_path_result=../$func_relative_path_result
10709d0ccd10Smrg          ;;
10719d0ccd10Smrg      esac
10729d0ccd10Smrg    done
10739d0ccd10Smrg
10749d0ccd10Smrg    # Now calculate path; take care to avoid doubling-up slashes.
10759d0ccd10Smrg    func_stripname '' '/' "$func_relative_path_result"
10769d0ccd10Smrg    func_relative_path_result=$func_stripname_result
10779d0ccd10Smrg    func_stripname '/' '/' "$func_relative_path_tcancelled"
10789d0ccd10Smrg    if test -n "$func_stripname_result"; then
10799d0ccd10Smrg      func_append func_relative_path_result "/$func_stripname_result"
10809d0ccd10Smrg    fi
10819d0ccd10Smrg
10829d0ccd10Smrg    # Normalisation. If bindir is libdir, return '.' else relative path.
10839d0ccd10Smrg    if test -n "$func_relative_path_result"; then
10849d0ccd10Smrg      func_stripname './' '' "$func_relative_path_result"
10859d0ccd10Smrg      func_relative_path_result=$func_stripname_result
10869d0ccd10Smrg    fi
10879d0ccd10Smrg
10889d0ccd10Smrg    test -n "$func_relative_path_result" || func_relative_path_result=.
10899d0ccd10Smrg
10909d0ccd10Smrg    :
10917914d74bSmrg}
10927914d74bSmrg
10937914d74bSmrg
10949d0ccd10Smrg# func_quote_for_eval ARG...
10959d0ccd10Smrg# --------------------------
10969d0ccd10Smrg# Aesthetically quote ARGs to be evaled later.
10979d0ccd10Smrg# This function returns two values:
10989d0ccd10Smrg#   i) func_quote_for_eval_result
10999d0ccd10Smrg#      double-quoted, suitable for a subsequent eval
11009d0ccd10Smrg#  ii) func_quote_for_eval_unquoted_result
11019d0ccd10Smrg#      has all characters that are still active within double
11029d0ccd10Smrg#      quotes backslashified.
11039d0ccd10Smrgfunc_quote_for_eval ()
11049d0ccd10Smrg{
11059d0ccd10Smrg    $debug_cmd
11069d0ccd10Smrg
11079d0ccd10Smrg    func_quote_for_eval_unquoted_result=
11089d0ccd10Smrg    func_quote_for_eval_result=
11099d0ccd10Smrg    while test 0 -lt $#; do
11109d0ccd10Smrg      case $1 in
11119d0ccd10Smrg        *[\\\`\"\$]*)
11129d0ccd10Smrg	  _G_unquoted_arg=`printf '%s\n' "$1" |$SED "$sed_quote_subst"` ;;
11139d0ccd10Smrg        *)
11149d0ccd10Smrg          _G_unquoted_arg=$1 ;;
11159d0ccd10Smrg      esac
11169d0ccd10Smrg      if test -n "$func_quote_for_eval_unquoted_result"; then
11179d0ccd10Smrg	func_append func_quote_for_eval_unquoted_result " $_G_unquoted_arg"
11189d0ccd10Smrg      else
11199d0ccd10Smrg        func_append func_quote_for_eval_unquoted_result "$_G_unquoted_arg"
11209d0ccd10Smrg      fi
11219d0ccd10Smrg
11229d0ccd10Smrg      case $_G_unquoted_arg in
11239d0ccd10Smrg        # Double-quote args containing shell metacharacters to delay
11249d0ccd10Smrg        # word splitting, command substitution and variable expansion
11259d0ccd10Smrg        # for a subsequent eval.
11269d0ccd10Smrg        # Many Bourne shells cannot handle close brackets correctly
11279d0ccd10Smrg        # in scan sets, so we specify it separately.
11289d0ccd10Smrg        *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \	]*|*]*|"")
11299d0ccd10Smrg          _G_quoted_arg=\"$_G_unquoted_arg\"
11309d0ccd10Smrg          ;;
11319d0ccd10Smrg        *)
11329d0ccd10Smrg          _G_quoted_arg=$_G_unquoted_arg
11339d0ccd10Smrg	  ;;
11349d0ccd10Smrg      esac
11359d0ccd10Smrg
11369d0ccd10Smrg      if test -n "$func_quote_for_eval_result"; then
11379d0ccd10Smrg	func_append func_quote_for_eval_result " $_G_quoted_arg"
11389d0ccd10Smrg      else
11399d0ccd10Smrg        func_append func_quote_for_eval_result "$_G_quoted_arg"
11409d0ccd10Smrg      fi
11419d0ccd10Smrg      shift
11429d0ccd10Smrg    done
11439d0ccd10Smrg}
11449d0ccd10Smrg
11459d0ccd10Smrg
11469d0ccd10Smrg# func_quote_for_expand ARG
11479d0ccd10Smrg# -------------------------
1148e169010aSmrg# Aesthetically quote ARG to be evaled later; same as above,
1149e169010aSmrg# but do not quote variable references.
1150e169010aSmrgfunc_quote_for_expand ()
11517914d74bSmrg{
11529d0ccd10Smrg    $debug_cmd
11539d0ccd10Smrg
1154e169010aSmrg    case $1 in
1155e169010aSmrg      *[\\\`\"]*)
11569d0ccd10Smrg	_G_arg=`$ECHO "$1" | $SED \
11579d0ccd10Smrg	    -e "$sed_double_quote_subst" -e "$sed_double_backslash"` ;;
11587914d74bSmrg      *)
11599d0ccd10Smrg        _G_arg=$1 ;;
1160e169010aSmrg    esac
1161e169010aSmrg
11629d0ccd10Smrg    case $_G_arg in
1163e169010aSmrg      # Double-quote args containing shell metacharacters to delay
1164e169010aSmrg      # word splitting and command substitution for a subsequent eval.
1165e169010aSmrg      # Many Bourne shells cannot handle close brackets correctly
1166e169010aSmrg      # in scan sets, so we specify it separately.
1167e169010aSmrg      *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \	]*|*]*|"")
11689d0ccd10Smrg        _G_arg=\"$_G_arg\"
1169e169010aSmrg        ;;
1170e169010aSmrg    esac
1171e169010aSmrg
11729d0ccd10Smrg    func_quote_for_expand_result=$_G_arg
11739d0ccd10Smrg}
11749d0ccd10Smrg
11759d0ccd10Smrg
11769d0ccd10Smrg# func_stripname PREFIX SUFFIX NAME
11779d0ccd10Smrg# ---------------------------------
11789d0ccd10Smrg# strip PREFIX and SUFFIX from NAME, and store in func_stripname_result.
11799d0ccd10Smrg# PREFIX and SUFFIX must not contain globbing or regex special
11809d0ccd10Smrg# characters, hashes, percent signs, but SUFFIX may contain a leading
11819d0ccd10Smrg# dot (in which case that matches only a dot).
11829d0ccd10Smrgif test yes = "$_G_HAVE_XSI_OPS"; then
11839d0ccd10Smrg  eval 'func_stripname ()
11849d0ccd10Smrg  {
11859d0ccd10Smrg    $debug_cmd
11869d0ccd10Smrg
11879d0ccd10Smrg    # pdksh 5.2.14 does not do ${X%$Y} correctly if both X and Y are
11889d0ccd10Smrg    # positional parameters, so assign one to ordinary variable first.
11899d0ccd10Smrg    func_stripname_result=$3
11909d0ccd10Smrg    func_stripname_result=${func_stripname_result#"$1"}
11919d0ccd10Smrg    func_stripname_result=${func_stripname_result%"$2"}
11929d0ccd10Smrg  }'
11939d0ccd10Smrgelse
11949d0ccd10Smrg  func_stripname ()
11959d0ccd10Smrg  {
11969d0ccd10Smrg    $debug_cmd
11979d0ccd10Smrg
11989d0ccd10Smrg    case $2 in
11999d0ccd10Smrg      .*) func_stripname_result=`$ECHO "$3" | $SED -e "s%^$1%%" -e "s%\\\\$2\$%%"`;;
12009d0ccd10Smrg      *)  func_stripname_result=`$ECHO "$3" | $SED -e "s%^$1%%" -e "s%$2\$%%"`;;
12019d0ccd10Smrg    esac
12029d0ccd10Smrg  }
12039d0ccd10Smrgfi
12049d0ccd10Smrg
12059d0ccd10Smrg
12069d0ccd10Smrg# func_show_eval CMD [FAIL_EXP]
12079d0ccd10Smrg# -----------------------------
12089d0ccd10Smrg# Unless opt_quiet is true, then output CMD.  Then, if opt_dryrun is
12099d0ccd10Smrg# not true, evaluate CMD.  If the evaluation of CMD fails, and FAIL_EXP
12109d0ccd10Smrg# is given, then evaluate it.
12119d0ccd10Smrgfunc_show_eval ()
12129d0ccd10Smrg{
12139d0ccd10Smrg    $debug_cmd
12149d0ccd10Smrg
12159d0ccd10Smrg    _G_cmd=$1
12169d0ccd10Smrg    _G_fail_exp=${2-':'}
12179d0ccd10Smrg
12189d0ccd10Smrg    func_quote_for_expand "$_G_cmd"
12199d0ccd10Smrg    eval "func_notquiet $func_quote_for_expand_result"
12209d0ccd10Smrg
12219d0ccd10Smrg    $opt_dry_run || {
12229d0ccd10Smrg      eval "$_G_cmd"
12239d0ccd10Smrg      _G_status=$?
12249d0ccd10Smrg      if test 0 -ne "$_G_status"; then
12259d0ccd10Smrg	eval "(exit $_G_status); $_G_fail_exp"
12269d0ccd10Smrg      fi
12279d0ccd10Smrg    }
12289d0ccd10Smrg}
12299d0ccd10Smrg
12309d0ccd10Smrg
12319d0ccd10Smrg# func_show_eval_locale CMD [FAIL_EXP]
12329d0ccd10Smrg# ------------------------------------
12339d0ccd10Smrg# Unless opt_quiet is true, then output CMD.  Then, if opt_dryrun is
12349d0ccd10Smrg# not true, evaluate CMD.  If the evaluation of CMD fails, and FAIL_EXP
12359d0ccd10Smrg# is given, then evaluate it.  Use the saved locale for evaluation.
12369d0ccd10Smrgfunc_show_eval_locale ()
12379d0ccd10Smrg{
12389d0ccd10Smrg    $debug_cmd
12399d0ccd10Smrg
12409d0ccd10Smrg    _G_cmd=$1
12419d0ccd10Smrg    _G_fail_exp=${2-':'}
12429d0ccd10Smrg
12439d0ccd10Smrg    $opt_quiet || {
12449d0ccd10Smrg      func_quote_for_expand "$_G_cmd"
12459d0ccd10Smrg      eval "func_echo $func_quote_for_expand_result"
12469d0ccd10Smrg    }
12479d0ccd10Smrg
12489d0ccd10Smrg    $opt_dry_run || {
12499d0ccd10Smrg      eval "$_G_user_locale
12509d0ccd10Smrg	    $_G_cmd"
12519d0ccd10Smrg      _G_status=$?
12529d0ccd10Smrg      eval "$_G_safe_locale"
12539d0ccd10Smrg      if test 0 -ne "$_G_status"; then
12549d0ccd10Smrg	eval "(exit $_G_status); $_G_fail_exp"
12559d0ccd10Smrg      fi
12569d0ccd10Smrg    }
12579d0ccd10Smrg}
12589d0ccd10Smrg
12599d0ccd10Smrg
12609d0ccd10Smrg# func_tr_sh
12619d0ccd10Smrg# ----------
12629d0ccd10Smrg# Turn $1 into a string suitable for a shell variable name.
12639d0ccd10Smrg# Result is stored in $func_tr_sh_result.  All characters
12649d0ccd10Smrg# not in the set a-zA-Z0-9_ are replaced with '_'. Further,
12659d0ccd10Smrg# if $1 begins with a digit, a '_' is prepended as well.
12669d0ccd10Smrgfunc_tr_sh ()
12679d0ccd10Smrg{
12689d0ccd10Smrg    $debug_cmd
12699d0ccd10Smrg
12709d0ccd10Smrg    case $1 in
12719d0ccd10Smrg    [0-9]* | *[!a-zA-Z0-9_]*)
12729d0ccd10Smrg      func_tr_sh_result=`$ECHO "$1" | $SED -e 's/^\([0-9]\)/_\1/' -e 's/[^a-zA-Z0-9_]/_/g'`
12739d0ccd10Smrg      ;;
12749d0ccd10Smrg    * )
12759d0ccd10Smrg      func_tr_sh_result=$1
12769d0ccd10Smrg      ;;
12779d0ccd10Smrg    esac
12789d0ccd10Smrg}
12799d0ccd10Smrg
12809d0ccd10Smrg
12819d0ccd10Smrg# func_verbose ARG...
12829d0ccd10Smrg# -------------------
12839d0ccd10Smrg# Echo program name prefixed message in verbose mode only.
12849d0ccd10Smrgfunc_verbose ()
12859d0ccd10Smrg{
12869d0ccd10Smrg    $debug_cmd
12879d0ccd10Smrg
12889d0ccd10Smrg    $opt_verbose && func_echo "$*"
12899d0ccd10Smrg
12909d0ccd10Smrg    :
12919d0ccd10Smrg}
12929d0ccd10Smrg
12939d0ccd10Smrg
12949d0ccd10Smrg# func_warn_and_continue ARG...
12959d0ccd10Smrg# -----------------------------
12969d0ccd10Smrg# Echo program name prefixed warning message to standard error.
12979d0ccd10Smrgfunc_warn_and_continue ()
12989d0ccd10Smrg{
12999d0ccd10Smrg    $debug_cmd
13009d0ccd10Smrg
13019d0ccd10Smrg    $require_term_colors
13029d0ccd10Smrg
13039d0ccd10Smrg    func_echo_infix_1 "${tc_red}warning$tc_reset" "$*" >&2
13049d0ccd10Smrg}
13059d0ccd10Smrg
13069d0ccd10Smrg
13079d0ccd10Smrg# func_warning CATEGORY ARG...
13089d0ccd10Smrg# ----------------------------
13099d0ccd10Smrg# Echo program name prefixed warning message to standard error. Warning
13109d0ccd10Smrg# messages can be filtered according to CATEGORY, where this function
13119d0ccd10Smrg# elides messages where CATEGORY is not listed in the global variable
13129d0ccd10Smrg# 'opt_warning_types'.
13139d0ccd10Smrgfunc_warning ()
13149d0ccd10Smrg{
13159d0ccd10Smrg    $debug_cmd
13169d0ccd10Smrg
13179d0ccd10Smrg    # CATEGORY must be in the warning_categories list!
13189d0ccd10Smrg    case " $warning_categories " in
13199d0ccd10Smrg      *" $1 "*) ;;
13209d0ccd10Smrg      *) func_internal_error "invalid warning category '$1'" ;;
13219d0ccd10Smrg    esac
13229d0ccd10Smrg
13239d0ccd10Smrg    _G_category=$1
13249d0ccd10Smrg    shift
13259d0ccd10Smrg
13269d0ccd10Smrg    case " $opt_warning_types " in
13279d0ccd10Smrg      *" $_G_category "*) $warning_func ${1+"$@"} ;;
13289d0ccd10Smrg    esac
13297914d74bSmrg}
13307914d74bSmrg
13317914d74bSmrg
13329d0ccd10Smrg# func_sort_ver VER1 VER2
13339d0ccd10Smrg# -----------------------
13349d0ccd10Smrg# 'sort -V' is not generally available.
13359d0ccd10Smrg# Note this deviates from the version comparison in automake
13369d0ccd10Smrg# in that it treats 1.5 < 1.5.0, and treats 1.4.4a < 1.4-p3a
13379d0ccd10Smrg# but this should suffice as we won't be specifying old
13389d0ccd10Smrg# version formats or redundant trailing .0 in bootstrap.conf.
13399d0ccd10Smrg# If we did want full compatibility then we should probably
13409d0ccd10Smrg# use m4_version_compare from autoconf.
13419d0ccd10Smrgfunc_sort_ver ()
13429d0ccd10Smrg{
13439d0ccd10Smrg    $debug_cmd
13449d0ccd10Smrg
13459d0ccd10Smrg    printf '%s\n%s\n' "$1" "$2" \
13469d0ccd10Smrg      | 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
13479d0ccd10Smrg}
13489d0ccd10Smrg
13499d0ccd10Smrg# func_lt_ver PREV CURR
13509d0ccd10Smrg# ---------------------
13519d0ccd10Smrg# Return true if PREV and CURR are in the correct order according to
13529d0ccd10Smrg# func_sort_ver, otherwise false.  Use it like this:
13539d0ccd10Smrg#
13549d0ccd10Smrg#  func_lt_ver "$prev_ver" "$proposed_ver" || func_fatal_error "..."
13559d0ccd10Smrgfunc_lt_ver ()
13569d0ccd10Smrg{
13579d0ccd10Smrg    $debug_cmd
13589d0ccd10Smrg
13599d0ccd10Smrg    test "x$1" = x`func_sort_ver "$1" "$2" | $SED 1q`
13609d0ccd10Smrg}
13619d0ccd10Smrg
13629d0ccd10Smrg
13639d0ccd10Smrg# Local variables:
13649d0ccd10Smrg# mode: shell-script
13659d0ccd10Smrg# sh-indentation: 2
13669d0ccd10Smrg# eval: (add-hook 'before-save-hook 'time-stamp)
13679d0ccd10Smrg# time-stamp-pattern: "10/scriptversion=%:y-%02m-%02d.%02H; # UTC"
13689d0ccd10Smrg# time-stamp-time-zone: "UTC"
13699d0ccd10Smrg# End:
13709d0ccd10Smrg#! /bin/sh
13719d0ccd10Smrg
13729d0ccd10Smrg# Set a version string for this script.
13739d0ccd10Smrgscriptversion=2014-01-07.03; # UTC
13749d0ccd10Smrg
13759d0ccd10Smrg# A portable, pluggable option parser for Bourne shell.
13769d0ccd10Smrg# Written by Gary V. Vaughan, 2010
13779d0ccd10Smrg
13789d0ccd10Smrg# Copyright (C) 2010-2015 Free Software Foundation, Inc.
13799d0ccd10Smrg# This is free software; see the source for copying conditions.  There is NO
13809d0ccd10Smrg# warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
13819d0ccd10Smrg
13829d0ccd10Smrg# This program is free software: you can redistribute it and/or modify
13839d0ccd10Smrg# it under the terms of the GNU General Public License as published by
13849d0ccd10Smrg# the Free Software Foundation, either version 3 of the License, or
13859d0ccd10Smrg# (at your option) any later version.
13869d0ccd10Smrg
13879d0ccd10Smrg# This program is distributed in the hope that it will be useful,
13889d0ccd10Smrg# but WITHOUT ANY WARRANTY; without even the implied warranty of
13899d0ccd10Smrg# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
13909d0ccd10Smrg# GNU General Public License for more details.
13919d0ccd10Smrg
13929d0ccd10Smrg# You should have received a copy of the GNU General Public License
13939d0ccd10Smrg# along with this program.  If not, see <http://www.gnu.org/licenses/>.
13949d0ccd10Smrg
13959d0ccd10Smrg# Please report bugs or propose patches to gary@gnu.org.
13969d0ccd10Smrg
13979d0ccd10Smrg
13989d0ccd10Smrg## ------ ##
13999d0ccd10Smrg## Usage. ##
14009d0ccd10Smrg## ------ ##
14019d0ccd10Smrg
14029d0ccd10Smrg# This file is a library for parsing options in your shell scripts along
14039d0ccd10Smrg# with assorted other useful supporting features that you can make use
14049d0ccd10Smrg# of too.
14059d0ccd10Smrg#
14069d0ccd10Smrg# For the simplest scripts you might need only:
14079d0ccd10Smrg#
14089d0ccd10Smrg#   #!/bin/sh
14099d0ccd10Smrg#   . relative/path/to/funclib.sh
14109d0ccd10Smrg#   . relative/path/to/options-parser
14119d0ccd10Smrg#   scriptversion=1.0
14129d0ccd10Smrg#   func_options ${1+"$@"}
14139d0ccd10Smrg#   eval set dummy "$func_options_result"; shift
14149d0ccd10Smrg#   ...rest of your script...
14159d0ccd10Smrg#
14169d0ccd10Smrg# In order for the '--version' option to work, you will need to have a
14179d0ccd10Smrg# suitably formatted comment like the one at the top of this file
14189d0ccd10Smrg# starting with '# Written by ' and ending with '# warranty; '.
14199d0ccd10Smrg#
14209d0ccd10Smrg# For '-h' and '--help' to work, you will also need a one line
14219d0ccd10Smrg# description of your script's purpose in a comment directly above the
14229d0ccd10Smrg# '# Written by ' line, like the one at the top of this file.
14239d0ccd10Smrg#
14249d0ccd10Smrg# The default options also support '--debug', which will turn on shell
14259d0ccd10Smrg# execution tracing (see the comment above debug_cmd below for another
14269d0ccd10Smrg# use), and '--verbose' and the func_verbose function to allow your script
14279d0ccd10Smrg# to display verbose messages only when your user has specified
14289d0ccd10Smrg# '--verbose'.
14299d0ccd10Smrg#
14309d0ccd10Smrg# After sourcing this file, you can plug processing for additional
14319d0ccd10Smrg# options by amending the variables from the 'Configuration' section
14329d0ccd10Smrg# below, and following the instructions in the 'Option parsing'
14339d0ccd10Smrg# section further down.
14349d0ccd10Smrg
14359d0ccd10Smrg## -------------- ##
14369d0ccd10Smrg## Configuration. ##
14379d0ccd10Smrg## -------------- ##
14389d0ccd10Smrg
14399d0ccd10Smrg# You should override these variables in your script after sourcing this
14409d0ccd10Smrg# file so that they reflect the customisations you have added to the
14419d0ccd10Smrg# option parser.
14429d0ccd10Smrg
14439d0ccd10Smrg# The usage line for option parsing errors and the start of '-h' and
14449d0ccd10Smrg# '--help' output messages. You can embed shell variables for delayed
14459d0ccd10Smrg# expansion at the time the message is displayed, but you will need to
14469d0ccd10Smrg# quote other shell meta-characters carefully to prevent them being
14479d0ccd10Smrg# expanded when the contents are evaled.
14489d0ccd10Smrgusage='$progpath [OPTION]...'
14499d0ccd10Smrg
14509d0ccd10Smrg# Short help message in response to '-h' and '--help'.  Add to this or
14519d0ccd10Smrg# override it after sourcing this library to reflect the full set of
14529d0ccd10Smrg# options your script accepts.
14539d0ccd10Smrgusage_message="\
14549d0ccd10Smrg       --debug        enable verbose shell tracing
14559d0ccd10Smrg   -W, --warnings=CATEGORY
14569d0ccd10Smrg                      report the warnings falling in CATEGORY [all]
14579d0ccd10Smrg   -v, --verbose      verbosely report processing
14589d0ccd10Smrg       --version      print version information and exit
14599d0ccd10Smrg   -h, --help         print short or long help message and exit
14609d0ccd10Smrg"
14619d0ccd10Smrg
14629d0ccd10Smrg# Additional text appended to 'usage_message' in response to '--help'.
14639d0ccd10Smrglong_help_message="
14649d0ccd10SmrgWarning categories include:
14659d0ccd10Smrg       'all'          show all warnings
14669d0ccd10Smrg       'none'         turn off all the warnings
14679d0ccd10Smrg       'error'        warnings are treated as fatal errors"
14689d0ccd10Smrg
14699d0ccd10Smrg# Help message printed before fatal option parsing errors.
14709d0ccd10Smrgfatal_help="Try '\$progname --help' for more information."
14719d0ccd10Smrg
14729d0ccd10Smrg
14739d0ccd10Smrg
14749d0ccd10Smrg## ------------------------- ##
14759d0ccd10Smrg## Hook function management. ##
14769d0ccd10Smrg## ------------------------- ##
14779d0ccd10Smrg
14789d0ccd10Smrg# This section contains functions for adding, removing, and running hooks
14799d0ccd10Smrg# to the main code.  A hook is just a named list of of function, that can
14809d0ccd10Smrg# be run in order later on.
14819d0ccd10Smrg
14829d0ccd10Smrg# func_hookable FUNC_NAME
14839d0ccd10Smrg# -----------------------
14849d0ccd10Smrg# Declare that FUNC_NAME will run hooks added with
14859d0ccd10Smrg# 'func_add_hook FUNC_NAME ...'.
14869d0ccd10Smrgfunc_hookable ()
14879d0ccd10Smrg{
14889d0ccd10Smrg    $debug_cmd
14899d0ccd10Smrg
14909d0ccd10Smrg    func_append hookable_fns " $1"
14919d0ccd10Smrg}
14929d0ccd10Smrg
14939d0ccd10Smrg
14949d0ccd10Smrg# func_add_hook FUNC_NAME HOOK_FUNC
14959d0ccd10Smrg# ---------------------------------
14969d0ccd10Smrg# Request that FUNC_NAME call HOOK_FUNC before it returns.  FUNC_NAME must
14979d0ccd10Smrg# first have been declared "hookable" by a call to 'func_hookable'.
14989d0ccd10Smrgfunc_add_hook ()
14999d0ccd10Smrg{
15009d0ccd10Smrg    $debug_cmd
15019d0ccd10Smrg
15029d0ccd10Smrg    case " $hookable_fns " in
15039d0ccd10Smrg      *" $1 "*) ;;
15049d0ccd10Smrg      *) func_fatal_error "'$1' does not accept hook functions." ;;
15059d0ccd10Smrg    esac
15069d0ccd10Smrg
15079d0ccd10Smrg    eval func_append ${1}_hooks '" $2"'
15089d0ccd10Smrg}
15099d0ccd10Smrg
15109d0ccd10Smrg
15119d0ccd10Smrg# func_remove_hook FUNC_NAME HOOK_FUNC
15129d0ccd10Smrg# ------------------------------------
15139d0ccd10Smrg# Remove HOOK_FUNC from the list of functions called by FUNC_NAME.
15149d0ccd10Smrgfunc_remove_hook ()
15159d0ccd10Smrg{
15169d0ccd10Smrg    $debug_cmd
15179d0ccd10Smrg
15189d0ccd10Smrg    eval ${1}_hooks='`$ECHO "\$'$1'_hooks" |$SED "s| '$2'||"`'
15199d0ccd10Smrg}
15209d0ccd10Smrg
15219d0ccd10Smrg
15229d0ccd10Smrg# func_run_hooks FUNC_NAME [ARG]...
15239d0ccd10Smrg# ---------------------------------
15249d0ccd10Smrg# Run all hook functions registered to FUNC_NAME.
15259d0ccd10Smrg# It is assumed that the list of hook functions contains nothing more
15269d0ccd10Smrg# than a whitespace-delimited list of legal shell function names, and
15279d0ccd10Smrg# no effort is wasted trying to catch shell meta-characters or preserve
15289d0ccd10Smrg# whitespace.
15299d0ccd10Smrgfunc_run_hooks ()
15309d0ccd10Smrg{
15319d0ccd10Smrg    $debug_cmd
15329d0ccd10Smrg
15339d0ccd10Smrg    case " $hookable_fns " in
15349d0ccd10Smrg      *" $1 "*) ;;
15359d0ccd10Smrg      *) func_fatal_error "'$1' does not support hook funcions.n" ;;
15369d0ccd10Smrg    esac
15379d0ccd10Smrg
15389d0ccd10Smrg    eval _G_hook_fns=\$$1_hooks; shift
15399d0ccd10Smrg
15409d0ccd10Smrg    for _G_hook in $_G_hook_fns; do
15419d0ccd10Smrg      eval $_G_hook '"$@"'
15429d0ccd10Smrg
15439d0ccd10Smrg      # store returned options list back into positional
15449d0ccd10Smrg      # parameters for next 'cmd' execution.
15459d0ccd10Smrg      eval _G_hook_result=\$${_G_hook}_result
15469d0ccd10Smrg      eval set dummy "$_G_hook_result"; shift
15479d0ccd10Smrg    done
15489d0ccd10Smrg
15499d0ccd10Smrg    func_quote_for_eval ${1+"$@"}
15509d0ccd10Smrg    func_run_hooks_result=$func_quote_for_eval_result
15519d0ccd10Smrg}
15529d0ccd10Smrg
15539d0ccd10Smrg
15549d0ccd10Smrg
15559d0ccd10Smrg## --------------- ##
15569d0ccd10Smrg## Option parsing. ##
15579d0ccd10Smrg## --------------- ##
15589d0ccd10Smrg
15599d0ccd10Smrg# In order to add your own option parsing hooks, you must accept the
15609d0ccd10Smrg# full positional parameter list in your hook function, remove any
15619d0ccd10Smrg# options that you action, and then pass back the remaining unprocessed
15629d0ccd10Smrg# options in '<hooked_function_name>_result', escaped suitably for
15639d0ccd10Smrg# 'eval'.  Like this:
15649d0ccd10Smrg#
15659d0ccd10Smrg#    my_options_prep ()
15669d0ccd10Smrg#    {
15679d0ccd10Smrg#        $debug_cmd
15689d0ccd10Smrg#
15699d0ccd10Smrg#        # Extend the existing usage message.
15709d0ccd10Smrg#        usage_message=$usage_message'
15719d0ccd10Smrg#      -s, --silent       don'\''t print informational messages
15729d0ccd10Smrg#    '
15739d0ccd10Smrg#
15749d0ccd10Smrg#        func_quote_for_eval ${1+"$@"}
15759d0ccd10Smrg#        my_options_prep_result=$func_quote_for_eval_result
15769d0ccd10Smrg#    }
15779d0ccd10Smrg#    func_add_hook func_options_prep my_options_prep
15789d0ccd10Smrg#
15799d0ccd10Smrg#
15809d0ccd10Smrg#    my_silent_option ()
15819d0ccd10Smrg#    {
15829d0ccd10Smrg#        $debug_cmd
15839d0ccd10Smrg#
15849d0ccd10Smrg#        # Note that for efficiency, we parse as many options as we can
15859d0ccd10Smrg#        # recognise in a loop before passing the remainder back to the
15869d0ccd10Smrg#        # caller on the first unrecognised argument we encounter.
15879d0ccd10Smrg#        while test $# -gt 0; do
15889d0ccd10Smrg#          opt=$1; shift
15899d0ccd10Smrg#          case $opt in
15909d0ccd10Smrg#            --silent|-s) opt_silent=: ;;
15919d0ccd10Smrg#            # Separate non-argument short options:
15929d0ccd10Smrg#            -s*)         func_split_short_opt "$_G_opt"
15939d0ccd10Smrg#                         set dummy "$func_split_short_opt_name" \
15949d0ccd10Smrg#                             "-$func_split_short_opt_arg" ${1+"$@"}
15959d0ccd10Smrg#                         shift
15969d0ccd10Smrg#                         ;;
15979d0ccd10Smrg#            *)            set dummy "$_G_opt" "$*"; shift; break ;;
15989d0ccd10Smrg#          esac
15999d0ccd10Smrg#        done
16009d0ccd10Smrg#
16019d0ccd10Smrg#        func_quote_for_eval ${1+"$@"}
16029d0ccd10Smrg#        my_silent_option_result=$func_quote_for_eval_result
16039d0ccd10Smrg#    }
16049d0ccd10Smrg#    func_add_hook func_parse_options my_silent_option
16059d0ccd10Smrg#
16069d0ccd10Smrg#
16079d0ccd10Smrg#    my_option_validation ()
16089d0ccd10Smrg#    {
16099d0ccd10Smrg#        $debug_cmd
16109d0ccd10Smrg#
16119d0ccd10Smrg#        $opt_silent && $opt_verbose && func_fatal_help "\
16129d0ccd10Smrg#    '--silent' and '--verbose' options are mutually exclusive."
16139d0ccd10Smrg#
16149d0ccd10Smrg#        func_quote_for_eval ${1+"$@"}
16159d0ccd10Smrg#        my_option_validation_result=$func_quote_for_eval_result
16169d0ccd10Smrg#    }
16179d0ccd10Smrg#    func_add_hook func_validate_options my_option_validation
16189d0ccd10Smrg#
16199d0ccd10Smrg# You'll alse need to manually amend $usage_message to reflect the extra
16209d0ccd10Smrg# options you parse.  It's preferable to append if you can, so that
16219d0ccd10Smrg# multiple option parsing hooks can be added safely.
16229d0ccd10Smrg
16239d0ccd10Smrg
16249d0ccd10Smrg# func_options [ARG]...
16259d0ccd10Smrg# ---------------------
16269d0ccd10Smrg# All the functions called inside func_options are hookable. See the
16279d0ccd10Smrg# individual implementations for details.
16289d0ccd10Smrgfunc_hookable func_options
16299d0ccd10Smrgfunc_options ()
16307914d74bSmrg{
16319d0ccd10Smrg    $debug_cmd
16327914d74bSmrg
16339d0ccd10Smrg    func_options_prep ${1+"$@"}
16349d0ccd10Smrg    eval func_parse_options \
16359d0ccd10Smrg        ${func_options_prep_result+"$func_options_prep_result"}
16369d0ccd10Smrg    eval func_validate_options \
16379d0ccd10Smrg        ${func_parse_options_result+"$func_parse_options_result"}
1638e169010aSmrg
16399d0ccd10Smrg    eval func_run_hooks func_options \
16409d0ccd10Smrg        ${func_validate_options_result+"$func_validate_options_result"}
16419d0ccd10Smrg
16429d0ccd10Smrg    # save modified positional parameters for caller
16439d0ccd10Smrg    func_options_result=$func_run_hooks_result
16447914d74bSmrg}
16457914d74bSmrg
1646e169010aSmrg
16479d0ccd10Smrg# func_options_prep [ARG]...
16489d0ccd10Smrg# --------------------------
16499d0ccd10Smrg# All initialisations required before starting the option parse loop.
16509d0ccd10Smrg# Note that when calling hook functions, we pass through the list of
16519d0ccd10Smrg# positional parameters.  If a hook function modifies that list, and
16529d0ccd10Smrg# needs to propogate that back to rest of this script, then the complete
16539d0ccd10Smrg# modified list must be put in 'func_run_hooks_result' before
16549d0ccd10Smrg# returning.
16559d0ccd10Smrgfunc_hookable func_options_prep
16569d0ccd10Smrgfunc_options_prep ()
16577914d74bSmrg{
16589d0ccd10Smrg    $debug_cmd
16597914d74bSmrg
16609d0ccd10Smrg    # Option defaults:
16619d0ccd10Smrg    opt_verbose=false
16629d0ccd10Smrg    opt_warning_types=
1663e169010aSmrg
16649d0ccd10Smrg    func_run_hooks func_options_prep ${1+"$@"}
16659d0ccd10Smrg
16669d0ccd10Smrg    # save modified positional parameters for caller
16679d0ccd10Smrg    func_options_prep_result=$func_run_hooks_result
16687914d74bSmrg}
16697914d74bSmrg
16709d0ccd10Smrg
16719d0ccd10Smrg# func_parse_options [ARG]...
16729d0ccd10Smrg# ---------------------------
16739d0ccd10Smrg# The main option parsing loop.
16749d0ccd10Smrgfunc_hookable func_parse_options
16759d0ccd10Smrgfunc_parse_options ()
1676c63293b5Smrg{
16779d0ccd10Smrg    $debug_cmd
16789d0ccd10Smrg
16799d0ccd10Smrg    func_parse_options_result=
16809d0ccd10Smrg
16819d0ccd10Smrg    # this just eases exit handling
16829d0ccd10Smrg    while test $# -gt 0; do
16839d0ccd10Smrg      # Defer to hook functions for initial option parsing, so they
16849d0ccd10Smrg      # get priority in the event of reusing an option name.
16859d0ccd10Smrg      func_run_hooks func_parse_options ${1+"$@"}
16869d0ccd10Smrg
16879d0ccd10Smrg      # Adjust func_parse_options positional parameters to match
16889d0ccd10Smrg      eval set dummy "$func_run_hooks_result"; shift
16899d0ccd10Smrg
16909d0ccd10Smrg      # Break out of the loop if we already parsed every option.
16919d0ccd10Smrg      test $# -gt 0 || break
16929d0ccd10Smrg
16939d0ccd10Smrg      _G_opt=$1
16949d0ccd10Smrg      shift
16959d0ccd10Smrg      case $_G_opt in
16969d0ccd10Smrg        --debug|-x)   debug_cmd='set -x'
16979d0ccd10Smrg                      func_echo "enabling shell trace mode"
16989d0ccd10Smrg                      $debug_cmd
16999d0ccd10Smrg                      ;;
17009d0ccd10Smrg
17019d0ccd10Smrg        --no-warnings|--no-warning|--no-warn)
17029d0ccd10Smrg                      set dummy --warnings none ${1+"$@"}
17039d0ccd10Smrg                      shift
17049d0ccd10Smrg		      ;;
17059d0ccd10Smrg
17069d0ccd10Smrg        --warnings|--warning|-W)
17079d0ccd10Smrg                      test $# = 0 && func_missing_arg $_G_opt && break
17089d0ccd10Smrg                      case " $warning_categories $1" in
17099d0ccd10Smrg                        *" $1 "*)
17109d0ccd10Smrg                          # trailing space prevents matching last $1 above
17119d0ccd10Smrg                          func_append_uniq opt_warning_types " $1"
17129d0ccd10Smrg                          ;;
17139d0ccd10Smrg                        *all)
17149d0ccd10Smrg                          opt_warning_types=$warning_categories
17159d0ccd10Smrg                          ;;
17169d0ccd10Smrg                        *none)
17179d0ccd10Smrg                          opt_warning_types=none
17189d0ccd10Smrg                          warning_func=:
17199d0ccd10Smrg                          ;;
17209d0ccd10Smrg                        *error)
17219d0ccd10Smrg                          opt_warning_types=$warning_categories
17229d0ccd10Smrg                          warning_func=func_fatal_error
17239d0ccd10Smrg                          ;;
17249d0ccd10Smrg                        *)
17259d0ccd10Smrg                          func_fatal_error \
17269d0ccd10Smrg                             "unsupported warning category: '$1'"
17279d0ccd10Smrg                          ;;
17289d0ccd10Smrg                      esac
17299d0ccd10Smrg                      shift
17309d0ccd10Smrg                      ;;
17319d0ccd10Smrg
17329d0ccd10Smrg        --verbose|-v) opt_verbose=: ;;
17339d0ccd10Smrg        --version)    func_version ;;
17349d0ccd10Smrg        -\?|-h)       func_usage ;;
17359d0ccd10Smrg        --help)       func_help ;;
17369d0ccd10Smrg
17379d0ccd10Smrg	# Separate optargs to long options (plugins may need this):
17389d0ccd10Smrg	--*=*)        func_split_equals "$_G_opt"
17399d0ccd10Smrg	              set dummy "$func_split_equals_lhs" \
17409d0ccd10Smrg                          "$func_split_equals_rhs" ${1+"$@"}
17419d0ccd10Smrg                      shift
17429d0ccd10Smrg                      ;;
17439d0ccd10Smrg
17449d0ccd10Smrg       # Separate optargs to short options:
17459d0ccd10Smrg        -W*)
17469d0ccd10Smrg                      func_split_short_opt "$_G_opt"
17479d0ccd10Smrg                      set dummy "$func_split_short_opt_name" \
17489d0ccd10Smrg                          "$func_split_short_opt_arg" ${1+"$@"}
17499d0ccd10Smrg                      shift
17509d0ccd10Smrg                      ;;
17519d0ccd10Smrg
17529d0ccd10Smrg        # Separate non-argument short options:
17539d0ccd10Smrg        -\?*|-h*|-v*|-x*)
17549d0ccd10Smrg                      func_split_short_opt "$_G_opt"
17559d0ccd10Smrg                      set dummy "$func_split_short_opt_name" \
17569d0ccd10Smrg                          "-$func_split_short_opt_arg" ${1+"$@"}
17579d0ccd10Smrg                      shift
17589d0ccd10Smrg                      ;;
17599d0ccd10Smrg
17609d0ccd10Smrg        --)           break ;;
17619d0ccd10Smrg        -*)           func_fatal_help "unrecognised option: '$_G_opt'" ;;
17629d0ccd10Smrg        *)            set dummy "$_G_opt" ${1+"$@"}; shift; break ;;
17639d0ccd10Smrg      esac
17649d0ccd10Smrg    done
17659d0ccd10Smrg
17669d0ccd10Smrg    # save modified positional parameters for caller
17679d0ccd10Smrg    func_quote_for_eval ${1+"$@"}
17689d0ccd10Smrg    func_parse_options_result=$func_quote_for_eval_result
1769c63293b5Smrg}
1770c63293b5Smrg
17717914d74bSmrg
17729d0ccd10Smrg# func_validate_options [ARG]...
17739d0ccd10Smrg# ------------------------------
17749d0ccd10Smrg# Perform any sanity checks on option settings and/or unconsumed
17759d0ccd10Smrg# arguments.
17769d0ccd10Smrgfunc_hookable func_validate_options
17779d0ccd10Smrgfunc_validate_options ()
1778e169010aSmrg{
17799d0ccd10Smrg    $debug_cmd
1780c63293b5Smrg
17819d0ccd10Smrg    # Display all warnings if -W was not given.
17829d0ccd10Smrg    test -n "$opt_warning_types" || opt_warning_types=" $warning_categories"
17839d0ccd10Smrg
17849d0ccd10Smrg    func_run_hooks func_validate_options ${1+"$@"}
17859d0ccd10Smrg
17869d0ccd10Smrg    # Bail if the options were screwed!
17879d0ccd10Smrg    $exit_cmd $EXIT_FAILURE
17889d0ccd10Smrg
17899d0ccd10Smrg    # save modified positional parameters for caller
17909d0ccd10Smrg    func_validate_options_result=$func_run_hooks_result
1791e169010aSmrg}
1792e169010aSmrg
17939d0ccd10Smrg
17949d0ccd10Smrg
17959d0ccd10Smrg## ----------------- ##
17969d0ccd10Smrg## Helper functions. ##
17979d0ccd10Smrg## ----------------- ##
17989d0ccd10Smrg
17999d0ccd10Smrg# This section contains the helper functions used by the rest of the
18009d0ccd10Smrg# hookable option parser framework in ascii-betical order.
18019d0ccd10Smrg
18029d0ccd10Smrg
18039d0ccd10Smrg# func_fatal_help ARG...
18049d0ccd10Smrg# ----------------------
18059d0ccd10Smrg# Echo program name prefixed message to standard error, followed by
18069d0ccd10Smrg# a help hint, and exit.
18079d0ccd10Smrgfunc_fatal_help ()
1808e169010aSmrg{
18099d0ccd10Smrg    $debug_cmd
1810c63293b5Smrg
18119d0ccd10Smrg    eval \$ECHO \""Usage: $usage"\"
18129d0ccd10Smrg    eval \$ECHO \""$fatal_help"\"
18139d0ccd10Smrg    func_error ${1+"$@"}
18149d0ccd10Smrg    exit $EXIT_FAILURE
1815e169010aSmrg}
1816e169010aSmrg
18179d0ccd10Smrg
18189d0ccd10Smrg# func_help
18199d0ccd10Smrg# ---------
18209d0ccd10Smrg# Echo long help message to standard output and exit.
1821e169010aSmrgfunc_help ()
1822e169010aSmrg{
18239d0ccd10Smrg    $debug_cmd
18249d0ccd10Smrg
18259d0ccd10Smrg    func_usage_message
18269d0ccd10Smrg    $ECHO "$long_help_message"
18279d0ccd10Smrg    exit 0
1828e169010aSmrg}
1829e169010aSmrg
18309d0ccd10Smrg
18319d0ccd10Smrg# func_missing_arg ARGNAME
18329d0ccd10Smrg# ------------------------
1833e169010aSmrg# Echo program name prefixed message to standard error and set global
1834e169010aSmrg# exit_cmd.
1835e169010aSmrgfunc_missing_arg ()
1836e169010aSmrg{
18379d0ccd10Smrg    $debug_cmd
1838c63293b5Smrg
18399d0ccd10Smrg    func_error "Missing argument for '$1'."
1840e169010aSmrg    exit_cmd=exit
1841e169010aSmrg}
1842e169010aSmrg
1843e169010aSmrg
18449d0ccd10Smrg# func_split_equals STRING
18459d0ccd10Smrg# ------------------------
18469d0ccd10Smrg# Set func_split_equals_lhs and func_split_equals_rhs shell variables after
18479d0ccd10Smrg# splitting STRING at the '=' sign.
18489d0ccd10Smrgtest -z "$_G_HAVE_XSI_OPS" \
18499d0ccd10Smrg    && (eval 'x=a/b/c;
18509d0ccd10Smrg      test 5aa/bb/cc = "${#x}${x%%/*}${x%/*}${x#*/}${x##*/}"') 2>/dev/null \
18519d0ccd10Smrg    && _G_HAVE_XSI_OPS=yes
18529d0ccd10Smrg
18539d0ccd10Smrgif test yes = "$_G_HAVE_XSI_OPS"
18549d0ccd10Smrgthen
18559d0ccd10Smrg  # This is an XSI compatible shell, allowing a faster implementation...
18569d0ccd10Smrg  eval 'func_split_equals ()
18579d0ccd10Smrg  {
18589d0ccd10Smrg      $debug_cmd
18599d0ccd10Smrg
18609d0ccd10Smrg      func_split_equals_lhs=${1%%=*}
18619d0ccd10Smrg      func_split_equals_rhs=${1#*=}
18629d0ccd10Smrg      test "x$func_split_equals_lhs" = "x$1" \
18639d0ccd10Smrg        && func_split_equals_rhs=
18649d0ccd10Smrg  }'
18659d0ccd10Smrgelse
18669d0ccd10Smrg  # ...otherwise fall back to using expr, which is often a shell builtin.
18679d0ccd10Smrg  func_split_equals ()
18689d0ccd10Smrg  {
18699d0ccd10Smrg      $debug_cmd
18709d0ccd10Smrg
18719d0ccd10Smrg      func_split_equals_lhs=`expr "x$1" : 'x\([^=]*\)'`
18729d0ccd10Smrg      func_split_equals_rhs=
18739d0ccd10Smrg      test "x$func_split_equals_lhs" = "x$1" \
18749d0ccd10Smrg        || func_split_equals_rhs=`expr "x$1" : 'x[^=]*=\(.*\)$'`
18759d0ccd10Smrg  }
18769d0ccd10Smrgfi #func_split_equals
18779d0ccd10Smrg
18789d0ccd10Smrg
18799d0ccd10Smrg# func_split_short_opt SHORTOPT
18809d0ccd10Smrg# -----------------------------
1881c63293b5Smrg# Set func_split_short_opt_name and func_split_short_opt_arg shell
1882c63293b5Smrg# variables after splitting SHORTOPT after the 2nd character.
18839d0ccd10Smrgif test yes = "$_G_HAVE_XSI_OPS"
18849d0ccd10Smrgthen
18859d0ccd10Smrg  # This is an XSI compatible shell, allowing a faster implementation...
18869d0ccd10Smrg  eval 'func_split_short_opt ()
18879d0ccd10Smrg  {
18889d0ccd10Smrg      $debug_cmd
18899d0ccd10Smrg
18909d0ccd10Smrg      func_split_short_opt_arg=${1#??}
18919d0ccd10Smrg      func_split_short_opt_name=${1%"$func_split_short_opt_arg"}
18929d0ccd10Smrg  }'
18939d0ccd10Smrgelse
18949d0ccd10Smrg  # ...otherwise fall back to using expr, which is often a shell builtin.
18959d0ccd10Smrg  func_split_short_opt ()
18969d0ccd10Smrg  {
18979d0ccd10Smrg      $debug_cmd
18989d0ccd10Smrg
18999d0ccd10Smrg      func_split_short_opt_name=`expr "x$1" : 'x-\(.\)'`
19009d0ccd10Smrg      func_split_short_opt_arg=`expr "x$1" : 'x-.\(.*\)$'`
19019d0ccd10Smrg  }
19029d0ccd10Smrgfi #func_split_short_opt
19039d0ccd10Smrg
19049d0ccd10Smrg
19059d0ccd10Smrg# func_usage
19069d0ccd10Smrg# ----------
19079d0ccd10Smrg# Echo short help message to standard output and exit.
19089d0ccd10Smrgfunc_usage ()
1909c63293b5Smrg{
19109d0ccd10Smrg    $debug_cmd
1911c63293b5Smrg
19129d0ccd10Smrg    func_usage_message
19139d0ccd10Smrg    $ECHO "Run '$progname --help |${PAGER-more}' for full usage"
19149d0ccd10Smrg    exit 0
19159d0ccd10Smrg}
1916c63293b5Smrg
1917c63293b5Smrg
19189d0ccd10Smrg# func_usage_message
19199d0ccd10Smrg# ------------------
19209d0ccd10Smrg# Echo short help message to standard output.
19219d0ccd10Smrgfunc_usage_message ()
1922c63293b5Smrg{
19239d0ccd10Smrg    $debug_cmd
1924c63293b5Smrg
19259d0ccd10Smrg    eval \$ECHO \""Usage: $usage"\"
19269d0ccd10Smrg    echo
19279d0ccd10Smrg    $SED -n 's|^# ||
19289d0ccd10Smrg        /^Written by/{
19299d0ccd10Smrg          x;p;x
19309d0ccd10Smrg        }
19319d0ccd10Smrg	h
19329d0ccd10Smrg	/^Written by/q' < "$progpath"
19339d0ccd10Smrg    echo
19349d0ccd10Smrg    eval \$ECHO \""$usage_message"\"
19359d0ccd10Smrg}
1936c63293b5Smrg
1937e169010aSmrg
19389d0ccd10Smrg# func_version
19399d0ccd10Smrg# ------------
19409d0ccd10Smrg# Echo version message to standard output and exit.
19419d0ccd10Smrgfunc_version ()
19429d0ccd10Smrg{
19439d0ccd10Smrg    $debug_cmd
1944e169010aSmrg
19459d0ccd10Smrg    printf '%s\n' "$progname $scriptversion"
19469d0ccd10Smrg    $SED -n '
19479d0ccd10Smrg        /(C)/!b go
19489d0ccd10Smrg        :more
19499d0ccd10Smrg        /\./!{
19509d0ccd10Smrg          N
19519d0ccd10Smrg          s|\n# | |
19529d0ccd10Smrg          b more
19539d0ccd10Smrg        }
19549d0ccd10Smrg        :go
19559d0ccd10Smrg        /^# Written by /,/# warranty; / {
19569d0ccd10Smrg          s|^# ||
19579d0ccd10Smrg          s|^# *$||
19589d0ccd10Smrg          s|\((C)\)[ 0-9,-]*[ ,-]\([1-9][0-9]* \)|\1 \2|
19599d0ccd10Smrg          p
19609d0ccd10Smrg        }
19619d0ccd10Smrg        /^# Written by / {
19629d0ccd10Smrg          s|^# ||
19639d0ccd10Smrg          p
19649d0ccd10Smrg        }
19659d0ccd10Smrg        /^warranty; /q' < "$progpath"
1966e169010aSmrg
19679d0ccd10Smrg    exit $?
19689d0ccd10Smrg}
1969e169010aSmrg
19707914d74bSmrg
19719d0ccd10Smrg# Local variables:
19729d0ccd10Smrg# mode: shell-script
19739d0ccd10Smrg# sh-indentation: 2
19749d0ccd10Smrg# eval: (add-hook 'before-save-hook 'time-stamp)
19759d0ccd10Smrg# time-stamp-pattern: "10/scriptversion=%:y-%02m-%02d.%02H; # UTC"
19769d0ccd10Smrg# time-stamp-time-zone: "UTC"
19779d0ccd10Smrg# End:
19787914d74bSmrg
19799d0ccd10Smrg# Set a version string.
19809d0ccd10Smrgscriptversion='(GNU libtool) 2.4.6'
19817914d74bSmrg
19827914d74bSmrg
19839d0ccd10Smrg# func_echo ARG...
19849d0ccd10Smrg# ----------------
19859d0ccd10Smrg# Libtool also displays the current mode in messages, so override
19869d0ccd10Smrg# funclib.sh func_echo with this custom definition.
19879d0ccd10Smrgfunc_echo ()
1988c63293b5Smrg{
19899d0ccd10Smrg    $debug_cmd
1990c63293b5Smrg
19919d0ccd10Smrg    _G_message=$*
19929d0ccd10Smrg
19939d0ccd10Smrg    func_echo_IFS=$IFS
19949d0ccd10Smrg    IFS=$nl
19959d0ccd10Smrg    for _G_line in $_G_message; do
19969d0ccd10Smrg      IFS=$func_echo_IFS
19979d0ccd10Smrg      $ECHO "$progname${opt_mode+: $opt_mode}: $_G_line"
19989d0ccd10Smrg    done
19999d0ccd10Smrg    IFS=$func_echo_IFS
20009d0ccd10Smrg}
2001c63293b5Smrg
2002c63293b5Smrg
20039d0ccd10Smrg# func_warning ARG...
20049d0ccd10Smrg# -------------------
20059d0ccd10Smrg# Libtool warnings are not categorized, so override funclib.sh
20069d0ccd10Smrg# func_warning with this simpler definition.
20079d0ccd10Smrgfunc_warning ()
2008c63293b5Smrg{
20099d0ccd10Smrg    $debug_cmd
20109d0ccd10Smrg
20119d0ccd10Smrg    $warning_func ${1+"$@"}
20129d0ccd10Smrg}
20139d0ccd10Smrg
2014c63293b5Smrg
20159d0ccd10Smrg## ---------------- ##
20169d0ccd10Smrg## Options parsing. ##
20179d0ccd10Smrg## ---------------- ##
20189d0ccd10Smrg
20199d0ccd10Smrg# Hook in the functions to make sure our own options are parsed during
20209d0ccd10Smrg# the option parsing loop.
20219d0ccd10Smrg
20229d0ccd10Smrgusage='$progpath [OPTION]... [MODE-ARG]...'
20239d0ccd10Smrg
20249d0ccd10Smrg# Short help message in response to '-h'.
20259d0ccd10Smrgusage_message="Options:
20269d0ccd10Smrg       --config             show all configuration variables
20279d0ccd10Smrg       --debug              enable verbose shell tracing
20289d0ccd10Smrg   -n, --dry-run            display commands without modifying any files
20299d0ccd10Smrg       --features           display basic configuration information and exit
20309d0ccd10Smrg       --mode=MODE          use operation mode MODE
20319d0ccd10Smrg       --no-warnings        equivalent to '-Wnone'
20329d0ccd10Smrg       --preserve-dup-deps  don't remove duplicate dependency libraries
20339d0ccd10Smrg       --quiet, --silent    don't print informational messages
20349d0ccd10Smrg       --tag=TAG            use configuration variables from tag TAG
20359d0ccd10Smrg   -v, --verbose            print more informational messages than default
20369d0ccd10Smrg       --version            print version information
20379d0ccd10Smrg   -W, --warnings=CATEGORY  report the warnings falling in CATEGORY [all]
20389d0ccd10Smrg   -h, --help, --help-all   print short, long, or detailed help message
20399d0ccd10Smrg"
2040c63293b5Smrg
20419d0ccd10Smrg# Additional text appended to 'usage_message' in response to '--help'.
20429d0ccd10Smrgfunc_help ()
2043c63293b5Smrg{
20449d0ccd10Smrg    $debug_cmd
20459d0ccd10Smrg
20469d0ccd10Smrg    func_usage_message
20479d0ccd10Smrg    $ECHO "$long_help_message
20489d0ccd10Smrg
20499d0ccd10SmrgMODE must be one of the following:
20509d0ccd10Smrg
20519d0ccd10Smrg       clean           remove files from the build directory
20529d0ccd10Smrg       compile         compile a source file into a libtool object
20539d0ccd10Smrg       execute         automatically set library path, then run a program
20549d0ccd10Smrg       finish          complete the installation of libtool libraries
20559d0ccd10Smrg       install         install libraries or executables
20569d0ccd10Smrg       link            create a library or an executable
20579d0ccd10Smrg       uninstall       remove libraries from an installed directory
20589d0ccd10Smrg
20599d0ccd10SmrgMODE-ARGS vary depending on the MODE.  When passed as first option,
20609d0ccd10Smrg'--mode=MODE' may be abbreviated as 'MODE' or a unique abbreviation of that.
20619d0ccd10SmrgTry '$progname --help --mode=MODE' for a more detailed description of MODE.
20629d0ccd10Smrg
20639d0ccd10SmrgWhen reporting a bug, please describe a test case to reproduce it and
20649d0ccd10Smrginclude the following information:
20659d0ccd10Smrg
20669d0ccd10Smrg       host-triplet:   $host
20679d0ccd10Smrg       shell:          $SHELL
20689d0ccd10Smrg       compiler:       $LTCC
20699d0ccd10Smrg       compiler flags: $LTCFLAGS
20709d0ccd10Smrg       linker:         $LD (gnu? $with_gnu_ld)
20719d0ccd10Smrg       version:        $progname (GNU libtool) 2.4.6
20729d0ccd10Smrg       automake:       `($AUTOMAKE --version) 2>/dev/null |$SED 1q`
20739d0ccd10Smrg       autoconf:       `($AUTOCONF --version) 2>/dev/null |$SED 1q`
20749d0ccd10Smrg
20759d0ccd10SmrgReport bugs to <bug-libtool@gnu.org>.
20769d0ccd10SmrgGNU libtool home page: <http://www.gnu.org/s/libtool/>.
20779d0ccd10SmrgGeneral help using GNU software: <http://www.gnu.org/gethelp/>."
20789d0ccd10Smrg    exit 0
20799d0ccd10Smrg}
2080c63293b5Smrg
2081c63293b5Smrg
20829d0ccd10Smrg# func_lo2o OBJECT-NAME
20839d0ccd10Smrg# ---------------------
20849d0ccd10Smrg# Transform OBJECT-NAME from a '.lo' suffix to the platform specific
20859d0ccd10Smrg# object suffix.
2086c63293b5Smrg
20879d0ccd10Smrglo2o=s/\\.lo\$/.$objext/
20889d0ccd10Smrgo2lo=s/\\.$objext\$/.lo/
2089c63293b5Smrg
20909d0ccd10Smrgif test yes = "$_G_HAVE_XSI_OPS"; then
20919d0ccd10Smrg  eval 'func_lo2o ()
20929d0ccd10Smrg  {
20939d0ccd10Smrg    case $1 in
20949d0ccd10Smrg      *.lo) func_lo2o_result=${1%.lo}.$objext ;;
20959d0ccd10Smrg      *   ) func_lo2o_result=$1               ;;
20969d0ccd10Smrg    esac
20979d0ccd10Smrg  }'
20989d0ccd10Smrg
20999d0ccd10Smrg  # func_xform LIBOBJ-OR-SOURCE
21009d0ccd10Smrg  # ---------------------------
21019d0ccd10Smrg  # Transform LIBOBJ-OR-SOURCE from a '.o' or '.c' (or otherwise)
21029d0ccd10Smrg  # suffix to a '.lo' libtool-object suffix.
21039d0ccd10Smrg  eval 'func_xform ()
21049d0ccd10Smrg  {
21059d0ccd10Smrg    func_xform_result=${1%.*}.lo
21069d0ccd10Smrg  }'
21079d0ccd10Smrgelse
21089d0ccd10Smrg  # ...otherwise fall back to using sed.
21099d0ccd10Smrg  func_lo2o ()
21109d0ccd10Smrg  {
21119d0ccd10Smrg    func_lo2o_result=`$ECHO "$1" | $SED "$lo2o"`
21129d0ccd10Smrg  }
21139d0ccd10Smrg
21149d0ccd10Smrg  func_xform ()
21159d0ccd10Smrg  {
21169d0ccd10Smrg    func_xform_result=`$ECHO "$1" | $SED 's|\.[^.]*$|.lo|'`
21179d0ccd10Smrg  }
21189d0ccd10Smrgfi
2119c63293b5Smrg
2120c63293b5Smrg
21219d0ccd10Smrg# func_fatal_configuration ARG...
21229d0ccd10Smrg# -------------------------------
2123e169010aSmrg# Echo program name prefixed message to standard error, followed by
2124e169010aSmrg# a configuration failure hint, and exit.
2125e169010aSmrgfunc_fatal_configuration ()
2126e169010aSmrg{
21279d0ccd10Smrg    func__fatal_error ${1+"$@"} \
21289d0ccd10Smrg      "See the $PACKAGE documentation for more information." \
21299d0ccd10Smrg      "Fatal configuration error."
2130e169010aSmrg}
2131e169010aSmrg
2132e169010aSmrg
2133e169010aSmrg# func_config
21349d0ccd10Smrg# -----------
2135e169010aSmrg# Display the configuration for all the tags in this script.
2136e169010aSmrgfunc_config ()
2137e169010aSmrg{
2138e169010aSmrg    re_begincf='^# ### BEGIN LIBTOOL'
2139e169010aSmrg    re_endcf='^# ### END LIBTOOL'
2140e169010aSmrg
2141e169010aSmrg    # Default configuration.
2142e169010aSmrg    $SED "1,/$re_begincf CONFIG/d;/$re_endcf CONFIG/,\$d" < "$progpath"
21437914d74bSmrg
21447914d74bSmrg    # Now print the configurations for the tags.
21457914d74bSmrg    for tagname in $taglist; do
2146e169010aSmrg      $SED -n "/$re_begincf TAG CONFIG: $tagname\$/,/$re_endcf TAG CONFIG: $tagname\$/p" < "$progpath"
21477914d74bSmrg    done
21487914d74bSmrg
2149e169010aSmrg    exit $?
2150e169010aSmrg}
21517914d74bSmrg
21529d0ccd10Smrg
2153e169010aSmrg# func_features
21549d0ccd10Smrg# -------------
2155e169010aSmrg# Display the features supported by this script.
2156e169010aSmrgfunc_features ()
2157e169010aSmrg{
2158e8ead290Smrg    echo "host: $host"
21599d0ccd10Smrg    if test yes = "$build_libtool_libs"; then
2160e8ead290Smrg      echo "enable shared libraries"
21617914d74bSmrg    else
2162e8ead290Smrg      echo "disable shared libraries"
21637914d74bSmrg    fi
21649d0ccd10Smrg    if test yes = "$build_old_libs"; then
2165e8ead290Smrg      echo "enable static libraries"
21667914d74bSmrg    else
2167e8ead290Smrg      echo "disable static libraries"
21687914d74bSmrg    fi
2169e169010aSmrg
21707914d74bSmrg    exit $?
2171e169010aSmrg}
2172e169010aSmrg
21739d0ccd10Smrg
21749d0ccd10Smrg# func_enable_tag TAGNAME
21759d0ccd10Smrg# -----------------------
2176e169010aSmrg# Verify that TAGNAME is valid, and either flag an error and exit, or
2177e169010aSmrg# enable the TAGNAME tag.  We also add TAGNAME to the global $taglist
2178e169010aSmrg# variable here.
2179e169010aSmrgfunc_enable_tag ()
2180e169010aSmrg{
21819d0ccd10Smrg    # Global variable:
21829d0ccd10Smrg    tagname=$1
21837914d74bSmrg
21849d0ccd10Smrg    re_begincf="^# ### BEGIN LIBTOOL TAG CONFIG: $tagname\$"
21859d0ccd10Smrg    re_endcf="^# ### END LIBTOOL TAG CONFIG: $tagname\$"
21869d0ccd10Smrg    sed_extractcf=/$re_begincf/,/$re_endcf/p
21877914d74bSmrg
21889d0ccd10Smrg    # Validate tagname.
21899d0ccd10Smrg    case $tagname in
21909d0ccd10Smrg      *[!-_A-Za-z0-9,/]*)
21919d0ccd10Smrg        func_fatal_error "invalid tag name: $tagname"
21929d0ccd10Smrg        ;;
21939d0ccd10Smrg    esac
21947914d74bSmrg
21959d0ccd10Smrg    # Don't test for the "default" C tag, as we know it's
21969d0ccd10Smrg    # there but not specially marked.
21979d0ccd10Smrg    case $tagname in
21989d0ccd10Smrg        CC) ;;
2199e169010aSmrg    *)
22009d0ccd10Smrg        if $GREP "$re_begincf" "$progpath" >/dev/null 2>&1; then
22019d0ccd10Smrg	  taglist="$taglist $tagname"
22029d0ccd10Smrg
22039d0ccd10Smrg	  # Evaluate the configuration.  Be careful to quote the path
22049d0ccd10Smrg	  # and the sed script, to avoid splitting on whitespace, but
22059d0ccd10Smrg	  # also don't use non-portable quotes within backquotes within
22069d0ccd10Smrg	  # quotes we have to do it in 2 steps:
22079d0ccd10Smrg	  extractedcf=`$SED -n -e "$sed_extractcf" < "$progpath"`
22089d0ccd10Smrg	  eval "$extractedcf"
22099d0ccd10Smrg        else
22109d0ccd10Smrg	  func_error "ignoring unknown tag $tagname"
22119d0ccd10Smrg        fi
22129d0ccd10Smrg        ;;
22139d0ccd10Smrg    esac
2214e169010aSmrg}
22157914d74bSmrg
22169d0ccd10Smrg
2217c63293b5Smrg# func_check_version_match
22189d0ccd10Smrg# ------------------------
2219c63293b5Smrg# Ensure that we are using m4 macros, and libtool script from the same
2220c63293b5Smrg# release of libtool.
2221c63293b5Smrgfunc_check_version_match ()
2222e169010aSmrg{
22239d0ccd10Smrg    if test "$package_revision" != "$macro_revision"; then
22249d0ccd10Smrg      if test "$VERSION" != "$macro_version"; then
22259d0ccd10Smrg        if test -z "$macro_version"; then
22269d0ccd10Smrg          cat >&2 <<_LT_EOF
2227c63293b5Smrg$progname: Version mismatch error.  This is $PACKAGE $VERSION, but the
2228c63293b5Smrg$progname: definition of this LT_INIT comes from an older release.
2229c63293b5Smrg$progname: You should recreate aclocal.m4 with macros from $PACKAGE $VERSION
2230c63293b5Smrg$progname: and run autoconf again.
2231c63293b5Smrg_LT_EOF
22329d0ccd10Smrg        else
22339d0ccd10Smrg          cat >&2 <<_LT_EOF
2234c63293b5Smrg$progname: Version mismatch error.  This is $PACKAGE $VERSION, but the
2235c63293b5Smrg$progname: definition of this LT_INIT comes from $PACKAGE $macro_version.
2236c63293b5Smrg$progname: You should recreate aclocal.m4 with macros from $PACKAGE $VERSION
2237c63293b5Smrg$progname: and run autoconf again.
2238c63293b5Smrg_LT_EOF
22399d0ccd10Smrg        fi
22409d0ccd10Smrg      else
22419d0ccd10Smrg        cat >&2 <<_LT_EOF
2242c63293b5Smrg$progname: Version mismatch error.  This is $PACKAGE $VERSION, revision $package_revision,
2243c63293b5Smrg$progname: but the definition of this LT_INIT comes from revision $macro_revision.
2244c63293b5Smrg$progname: You should recreate aclocal.m4 with macros from revision $package_revision
2245c63293b5Smrg$progname: of $PACKAGE $VERSION and run autoconf again.
2246c63293b5Smrg_LT_EOF
22479d0ccd10Smrg      fi
22487914d74bSmrg
22499d0ccd10Smrg      exit $EXIT_MISMATCH
22509d0ccd10Smrg    fi
2251c63293b5Smrg}
2252c63293b5Smrg
2253c63293b5Smrg
22549d0ccd10Smrg# libtool_options_prep [ARG]...
22559d0ccd10Smrg# -----------------------------
22569d0ccd10Smrg# Preparation for options parsed by libtool.
22579d0ccd10Smrglibtool_options_prep ()
22589d0ccd10Smrg{
22599d0ccd10Smrg    $debug_mode
22607914d74bSmrg
22619d0ccd10Smrg    # Option defaults:
22629d0ccd10Smrg    opt_config=false
22639d0ccd10Smrg    opt_dlopen=
22649d0ccd10Smrg    opt_dry_run=false
22659d0ccd10Smrg    opt_help=false
22669d0ccd10Smrg    opt_mode=
22679d0ccd10Smrg    opt_preserve_dup_deps=false
22689d0ccd10Smrg    opt_quiet=false
2269c63293b5Smrg
22709d0ccd10Smrg    nonopt=
22719d0ccd10Smrg    preserve_args=
2272c63293b5Smrg
22739d0ccd10Smrg    # Shorthand for --mode=foo, only valid as the first argument
22749d0ccd10Smrg    case $1 in
22759d0ccd10Smrg    clean|clea|cle|cl)
22769d0ccd10Smrg      shift; set dummy --mode clean ${1+"$@"}; shift
22779d0ccd10Smrg      ;;
22789d0ccd10Smrg    compile|compil|compi|comp|com|co|c)
22799d0ccd10Smrg      shift; set dummy --mode compile ${1+"$@"}; shift
22809d0ccd10Smrg      ;;
22819d0ccd10Smrg    execute|execut|execu|exec|exe|ex|e)
22829d0ccd10Smrg      shift; set dummy --mode execute ${1+"$@"}; shift
22839d0ccd10Smrg      ;;
22849d0ccd10Smrg    finish|finis|fini|fin|fi|f)
22859d0ccd10Smrg      shift; set dummy --mode finish ${1+"$@"}; shift
22869d0ccd10Smrg      ;;
22879d0ccd10Smrg    install|instal|insta|inst|ins|in|i)
22889d0ccd10Smrg      shift; set dummy --mode install ${1+"$@"}; shift
22899d0ccd10Smrg      ;;
22909d0ccd10Smrg    link|lin|li|l)
22919d0ccd10Smrg      shift; set dummy --mode link ${1+"$@"}; shift
22929d0ccd10Smrg      ;;
22939d0ccd10Smrg    uninstall|uninstal|uninsta|uninst|unins|unin|uni|un|u)
22949d0ccd10Smrg      shift; set dummy --mode uninstall ${1+"$@"}; shift
22959d0ccd10Smrg      ;;
22969d0ccd10Smrg    esac
22979d0ccd10Smrg
22989d0ccd10Smrg    # Pass back the list of options.
22999d0ccd10Smrg    func_quote_for_eval ${1+"$@"}
23009d0ccd10Smrg    libtool_options_prep_result=$func_quote_for_eval_result
23019d0ccd10Smrg}
23029d0ccd10Smrgfunc_add_hook func_options_prep libtool_options_prep
2303c63293b5Smrg
2304c63293b5Smrg
23059d0ccd10Smrg# libtool_parse_options [ARG]...
23069d0ccd10Smrg# ---------------------------------
23079d0ccd10Smrg# Provide handling for libtool specific options.
23089d0ccd10Smrglibtool_parse_options ()
2309c63293b5Smrg{
23109d0ccd10Smrg    $debug_cmd
2311e169010aSmrg
23129d0ccd10Smrg    # Perform our own loop to consume as many options as possible in
23139d0ccd10Smrg    # each iteration.
23149d0ccd10Smrg    while test $# -gt 0; do
23159d0ccd10Smrg      _G_opt=$1
23169d0ccd10Smrg      shift
23179d0ccd10Smrg      case $_G_opt in
23189d0ccd10Smrg        --dry-run|--dryrun|-n)
23199d0ccd10Smrg                        opt_dry_run=:
23209d0ccd10Smrg                        ;;
23219d0ccd10Smrg
23229d0ccd10Smrg        --config)       func_config ;;
23239d0ccd10Smrg
23249d0ccd10Smrg        --dlopen|-dlopen)
23259d0ccd10Smrg                        opt_dlopen="${opt_dlopen+$opt_dlopen
23269d0ccd10Smrg}$1"
23279d0ccd10Smrg                        shift
23289d0ccd10Smrg                        ;;
23299d0ccd10Smrg
23309d0ccd10Smrg        --preserve-dup-deps)
23319d0ccd10Smrg                        opt_preserve_dup_deps=: ;;
23329d0ccd10Smrg
23339d0ccd10Smrg        --features)     func_features ;;
23349d0ccd10Smrg
23359d0ccd10Smrg        --finish)       set dummy --mode finish ${1+"$@"}; shift ;;
23369d0ccd10Smrg
23379d0ccd10Smrg        --help)         opt_help=: ;;
23389d0ccd10Smrg
23399d0ccd10Smrg        --help-all)     opt_help=': help-all' ;;
23409d0ccd10Smrg
23419d0ccd10Smrg        --mode)         test $# = 0 && func_missing_arg $_G_opt && break
23429d0ccd10Smrg                        opt_mode=$1
23439d0ccd10Smrg                        case $1 in
23449d0ccd10Smrg                          # Valid mode arguments:
23459d0ccd10Smrg                          clean|compile|execute|finish|install|link|relink|uninstall) ;;
23469d0ccd10Smrg
23479d0ccd10Smrg                          # Catch anything else as an error
23489d0ccd10Smrg                          *) func_error "invalid argument for $_G_opt"
23499d0ccd10Smrg                             exit_cmd=exit
23509d0ccd10Smrg                             break
23519d0ccd10Smrg                             ;;
23529d0ccd10Smrg                        esac
23539d0ccd10Smrg                        shift
23549d0ccd10Smrg                        ;;
23559d0ccd10Smrg
23569d0ccd10Smrg        --no-silent|--no-quiet)
23579d0ccd10Smrg                        opt_quiet=false
23589d0ccd10Smrg                        func_append preserve_args " $_G_opt"
23599d0ccd10Smrg                        ;;
23609d0ccd10Smrg
23619d0ccd10Smrg        --no-warnings|--no-warning|--no-warn)
23629d0ccd10Smrg                        opt_warning=false
23639d0ccd10Smrg                        func_append preserve_args " $_G_opt"
23649d0ccd10Smrg                        ;;
23659d0ccd10Smrg
23669d0ccd10Smrg        --no-verbose)
23679d0ccd10Smrg                        opt_verbose=false
23689d0ccd10Smrg                        func_append preserve_args " $_G_opt"
23699d0ccd10Smrg                        ;;
23709d0ccd10Smrg
23719d0ccd10Smrg        --silent|--quiet)
23729d0ccd10Smrg                        opt_quiet=:
23739d0ccd10Smrg                        opt_verbose=false
23749d0ccd10Smrg                        func_append preserve_args " $_G_opt"
23759d0ccd10Smrg                        ;;
23769d0ccd10Smrg
23779d0ccd10Smrg        --tag)          test $# = 0 && func_missing_arg $_G_opt && break
23789d0ccd10Smrg                        opt_tag=$1
23799d0ccd10Smrg                        func_append preserve_args " $_G_opt $1"
23809d0ccd10Smrg                        func_enable_tag "$1"
23819d0ccd10Smrg                        shift
23829d0ccd10Smrg                        ;;
23839d0ccd10Smrg
23849d0ccd10Smrg        --verbose|-v)   opt_quiet=false
23859d0ccd10Smrg                        opt_verbose=:
23869d0ccd10Smrg                        func_append preserve_args " $_G_opt"
23879d0ccd10Smrg                        ;;
23889d0ccd10Smrg
23899d0ccd10Smrg	# An option not handled by this hook function:
23909d0ccd10Smrg        *)		set dummy "$_G_opt" ${1+"$@"};	shift; break  ;;
23919d0ccd10Smrg      esac
23929d0ccd10Smrg    done
2393c63293b5Smrg
2394c63293b5Smrg
23959d0ccd10Smrg    # save modified positional parameters for caller
23969d0ccd10Smrg    func_quote_for_eval ${1+"$@"}
23979d0ccd10Smrg    libtool_parse_options_result=$func_quote_for_eval_result
23989d0ccd10Smrg}
23999d0ccd10Smrgfunc_add_hook func_parse_options libtool_parse_options
2400e169010aSmrg
24017914d74bSmrg
2402e169010aSmrg
24039d0ccd10Smrg# libtool_validate_options [ARG]...
24049d0ccd10Smrg# ---------------------------------
24059d0ccd10Smrg# Perform any sanity checks on option settings and/or unconsumed
24069d0ccd10Smrg# arguments.
24079d0ccd10Smrglibtool_validate_options ()
24089d0ccd10Smrg{
24099d0ccd10Smrg    # save first non-option argument
24109d0ccd10Smrg    if test 0 -lt $#; then
24119d0ccd10Smrg      nonopt=$1
24129d0ccd10Smrg      shift
2413e169010aSmrg    fi
2414e169010aSmrg
24159d0ccd10Smrg    # preserve --debug
24169d0ccd10Smrg    test : = "$debug_cmd" || func_append preserve_args " --debug"
2417e169010aSmrg
24189d0ccd10Smrg    case $host in
24199d0ccd10Smrg      # Solaris2 added to fix http://debbugs.gnu.org/cgi/bugreport.cgi?bug=16452
24209d0ccd10Smrg      # see also: http://gcc.gnu.org/bugzilla/show_bug.cgi?id=59788
24219d0ccd10Smrg      *cygwin* | *mingw* | *pw32* | *cegcc* | *solaris2* | *os2*)
24229d0ccd10Smrg        # don't eliminate duplications in $postdeps and $predeps
24239d0ccd10Smrg        opt_duplicate_compiler_generated_deps=:
24249d0ccd10Smrg        ;;
24259d0ccd10Smrg      *)
24269d0ccd10Smrg        opt_duplicate_compiler_generated_deps=$opt_preserve_dup_deps
24279d0ccd10Smrg        ;;
24289d0ccd10Smrg    esac
2429e169010aSmrg
24309d0ccd10Smrg    $opt_help || {
24319d0ccd10Smrg      # Sanity checks first:
24329d0ccd10Smrg      func_check_version_match
2433e169010aSmrg
24349d0ccd10Smrg      test yes != "$build_libtool_libs" \
24359d0ccd10Smrg        && test yes != "$build_old_libs" \
24369d0ccd10Smrg        && func_fatal_configuration "not configured to build any kind of library"
2437e169010aSmrg
24389d0ccd10Smrg      # Darwin sucks
24399d0ccd10Smrg      eval std_shrext=\"$shrext_cmds\"
24409d0ccd10Smrg
24419d0ccd10Smrg      # Only execute mode is allowed to have -dlopen flags.
24429d0ccd10Smrg      if test -n "$opt_dlopen" && test execute != "$opt_mode"; then
24439d0ccd10Smrg        func_error "unrecognized option '-dlopen'"
24449d0ccd10Smrg        $ECHO "$help" 1>&2
24459d0ccd10Smrg        exit $EXIT_FAILURE
24469d0ccd10Smrg      fi
24479d0ccd10Smrg
24489d0ccd10Smrg      # Change the help message to a mode-specific one.
24499d0ccd10Smrg      generic_help=$help
24509d0ccd10Smrg      help="Try '$progname --help --mode=$opt_mode' for more information."
24519d0ccd10Smrg    }
24529d0ccd10Smrg
24539d0ccd10Smrg    # Pass back the unparsed argument list
24549d0ccd10Smrg    func_quote_for_eval ${1+"$@"}
24559d0ccd10Smrg    libtool_validate_options_result=$func_quote_for_eval_result
2456c63293b5Smrg}
24579d0ccd10Smrgfunc_add_hook func_validate_options libtool_validate_options
24589d0ccd10Smrg
2459e169010aSmrg
24609d0ccd10Smrg# Process options as early as possible so that --help and --version
24619d0ccd10Smrg# can return quickly.
24629d0ccd10Smrgfunc_options ${1+"$@"}
24639d0ccd10Smrgeval set dummy "$func_options_result"; shift
2464e169010aSmrg
24657914d74bSmrg
24667914d74bSmrg
2467c63293b5Smrg## ----------- ##
2468c63293b5Smrg##    Main.    ##
2469c63293b5Smrg## ----------- ##
24707914d74bSmrg
24719d0ccd10Smrgmagic='%%%MAGIC variable%%%'
24729d0ccd10Smrgmagic_exe='%%%MAGIC EXE variable%%%'
24739d0ccd10Smrg
24749d0ccd10Smrg# Global variables.
24759d0ccd10Smrgextracted_archives=
24769d0ccd10Smrgextracted_serial=0
24779d0ccd10Smrg
24789d0ccd10Smrg# If this variable is set in any of the actions, the command in it
24799d0ccd10Smrg# will be execed at the end.  This prevents here-documents from being
24809d0ccd10Smrg# left over by shells.
24819d0ccd10Smrgexec_cmd=
24829d0ccd10Smrg
24839d0ccd10Smrg
24849d0ccd10Smrg# A function that is used when there is no print builtin or printf.
24859d0ccd10Smrgfunc_fallback_echo ()
24869d0ccd10Smrg{
24879d0ccd10Smrg  eval 'cat <<_LTECHO_EOF
24889d0ccd10Smrg$1
24899d0ccd10Smrg_LTECHO_EOF'
24909d0ccd10Smrg}
24919d0ccd10Smrg
24929d0ccd10Smrg# func_generated_by_libtool
24939d0ccd10Smrg# True iff stdin has been generated by Libtool. This function is only
24949d0ccd10Smrg# a basic sanity check; it will hardly flush out determined imposters.
24959d0ccd10Smrgfunc_generated_by_libtool_p ()
24969d0ccd10Smrg{
24979d0ccd10Smrg  $GREP "^# Generated by .*$PACKAGE" > /dev/null 2>&1
24989d0ccd10Smrg}
24999d0ccd10Smrg
2500e169010aSmrg# func_lalib_p file
25019d0ccd10Smrg# True iff FILE is a libtool '.la' library or '.lo' object file.
2502e169010aSmrg# This function is only a basic sanity check; it will hardly flush out
2503e169010aSmrg# determined imposters.
2504e169010aSmrgfunc_lalib_p ()
2505e169010aSmrg{
2506e169010aSmrg    test -f "$1" &&
25079d0ccd10Smrg      $SED -e 4q "$1" 2>/dev/null | func_generated_by_libtool_p
2508e169010aSmrg}
25097914d74bSmrg
2510e169010aSmrg# func_lalib_unsafe_p file
25119d0ccd10Smrg# True iff FILE is a libtool '.la' library or '.lo' object file.
2512e169010aSmrg# This function implements the same check as func_lalib_p without
2513e169010aSmrg# resorting to external programs.  To this end, it redirects stdin and
2514e169010aSmrg# closes it afterwards, without saving the original file descriptor.
2515e169010aSmrg# As a safety measure, use it only where a negative result would be
25169d0ccd10Smrg# fatal anyway.  Works if 'file' does not exist.
2517e169010aSmrgfunc_lalib_unsafe_p ()
2518e169010aSmrg{
2519e169010aSmrg    lalib_p=no
2520e169010aSmrg    if test -f "$1" && test -r "$1" && exec 5<&0 <"$1"; then
2521e169010aSmrg	for lalib_p_l in 1 2 3 4
2522e169010aSmrg	do
2523e169010aSmrg	    read lalib_p_line
25249d0ccd10Smrg	    case $lalib_p_line in
2525e169010aSmrg		\#\ Generated\ by\ *$PACKAGE* ) lalib_p=yes; break;;
2526e169010aSmrg	    esac
2527e169010aSmrg	done
2528e169010aSmrg	exec 0<&5 5<&-
2529e169010aSmrg    fi
25309d0ccd10Smrg    test yes = "$lalib_p"
2531e169010aSmrg}
25327914d74bSmrg
2533e169010aSmrg# func_ltwrapper_script_p file
2534e169010aSmrg# True iff FILE is a libtool wrapper script
2535e169010aSmrg# This function is only a basic sanity check; it will hardly flush out
2536e169010aSmrg# determined imposters.
2537e169010aSmrgfunc_ltwrapper_script_p ()
2538e169010aSmrg{
25399d0ccd10Smrg    test -f "$1" &&
25409d0ccd10Smrg      $lt_truncate_bin < "$1" 2>/dev/null | func_generated_by_libtool_p
2541e169010aSmrg}
25427914d74bSmrg
2543e169010aSmrg# func_ltwrapper_executable_p file
2544e169010aSmrg# True iff FILE is a libtool wrapper executable
2545e169010aSmrg# This function is only a basic sanity check; it will hardly flush out
2546e169010aSmrg# determined imposters.
2547e169010aSmrgfunc_ltwrapper_executable_p ()
2548e169010aSmrg{
2549e169010aSmrg    func_ltwrapper_exec_suffix=
2550e169010aSmrg    case $1 in
2551e169010aSmrg    *.exe) ;;
2552e169010aSmrg    *) func_ltwrapper_exec_suffix=.exe ;;
2553e169010aSmrg    esac
2554e169010aSmrg    $GREP "$magic_exe" "$1$func_ltwrapper_exec_suffix" >/dev/null 2>&1
2555e169010aSmrg}
25567914d74bSmrg
2557e169010aSmrg# func_ltwrapper_scriptname file
2558e169010aSmrg# Assumes file is an ltwrapper_executable
2559e169010aSmrg# uses $file to determine the appropriate filename for a
2560e169010aSmrg# temporary ltwrapper_script.
2561e169010aSmrgfunc_ltwrapper_scriptname ()
2562e169010aSmrg{
2563c63293b5Smrg    func_dirname_and_basename "$1" "" "."
2564c63293b5Smrg    func_stripname '' '.exe' "$func_basename_result"
25659d0ccd10Smrg    func_ltwrapper_scriptname_result=$func_dirname_result/$objdir/${func_stripname_result}_ltshwrapper
2566e169010aSmrg}
25677914d74bSmrg
2568e169010aSmrg# func_ltwrapper_p file
2569e169010aSmrg# True iff FILE is a libtool wrapper script or wrapper executable
2570e169010aSmrg# This function is only a basic sanity check; it will hardly flush out
2571e169010aSmrg# determined imposters.
2572e169010aSmrgfunc_ltwrapper_p ()
2573e169010aSmrg{
2574e169010aSmrg    func_ltwrapper_script_p "$1" || func_ltwrapper_executable_p "$1"
2575e169010aSmrg}
25767914d74bSmrg
25777914d74bSmrg
2578e169010aSmrg# func_execute_cmds commands fail_cmd
2579e169010aSmrg# Execute tilde-delimited COMMANDS.
2580e169010aSmrg# If FAIL_CMD is given, eval that upon failure.
2581e169010aSmrg# FAIL_CMD may read-access the current command in variable CMD!
2582e169010aSmrgfunc_execute_cmds ()
2583e169010aSmrg{
25849d0ccd10Smrg    $debug_cmd
25859d0ccd10Smrg
2586e169010aSmrg    save_ifs=$IFS; IFS='~'
2587e169010aSmrg    for cmd in $1; do
25889d0ccd10Smrg      IFS=$sp$nl
2589e169010aSmrg      eval cmd=\"$cmd\"
25909d0ccd10Smrg      IFS=$save_ifs
2591e169010aSmrg      func_show_eval "$cmd" "${2-:}"
2592e169010aSmrg    done
2593e169010aSmrg    IFS=$save_ifs
2594e169010aSmrg}
2595e169010aSmrg
2596e169010aSmrg
2597e169010aSmrg# func_source file
2598e169010aSmrg# Source FILE, adding directory component if necessary.
2599e169010aSmrg# Note that it is not necessary on cygwin/mingw to append a dot to
2600e169010aSmrg# FILE even if both FILE and FILE.exe exist: automatic-append-.exe
2601e169010aSmrg# behavior happens only for exec(3), not for open(2)!  Also, sourcing
26029d0ccd10Smrg# 'FILE.' does not work on cygwin managed mounts.
2603e169010aSmrgfunc_source ()
2604e169010aSmrg{
26059d0ccd10Smrg    $debug_cmd
26069d0ccd10Smrg
2607e169010aSmrg    case $1 in
2608e169010aSmrg    */* | *\\*)	. "$1" ;;
2609e169010aSmrg    *)		. "./$1" ;;
2610e169010aSmrg    esac
2611e169010aSmrg}
2612e169010aSmrg
2613e169010aSmrg
2614c63293b5Smrg# func_resolve_sysroot PATH
2615c63293b5Smrg# Replace a leading = in PATH with a sysroot.  Store the result into
2616c63293b5Smrg# func_resolve_sysroot_result
2617c63293b5Smrgfunc_resolve_sysroot ()
2618c63293b5Smrg{
2619c63293b5Smrg  func_resolve_sysroot_result=$1
2620c63293b5Smrg  case $func_resolve_sysroot_result in
2621c63293b5Smrg  =*)
2622c63293b5Smrg    func_stripname '=' '' "$func_resolve_sysroot_result"
2623c63293b5Smrg    func_resolve_sysroot_result=$lt_sysroot$func_stripname_result
2624c63293b5Smrg    ;;
2625c63293b5Smrg  esac
2626c63293b5Smrg}
2627c63293b5Smrg
2628c63293b5Smrg# func_replace_sysroot PATH
2629c63293b5Smrg# If PATH begins with the sysroot, replace it with = and
2630c63293b5Smrg# store the result into func_replace_sysroot_result.
2631c63293b5Smrgfunc_replace_sysroot ()
2632c63293b5Smrg{
26339d0ccd10Smrg  case $lt_sysroot:$1 in
2634c63293b5Smrg  ?*:"$lt_sysroot"*)
2635c63293b5Smrg    func_stripname "$lt_sysroot" '' "$1"
26369d0ccd10Smrg    func_replace_sysroot_result='='$func_stripname_result
2637c63293b5Smrg    ;;
2638c63293b5Smrg  *)
2639c63293b5Smrg    # Including no sysroot.
2640c63293b5Smrg    func_replace_sysroot_result=$1
2641c63293b5Smrg    ;;
2642c63293b5Smrg  esac
2643c63293b5Smrg}
2644c63293b5Smrg
2645e169010aSmrg# func_infer_tag arg
2646e169010aSmrg# Infer tagged configuration to use if any are available and
2647e169010aSmrg# if one wasn't chosen via the "--tag" command line option.
2648e169010aSmrg# Only attempt this if the compiler in the base compile
2649e169010aSmrg# command doesn't match the default compiler.
2650e169010aSmrg# arg is usually of the form 'gcc ...'
2651e169010aSmrgfunc_infer_tag ()
2652e169010aSmrg{
26539d0ccd10Smrg    $debug_cmd
26549d0ccd10Smrg
2655e169010aSmrg    if test -n "$available_tags" && test -z "$tagname"; then
2656e169010aSmrg      CC_quoted=
2657e169010aSmrg      for arg in $CC; do
2658c63293b5Smrg	func_append_quoted CC_quoted "$arg"
2659e169010aSmrg      done
2660e8ead290Smrg      CC_expanded=`func_echo_all $CC`
2661e8ead290Smrg      CC_quoted_expanded=`func_echo_all $CC_quoted`
2662e169010aSmrg      case $@ in
2663e169010aSmrg      # Blanks in the command may have been stripped by the calling shell,
2664e169010aSmrg      # but not from the CC environment variable when configure was run.
2665e8ead290Smrg      " $CC "* | "$CC "* | " $CC_expanded "* | "$CC_expanded "* | \
2666e8ead290Smrg      " $CC_quoted"* | "$CC_quoted "* | " $CC_quoted_expanded "* | "$CC_quoted_expanded "*) ;;
2667e169010aSmrg      # Blanks at the start of $base_compile will cause this to fail
2668e169010aSmrg      # if we don't check for them as well.
2669e169010aSmrg      *)
2670e169010aSmrg	for z in $available_tags; do
2671e169010aSmrg	  if $GREP "^# ### BEGIN LIBTOOL TAG CONFIG: $z$" < "$progpath" > /dev/null; then
2672e169010aSmrg	    # Evaluate the configuration.
26739d0ccd10Smrg	    eval "`$SED -n -e '/^# ### BEGIN LIBTOOL TAG CONFIG: '$z'$/,/^# ### END LIBTOOL TAG CONFIG: '$z'$/p' < $progpath`"
2674e169010aSmrg	    CC_quoted=
2675e169010aSmrg	    for arg in $CC; do
2676e169010aSmrg	      # Double-quote args containing other shell metacharacters.
2677c63293b5Smrg	      func_append_quoted CC_quoted "$arg"
2678e169010aSmrg	    done
2679e8ead290Smrg	    CC_expanded=`func_echo_all $CC`
2680e8ead290Smrg	    CC_quoted_expanded=`func_echo_all $CC_quoted`
2681e169010aSmrg	    case "$@ " in
2682e8ead290Smrg	    " $CC "* | "$CC "* | " $CC_expanded "* | "$CC_expanded "* | \
2683e8ead290Smrg	    " $CC_quoted"* | "$CC_quoted "* | " $CC_quoted_expanded "* | "$CC_quoted_expanded "*)
2684e169010aSmrg	      # The compiler in the base compile command matches
2685e169010aSmrg	      # the one in the tagged configuration.
2686e169010aSmrg	      # Assume this is the tagged configuration we want.
2687e169010aSmrg	      tagname=$z
2688e169010aSmrg	      break
2689e169010aSmrg	      ;;
26907914d74bSmrg	    esac
2691e169010aSmrg	  fi
2692e169010aSmrg	done
2693e169010aSmrg	# If $tagname still isn't set, then no tagged configuration
2694e169010aSmrg	# was found and let the user know that the "--tag" command
2695e169010aSmrg	# line option must be used.
2696e169010aSmrg	if test -z "$tagname"; then
2697e169010aSmrg	  func_echo "unable to infer tagged configuration"
26989d0ccd10Smrg	  func_fatal_error "specify a tag with '--tag'"
2699e169010aSmrg#	else
2700e169010aSmrg#	  func_verbose "using $tagname tagged configuration"
2701e169010aSmrg	fi
2702e169010aSmrg	;;
2703e169010aSmrg      esac
2704e169010aSmrg    fi
2705e169010aSmrg}
2706e169010aSmrg
2707e169010aSmrg
2708e169010aSmrg
2709c63293b5Smrg# func_write_libtool_object output_name pic_name nonpic_name
2710c63293b5Smrg# Create a libtool object file (analogous to a ".la" file),
2711c63293b5Smrg# but don't create it if we're doing a dry run.
2712c63293b5Smrgfunc_write_libtool_object ()
2713c63293b5Smrg{
27149d0ccd10Smrg    write_libobj=$1
27159d0ccd10Smrg    if test yes = "$build_libtool_libs"; then
27169d0ccd10Smrg      write_lobj=\'$2\'
2717c63293b5Smrg    else
2718c63293b5Smrg      write_lobj=none
2719c63293b5Smrg    fi
2720c63293b5Smrg
27219d0ccd10Smrg    if test yes = "$build_old_libs"; then
27229d0ccd10Smrg      write_oldobj=\'$3\'
2723c63293b5Smrg    else
2724c63293b5Smrg      write_oldobj=none
2725c63293b5Smrg    fi
2726c63293b5Smrg
2727c63293b5Smrg    $opt_dry_run || {
2728c63293b5Smrg      cat >${write_libobj}T <<EOF
2729c63293b5Smrg# $write_libobj - a libtool object file
27309d0ccd10Smrg# Generated by $PROGRAM (GNU $PACKAGE) $VERSION
2731c63293b5Smrg#
2732c63293b5Smrg# Please DO NOT delete this file!
2733c63293b5Smrg# It is necessary for linking the library.
2734c63293b5Smrg
2735c63293b5Smrg# Name of the PIC object.
2736c63293b5Smrgpic_object=$write_lobj
2737c63293b5Smrg
2738c63293b5Smrg# Name of the non-PIC object
2739c63293b5Smrgnon_pic_object=$write_oldobj
2740c63293b5Smrg
2741c63293b5SmrgEOF
27429d0ccd10Smrg      $MV "${write_libobj}T" "$write_libobj"
2743c63293b5Smrg    }
2744c63293b5Smrg}
2745c63293b5Smrg
2746c63293b5Smrg
2747c63293b5Smrg##################################################
2748c63293b5Smrg# FILE NAME AND PATH CONVERSION HELPER FUNCTIONS #
2749c63293b5Smrg##################################################
2750c63293b5Smrg
2751c63293b5Smrg# func_convert_core_file_wine_to_w32 ARG
2752c63293b5Smrg# Helper function used by file name conversion functions when $build is *nix,
2753c63293b5Smrg# and $host is mingw, cygwin, or some other w32 environment. Relies on a
2754c63293b5Smrg# correctly configured wine environment available, with the winepath program
2755c63293b5Smrg# in $build's $PATH.
2756c63293b5Smrg#
2757c63293b5Smrg# ARG is the $build file name to be converted to w32 format.
2758c63293b5Smrg# Result is available in $func_convert_core_file_wine_to_w32_result, and will
2759c63293b5Smrg# be empty on error (or when ARG is empty)
2760c63293b5Smrgfunc_convert_core_file_wine_to_w32 ()
2761c63293b5Smrg{
27629d0ccd10Smrg  $debug_cmd
27639d0ccd10Smrg
27649d0ccd10Smrg  func_convert_core_file_wine_to_w32_result=$1
2765c63293b5Smrg  if test -n "$1"; then
2766c63293b5Smrg    # Unfortunately, winepath does not exit with a non-zero error code, so we
2767c63293b5Smrg    # are forced to check the contents of stdout. On the other hand, if the
2768c63293b5Smrg    # command is not found, the shell will set an exit code of 127 and print
2769c63293b5Smrg    # *an error message* to stdout. So we must check for both error code of
2770c63293b5Smrg    # zero AND non-empty stdout, which explains the odd construction:
2771c63293b5Smrg    func_convert_core_file_wine_to_w32_tmp=`winepath -w "$1" 2>/dev/null`
27729d0ccd10Smrg    if test "$?" -eq 0 && test -n "$func_convert_core_file_wine_to_w32_tmp"; then
2773c63293b5Smrg      func_convert_core_file_wine_to_w32_result=`$ECHO "$func_convert_core_file_wine_to_w32_tmp" |
27749d0ccd10Smrg        $SED -e "$sed_naive_backslashify"`
2775c63293b5Smrg    else
2776c63293b5Smrg      func_convert_core_file_wine_to_w32_result=
2777c63293b5Smrg    fi
2778c63293b5Smrg  fi
2779c63293b5Smrg}
2780c63293b5Smrg# end: func_convert_core_file_wine_to_w32
2781c63293b5Smrg
2782c63293b5Smrg
2783c63293b5Smrg# func_convert_core_path_wine_to_w32 ARG
2784c63293b5Smrg# Helper function used by path conversion functions when $build is *nix, and
2785c63293b5Smrg# $host is mingw, cygwin, or some other w32 environment. Relies on a correctly
2786c63293b5Smrg# configured wine environment available, with the winepath program in $build's
2787c63293b5Smrg# $PATH. Assumes ARG has no leading or trailing path separator characters.
2788c63293b5Smrg#
2789c63293b5Smrg# ARG is path to be converted from $build format to win32.
2790c63293b5Smrg# Result is available in $func_convert_core_path_wine_to_w32_result.
2791c63293b5Smrg# Unconvertible file (directory) names in ARG are skipped; if no directory names
2792c63293b5Smrg# are convertible, then the result may be empty.
2793c63293b5Smrgfunc_convert_core_path_wine_to_w32 ()
2794c63293b5Smrg{
27959d0ccd10Smrg  $debug_cmd
27969d0ccd10Smrg
2797c63293b5Smrg  # unfortunately, winepath doesn't convert paths, only file names
27989d0ccd10Smrg  func_convert_core_path_wine_to_w32_result=
2799c63293b5Smrg  if test -n "$1"; then
2800c63293b5Smrg    oldIFS=$IFS
2801c63293b5Smrg    IFS=:
2802c63293b5Smrg    for func_convert_core_path_wine_to_w32_f in $1; do
2803c63293b5Smrg      IFS=$oldIFS
2804c63293b5Smrg      func_convert_core_file_wine_to_w32 "$func_convert_core_path_wine_to_w32_f"
28059d0ccd10Smrg      if test -n "$func_convert_core_file_wine_to_w32_result"; then
2806c63293b5Smrg        if test -z "$func_convert_core_path_wine_to_w32_result"; then
28079d0ccd10Smrg          func_convert_core_path_wine_to_w32_result=$func_convert_core_file_wine_to_w32_result
2808c63293b5Smrg        else
2809c63293b5Smrg          func_append func_convert_core_path_wine_to_w32_result ";$func_convert_core_file_wine_to_w32_result"
2810c63293b5Smrg        fi
2811c63293b5Smrg      fi
2812c63293b5Smrg    done
2813c63293b5Smrg    IFS=$oldIFS
2814c63293b5Smrg  fi
2815c63293b5Smrg}
2816c63293b5Smrg# end: func_convert_core_path_wine_to_w32
2817c63293b5Smrg
2818c63293b5Smrg
2819c63293b5Smrg# func_cygpath ARGS...
2820c63293b5Smrg# Wrapper around calling the cygpath program via LT_CYGPATH. This is used when
2821c63293b5Smrg# when (1) $build is *nix and Cygwin is hosted via a wine environment; or (2)
2822c63293b5Smrg# $build is MSYS and $host is Cygwin, or (3) $build is Cygwin. In case (1) or
2823c63293b5Smrg# (2), returns the Cygwin file name or path in func_cygpath_result (input
2824c63293b5Smrg# file name or path is assumed to be in w32 format, as previously converted
2825c63293b5Smrg# from $build's *nix or MSYS format). In case (3), returns the w32 file name
2826c63293b5Smrg# or path in func_cygpath_result (input file name or path is assumed to be in
2827c63293b5Smrg# Cygwin format). Returns an empty string on error.
2828c63293b5Smrg#
2829c63293b5Smrg# ARGS are passed to cygpath, with the last one being the file name or path to
2830c63293b5Smrg# be converted.
2831c63293b5Smrg#
2832c63293b5Smrg# Specify the absolute *nix (or w32) name to cygpath in the LT_CYGPATH
2833c63293b5Smrg# environment variable; do not put it in $PATH.
2834c63293b5Smrgfunc_cygpath ()
2835c63293b5Smrg{
28369d0ccd10Smrg  $debug_cmd
28379d0ccd10Smrg
2838c63293b5Smrg  if test -n "$LT_CYGPATH" && test -f "$LT_CYGPATH"; then
2839c63293b5Smrg    func_cygpath_result=`$LT_CYGPATH "$@" 2>/dev/null`
2840c63293b5Smrg    if test "$?" -ne 0; then
2841c63293b5Smrg      # on failure, ensure result is empty
2842c63293b5Smrg      func_cygpath_result=
2843c63293b5Smrg    fi
2844c63293b5Smrg  else
2845c63293b5Smrg    func_cygpath_result=
28469d0ccd10Smrg    func_error "LT_CYGPATH is empty or specifies non-existent file: '$LT_CYGPATH'"
2847c63293b5Smrg  fi
2848c63293b5Smrg}
2849c63293b5Smrg#end: func_cygpath
2850c63293b5Smrg
2851c63293b5Smrg
2852c63293b5Smrg# func_convert_core_msys_to_w32 ARG
2853c63293b5Smrg# Convert file name or path ARG from MSYS format to w32 format.  Return
2854c63293b5Smrg# result in func_convert_core_msys_to_w32_result.
2855c63293b5Smrgfunc_convert_core_msys_to_w32 ()
2856c63293b5Smrg{
28579d0ccd10Smrg  $debug_cmd
28589d0ccd10Smrg
2859c63293b5Smrg  # awkward: cmd appends spaces to result
2860c63293b5Smrg  func_convert_core_msys_to_w32_result=`( cmd //c echo "$1" ) 2>/dev/null |
28619d0ccd10Smrg    $SED -e 's/[ ]*$//' -e "$sed_naive_backslashify"`
2862c63293b5Smrg}
2863c63293b5Smrg#end: func_convert_core_msys_to_w32
2864c63293b5Smrg
2865c63293b5Smrg
2866c63293b5Smrg# func_convert_file_check ARG1 ARG2
2867c63293b5Smrg# Verify that ARG1 (a file name in $build format) was converted to $host
2868c63293b5Smrg# format in ARG2. Otherwise, emit an error message, but continue (resetting
2869c63293b5Smrg# func_to_host_file_result to ARG1).
2870c63293b5Smrgfunc_convert_file_check ()
2871c63293b5Smrg{
28729d0ccd10Smrg  $debug_cmd
28739d0ccd10Smrg
28749d0ccd10Smrg  if test -z "$2" && test -n "$1"; then
2875c63293b5Smrg    func_error "Could not determine host file name corresponding to"
28769d0ccd10Smrg    func_error "  '$1'"
2877c63293b5Smrg    func_error "Continuing, but uninstalled executables may not work."
2878c63293b5Smrg    # Fallback:
28799d0ccd10Smrg    func_to_host_file_result=$1
2880c63293b5Smrg  fi
2881c63293b5Smrg}
2882c63293b5Smrg# end func_convert_file_check
2883c63293b5Smrg
2884c63293b5Smrg
2885c63293b5Smrg# func_convert_path_check FROM_PATHSEP TO_PATHSEP FROM_PATH TO_PATH
2886c63293b5Smrg# Verify that FROM_PATH (a path in $build format) was converted to $host
2887c63293b5Smrg# format in TO_PATH. Otherwise, emit an error message, but continue, resetting
2888c63293b5Smrg# func_to_host_file_result to a simplistic fallback value (see below).
2889c63293b5Smrgfunc_convert_path_check ()
2890c63293b5Smrg{
28919d0ccd10Smrg  $debug_cmd
28929d0ccd10Smrg
2893c63293b5Smrg  if test -z "$4" && test -n "$3"; then
2894c63293b5Smrg    func_error "Could not determine the host path corresponding to"
28959d0ccd10Smrg    func_error "  '$3'"
2896c63293b5Smrg    func_error "Continuing, but uninstalled executables may not work."
2897c63293b5Smrg    # Fallback.  This is a deliberately simplistic "conversion" and
2898c63293b5Smrg    # should not be "improved".  See libtool.info.
2899c63293b5Smrg    if test "x$1" != "x$2"; then
2900c63293b5Smrg      lt_replace_pathsep_chars="s|$1|$2|g"
2901c63293b5Smrg      func_to_host_path_result=`echo "$3" |
2902c63293b5Smrg        $SED -e "$lt_replace_pathsep_chars"`
2903c63293b5Smrg    else
29049d0ccd10Smrg      func_to_host_path_result=$3
2905c63293b5Smrg    fi
2906c63293b5Smrg  fi
2907c63293b5Smrg}
2908c63293b5Smrg# end func_convert_path_check
2909c63293b5Smrg
2910c63293b5Smrg
2911c63293b5Smrg# func_convert_path_front_back_pathsep FRONTPAT BACKPAT REPL ORIG
2912c63293b5Smrg# Modifies func_to_host_path_result by prepending REPL if ORIG matches FRONTPAT
2913c63293b5Smrg# and appending REPL if ORIG matches BACKPAT.
2914c63293b5Smrgfunc_convert_path_front_back_pathsep ()
2915c63293b5Smrg{
29169d0ccd10Smrg  $debug_cmd
29179d0ccd10Smrg
2918c63293b5Smrg  case $4 in
29199d0ccd10Smrg  $1 ) func_to_host_path_result=$3$func_to_host_path_result
2920c63293b5Smrg    ;;
2921c63293b5Smrg  esac
2922c63293b5Smrg  case $4 in
2923c63293b5Smrg  $2 ) func_append func_to_host_path_result "$3"
2924c63293b5Smrg    ;;
2925c63293b5Smrg  esac
2926c63293b5Smrg}
2927c63293b5Smrg# end func_convert_path_front_back_pathsep
2928c63293b5Smrg
2929c63293b5Smrg
2930c63293b5Smrg##################################################
2931c63293b5Smrg# $build to $host FILE NAME CONVERSION FUNCTIONS #
2932c63293b5Smrg##################################################
29339d0ccd10Smrg# invoked via '$to_host_file_cmd ARG'
2934c63293b5Smrg#
2935c63293b5Smrg# In each case, ARG is the path to be converted from $build to $host format.
2936c63293b5Smrg# Result will be available in $func_to_host_file_result.
2937c63293b5Smrg
2938c63293b5Smrg
2939c63293b5Smrg# func_to_host_file ARG
2940c63293b5Smrg# Converts the file name ARG from $build format to $host format. Return result
2941c63293b5Smrg# in func_to_host_file_result.
2942c63293b5Smrgfunc_to_host_file ()
2943c63293b5Smrg{
29449d0ccd10Smrg  $debug_cmd
29459d0ccd10Smrg
2946c63293b5Smrg  $to_host_file_cmd "$1"
2947c63293b5Smrg}
2948c63293b5Smrg# end func_to_host_file
2949c63293b5Smrg
2950c63293b5Smrg
2951c63293b5Smrg# func_to_tool_file ARG LAZY
2952c63293b5Smrg# converts the file name ARG from $build format to toolchain format. Return
2953c63293b5Smrg# result in func_to_tool_file_result.  If the conversion in use is listed
2954c63293b5Smrg# in (the comma separated) LAZY, no conversion takes place.
2955c63293b5Smrgfunc_to_tool_file ()
2956c63293b5Smrg{
29579d0ccd10Smrg  $debug_cmd
29589d0ccd10Smrg
2959c63293b5Smrg  case ,$2, in
2960c63293b5Smrg    *,"$to_tool_file_cmd",*)
2961c63293b5Smrg      func_to_tool_file_result=$1
2962c63293b5Smrg      ;;
2963c63293b5Smrg    *)
2964c63293b5Smrg      $to_tool_file_cmd "$1"
2965c63293b5Smrg      func_to_tool_file_result=$func_to_host_file_result
2966c63293b5Smrg      ;;
2967c63293b5Smrg  esac
2968c63293b5Smrg}
2969c63293b5Smrg# end func_to_tool_file
2970c63293b5Smrg
2971c63293b5Smrg
2972c63293b5Smrg# func_convert_file_noop ARG
2973c63293b5Smrg# Copy ARG to func_to_host_file_result.
2974c63293b5Smrgfunc_convert_file_noop ()
2975c63293b5Smrg{
29769d0ccd10Smrg  func_to_host_file_result=$1
2977c63293b5Smrg}
2978c63293b5Smrg# end func_convert_file_noop
2979c63293b5Smrg
2980c63293b5Smrg
2981c63293b5Smrg# func_convert_file_msys_to_w32 ARG
2982c63293b5Smrg# Convert file name ARG from (mingw) MSYS to (mingw) w32 format; automatic
2983c63293b5Smrg# conversion to w32 is not available inside the cwrapper.  Returns result in
2984c63293b5Smrg# func_to_host_file_result.
2985c63293b5Smrgfunc_convert_file_msys_to_w32 ()
2986c63293b5Smrg{
29879d0ccd10Smrg  $debug_cmd
29889d0ccd10Smrg
29899d0ccd10Smrg  func_to_host_file_result=$1
2990c63293b5Smrg  if test -n "$1"; then
2991c63293b5Smrg    func_convert_core_msys_to_w32 "$1"
29929d0ccd10Smrg    func_to_host_file_result=$func_convert_core_msys_to_w32_result
2993c63293b5Smrg  fi
2994c63293b5Smrg  func_convert_file_check "$1" "$func_to_host_file_result"
2995c63293b5Smrg}
2996c63293b5Smrg# end func_convert_file_msys_to_w32
2997c63293b5Smrg
2998c63293b5Smrg
2999c63293b5Smrg# func_convert_file_cygwin_to_w32 ARG
3000c63293b5Smrg# Convert file name ARG from Cygwin to w32 format.  Returns result in
3001c63293b5Smrg# func_to_host_file_result.
3002c63293b5Smrgfunc_convert_file_cygwin_to_w32 ()
3003c63293b5Smrg{
30049d0ccd10Smrg  $debug_cmd
30059d0ccd10Smrg
30069d0ccd10Smrg  func_to_host_file_result=$1
3007c63293b5Smrg  if test -n "$1"; then
3008c63293b5Smrg    # because $build is cygwin, we call "the" cygpath in $PATH; no need to use
3009c63293b5Smrg    # LT_CYGPATH in this case.
3010c63293b5Smrg    func_to_host_file_result=`cygpath -m "$1"`
3011c63293b5Smrg  fi
3012c63293b5Smrg  func_convert_file_check "$1" "$func_to_host_file_result"
3013c63293b5Smrg}
3014c63293b5Smrg# end func_convert_file_cygwin_to_w32
3015c63293b5Smrg
3016c63293b5Smrg
3017c63293b5Smrg# func_convert_file_nix_to_w32 ARG
3018c63293b5Smrg# Convert file name ARG from *nix to w32 format.  Requires a wine environment
3019c63293b5Smrg# and a working winepath. Returns result in func_to_host_file_result.
3020c63293b5Smrgfunc_convert_file_nix_to_w32 ()
3021c63293b5Smrg{
30229d0ccd10Smrg  $debug_cmd
30239d0ccd10Smrg
30249d0ccd10Smrg  func_to_host_file_result=$1
3025c63293b5Smrg  if test -n "$1"; then
3026c63293b5Smrg    func_convert_core_file_wine_to_w32 "$1"
30279d0ccd10Smrg    func_to_host_file_result=$func_convert_core_file_wine_to_w32_result
3028c63293b5Smrg  fi
3029c63293b5Smrg  func_convert_file_check "$1" "$func_to_host_file_result"
3030c63293b5Smrg}
3031c63293b5Smrg# end func_convert_file_nix_to_w32
3032c63293b5Smrg
3033c63293b5Smrg
3034c63293b5Smrg# func_convert_file_msys_to_cygwin ARG
3035c63293b5Smrg# Convert file name ARG from MSYS to Cygwin format.  Requires LT_CYGPATH set.
3036c63293b5Smrg# Returns result in func_to_host_file_result.
3037c63293b5Smrgfunc_convert_file_msys_to_cygwin ()
3038c63293b5Smrg{
30399d0ccd10Smrg  $debug_cmd
30409d0ccd10Smrg
30419d0ccd10Smrg  func_to_host_file_result=$1
3042c63293b5Smrg  if test -n "$1"; then
3043c63293b5Smrg    func_convert_core_msys_to_w32 "$1"
3044c63293b5Smrg    func_cygpath -u "$func_convert_core_msys_to_w32_result"
30459d0ccd10Smrg    func_to_host_file_result=$func_cygpath_result
3046c63293b5Smrg  fi
3047c63293b5Smrg  func_convert_file_check "$1" "$func_to_host_file_result"
3048c63293b5Smrg}
3049c63293b5Smrg# end func_convert_file_msys_to_cygwin
3050c63293b5Smrg
3051c63293b5Smrg
3052c63293b5Smrg# func_convert_file_nix_to_cygwin ARG
3053c63293b5Smrg# Convert file name ARG from *nix to Cygwin format.  Requires Cygwin installed
3054c63293b5Smrg# in a wine environment, working winepath, and LT_CYGPATH set.  Returns result
3055c63293b5Smrg# in func_to_host_file_result.
3056c63293b5Smrgfunc_convert_file_nix_to_cygwin ()
3057c63293b5Smrg{
30589d0ccd10Smrg  $debug_cmd
30599d0ccd10Smrg
30609d0ccd10Smrg  func_to_host_file_result=$1
3061c63293b5Smrg  if test -n "$1"; then
3062c63293b5Smrg    # convert from *nix to w32, then use cygpath to convert from w32 to cygwin.
3063c63293b5Smrg    func_convert_core_file_wine_to_w32 "$1"
3064c63293b5Smrg    func_cygpath -u "$func_convert_core_file_wine_to_w32_result"
30659d0ccd10Smrg    func_to_host_file_result=$func_cygpath_result
3066c63293b5Smrg  fi
3067c63293b5Smrg  func_convert_file_check "$1" "$func_to_host_file_result"
3068c63293b5Smrg}
3069c63293b5Smrg# end func_convert_file_nix_to_cygwin
3070c63293b5Smrg
3071c63293b5Smrg
3072c63293b5Smrg#############################################
3073c63293b5Smrg# $build to $host PATH CONVERSION FUNCTIONS #
3074c63293b5Smrg#############################################
30759d0ccd10Smrg# invoked via '$to_host_path_cmd ARG'
3076c63293b5Smrg#
3077c63293b5Smrg# In each case, ARG is the path to be converted from $build to $host format.
3078c63293b5Smrg# The result will be available in $func_to_host_path_result.
3079c63293b5Smrg#
3080c63293b5Smrg# Path separators are also converted from $build format to $host format.  If
3081c63293b5Smrg# ARG begins or ends with a path separator character, it is preserved (but
3082c63293b5Smrg# converted to $host format) on output.
3083c63293b5Smrg#
3084c63293b5Smrg# All path conversion functions are named using the following convention:
3085c63293b5Smrg#   file name conversion function    : func_convert_file_X_to_Y ()
3086c63293b5Smrg#   path conversion function         : func_convert_path_X_to_Y ()
3087c63293b5Smrg# where, for any given $build/$host combination the 'X_to_Y' value is the
3088c63293b5Smrg# same.  If conversion functions are added for new $build/$host combinations,
3089c63293b5Smrg# the two new functions must follow this pattern, or func_init_to_host_path_cmd
3090c63293b5Smrg# will break.
3091c63293b5Smrg
3092c63293b5Smrg
3093c63293b5Smrg# func_init_to_host_path_cmd
3094c63293b5Smrg# Ensures that function "pointer" variable $to_host_path_cmd is set to the
3095c63293b5Smrg# appropriate value, based on the value of $to_host_file_cmd.
3096c63293b5Smrgto_host_path_cmd=
3097c63293b5Smrgfunc_init_to_host_path_cmd ()
3098c63293b5Smrg{
30999d0ccd10Smrg  $debug_cmd
31009d0ccd10Smrg
3101c63293b5Smrg  if test -z "$to_host_path_cmd"; then
3102c63293b5Smrg    func_stripname 'func_convert_file_' '' "$to_host_file_cmd"
31039d0ccd10Smrg    to_host_path_cmd=func_convert_path_$func_stripname_result
3104c63293b5Smrg  fi
3105c63293b5Smrg}
3106c63293b5Smrg
3107c63293b5Smrg
3108c63293b5Smrg# func_to_host_path ARG
3109c63293b5Smrg# Converts the path ARG from $build format to $host format. Return result
3110c63293b5Smrg# in func_to_host_path_result.
3111c63293b5Smrgfunc_to_host_path ()
3112c63293b5Smrg{
31139d0ccd10Smrg  $debug_cmd
31149d0ccd10Smrg
3115c63293b5Smrg  func_init_to_host_path_cmd
3116c63293b5Smrg  $to_host_path_cmd "$1"
3117c63293b5Smrg}
3118c63293b5Smrg# end func_to_host_path
3119c63293b5Smrg
3120c63293b5Smrg
3121c63293b5Smrg# func_convert_path_noop ARG
3122c63293b5Smrg# Copy ARG to func_to_host_path_result.
3123c63293b5Smrgfunc_convert_path_noop ()
3124c63293b5Smrg{
31259d0ccd10Smrg  func_to_host_path_result=$1
3126c63293b5Smrg}
3127c63293b5Smrg# end func_convert_path_noop
3128c63293b5Smrg
3129c63293b5Smrg
3130c63293b5Smrg# func_convert_path_msys_to_w32 ARG
3131c63293b5Smrg# Convert path ARG from (mingw) MSYS to (mingw) w32 format; automatic
3132c63293b5Smrg# conversion to w32 is not available inside the cwrapper.  Returns result in
3133c63293b5Smrg# func_to_host_path_result.
3134c63293b5Smrgfunc_convert_path_msys_to_w32 ()
3135e169010aSmrg{
31369d0ccd10Smrg  $debug_cmd
31379d0ccd10Smrg
31389d0ccd10Smrg  func_to_host_path_result=$1
3139c63293b5Smrg  if test -n "$1"; then
3140c63293b5Smrg    # Remove leading and trailing path separator characters from ARG.  MSYS
3141c63293b5Smrg    # behavior is inconsistent here; cygpath turns them into '.;' and ';.';
3142c63293b5Smrg    # and winepath ignores them completely.
3143c63293b5Smrg    func_stripname : : "$1"
3144c63293b5Smrg    func_to_host_path_tmp1=$func_stripname_result
3145c63293b5Smrg    func_convert_core_msys_to_w32 "$func_to_host_path_tmp1"
31469d0ccd10Smrg    func_to_host_path_result=$func_convert_core_msys_to_w32_result
3147c63293b5Smrg    func_convert_path_check : ";" \
3148c63293b5Smrg      "$func_to_host_path_tmp1" "$func_to_host_path_result"
3149c63293b5Smrg    func_convert_path_front_back_pathsep ":*" "*:" ";" "$1"
3150c63293b5Smrg  fi
3151c63293b5Smrg}
3152c63293b5Smrg# end func_convert_path_msys_to_w32
3153e169010aSmrg
3154e169010aSmrg
3155c63293b5Smrg# func_convert_path_cygwin_to_w32 ARG
3156c63293b5Smrg# Convert path ARG from Cygwin to w32 format.  Returns result in
3157c63293b5Smrg# func_to_host_file_result.
3158c63293b5Smrgfunc_convert_path_cygwin_to_w32 ()
3159c63293b5Smrg{
31609d0ccd10Smrg  $debug_cmd
31619d0ccd10Smrg
31629d0ccd10Smrg  func_to_host_path_result=$1
3163c63293b5Smrg  if test -n "$1"; then
3164c63293b5Smrg    # See func_convert_path_msys_to_w32:
3165c63293b5Smrg    func_stripname : : "$1"
3166c63293b5Smrg    func_to_host_path_tmp1=$func_stripname_result
3167c63293b5Smrg    func_to_host_path_result=`cygpath -m -p "$func_to_host_path_tmp1"`
3168c63293b5Smrg    func_convert_path_check : ";" \
3169c63293b5Smrg      "$func_to_host_path_tmp1" "$func_to_host_path_result"
3170c63293b5Smrg    func_convert_path_front_back_pathsep ":*" "*:" ";" "$1"
3171c63293b5Smrg  fi
3172c63293b5Smrg}
3173c63293b5Smrg# end func_convert_path_cygwin_to_w32
3174e169010aSmrg
3175e169010aSmrg
3176c63293b5Smrg# func_convert_path_nix_to_w32 ARG
3177c63293b5Smrg# Convert path ARG from *nix to w32 format.  Requires a wine environment and
3178c63293b5Smrg# a working winepath.  Returns result in func_to_host_file_result.
3179c63293b5Smrgfunc_convert_path_nix_to_w32 ()
3180c63293b5Smrg{
31819d0ccd10Smrg  $debug_cmd
31829d0ccd10Smrg
31839d0ccd10Smrg  func_to_host_path_result=$1
3184c63293b5Smrg  if test -n "$1"; then
3185c63293b5Smrg    # See func_convert_path_msys_to_w32:
3186c63293b5Smrg    func_stripname : : "$1"
3187c63293b5Smrg    func_to_host_path_tmp1=$func_stripname_result
3188c63293b5Smrg    func_convert_core_path_wine_to_w32 "$func_to_host_path_tmp1"
31899d0ccd10Smrg    func_to_host_path_result=$func_convert_core_path_wine_to_w32_result
3190c63293b5Smrg    func_convert_path_check : ";" \
3191c63293b5Smrg      "$func_to_host_path_tmp1" "$func_to_host_path_result"
3192c63293b5Smrg    func_convert_path_front_back_pathsep ":*" "*:" ";" "$1"
3193c63293b5Smrg  fi
3194c63293b5Smrg}
3195c63293b5Smrg# end func_convert_path_nix_to_w32
3196e169010aSmrg
3197c63293b5Smrg
3198c63293b5Smrg# func_convert_path_msys_to_cygwin ARG
3199c63293b5Smrg# Convert path ARG from MSYS to Cygwin format.  Requires LT_CYGPATH set.
3200c63293b5Smrg# Returns result in func_to_host_file_result.
3201c63293b5Smrgfunc_convert_path_msys_to_cygwin ()
3202c63293b5Smrg{
32039d0ccd10Smrg  $debug_cmd
32049d0ccd10Smrg
32059d0ccd10Smrg  func_to_host_path_result=$1
3206c63293b5Smrg  if test -n "$1"; then
3207c63293b5Smrg    # See func_convert_path_msys_to_w32:
3208c63293b5Smrg    func_stripname : : "$1"
3209c63293b5Smrg    func_to_host_path_tmp1=$func_stripname_result
3210c63293b5Smrg    func_convert_core_msys_to_w32 "$func_to_host_path_tmp1"
3211c63293b5Smrg    func_cygpath -u -p "$func_convert_core_msys_to_w32_result"
32129d0ccd10Smrg    func_to_host_path_result=$func_cygpath_result
3213c63293b5Smrg    func_convert_path_check : : \
3214c63293b5Smrg      "$func_to_host_path_tmp1" "$func_to_host_path_result"
3215c63293b5Smrg    func_convert_path_front_back_pathsep ":*" "*:" : "$1"
3216c63293b5Smrg  fi
3217c63293b5Smrg}
3218c63293b5Smrg# end func_convert_path_msys_to_cygwin
3219c63293b5Smrg
3220c63293b5Smrg
3221c63293b5Smrg# func_convert_path_nix_to_cygwin ARG
3222c63293b5Smrg# Convert path ARG from *nix to Cygwin format.  Requires Cygwin installed in a
3223c63293b5Smrg# a wine environment, working winepath, and LT_CYGPATH set.  Returns result in
3224c63293b5Smrg# func_to_host_file_result.
3225c63293b5Smrgfunc_convert_path_nix_to_cygwin ()
3226c63293b5Smrg{
32279d0ccd10Smrg  $debug_cmd
32289d0ccd10Smrg
32299d0ccd10Smrg  func_to_host_path_result=$1
3230c63293b5Smrg  if test -n "$1"; then
3231c63293b5Smrg    # Remove leading and trailing path separator characters from
3232c63293b5Smrg    # ARG. msys behavior is inconsistent here, cygpath turns them
3233c63293b5Smrg    # into '.;' and ';.', and winepath ignores them completely.
3234c63293b5Smrg    func_stripname : : "$1"
3235c63293b5Smrg    func_to_host_path_tmp1=$func_stripname_result
3236c63293b5Smrg    func_convert_core_path_wine_to_w32 "$func_to_host_path_tmp1"
3237c63293b5Smrg    func_cygpath -u -p "$func_convert_core_path_wine_to_w32_result"
32389d0ccd10Smrg    func_to_host_path_result=$func_cygpath_result
3239c63293b5Smrg    func_convert_path_check : : \
3240c63293b5Smrg      "$func_to_host_path_tmp1" "$func_to_host_path_result"
3241c63293b5Smrg    func_convert_path_front_back_pathsep ":*" "*:" : "$1"
3242c63293b5Smrg  fi
3243e169010aSmrg}
3244c63293b5Smrg# end func_convert_path_nix_to_cygwin
3245c63293b5Smrg
3246e169010aSmrg
32479d0ccd10Smrg# func_dll_def_p FILE
32489d0ccd10Smrg# True iff FILE is a Windows DLL '.def' file.
32499d0ccd10Smrg# Keep in sync with _LT_DLL_DEF_P in libtool.m4
32509d0ccd10Smrgfunc_dll_def_p ()
32519d0ccd10Smrg{
32529d0ccd10Smrg  $debug_cmd
32539d0ccd10Smrg
32549d0ccd10Smrg  func_dll_def_p_tmp=`$SED -n \
32559d0ccd10Smrg    -e 's/^[	 ]*//' \
32569d0ccd10Smrg    -e '/^\(;.*\)*$/d' \
32579d0ccd10Smrg    -e 's/^\(EXPORTS\|LIBRARY\)\([	 ].*\)*$/DEF/p' \
32589d0ccd10Smrg    -e q \
32599d0ccd10Smrg    "$1"`
32609d0ccd10Smrg  test DEF = "$func_dll_def_p_tmp"
32619d0ccd10Smrg}
32629d0ccd10Smrg
32639d0ccd10Smrg
3264e169010aSmrg# func_mode_compile arg...
3265e169010aSmrgfunc_mode_compile ()
3266e169010aSmrg{
32679d0ccd10Smrg    $debug_cmd
32689d0ccd10Smrg
3269e169010aSmrg    # Get the compilation command and the source file.
3270e169010aSmrg    base_compile=
32719d0ccd10Smrg    srcfile=$nonopt  #  always keep a non-empty value in "srcfile"
3272e169010aSmrg    suppress_opt=yes
3273e169010aSmrg    suppress_output=
3274e169010aSmrg    arg_mode=normal
3275e169010aSmrg    libobj=
3276e169010aSmrg    later=
3277e169010aSmrg    pie_flag=
3278e169010aSmrg
3279e169010aSmrg    for arg
3280e169010aSmrg    do
3281e169010aSmrg      case $arg_mode in
3282e169010aSmrg      arg  )
3283e169010aSmrg	# do not "continue".  Instead, add this to base_compile
32849d0ccd10Smrg	lastarg=$arg
3285e169010aSmrg	arg_mode=normal
3286e169010aSmrg	;;
3287e169010aSmrg
3288e169010aSmrg      target )
32899d0ccd10Smrg	libobj=$arg
3290e169010aSmrg	arg_mode=normal
3291e169010aSmrg	continue
3292e169010aSmrg	;;
3293e169010aSmrg
3294e169010aSmrg      normal )
3295e169010aSmrg	# Accept any command-line options.
3296e169010aSmrg	case $arg in
3297e169010aSmrg	-o)
3298e169010aSmrg	  test -n "$libobj" && \
32999d0ccd10Smrg	    func_fatal_error "you cannot specify '-o' more than once"
3300e169010aSmrg	  arg_mode=target
3301e169010aSmrg	  continue
3302e169010aSmrg	  ;;
3303e169010aSmrg
3304e169010aSmrg	-pie | -fpie | -fPIE)
3305c63293b5Smrg          func_append pie_flag " $arg"
3306e169010aSmrg	  continue
3307e169010aSmrg	  ;;
3308e169010aSmrg
3309e169010aSmrg	-shared | -static | -prefer-pic | -prefer-non-pic)
3310c63293b5Smrg	  func_append later " $arg"
3311e169010aSmrg	  continue
3312e169010aSmrg	  ;;
3313e169010aSmrg
3314e169010aSmrg	-no-suppress)
3315e169010aSmrg	  suppress_opt=no
3316e169010aSmrg	  continue
3317e169010aSmrg	  ;;
3318e169010aSmrg
3319e169010aSmrg	-Xcompiler)
3320e169010aSmrg	  arg_mode=arg  #  the next one goes into the "base_compile" arg list
3321e169010aSmrg	  continue      #  The current "srcfile" will either be retained or
3322e169010aSmrg	  ;;            #  replaced later.  I would guess that would be a bug.
3323e169010aSmrg
3324e169010aSmrg	-Wc,*)
3325e169010aSmrg	  func_stripname '-Wc,' '' "$arg"
3326e169010aSmrg	  args=$func_stripname_result
3327e169010aSmrg	  lastarg=
33289d0ccd10Smrg	  save_ifs=$IFS; IFS=,
3329e169010aSmrg	  for arg in $args; do
33309d0ccd10Smrg	    IFS=$save_ifs
3331c63293b5Smrg	    func_append_quoted lastarg "$arg"
33327914d74bSmrg	  done
33339d0ccd10Smrg	  IFS=$save_ifs
3334e169010aSmrg	  func_stripname ' ' '' "$lastarg"
3335e169010aSmrg	  lastarg=$func_stripname_result
33367914d74bSmrg
33377914d74bSmrg	  # Add the arguments to base_compile.
3338c63293b5Smrg	  func_append base_compile " $lastarg"
33397914d74bSmrg	  continue
33407914d74bSmrg	  ;;
33417914d74bSmrg
3342e169010aSmrg	*)
33437914d74bSmrg	  # Accept the current argument as the source file.
33447914d74bSmrg	  # The previous "srcfile" becomes the current argument.
33457914d74bSmrg	  #
33469d0ccd10Smrg	  lastarg=$srcfile
33479d0ccd10Smrg	  srcfile=$arg
33487914d74bSmrg	  ;;
33497914d74bSmrg	esac  #  case $arg
33507914d74bSmrg	;;
33517914d74bSmrg      esac    #  case $arg_mode
33527914d74bSmrg
33537914d74bSmrg      # Aesthetically quote the previous argument.
3354c63293b5Smrg      func_append_quoted base_compile "$lastarg"
33557914d74bSmrg    done # for arg
33567914d74bSmrg
33577914d74bSmrg    case $arg_mode in
33587914d74bSmrg    arg)
3359e169010aSmrg      func_fatal_error "you must specify an argument for -Xcompile"
33607914d74bSmrg      ;;
33617914d74bSmrg    target)
33629d0ccd10Smrg      func_fatal_error "you must specify a target with '-o'"
33637914d74bSmrg      ;;
33647914d74bSmrg    *)
33657914d74bSmrg      # Get the name of the library object.
3366e169010aSmrg      test -z "$libobj" && {
3367e169010aSmrg	func_basename "$srcfile"
33689d0ccd10Smrg	libobj=$func_basename_result
3369e169010aSmrg      }
33707914d74bSmrg      ;;
33717914d74bSmrg    esac
33727914d74bSmrg
33737914d74bSmrg    # Recognize several different file suffixes.
33747914d74bSmrg    # If the user specifies -o file.o, it is replaced with file.lo
33757914d74bSmrg    case $libobj in
3376e169010aSmrg    *.[cCFSifmso] | \
3377e169010aSmrg    *.ada | *.adb | *.ads | *.asm | \
3378e169010aSmrg    *.c++ | *.cc | *.ii | *.class | *.cpp | *.cxx | \
3379e6d5e4e0Smrg    *.[fF][09]? | *.for | *.java | *.go | *.obj | *.sx | *.cu | *.cup)
3380e169010aSmrg      func_xform "$libobj"
3381e169010aSmrg      libobj=$func_xform_result
3382e169010aSmrg      ;;
33837914d74bSmrg    esac
33847914d74bSmrg
33857914d74bSmrg    case $libobj in
3386e169010aSmrg    *.lo) func_lo2o "$libobj"; obj=$func_lo2o_result ;;
33877914d74bSmrg    *)
33889d0ccd10Smrg      func_fatal_error "cannot determine name of library object from '$libobj'"
33897914d74bSmrg      ;;
33907914d74bSmrg    esac
33917914d74bSmrg
33927914d74bSmrg    func_infer_tag $base_compile
33937914d74bSmrg
33947914d74bSmrg    for arg in $later; do
33957914d74bSmrg      case $arg in
3396e169010aSmrg      -shared)
33979d0ccd10Smrg	test yes = "$build_libtool_libs" \
33989d0ccd10Smrg	  || func_fatal_configuration "cannot build a shared library"
3399e169010aSmrg	build_old_libs=no
3400e169010aSmrg	continue
3401e169010aSmrg	;;
3402e169010aSmrg
34037914d74bSmrg      -static)
3404e169010aSmrg	build_libtool_libs=no
34057914d74bSmrg	build_old_libs=yes
34067914d74bSmrg	continue
34077914d74bSmrg	;;
34087914d74bSmrg
34097914d74bSmrg      -prefer-pic)
34107914d74bSmrg	pic_mode=yes
34117914d74bSmrg	continue
34127914d74bSmrg	;;
34137914d74bSmrg
34147914d74bSmrg      -prefer-non-pic)
34157914d74bSmrg	pic_mode=no
34167914d74bSmrg	continue
34177914d74bSmrg	;;
34187914d74bSmrg      esac
34197914d74bSmrg    done
34207914d74bSmrg
3421e169010aSmrg    func_quote_for_eval "$libobj"
3422e169010aSmrg    test "X$libobj" != "X$func_quote_for_eval_result" \
3423e169010aSmrg      && $ECHO "X$libobj" | $GREP '[]~#^*{};<>?"'"'"'	 &()|`$[]' \
34249d0ccd10Smrg      && func_warning "libobj name '$libobj' may not contain shell special characters."
3425e169010aSmrg    func_dirname_and_basename "$obj" "/" ""
34269d0ccd10Smrg    objname=$func_basename_result
34279d0ccd10Smrg    xdir=$func_dirname_result
34289d0ccd10Smrg    lobj=$xdir$objdir/$objname
34297914d74bSmrg
3430e169010aSmrg    test -z "$base_compile" && \
3431e169010aSmrg      func_fatal_help "you must specify a compilation command"
34327914d74bSmrg
34337914d74bSmrg    # Delete any leftover library objects.
34349d0ccd10Smrg    if test yes = "$build_old_libs"; then
34357914d74bSmrg      removelist="$obj $lobj $libobj ${libobj}T"
34367914d74bSmrg    else
34377914d74bSmrg      removelist="$lobj $libobj ${libobj}T"
34387914d74bSmrg    fi
34397914d74bSmrg
34407914d74bSmrg    # On Cygwin there's no "real" PIC flag so we must build both object types
34417914d74bSmrg    case $host_os in
3442e169010aSmrg    cygwin* | mingw* | pw32* | os2* | cegcc*)
34437914d74bSmrg      pic_mode=default
34447914d74bSmrg      ;;
34457914d74bSmrg    esac
34469d0ccd10Smrg    if test no = "$pic_mode" && test pass_all != "$deplibs_check_method"; then
34477914d74bSmrg      # non-PIC code in shared libraries is not supported
34487914d74bSmrg      pic_mode=default
34497914d74bSmrg    fi
34507914d74bSmrg
34517914d74bSmrg    # Calculate the filename of the output object if compiler does
34527914d74bSmrg    # not support -o with -c
34539d0ccd10Smrg    if test no = "$compiler_c_o"; then
34549d0ccd10Smrg      output_obj=`$ECHO "$srcfile" | $SED 's%^.*/%%; s%\.[^.]*$%%'`.$objext
34559d0ccd10Smrg      lockfile=$output_obj.lock
34567914d74bSmrg    else
34577914d74bSmrg      output_obj=
34587914d74bSmrg      need_locks=no
34597914d74bSmrg      lockfile=
34607914d74bSmrg    fi
34617914d74bSmrg
34627914d74bSmrg    # Lock this critical section if it is needed
34637914d74bSmrg    # We use this script file to make the link, it avoids creating a new file
34649d0ccd10Smrg    if test yes = "$need_locks"; then
3465e169010aSmrg      until $opt_dry_run || ln "$progpath" "$lockfile" 2>/dev/null; do
3466e169010aSmrg	func_echo "Waiting for $lockfile to be removed"
34677914d74bSmrg	sleep 2
34687914d74bSmrg      done
34699d0ccd10Smrg    elif test warn = "$need_locks"; then
34707914d74bSmrg      if test -f "$lockfile"; then
3471e169010aSmrg	$ECHO "\
34727914d74bSmrg*** ERROR, $lockfile exists and contains:
34737914d74bSmrg`cat $lockfile 2>/dev/null`
34747914d74bSmrg
34757914d74bSmrgThis indicates that another process is trying to use the same
34767914d74bSmrgtemporary object file, and libtool could not work around it because
34779d0ccd10Smrgyour compiler does not support '-c' and '-o' together.  If you
34787914d74bSmrgrepeat this compilation, it may succeed, by chance, but you had better
34797914d74bSmrgavoid parallel builds (make -j) in this platform, or get a better
34807914d74bSmrgcompiler."
34817914d74bSmrg
3482e169010aSmrg	$opt_dry_run || $RM $removelist
34837914d74bSmrg	exit $EXIT_FAILURE
34847914d74bSmrg      fi
3485c63293b5Smrg      func_append removelist " $output_obj"
3486e169010aSmrg      $ECHO "$srcfile" > "$lockfile"
34877914d74bSmrg    fi
34887914d74bSmrg
3489e169010aSmrg    $opt_dry_run || $RM $removelist
3490c63293b5Smrg    func_append removelist " $lockfile"
3491e169010aSmrg    trap '$opt_dry_run || $RM $removelist; exit $EXIT_FAILURE' 1 2 15
3492e169010aSmrg
3493c63293b5Smrg    func_to_tool_file "$srcfile" func_convert_file_msys_to_w32
3494c63293b5Smrg    srcfile=$func_to_tool_file_result
3495e169010aSmrg    func_quote_for_eval "$srcfile"
3496e169010aSmrg    qsrcfile=$func_quote_for_eval_result
34977914d74bSmrg
34987914d74bSmrg    # Only build a PIC object if we are building libtool libraries.
34999d0ccd10Smrg    if test yes = "$build_libtool_libs"; then
35007914d74bSmrg      # Without this assignment, base_compile gets emptied.
35017914d74bSmrg      fbsd_hideous_sh_bug=$base_compile
35027914d74bSmrg
35039d0ccd10Smrg      if test no != "$pic_mode"; then
35047914d74bSmrg	command="$base_compile $qsrcfile $pic_flag"
35057914d74bSmrg      else
35067914d74bSmrg	# Don't build PIC code
35077914d74bSmrg	command="$base_compile $qsrcfile"
35087914d74bSmrg      fi
35097914d74bSmrg
3510e169010aSmrg      func_mkdir_p "$xdir$objdir"
35117914d74bSmrg
35127914d74bSmrg      if test -z "$output_obj"; then
35137914d74bSmrg	# Place PIC objects in $objdir
3514c63293b5Smrg	func_append command " -o $lobj"
35157914d74bSmrg      fi
35167914d74bSmrg
3517e169010aSmrg      func_show_eval_locale "$command"	\
3518e169010aSmrg          'test -n "$output_obj" && $RM $removelist; exit $EXIT_FAILURE'
35197914d74bSmrg
35209d0ccd10Smrg      if test warn = "$need_locks" &&
35217914d74bSmrg	 test "X`cat $lockfile 2>/dev/null`" != "X$srcfile"; then
3522e169010aSmrg	$ECHO "\
35237914d74bSmrg*** ERROR, $lockfile contains:
35247914d74bSmrg`cat $lockfile 2>/dev/null`
35257914d74bSmrg
35267914d74bSmrgbut it should contain:
35277914d74bSmrg$srcfile
35287914d74bSmrg
35297914d74bSmrgThis indicates that another process is trying to use the same
35307914d74bSmrgtemporary object file, and libtool could not work around it because
35319d0ccd10Smrgyour compiler does not support '-c' and '-o' together.  If you
35327914d74bSmrgrepeat this compilation, it may succeed, by chance, but you had better
35337914d74bSmrgavoid parallel builds (make -j) in this platform, or get a better
35347914d74bSmrgcompiler."
35357914d74bSmrg
3536e169010aSmrg	$opt_dry_run || $RM $removelist
35377914d74bSmrg	exit $EXIT_FAILURE
35387914d74bSmrg      fi
35397914d74bSmrg
35407914d74bSmrg      # Just move the object if needed, then go on to compile the next one
35417914d74bSmrg      if test -n "$output_obj" && test "X$output_obj" != "X$lobj"; then
3542e169010aSmrg	func_show_eval '$MV "$output_obj" "$lobj"' \
3543e169010aSmrg	  'error=$?; $opt_dry_run || $RM $removelist; exit $error'
35447914d74bSmrg      fi
35457914d74bSmrg
35467914d74bSmrg      # Allow error messages only from the first compilation.
35479d0ccd10Smrg      if test yes = "$suppress_opt"; then
3548e169010aSmrg	suppress_output=' >/dev/null 2>&1'
35497914d74bSmrg      fi
35507914d74bSmrg    fi
35517914d74bSmrg
35527914d74bSmrg    # Only build a position-dependent object if we build old libraries.
35539d0ccd10Smrg    if test yes = "$build_old_libs"; then
35549d0ccd10Smrg      if test yes != "$pic_mode"; then
35557914d74bSmrg	# Don't build PIC code
3556e169010aSmrg	command="$base_compile $qsrcfile$pie_flag"
35577914d74bSmrg      else
35587914d74bSmrg	command="$base_compile $qsrcfile $pic_flag"
35597914d74bSmrg      fi
35609d0ccd10Smrg      if test yes = "$compiler_c_o"; then
3561c63293b5Smrg	func_append command " -o $obj"
35627914d74bSmrg      fi
35637914d74bSmrg
35647914d74bSmrg      # Suppress compiler output if we already did a PIC compilation.
3565c63293b5Smrg      func_append command "$suppress_output"
3566e169010aSmrg      func_show_eval_locale "$command" \
3567e169010aSmrg        '$opt_dry_run || $RM $removelist; exit $EXIT_FAILURE'
35687914d74bSmrg
35699d0ccd10Smrg      if test warn = "$need_locks" &&
35707914d74bSmrg	 test "X`cat $lockfile 2>/dev/null`" != "X$srcfile"; then
3571e169010aSmrg	$ECHO "\
35727914d74bSmrg*** ERROR, $lockfile contains:
35737914d74bSmrg`cat $lockfile 2>/dev/null`
35747914d74bSmrg
35757914d74bSmrgbut it should contain:
35767914d74bSmrg$srcfile
35777914d74bSmrg
35787914d74bSmrgThis indicates that another process is trying to use the same
35797914d74bSmrgtemporary object file, and libtool could not work around it because
35809d0ccd10Smrgyour compiler does not support '-c' and '-o' together.  If you
35817914d74bSmrgrepeat this compilation, it may succeed, by chance, but you had better
35827914d74bSmrgavoid parallel builds (make -j) in this platform, or get a better
35837914d74bSmrgcompiler."
35847914d74bSmrg
3585e169010aSmrg	$opt_dry_run || $RM $removelist
35867914d74bSmrg	exit $EXIT_FAILURE
35877914d74bSmrg      fi
35887914d74bSmrg
35897914d74bSmrg      # Just move the object if needed
35907914d74bSmrg      if test -n "$output_obj" && test "X$output_obj" != "X$obj"; then
3591e169010aSmrg	func_show_eval '$MV "$output_obj" "$obj"' \
3592e169010aSmrg	  'error=$?; $opt_dry_run || $RM $removelist; exit $error'
35937914d74bSmrg      fi
35947914d74bSmrg    fi
35957914d74bSmrg
3596e169010aSmrg    $opt_dry_run || {
3597e169010aSmrg      func_write_libtool_object "$libobj" "$objdir/$objname" "$objname"
35987914d74bSmrg
3599e169010aSmrg      # Unlock the critical section if it was locked
36009d0ccd10Smrg      if test no != "$need_locks"; then
3601e169010aSmrg	removelist=$lockfile
3602e169010aSmrg        $RM "$lockfile"
3603e169010aSmrg      fi
3604e169010aSmrg    }
36057914d74bSmrg
36067914d74bSmrg    exit $EXIT_SUCCESS
3607e169010aSmrg}
36087914d74bSmrg
3609e169010aSmrg$opt_help || {
36109d0ccd10Smrg  test compile = "$opt_mode" && func_mode_compile ${1+"$@"}
3611e169010aSmrg}
36127914d74bSmrg
3613e169010aSmrgfunc_mode_help ()
3614e169010aSmrg{
3615e169010aSmrg    # We need to display help for each of the modes.
3616c63293b5Smrg    case $opt_mode in
3617e169010aSmrg      "")
3618e169010aSmrg        # Generic help is extracted from the usage comments
3619e169010aSmrg        # at the start of this file.
3620e169010aSmrg        func_help
3621e169010aSmrg        ;;
36227914d74bSmrg
3623e169010aSmrg      clean)
3624e169010aSmrg        $ECHO \
3625e169010aSmrg"Usage: $progname [OPTION]... --mode=clean RM [RM-OPTION]... FILE...
36267914d74bSmrg
3627e169010aSmrgRemove files from the build directory.
36287914d74bSmrg
3629e169010aSmrgRM is the name of the program to use to delete files associated with each FILE
36309d0ccd10Smrg(typically '/bin/rm').  RM-OPTIONS are options (such as '-f') to be passed
3631e169010aSmrgto RM.
36327914d74bSmrg
3633e169010aSmrgIf FILE is a libtool library, object or program, all the files associated
3634e169010aSmrgwith it are deleted. Otherwise, only FILE itself is deleted using RM."
3635e169010aSmrg        ;;
36367914d74bSmrg
3637e169010aSmrg      compile)
3638e169010aSmrg      $ECHO \
3639e169010aSmrg"Usage: $progname [OPTION]... --mode=compile COMPILE-COMMAND... SOURCEFILE
36407914d74bSmrg
3641e169010aSmrgCompile a source file into a libtool library object.
36427914d74bSmrg
3643e169010aSmrgThis mode accepts the following additional options:
36447914d74bSmrg
3645e169010aSmrg  -o OUTPUT-FILE    set the output file name to OUTPUT-FILE
3646e169010aSmrg  -no-suppress      do not suppress compiler output for multiple passes
3647e8ead290Smrg  -prefer-pic       try to build PIC objects only
3648e8ead290Smrg  -prefer-non-pic   try to build non-PIC objects only
36499d0ccd10Smrg  -shared           do not build a '.o' file suitable for static linking
36509d0ccd10Smrg  -static           only build a '.o' file suitable for static linking
3651e8ead290Smrg  -Wc,FLAG          pass FLAG directly to the compiler
36527914d74bSmrg
36539d0ccd10SmrgCOMPILE-COMMAND is a command to be used in creating a 'standard' object file
3654e169010aSmrgfrom the given SOURCEFILE.
36557914d74bSmrg
3656e169010aSmrgThe output file name is determined by removing the directory component from
36579d0ccd10SmrgSOURCEFILE, then substituting the C source code suffix '.c' with the
36589d0ccd10Smrglibrary object suffix, '.lo'."
3659e169010aSmrg        ;;
36607914d74bSmrg
3661e169010aSmrg      execute)
3662e169010aSmrg        $ECHO \
3663e169010aSmrg"Usage: $progname [OPTION]... --mode=execute COMMAND [ARGS]...
36647914d74bSmrg
3665e169010aSmrgAutomatically set library path, then run a program.
36667914d74bSmrg
3667e169010aSmrgThis mode accepts the following additional options:
36687914d74bSmrg
3669e169010aSmrg  -dlopen FILE      add the directory containing FILE to the library path
36707914d74bSmrg
36719d0ccd10SmrgThis mode sets the library path environment variable according to '-dlopen'
3672e169010aSmrgflags.
36737914d74bSmrg
3674e169010aSmrgIf any of the ARGS are libtool executable wrappers, then they are translated
3675e169010aSmrginto their corresponding uninstalled binary, and any of their required library
3676e169010aSmrgdirectories are added to the library path.
36777914d74bSmrg
3678e169010aSmrgThen, COMMAND is executed, with ARGS as arguments."
3679e169010aSmrg        ;;
36807914d74bSmrg
3681e169010aSmrg      finish)
3682e169010aSmrg        $ECHO \
3683e169010aSmrg"Usage: $progname [OPTION]... --mode=finish [LIBDIR]...
36847914d74bSmrg
3685e169010aSmrgComplete the installation of libtool libraries.
36867914d74bSmrg
3687e169010aSmrgEach LIBDIR is a directory that contains libtool libraries.
36887914d74bSmrg
3689e169010aSmrgThe commands that this mode executes may require superuser privileges.  Use
36909d0ccd10Smrgthe '--dry-run' option if you just want to see what would be executed."
3691e169010aSmrg        ;;
36927914d74bSmrg
3693e169010aSmrg      install)
3694e169010aSmrg        $ECHO \
3695e169010aSmrg"Usage: $progname [OPTION]... --mode=install INSTALL-COMMAND...
36967914d74bSmrg
3697e169010aSmrgInstall executables or libraries.
36987914d74bSmrg
3699e169010aSmrgINSTALL-COMMAND is the installation command.  The first component should be
37009d0ccd10Smrgeither the 'install' or 'cp' program.
37017914d74bSmrg
3702e169010aSmrgThe following components of INSTALL-COMMAND are treated specially:
37037914d74bSmrg
3704e8ead290Smrg  -inst-prefix-dir PREFIX-DIR  Use PREFIX-DIR as a staging area for installation
37057914d74bSmrg
3706e169010aSmrgThe rest of the components are interpreted as arguments to that command (only
3707e169010aSmrgBSD-compatible install options are recognized)."
3708e169010aSmrg        ;;
37097914d74bSmrg
3710e169010aSmrg      link)
3711e169010aSmrg        $ECHO \
3712e169010aSmrg"Usage: $progname [OPTION]... --mode=link LINK-COMMAND...
37137914d74bSmrg
3714e169010aSmrgLink object files or libraries together to form another library, or to
3715e169010aSmrgcreate an executable program.
37167914d74bSmrg
3717e169010aSmrgLINK-COMMAND is a command using the C compiler that you would use to create
3718e169010aSmrga program from several object files.
37197914d74bSmrg
3720e169010aSmrgThe following components of LINK-COMMAND are treated specially:
37217914d74bSmrg
3722e169010aSmrg  -all-static       do not do any dynamic linking at all
3723e169010aSmrg  -avoid-version    do not add a version suffix if possible
3724e8ead290Smrg  -bindir BINDIR    specify path to binaries directory (for systems where
3725e8ead290Smrg                    libraries must be found in the PATH setting at runtime)
37269d0ccd10Smrg  -dlopen FILE      '-dlpreopen' FILE if it cannot be dlopened at runtime
3727e169010aSmrg  -dlpreopen FILE   link in FILE and add its symbols to lt_preloaded_symbols
3728e169010aSmrg  -export-dynamic   allow symbols from OUTPUT-FILE to be resolved with dlsym(3)
3729e169010aSmrg  -export-symbols SYMFILE
3730e169010aSmrg                    try to export only the symbols listed in SYMFILE
3731e169010aSmrg  -export-symbols-regex REGEX
3732e169010aSmrg                    try to export only the symbols matching REGEX
3733e169010aSmrg  -LLIBDIR          search LIBDIR for required installed libraries
3734e169010aSmrg  -lNAME            OUTPUT-FILE requires the installed library libNAME
3735e169010aSmrg  -module           build a library that can dlopened
3736e169010aSmrg  -no-fast-install  disable the fast-install mode
3737e169010aSmrg  -no-install       link a not-installable executable
3738e169010aSmrg  -no-undefined     declare that a library does not refer to external symbols
3739e169010aSmrg  -o OUTPUT-FILE    create OUTPUT-FILE from the specified objects
37409d0ccd10Smrg  -objectlist FILE  use a list of object files found in FILE to specify objects
37419d0ccd10Smrg  -os2dllname NAME  force a short DLL name on OS/2 (no effect on other OSes)
3742e169010aSmrg  -precious-files-regex REGEX
3743e169010aSmrg                    don't remove output files matching REGEX
3744e169010aSmrg  -release RELEASE  specify package release information
3745e169010aSmrg  -rpath LIBDIR     the created library will eventually be installed in LIBDIR
3746e169010aSmrg  -R[ ]LIBDIR       add LIBDIR to the runtime path of programs and libraries
3747e169010aSmrg  -shared           only do dynamic linking of libtool libraries
3748e169010aSmrg  -shrext SUFFIX    override the standard shared library file extension
3749e169010aSmrg  -static           do not do any dynamic linking of uninstalled libtool libraries
3750e169010aSmrg  -static-libtool-libs
3751e169010aSmrg                    do not do any dynamic linking of libtool libraries
3752e169010aSmrg  -version-info CURRENT[:REVISION[:AGE]]
3753e169010aSmrg                    specify library version info [each variable defaults to 0]
3754e169010aSmrg  -weak LIBNAME     declare that the target provides the LIBNAME interface
3755e8ead290Smrg  -Wc,FLAG
3756e8ead290Smrg  -Xcompiler FLAG   pass linker-specific FLAG directly to the compiler
3757e8ead290Smrg  -Wl,FLAG
3758e8ead290Smrg  -Xlinker FLAG     pass linker-specific FLAG directly to the linker
3759e8ead290Smrg  -XCClinker FLAG   pass link-specific FLAG to the compiler driver (CC)
37607914d74bSmrg
37619d0ccd10SmrgAll other options (arguments beginning with '-') are ignored.
37627914d74bSmrg
37639d0ccd10SmrgEvery other argument is treated as a filename.  Files ending in '.la' are
3764e169010aSmrgtreated as uninstalled libtool libraries, other files are standard or library
3765e169010aSmrgobject files.
37667914d74bSmrg
37679d0ccd10SmrgIf the OUTPUT-FILE ends in '.la', then a libtool library is created,
37689d0ccd10Smrgonly library objects ('.lo' files) may be specified, and '-rpath' is
3769e169010aSmrgrequired, except when creating a convenience library.
37707914d74bSmrg
37719d0ccd10SmrgIf OUTPUT-FILE ends in '.a' or '.lib', then a standard library is created
37729d0ccd10Smrgusing 'ar' and 'ranlib', or on Windows using 'lib'.
37737914d74bSmrg
37749d0ccd10SmrgIf OUTPUT-FILE ends in '.lo' or '.$objext', then a reloadable object file
3775e169010aSmrgis created, otherwise an executable program is created."
37767914d74bSmrg        ;;
37777914d74bSmrg
3778e169010aSmrg      uninstall)
3779e169010aSmrg        $ECHO \
3780e169010aSmrg"Usage: $progname [OPTION]... --mode=uninstall RM [RM-OPTION]... FILE...
37817914d74bSmrg
3782e169010aSmrgRemove libraries from an installation directory.
37837914d74bSmrg
3784e169010aSmrgRM is the name of the program to use to delete files associated with each FILE
37859d0ccd10Smrg(typically '/bin/rm').  RM-OPTIONS are options (such as '-f') to be passed
3786e169010aSmrgto RM.
37877914d74bSmrg
3788e169010aSmrgIf FILE is a libtool library, all the files associated with it are deleted.
3789e169010aSmrgOtherwise, only FILE itself is deleted using RM."
3790e169010aSmrg        ;;
37917914d74bSmrg
3792e169010aSmrg      *)
37939d0ccd10Smrg        func_fatal_help "invalid operation mode '$opt_mode'"
3794e169010aSmrg        ;;
3795e169010aSmrg    esac
37967914d74bSmrg
3797e8ead290Smrg    echo
37989d0ccd10Smrg    $ECHO "Try '$progname --help' for more information about other modes."
3799e169010aSmrg}
38007914d74bSmrg
3801e8ead290Smrg# Now that we've collected a possible --mode arg, show help if necessary
3802e8ead290Smrgif $opt_help; then
38039d0ccd10Smrg  if test : = "$opt_help"; then
3804e8ead290Smrg    func_mode_help
3805e8ead290Smrg  else
3806e8ead290Smrg    {
3807e8ead290Smrg      func_help noexit
3808c63293b5Smrg      for opt_mode in compile link execute install finish uninstall clean; do
3809e8ead290Smrg	func_mode_help
3810e8ead290Smrg      done
38119d0ccd10Smrg    } | $SED -n '1p; 2,$s/^Usage:/  or: /p'
3812e8ead290Smrg    {
3813e8ead290Smrg      func_help noexit
3814c63293b5Smrg      for opt_mode in compile link execute install finish uninstall clean; do
3815e8ead290Smrg	echo
3816e8ead290Smrg	func_mode_help
3817e8ead290Smrg      done
3818e8ead290Smrg    } |
38199d0ccd10Smrg    $SED '1d
3820e8ead290Smrg      /^When reporting/,/^Report/{
3821e8ead290Smrg	H
3822e8ead290Smrg	d
3823e8ead290Smrg      }
3824e8ead290Smrg      $x
3825e8ead290Smrg      /information about other modes/d
3826e8ead290Smrg      /more detailed .*MODE/d
3827e8ead290Smrg      s/^Usage:.*--mode=\([^ ]*\) .*/Description of \1 mode:/'
3828e8ead290Smrg  fi
3829e8ead290Smrg  exit $?
3830e8ead290Smrgfi
38317914d74bSmrg
38327914d74bSmrg
3833e169010aSmrg# func_mode_execute arg...
3834e169010aSmrgfunc_mode_execute ()
3835e169010aSmrg{
38369d0ccd10Smrg    $debug_cmd
38379d0ccd10Smrg
3838e169010aSmrg    # The first argument is the command name.
38399d0ccd10Smrg    cmd=$nonopt
3840e169010aSmrg    test -z "$cmd" && \
3841e169010aSmrg      func_fatal_help "you must specify a COMMAND"
38427914d74bSmrg
3843e169010aSmrg    # Handle -dlopen flags immediately.
3844c63293b5Smrg    for file in $opt_dlopen; do
3845e169010aSmrg      test -f "$file" \
38469d0ccd10Smrg	|| func_fatal_help "'$file' is not a file"
38477914d74bSmrg
3848e169010aSmrg      dir=
3849e169010aSmrg      case $file in
3850e169010aSmrg      *.la)
3851c63293b5Smrg	func_resolve_sysroot "$file"
3852c63293b5Smrg	file=$func_resolve_sysroot_result
3853c63293b5Smrg
3854e169010aSmrg	# Check to see that this really is a libtool archive.
3855e169010aSmrg	func_lalib_unsafe_p "$file" \
38569d0ccd10Smrg	  || func_fatal_help "'$lib' is not a valid libtool archive"
38577914d74bSmrg
3858e169010aSmrg	# Read the libtool library.
3859e169010aSmrg	dlname=
3860e169010aSmrg	library_names=
3861e169010aSmrg	func_source "$file"
38627914d74bSmrg
3863e169010aSmrg	# Skip this library if it cannot be dlopened.
3864e169010aSmrg	if test -z "$dlname"; then
3865e169010aSmrg	  # Warn if it was a shared library.
3866e169010aSmrg	  test -n "$library_names" && \
38679d0ccd10Smrg	    func_warning "'$file' was not linked with '-export-dynamic'"
3868e169010aSmrg	  continue
3869e169010aSmrg	fi
38707914d74bSmrg
3871e169010aSmrg	func_dirname "$file" "" "."
38729d0ccd10Smrg	dir=$func_dirname_result
38737914d74bSmrg
3874e169010aSmrg	if test -f "$dir/$objdir/$dlname"; then
3875c63293b5Smrg	  func_append dir "/$objdir"
3876e169010aSmrg	else
3877e169010aSmrg	  if test ! -f "$dir/$dlname"; then
38789d0ccd10Smrg	    func_fatal_error "cannot find '$dlname' in '$dir' or '$dir/$objdir'"
3879e169010aSmrg	  fi
3880e169010aSmrg	fi
38817914d74bSmrg	;;
38827914d74bSmrg
3883e169010aSmrg      *.lo)
3884e169010aSmrg	# Just add the directory containing the .lo file.
3885e169010aSmrg	func_dirname "$file" "" "."
38869d0ccd10Smrg	dir=$func_dirname_result
38877914d74bSmrg	;;
38887914d74bSmrg
3889e169010aSmrg      *)
38909d0ccd10Smrg	func_warning "'-dlopen' is ignored for non-libtool libraries and objects"
38917914d74bSmrg	continue
38927914d74bSmrg	;;
3893e169010aSmrg      esac
38947914d74bSmrg
3895e169010aSmrg      # Get the absolute pathname.
3896e169010aSmrg      absdir=`cd "$dir" && pwd`
38979d0ccd10Smrg      test -n "$absdir" && dir=$absdir
38987914d74bSmrg
3899e169010aSmrg      # Now add the directory to shlibpath_var.
3900e169010aSmrg      if eval "test -z \"\$$shlibpath_var\""; then
3901e169010aSmrg	eval "$shlibpath_var=\"\$dir\""
3902e169010aSmrg      else
3903e169010aSmrg	eval "$shlibpath_var=\"\$dir:\$$shlibpath_var\""
3904e169010aSmrg      fi
3905e169010aSmrg    done
39067914d74bSmrg
3907e169010aSmrg    # This variable tells wrapper scripts just to set shlibpath_var
3908e169010aSmrg    # rather than running their programs.
39099d0ccd10Smrg    libtool_execute_magic=$magic
39107914d74bSmrg
3911e169010aSmrg    # Check if any of the arguments is a wrapper script.
3912e169010aSmrg    args=
3913e169010aSmrg    for file
3914e169010aSmrg    do
3915e169010aSmrg      case $file in
3916e8ead290Smrg      -* | *.la | *.lo ) ;;
3917e169010aSmrg      *)
3918e169010aSmrg	# Do a test to see if this is really a libtool program.
3919e169010aSmrg	if func_ltwrapper_script_p "$file"; then
3920e169010aSmrg	  func_source "$file"
3921e169010aSmrg	  # Transform arg to wrapped name.
39229d0ccd10Smrg	  file=$progdir/$program
3923e169010aSmrg	elif func_ltwrapper_executable_p "$file"; then
3924e169010aSmrg	  func_ltwrapper_scriptname "$file"
3925e169010aSmrg	  func_source "$func_ltwrapper_scriptname_result"
3926e169010aSmrg	  # Transform arg to wrapped name.
39279d0ccd10Smrg	  file=$progdir/$program
3928e169010aSmrg	fi
3929e169010aSmrg	;;
3930e169010aSmrg      esac
3931e169010aSmrg      # Quote arguments (to preserve shell metacharacters).
3932c63293b5Smrg      func_append_quoted args "$file"
3933e169010aSmrg    done
39347914d74bSmrg
39359d0ccd10Smrg    if $opt_dry_run; then
39369d0ccd10Smrg      # Display what would be done.
39379d0ccd10Smrg      if test -n "$shlibpath_var"; then
39389d0ccd10Smrg	eval "\$ECHO \"\$shlibpath_var=\$$shlibpath_var\""
39399d0ccd10Smrg	echo "export $shlibpath_var"
39409d0ccd10Smrg      fi
39419d0ccd10Smrg      $ECHO "$cmd$args"
39429d0ccd10Smrg      exit $EXIT_SUCCESS
39439d0ccd10Smrg    else
3944e169010aSmrg      if test -n "$shlibpath_var"; then
3945e169010aSmrg	# Export the shlibpath_var.
3946e169010aSmrg	eval "export $shlibpath_var"
3947e169010aSmrg      fi
39487914d74bSmrg
3949e169010aSmrg      # Restore saved environment variables
3950e169010aSmrg      for lt_var in LANG LANGUAGE LC_ALL LC_CTYPE LC_COLLATE LC_MESSAGES
3951e169010aSmrg      do
3952e169010aSmrg	eval "if test \"\${save_$lt_var+set}\" = set; then
3953e169010aSmrg                $lt_var=\$save_$lt_var; export $lt_var
3954e169010aSmrg	      else
3955e169010aSmrg		$lt_unset $lt_var
3956e169010aSmrg	      fi"
3957e169010aSmrg      done
39587914d74bSmrg
3959e169010aSmrg      # Now prepare to actually exec the command.
39609d0ccd10Smrg      exec_cmd=\$cmd$args
3961e169010aSmrg    fi
3962e169010aSmrg}
39637914d74bSmrg
39649d0ccd10Smrgtest execute = "$opt_mode" && func_mode_execute ${1+"$@"}
39657914d74bSmrg
39667914d74bSmrg
3967e169010aSmrg# func_mode_finish arg...
3968e169010aSmrgfunc_mode_finish ()
3969e169010aSmrg{
39709d0ccd10Smrg    $debug_cmd
39719d0ccd10Smrg
3972c63293b5Smrg    libs=
3973c63293b5Smrg    libdirs=
3974e169010aSmrg    admincmds=
39757914d74bSmrg
3976c63293b5Smrg    for opt in "$nonopt" ${1+"$@"}
3977c63293b5Smrg    do
3978c63293b5Smrg      if test -d "$opt"; then
3979c63293b5Smrg	func_append libdirs " $opt"
3980c63293b5Smrg
3981c63293b5Smrg      elif test -f "$opt"; then
3982c63293b5Smrg	if func_lalib_unsafe_p "$opt"; then
3983c63293b5Smrg	  func_append libs " $opt"
3984c63293b5Smrg	else
39859d0ccd10Smrg	  func_warning "'$opt' is not a valid libtool archive"
3986c63293b5Smrg	fi
3987c63293b5Smrg
3988c63293b5Smrg      else
39899d0ccd10Smrg	func_fatal_error "invalid argument '$opt'"
3990c63293b5Smrg      fi
3991c63293b5Smrg    done
3992c63293b5Smrg
3993c63293b5Smrg    if test -n "$libs"; then
3994c63293b5Smrg      if test -n "$lt_sysroot"; then
3995c63293b5Smrg        sysroot_regex=`$ECHO "$lt_sysroot" | $SED "$sed_make_literal_regex"`
3996c63293b5Smrg        sysroot_cmd="s/\([ ']\)$sysroot_regex/\1/g;"
3997c63293b5Smrg      else
3998c63293b5Smrg        sysroot_cmd=
3999c63293b5Smrg      fi
4000c63293b5Smrg
4001c63293b5Smrg      # Remove sysroot references
4002c63293b5Smrg      if $opt_dry_run; then
4003c63293b5Smrg        for lib in $libs; do
40049d0ccd10Smrg          echo "removing references to $lt_sysroot and '=' prefixes from $lib"
4005c63293b5Smrg        done
4006c63293b5Smrg      else
4007c63293b5Smrg        tmpdir=`func_mktempdir`
4008c63293b5Smrg        for lib in $libs; do
40099d0ccd10Smrg	  $SED -e "$sysroot_cmd s/\([ ']-[LR]\)=/\1/g; s/\([ ']\)=/\1/g" $lib \
4010c63293b5Smrg	    > $tmpdir/tmp-la
4011c63293b5Smrg	  mv -f $tmpdir/tmp-la $lib
4012c63293b5Smrg	done
4013c63293b5Smrg        ${RM}r "$tmpdir"
4014c63293b5Smrg      fi
4015c63293b5Smrg    fi
40167914d74bSmrg
4017c63293b5Smrg    if test -n "$finish_cmds$finish_eval" && test -n "$libdirs"; then
4018e169010aSmrg      for libdir in $libdirs; do
4019e169010aSmrg	if test -n "$finish_cmds"; then
4020e169010aSmrg	  # Do each command in the finish commands.
4021e169010aSmrg	  func_execute_cmds "$finish_cmds" 'admincmds="$admincmds
4022e169010aSmrg'"$cmd"'"'
4023e169010aSmrg	fi
4024e169010aSmrg	if test -n "$finish_eval"; then
4025e169010aSmrg	  # Do the single finish_eval.
4026e169010aSmrg	  eval cmds=\"$finish_eval\"
4027c63293b5Smrg	  $opt_dry_run || eval "$cmds" || func_append admincmds "
4028e169010aSmrg       $cmds"
4029e169010aSmrg	fi
4030e169010aSmrg      done
4031e169010aSmrg    fi
40327914d74bSmrg
4033e169010aSmrg    # Exit here if they wanted silent mode.
40349d0ccd10Smrg    $opt_quiet && exit $EXIT_SUCCESS
40357914d74bSmrg
4036c63293b5Smrg    if test -n "$finish_cmds$finish_eval" && test -n "$libdirs"; then
4037c63293b5Smrg      echo "----------------------------------------------------------------------"
4038c63293b5Smrg      echo "Libraries have been installed in:"
4039c63293b5Smrg      for libdir in $libdirs; do
4040c63293b5Smrg	$ECHO "   $libdir"
4041c63293b5Smrg      done
4042c63293b5Smrg      echo
4043c63293b5Smrg      echo "If you ever happen to want to link against installed libraries"
4044c63293b5Smrg      echo "in a given directory, LIBDIR, you must either use libtool, and"
40459d0ccd10Smrg      echo "specify the full pathname of the library, or use the '-LLIBDIR'"
4046c63293b5Smrg      echo "flag during linking and do at least one of the following:"
4047c63293b5Smrg      if test -n "$shlibpath_var"; then
40489d0ccd10Smrg	echo "   - add LIBDIR to the '$shlibpath_var' environment variable"
4049c63293b5Smrg	echo "     during execution"
4050c63293b5Smrg      fi
4051c63293b5Smrg      if test -n "$runpath_var"; then
40529d0ccd10Smrg	echo "   - add LIBDIR to the '$runpath_var' environment variable"
4053c63293b5Smrg	echo "     during linking"
4054c63293b5Smrg      fi
4055c63293b5Smrg      if test -n "$hardcode_libdir_flag_spec"; then
4056c63293b5Smrg	libdir=LIBDIR
4057c63293b5Smrg	eval flag=\"$hardcode_libdir_flag_spec\"
40587914d74bSmrg
40599d0ccd10Smrg	$ECHO "   - use the '$flag' linker flag"
4060c63293b5Smrg      fi
4061c63293b5Smrg      if test -n "$admincmds"; then
4062c63293b5Smrg	$ECHO "   - have your system administrator run these commands:$admincmds"
4063c63293b5Smrg      fi
4064c63293b5Smrg      if test -f /etc/ld.so.conf; then
40659d0ccd10Smrg	echo "   - have your system administrator add LIBDIR to '/etc/ld.so.conf'"
4066c63293b5Smrg      fi
4067c63293b5Smrg      echo
40687914d74bSmrg
4069c63293b5Smrg      echo "See any operating system documentation about shared libraries for"
4070c63293b5Smrg      case $host in
4071c63293b5Smrg	solaris2.[6789]|solaris2.1[0-9])
4072c63293b5Smrg	  echo "more information, such as the ld(1), crle(1) and ld.so(8) manual"
4073c63293b5Smrg	  echo "pages."
4074c63293b5Smrg	  ;;
4075c63293b5Smrg	*)
4076c63293b5Smrg	  echo "more information, such as the ld(1) and ld.so(8) manual pages."
4077c63293b5Smrg	  ;;
4078c63293b5Smrg      esac
4079c63293b5Smrg      echo "----------------------------------------------------------------------"
4080c63293b5Smrg    fi
4081e169010aSmrg    exit $EXIT_SUCCESS
4082e169010aSmrg}
40837914d74bSmrg
40849d0ccd10Smrgtest finish = "$opt_mode" && func_mode_finish ${1+"$@"}
40857914d74bSmrg
40867914d74bSmrg
4087e169010aSmrg# func_mode_install arg...
4088e169010aSmrgfunc_mode_install ()
4089e169010aSmrg{
40909d0ccd10Smrg    $debug_cmd
40919d0ccd10Smrg
4092e169010aSmrg    # There may be an optional sh(1) argument at the beginning of
4093e169010aSmrg    # install_prog (especially on Windows NT).
40949d0ccd10Smrg    if test "$SHELL" = "$nonopt" || test /bin/sh = "$nonopt" ||
4095e169010aSmrg       # Allow the use of GNU shtool's install command.
40969d0ccd10Smrg       case $nonopt in *shtool*) :;; *) false;; esac
40979d0ccd10Smrg    then
4098e169010aSmrg      # Aesthetically quote it.
4099e169010aSmrg      func_quote_for_eval "$nonopt"
4100e169010aSmrg      install_prog="$func_quote_for_eval_result "
4101e169010aSmrg      arg=$1
4102e169010aSmrg      shift
4103e169010aSmrg    else
4104e169010aSmrg      install_prog=
4105e169010aSmrg      arg=$nonopt
4106e169010aSmrg    fi
41077914d74bSmrg
4108e169010aSmrg    # The real first argument should be the name of the installation program.
4109e169010aSmrg    # Aesthetically quote it.
4110e169010aSmrg    func_quote_for_eval "$arg"
4111c63293b5Smrg    func_append install_prog "$func_quote_for_eval_result"
4112e8ead290Smrg    install_shared_prog=$install_prog
4113e8ead290Smrg    case " $install_prog " in
4114e8ead290Smrg      *[\\\ /]cp\ *) install_cp=: ;;
4115e8ead290Smrg      *) install_cp=false ;;
4116e8ead290Smrg    esac
4117e169010aSmrg
4118e169010aSmrg    # We need to accept at least all the BSD install flags.
4119e169010aSmrg    dest=
4120e169010aSmrg    files=
4121e169010aSmrg    opts=
4122e169010aSmrg    prev=
4123e169010aSmrg    install_type=
41249d0ccd10Smrg    isdir=false
4125e169010aSmrg    stripme=
4126e8ead290Smrg    no_mode=:
4127e169010aSmrg    for arg
4128e169010aSmrg    do
4129e8ead290Smrg      arg2=
4130e169010aSmrg      if test -n "$dest"; then
4131c63293b5Smrg	func_append files " $dest"
4132e169010aSmrg	dest=$arg
4133e169010aSmrg	continue
41347914d74bSmrg      fi
41357914d74bSmrg
4136e169010aSmrg      case $arg in
41379d0ccd10Smrg      -d) isdir=: ;;
4138e169010aSmrg      -f)
4139e8ead290Smrg	if $install_cp; then :; else
4140e8ead290Smrg	  prev=$arg
4141e8ead290Smrg	fi
4142e169010aSmrg	;;
4143e169010aSmrg      -g | -m | -o)
4144e169010aSmrg	prev=$arg
4145e169010aSmrg	;;
4146e169010aSmrg      -s)
4147e169010aSmrg	stripme=" -s"
4148e169010aSmrg	continue
4149e169010aSmrg	;;
4150e169010aSmrg      -*)
4151e169010aSmrg	;;
4152e169010aSmrg      *)
4153e169010aSmrg	# If the previous option needed an argument, then skip it.
4154e169010aSmrg	if test -n "$prev"; then
41559d0ccd10Smrg	  if test X-m = "X$prev" && test -n "$install_override_mode"; then
4156e8ead290Smrg	    arg2=$install_override_mode
4157e8ead290Smrg	    no_mode=false
4158e8ead290Smrg	  fi
4159e169010aSmrg	  prev=
4160e169010aSmrg	else
4161e169010aSmrg	  dest=$arg
4162e169010aSmrg	  continue
4163e169010aSmrg	fi
4164e169010aSmrg	;;
4165e169010aSmrg      esac
41667914d74bSmrg
4167e169010aSmrg      # Aesthetically quote the argument.
4168e169010aSmrg      func_quote_for_eval "$arg"
4169c63293b5Smrg      func_append install_prog " $func_quote_for_eval_result"
4170e8ead290Smrg      if test -n "$arg2"; then
4171e8ead290Smrg	func_quote_for_eval "$arg2"
4172e8ead290Smrg      fi
4173c63293b5Smrg      func_append install_shared_prog " $func_quote_for_eval_result"
4174e169010aSmrg    done
41757914d74bSmrg
4176e169010aSmrg    test -z "$install_prog" && \
4177e169010aSmrg      func_fatal_help "you must specify an install program"
41787914d74bSmrg
4179e169010aSmrg    test -n "$prev" && \
41809d0ccd10Smrg      func_fatal_help "the '$prev' option requires an argument"
41817914d74bSmrg
4182e8ead290Smrg    if test -n "$install_override_mode" && $no_mode; then
4183e8ead290Smrg      if $install_cp; then :; else
4184e8ead290Smrg	func_quote_for_eval "$install_override_mode"
4185c63293b5Smrg	func_append install_shared_prog " -m $func_quote_for_eval_result"
4186e8ead290Smrg      fi
4187e8ead290Smrg    fi
4188e8ead290Smrg
4189e169010aSmrg    if test -z "$files"; then
4190e169010aSmrg      if test -z "$dest"; then
4191e169010aSmrg	func_fatal_help "no file or destination specified"
4192e169010aSmrg      else
4193e169010aSmrg	func_fatal_help "you must specify a destination"
41947914d74bSmrg      fi
41957914d74bSmrg    fi
41967914d74bSmrg
4197e169010aSmrg    # Strip any trailing slash from the destination.
4198e169010aSmrg    func_stripname '' '/' "$dest"
4199e169010aSmrg    dest=$func_stripname_result
42007914d74bSmrg
4201e169010aSmrg    # Check to see that the destination is a directory.
42029d0ccd10Smrg    test -d "$dest" && isdir=:
42039d0ccd10Smrg    if $isdir; then
42049d0ccd10Smrg      destdir=$dest
4205e169010aSmrg      destname=
4206e169010aSmrg    else
4207e169010aSmrg      func_dirname_and_basename "$dest" "" "."
42089d0ccd10Smrg      destdir=$func_dirname_result
42099d0ccd10Smrg      destname=$func_basename_result
4210e169010aSmrg
4211e169010aSmrg      # Not a directory, so check to see that there is only one file specified.
4212e169010aSmrg      set dummy $files; shift
4213e169010aSmrg      test "$#" -gt 1 && \
42149d0ccd10Smrg	func_fatal_help "'$dest' is not a directory"
4215e169010aSmrg    fi
4216e169010aSmrg    case $destdir in
4217e169010aSmrg    [\\/]* | [A-Za-z]:[\\/]*) ;;
42187914d74bSmrg    *)
4219e169010aSmrg      for file in $files; do
4220e169010aSmrg	case $file in
4221e169010aSmrg	*.lo) ;;
4222e169010aSmrg	*)
42239d0ccd10Smrg	  func_fatal_help "'$destdir' must be an absolute directory name"
4224e169010aSmrg	  ;;
4225e169010aSmrg	esac
4226e169010aSmrg      done
42277914d74bSmrg      ;;
42287914d74bSmrg    esac
42297914d74bSmrg
4230e169010aSmrg    # This variable tells wrapper scripts just to set variables rather
4231e169010aSmrg    # than running their programs.
42329d0ccd10Smrg    libtool_install_magic=$magic
42337914d74bSmrg
4234e169010aSmrg    staticlibs=
4235e169010aSmrg    future_libdirs=
4236e169010aSmrg    current_libdirs=
4237e169010aSmrg    for file in $files; do
42387914d74bSmrg
4239e169010aSmrg      # Do each installation.
4240e169010aSmrg      case $file in
4241e169010aSmrg      *.$libext)
4242e169010aSmrg	# Do the static libraries later.
4243c63293b5Smrg	func_append staticlibs " $file"
4244e169010aSmrg	;;
4245e169010aSmrg
4246e169010aSmrg      *.la)
4247c63293b5Smrg	func_resolve_sysroot "$file"
4248c63293b5Smrg	file=$func_resolve_sysroot_result
4249c63293b5Smrg
4250e169010aSmrg	# Check to see that this really is a libtool archive.
4251e169010aSmrg	func_lalib_unsafe_p "$file" \
42529d0ccd10Smrg	  || func_fatal_help "'$file' is not a valid libtool archive"
4253e169010aSmrg
4254e169010aSmrg	library_names=
4255e169010aSmrg	old_library=
4256e169010aSmrg	relink_command=
4257e169010aSmrg	func_source "$file"
4258e169010aSmrg
4259e169010aSmrg	# Add the libdir to current_libdirs if it is the destination.
4260e169010aSmrg	if test "X$destdir" = "X$libdir"; then
4261e169010aSmrg	  case "$current_libdirs " in
4262e169010aSmrg	  *" $libdir "*) ;;
4263c63293b5Smrg	  *) func_append current_libdirs " $libdir" ;;
42647914d74bSmrg	  esac
4265e169010aSmrg	else
4266e169010aSmrg	  # Note the libdir as a future libdir.
4267e169010aSmrg	  case "$future_libdirs " in
4268e169010aSmrg	  *" $libdir "*) ;;
4269c63293b5Smrg	  *) func_append future_libdirs " $libdir" ;;
4270e169010aSmrg	  esac
4271e169010aSmrg	fi
42727914d74bSmrg
4273e169010aSmrg	func_dirname "$file" "/" ""
42749d0ccd10Smrg	dir=$func_dirname_result
4275c63293b5Smrg	func_append dir "$objdir"
4276e169010aSmrg
4277e169010aSmrg	if test -n "$relink_command"; then
4278e169010aSmrg	  # Determine the prefix the user has applied to our future dir.
4279e8ead290Smrg	  inst_prefix_dir=`$ECHO "$destdir" | $SED -e "s%$libdir\$%%"`
4280e169010aSmrg
4281e169010aSmrg	  # Don't allow the user to place us outside of our expected
4282e169010aSmrg	  # location b/c this prevents finding dependent libraries that
4283e169010aSmrg	  # are installed to the same prefix.
4284e169010aSmrg	  # At present, this check doesn't affect windows .dll's that
4285e169010aSmrg	  # are installed into $libdir/../bin (currently, that works fine)
4286e169010aSmrg	  # but it's something to keep an eye on.
4287e169010aSmrg	  test "$inst_prefix_dir" = "$destdir" && \
42889d0ccd10Smrg	    func_fatal_error "error: cannot install '$file' to a directory not ending in $libdir"
4289e169010aSmrg
4290e169010aSmrg	  if test -n "$inst_prefix_dir"; then
4291e169010aSmrg	    # Stick the inst_prefix_dir data into the link command.
4292e8ead290Smrg	    relink_command=`$ECHO "$relink_command" | $SED "s%@inst_prefix_dir@%-inst-prefix-dir $inst_prefix_dir%"`
4293e169010aSmrg	  else
4294e8ead290Smrg	    relink_command=`$ECHO "$relink_command" | $SED "s%@inst_prefix_dir@%%"`
4295e169010aSmrg	  fi
4296e169010aSmrg
42979d0ccd10Smrg	  func_warning "relinking '$file'"
4298e169010aSmrg	  func_show_eval "$relink_command" \
42999d0ccd10Smrg	    'func_fatal_error "error: relink '\''$file'\'' with the above command before installing it"'
4300e169010aSmrg	fi
4301e169010aSmrg
4302e169010aSmrg	# See the names of the shared library.
4303e169010aSmrg	set dummy $library_names; shift
4304e169010aSmrg	if test -n "$1"; then
43059d0ccd10Smrg	  realname=$1
4306e169010aSmrg	  shift
4307e169010aSmrg
43089d0ccd10Smrg	  srcname=$realname
43099d0ccd10Smrg	  test -n "$relink_command" && srcname=${realname}T
4310e169010aSmrg
4311e169010aSmrg	  # Install the shared library and build the symlinks.
4312e8ead290Smrg	  func_show_eval "$install_shared_prog $dir/$srcname $destdir/$realname" \
4313e169010aSmrg	      'exit $?'
43149d0ccd10Smrg	  tstripme=$stripme
4315e169010aSmrg	  case $host_os in
4316e169010aSmrg	  cygwin* | mingw* | pw32* | cegcc*)
4317e169010aSmrg	    case $realname in
4318e169010aSmrg	    *.dll.a)
43199d0ccd10Smrg	      tstripme=
43209d0ccd10Smrg	      ;;
43219d0ccd10Smrg	    esac
43229d0ccd10Smrg	    ;;
43239d0ccd10Smrg	  os2*)
43249d0ccd10Smrg	    case $realname in
43259d0ccd10Smrg	    *_dll.a)
43269d0ccd10Smrg	      tstripme=
4327e169010aSmrg	      ;;
4328e169010aSmrg	    esac
43297914d74bSmrg	    ;;
43307914d74bSmrg	  esac
4331e169010aSmrg	  if test -n "$tstripme" && test -n "$striplib"; then
4332e169010aSmrg	    func_show_eval "$striplib $destdir/$realname" 'exit $?'
43337914d74bSmrg	  fi
4334e169010aSmrg
4335e169010aSmrg	  if test "$#" -gt 0; then
4336e169010aSmrg	    # Delete the old symlinks, and create new ones.
43379d0ccd10Smrg	    # Try 'ln -sf' first, because the 'ln' binary might depend on
4338e169010aSmrg	    # the symlink we replace!  Solaris /bin/ln does not understand -f,
4339e169010aSmrg	    # so we also need to try rm && ln -s.
4340e169010aSmrg	    for linkname
4341e169010aSmrg	    do
4342e169010aSmrg	      test "$linkname" != "$realname" \
4343e169010aSmrg		&& func_show_eval "(cd $destdir && { $LN_S -f $realname $linkname || { $RM $linkname && $LN_S $realname $linkname; }; })"
43447914d74bSmrg	    done
43457914d74bSmrg	  fi
43467914d74bSmrg
4347e169010aSmrg	  # Do each command in the postinstall commands.
43489d0ccd10Smrg	  lib=$destdir/$realname
4349e169010aSmrg	  func_execute_cmds "$postinstall_cmds" 'exit $?'
43507914d74bSmrg	fi
43517914d74bSmrg
4352e169010aSmrg	# Install the pseudo-library for information purposes.
4353e169010aSmrg	func_basename "$file"
43549d0ccd10Smrg	name=$func_basename_result
43559d0ccd10Smrg	instname=$dir/${name}i
4356e169010aSmrg	func_show_eval "$install_prog $instname $destdir/$name" 'exit $?'
43577914d74bSmrg
4358e169010aSmrg	# Maybe install the static library, too.
4359c63293b5Smrg	test -n "$old_library" && func_append staticlibs " $dir/$old_library"
4360e169010aSmrg	;;
43617914d74bSmrg
4362e169010aSmrg      *.lo)
4363e169010aSmrg	# Install (i.e. copy) a libtool object.
43647914d74bSmrg
4365e169010aSmrg	# Figure out destination file name, if it wasn't already specified.
4366e169010aSmrg	if test -n "$destname"; then
43679d0ccd10Smrg	  destfile=$destdir/$destname
4368e169010aSmrg	else
4369e169010aSmrg	  func_basename "$file"
43709d0ccd10Smrg	  destfile=$func_basename_result
43719d0ccd10Smrg	  destfile=$destdir/$destfile
4372e169010aSmrg	fi
4373e169010aSmrg
4374e169010aSmrg	# Deduce the name of the destination old-style object file.
4375e169010aSmrg	case $destfile in
4376e169010aSmrg	*.lo)
4377e169010aSmrg	  func_lo2o "$destfile"
4378e169010aSmrg	  staticdest=$func_lo2o_result
4379e169010aSmrg	  ;;
4380e169010aSmrg	*.$objext)
43819d0ccd10Smrg	  staticdest=$destfile
4382e169010aSmrg	  destfile=
4383e169010aSmrg	  ;;
4384e169010aSmrg	*)
43859d0ccd10Smrg	  func_fatal_help "cannot copy a libtool object to '$destfile'"
4386e169010aSmrg	  ;;
43877914d74bSmrg	esac
43887914d74bSmrg
4389e169010aSmrg	# Install the libtool object if requested.
4390e169010aSmrg	test -n "$destfile" && \
4391e169010aSmrg	  func_show_eval "$install_prog $file $destfile" 'exit $?'
4392e169010aSmrg
4393e169010aSmrg	# Install the old object if enabled.
43949d0ccd10Smrg	if test yes = "$build_old_libs"; then
4395e169010aSmrg	  # Deduce the name of the old-style object file.
4396e169010aSmrg	  func_lo2o "$file"
4397e169010aSmrg	  staticobj=$func_lo2o_result
4398e169010aSmrg	  func_show_eval "$install_prog \$staticobj \$staticdest" 'exit $?'
43997914d74bSmrg	fi
4400e169010aSmrg	exit $EXIT_SUCCESS
4401e169010aSmrg	;;
44027914d74bSmrg
4403e169010aSmrg      *)
4404e169010aSmrg	# Figure out destination file name, if it wasn't already specified.
4405e169010aSmrg	if test -n "$destname"; then
44069d0ccd10Smrg	  destfile=$destdir/$destname
4407e169010aSmrg	else
4408e169010aSmrg	  func_basename "$file"
44099d0ccd10Smrg	  destfile=$func_basename_result
44109d0ccd10Smrg	  destfile=$destdir/$destfile
4411e169010aSmrg	fi
4412e169010aSmrg
4413e169010aSmrg	# If the file is missing, and there is a .exe on the end, strip it
4414e169010aSmrg	# because it is most likely a libtool script we actually want to
4415e169010aSmrg	# install
44169d0ccd10Smrg	stripped_ext=
4417e169010aSmrg	case $file in
4418e169010aSmrg	  *.exe)
4419e169010aSmrg	    if test ! -f "$file"; then
4420e169010aSmrg	      func_stripname '' '.exe' "$file"
4421e169010aSmrg	      file=$func_stripname_result
44229d0ccd10Smrg	      stripped_ext=.exe
44237914d74bSmrg	    fi
4424e169010aSmrg	    ;;
4425e169010aSmrg	esac
44267914d74bSmrg
4427e169010aSmrg	# Do a test to see if this is really a libtool program.
4428e169010aSmrg	case $host in
4429e169010aSmrg	*cygwin* | *mingw*)
4430e169010aSmrg	    if func_ltwrapper_executable_p "$file"; then
4431e169010aSmrg	      func_ltwrapper_scriptname "$file"
4432e169010aSmrg	      wrapper=$func_ltwrapper_scriptname_result
4433e169010aSmrg	    else
4434e169010aSmrg	      func_stripname '' '.exe' "$file"
4435e169010aSmrg	      wrapper=$func_stripname_result
4436e169010aSmrg	    fi
4437e169010aSmrg	    ;;
4438e169010aSmrg	*)
4439e169010aSmrg	    wrapper=$file
4440e169010aSmrg	    ;;
4441e169010aSmrg	esac
4442e169010aSmrg	if func_ltwrapper_script_p "$wrapper"; then
4443e169010aSmrg	  notinst_deplibs=
4444e169010aSmrg	  relink_command=
44457914d74bSmrg
4446e169010aSmrg	  func_source "$wrapper"
44477914d74bSmrg
4448e169010aSmrg	  # Check the variables that should have been set.
4449e169010aSmrg	  test -z "$generated_by_libtool_version" && \
44509d0ccd10Smrg	    func_fatal_error "invalid libtool wrapper script '$wrapper'"
4451e169010aSmrg
44529d0ccd10Smrg	  finalize=:
4453e169010aSmrg	  for lib in $notinst_deplibs; do
4454e169010aSmrg	    # Check to see that each library is installed.
4455e169010aSmrg	    libdir=
4456e169010aSmrg	    if test -f "$lib"; then
4457e169010aSmrg	      func_source "$lib"
4458e169010aSmrg	    fi
44599d0ccd10Smrg	    libfile=$libdir/`$ECHO "$lib" | $SED 's%^.*/%%g'`
4460e169010aSmrg	    if test -n "$libdir" && test ! -f "$libfile"; then
44619d0ccd10Smrg	      func_warning "'$lib' has not been installed in '$libdir'"
44629d0ccd10Smrg	      finalize=false
4463e169010aSmrg	    fi
4464e169010aSmrg	  done
4465e169010aSmrg
4466e169010aSmrg	  relink_command=
4467e169010aSmrg	  func_source "$wrapper"
4468e169010aSmrg
4469e169010aSmrg	  outputname=
44709d0ccd10Smrg	  if test no = "$fast_install" && test -n "$relink_command"; then
4471e169010aSmrg	    $opt_dry_run || {
44729d0ccd10Smrg	      if $finalize; then
4473e169010aSmrg	        tmpdir=`func_mktempdir`
4474e169010aSmrg		func_basename "$file$stripped_ext"
44759d0ccd10Smrg		file=$func_basename_result
44769d0ccd10Smrg	        outputname=$tmpdir/$file
4477e169010aSmrg	        # Replace the output file specification.
4478e8ead290Smrg	        relink_command=`$ECHO "$relink_command" | $SED 's%@OUTPUT@%'"$outputname"'%g'`
4479e169010aSmrg
44809d0ccd10Smrg	        $opt_quiet || {
4481e169010aSmrg	          func_quote_for_expand "$relink_command"
4482e169010aSmrg		  eval "func_echo $func_quote_for_expand_result"
4483e169010aSmrg	        }
4484e169010aSmrg	        if eval "$relink_command"; then :
4485e169010aSmrg	          else
44869d0ccd10Smrg		  func_error "error: relink '$file' with the above command before installing it"
4487e169010aSmrg		  $opt_dry_run || ${RM}r "$tmpdir"
4488e169010aSmrg		  continue
4489e169010aSmrg	        fi
44909d0ccd10Smrg	        file=$outputname
4491e169010aSmrg	      else
44929d0ccd10Smrg	        func_warning "cannot relink '$file'"
4493e169010aSmrg	      fi
4494e169010aSmrg	    }
44957914d74bSmrg	  else
4496e169010aSmrg	    # Install the binary that we compiled earlier.
4497e8ead290Smrg	    file=`$ECHO "$file$stripped_ext" | $SED "s%\([^/]*\)$%$objdir/\1%"`
44987914d74bSmrg	  fi
4499e169010aSmrg	fi
45007914d74bSmrg
4501e169010aSmrg	# remove .exe since cygwin /usr/bin/install will append another
4502e169010aSmrg	# one anyway
4503e169010aSmrg	case $install_prog,$host in
4504e169010aSmrg	*/usr/bin/install*,*cygwin*)
4505e169010aSmrg	  case $file:$destfile in
4506e169010aSmrg	  *.exe:*.exe)
4507e169010aSmrg	    # this is ok
4508e169010aSmrg	    ;;
4509e169010aSmrg	  *.exe:*)
4510e169010aSmrg	    destfile=$destfile.exe
4511e169010aSmrg	    ;;
4512e169010aSmrg	  *:*.exe)
4513e169010aSmrg	    func_stripname '' '.exe' "$destfile"
4514e169010aSmrg	    destfile=$func_stripname_result
4515e169010aSmrg	    ;;
4516e169010aSmrg	  esac
45177914d74bSmrg	  ;;
45187914d74bSmrg	esac
4519e169010aSmrg	func_show_eval "$install_prog\$stripme \$file \$destfile" 'exit $?'
4520e169010aSmrg	$opt_dry_run || if test -n "$outputname"; then
4521e169010aSmrg	  ${RM}r "$tmpdir"
4522e169010aSmrg	fi
4523e169010aSmrg	;;
4524e169010aSmrg      esac
4525e169010aSmrg    done
45267914d74bSmrg
4527e169010aSmrg    for file in $staticlibs; do
4528e169010aSmrg      func_basename "$file"
45299d0ccd10Smrg      name=$func_basename_result
45307914d74bSmrg
4531e169010aSmrg      # Set up the ranlib parameters.
45329d0ccd10Smrg      oldlib=$destdir/$name
4533e6d5e4e0Smrg      func_to_tool_file "$oldlib" func_convert_file_msys_to_w32
4534e6d5e4e0Smrg      tool_oldlib=$func_to_tool_file_result
45357914d74bSmrg
4536e169010aSmrg      func_show_eval "$install_prog \$file \$oldlib" 'exit $?'
45377914d74bSmrg
4538e169010aSmrg      if test -n "$stripme" && test -n "$old_striplib"; then
4539e6d5e4e0Smrg	func_show_eval "$old_striplib $tool_oldlib" 'exit $?'
4540e169010aSmrg      fi
45417914d74bSmrg
4542e169010aSmrg      # Do each command in the postinstall commands.
4543e169010aSmrg      func_execute_cmds "$old_postinstall_cmds" 'exit $?'
4544e169010aSmrg    done
45457914d74bSmrg
4546e169010aSmrg    test -n "$future_libdirs" && \
45479d0ccd10Smrg      func_warning "remember to run '$progname --finish$future_libdirs'"
45487914d74bSmrg
4549e169010aSmrg    if test -n "$current_libdirs"; then
4550e169010aSmrg      # Maybe just do a dry run.
4551e169010aSmrg      $opt_dry_run && current_libdirs=" -n$current_libdirs"
45529d0ccd10Smrg      exec_cmd='$SHELL "$progpath" $preserve_args --finish$current_libdirs'
4553e169010aSmrg    else
4554e169010aSmrg      exit $EXIT_SUCCESS
4555e169010aSmrg    fi
4556e169010aSmrg}
45577914d74bSmrg
45589d0ccd10Smrgtest install = "$opt_mode" && func_mode_install ${1+"$@"}
45597914d74bSmrg
45607914d74bSmrg
4561e169010aSmrg# func_generate_dlsyms outputname originator pic_p
4562e169010aSmrg# Extract symbols from dlprefiles and create ${outputname}S.o with
4563e169010aSmrg# a dlpreopen symbol table.
4564e169010aSmrgfunc_generate_dlsyms ()
4565e169010aSmrg{
45669d0ccd10Smrg    $debug_cmd
45679d0ccd10Smrg
45689d0ccd10Smrg    my_outputname=$1
45699d0ccd10Smrg    my_originator=$2
45709d0ccd10Smrg    my_pic_p=${3-false}
45719d0ccd10Smrg    my_prefix=`$ECHO "$my_originator" | $SED 's%[^a-zA-Z0-9]%_%g'`
4572e169010aSmrg    my_dlsyms=
4573e169010aSmrg
45749d0ccd10Smrg    if test -n "$dlfiles$dlprefiles" || test no != "$dlself"; then
4575e169010aSmrg      if test -n "$NM" && test -n "$global_symbol_pipe"; then
45769d0ccd10Smrg	my_dlsyms=${my_outputname}S.c
4577e169010aSmrg      else
4578e169010aSmrg	func_error "not configured to extract global symbols from dlpreopened files"
4579e169010aSmrg      fi
4580e169010aSmrg    fi
45817914d74bSmrg
4582e169010aSmrg    if test -n "$my_dlsyms"; then
4583e169010aSmrg      case $my_dlsyms in
4584e169010aSmrg      "") ;;
4585e169010aSmrg      *.c)
4586e169010aSmrg	# Discover the nlist of each of the dlfiles.
45879d0ccd10Smrg	nlist=$output_objdir/$my_outputname.nm
4588e169010aSmrg
4589e169010aSmrg	func_show_eval "$RM $nlist ${nlist}S ${nlist}T"
4590e169010aSmrg
4591e169010aSmrg	# Parse the name list into a source file.
4592e169010aSmrg	func_verbose "creating $output_objdir/$my_dlsyms"
4593e169010aSmrg
4594e169010aSmrg	$opt_dry_run || $ECHO > "$output_objdir/$my_dlsyms" "\
45959d0ccd10Smrg/* $my_dlsyms - symbol resolution table for '$my_outputname' dlsym emulation. */
45969d0ccd10Smrg/* Generated by $PROGRAM (GNU $PACKAGE) $VERSION */
4597e169010aSmrg
4598e169010aSmrg#ifdef __cplusplus
4599e169010aSmrgextern \"C\" {
4600e169010aSmrg#endif
4601e169010aSmrg
46029d0ccd10Smrg#if defined __GNUC__ && (((__GNUC__ == 4) && (__GNUC_MINOR__ >= 4)) || (__GNUC__ > 4))
4603e8ead290Smrg#pragma GCC diagnostic ignored \"-Wstrict-prototypes\"
4604e8ead290Smrg#endif
4605e8ead290Smrg
4606c63293b5Smrg/* Keep this code in sync between libtool.m4, ltmain, lt_system.h, and tests.  */
46079d0ccd10Smrg#if defined _WIN32 || defined __CYGWIN__ || defined _WIN32_WCE
46089d0ccd10Smrg/* DATA imports from DLLs on WIN32 can't be const, because runtime
4609c63293b5Smrg   relocations are performed -- see ld's documentation on pseudo-relocs.  */
4610c63293b5Smrg# define LT_DLSYM_CONST
46119d0ccd10Smrg#elif defined __osf__
4612c63293b5Smrg/* This system does not cope well with relocations in const data.  */
4613c63293b5Smrg# define LT_DLSYM_CONST
4614c63293b5Smrg#else
4615c63293b5Smrg# define LT_DLSYM_CONST const
4616c63293b5Smrg#endif
4617c63293b5Smrg
46189d0ccd10Smrg#define STREQ(s1, s2) (strcmp ((s1), (s2)) == 0)
46199d0ccd10Smrg
4620e169010aSmrg/* External symbol declarations for the compiler. */\
4621e169010aSmrg"
4622e169010aSmrg
46239d0ccd10Smrg	if test yes = "$dlself"; then
46249d0ccd10Smrg	  func_verbose "generating symbol list for '$output'"
4625e169010aSmrg
4626e169010aSmrg	  $opt_dry_run || echo ': @PROGRAM@ ' > "$nlist"
4627e169010aSmrg
4628e169010aSmrg	  # Add our own program objects to the symbol list.
4629e8ead290Smrg	  progfiles=`$ECHO "$objs$old_deplibs" | $SP2NL | $SED "$lo2o" | $NL2SP`
4630e169010aSmrg	  for progfile in $progfiles; do
4631c63293b5Smrg	    func_to_tool_file "$progfile" func_convert_file_msys_to_w32
46329d0ccd10Smrg	    func_verbose "extracting global C symbols from '$func_to_tool_file_result'"
4633c63293b5Smrg	    $opt_dry_run || eval "$NM $func_to_tool_file_result | $global_symbol_pipe >> '$nlist'"
4634e169010aSmrg	  done
4635e169010aSmrg
4636e169010aSmrg	  if test -n "$exclude_expsyms"; then
4637e169010aSmrg	    $opt_dry_run || {
4638e169010aSmrg	      eval '$EGREP -v " ($exclude_expsyms)$" "$nlist" > "$nlist"T'
4639e169010aSmrg	      eval '$MV "$nlist"T "$nlist"'
4640e169010aSmrg	    }
46417914d74bSmrg	  fi
46427914d74bSmrg
4643e169010aSmrg	  if test -n "$export_symbols_regex"; then
4644e169010aSmrg	    $opt_dry_run || {
4645e169010aSmrg	      eval '$EGREP -e "$export_symbols_regex" "$nlist" > "$nlist"T'
4646e169010aSmrg	      eval '$MV "$nlist"T "$nlist"'
4647e169010aSmrg	    }
46487914d74bSmrg	  fi
4649e169010aSmrg
4650e169010aSmrg	  # Prepare the list of exported symbols
4651e169010aSmrg	  if test -z "$export_symbols"; then
46529d0ccd10Smrg	    export_symbols=$output_objdir/$outputname.exp
4653e169010aSmrg	    $opt_dry_run || {
4654e169010aSmrg	      $RM $export_symbols
46559d0ccd10Smrg	      eval "$SED -n -e '/^: @PROGRAM@ $/d' -e 's/^.* \(.*\)$/\1/p' "'< "$nlist" > "$export_symbols"'
4656e169010aSmrg	      case $host in
4657e169010aSmrg	      *cygwin* | *mingw* | *cegcc* )
4658e169010aSmrg                eval "echo EXPORTS "'> "$output_objdir/$outputname.def"'
4659e169010aSmrg                eval 'cat "$export_symbols" >> "$output_objdir/$outputname.def"'
4660e169010aSmrg	        ;;
46617914d74bSmrg	      esac
4662e169010aSmrg	    }
4663e169010aSmrg	  else
4664e169010aSmrg	    $opt_dry_run || {
46659d0ccd10Smrg	      eval "$SED -e 's/\([].[*^$]\)/\\\\\1/g' -e 's/^/ /' -e 's/$/$/'"' < "$export_symbols" > "$output_objdir/$outputname.exp"'
4666e169010aSmrg	      eval '$GREP -f "$output_objdir/$outputname.exp" < "$nlist" > "$nlist"T'
4667e169010aSmrg	      eval '$MV "$nlist"T "$nlist"'
4668e169010aSmrg	      case $host in
4669e8ead290Smrg	        *cygwin* | *mingw* | *cegcc* )
4670e169010aSmrg	          eval "echo EXPORTS "'> "$output_objdir/$outputname.def"'
4671e169010aSmrg	          eval 'cat "$nlist" >> "$output_objdir/$outputname.def"'
4672e169010aSmrg	          ;;
46737914d74bSmrg	      esac
4674e169010aSmrg	    }
46757914d74bSmrg	  fi
4676e169010aSmrg	fi
46777914d74bSmrg
4678e169010aSmrg	for dlprefile in $dlprefiles; do
46799d0ccd10Smrg	  func_verbose "extracting global C symbols from '$dlprefile'"
4680e169010aSmrg	  func_basename "$dlprefile"
46819d0ccd10Smrg	  name=$func_basename_result
4682c63293b5Smrg          case $host in
4683c63293b5Smrg	    *cygwin* | *mingw* | *cegcc* )
4684c63293b5Smrg	      # if an import library, we need to obtain dlname
4685c63293b5Smrg	      if func_win32_import_lib_p "$dlprefile"; then
4686c63293b5Smrg	        func_tr_sh "$dlprefile"
4687c63293b5Smrg	        eval "curr_lafile=\$libfile_$func_tr_sh_result"
46889d0ccd10Smrg	        dlprefile_dlbasename=
4689c63293b5Smrg	        if test -n "$curr_lafile" && func_lalib_p "$curr_lafile"; then
4690c63293b5Smrg	          # Use subshell, to avoid clobbering current variable values
4691c63293b5Smrg	          dlprefile_dlname=`source "$curr_lafile" && echo "$dlname"`
46929d0ccd10Smrg	          if test -n "$dlprefile_dlname"; then
4693c63293b5Smrg	            func_basename "$dlprefile_dlname"
46949d0ccd10Smrg	            dlprefile_dlbasename=$func_basename_result
4695c63293b5Smrg	          else
4696c63293b5Smrg	            # no lafile. user explicitly requested -dlpreopen <import library>.
4697c63293b5Smrg	            $sharedlib_from_linklib_cmd "$dlprefile"
4698c63293b5Smrg	            dlprefile_dlbasename=$sharedlib_from_linklib_result
4699c63293b5Smrg	          fi
4700c63293b5Smrg	        fi
4701c63293b5Smrg	        $opt_dry_run || {
47029d0ccd10Smrg	          if test -n "$dlprefile_dlbasename"; then
4703c63293b5Smrg	            eval '$ECHO ": $dlprefile_dlbasename" >> "$nlist"'
4704c63293b5Smrg	          else
4705c63293b5Smrg	            func_warning "Could not compute DLL name from $name"
4706c63293b5Smrg	            eval '$ECHO ": $name " >> "$nlist"'
4707c63293b5Smrg	          fi
4708c63293b5Smrg	          func_to_tool_file "$dlprefile" func_convert_file_msys_to_w32
4709c63293b5Smrg	          eval "$NM \"$func_to_tool_file_result\" 2>/dev/null | $global_symbol_pipe |
4710c63293b5Smrg	            $SED -e '/I __imp/d' -e 's/I __nm_/D /;s/_nm__//' >> '$nlist'"
4711c63293b5Smrg	        }
4712c63293b5Smrg	      else # not an import lib
4713c63293b5Smrg	        $opt_dry_run || {
4714c63293b5Smrg	          eval '$ECHO ": $name " >> "$nlist"'
4715c63293b5Smrg	          func_to_tool_file "$dlprefile" func_convert_file_msys_to_w32
4716c63293b5Smrg	          eval "$NM \"$func_to_tool_file_result\" 2>/dev/null | $global_symbol_pipe >> '$nlist'"
4717c63293b5Smrg	        }
4718c63293b5Smrg	      fi
4719c63293b5Smrg	    ;;
4720c63293b5Smrg	    *)
4721c63293b5Smrg	      $opt_dry_run || {
4722c63293b5Smrg	        eval '$ECHO ": $name " >> "$nlist"'
4723c63293b5Smrg	        func_to_tool_file "$dlprefile" func_convert_file_msys_to_w32
4724c63293b5Smrg	        eval "$NM \"$func_to_tool_file_result\" 2>/dev/null | $global_symbol_pipe >> '$nlist'"
4725c63293b5Smrg	      }
4726c63293b5Smrg	    ;;
4727c63293b5Smrg          esac
4728e169010aSmrg	done
47297914d74bSmrg
4730e169010aSmrg	$opt_dry_run || {
4731e169010aSmrg	  # Make sure we have at least an empty file.
4732e169010aSmrg	  test -f "$nlist" || : > "$nlist"
47337914d74bSmrg
4734e169010aSmrg	  if test -n "$exclude_expsyms"; then
4735e169010aSmrg	    $EGREP -v " ($exclude_expsyms)$" "$nlist" > "$nlist"T
4736e169010aSmrg	    $MV "$nlist"T "$nlist"
47377914d74bSmrg	  fi
47387914d74bSmrg
4739e169010aSmrg	  # Try sorting and uniquifying the output.
4740e169010aSmrg	  if $GREP -v "^: " < "$nlist" |
4741e169010aSmrg	      if sort -k 3 </dev/null >/dev/null 2>&1; then
4742e169010aSmrg		sort -k 3
47437914d74bSmrg	      else
4744e169010aSmrg		sort +2
4745e169010aSmrg	      fi |
4746e169010aSmrg	      uniq > "$nlist"S; then
4747e169010aSmrg	    :
47487914d74bSmrg	  else
4749e169010aSmrg	    $GREP -v "^: " < "$nlist" > "$nlist"S
47507914d74bSmrg	  fi
47517914d74bSmrg
4752e169010aSmrg	  if test -f "$nlist"S; then
4753e169010aSmrg	    eval "$global_symbol_to_cdecl"' < "$nlist"S >> "$output_objdir/$my_dlsyms"'
47547914d74bSmrg	  else
4755e8ead290Smrg	    echo '/* NONE */' >> "$output_objdir/$my_dlsyms"
47567914d74bSmrg	  fi
47577914d74bSmrg
47589d0ccd10Smrg	  func_show_eval '$RM "${nlist}I"'
47599d0ccd10Smrg	  if test -n "$global_symbol_to_import"; then
47609d0ccd10Smrg	    eval "$global_symbol_to_import"' < "$nlist"S > "$nlist"I'
47619d0ccd10Smrg	  fi
47629d0ccd10Smrg
4763e8ead290Smrg	  echo >> "$output_objdir/$my_dlsyms" "\
47647914d74bSmrg
4765e169010aSmrg/* The mapping between symbol names and symbols.  */
4766e169010aSmrgtypedef struct {
4767e169010aSmrg  const char *name;
4768e169010aSmrg  void *address;
4769e169010aSmrg} lt_dlsymlist;
4770c63293b5Smrgextern LT_DLSYM_CONST lt_dlsymlist
47719d0ccd10Smrglt_${my_prefix}_LTX_preloaded_symbols[];\
47729d0ccd10Smrg"
47739d0ccd10Smrg
47749d0ccd10Smrg	  if test -s "$nlist"I; then
47759d0ccd10Smrg	    echo >> "$output_objdir/$my_dlsyms" "\
47769d0ccd10Smrgstatic void lt_syminit(void)
47779d0ccd10Smrg{
47789d0ccd10Smrg  LT_DLSYM_CONST lt_dlsymlist *symbol = lt_${my_prefix}_LTX_preloaded_symbols;
47799d0ccd10Smrg  for (; symbol->name; ++symbol)
47809d0ccd10Smrg    {"
47819d0ccd10Smrg	    $SED 's/.*/      if (STREQ (symbol->name, \"&\")) symbol->address = (void *) \&&;/' < "$nlist"I >> "$output_objdir/$my_dlsyms"
47829d0ccd10Smrg	    echo >> "$output_objdir/$my_dlsyms" "\
47839d0ccd10Smrg    }
47849d0ccd10Smrg}"
47859d0ccd10Smrg	  fi
47869d0ccd10Smrg	  echo >> "$output_objdir/$my_dlsyms" "\
4787c63293b5SmrgLT_DLSYM_CONST lt_dlsymlist
4788e169010aSmrglt_${my_prefix}_LTX_preloaded_symbols[] =
47899d0ccd10Smrg{ {\"$my_originator\", (void *) 0},"
47909d0ccd10Smrg
47919d0ccd10Smrg	  if test -s "$nlist"I; then
47929d0ccd10Smrg	    echo >> "$output_objdir/$my_dlsyms" "\
47939d0ccd10Smrg  {\"@INIT@\", (void *) &lt_syminit},"
47949d0ccd10Smrg	  fi
4795e169010aSmrg
4796e169010aSmrg	  case $need_lib_prefix in
4797e169010aSmrg	  no)
4798e169010aSmrg	    eval "$global_symbol_to_c_name_address" < "$nlist" >> "$output_objdir/$my_dlsyms"
4799e169010aSmrg	    ;;
4800e169010aSmrg	  *)
4801e169010aSmrg	    eval "$global_symbol_to_c_name_address_lib_prefix" < "$nlist" >> "$output_objdir/$my_dlsyms"
4802e169010aSmrg	    ;;
4803e169010aSmrg	  esac
4804e8ead290Smrg	  echo >> "$output_objdir/$my_dlsyms" "\
4805e169010aSmrg  {0, (void *) 0}
4806e169010aSmrg};
4807e169010aSmrg
4808e169010aSmrg/* This works around a problem in FreeBSD linker */
4809e169010aSmrg#ifdef FREEBSD_WORKAROUND
4810e169010aSmrgstatic const void *lt_preloaded_setup() {
4811e169010aSmrg  return lt_${my_prefix}_LTX_preloaded_symbols;
4812e169010aSmrg}
4813e169010aSmrg#endif
4814e169010aSmrg
4815e169010aSmrg#ifdef __cplusplus
4816e169010aSmrg}
4817e169010aSmrg#endif\
4818e169010aSmrg"
4819e169010aSmrg	} # !$opt_dry_run
4820e169010aSmrg
4821e169010aSmrg	pic_flag_for_symtable=
4822e169010aSmrg	case "$compile_command " in
4823e169010aSmrg	*" -static "*) ;;
4824e169010aSmrg	*)
4825e169010aSmrg	  case $host in
4826e169010aSmrg	  # compiling the symbol table file with pic_flag works around
4827e169010aSmrg	  # a FreeBSD bug that causes programs to crash when -lm is
4828e169010aSmrg	  # linked before any other PIC object.  But we must not use
4829e169010aSmrg	  # pic_flag when linking with -static.  The problem exists in
4830e169010aSmrg	  # FreeBSD 2.2.6 and is fixed in FreeBSD 3.1.
4831e6d5e4e0Smrg	  *-*-freebsd2.*|*-*-freebsd3.0*|*-*-freebsdelf3.0*)
4832e169010aSmrg	    pic_flag_for_symtable=" $pic_flag -DFREEBSD_WORKAROUND" ;;
4833e169010aSmrg	  *-*-hpux*)
4834e169010aSmrg	    pic_flag_for_symtable=" $pic_flag"  ;;
4835e169010aSmrg	  *)
48369d0ccd10Smrg	    $my_pic_p && pic_flag_for_symtable=" $pic_flag"
4837e169010aSmrg	    ;;
4838e169010aSmrg	  esac
4839e169010aSmrg	  ;;
4840e169010aSmrg	esac
4841e169010aSmrg	symtab_cflags=
4842e169010aSmrg	for arg in $LTCFLAGS; do
4843e169010aSmrg	  case $arg in
4844e169010aSmrg	  -pie | -fpie | -fPIE) ;;
4845c63293b5Smrg	  *) func_append symtab_cflags " $arg" ;;
4846e169010aSmrg	  esac
4847e169010aSmrg	done
48487914d74bSmrg
4849e169010aSmrg	# Now compile the dynamic symbol file.
4850e169010aSmrg	func_show_eval '(cd $output_objdir && $LTCC$symtab_cflags -c$no_builtin_flag$pic_flag_for_symtable "$my_dlsyms")' 'exit $?'
48517914d74bSmrg
4852e169010aSmrg	# Clean up the generated files.
48539d0ccd10Smrg	func_show_eval '$RM "$output_objdir/$my_dlsyms" "$nlist" "${nlist}S" "${nlist}T" "${nlist}I"'
4854e169010aSmrg
4855e169010aSmrg	# Transform the symbol file into the correct name.
48569d0ccd10Smrg	symfileobj=$output_objdir/${my_outputname}S.$objext
4857e169010aSmrg	case $host in
4858e169010aSmrg	*cygwin* | *mingw* | *cegcc* )
4859e169010aSmrg	  if test -f "$output_objdir/$my_outputname.def"; then
4860e8ead290Smrg	    compile_command=`$ECHO "$compile_command" | $SED "s%@SYMFILE@%$output_objdir/$my_outputname.def $symfileobj%"`
4861e8ead290Smrg	    finalize_command=`$ECHO "$finalize_command" | $SED "s%@SYMFILE@%$output_objdir/$my_outputname.def $symfileobj%"`
4862e169010aSmrg	  else
4863e8ead290Smrg	    compile_command=`$ECHO "$compile_command" | $SED "s%@SYMFILE@%$symfileobj%"`
4864e8ead290Smrg	    finalize_command=`$ECHO "$finalize_command" | $SED "s%@SYMFILE@%$symfileobj%"`
4865e169010aSmrg	  fi
4866e169010aSmrg	  ;;
4867e169010aSmrg	*)
4868e8ead290Smrg	  compile_command=`$ECHO "$compile_command" | $SED "s%@SYMFILE@%$symfileobj%"`
4869e8ead290Smrg	  finalize_command=`$ECHO "$finalize_command" | $SED "s%@SYMFILE@%$symfileobj%"`
48707914d74bSmrg	  ;;
48717914d74bSmrg	esac
4872e169010aSmrg	;;
4873e169010aSmrg      *)
48749d0ccd10Smrg	func_fatal_error "unknown suffix for '$my_dlsyms'"
4875e169010aSmrg	;;
4876e169010aSmrg      esac
4877e169010aSmrg    else
4878e169010aSmrg      # We keep going just in case the user didn't refer to
4879e169010aSmrg      # lt_preloaded_symbols.  The linker will fail if global_symbol_pipe
4880e169010aSmrg      # really was required.
4881e169010aSmrg
4882e169010aSmrg      # Nullify the symbol file.
4883e8ead290Smrg      compile_command=`$ECHO "$compile_command" | $SED "s% @SYMFILE@%%"`
4884e8ead290Smrg      finalize_command=`$ECHO "$finalize_command" | $SED "s% @SYMFILE@%%"`
48857914d74bSmrg    fi
4886e169010aSmrg}
48877914d74bSmrg
48889d0ccd10Smrg# func_cygming_gnu_implib_p ARG
48899d0ccd10Smrg# This predicate returns with zero status (TRUE) if
48909d0ccd10Smrg# ARG is a GNU/binutils-style import library. Returns
48919d0ccd10Smrg# with nonzero status (FALSE) otherwise.
48929d0ccd10Smrgfunc_cygming_gnu_implib_p ()
48939d0ccd10Smrg{
48949d0ccd10Smrg  $debug_cmd
48959d0ccd10Smrg
48969d0ccd10Smrg  func_to_tool_file "$1" func_convert_file_msys_to_w32
48979d0ccd10Smrg  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)$'`
48989d0ccd10Smrg  test -n "$func_cygming_gnu_implib_tmp"
48999d0ccd10Smrg}
49009d0ccd10Smrg
49019d0ccd10Smrg# func_cygming_ms_implib_p ARG
49029d0ccd10Smrg# This predicate returns with zero status (TRUE) if
49039d0ccd10Smrg# ARG is an MS-style import library. Returns
49049d0ccd10Smrg# with nonzero status (FALSE) otherwise.
49059d0ccd10Smrgfunc_cygming_ms_implib_p ()
49069d0ccd10Smrg{
49079d0ccd10Smrg  $debug_cmd
49089d0ccd10Smrg
49099d0ccd10Smrg  func_to_tool_file "$1" func_convert_file_msys_to_w32
49109d0ccd10Smrg  func_cygming_ms_implib_tmp=`$NM "$func_to_tool_file_result" | eval "$global_symbol_pipe" | $GREP '_NULL_IMPORT_DESCRIPTOR'`
49119d0ccd10Smrg  test -n "$func_cygming_ms_implib_tmp"
49129d0ccd10Smrg}
49139d0ccd10Smrg
4914e169010aSmrg# func_win32_libid arg
4915e169010aSmrg# return the library type of file 'arg'
4916e169010aSmrg#
4917e169010aSmrg# Need a lot of goo to handle *both* DLLs and import libs
4918e169010aSmrg# Has to be a shell function in order to 'eat' the argument
4919e169010aSmrg# that is supplied when $file_magic_command is called.
4920e8ead290Smrg# Despite the name, also deal with 64 bit binaries.
4921e169010aSmrgfunc_win32_libid ()
4922e169010aSmrg{
49239d0ccd10Smrg  $debug_cmd
49249d0ccd10Smrg
49259d0ccd10Smrg  win32_libid_type=unknown
4926e169010aSmrg  win32_fileres=`file -L $1 2>/dev/null`
4927e169010aSmrg  case $win32_fileres in
4928e169010aSmrg  *ar\ archive\ import\ library*) # definitely import
4929e169010aSmrg    win32_libid_type="x86 archive import"
4930e169010aSmrg    ;;
4931e169010aSmrg  *ar\ archive*) # could be an import, or static
4932e8ead290Smrg    # Keep the egrep pattern in sync with the one in _LT_CHECK_MAGIC_METHOD.
4933e169010aSmrg    if eval $OBJDUMP -f $1 | $SED -e '10q' 2>/dev/null |
4934e8ead290Smrg       $EGREP 'file format (pei*-i386(.*architecture: i386)?|pe-arm-wince|pe-x86-64)' >/dev/null; then
49359d0ccd10Smrg      case $nm_interface in
49369d0ccd10Smrg      "MS dumpbin")
49379d0ccd10Smrg	if func_cygming_ms_implib_p "$1" ||
49389d0ccd10Smrg	   func_cygming_gnu_implib_p "$1"
49399d0ccd10Smrg	then
49409d0ccd10Smrg	  win32_nmres=import
49419d0ccd10Smrg	else
49429d0ccd10Smrg	  win32_nmres=
49439d0ccd10Smrg	fi
49449d0ccd10Smrg	;;
49459d0ccd10Smrg      *)
49469d0ccd10Smrg	func_to_tool_file "$1" func_convert_file_msys_to_w32
49479d0ccd10Smrg	win32_nmres=`eval $NM -f posix -A \"$func_to_tool_file_result\" |
49489d0ccd10Smrg	  $SED -n -e '
4949e169010aSmrg	    1,100{
4950e169010aSmrg		/ I /{
49519d0ccd10Smrg		    s|.*|import|
4952e169010aSmrg		    p
4953e169010aSmrg		    q
4954e169010aSmrg		}
4955e169010aSmrg	    }'`
49569d0ccd10Smrg	;;
49579d0ccd10Smrg      esac
4958e169010aSmrg      case $win32_nmres in
4959e169010aSmrg      import*)  win32_libid_type="x86 archive import";;
4960e169010aSmrg      *)        win32_libid_type="x86 archive static";;
4961e169010aSmrg      esac
4962e169010aSmrg    fi
4963e169010aSmrg    ;;
4964e169010aSmrg  *DLL*)
4965e169010aSmrg    win32_libid_type="x86 DLL"
4966e169010aSmrg    ;;
4967e169010aSmrg  *executable*) # but shell scripts are "executable" too...
4968e169010aSmrg    case $win32_fileres in
4969e169010aSmrg    *MS\ Windows\ PE\ Intel*)
4970e169010aSmrg      win32_libid_type="x86 DLL"
4971e169010aSmrg      ;;
4972e169010aSmrg    esac
4973e169010aSmrg    ;;
4974e169010aSmrg  esac
4975e169010aSmrg  $ECHO "$win32_libid_type"
4976e169010aSmrg}
49777914d74bSmrg
4978c63293b5Smrg# func_cygming_dll_for_implib ARG
4979c63293b5Smrg#
4980c63293b5Smrg# Platform-specific function to extract the
4981c63293b5Smrg# name of the DLL associated with the specified
4982c63293b5Smrg# import library ARG.
4983c63293b5Smrg# Invoked by eval'ing the libtool variable
4984c63293b5Smrg#    $sharedlib_from_linklib_cmd
4985c63293b5Smrg# Result is available in the variable
4986c63293b5Smrg#    $sharedlib_from_linklib_result
4987c63293b5Smrgfunc_cygming_dll_for_implib ()
4988c63293b5Smrg{
49899d0ccd10Smrg  $debug_cmd
49909d0ccd10Smrg
4991c63293b5Smrg  sharedlib_from_linklib_result=`$DLLTOOL --identify-strict --identify "$1"`
4992c63293b5Smrg}
4993c63293b5Smrg
4994c63293b5Smrg# func_cygming_dll_for_implib_fallback_core SECTION_NAME LIBNAMEs
4995c63293b5Smrg#
4996c63293b5Smrg# The is the core of a fallback implementation of a
4997c63293b5Smrg# platform-specific function to extract the name of the
4998c63293b5Smrg# DLL associated with the specified import library LIBNAME.
4999c63293b5Smrg#
5000c63293b5Smrg# SECTION_NAME is either .idata$6 or .idata$7, depending
5001c63293b5Smrg# on the platform and compiler that created the implib.
5002c63293b5Smrg#
5003c63293b5Smrg# Echos the name of the DLL associated with the
5004c63293b5Smrg# specified import library.
5005c63293b5Smrgfunc_cygming_dll_for_implib_fallback_core ()
5006c63293b5Smrg{
50079d0ccd10Smrg  $debug_cmd
50089d0ccd10Smrg
5009c63293b5Smrg  match_literal=`$ECHO "$1" | $SED "$sed_make_literal_regex"`
5010c63293b5Smrg  $OBJDUMP -s --section "$1" "$2" 2>/dev/null |
5011c63293b5Smrg    $SED '/^Contents of section '"$match_literal"':/{
5012c63293b5Smrg      # Place marker at beginning of archive member dllname section
5013c63293b5Smrg      s/.*/====MARK====/
5014c63293b5Smrg      p
5015c63293b5Smrg      d
5016c63293b5Smrg    }
5017c63293b5Smrg    # These lines can sometimes be longer than 43 characters, but
5018c63293b5Smrg    # are always uninteresting
5019c63293b5Smrg    /:[	 ]*file format pe[i]\{,1\}-/d
5020c63293b5Smrg    /^In archive [^:]*:/d
5021c63293b5Smrg    # Ensure marker is printed
5022c63293b5Smrg    /^====MARK====/p
5023c63293b5Smrg    # Remove all lines with less than 43 characters
5024c63293b5Smrg    /^.\{43\}/!d
5025c63293b5Smrg    # From remaining lines, remove first 43 characters
5026c63293b5Smrg    s/^.\{43\}//' |
5027c63293b5Smrg    $SED -n '
5028c63293b5Smrg      # Join marker and all lines until next marker into a single line
5029c63293b5Smrg      /^====MARK====/ b para
5030c63293b5Smrg      H
5031c63293b5Smrg      $ b para
5032c63293b5Smrg      b
5033c63293b5Smrg      :para
5034c63293b5Smrg      x
5035c63293b5Smrg      s/\n//g
5036c63293b5Smrg      # Remove the marker
5037c63293b5Smrg      s/^====MARK====//
5038c63293b5Smrg      # Remove trailing dots and whitespace
5039c63293b5Smrg      s/[\. \t]*$//
5040c63293b5Smrg      # Print
5041c63293b5Smrg      /./p' |
5042c63293b5Smrg    # we now have a list, one entry per line, of the stringified
5043c63293b5Smrg    # contents of the appropriate section of all members of the
50449d0ccd10Smrg    # archive that possess that section. Heuristic: eliminate
50459d0ccd10Smrg    # all those that have a first or second character that is
5046c63293b5Smrg    # a '.' (that is, objdump's representation of an unprintable
5047c63293b5Smrg    # character.) This should work for all archives with less than
5048c63293b5Smrg    # 0x302f exports -- but will fail for DLLs whose name actually
5049c63293b5Smrg    # begins with a literal '.' or a single character followed by
5050c63293b5Smrg    # a '.'.
5051c63293b5Smrg    #
5052c63293b5Smrg    # Of those that remain, print the first one.
5053c63293b5Smrg    $SED -e '/^\./d;/^.\./d;q'
5054c63293b5Smrg}
5055c63293b5Smrg
5056c63293b5Smrg# func_cygming_dll_for_implib_fallback ARG
5057c63293b5Smrg# Platform-specific function to extract the
5058c63293b5Smrg# name of the DLL associated with the specified
5059c63293b5Smrg# import library ARG.
5060c63293b5Smrg#
5061c63293b5Smrg# This fallback implementation is for use when $DLLTOOL
5062c63293b5Smrg# does not support the --identify-strict option.
5063c63293b5Smrg# Invoked by eval'ing the libtool variable
5064c63293b5Smrg#    $sharedlib_from_linklib_cmd
5065c63293b5Smrg# Result is available in the variable
5066c63293b5Smrg#    $sharedlib_from_linklib_result
5067c63293b5Smrgfunc_cygming_dll_for_implib_fallback ()
5068c63293b5Smrg{
50699d0ccd10Smrg  $debug_cmd
50709d0ccd10Smrg
50719d0ccd10Smrg  if func_cygming_gnu_implib_p "$1"; then
5072c63293b5Smrg    # binutils import library
5073c63293b5Smrg    sharedlib_from_linklib_result=`func_cygming_dll_for_implib_fallback_core '.idata$7' "$1"`
50749d0ccd10Smrg  elif func_cygming_ms_implib_p "$1"; then
5075c63293b5Smrg    # ms-generated import library
5076c63293b5Smrg    sharedlib_from_linklib_result=`func_cygming_dll_for_implib_fallback_core '.idata$6' "$1"`
5077c63293b5Smrg  else
5078c63293b5Smrg    # unknown
50799d0ccd10Smrg    sharedlib_from_linklib_result=
5080c63293b5Smrg  fi
5081c63293b5Smrg}
50827914d74bSmrg
50837914d74bSmrg
5084e169010aSmrg# func_extract_an_archive dir oldlib
5085e169010aSmrgfunc_extract_an_archive ()
5086e169010aSmrg{
50879d0ccd10Smrg    $debug_cmd
50889d0ccd10Smrg
50899d0ccd10Smrg    f_ex_an_ar_dir=$1; shift
50909d0ccd10Smrg    f_ex_an_ar_oldlib=$1
50919d0ccd10Smrg    if test yes = "$lock_old_archive_extraction"; then
5092e8ead290Smrg      lockfile=$f_ex_an_ar_oldlib.lock
5093e8ead290Smrg      until $opt_dry_run || ln "$progpath" "$lockfile" 2>/dev/null; do
5094e8ead290Smrg	func_echo "Waiting for $lockfile to be removed"
5095e8ead290Smrg	sleep 2
5096e8ead290Smrg      done
5097e8ead290Smrg    fi
5098e8ead290Smrg    func_show_eval "(cd \$f_ex_an_ar_dir && $AR x \"\$f_ex_an_ar_oldlib\")" \
5099e8ead290Smrg		   'stat=$?; rm -f "$lockfile"; exit $stat'
51009d0ccd10Smrg    if test yes = "$lock_old_archive_extraction"; then
5101e8ead290Smrg      $opt_dry_run || rm -f "$lockfile"
5102e8ead290Smrg    fi
5103e169010aSmrg    if ($AR t "$f_ex_an_ar_oldlib" | sort | sort -uc >/dev/null 2>&1); then
5104e169010aSmrg     :
5105e169010aSmrg    else
5106e169010aSmrg      func_fatal_error "object name conflicts in archive: $f_ex_an_ar_dir/$f_ex_an_ar_oldlib"
5107e169010aSmrg    fi
5108e169010aSmrg}
51097914d74bSmrg
51107914d74bSmrg
5111e169010aSmrg# func_extract_archives gentop oldlib ...
5112e169010aSmrgfunc_extract_archives ()
5113e169010aSmrg{
51149d0ccd10Smrg    $debug_cmd
51159d0ccd10Smrg
51169d0ccd10Smrg    my_gentop=$1; shift
5117e169010aSmrg    my_oldlibs=${1+"$@"}
51189d0ccd10Smrg    my_oldobjs=
51199d0ccd10Smrg    my_xlib=
51209d0ccd10Smrg    my_xabs=
51219d0ccd10Smrg    my_xdir=
51227914d74bSmrg
5123e169010aSmrg    for my_xlib in $my_oldlibs; do
5124e169010aSmrg      # Extract the objects.
5125e169010aSmrg      case $my_xlib in
51269d0ccd10Smrg	[\\/]* | [A-Za-z]:[\\/]*) my_xabs=$my_xlib ;;
5127e169010aSmrg	*) my_xabs=`pwd`"/$my_xlib" ;;
5128e169010aSmrg      esac
5129e169010aSmrg      func_basename "$my_xlib"
51309d0ccd10Smrg      my_xlib=$func_basename_result
5131e169010aSmrg      my_xlib_u=$my_xlib
5132e169010aSmrg      while :; do
5133e169010aSmrg        case " $extracted_archives " in
5134e169010aSmrg	*" $my_xlib_u "*)
5135e169010aSmrg	  func_arith $extracted_serial + 1
5136e169010aSmrg	  extracted_serial=$func_arith_result
5137e169010aSmrg	  my_xlib_u=lt$extracted_serial-$my_xlib ;;
5138e169010aSmrg	*) break ;;
5139e169010aSmrg	esac
5140e169010aSmrg      done
5141e169010aSmrg      extracted_archives="$extracted_archives $my_xlib_u"
51429d0ccd10Smrg      my_xdir=$my_gentop/$my_xlib_u
51437914d74bSmrg
5144e169010aSmrg      func_mkdir_p "$my_xdir"
51457914d74bSmrg
5146e169010aSmrg      case $host in
5147e169010aSmrg      *-darwin*)
5148e169010aSmrg	func_verbose "Extracting $my_xabs"
5149e169010aSmrg	# Do not bother doing anything if just a dry run
5150e169010aSmrg	$opt_dry_run || {
5151e169010aSmrg	  darwin_orig_dir=`pwd`
5152e169010aSmrg	  cd $my_xdir || exit $?
5153e169010aSmrg	  darwin_archive=$my_xabs
5154e169010aSmrg	  darwin_curdir=`pwd`
51559d0ccd10Smrg	  func_basename "$darwin_archive"
51569d0ccd10Smrg	  darwin_base_archive=$func_basename_result
5157e169010aSmrg	  darwin_arches=`$LIPO -info "$darwin_archive" 2>/dev/null | $GREP Architectures 2>/dev/null || true`
5158e169010aSmrg	  if test -n "$darwin_arches"; then
5159e169010aSmrg	    darwin_arches=`$ECHO "$darwin_arches" | $SED -e 's/.*are://'`
5160e169010aSmrg	    darwin_arch=
5161e169010aSmrg	    func_verbose "$darwin_base_archive has multiple architectures $darwin_arches"
51629d0ccd10Smrg	    for darwin_arch in  $darwin_arches; do
51639d0ccd10Smrg	      func_mkdir_p "unfat-$$/$darwin_base_archive-$darwin_arch"
51649d0ccd10Smrg	      $LIPO -thin $darwin_arch -output "unfat-$$/$darwin_base_archive-$darwin_arch/$darwin_base_archive" "$darwin_archive"
51659d0ccd10Smrg	      cd "unfat-$$/$darwin_base_archive-$darwin_arch"
51669d0ccd10Smrg	      func_extract_an_archive "`pwd`" "$darwin_base_archive"
5167e169010aSmrg	      cd "$darwin_curdir"
51689d0ccd10Smrg	      $RM "unfat-$$/$darwin_base_archive-$darwin_arch/$darwin_base_archive"
5169e169010aSmrg	    done # $darwin_arches
5170e169010aSmrg            ## Okay now we've a bunch of thin objects, gotta fatten them up :)
51719d0ccd10Smrg	    darwin_filelist=`find unfat-$$ -type f -name \*.o -print -o -name \*.lo -print | $SED -e "$sed_basename" | sort -u`
5172e169010aSmrg	    darwin_file=
5173e169010aSmrg	    darwin_files=
5174e169010aSmrg	    for darwin_file in $darwin_filelist; do
5175e8ead290Smrg	      darwin_files=`find unfat-$$ -name $darwin_file -print | sort | $NL2SP`
5176e169010aSmrg	      $LIPO -create -output "$darwin_file" $darwin_files
5177e169010aSmrg	    done # $darwin_filelist
5178e169010aSmrg	    $RM -rf unfat-$$
5179e169010aSmrg	    cd "$darwin_orig_dir"
5180e169010aSmrg	  else
5181e169010aSmrg	    cd $darwin_orig_dir
5182e169010aSmrg	    func_extract_an_archive "$my_xdir" "$my_xabs"
5183e169010aSmrg	  fi # $darwin_arches
5184e169010aSmrg	} # !$opt_dry_run
5185e169010aSmrg	;;
5186e169010aSmrg      *)
5187e169010aSmrg        func_extract_an_archive "$my_xdir" "$my_xabs"
5188e169010aSmrg	;;
51897914d74bSmrg      esac
5190e8ead290Smrg      my_oldobjs="$my_oldobjs "`find $my_xdir -name \*.$objext -print -o -name \*.lo -print | sort | $NL2SP`
5191e169010aSmrg    done
51927914d74bSmrg
51939d0ccd10Smrg    func_extract_archives_result=$my_oldobjs
5194e169010aSmrg}
51957914d74bSmrg
51967914d74bSmrg
5197e8ead290Smrg# func_emit_wrapper [arg=no]
5198e8ead290Smrg#
5199e8ead290Smrg# Emit a libtool wrapper script on stdout.
5200e8ead290Smrg# Don't directly open a file because we may want to
5201e8ead290Smrg# incorporate the script contents within a cygwin/mingw
5202e8ead290Smrg# wrapper executable.  Must ONLY be called from within
5203e8ead290Smrg# func_mode_link because it depends on a number of variables
5204e8ead290Smrg# set therein.
5205e169010aSmrg#
5206e8ead290Smrg# ARG is the value that the WRAPPER_SCRIPT_BELONGS_IN_OBJDIR
5207e8ead290Smrg# variable will take.  If 'yes', then the emitted script
52089d0ccd10Smrg# will assume that the directory where it is stored is
5209e8ead290Smrg# the $objdir directory.  This is a cygwin/mingw-specific
5210e8ead290Smrg# behavior.
5211e8ead290Smrgfunc_emit_wrapper ()
5212e169010aSmrg{
5213e8ead290Smrg	func_emit_wrapper_arg1=${1-no}
52147914d74bSmrg
5215e169010aSmrg	$ECHO "\
5216e169010aSmrg#! $SHELL
52177914d74bSmrg
5218e169010aSmrg# $output - temporary wrapper script for $objdir/$outputname
52199d0ccd10Smrg# Generated by $PROGRAM (GNU $PACKAGE) $VERSION
5220e169010aSmrg#
5221e169010aSmrg# The $output program cannot be directly executed until all the libtool
5222e169010aSmrg# libraries that it depends on are installed.
5223e169010aSmrg#
5224e169010aSmrg# This wrapper script should never be moved out of the build directory.
5225e169010aSmrg# If it is, it will not operate correctly.
52267914d74bSmrg
5227e169010aSmrg# Sed substitution that helps us do robust quoting.  It backslashifies
5228e169010aSmrg# metacharacters that are still active within double-quoted strings.
5229e169010aSmrgsed_quote_subst='$sed_quote_subst'
52307914d74bSmrg
5231e169010aSmrg# Be Bourne compatible
5232e169010aSmrgif test -n \"\${ZSH_VERSION+set}\" && (emulate sh) >/dev/null 2>&1; then
5233e169010aSmrg  emulate sh
5234e169010aSmrg  NULLCMD=:
5235e169010aSmrg  # Zsh 3.x and 4.x performs word splitting on \${1+\"\$@\"}, which
5236e169010aSmrg  # is contrary to our usage.  Disable this feature.
5237e169010aSmrg  alias -g '\${1+\"\$@\"}'='\"\$@\"'
5238e169010aSmrg  setopt NO_GLOB_SUBST
5239e169010aSmrgelse
5240e169010aSmrg  case \`(set -o) 2>/dev/null\` in *posix*) set -o posix;; esac
5241e169010aSmrgfi
5242e169010aSmrgBIN_SH=xpg4; export BIN_SH # for Tru64
5243e169010aSmrgDUALCASE=1; export DUALCASE # for MKS sh
52447914d74bSmrg
5245e169010aSmrg# The HP-UX ksh and POSIX shell print the target directory to stdout
5246e169010aSmrg# if CDPATH is set.
5247e169010aSmrg(unset CDPATH) >/dev/null 2>&1 && unset CDPATH
52487914d74bSmrg
5249e169010aSmrgrelink_command=\"$relink_command\"
52507914d74bSmrg
5251e169010aSmrg# This environment variable determines our operation mode.
5252e169010aSmrgif test \"\$libtool_install_magic\" = \"$magic\"; then
5253e169010aSmrg  # install mode needs the following variables:
5254e169010aSmrg  generated_by_libtool_version='$macro_version'
5255e169010aSmrg  notinst_deplibs='$notinst_deplibs'
5256e169010aSmrgelse
5257e169010aSmrg  # When we are sourced in execute mode, \$file and \$ECHO are already set.
5258e169010aSmrg  if test \"\$libtool_execute_magic\" != \"$magic\"; then
5259e8ead290Smrg    file=\"\$0\""
5260e8ead290Smrg
5261e8ead290Smrg    qECHO=`$ECHO "$ECHO" | $SED "$sed_quote_subst"`
5262e8ead290Smrg    $ECHO "\
5263e8ead290Smrg
5264e8ead290Smrg# A function that is used when there is no print builtin or printf.
5265e8ead290Smrgfunc_fallback_echo ()
5266e8ead290Smrg{
5267e8ead290Smrg  eval 'cat <<_LTECHO_EOF
5268e8ead290Smrg\$1
5269e8ead290Smrg_LTECHO_EOF'
5270e8ead290Smrg}
5271e8ead290Smrg    ECHO=\"$qECHO\"
5272e8ead290Smrg  fi
5273e8ead290Smrg
5274e8ead290Smrg# Very basic option parsing. These options are (a) specific to
5275e8ead290Smrg# the libtool wrapper, (b) are identical between the wrapper
52769d0ccd10Smrg# /script/ and the wrapper /executable/ that is used only on
5277e8ead290Smrg# windows platforms, and (c) all begin with the string "--lt-"
52789d0ccd10Smrg# (application programs are unlikely to have options that match
5279e8ead290Smrg# this pattern).
5280e8ead290Smrg#
5281e8ead290Smrg# There are only two supported options: --lt-debug and
5282e8ead290Smrg# --lt-dump-script. There is, deliberately, no --lt-help.
5283e8ead290Smrg#
5284e8ead290Smrg# The first argument to this parsing function should be the
5285e8ead290Smrg# script's $0 value, followed by "$@".
5286e8ead290Smrglt_option_debug=
5287e8ead290Smrgfunc_parse_lt_options ()
5288e8ead290Smrg{
5289e8ead290Smrg  lt_script_arg0=\$0
5290e8ead290Smrg  shift
5291e8ead290Smrg  for lt_opt
5292e8ead290Smrg  do
5293e8ead290Smrg    case \"\$lt_opt\" in
5294e8ead290Smrg    --lt-debug) lt_option_debug=1 ;;
5295e8ead290Smrg    --lt-dump-script)
5296e8ead290Smrg        lt_dump_D=\`\$ECHO \"X\$lt_script_arg0\" | $SED -e 's/^X//' -e 's%/[^/]*$%%'\`
5297e8ead290Smrg        test \"X\$lt_dump_D\" = \"X\$lt_script_arg0\" && lt_dump_D=.
5298e8ead290Smrg        lt_dump_F=\`\$ECHO \"X\$lt_script_arg0\" | $SED -e 's/^X//' -e 's%^.*/%%'\`
5299e8ead290Smrg        cat \"\$lt_dump_D/\$lt_dump_F\"
5300e8ead290Smrg        exit 0
5301e8ead290Smrg      ;;
5302e8ead290Smrg    --lt-*)
5303e8ead290Smrg        \$ECHO \"Unrecognized --lt- option: '\$lt_opt'\" 1>&2
5304e8ead290Smrg        exit 1
5305e8ead290Smrg      ;;
5306e8ead290Smrg    esac
5307e8ead290Smrg  done
5308e8ead290Smrg
5309e8ead290Smrg  # Print the debug banner immediately:
5310e8ead290Smrg  if test -n \"\$lt_option_debug\"; then
53119d0ccd10Smrg    echo \"$outputname:$output:\$LINENO: libtool wrapper (GNU $PACKAGE) $VERSION\" 1>&2
5312e8ead290Smrg  fi
5313e8ead290Smrg}
5314e8ead290Smrg
5315e8ead290Smrg# Used when --lt-debug. Prints its arguments to stdout
5316e8ead290Smrg# (redirection is the responsibility of the caller)
5317e8ead290Smrgfunc_lt_dump_args ()
5318e8ead290Smrg{
5319e8ead290Smrg  lt_dump_args_N=1;
5320e8ead290Smrg  for lt_arg
5321e8ead290Smrg  do
53229d0ccd10Smrg    \$ECHO \"$outputname:$output:\$LINENO: newargv[\$lt_dump_args_N]: \$lt_arg\"
5323e8ead290Smrg    lt_dump_args_N=\`expr \$lt_dump_args_N + 1\`
5324e8ead290Smrg  done
5325e8ead290Smrg}
5326e8ead290Smrg
5327e8ead290Smrg# Core function for launching the target application
5328e8ead290Smrgfunc_exec_program_core ()
5329e8ead290Smrg{
5330e169010aSmrg"
5331e8ead290Smrg  case $host in
5332e8ead290Smrg  # Backslashes separate directories on plain windows
5333e8ead290Smrg  *-*-mingw | *-*-os2* | *-cegcc*)
5334e8ead290Smrg    $ECHO "\
5335e8ead290Smrg      if test -n \"\$lt_option_debug\"; then
53369d0ccd10Smrg        \$ECHO \"$outputname:$output:\$LINENO: newargv[0]: \$progdir\\\\\$program\" 1>&2
5337e8ead290Smrg        func_lt_dump_args \${1+\"\$@\"} 1>&2
5338e8ead290Smrg      fi
5339e8ead290Smrg      exec \"\$progdir\\\\\$program\" \${1+\"\$@\"}
5340e8ead290Smrg"
5341e8ead290Smrg    ;;
5342e8ead290Smrg
5343e8ead290Smrg  *)
5344e8ead290Smrg    $ECHO "\
5345e8ead290Smrg      if test -n \"\$lt_option_debug\"; then
53469d0ccd10Smrg        \$ECHO \"$outputname:$output:\$LINENO: newargv[0]: \$progdir/\$program\" 1>&2
5347e8ead290Smrg        func_lt_dump_args \${1+\"\$@\"} 1>&2
5348e8ead290Smrg      fi
5349e8ead290Smrg      exec \"\$progdir/\$program\" \${1+\"\$@\"}
5350e8ead290Smrg"
5351e8ead290Smrg    ;;
5352e8ead290Smrg  esac
5353e8ead290Smrg  $ECHO "\
5354e8ead290Smrg      \$ECHO \"\$0: cannot exec \$program \$*\" 1>&2
5355e8ead290Smrg      exit 1
5356e8ead290Smrg}
5357e8ead290Smrg
5358e8ead290Smrg# A function to encapsulate launching the target application
5359e8ead290Smrg# Strips options in the --lt-* namespace from \$@ and
5360e8ead290Smrg# launches target application with the remaining arguments.
5361e8ead290Smrgfunc_exec_program ()
5362e8ead290Smrg{
5363e6d5e4e0Smrg  case \" \$* \" in
5364e6d5e4e0Smrg  *\\ --lt-*)
5365e6d5e4e0Smrg    for lt_wr_arg
5366e6d5e4e0Smrg    do
5367e6d5e4e0Smrg      case \$lt_wr_arg in
5368e6d5e4e0Smrg      --lt-*) ;;
5369e6d5e4e0Smrg      *) set x \"\$@\" \"\$lt_wr_arg\"; shift;;
5370e6d5e4e0Smrg      esac
5371e6d5e4e0Smrg      shift
5372e6d5e4e0Smrg    done ;;
5373e6d5e4e0Smrg  esac
5374e8ead290Smrg  func_exec_program_core \${1+\"\$@\"}
5375e8ead290Smrg}
5376e8ead290Smrg
5377e8ead290Smrg  # Parse options
5378e8ead290Smrg  func_parse_lt_options \"\$0\" \${1+\"\$@\"}
53797914d74bSmrg
5380e169010aSmrg  # Find the directory that this script lives in.
5381e8ead290Smrg  thisdir=\`\$ECHO \"\$file\" | $SED 's%/[^/]*$%%'\`
5382e169010aSmrg  test \"x\$thisdir\" = \"x\$file\" && thisdir=.
53837914d74bSmrg
5384e169010aSmrg  # Follow symbolic links until we get to the real thisdir.
5385e8ead290Smrg  file=\`ls -ld \"\$file\" | $SED -n 's/.*-> //p'\`
5386e169010aSmrg  while test -n \"\$file\"; do
5387e8ead290Smrg    destdir=\`\$ECHO \"\$file\" | $SED 's%/[^/]*\$%%'\`
53887914d74bSmrg
5389e169010aSmrg    # If there was a directory component, then change thisdir.
5390e169010aSmrg    if test \"x\$destdir\" != \"x\$file\"; then
5391e169010aSmrg      case \"\$destdir\" in
5392e169010aSmrg      [\\\\/]* | [A-Za-z]:[\\\\/]*) thisdir=\"\$destdir\" ;;
5393e169010aSmrg      *) thisdir=\"\$thisdir/\$destdir\" ;;
5394e169010aSmrg      esac
5395e169010aSmrg    fi
53967914d74bSmrg
5397e8ead290Smrg    file=\`\$ECHO \"\$file\" | $SED 's%^.*/%%'\`
5398e8ead290Smrg    file=\`ls -ld \"\$thisdir/\$file\" | $SED -n 's/.*-> //p'\`
5399e169010aSmrg  done
54007914d74bSmrg
5401e169010aSmrg  # Usually 'no', except on cygwin/mingw when embedded into
5402e169010aSmrg  # the cwrapper.
5403e8ead290Smrg  WRAPPER_SCRIPT_BELONGS_IN_OBJDIR=$func_emit_wrapper_arg1
5404e169010aSmrg  if test \"\$WRAPPER_SCRIPT_BELONGS_IN_OBJDIR\" = \"yes\"; then
5405e169010aSmrg    # special case for '.'
5406e169010aSmrg    if test \"\$thisdir\" = \".\"; then
5407e169010aSmrg      thisdir=\`pwd\`
5408e169010aSmrg    fi
5409e169010aSmrg    # remove .libs from thisdir
5410e169010aSmrg    case \"\$thisdir\" in
5411e8ead290Smrg    *[\\\\/]$objdir ) thisdir=\`\$ECHO \"\$thisdir\" | $SED 's%[\\\\/][^\\\\/]*$%%'\` ;;
5412e169010aSmrg    $objdir )   thisdir=. ;;
5413e169010aSmrg    esac
5414e169010aSmrg  fi
54157914d74bSmrg
5416e169010aSmrg  # Try to get the absolute directory name.
5417e169010aSmrg  absdir=\`cd \"\$thisdir\" && pwd\`
5418e169010aSmrg  test -n \"\$absdir\" && thisdir=\"\$absdir\"
5419e169010aSmrg"
54207914d74bSmrg
54219d0ccd10Smrg	if test yes = "$fast_install"; then
5422e169010aSmrg	  $ECHO "\
5423e169010aSmrg  program=lt-'$outputname'$exeext
5424e169010aSmrg  progdir=\"\$thisdir/$objdir\"
54257914d74bSmrg
5426e169010aSmrg  if test ! -f \"\$progdir/\$program\" ||
54279d0ccd10Smrg     { file=\`ls -1dt \"\$progdir/\$program\" \"\$progdir/../\$program\" 2>/dev/null | $SED 1q\`; \\
5428e169010aSmrg       test \"X\$file\" != \"X\$progdir/\$program\"; }; then
54297914d74bSmrg
5430e169010aSmrg    file=\"\$\$-\$program\"
54317914d74bSmrg
5432e169010aSmrg    if test ! -d \"\$progdir\"; then
5433e169010aSmrg      $MKDIR \"\$progdir\"
5434e169010aSmrg    else
5435e169010aSmrg      $RM \"\$progdir/\$file\"
5436e169010aSmrg    fi"
54377914d74bSmrg
5438e169010aSmrg	  $ECHO "\
54397914d74bSmrg
5440e169010aSmrg    # relink executable if necessary
5441e169010aSmrg    if test -n \"\$relink_command\"; then
5442e169010aSmrg      if relink_command_output=\`eval \$relink_command 2>&1\`; then :
5443e169010aSmrg      else
54449d0ccd10Smrg	\$ECHO \"\$relink_command_output\" >&2
5445e169010aSmrg	$RM \"\$progdir/\$file\"
5446e169010aSmrg	exit 1
5447e169010aSmrg      fi
5448e169010aSmrg    fi
54497914d74bSmrg
5450e169010aSmrg    $MV \"\$progdir/\$file\" \"\$progdir/\$program\" 2>/dev/null ||
5451e169010aSmrg    { $RM \"\$progdir/\$program\";
5452e169010aSmrg      $MV \"\$progdir/\$file\" \"\$progdir/\$program\"; }
5453e169010aSmrg    $RM \"\$progdir/\$file\"
5454e169010aSmrg  fi"
5455e169010aSmrg	else
5456e169010aSmrg	  $ECHO "\
5457e169010aSmrg  program='$outputname'
5458e169010aSmrg  progdir=\"\$thisdir/$objdir\"
5459e169010aSmrg"
5460e169010aSmrg	fi
54617914d74bSmrg
5462e169010aSmrg	$ECHO "\
54637914d74bSmrg
5464e169010aSmrg  if test -f \"\$progdir/\$program\"; then"
54657914d74bSmrg
5466c63293b5Smrg	# fixup the dll searchpath if we need to.
5467c63293b5Smrg	#
5468c63293b5Smrg	# Fix the DLL searchpath if we need to.  Do this before prepending
5469c63293b5Smrg	# to shlibpath, because on Windows, both are PATH and uninstalled
5470c63293b5Smrg	# libraries must come first.
5471c63293b5Smrg	if test -n "$dllsearchpath"; then
5472c63293b5Smrg	  $ECHO "\
5473c63293b5Smrg    # Add the dll search path components to the executable PATH
5474c63293b5Smrg    PATH=$dllsearchpath:\$PATH
5475c63293b5Smrg"
5476c63293b5Smrg	fi
5477c63293b5Smrg
5478e169010aSmrg	# Export our shlibpath_var if we have one.
54799d0ccd10Smrg	if test yes = "$shlibpath_overrides_runpath" && test -n "$shlibpath_var" && test -n "$temp_rpath"; then
5480e169010aSmrg	  $ECHO "\
5481e169010aSmrg    # Add our own library path to $shlibpath_var
5482e169010aSmrg    $shlibpath_var=\"$temp_rpath\$$shlibpath_var\"
54837914d74bSmrg
5484e169010aSmrg    # Some systems cannot cope with colon-terminated $shlibpath_var
5485e169010aSmrg    # The second colon is a workaround for a bug in BeOS R4 sed
5486e8ead290Smrg    $shlibpath_var=\`\$ECHO \"\$$shlibpath_var\" | $SED 's/::*\$//'\`
54877914d74bSmrg
5488e169010aSmrg    export $shlibpath_var
5489e169010aSmrg"
54907914d74bSmrg	fi
54917914d74bSmrg
5492e169010aSmrg	$ECHO "\
5493e169010aSmrg    if test \"\$libtool_execute_magic\" != \"$magic\"; then
5494e169010aSmrg      # Run the actual program with our arguments.
5495e8ead290Smrg      func_exec_program \${1+\"\$@\"}
5496e169010aSmrg    fi
5497e169010aSmrg  else
5498e169010aSmrg    # The program doesn't exist.
54999d0ccd10Smrg    \$ECHO \"\$0: error: '\$progdir/\$program' does not exist\" 1>&2
5500e169010aSmrg    \$ECHO \"This script is just a wrapper for \$program.\" 1>&2
5501e8ead290Smrg    \$ECHO \"See the $PACKAGE documentation for more information.\" 1>&2
5502e169010aSmrg    exit 1
5503e169010aSmrg  fi
5504e169010aSmrgfi\
5505e169010aSmrg"
5506e169010aSmrg}
55077914d74bSmrg
55087914d74bSmrg
5509e169010aSmrg# func_emit_cwrapperexe_src
5510e169010aSmrg# emit the source code for a wrapper executable on stdout
5511e169010aSmrg# Must ONLY be called from within func_mode_link because
5512e169010aSmrg# it depends on a number of variable set therein.
5513e169010aSmrgfunc_emit_cwrapperexe_src ()
5514e169010aSmrg{
5515e169010aSmrg	cat <<EOF
55167914d74bSmrg
5517e169010aSmrg/* $cwrappersource - temporary wrapper executable for $objdir/$outputname
55189d0ccd10Smrg   Generated by $PROGRAM (GNU $PACKAGE) $VERSION
55197914d74bSmrg
5520e169010aSmrg   The $output program cannot be directly executed until all the libtool
5521e169010aSmrg   libraries that it depends on are installed.
55227914d74bSmrg
5523e169010aSmrg   This wrapper executable should never be moved out of the build directory.
5524e169010aSmrg   If it is, it will not operate correctly.
5525e169010aSmrg*/
5526e169010aSmrgEOF
5527e169010aSmrg	    cat <<"EOF"
5528e8ead290Smrg#ifdef _MSC_VER
5529e8ead290Smrg# define _CRT_SECURE_NO_DEPRECATE 1
5530e8ead290Smrg#endif
5531e169010aSmrg#include <stdio.h>
5532e169010aSmrg#include <stdlib.h>
5533e169010aSmrg#ifdef _MSC_VER
5534e169010aSmrg# include <direct.h>
5535e169010aSmrg# include <process.h>
5536e169010aSmrg# include <io.h>
5537e169010aSmrg#else
5538e169010aSmrg# include <unistd.h>
5539e169010aSmrg# include <stdint.h>
5540e169010aSmrg# ifdef __CYGWIN__
5541e169010aSmrg#  include <io.h>
5542e169010aSmrg# endif
5543e169010aSmrg#endif
5544e169010aSmrg#include <malloc.h>
5545e169010aSmrg#include <stdarg.h>
5546e169010aSmrg#include <assert.h>
5547e169010aSmrg#include <string.h>
5548e169010aSmrg#include <ctype.h>
5549e169010aSmrg#include <errno.h>
5550e169010aSmrg#include <fcntl.h>
5551e169010aSmrg#include <sys/stat.h>
5552e169010aSmrg
55539d0ccd10Smrg#define STREQ(s1, s2) (strcmp ((s1), (s2)) == 0)
55549d0ccd10Smrg
5555e8ead290Smrg/* declarations of non-ANSI functions */
55569d0ccd10Smrg#if defined __MINGW32__
5557e8ead290Smrg# ifdef __STRICT_ANSI__
5558e8ead290Smrgint _putenv (const char *);
5559e8ead290Smrg# endif
55609d0ccd10Smrg#elif defined __CYGWIN__
5561e8ead290Smrg# ifdef __STRICT_ANSI__
5562e8ead290Smrgchar *realpath (const char *, char *);
5563e8ead290Smrgint putenv (char *);
5564e8ead290Smrgint setenv (const char *, const char *, int);
5565e8ead290Smrg# endif
55669d0ccd10Smrg/* #elif defined other_platform || defined ... */
5567e8ead290Smrg#endif
5568e8ead290Smrg
5569e8ead290Smrg/* portability defines, excluding path handling macros */
55709d0ccd10Smrg#if defined _MSC_VER
5571e8ead290Smrg# define setmode _setmode
5572e8ead290Smrg# define stat    _stat
5573e8ead290Smrg# define chmod   _chmod
5574e8ead290Smrg# define getcwd  _getcwd
5575e8ead290Smrg# define putenv  _putenv
5576e8ead290Smrg# define S_IXUSR _S_IEXEC
55779d0ccd10Smrg#elif defined __MINGW32__
5578e8ead290Smrg# define setmode _setmode
5579e8ead290Smrg# define stat    _stat
5580e8ead290Smrg# define chmod   _chmod
5581e8ead290Smrg# define getcwd  _getcwd
5582e8ead290Smrg# define putenv  _putenv
55839d0ccd10Smrg#elif defined __CYGWIN__
5584e8ead290Smrg# define HAVE_SETENV
5585e8ead290Smrg# define FOPEN_WB "wb"
55869d0ccd10Smrg/* #elif defined other platforms ... */
5587e8ead290Smrg#endif
5588e8ead290Smrg
55899d0ccd10Smrg#if defined PATH_MAX
5590e169010aSmrg# define LT_PATHMAX PATH_MAX
55919d0ccd10Smrg#elif defined MAXPATHLEN
5592e169010aSmrg# define LT_PATHMAX MAXPATHLEN
5593e169010aSmrg#else
5594e169010aSmrg# define LT_PATHMAX 1024
5595e169010aSmrg#endif
5596e169010aSmrg
5597e169010aSmrg#ifndef S_IXOTH
5598e169010aSmrg# define S_IXOTH 0
5599e169010aSmrg#endif
5600e169010aSmrg#ifndef S_IXGRP
5601e169010aSmrg# define S_IXGRP 0
5602e169010aSmrg#endif
5603e169010aSmrg
5604e8ead290Smrg/* path handling portability macros */
5605e169010aSmrg#ifndef DIR_SEPARATOR
5606e169010aSmrg# define DIR_SEPARATOR '/'
5607e169010aSmrg# define PATH_SEPARATOR ':'
5608e169010aSmrg#endif
5609e169010aSmrg
56109d0ccd10Smrg#if defined _WIN32 || defined __MSDOS__ || defined __DJGPP__ || \
56119d0ccd10Smrg  defined __OS2__
5612e169010aSmrg# define HAVE_DOS_BASED_FILE_SYSTEM
5613e169010aSmrg# define FOPEN_WB "wb"
5614e169010aSmrg# ifndef DIR_SEPARATOR_2
5615e169010aSmrg#  define DIR_SEPARATOR_2 '\\'
5616e169010aSmrg# endif
5617e169010aSmrg# ifndef PATH_SEPARATOR_2
5618e169010aSmrg#  define PATH_SEPARATOR_2 ';'
5619e169010aSmrg# endif
5620e169010aSmrg#endif
5621e169010aSmrg
5622e169010aSmrg#ifndef DIR_SEPARATOR_2
5623e169010aSmrg# define IS_DIR_SEPARATOR(ch) ((ch) == DIR_SEPARATOR)
5624e169010aSmrg#else /* DIR_SEPARATOR_2 */
5625e169010aSmrg# define IS_DIR_SEPARATOR(ch) \
5626e169010aSmrg	(((ch) == DIR_SEPARATOR) || ((ch) == DIR_SEPARATOR_2))
5627e169010aSmrg#endif /* DIR_SEPARATOR_2 */
5628e169010aSmrg
5629e169010aSmrg#ifndef PATH_SEPARATOR_2
5630e169010aSmrg# define IS_PATH_SEPARATOR(ch) ((ch) == PATH_SEPARATOR)
5631e169010aSmrg#else /* PATH_SEPARATOR_2 */
5632e169010aSmrg# define IS_PATH_SEPARATOR(ch) ((ch) == PATH_SEPARATOR_2)
5633e169010aSmrg#endif /* PATH_SEPARATOR_2 */
5634e169010aSmrg
5635e169010aSmrg#ifndef FOPEN_WB
5636e169010aSmrg# define FOPEN_WB "w"
5637e169010aSmrg#endif
5638e169010aSmrg#ifndef _O_BINARY
5639e169010aSmrg# define _O_BINARY 0
5640e169010aSmrg#endif
5641e169010aSmrg
5642e169010aSmrg#define XMALLOC(type, num)      ((type *) xmalloc ((num) * sizeof(type)))
5643e169010aSmrg#define XFREE(stale) do { \
56449d0ccd10Smrg  if (stale) { free (stale); stale = 0; } \
5645e169010aSmrg} while (0)
5646e169010aSmrg
56479d0ccd10Smrg#if defined LT_DEBUGWRAPPER
5648e8ead290Smrgstatic int lt_debug = 1;
5649e169010aSmrg#else
5650e8ead290Smrgstatic int lt_debug = 0;
5651e169010aSmrg#endif
5652e169010aSmrg
5653e8ead290Smrgconst char *program_name = "libtool-wrapper"; /* in case xstrdup fails */
5654e169010aSmrg
5655e169010aSmrgvoid *xmalloc (size_t num);
5656e169010aSmrgchar *xstrdup (const char *string);
5657e169010aSmrgconst char *base_name (const char *name);
5658e169010aSmrgchar *find_executable (const char *wrapper);
5659e169010aSmrgchar *chase_symlinks (const char *pathspec);
5660e169010aSmrgint make_executable (const char *path);
5661e169010aSmrgint check_executable (const char *path);
5662e169010aSmrgchar *strendzap (char *str, const char *pat);
5663e8ead290Smrgvoid lt_debugprintf (const char *file, int line, const char *fmt, ...);
5664e8ead290Smrgvoid lt_fatal (const char *file, int line, const char *message, ...);
5665e8ead290Smrgstatic const char *nonnull (const char *s);
5666e8ead290Smrgstatic const char *nonempty (const char *s);
5667e169010aSmrgvoid lt_setenv (const char *name, const char *value);
5668e169010aSmrgchar *lt_extend_str (const char *orig_value, const char *add, int to_end);
5669e169010aSmrgvoid lt_update_exe_path (const char *name, const char *value);
5670e169010aSmrgvoid lt_update_lib_path (const char *name, const char *value);
5671e8ead290Smrgchar **prepare_spawn (char **argv);
5672e8ead290Smrgvoid lt_dump_script (FILE *f);
5673e169010aSmrgEOF
5674e169010aSmrg
5675e169010aSmrg	    cat <<EOF
56769d0ccd10Smrg#if __GNUC__ < 4 || (__GNUC__ == 4 && __GNUC_MINOR__ < 5)
56779d0ccd10Smrg# define externally_visible volatile
56789d0ccd10Smrg#else
56799d0ccd10Smrg# define externally_visible __attribute__((externally_visible)) volatile
56809d0ccd10Smrg#endif
56819d0ccd10Smrgexternally_visible const char * MAGIC_EXE = "$magic_exe";
5682e169010aSmrgconst char * LIB_PATH_VARNAME = "$shlibpath_var";
5683e169010aSmrgEOF
5684e169010aSmrg
56859d0ccd10Smrg	    if test yes = "$shlibpath_overrides_runpath" && test -n "$shlibpath_var" && test -n "$temp_rpath"; then
5686c63293b5Smrg              func_to_host_path "$temp_rpath"
5687e169010aSmrg	      cat <<EOF
5688c63293b5Smrgconst char * LIB_PATH_VALUE   = "$func_to_host_path_result";
56897914d74bSmrgEOF
56907914d74bSmrg	    else
5691e169010aSmrg	      cat <<"EOF"
5692e169010aSmrgconst char * LIB_PATH_VALUE   = "";
5693e169010aSmrgEOF
56947914d74bSmrg	    fi
5695e169010aSmrg
5696e169010aSmrg	    if test -n "$dllsearchpath"; then
5697c63293b5Smrg              func_to_host_path "$dllsearchpath:"
5698e169010aSmrg	      cat <<EOF
5699e169010aSmrgconst char * EXE_PATH_VARNAME = "PATH";
5700c63293b5Smrgconst char * EXE_PATH_VALUE   = "$func_to_host_path_result";
5701e169010aSmrgEOF
57027914d74bSmrg	    else
5703e169010aSmrg	      cat <<"EOF"
5704e169010aSmrgconst char * EXE_PATH_VARNAME = "";
5705e169010aSmrgconst char * EXE_PATH_VALUE   = "";
5706e169010aSmrgEOF
57077914d74bSmrg	    fi
5708e169010aSmrg
57099d0ccd10Smrg	    if test yes = "$fast_install"; then
5710e169010aSmrg	      cat <<EOF
5711e169010aSmrgconst char * TARGET_PROGRAM_NAME = "lt-$outputname"; /* hopefully, no .exe */
5712e169010aSmrgEOF
57137914d74bSmrg	    else
5714e169010aSmrg	      cat <<EOF
5715e169010aSmrgconst char * TARGET_PROGRAM_NAME = "$outputname"; /* hopefully, no .exe */
5716e169010aSmrgEOF
57177914d74bSmrg	    fi
57187914d74bSmrg
57197914d74bSmrg
5720e169010aSmrg	    cat <<"EOF"
57217914d74bSmrg
5722e169010aSmrg#define LTWRAPPER_OPTION_PREFIX         "--lt-"
57237914d74bSmrg
5724e169010aSmrgstatic const char *ltwrapper_option_prefix = LTWRAPPER_OPTION_PREFIX;
5725e169010aSmrgstatic const char *dumpscript_opt       = LTWRAPPER_OPTION_PREFIX "dump-script";
5726e8ead290Smrgstatic const char *debug_opt            = LTWRAPPER_OPTION_PREFIX "debug";
57277914d74bSmrg
5728e169010aSmrgint
5729e169010aSmrgmain (int argc, char *argv[])
5730e169010aSmrg{
5731e169010aSmrg  char **newargz;
5732e169010aSmrg  int  newargc;
5733e169010aSmrg  char *tmp_pathspec;
5734e169010aSmrg  char *actual_cwrapper_path;
5735e169010aSmrg  char *actual_cwrapper_name;
5736e169010aSmrg  char *target_name;
5737e169010aSmrg  char *lt_argv_zero;
57389d0ccd10Smrg  int rval = 127;
57397914d74bSmrg
5740e169010aSmrg  int i;
57417914d74bSmrg
5742e169010aSmrg  program_name = (char *) xstrdup (base_name (argv[0]));
57439d0ccd10Smrg  newargz = XMALLOC (char *, (size_t) argc + 1);
57447914d74bSmrg
5745e8ead290Smrg  /* very simple arg parsing; don't want to rely on getopt
5746e8ead290Smrg   * also, copy all non cwrapper options to newargz, except
5747e8ead290Smrg   * argz[0], which is handled differently
5748e8ead290Smrg   */
5749e8ead290Smrg  newargc=0;
5750e169010aSmrg  for (i = 1; i < argc; i++)
5751e169010aSmrg    {
57529d0ccd10Smrg      if (STREQ (argv[i], dumpscript_opt))
5753e169010aSmrg	{
5754e169010aSmrgEOF
57559d0ccd10Smrg	    case $host in
5756e169010aSmrg	      *mingw* | *cygwin* )
5757e169010aSmrg		# make stdout use "unix" line endings
5758e169010aSmrg		echo "          setmode(1,_O_BINARY);"
5759e169010aSmrg		;;
5760e169010aSmrg	      esac
57617914d74bSmrg
5762e169010aSmrg	    cat <<"EOF"
5763e8ead290Smrg	  lt_dump_script (stdout);
5764e169010aSmrg	  return 0;
5765e169010aSmrg	}
57669d0ccd10Smrg      if (STREQ (argv[i], debug_opt))
5767e8ead290Smrg	{
5768e8ead290Smrg          lt_debug = 1;
5769e8ead290Smrg          continue;
5770e8ead290Smrg	}
57719d0ccd10Smrg      if (STREQ (argv[i], ltwrapper_option_prefix))
5772e8ead290Smrg        {
5773e8ead290Smrg          /* however, if there is an option in the LTWRAPPER_OPTION_PREFIX
5774e8ead290Smrg             namespace, but it is not one of the ones we know about and
5775e8ead290Smrg             have already dealt with, above (inluding dump-script), then
5776e8ead290Smrg             report an error. Otherwise, targets might begin to believe
5777e8ead290Smrg             they are allowed to use options in the LTWRAPPER_OPTION_PREFIX
5778e8ead290Smrg             namespace. The first time any user complains about this, we'll
5779e8ead290Smrg             need to make LTWRAPPER_OPTION_PREFIX a configure-time option
5780e8ead290Smrg             or a configure.ac-settable value.
5781e8ead290Smrg           */
5782e8ead290Smrg          lt_fatal (__FILE__, __LINE__,
5783e8ead290Smrg		    "unrecognized %s option: '%s'",
5784e8ead290Smrg                    ltwrapper_option_prefix, argv[i]);
5785e8ead290Smrg        }
5786e8ead290Smrg      /* otherwise ... */
5787e8ead290Smrg      newargz[++newargc] = xstrdup (argv[i]);
5788e169010aSmrg    }
5789e8ead290Smrg  newargz[++newargc] = NULL;
5790e8ead290Smrg
5791e8ead290SmrgEOF
5792e8ead290Smrg	    cat <<EOF
5793e8ead290Smrg  /* The GNU banner must be the first non-error debug message */
57949d0ccd10Smrg  lt_debugprintf (__FILE__, __LINE__, "libtool wrapper (GNU $PACKAGE) $VERSION\n");
5795e8ead290SmrgEOF
5796e8ead290Smrg	    cat <<"EOF"
5797e8ead290Smrg  lt_debugprintf (__FILE__, __LINE__, "(main) argv[0]: %s\n", argv[0]);
5798e8ead290Smrg  lt_debugprintf (__FILE__, __LINE__, "(main) program_name: %s\n", program_name);
57997914d74bSmrg
5800e169010aSmrg  tmp_pathspec = find_executable (argv[0]);
5801e169010aSmrg  if (tmp_pathspec == NULL)
5802e8ead290Smrg    lt_fatal (__FILE__, __LINE__, "couldn't find %s", argv[0]);
5803e8ead290Smrg  lt_debugprintf (__FILE__, __LINE__,
5804e8ead290Smrg                  "(main) found exe (before symlink chase) at: %s\n",
5805e8ead290Smrg		  tmp_pathspec);
5806e169010aSmrg
5807e169010aSmrg  actual_cwrapper_path = chase_symlinks (tmp_pathspec);
5808e8ead290Smrg  lt_debugprintf (__FILE__, __LINE__,
5809e8ead290Smrg                  "(main) found exe (after symlink chase) at: %s\n",
5810e8ead290Smrg		  actual_cwrapper_path);
5811e169010aSmrg  XFREE (tmp_pathspec);
5812e169010aSmrg
5813e8ead290Smrg  actual_cwrapper_name = xstrdup (base_name (actual_cwrapper_path));
5814e169010aSmrg  strendzap (actual_cwrapper_path, actual_cwrapper_name);
5815e169010aSmrg
5816e169010aSmrg  /* wrapper name transforms */
5817e169010aSmrg  strendzap (actual_cwrapper_name, ".exe");
5818e169010aSmrg  tmp_pathspec = lt_extend_str (actual_cwrapper_name, ".exe", 1);
5819e169010aSmrg  XFREE (actual_cwrapper_name);
5820e169010aSmrg  actual_cwrapper_name = tmp_pathspec;
5821e169010aSmrg  tmp_pathspec = 0;
5822e169010aSmrg
5823e169010aSmrg  /* target_name transforms -- use actual target program name; might have lt- prefix */
5824e169010aSmrg  target_name = xstrdup (base_name (TARGET_PROGRAM_NAME));
5825e169010aSmrg  strendzap (target_name, ".exe");
5826e169010aSmrg  tmp_pathspec = lt_extend_str (target_name, ".exe", 1);
5827e169010aSmrg  XFREE (target_name);
5828e169010aSmrg  target_name = tmp_pathspec;
5829e169010aSmrg  tmp_pathspec = 0;
5830e169010aSmrg
5831e8ead290Smrg  lt_debugprintf (__FILE__, __LINE__,
5832e8ead290Smrg		  "(main) libtool target name: %s\n",
5833e8ead290Smrg		  target_name);
5834e169010aSmrgEOF
58357914d74bSmrg
5836e169010aSmrg	    cat <<EOF
5837e169010aSmrg  newargz[0] =
5838e169010aSmrg    XMALLOC (char, (strlen (actual_cwrapper_path) +
5839e169010aSmrg		    strlen ("$objdir") + 1 + strlen (actual_cwrapper_name) + 1));
5840e169010aSmrg  strcpy (newargz[0], actual_cwrapper_path);
5841e169010aSmrg  strcat (newargz[0], "$objdir");
5842e169010aSmrg  strcat (newargz[0], "/");
5843e169010aSmrgEOF
58447914d74bSmrg
5845e169010aSmrg	    cat <<"EOF"
5846e169010aSmrg  /* stop here, and copy so we don't have to do this twice */
5847e169010aSmrg  tmp_pathspec = xstrdup (newargz[0]);
58487914d74bSmrg
5849e169010aSmrg  /* do NOT want the lt- prefix here, so use actual_cwrapper_name */
5850e169010aSmrg  strcat (newargz[0], actual_cwrapper_name);
58517914d74bSmrg
5852e169010aSmrg  /* DO want the lt- prefix here if it exists, so use target_name */
5853e169010aSmrg  lt_argv_zero = lt_extend_str (tmp_pathspec, target_name, 1);
5854e169010aSmrg  XFREE (tmp_pathspec);
5855e169010aSmrg  tmp_pathspec = NULL;
5856e169010aSmrgEOF
58577914d74bSmrg
5858e169010aSmrg	    case $host_os in
5859e169010aSmrg	      mingw*)
5860e169010aSmrg	    cat <<"EOF"
5861e169010aSmrg  {
5862e169010aSmrg    char* p;
5863e169010aSmrg    while ((p = strchr (newargz[0], '\\')) != NULL)
5864e169010aSmrg      {
5865e169010aSmrg	*p = '/';
5866e169010aSmrg      }
5867e169010aSmrg    while ((p = strchr (lt_argv_zero, '\\')) != NULL)
5868e169010aSmrg      {
5869e169010aSmrg	*p = '/';
5870e169010aSmrg      }
5871e169010aSmrg  }
5872e169010aSmrgEOF
5873e169010aSmrg	    ;;
5874e169010aSmrg	    esac
58757914d74bSmrg
5876e169010aSmrg	    cat <<"EOF"
5877e169010aSmrg  XFREE (target_name);
5878e169010aSmrg  XFREE (actual_cwrapper_path);
5879e169010aSmrg  XFREE (actual_cwrapper_name);
58807914d74bSmrg
5881e169010aSmrg  lt_setenv ("BIN_SH", "xpg4"); /* for Tru64 */
5882e169010aSmrg  lt_setenv ("DUALCASE", "1");  /* for MSK sh */
5883c63293b5Smrg  /* Update the DLL searchpath.  EXE_PATH_VALUE ($dllsearchpath) must
5884c63293b5Smrg     be prepended before (that is, appear after) LIB_PATH_VALUE ($temp_rpath)
5885c63293b5Smrg     because on Windows, both *_VARNAMEs are PATH but uninstalled
5886c63293b5Smrg     libraries must come first. */
5887e169010aSmrg  lt_update_exe_path (EXE_PATH_VARNAME, EXE_PATH_VALUE);
5888c63293b5Smrg  lt_update_lib_path (LIB_PATH_VARNAME, LIB_PATH_VALUE);
58897914d74bSmrg
5890e8ead290Smrg  lt_debugprintf (__FILE__, __LINE__, "(main) lt_argv_zero: %s\n",
5891e8ead290Smrg		  nonnull (lt_argv_zero));
5892e169010aSmrg  for (i = 0; i < newargc; i++)
5893e169010aSmrg    {
5894e8ead290Smrg      lt_debugprintf (__FILE__, __LINE__, "(main) newargz[%d]: %s\n",
5895e8ead290Smrg		      i, nonnull (newargz[i]));
5896e169010aSmrg    }
58977914d74bSmrg
5898e169010aSmrgEOF
58997914d74bSmrg
5900e169010aSmrg	    case $host_os in
5901e169010aSmrg	      mingw*)
5902e169010aSmrg		cat <<"EOF"
5903e169010aSmrg  /* execv doesn't actually work on mingw as expected on unix */
5904e8ead290Smrg  newargz = prepare_spawn (newargz);
59059d0ccd10Smrg  rval = (int) _spawnv (_P_WAIT, lt_argv_zero, (const char * const *) newargz);
5906e169010aSmrg  if (rval == -1)
5907e169010aSmrg    {
5908e169010aSmrg      /* failed to start process */
5909e8ead290Smrg      lt_debugprintf (__FILE__, __LINE__,
5910e8ead290Smrg		      "(main) failed to launch target \"%s\": %s\n",
5911e8ead290Smrg		      lt_argv_zero, nonnull (strerror (errno)));
5912e169010aSmrg      return 127;
5913e169010aSmrg    }
5914e169010aSmrg  return rval;
5915e169010aSmrgEOF
5916e169010aSmrg		;;
5917e169010aSmrg	      *)
5918e169010aSmrg		cat <<"EOF"
5919e169010aSmrg  execv (lt_argv_zero, newargz);
5920e169010aSmrg  return rval; /* =127, but avoids unused variable warning */
5921e169010aSmrgEOF
5922e169010aSmrg		;;
5923e169010aSmrg	    esac
59247914d74bSmrg
5925e169010aSmrg	    cat <<"EOF"
5926e169010aSmrg}
59277914d74bSmrg
5928e169010aSmrgvoid *
5929e169010aSmrgxmalloc (size_t num)
5930e169010aSmrg{
5931e169010aSmrg  void *p = (void *) malloc (num);
5932e169010aSmrg  if (!p)
5933e8ead290Smrg    lt_fatal (__FILE__, __LINE__, "memory exhausted");
59347914d74bSmrg
5935e169010aSmrg  return p;
5936e169010aSmrg}
59377914d74bSmrg
5938e169010aSmrgchar *
5939e169010aSmrgxstrdup (const char *string)
5940e169010aSmrg{
5941e169010aSmrg  return string ? strcpy ((char *) xmalloc (strlen (string) + 1),
5942e169010aSmrg			  string) : NULL;
5943e169010aSmrg}
59447914d74bSmrg
5945e169010aSmrgconst char *
5946e169010aSmrgbase_name (const char *name)
5947e169010aSmrg{
5948e169010aSmrg  const char *base;
59497914d74bSmrg
59509d0ccd10Smrg#if defined HAVE_DOS_BASED_FILE_SYSTEM
5951e169010aSmrg  /* Skip over the disk name in MSDOS pathnames. */
5952e169010aSmrg  if (isalpha ((unsigned char) name[0]) && name[1] == ':')
5953e169010aSmrg    name += 2;
5954e169010aSmrg#endif
59557914d74bSmrg
5956e169010aSmrg  for (base = name; *name; name++)
5957e169010aSmrg    if (IS_DIR_SEPARATOR (*name))
5958e169010aSmrg      base = name + 1;
5959e169010aSmrg  return base;
5960e169010aSmrg}
59617914d74bSmrg
5962e169010aSmrgint
5963e169010aSmrgcheck_executable (const char *path)
5964e169010aSmrg{
5965e169010aSmrg  struct stat st;
59667914d74bSmrg
5967e8ead290Smrg  lt_debugprintf (__FILE__, __LINE__, "(check_executable): %s\n",
5968e8ead290Smrg                  nonempty (path));
5969e169010aSmrg  if ((!path) || (!*path))
5970e169010aSmrg    return 0;
59717914d74bSmrg
5972e169010aSmrg  if ((stat (path, &st) >= 0)
5973e169010aSmrg      && (st.st_mode & (S_IXUSR | S_IXGRP | S_IXOTH)))
5974e169010aSmrg    return 1;
5975e169010aSmrg  else
5976e169010aSmrg    return 0;
5977e169010aSmrg}
59787914d74bSmrg
5979e169010aSmrgint
5980e169010aSmrgmake_executable (const char *path)
5981e169010aSmrg{
5982e169010aSmrg  int rval = 0;
5983e169010aSmrg  struct stat st;
59847914d74bSmrg
5985e8ead290Smrg  lt_debugprintf (__FILE__, __LINE__, "(make_executable): %s\n",
5986e8ead290Smrg                  nonempty (path));
5987e169010aSmrg  if ((!path) || (!*path))
5988e169010aSmrg    return 0;
59897914d74bSmrg
5990e169010aSmrg  if (stat (path, &st) >= 0)
5991e169010aSmrg    {
5992e169010aSmrg      rval = chmod (path, st.st_mode | S_IXOTH | S_IXGRP | S_IXUSR);
5993e169010aSmrg    }
5994e169010aSmrg  return rval;
5995e169010aSmrg}
59967914d74bSmrg
5997e169010aSmrg/* Searches for the full path of the wrapper.  Returns
5998e169010aSmrg   newly allocated full path name if found, NULL otherwise
5999e169010aSmrg   Does not chase symlinks, even on platforms that support them.
6000e169010aSmrg*/
6001e169010aSmrgchar *
6002e169010aSmrgfind_executable (const char *wrapper)
6003e169010aSmrg{
6004e169010aSmrg  int has_slash = 0;
6005e169010aSmrg  const char *p;
6006e169010aSmrg  const char *p_next;
6007e169010aSmrg  /* static buffer for getcwd */
6008e169010aSmrg  char tmp[LT_PATHMAX + 1];
60099d0ccd10Smrg  size_t tmp_len;
6010e169010aSmrg  char *concat_name;
60117914d74bSmrg
6012e8ead290Smrg  lt_debugprintf (__FILE__, __LINE__, "(find_executable): %s\n",
6013e8ead290Smrg                  nonempty (wrapper));
60147914d74bSmrg
6015e169010aSmrg  if ((wrapper == NULL) || (*wrapper == '\0'))
6016e169010aSmrg    return NULL;
60177914d74bSmrg
6018e169010aSmrg  /* Absolute path? */
60199d0ccd10Smrg#if defined HAVE_DOS_BASED_FILE_SYSTEM
6020e169010aSmrg  if (isalpha ((unsigned char) wrapper[0]) && wrapper[1] == ':')
6021e169010aSmrg    {
6022e169010aSmrg      concat_name = xstrdup (wrapper);
6023e169010aSmrg      if (check_executable (concat_name))
6024e169010aSmrg	return concat_name;
6025e169010aSmrg      XFREE (concat_name);
6026e169010aSmrg    }
6027e169010aSmrg  else
6028e169010aSmrg    {
6029e169010aSmrg#endif
6030e169010aSmrg      if (IS_DIR_SEPARATOR (wrapper[0]))
6031e169010aSmrg	{
6032e169010aSmrg	  concat_name = xstrdup (wrapper);
6033e169010aSmrg	  if (check_executable (concat_name))
6034e169010aSmrg	    return concat_name;
6035e169010aSmrg	  XFREE (concat_name);
6036e169010aSmrg	}
60379d0ccd10Smrg#if defined HAVE_DOS_BASED_FILE_SYSTEM
6038e169010aSmrg    }
6039e169010aSmrg#endif
60407914d74bSmrg
6041e169010aSmrg  for (p = wrapper; *p; p++)
6042e169010aSmrg    if (*p == '/')
6043e169010aSmrg      {
6044e169010aSmrg	has_slash = 1;
6045e169010aSmrg	break;
6046e169010aSmrg      }
6047e169010aSmrg  if (!has_slash)
6048e169010aSmrg    {
6049e169010aSmrg      /* no slashes; search PATH */
6050e169010aSmrg      const char *path = getenv ("PATH");
6051e169010aSmrg      if (path != NULL)
6052e169010aSmrg	{
6053e169010aSmrg	  for (p = path; *p; p = p_next)
6054e169010aSmrg	    {
6055e169010aSmrg	      const char *q;
6056e169010aSmrg	      size_t p_len;
6057e169010aSmrg	      for (q = p; *q; q++)
6058e169010aSmrg		if (IS_PATH_SEPARATOR (*q))
6059e169010aSmrg		  break;
60609d0ccd10Smrg	      p_len = (size_t) (q - p);
6061e169010aSmrg	      p_next = (*q == '\0' ? q : q + 1);
6062e169010aSmrg	      if (p_len == 0)
6063e169010aSmrg		{
6064e169010aSmrg		  /* empty path: current directory */
6065e169010aSmrg		  if (getcwd (tmp, LT_PATHMAX) == NULL)
6066e8ead290Smrg		    lt_fatal (__FILE__, __LINE__, "getcwd failed: %s",
6067e8ead290Smrg                              nonnull (strerror (errno)));
6068e169010aSmrg		  tmp_len = strlen (tmp);
6069e169010aSmrg		  concat_name =
6070e169010aSmrg		    XMALLOC (char, tmp_len + 1 + strlen (wrapper) + 1);
6071e169010aSmrg		  memcpy (concat_name, tmp, tmp_len);
6072e169010aSmrg		  concat_name[tmp_len] = '/';
6073e169010aSmrg		  strcpy (concat_name + tmp_len + 1, wrapper);
6074e169010aSmrg		}
6075e169010aSmrg	      else
6076e169010aSmrg		{
6077e169010aSmrg		  concat_name =
6078e169010aSmrg		    XMALLOC (char, p_len + 1 + strlen (wrapper) + 1);
6079e169010aSmrg		  memcpy (concat_name, p, p_len);
6080e169010aSmrg		  concat_name[p_len] = '/';
6081e169010aSmrg		  strcpy (concat_name + p_len + 1, wrapper);
6082e169010aSmrg		}
6083e169010aSmrg	      if (check_executable (concat_name))
6084e169010aSmrg		return concat_name;
6085e169010aSmrg	      XFREE (concat_name);
6086e169010aSmrg	    }
6087e169010aSmrg	}
6088e169010aSmrg      /* not found in PATH; assume curdir */
6089e169010aSmrg    }
6090e169010aSmrg  /* Relative path | not found in path: prepend cwd */
6091e169010aSmrg  if (getcwd (tmp, LT_PATHMAX) == NULL)
6092e8ead290Smrg    lt_fatal (__FILE__, __LINE__, "getcwd failed: %s",
6093e8ead290Smrg              nonnull (strerror (errno)));
6094e169010aSmrg  tmp_len = strlen (tmp);
6095e169010aSmrg  concat_name = XMALLOC (char, tmp_len + 1 + strlen (wrapper) + 1);
6096e169010aSmrg  memcpy (concat_name, tmp, tmp_len);
6097e169010aSmrg  concat_name[tmp_len] = '/';
6098e169010aSmrg  strcpy (concat_name + tmp_len + 1, wrapper);
60997914d74bSmrg
6100e169010aSmrg  if (check_executable (concat_name))
6101e169010aSmrg    return concat_name;
6102e169010aSmrg  XFREE (concat_name);
6103e169010aSmrg  return NULL;
6104e169010aSmrg}
61057914d74bSmrg
6106e169010aSmrgchar *
6107e169010aSmrgchase_symlinks (const char *pathspec)
6108e169010aSmrg{
6109e169010aSmrg#ifndef S_ISLNK
6110e169010aSmrg  return xstrdup (pathspec);
6111e169010aSmrg#else
6112e169010aSmrg  char buf[LT_PATHMAX];
6113e169010aSmrg  struct stat s;
6114e169010aSmrg  char *tmp_pathspec = xstrdup (pathspec);
6115e169010aSmrg  char *p;
6116e169010aSmrg  int has_symlinks = 0;
6117e169010aSmrg  while (strlen (tmp_pathspec) && !has_symlinks)
6118e169010aSmrg    {
6119e8ead290Smrg      lt_debugprintf (__FILE__, __LINE__,
6120e8ead290Smrg		      "checking path component for symlinks: %s\n",
6121e8ead290Smrg		      tmp_pathspec);
6122e169010aSmrg      if (lstat (tmp_pathspec, &s) == 0)
6123e169010aSmrg	{
6124e169010aSmrg	  if (S_ISLNK (s.st_mode) != 0)
6125e169010aSmrg	    {
6126e169010aSmrg	      has_symlinks = 1;
6127e169010aSmrg	      break;
6128e169010aSmrg	    }
61297914d74bSmrg
6130e169010aSmrg	  /* search backwards for last DIR_SEPARATOR */
6131e169010aSmrg	  p = tmp_pathspec + strlen (tmp_pathspec) - 1;
6132e169010aSmrg	  while ((p > tmp_pathspec) && (!IS_DIR_SEPARATOR (*p)))
6133e169010aSmrg	    p--;
6134e169010aSmrg	  if ((p == tmp_pathspec) && (!IS_DIR_SEPARATOR (*p)))
6135e169010aSmrg	    {
6136e169010aSmrg	      /* no more DIR_SEPARATORS left */
6137e169010aSmrg	      break;
6138e169010aSmrg	    }
6139e169010aSmrg	  *p = '\0';
6140e169010aSmrg	}
6141e169010aSmrg      else
6142e169010aSmrg	{
6143e8ead290Smrg	  lt_fatal (__FILE__, __LINE__,
6144e8ead290Smrg		    "error accessing file \"%s\": %s",
6145e8ead290Smrg		    tmp_pathspec, nonnull (strerror (errno)));
6146e169010aSmrg	}
6147e169010aSmrg    }
6148e169010aSmrg  XFREE (tmp_pathspec);
61497914d74bSmrg
6150e169010aSmrg  if (!has_symlinks)
6151e169010aSmrg    {
6152e169010aSmrg      return xstrdup (pathspec);
6153e169010aSmrg    }
61547914d74bSmrg
6155e169010aSmrg  tmp_pathspec = realpath (pathspec, buf);
6156e169010aSmrg  if (tmp_pathspec == 0)
6157e169010aSmrg    {
6158e8ead290Smrg      lt_fatal (__FILE__, __LINE__,
6159e8ead290Smrg		"could not follow symlinks for %s", pathspec);
6160e169010aSmrg    }
6161e169010aSmrg  return xstrdup (tmp_pathspec);
6162e169010aSmrg#endif
6163e169010aSmrg}
61647914d74bSmrg
6165e169010aSmrgchar *
6166e169010aSmrgstrendzap (char *str, const char *pat)
6167e169010aSmrg{
6168e169010aSmrg  size_t len, patlen;
61697914d74bSmrg
6170e169010aSmrg  assert (str != NULL);
6171e169010aSmrg  assert (pat != NULL);
61727914d74bSmrg
6173e169010aSmrg  len = strlen (str);
6174e169010aSmrg  patlen = strlen (pat);
61757914d74bSmrg
6176e169010aSmrg  if (patlen <= len)
6177e169010aSmrg    {
6178e169010aSmrg      str += len - patlen;
61799d0ccd10Smrg      if (STREQ (str, pat))
6180e169010aSmrg	*str = '\0';
6181e169010aSmrg    }
6182e169010aSmrg  return str;
6183e169010aSmrg}
61847914d74bSmrg
6185e8ead290Smrgvoid
6186e8ead290Smrglt_debugprintf (const char *file, int line, const char *fmt, ...)
6187e8ead290Smrg{
6188e8ead290Smrg  va_list args;
6189e8ead290Smrg  if (lt_debug)
6190e8ead290Smrg    {
6191e8ead290Smrg      (void) fprintf (stderr, "%s:%s:%d: ", program_name, file, line);
6192e8ead290Smrg      va_start (args, fmt);
6193e8ead290Smrg      (void) vfprintf (stderr, fmt, args);
6194e8ead290Smrg      va_end (args);
6195e8ead290Smrg    }
6196e8ead290Smrg}
6197e8ead290Smrg
6198e169010aSmrgstatic void
6199e8ead290Smrglt_error_core (int exit_status, const char *file,
6200e8ead290Smrg	       int line, const char *mode,
6201e169010aSmrg	       const char *message, va_list ap)
6202e169010aSmrg{
6203e8ead290Smrg  fprintf (stderr, "%s:%s:%d: %s: ", program_name, file, line, mode);
6204e169010aSmrg  vfprintf (stderr, message, ap);
6205e169010aSmrg  fprintf (stderr, ".\n");
62067914d74bSmrg
6207e169010aSmrg  if (exit_status >= 0)
6208e169010aSmrg    exit (exit_status);
6209e169010aSmrg}
62107914d74bSmrg
6211e169010aSmrgvoid
6212e8ead290Smrglt_fatal (const char *file, int line, const char *message, ...)
6213e169010aSmrg{
6214e169010aSmrg  va_list ap;
6215e169010aSmrg  va_start (ap, message);
6216e8ead290Smrg  lt_error_core (EXIT_FAILURE, file, line, "FATAL", message, ap);
6217e169010aSmrg  va_end (ap);
6218e169010aSmrg}
62197914d74bSmrg
6220e8ead290Smrgstatic const char *
6221e8ead290Smrgnonnull (const char *s)
6222e8ead290Smrg{
6223e8ead290Smrg  return s ? s : "(null)";
6224e8ead290Smrg}
6225e8ead290Smrg
6226e8ead290Smrgstatic const char *
6227e8ead290Smrgnonempty (const char *s)
6228e8ead290Smrg{
6229e8ead290Smrg  return (s && !*s) ? "(empty)" : nonnull (s);
6230e8ead290Smrg}
6231e8ead290Smrg
6232e169010aSmrgvoid
6233e169010aSmrglt_setenv (const char *name, const char *value)
6234e169010aSmrg{
6235e8ead290Smrg  lt_debugprintf (__FILE__, __LINE__,
6236e8ead290Smrg		  "(lt_setenv) setting '%s' to '%s'\n",
6237e8ead290Smrg                  nonnull (name), nonnull (value));
6238e169010aSmrg  {
6239e169010aSmrg#ifdef HAVE_SETENV
6240e169010aSmrg    /* always make a copy, for consistency with !HAVE_SETENV */
6241e169010aSmrg    char *str = xstrdup (value);
6242e169010aSmrg    setenv (name, str, 1);
6243e169010aSmrg#else
62449d0ccd10Smrg    size_t len = strlen (name) + 1 + strlen (value) + 1;
6245e169010aSmrg    char *str = XMALLOC (char, len);
6246e169010aSmrg    sprintf (str, "%s=%s", name, value);
6247e169010aSmrg    if (putenv (str) != EXIT_SUCCESS)
6248e169010aSmrg      {
6249e169010aSmrg        XFREE (str);
6250e169010aSmrg      }
6251e169010aSmrg#endif
6252e169010aSmrg  }
6253e169010aSmrg}
62547914d74bSmrg
6255e169010aSmrgchar *
6256e169010aSmrglt_extend_str (const char *orig_value, const char *add, int to_end)
6257e169010aSmrg{
6258e169010aSmrg  char *new_value;
6259e169010aSmrg  if (orig_value && *orig_value)
6260e169010aSmrg    {
62619d0ccd10Smrg      size_t orig_value_len = strlen (orig_value);
62629d0ccd10Smrg      size_t add_len = strlen (add);
6263e169010aSmrg      new_value = XMALLOC (char, add_len + orig_value_len + 1);
6264e169010aSmrg      if (to_end)
6265e169010aSmrg        {
6266e169010aSmrg          strcpy (new_value, orig_value);
6267e169010aSmrg          strcpy (new_value + orig_value_len, add);
6268e169010aSmrg        }
6269e169010aSmrg      else
6270e169010aSmrg        {
6271e169010aSmrg          strcpy (new_value, add);
6272e169010aSmrg          strcpy (new_value + add_len, orig_value);
6273e169010aSmrg        }
6274e169010aSmrg    }
6275e169010aSmrg  else
6276e169010aSmrg    {
6277e169010aSmrg      new_value = xstrdup (add);
6278e169010aSmrg    }
6279e169010aSmrg  return new_value;
6280e169010aSmrg}
62817914d74bSmrg
6282e169010aSmrgvoid
6283e169010aSmrglt_update_exe_path (const char *name, const char *value)
6284e169010aSmrg{
6285e8ead290Smrg  lt_debugprintf (__FILE__, __LINE__,
6286e8ead290Smrg		  "(lt_update_exe_path) modifying '%s' by prepending '%s'\n",
6287e8ead290Smrg                  nonnull (name), nonnull (value));
62887914d74bSmrg
6289e169010aSmrg  if (name && *name && value && *value)
6290e169010aSmrg    {
6291e169010aSmrg      char *new_value = lt_extend_str (getenv (name), value, 0);
6292e169010aSmrg      /* some systems can't cope with a ':'-terminated path #' */
62939d0ccd10Smrg      size_t len = strlen (new_value);
62949d0ccd10Smrg      while ((len > 0) && IS_PATH_SEPARATOR (new_value[len-1]))
6295e169010aSmrg        {
62969d0ccd10Smrg          new_value[--len] = '\0';
6297e169010aSmrg        }
6298e169010aSmrg      lt_setenv (name, new_value);
6299e169010aSmrg      XFREE (new_value);
6300e169010aSmrg    }
6301e169010aSmrg}
63027914d74bSmrg
6303e169010aSmrgvoid
6304e169010aSmrglt_update_lib_path (const char *name, const char *value)
6305e169010aSmrg{
6306e8ead290Smrg  lt_debugprintf (__FILE__, __LINE__,
6307e8ead290Smrg		  "(lt_update_lib_path) modifying '%s' by prepending '%s'\n",
6308e8ead290Smrg                  nonnull (name), nonnull (value));
63097914d74bSmrg
6310e169010aSmrg  if (name && *name && value && *value)
6311e169010aSmrg    {
6312e169010aSmrg      char *new_value = lt_extend_str (getenv (name), value, 0);
6313e169010aSmrg      lt_setenv (name, new_value);
6314e169010aSmrg      XFREE (new_value);
6315e169010aSmrg    }
6316e169010aSmrg}
63177914d74bSmrg
6318e8ead290SmrgEOF
6319e8ead290Smrg	    case $host_os in
6320e8ead290Smrg	      mingw*)
6321e8ead290Smrg		cat <<"EOF"
6322e8ead290Smrg
6323e8ead290Smrg/* Prepares an argument vector before calling spawn().
6324e8ead290Smrg   Note that spawn() does not by itself call the command interpreter
6325e8ead290Smrg     (getenv ("COMSPEC") != NULL ? getenv ("COMSPEC") :
6326e8ead290Smrg      ({ OSVERSIONINFO v; v.dwOSVersionInfoSize = sizeof(OSVERSIONINFO);
6327e8ead290Smrg         GetVersionEx(&v);
6328e8ead290Smrg         v.dwPlatformId == VER_PLATFORM_WIN32_NT;
6329e8ead290Smrg      }) ? "cmd.exe" : "command.com").
6330e8ead290Smrg   Instead it simply concatenates the arguments, separated by ' ', and calls
6331e8ead290Smrg   CreateProcess().  We must quote the arguments since Win32 CreateProcess()
6332e8ead290Smrg   interprets characters like ' ', '\t', '\\', '"' (but not '<' and '>') in a
6333e8ead290Smrg   special way:
6334e8ead290Smrg   - Space and tab are interpreted as delimiters. They are not treated as
6335e8ead290Smrg     delimiters if they are surrounded by double quotes: "...".
6336e8ead290Smrg   - Unescaped double quotes are removed from the input. Their only effect is
6337e8ead290Smrg     that within double quotes, space and tab are treated like normal
6338e8ead290Smrg     characters.
6339e8ead290Smrg   - Backslashes not followed by double quotes are not special.
6340e8ead290Smrg   - But 2*n+1 backslashes followed by a double quote become
6341e8ead290Smrg     n backslashes followed by a double quote (n >= 0):
6342e8ead290Smrg       \" -> "
6343e8ead290Smrg       \\\" -> \"
6344e8ead290Smrg       \\\\\" -> \\"
6345e8ead290Smrg */
6346e8ead290Smrg#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"
6347e8ead290Smrg#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"
6348e8ead290Smrgchar **
6349e8ead290Smrgprepare_spawn (char **argv)
6350e8ead290Smrg{
6351e8ead290Smrg  size_t argc;
6352e8ead290Smrg  char **new_argv;
6353e8ead290Smrg  size_t i;
6354e8ead290Smrg
6355e8ead290Smrg  /* Count number of arguments.  */
6356e8ead290Smrg  for (argc = 0; argv[argc] != NULL; argc++)
6357e8ead290Smrg    ;
6358e8ead290Smrg
6359e8ead290Smrg  /* Allocate new argument vector.  */
6360e8ead290Smrg  new_argv = XMALLOC (char *, argc + 1);
6361e8ead290Smrg
6362e8ead290Smrg  /* Put quoted arguments into the new argument vector.  */
6363e8ead290Smrg  for (i = 0; i < argc; i++)
6364e8ead290Smrg    {
6365e8ead290Smrg      const char *string = argv[i];
6366e8ead290Smrg
6367e8ead290Smrg      if (string[0] == '\0')
6368e8ead290Smrg	new_argv[i] = xstrdup ("\"\"");
6369e8ead290Smrg      else if (strpbrk (string, SHELL_SPECIAL_CHARS) != NULL)
6370e8ead290Smrg	{
6371e8ead290Smrg	  int quote_around = (strpbrk (string, SHELL_SPACE_CHARS) != NULL);
6372e8ead290Smrg	  size_t length;
6373e8ead290Smrg	  unsigned int backslashes;
6374e8ead290Smrg	  const char *s;
6375e8ead290Smrg	  char *quoted_string;
6376e8ead290Smrg	  char *p;
6377e8ead290Smrg
6378e8ead290Smrg	  length = 0;
6379e8ead290Smrg	  backslashes = 0;
6380e8ead290Smrg	  if (quote_around)
6381e8ead290Smrg	    length++;
6382e8ead290Smrg	  for (s = string; *s != '\0'; s++)
6383e8ead290Smrg	    {
6384e8ead290Smrg	      char c = *s;
6385e8ead290Smrg	      if (c == '"')
6386e8ead290Smrg		length += backslashes + 1;
6387e8ead290Smrg	      length++;
6388e8ead290Smrg	      if (c == '\\')
6389e8ead290Smrg		backslashes++;
6390e8ead290Smrg	      else
6391e8ead290Smrg		backslashes = 0;
6392e8ead290Smrg	    }
6393e8ead290Smrg	  if (quote_around)
6394e8ead290Smrg	    length += backslashes + 1;
6395e8ead290Smrg
6396e8ead290Smrg	  quoted_string = XMALLOC (char, length + 1);
6397e8ead290Smrg
6398e8ead290Smrg	  p = quoted_string;
6399e8ead290Smrg	  backslashes = 0;
6400e8ead290Smrg	  if (quote_around)
6401e8ead290Smrg	    *p++ = '"';
6402e8ead290Smrg	  for (s = string; *s != '\0'; s++)
6403e8ead290Smrg	    {
6404e8ead290Smrg	      char c = *s;
6405e8ead290Smrg	      if (c == '"')
6406e8ead290Smrg		{
6407e8ead290Smrg		  unsigned int j;
6408e8ead290Smrg		  for (j = backslashes + 1; j > 0; j--)
6409e8ead290Smrg		    *p++ = '\\';
6410e8ead290Smrg		}
6411e8ead290Smrg	      *p++ = c;
6412e8ead290Smrg	      if (c == '\\')
6413e8ead290Smrg		backslashes++;
6414e8ead290Smrg	      else
6415e8ead290Smrg		backslashes = 0;
6416e8ead290Smrg	    }
6417e8ead290Smrg	  if (quote_around)
6418e8ead290Smrg	    {
6419e8ead290Smrg	      unsigned int j;
6420e8ead290Smrg	      for (j = backslashes; j > 0; j--)
6421e8ead290Smrg		*p++ = '\\';
6422e8ead290Smrg	      *p++ = '"';
6423e8ead290Smrg	    }
6424e8ead290Smrg	  *p = '\0';
6425e8ead290Smrg
6426e8ead290Smrg	  new_argv[i] = quoted_string;
6427e8ead290Smrg	}
6428e8ead290Smrg      else
6429e8ead290Smrg	new_argv[i] = (char *) string;
6430e8ead290Smrg    }
6431e8ead290Smrg  new_argv[argc] = NULL;
6432e8ead290Smrg
6433e8ead290Smrg  return new_argv;
6434e8ead290Smrg}
6435e8ead290SmrgEOF
6436e8ead290Smrg		;;
6437e8ead290Smrg	    esac
6438e8ead290Smrg
6439e8ead290Smrg            cat <<"EOF"
6440e8ead290Smrgvoid lt_dump_script (FILE* f)
6441e8ead290Smrg{
6442e8ead290SmrgEOF
6443e8ead290Smrg	    func_emit_wrapper yes |
6444e6d5e4e0Smrg	      $SED -n -e '
6445e6d5e4e0Smrgs/^\(.\{79\}\)\(..*\)/\1\
6446e6d5e4e0Smrg\2/
6447e6d5e4e0Smrgh
6448e6d5e4e0Smrgs/\([\\"]\)/\\\1/g
6449e6d5e4e0Smrgs/$/\\n/
6450e6d5e4e0Smrgs/\([^\n]*\).*/  fputs ("\1", f);/p
6451e6d5e4e0Smrgg
6452e6d5e4e0SmrgD'
6453e8ead290Smrg            cat <<"EOF"
6454e8ead290Smrg}
6455e169010aSmrgEOF
6456e169010aSmrg}
6457e169010aSmrg# end: func_emit_cwrapperexe_src
64587914d74bSmrg
6459e8ead290Smrg# func_win32_import_lib_p ARG
6460e8ead290Smrg# True if ARG is an import lib, as indicated by $file_magic_cmd
6461e8ead290Smrgfunc_win32_import_lib_p ()
6462e8ead290Smrg{
64639d0ccd10Smrg    $debug_cmd
64649d0ccd10Smrg
6465e8ead290Smrg    case `eval $file_magic_cmd \"\$1\" 2>/dev/null | $SED -e 10q` in
6466e8ead290Smrg    *import*) : ;;
6467e8ead290Smrg    *) false ;;
6468e8ead290Smrg    esac
6469e8ead290Smrg}
6470e8ead290Smrg
64719d0ccd10Smrg# func_suncc_cstd_abi
64729d0ccd10Smrg# !!ONLY CALL THIS FOR SUN CC AFTER $compile_command IS FULLY EXPANDED!!
64739d0ccd10Smrg# Several compiler flags select an ABI that is incompatible with the
64749d0ccd10Smrg# Cstd library. Avoid specifying it if any are in CXXFLAGS.
64759d0ccd10Smrgfunc_suncc_cstd_abi ()
64769d0ccd10Smrg{
64779d0ccd10Smrg    $debug_cmd
64789d0ccd10Smrg
64799d0ccd10Smrg    case " $compile_command " in
64809d0ccd10Smrg    *" -compat=g "*|*\ -std=c++[0-9][0-9]\ *|*" -library=stdcxx4 "*|*" -library=stlport4 "*)
64819d0ccd10Smrg      suncc_use_cstd_abi=no
64829d0ccd10Smrg      ;;
64839d0ccd10Smrg    *)
64849d0ccd10Smrg      suncc_use_cstd_abi=yes
64859d0ccd10Smrg      ;;
64869d0ccd10Smrg    esac
64879d0ccd10Smrg}
64889d0ccd10Smrg
6489e169010aSmrg# func_mode_link arg...
6490e169010aSmrgfunc_mode_link ()
6491e169010aSmrg{
64929d0ccd10Smrg    $debug_cmd
64939d0ccd10Smrg
6494e169010aSmrg    case $host in
6495e169010aSmrg    *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-cegcc*)
6496e169010aSmrg      # It is impossible to link a dll without this setting, and
6497e169010aSmrg      # we shouldn't force the makefile maintainer to figure out
64989d0ccd10Smrg      # what system we are compiling for in order to pass an extra
6499e169010aSmrg      # flag for every libtool invocation.
6500e169010aSmrg      # allow_undefined=no
65017914d74bSmrg
6502e169010aSmrg      # FIXME: Unfortunately, there are problems with the above when trying
65039d0ccd10Smrg      # to make a dll that has undefined symbols, in which case not
6504e169010aSmrg      # even a static library is built.  For now, we need to specify
6505e169010aSmrg      # -no-undefined on the libtool link line when we can be certain
6506e169010aSmrg      # that all symbols are satisfied, otherwise we get a static library.
6507e169010aSmrg      allow_undefined=yes
6508e169010aSmrg      ;;
6509e169010aSmrg    *)
6510e169010aSmrg      allow_undefined=yes
6511e169010aSmrg      ;;
6512e169010aSmrg    esac
6513e169010aSmrg    libtool_args=$nonopt
6514e169010aSmrg    base_compile="$nonopt $@"
6515e169010aSmrg    compile_command=$nonopt
6516e169010aSmrg    finalize_command=$nonopt
65177914d74bSmrg
6518e169010aSmrg    compile_rpath=
6519e169010aSmrg    finalize_rpath=
6520e169010aSmrg    compile_shlibpath=
6521e169010aSmrg    finalize_shlibpath=
6522e169010aSmrg    convenience=
6523e169010aSmrg    old_convenience=
6524e169010aSmrg    deplibs=
6525e169010aSmrg    old_deplibs=
6526e169010aSmrg    compiler_flags=
6527e169010aSmrg    linker_flags=
6528e169010aSmrg    dllsearchpath=
6529e169010aSmrg    lib_search_path=`pwd`
6530e169010aSmrg    inst_prefix_dir=
6531e169010aSmrg    new_inherited_linker_flags=
65327914d74bSmrg
6533e169010aSmrg    avoid_version=no
6534e8ead290Smrg    bindir=
6535e169010aSmrg    dlfiles=
6536e169010aSmrg    dlprefiles=
6537e169010aSmrg    dlself=no
6538e169010aSmrg    export_dynamic=no
6539e169010aSmrg    export_symbols=
6540e169010aSmrg    export_symbols_regex=
6541e169010aSmrg    generated=
6542e169010aSmrg    libobjs=
6543e169010aSmrg    ltlibs=
6544e169010aSmrg    module=no
6545e169010aSmrg    no_install=no
6546e169010aSmrg    objs=
65479d0ccd10Smrg    os2dllname=
6548e169010aSmrg    non_pic_objects=
6549e169010aSmrg    precious_files_regex=
6550e169010aSmrg    prefer_static_libs=no
65519d0ccd10Smrg    preload=false
6552e169010aSmrg    prev=
6553e169010aSmrg    prevarg=
6554e169010aSmrg    release=
6555e169010aSmrg    rpath=
6556e169010aSmrg    xrpath=
6557e169010aSmrg    perm_rpath=
6558e169010aSmrg    temp_rpath=
6559e169010aSmrg    thread_safe=no
6560e169010aSmrg    vinfo=
6561e169010aSmrg    vinfo_number=no
6562e169010aSmrg    weak_libs=
65639d0ccd10Smrg    single_module=$wl-single_module
6564e169010aSmrg    func_infer_tag $base_compile
65657914d74bSmrg
6566e169010aSmrg    # We need to know -static, to get the right output filenames.
6567e169010aSmrg    for arg
6568e169010aSmrg    do
6569e169010aSmrg      case $arg in
6570e169010aSmrg      -shared)
65719d0ccd10Smrg	test yes != "$build_libtool_libs" \
65729d0ccd10Smrg	  && func_fatal_configuration "cannot build a shared library"
6573e169010aSmrg	build_old_libs=no
6574e169010aSmrg	break
6575e169010aSmrg	;;
6576e169010aSmrg      -all-static | -static | -static-libtool-libs)
6577e169010aSmrg	case $arg in
6578e169010aSmrg	-all-static)
65799d0ccd10Smrg	  if test yes = "$build_libtool_libs" && test -z "$link_static_flag"; then
6580e169010aSmrg	    func_warning "complete static linking is impossible in this configuration"
65817914d74bSmrg	  fi
6582e169010aSmrg	  if test -n "$link_static_flag"; then
6583e169010aSmrg	    dlopen_self=$dlopen_self_static
65847914d74bSmrg	  fi
6585e169010aSmrg	  prefer_static_libs=yes
65867914d74bSmrg	  ;;
6587e169010aSmrg	-static)
6588e169010aSmrg	  if test -z "$pic_flag" && test -n "$link_static_flag"; then
6589e169010aSmrg	    dlopen_self=$dlopen_self_static
6590e169010aSmrg	  fi
6591e169010aSmrg	  prefer_static_libs=built
6592e169010aSmrg	  ;;
6593e169010aSmrg	-static-libtool-libs)
6594e169010aSmrg	  if test -z "$pic_flag" && test -n "$link_static_flag"; then
6595e169010aSmrg	    dlopen_self=$dlopen_self_static
6596e169010aSmrg	  fi
6597e169010aSmrg	  prefer_static_libs=yes
65987914d74bSmrg	  ;;
65997914d74bSmrg	esac
6600e169010aSmrg	build_libtool_libs=no
6601e169010aSmrg	build_old_libs=yes
6602e169010aSmrg	break
6603e169010aSmrg	;;
6604e169010aSmrg      esac
6605e169010aSmrg    done
66067914d74bSmrg
6607e169010aSmrg    # See if our shared archives depend on static archives.
6608e169010aSmrg    test -n "$old_archive_from_new_cmds" && build_old_libs=yes
66097914d74bSmrg
6610e169010aSmrg    # Go through the arguments, transforming them on the way.
6611e169010aSmrg    while test "$#" -gt 0; do
66129d0ccd10Smrg      arg=$1
6613e169010aSmrg      shift
6614e169010aSmrg      func_quote_for_eval "$arg"
6615e169010aSmrg      qarg=$func_quote_for_eval_unquoted_result
6616e169010aSmrg      func_append libtool_args " $func_quote_for_eval_result"
66177914d74bSmrg
6618e169010aSmrg      # If the previous option needs an argument, assign it.
6619e169010aSmrg      if test -n "$prev"; then
6620e169010aSmrg	case $prev in
6621e169010aSmrg	output)
6622e169010aSmrg	  func_append compile_command " @OUTPUT@"
6623e169010aSmrg	  func_append finalize_command " @OUTPUT@"
6624e169010aSmrg	  ;;
6625e169010aSmrg	esac
66267914d74bSmrg
6627e169010aSmrg	case $prev in
6628e8ead290Smrg	bindir)
66299d0ccd10Smrg	  bindir=$arg
6630e8ead290Smrg	  prev=
6631e8ead290Smrg	  continue
6632e8ead290Smrg	  ;;
6633e169010aSmrg	dlfiles|dlprefiles)
66349d0ccd10Smrg	  $preload || {
6635e169010aSmrg	    # Add the symbol object into the linking commands.
6636e169010aSmrg	    func_append compile_command " @SYMFILE@"
6637e169010aSmrg	    func_append finalize_command " @SYMFILE@"
66389d0ccd10Smrg	    preload=:
66399d0ccd10Smrg	  }
6640e169010aSmrg	  case $arg in
6641e169010aSmrg	  *.la | *.lo) ;;  # We handle these cases below.
6642e169010aSmrg	  force)
66439d0ccd10Smrg	    if test no = "$dlself"; then
6644e169010aSmrg	      dlself=needless
6645e169010aSmrg	      export_dynamic=yes
6646e169010aSmrg	    fi
6647e169010aSmrg	    prev=
6648e169010aSmrg	    continue
6649e169010aSmrg	    ;;
6650e169010aSmrg	  self)
66519d0ccd10Smrg	    if test dlprefiles = "$prev"; then
6652e169010aSmrg	      dlself=yes
66539d0ccd10Smrg	    elif test dlfiles = "$prev" && test yes != "$dlopen_self"; then
6654e169010aSmrg	      dlself=yes
6655e169010aSmrg	    else
6656e169010aSmrg	      dlself=needless
6657e169010aSmrg	      export_dynamic=yes
6658e169010aSmrg	    fi
6659e169010aSmrg	    prev=
6660e169010aSmrg	    continue
66617914d74bSmrg	    ;;
66627914d74bSmrg	  *)
66639d0ccd10Smrg	    if test dlfiles = "$prev"; then
6664c63293b5Smrg	      func_append dlfiles " $arg"
6665e169010aSmrg	    else
6666c63293b5Smrg	      func_append dlprefiles " $arg"
6667e169010aSmrg	    fi
6668e169010aSmrg	    prev=
6669e169010aSmrg	    continue
66707914d74bSmrg	    ;;
66717914d74bSmrg	  esac
6672e169010aSmrg	  ;;
6673e169010aSmrg	expsyms)
66749d0ccd10Smrg	  export_symbols=$arg
6675e169010aSmrg	  test -f "$arg" \
66769d0ccd10Smrg	    || func_fatal_error "symbol file '$arg' does not exist"
6677e169010aSmrg	  prev=
6678e169010aSmrg	  continue
6679e169010aSmrg	  ;;
6680e169010aSmrg	expsyms_regex)
66819d0ccd10Smrg	  export_symbols_regex=$arg
6682e169010aSmrg	  prev=
6683e169010aSmrg	  continue
6684e169010aSmrg	  ;;
6685e169010aSmrg	framework)
6686e169010aSmrg	  case $host in
6687e169010aSmrg	    *-*-darwin*)
6688e169010aSmrg	      case "$deplibs " in
6689e169010aSmrg		*" $qarg.ltframework "*) ;;
6690c63293b5Smrg		*) func_append deplibs " $qarg.ltframework" # this is fixed later
6691e169010aSmrg		   ;;
6692e169010aSmrg	      esac
6693e169010aSmrg	      ;;
6694e169010aSmrg	  esac
6695e169010aSmrg	  prev=
6696e169010aSmrg	  continue
6697e169010aSmrg	  ;;
6698e169010aSmrg	inst_prefix)
66999d0ccd10Smrg	  inst_prefix_dir=$arg
67009d0ccd10Smrg	  prev=
67019d0ccd10Smrg	  continue
67029d0ccd10Smrg	  ;;
67039d0ccd10Smrg	mllvm)
67049d0ccd10Smrg	  # Clang does not use LLVM to link, so we can simply discard any
67059d0ccd10Smrg	  # '-mllvm $arg' options when doing the link step.
6706e169010aSmrg	  prev=
6707e169010aSmrg	  continue
6708e169010aSmrg	  ;;
6709e169010aSmrg	objectlist)
6710e169010aSmrg	  if test -f "$arg"; then
6711e169010aSmrg	    save_arg=$arg
6712e169010aSmrg	    moreargs=
6713e169010aSmrg	    for fil in `cat "$save_arg"`
6714e169010aSmrg	    do
6715c63293b5Smrg#	      func_append moreargs " $fil"
6716e169010aSmrg	      arg=$fil
6717e169010aSmrg	      # A libtool-controlled object.
67187914d74bSmrg
6719e169010aSmrg	      # Check to see that this really is a libtool object.
6720e169010aSmrg	      if func_lalib_unsafe_p "$arg"; then
6721e169010aSmrg		pic_object=
6722e169010aSmrg		non_pic_object=
67237914d74bSmrg
6724e169010aSmrg		# Read the .lo file
6725e169010aSmrg		func_source "$arg"
67267914d74bSmrg
6727e169010aSmrg		if test -z "$pic_object" ||
6728e169010aSmrg		   test -z "$non_pic_object" ||
67299d0ccd10Smrg		   test none = "$pic_object" &&
67309d0ccd10Smrg		   test none = "$non_pic_object"; then
67319d0ccd10Smrg		  func_fatal_error "cannot find name of object for '$arg'"
6732e169010aSmrg		fi
67337914d74bSmrg
6734e169010aSmrg		# Extract subdirectory from the argument.
6735e169010aSmrg		func_dirname "$arg" "/" ""
67369d0ccd10Smrg		xdir=$func_dirname_result
67377914d74bSmrg
67389d0ccd10Smrg		if test none != "$pic_object"; then
6739e169010aSmrg		  # Prepend the subdirectory the object is found in.
67409d0ccd10Smrg		  pic_object=$xdir$pic_object
67417914d74bSmrg
67429d0ccd10Smrg		  if test dlfiles = "$prev"; then
67439d0ccd10Smrg		    if test yes = "$build_libtool_libs" && test yes = "$dlopen_support"; then
6744c63293b5Smrg		      func_append dlfiles " $pic_object"
6745e169010aSmrg		      prev=
6746e169010aSmrg		      continue
6747e169010aSmrg		    else
6748e169010aSmrg		      # If libtool objects are unsupported, then we need to preload.
6749e169010aSmrg		      prev=dlprefiles
6750e169010aSmrg		    fi
6751e169010aSmrg		  fi
67527914d74bSmrg
6753e169010aSmrg		  # CHECK ME:  I think I busted this.  -Ossama
67549d0ccd10Smrg		  if test dlprefiles = "$prev"; then
6755e169010aSmrg		    # Preload the old-style object.
6756c63293b5Smrg		    func_append dlprefiles " $pic_object"
6757e169010aSmrg		    prev=
6758e169010aSmrg		  fi
67597914d74bSmrg
6760e169010aSmrg		  # A PIC object.
6761e169010aSmrg		  func_append libobjs " $pic_object"
67629d0ccd10Smrg		  arg=$pic_object
6763e169010aSmrg		fi
67647914d74bSmrg
6765e169010aSmrg		# Non-PIC object.
67669d0ccd10Smrg		if test none != "$non_pic_object"; then
6767e169010aSmrg		  # Prepend the subdirectory the object is found in.
67689d0ccd10Smrg		  non_pic_object=$xdir$non_pic_object
67697914d74bSmrg
6770e169010aSmrg		  # A standard non-PIC object
6771e169010aSmrg		  func_append non_pic_objects " $non_pic_object"
67729d0ccd10Smrg		  if test -z "$pic_object" || test none = "$pic_object"; then
67739d0ccd10Smrg		    arg=$non_pic_object
6774e169010aSmrg		  fi
6775e169010aSmrg		else
6776e169010aSmrg		  # If the PIC object exists, use it instead.
6777e169010aSmrg		  # $xdir was prepended to $pic_object above.
67789d0ccd10Smrg		  non_pic_object=$pic_object
6779e169010aSmrg		  func_append non_pic_objects " $non_pic_object"
6780e169010aSmrg		fi
6781e169010aSmrg	      else
6782e169010aSmrg		# Only an error if not doing a dry-run.
6783e169010aSmrg		if $opt_dry_run; then
6784e169010aSmrg		  # Extract subdirectory from the argument.
6785e169010aSmrg		  func_dirname "$arg" "/" ""
67869d0ccd10Smrg		  xdir=$func_dirname_result
6787e169010aSmrg
6788e169010aSmrg		  func_lo2o "$arg"
6789e169010aSmrg		  pic_object=$xdir$objdir/$func_lo2o_result
6790e169010aSmrg		  non_pic_object=$xdir$func_lo2o_result
6791e169010aSmrg		  func_append libobjs " $pic_object"
6792e169010aSmrg		  func_append non_pic_objects " $non_pic_object"
6793e169010aSmrg	        else
67949d0ccd10Smrg		  func_fatal_error "'$arg' is not a valid libtool object"
6795e169010aSmrg		fi
6796e169010aSmrg	      fi
6797e169010aSmrg	    done
6798e169010aSmrg	  else
67999d0ccd10Smrg	    func_fatal_error "link input file '$arg' does not exist"
6800e169010aSmrg	  fi
6801e169010aSmrg	  arg=$save_arg
6802e169010aSmrg	  prev=
6803e169010aSmrg	  continue
6804e169010aSmrg	  ;;
68059d0ccd10Smrg	os2dllname)
68069d0ccd10Smrg	  os2dllname=$arg
68079d0ccd10Smrg	  prev=
68089d0ccd10Smrg	  continue
68099d0ccd10Smrg	  ;;
6810e169010aSmrg	precious_regex)
68119d0ccd10Smrg	  precious_files_regex=$arg
6812e169010aSmrg	  prev=
6813e169010aSmrg	  continue
6814e169010aSmrg	  ;;
6815e169010aSmrg	release)
68169d0ccd10Smrg	  release=-$arg
6817e169010aSmrg	  prev=
6818e169010aSmrg	  continue
6819e169010aSmrg	  ;;
6820e169010aSmrg	rpath | xrpath)
6821e169010aSmrg	  # We need an absolute path.
6822e169010aSmrg	  case $arg in
6823e169010aSmrg	  [\\/]* | [A-Za-z]:[\\/]*) ;;
6824e169010aSmrg	  *)
6825e169010aSmrg	    func_fatal_error "only absolute run-paths are allowed"
6826e169010aSmrg	    ;;
6827e169010aSmrg	  esac
68289d0ccd10Smrg	  if test rpath = "$prev"; then
6829e169010aSmrg	    case "$rpath " in
6830e169010aSmrg	    *" $arg "*) ;;
6831c63293b5Smrg	    *) func_append rpath " $arg" ;;
6832e169010aSmrg	    esac
6833e169010aSmrg	  else
6834e169010aSmrg	    case "$xrpath " in
6835e169010aSmrg	    *" $arg "*) ;;
6836c63293b5Smrg	    *) func_append xrpath " $arg" ;;
6837e169010aSmrg	    esac
6838e169010aSmrg	  fi
6839e169010aSmrg	  prev=
6840e169010aSmrg	  continue
6841e169010aSmrg	  ;;
6842e169010aSmrg	shrext)
68439d0ccd10Smrg	  shrext_cmds=$arg
6844e169010aSmrg	  prev=
6845e169010aSmrg	  continue
6846e169010aSmrg	  ;;
6847e169010aSmrg	weak)
6848c63293b5Smrg	  func_append weak_libs " $arg"
6849e169010aSmrg	  prev=
6850e169010aSmrg	  continue
6851e169010aSmrg	  ;;
6852e169010aSmrg	xcclinker)
6853c63293b5Smrg	  func_append linker_flags " $qarg"
6854c63293b5Smrg	  func_append compiler_flags " $qarg"
6855e169010aSmrg	  prev=
6856e169010aSmrg	  func_append compile_command " $qarg"
6857e169010aSmrg	  func_append finalize_command " $qarg"
6858e169010aSmrg	  continue
6859e169010aSmrg	  ;;
6860e169010aSmrg	xcompiler)
6861c63293b5Smrg	  func_append compiler_flags " $qarg"
6862e169010aSmrg	  prev=
6863e169010aSmrg	  func_append compile_command " $qarg"
6864e169010aSmrg	  func_append finalize_command " $qarg"
6865e169010aSmrg	  continue
6866e169010aSmrg	  ;;
6867e169010aSmrg	xlinker)
6868c63293b5Smrg	  func_append linker_flags " $qarg"
6869c63293b5Smrg	  func_append compiler_flags " $wl$qarg"
6870e169010aSmrg	  prev=
6871e169010aSmrg	  func_append compile_command " $wl$qarg"
6872e169010aSmrg	  func_append finalize_command " $wl$qarg"
6873e169010aSmrg	  continue
6874e169010aSmrg	  ;;
6875e169010aSmrg	*)
6876e169010aSmrg	  eval "$prev=\"\$arg\""
6877e169010aSmrg	  prev=
6878e169010aSmrg	  continue
6879e169010aSmrg	  ;;
68807914d74bSmrg	esac
6881e169010aSmrg      fi # test -n "$prev"
68827914d74bSmrg
68839d0ccd10Smrg      prevarg=$arg
68847914d74bSmrg
6885e169010aSmrg      case $arg in
6886e169010aSmrg      -all-static)
6887e169010aSmrg	if test -n "$link_static_flag"; then
6888e169010aSmrg	  # See comment for -static flag below, for more details.
6889e169010aSmrg	  func_append compile_command " $link_static_flag"
6890e169010aSmrg	  func_append finalize_command " $link_static_flag"
6891e169010aSmrg	fi
6892e169010aSmrg	continue
6893e169010aSmrg	;;
68947914d74bSmrg
6895e169010aSmrg      -allow-undefined)
6896e169010aSmrg	# FIXME: remove this flag sometime in the future.
68979d0ccd10Smrg	func_fatal_error "'-allow-undefined' must not be used because it is the default"
6898e169010aSmrg	;;
68997914d74bSmrg
6900e169010aSmrg      -avoid-version)
6901e169010aSmrg	avoid_version=yes
6902e169010aSmrg	continue
6903e169010aSmrg	;;
69047914d74bSmrg
6905e8ead290Smrg      -bindir)
6906e8ead290Smrg	prev=bindir
6907e8ead290Smrg	continue
6908e8ead290Smrg	;;
6909e8ead290Smrg
6910e169010aSmrg      -dlopen)
6911e169010aSmrg	prev=dlfiles
6912e169010aSmrg	continue
6913e169010aSmrg	;;
69147914d74bSmrg
6915e169010aSmrg      -dlpreopen)
6916e169010aSmrg	prev=dlprefiles
6917e169010aSmrg	continue
6918e169010aSmrg	;;
69197914d74bSmrg
6920e169010aSmrg      -export-dynamic)
6921e169010aSmrg	export_dynamic=yes
6922e169010aSmrg	continue
6923e169010aSmrg	;;
69247914d74bSmrg
6925e169010aSmrg      -export-symbols | -export-symbols-regex)
6926e169010aSmrg	if test -n "$export_symbols" || test -n "$export_symbols_regex"; then
6927e169010aSmrg	  func_fatal_error "more than one -exported-symbols argument is not allowed"
6928e169010aSmrg	fi
69299d0ccd10Smrg	if test X-export-symbols = "X$arg"; then
6930e169010aSmrg	  prev=expsyms
6931e169010aSmrg	else
6932e169010aSmrg	  prev=expsyms_regex
6933e169010aSmrg	fi
6934e169010aSmrg	continue
6935e169010aSmrg	;;
69367914d74bSmrg
6937e169010aSmrg      -framework)
6938e169010aSmrg	prev=framework
6939e169010aSmrg	continue
6940e169010aSmrg	;;
69417914d74bSmrg
6942e169010aSmrg      -inst-prefix-dir)
6943e169010aSmrg	prev=inst_prefix
6944e169010aSmrg	continue
6945e169010aSmrg	;;
69467914d74bSmrg
6947e169010aSmrg      # The native IRIX linker understands -LANG:*, -LIST:* and -LNO:*
6948e169010aSmrg      # so, if we see these flags be careful not to treat them like -L
6949e169010aSmrg      -L[A-Z][A-Z]*:*)
6950e169010aSmrg	case $with_gcc/$host in
6951e169010aSmrg	no/*-*-irix* | /*-*-irix*)
6952e169010aSmrg	  func_append compile_command " $arg"
6953e169010aSmrg	  func_append finalize_command " $arg"
6954e169010aSmrg	  ;;
6955e169010aSmrg	esac
6956e169010aSmrg	continue
6957e169010aSmrg	;;
69587914d74bSmrg
6959e169010aSmrg      -L*)
6960c63293b5Smrg	func_stripname "-L" '' "$arg"
6961c63293b5Smrg	if test -z "$func_stripname_result"; then
6962e169010aSmrg	  if test "$#" -gt 0; then
69639d0ccd10Smrg	    func_fatal_error "require no space between '-L' and '$1'"
6964e169010aSmrg	  else
69659d0ccd10Smrg	    func_fatal_error "need path for '-L' option"
6966e169010aSmrg	  fi
6967e169010aSmrg	fi
6968c63293b5Smrg	func_resolve_sysroot "$func_stripname_result"
6969c63293b5Smrg	dir=$func_resolve_sysroot_result
6970e169010aSmrg	# We need an absolute path.
6971e169010aSmrg	case $dir in
6972e169010aSmrg	[\\/]* | [A-Za-z]:[\\/]*) ;;
6973e169010aSmrg	*)
6974e169010aSmrg	  absdir=`cd "$dir" && pwd`
6975e169010aSmrg	  test -z "$absdir" && \
69769d0ccd10Smrg	    func_fatal_error "cannot determine absolute directory name of '$dir'"
69779d0ccd10Smrg	  dir=$absdir
6978e169010aSmrg	  ;;
6979e169010aSmrg	esac
6980e169010aSmrg	case "$deplibs " in
6981c63293b5Smrg	*" -L$dir "* | *" $arg "*)
6982c63293b5Smrg	  # Will only happen for absolute or sysroot arguments
6983c63293b5Smrg	  ;;
6984e169010aSmrg	*)
6985c63293b5Smrg	  # Preserve sysroot, but never include relative directories
6986c63293b5Smrg	  case $dir in
6987c63293b5Smrg	    [\\/]* | [A-Za-z]:[\\/]* | =*) func_append deplibs " $arg" ;;
6988c63293b5Smrg	    *) func_append deplibs " -L$dir" ;;
6989c63293b5Smrg	  esac
6990c63293b5Smrg	  func_append lib_search_path " $dir"
6991e169010aSmrg	  ;;
6992e169010aSmrg	esac
6993e169010aSmrg	case $host in
6994e169010aSmrg	*-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-cegcc*)
6995e8ead290Smrg	  testbindir=`$ECHO "$dir" | $SED 's*/lib$*/bin*'`
6996e169010aSmrg	  case :$dllsearchpath: in
6997e169010aSmrg	  *":$dir:"*) ;;
6998e169010aSmrg	  ::) dllsearchpath=$dir;;
6999c63293b5Smrg	  *) func_append dllsearchpath ":$dir";;
7000e169010aSmrg	  esac
7001e169010aSmrg	  case :$dllsearchpath: in
7002e169010aSmrg	  *":$testbindir:"*) ;;
7003e169010aSmrg	  ::) dllsearchpath=$testbindir;;
7004c63293b5Smrg	  *) func_append dllsearchpath ":$testbindir";;
7005e169010aSmrg	  esac
7006e169010aSmrg	  ;;
7007e169010aSmrg	esac
7008e169010aSmrg	continue
7009e169010aSmrg	;;
70107914d74bSmrg
7011e169010aSmrg      -l*)
70129d0ccd10Smrg	if test X-lc = "X$arg" || test X-lm = "X$arg"; then
7013e169010aSmrg	  case $host in
7014e8ead290Smrg	  *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-beos* | *-cegcc* | *-*-haiku*)
7015e169010aSmrg	    # These systems don't actually have a C or math library (as such)
7016e169010aSmrg	    continue
7017e169010aSmrg	    ;;
7018e169010aSmrg	  *-*-os2*)
7019e169010aSmrg	    # These systems don't actually have a C library (as such)
70209d0ccd10Smrg	    test X-lc = "X$arg" && continue
7021e169010aSmrg	    ;;
70229d0ccd10Smrg	  *-*-openbsd* | *-*-freebsd* | *-*-dragonfly* | *-*-bitrig*)
7023e169010aSmrg	    # Do not include libc due to us having libc/libc_r.
70249d0ccd10Smrg	    test X-lc = "X$arg" && continue
7025e169010aSmrg	    ;;
7026e169010aSmrg	  *-*-rhapsody* | *-*-darwin1.[012])
7027e169010aSmrg	    # Rhapsody C and math libraries are in the System framework
7028c63293b5Smrg	    func_append deplibs " System.ltframework"
7029e169010aSmrg	    continue
7030e169010aSmrg	    ;;
7031e169010aSmrg	  *-*-sco3.2v5* | *-*-sco5v6*)
7032e169010aSmrg	    # Causes problems with __ctype
70339d0ccd10Smrg	    test X-lc = "X$arg" && continue
7034e169010aSmrg	    ;;
7035e169010aSmrg	  *-*-sysv4.2uw2* | *-*-sysv5* | *-*-unixware* | *-*-OpenUNIX*)
7036e169010aSmrg	    # Compiler inserts libc in the correct place for threads to work
70379d0ccd10Smrg	    test X-lc = "X$arg" && continue
7038e169010aSmrg	    ;;
7039e169010aSmrg	  esac
70409d0ccd10Smrg	elif test X-lc_r = "X$arg"; then
7041e169010aSmrg	 case $host in
70429d0ccd10Smrg	 *-*-openbsd* | *-*-freebsd* | *-*-dragonfly* | *-*-bitrig*)
7043e169010aSmrg	   # Do not include libc_r directly, use -pthread flag.
7044e169010aSmrg	   continue
7045e169010aSmrg	   ;;
7046e169010aSmrg	 esac
7047e169010aSmrg	fi
7048c63293b5Smrg	func_append deplibs " $arg"
7049e169010aSmrg	continue
7050e169010aSmrg	;;
70517914d74bSmrg
70529d0ccd10Smrg      -mllvm)
70539d0ccd10Smrg	prev=mllvm
70549d0ccd10Smrg	continue
70559d0ccd10Smrg	;;
70569d0ccd10Smrg
7057e169010aSmrg      -module)
7058e169010aSmrg	module=yes
7059e169010aSmrg	continue
7060e169010aSmrg	;;
70617914d74bSmrg
7062e169010aSmrg      # Tru64 UNIX uses -model [arg] to determine the layout of C++
7063e169010aSmrg      # classes, name mangling, and exception handling.
7064e169010aSmrg      # Darwin uses the -arch flag to determine output architecture.
7065c63293b5Smrg      -model|-arch|-isysroot|--sysroot)
7066c63293b5Smrg	func_append compiler_flags " $arg"
7067e169010aSmrg	func_append compile_command " $arg"
7068e169010aSmrg	func_append finalize_command " $arg"
7069e169010aSmrg	prev=xcompiler
7070e169010aSmrg	continue
7071e169010aSmrg	;;
70727914d74bSmrg
7073e6d5e4e0Smrg      -mt|-mthreads|-kthread|-Kthread|-pthread|-pthreads|--thread-safe \
7074e6d5e4e0Smrg      |-threads|-fopenmp|-openmp|-mp|-xopenmp|-omp|-qsmp=*)
7075c63293b5Smrg	func_append compiler_flags " $arg"
7076e169010aSmrg	func_append compile_command " $arg"
7077e169010aSmrg	func_append finalize_command " $arg"
7078e169010aSmrg	case "$new_inherited_linker_flags " in
7079e169010aSmrg	    *" $arg "*) ;;
7080c63293b5Smrg	    * ) func_append new_inherited_linker_flags " $arg" ;;
7081e169010aSmrg	esac
7082e169010aSmrg	continue
7083e169010aSmrg	;;
70847914d74bSmrg
7085e169010aSmrg      -multi_module)
70869d0ccd10Smrg	single_module=$wl-multi_module
7087e169010aSmrg	continue
7088e169010aSmrg	;;
70897914d74bSmrg
7090e169010aSmrg      -no-fast-install)
7091e169010aSmrg	fast_install=no
7092e169010aSmrg	continue
7093e169010aSmrg	;;
70947914d74bSmrg
7095e169010aSmrg      -no-install)
7096e169010aSmrg	case $host in
7097e169010aSmrg	*-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-*-darwin* | *-cegcc*)
7098e169010aSmrg	  # The PATH hackery in wrapper scripts is required on Windows
7099e169010aSmrg	  # and Darwin in order for the loader to find any dlls it needs.
71009d0ccd10Smrg	  func_warning "'-no-install' is ignored for $host"
71019d0ccd10Smrg	  func_warning "assuming '-no-fast-install' instead"
7102e169010aSmrg	  fast_install=no
7103e169010aSmrg	  ;;
7104e169010aSmrg	*) no_install=yes ;;
7105e169010aSmrg	esac
7106e169010aSmrg	continue
7107e169010aSmrg	;;
71087914d74bSmrg
7109e169010aSmrg      -no-undefined)
7110e169010aSmrg	allow_undefined=no
7111e169010aSmrg	continue
7112e169010aSmrg	;;
71137914d74bSmrg
7114e169010aSmrg      -objectlist)
7115e169010aSmrg	prev=objectlist
7116e169010aSmrg	continue
7117e169010aSmrg	;;
71187914d74bSmrg
71199d0ccd10Smrg      -os2dllname)
71209d0ccd10Smrg	prev=os2dllname
71219d0ccd10Smrg	continue
71229d0ccd10Smrg	;;
71239d0ccd10Smrg
7124e169010aSmrg      -o) prev=output ;;
71257914d74bSmrg
7126e169010aSmrg      -precious-files-regex)
7127e169010aSmrg	prev=precious_regex
7128e169010aSmrg	continue
7129e169010aSmrg	;;
71307914d74bSmrg
7131e169010aSmrg      -release)
7132e169010aSmrg	prev=release
7133e169010aSmrg	continue
7134e169010aSmrg	;;
71357914d74bSmrg
7136e169010aSmrg      -rpath)
7137e169010aSmrg	prev=rpath
7138e169010aSmrg	continue
7139e169010aSmrg	;;
71407914d74bSmrg
7141e169010aSmrg      -R)
7142e169010aSmrg	prev=xrpath
7143e169010aSmrg	continue
7144e169010aSmrg	;;
71457914d74bSmrg
7146e169010aSmrg      -R*)
7147e169010aSmrg	func_stripname '-R' '' "$arg"
7148e169010aSmrg	dir=$func_stripname_result
7149e169010aSmrg	# We need an absolute path.
7150e169010aSmrg	case $dir in
7151e169010aSmrg	[\\/]* | [A-Za-z]:[\\/]*) ;;
7152c63293b5Smrg	=*)
7153c63293b5Smrg	  func_stripname '=' '' "$dir"
7154c63293b5Smrg	  dir=$lt_sysroot$func_stripname_result
7155c63293b5Smrg	  ;;
7156e169010aSmrg	*)
7157e169010aSmrg	  func_fatal_error "only absolute run-paths are allowed"
7158e169010aSmrg	  ;;
7159e169010aSmrg	esac
7160e169010aSmrg	case "$xrpath " in
7161e169010aSmrg	*" $dir "*) ;;
7162c63293b5Smrg	*) func_append xrpath " $dir" ;;
7163e169010aSmrg	esac
7164e169010aSmrg	continue
7165e169010aSmrg	;;
71667914d74bSmrg
7167e169010aSmrg      -shared)
7168e169010aSmrg	# The effects of -shared are defined in a previous loop.
7169e169010aSmrg	continue
7170e169010aSmrg	;;
71717914d74bSmrg
7172e169010aSmrg      -shrext)
7173e169010aSmrg	prev=shrext
7174e169010aSmrg	continue
7175e169010aSmrg	;;
71767914d74bSmrg
7177e169010aSmrg      -static | -static-libtool-libs)
7178e169010aSmrg	# The effects of -static are defined in a previous loop.
7179e169010aSmrg	# We used to do the same as -all-static on platforms that
7180e169010aSmrg	# didn't have a PIC flag, but the assumption that the effects
7181e169010aSmrg	# would be equivalent was wrong.  It would break on at least
7182e169010aSmrg	# Digital Unix and AIX.
7183e169010aSmrg	continue
7184e169010aSmrg	;;
71857914d74bSmrg
7186e169010aSmrg      -thread-safe)
7187e169010aSmrg	thread_safe=yes
7188e169010aSmrg	continue
7189e169010aSmrg	;;
71907914d74bSmrg
7191e169010aSmrg      -version-info)
7192e169010aSmrg	prev=vinfo
7193e169010aSmrg	continue
7194e169010aSmrg	;;
71957914d74bSmrg
7196e169010aSmrg      -version-number)
7197e169010aSmrg	prev=vinfo
7198e169010aSmrg	vinfo_number=yes
7199e169010aSmrg	continue
7200e169010aSmrg	;;
72017914d74bSmrg
7202e169010aSmrg      -weak)
7203e169010aSmrg        prev=weak
7204e169010aSmrg	continue
7205e169010aSmrg	;;
72067914d74bSmrg
7207e169010aSmrg      -Wc,*)
7208e169010aSmrg	func_stripname '-Wc,' '' "$arg"
7209e169010aSmrg	args=$func_stripname_result
7210e169010aSmrg	arg=
72119d0ccd10Smrg	save_ifs=$IFS; IFS=,
7212e169010aSmrg	for flag in $args; do
72139d0ccd10Smrg	  IFS=$save_ifs
7214e169010aSmrg          func_quote_for_eval "$flag"
7215c63293b5Smrg	  func_append arg " $func_quote_for_eval_result"
7216c63293b5Smrg	  func_append compiler_flags " $func_quote_for_eval_result"
7217e169010aSmrg	done
72189d0ccd10Smrg	IFS=$save_ifs
7219e169010aSmrg	func_stripname ' ' '' "$arg"
7220e169010aSmrg	arg=$func_stripname_result
7221e169010aSmrg	;;
72227914d74bSmrg
7223e169010aSmrg      -Wl,*)
7224e169010aSmrg	func_stripname '-Wl,' '' "$arg"
7225e169010aSmrg	args=$func_stripname_result
7226e169010aSmrg	arg=
72279d0ccd10Smrg	save_ifs=$IFS; IFS=,
7228e169010aSmrg	for flag in $args; do
72299d0ccd10Smrg	  IFS=$save_ifs
7230e169010aSmrg          func_quote_for_eval "$flag"
7231c63293b5Smrg	  func_append arg " $wl$func_quote_for_eval_result"
7232c63293b5Smrg	  func_append compiler_flags " $wl$func_quote_for_eval_result"
7233c63293b5Smrg	  func_append linker_flags " $func_quote_for_eval_result"
7234e169010aSmrg	done
72359d0ccd10Smrg	IFS=$save_ifs
7236e169010aSmrg	func_stripname ' ' '' "$arg"
7237e169010aSmrg	arg=$func_stripname_result
7238e169010aSmrg	;;
72397914d74bSmrg
7240e169010aSmrg      -Xcompiler)
7241e169010aSmrg	prev=xcompiler
7242e169010aSmrg	continue
7243e169010aSmrg	;;
72447914d74bSmrg
7245e169010aSmrg      -Xlinker)
7246e169010aSmrg	prev=xlinker
7247e169010aSmrg	continue
7248e169010aSmrg	;;
72497914d74bSmrg
7250e169010aSmrg      -XCClinker)
7251e169010aSmrg	prev=xcclinker
7252e169010aSmrg	continue
7253e169010aSmrg	;;
72547914d74bSmrg
7255e169010aSmrg      # -msg_* for osf cc
7256e169010aSmrg      -msg_*)
7257e169010aSmrg	func_quote_for_eval "$arg"
72589d0ccd10Smrg	arg=$func_quote_for_eval_result
7259e169010aSmrg	;;
72607914d74bSmrg
7261e8ead290Smrg      # Flags to be passed through unchanged, with rationale:
7262e8ead290Smrg      # -64, -mips[0-9]      enable 64-bit mode for the SGI compiler
7263e8ead290Smrg      # -r[0-9][0-9]*        specify processor for the SGI compiler
7264e8ead290Smrg      # -xarch=*, -xtarget=* enable 64-bit mode for the Sun compiler
7265e8ead290Smrg      # +DA*, +DD*           enable 64-bit mode for the HP compiler
7266e8ead290Smrg      # -q*                  compiler args for the IBM compiler
7267e8ead290Smrg      # -m*, -t[45]*, -txscale* architecture-specific flags for GCC
7268e8ead290Smrg      # -F/path              path to uninstalled frameworks, gcc on darwin
7269e8ead290Smrg      # -p, -pg, --coverage, -fprofile-*  profiling flags for GCC
72709d0ccd10Smrg      # -fstack-protector*   stack protector flags for GCC
7271e8ead290Smrg      # @file                GCC response files
7272e8ead290Smrg      # -tp=*                Portland pgcc target processor selection
7273c63293b5Smrg      # --sysroot=*          for sysroot support
72749d0ccd10Smrg      # -O*, -g*, -flto*, -fwhopr*, -fuse-linker-plugin GCC link-time optimization
72759d0ccd10Smrg      # -stdlib=*            select c++ std lib with clang
7276e169010aSmrg      -64|-mips[0-9]|-r[0-9][0-9]*|-xarch=*|-xtarget=*|+DA*|+DD*|-q*|-m*| \
7277c63293b5Smrg      -t[45]*|-txscale*|-p|-pg|--coverage|-fprofile-*|-F*|@*|-tp=*|--sysroot=*| \
7278cdce750aSmrg      -O*|-g*|-flto*|-fwhopr*|-fuse-linker-plugin|-fstack-protector*|-stdlib=*)
7279e169010aSmrg        func_quote_for_eval "$arg"
72809d0ccd10Smrg	arg=$func_quote_for_eval_result
7281e169010aSmrg        func_append compile_command " $arg"
7282e169010aSmrg        func_append finalize_command " $arg"
7283c63293b5Smrg        func_append compiler_flags " $arg"
7284e169010aSmrg        continue
7285e169010aSmrg        ;;
72867914d74bSmrg
72879d0ccd10Smrg      -Z*)
72889d0ccd10Smrg        if test os2 = "`expr $host : '.*\(os2\)'`"; then
72899d0ccd10Smrg          # OS/2 uses -Zxxx to specify OS/2-specific options
72909d0ccd10Smrg	  compiler_flags="$compiler_flags $arg"
72919d0ccd10Smrg	  func_append compile_command " $arg"
72929d0ccd10Smrg	  func_append finalize_command " $arg"
72939d0ccd10Smrg	  case $arg in
72949d0ccd10Smrg	  -Zlinker | -Zstack)
72959d0ccd10Smrg	    prev=xcompiler
72969d0ccd10Smrg	    ;;
72979d0ccd10Smrg	  esac
72989d0ccd10Smrg	  continue
72999d0ccd10Smrg        else
73009d0ccd10Smrg	  # Otherwise treat like 'Some other compiler flag' below
73019d0ccd10Smrg	  func_quote_for_eval "$arg"
73029d0ccd10Smrg	  arg=$func_quote_for_eval_result
73039d0ccd10Smrg        fi
73049d0ccd10Smrg	;;
73059d0ccd10Smrg
7306e169010aSmrg      # Some other compiler flag.
7307e169010aSmrg      -* | +*)
7308e169010aSmrg        func_quote_for_eval "$arg"
73099d0ccd10Smrg	arg=$func_quote_for_eval_result
7310e169010aSmrg	;;
73117914d74bSmrg
7312e169010aSmrg      *.$objext)
7313e169010aSmrg	# A standard object.
7314c63293b5Smrg	func_append objs " $arg"
7315e169010aSmrg	;;
7316e169010aSmrg
7317e169010aSmrg      *.lo)
7318e169010aSmrg	# A libtool-controlled object.
7319e169010aSmrg
7320e169010aSmrg	# Check to see that this really is a libtool object.
7321e169010aSmrg	if func_lalib_unsafe_p "$arg"; then
7322e169010aSmrg	  pic_object=
7323e169010aSmrg	  non_pic_object=
7324e169010aSmrg
7325e169010aSmrg	  # Read the .lo file
7326e169010aSmrg	  func_source "$arg"
7327e169010aSmrg
7328e169010aSmrg	  if test -z "$pic_object" ||
7329e169010aSmrg	     test -z "$non_pic_object" ||
73309d0ccd10Smrg	     test none = "$pic_object" &&
73319d0ccd10Smrg	     test none = "$non_pic_object"; then
73329d0ccd10Smrg	    func_fatal_error "cannot find name of object for '$arg'"
7333e169010aSmrg	  fi
7334e169010aSmrg
7335e169010aSmrg	  # Extract subdirectory from the argument.
7336e169010aSmrg	  func_dirname "$arg" "/" ""
73379d0ccd10Smrg	  xdir=$func_dirname_result
7338e169010aSmrg
73399d0ccd10Smrg	  test none = "$pic_object" || {
7340e169010aSmrg	    # Prepend the subdirectory the object is found in.
73419d0ccd10Smrg	    pic_object=$xdir$pic_object
7342e169010aSmrg
73439d0ccd10Smrg	    if test dlfiles = "$prev"; then
73449d0ccd10Smrg	      if test yes = "$build_libtool_libs" && test yes = "$dlopen_support"; then
7345c63293b5Smrg		func_append dlfiles " $pic_object"
7346e169010aSmrg		prev=
7347e169010aSmrg		continue
7348e169010aSmrg	      else
7349e169010aSmrg		# If libtool objects are unsupported, then we need to preload.
7350e169010aSmrg		prev=dlprefiles
7351e169010aSmrg	      fi
7352e169010aSmrg	    fi
7353e169010aSmrg
7354e169010aSmrg	    # CHECK ME:  I think I busted this.  -Ossama
73559d0ccd10Smrg	    if test dlprefiles = "$prev"; then
7356e169010aSmrg	      # Preload the old-style object.
7357c63293b5Smrg	      func_append dlprefiles " $pic_object"
7358e169010aSmrg	      prev=
7359e169010aSmrg	    fi
7360e169010aSmrg
7361e169010aSmrg	    # A PIC object.
7362e169010aSmrg	    func_append libobjs " $pic_object"
73639d0ccd10Smrg	    arg=$pic_object
73649d0ccd10Smrg	  }
7365e169010aSmrg
7366e169010aSmrg	  # Non-PIC object.
73679d0ccd10Smrg	  if test none != "$non_pic_object"; then
7368e169010aSmrg	    # Prepend the subdirectory the object is found in.
73699d0ccd10Smrg	    non_pic_object=$xdir$non_pic_object
7370e169010aSmrg
7371e169010aSmrg	    # A standard non-PIC object
7372e169010aSmrg	    func_append non_pic_objects " $non_pic_object"
73739d0ccd10Smrg	    if test -z "$pic_object" || test none = "$pic_object"; then
73749d0ccd10Smrg	      arg=$non_pic_object
7375e169010aSmrg	    fi
7376e169010aSmrg	  else
7377e169010aSmrg	    # If the PIC object exists, use it instead.
7378e169010aSmrg	    # $xdir was prepended to $pic_object above.
73799d0ccd10Smrg	    non_pic_object=$pic_object
7380e169010aSmrg	    func_append non_pic_objects " $non_pic_object"
7381e169010aSmrg	  fi
7382e169010aSmrg	else
7383e169010aSmrg	  # Only an error if not doing a dry-run.
7384e169010aSmrg	  if $opt_dry_run; then
7385e169010aSmrg	    # Extract subdirectory from the argument.
7386e169010aSmrg	    func_dirname "$arg" "/" ""
73879d0ccd10Smrg	    xdir=$func_dirname_result
7388e169010aSmrg
7389e169010aSmrg	    func_lo2o "$arg"
7390e169010aSmrg	    pic_object=$xdir$objdir/$func_lo2o_result
7391e169010aSmrg	    non_pic_object=$xdir$func_lo2o_result
7392e169010aSmrg	    func_append libobjs " $pic_object"
7393e169010aSmrg	    func_append non_pic_objects " $non_pic_object"
7394e169010aSmrg	  else
73959d0ccd10Smrg	    func_fatal_error "'$arg' is not a valid libtool object"
7396e169010aSmrg	  fi
7397e169010aSmrg	fi
7398e169010aSmrg	;;
7399e169010aSmrg
7400e169010aSmrg      *.$libext)
7401e169010aSmrg	# An archive.
7402c63293b5Smrg	func_append deplibs " $arg"
7403c63293b5Smrg	func_append old_deplibs " $arg"
7404e169010aSmrg	continue
7405e169010aSmrg	;;
7406e169010aSmrg
7407e169010aSmrg      *.la)
7408e169010aSmrg	# A libtool-controlled library.
7409e169010aSmrg
7410c63293b5Smrg	func_resolve_sysroot "$arg"
74119d0ccd10Smrg	if test dlfiles = "$prev"; then
7412e169010aSmrg	  # This library was specified with -dlopen.
7413c63293b5Smrg	  func_append dlfiles " $func_resolve_sysroot_result"
7414e169010aSmrg	  prev=
74159d0ccd10Smrg	elif test dlprefiles = "$prev"; then
7416e169010aSmrg	  # The library was specified with -dlpreopen.
7417c63293b5Smrg	  func_append dlprefiles " $func_resolve_sysroot_result"
7418e169010aSmrg	  prev=
7419e169010aSmrg	else
7420c63293b5Smrg	  func_append deplibs " $func_resolve_sysroot_result"
7421e169010aSmrg	fi
7422e169010aSmrg	continue
7423e169010aSmrg	;;
7424e169010aSmrg
7425e169010aSmrg      # Some other compiler argument.
7426e169010aSmrg      *)
7427e169010aSmrg	# Unknown arguments in both finalize_command and compile_command need
7428e169010aSmrg	# to be aesthetically quoted because they are evaled later.
7429e169010aSmrg	func_quote_for_eval "$arg"
74309d0ccd10Smrg	arg=$func_quote_for_eval_result
7431e169010aSmrg	;;
7432e169010aSmrg      esac # arg
7433e169010aSmrg
7434e169010aSmrg      # Now actually substitute the argument into the commands.
7435e169010aSmrg      if test -n "$arg"; then
7436e169010aSmrg	func_append compile_command " $arg"
7437e169010aSmrg	func_append finalize_command " $arg"
7438e169010aSmrg      fi
7439e169010aSmrg    done # argument parsing loop
7440e169010aSmrg
7441e169010aSmrg    test -n "$prev" && \
74429d0ccd10Smrg      func_fatal_help "the '$prevarg' option requires an argument"
7443e169010aSmrg
74449d0ccd10Smrg    if test yes = "$export_dynamic" && test -n "$export_dynamic_flag_spec"; then
7445e169010aSmrg      eval arg=\"$export_dynamic_flag_spec\"
7446e169010aSmrg      func_append compile_command " $arg"
7447e169010aSmrg      func_append finalize_command " $arg"
7448e169010aSmrg    fi
7449e169010aSmrg
7450e169010aSmrg    oldlibs=
7451e169010aSmrg    # calculate the name of the file, without its directory
7452e169010aSmrg    func_basename "$output"
74539d0ccd10Smrg    outputname=$func_basename_result
74549d0ccd10Smrg    libobjs_save=$libobjs
7455e169010aSmrg
7456e169010aSmrg    if test -n "$shlibpath_var"; then
7457e169010aSmrg      # get the directories listed in $shlibpath_var
74589d0ccd10Smrg      eval shlib_search_path=\`\$ECHO \"\$$shlibpath_var\" \| \$SED \'s/:/ /g\'\`
74597914d74bSmrg    else
7460e169010aSmrg      shlib_search_path=
74617914d74bSmrg    fi
7462e169010aSmrg    eval sys_lib_search_path=\"$sys_lib_search_path_spec\"
7463e169010aSmrg    eval sys_lib_dlsearch_path=\"$sys_lib_dlsearch_path_spec\"
74647914d74bSmrg
74659d0ccd10Smrg    # Definition is injected by LT_CONFIG during libtool generation.
74669d0ccd10Smrg    func_munge_path_list sys_lib_dlsearch_path "$LT_SYS_LIBRARY_PATH"
74679d0ccd10Smrg
7468e169010aSmrg    func_dirname "$output" "/" ""
74699d0ccd10Smrg    output_objdir=$func_dirname_result$objdir
7470c63293b5Smrg    func_to_tool_file "$output_objdir/"
7471c63293b5Smrg    tool_output_objdir=$func_to_tool_file_result
7472e169010aSmrg    # Create the object directory.
7473e169010aSmrg    func_mkdir_p "$output_objdir"
74747914d74bSmrg
7475e169010aSmrg    # Determine the type of output
7476e169010aSmrg    case $output in
7477e169010aSmrg    "")
7478e169010aSmrg      func_fatal_help "you must specify an output file"
7479e169010aSmrg      ;;
7480e169010aSmrg    *.$libext) linkmode=oldlib ;;
7481e169010aSmrg    *.lo | *.$objext) linkmode=obj ;;
7482e169010aSmrg    *.la) linkmode=lib ;;
7483e169010aSmrg    *) linkmode=prog ;; # Anything else should be a program.
7484e169010aSmrg    esac
7485e169010aSmrg
7486e169010aSmrg    specialdeplibs=
7487e169010aSmrg
7488e169010aSmrg    libs=
7489e169010aSmrg    # Find all interdependent deplibs by searching for libraries
7490e169010aSmrg    # that are linked more than once (e.g. -la -lb -la)
7491e169010aSmrg    for deplib in $deplibs; do
74929d0ccd10Smrg      if $opt_preserve_dup_deps; then
7493e169010aSmrg	case "$libs " in
7494c63293b5Smrg	*" $deplib "*) func_append specialdeplibs " $deplib" ;;
7495e169010aSmrg	esac
7496e169010aSmrg      fi
7497c63293b5Smrg      func_append libs " $deplib"
7498e169010aSmrg    done
7499e169010aSmrg
75009d0ccd10Smrg    if test lib = "$linkmode"; then
7501e169010aSmrg      libs="$predeps $libs $compiler_lib_search_path $postdeps"
7502e169010aSmrg
7503e169010aSmrg      # Compute libraries that are listed more than once in $predeps
7504e169010aSmrg      # $postdeps and mark them as special (i.e., whose duplicates are
7505e169010aSmrg      # not to be eliminated).
7506e169010aSmrg      pre_post_deps=
7507e169010aSmrg      if $opt_duplicate_compiler_generated_deps; then
7508e169010aSmrg	for pre_post_dep in $predeps $postdeps; do
7509e169010aSmrg	  case "$pre_post_deps " in
7510c63293b5Smrg	  *" $pre_post_dep "*) func_append specialdeplibs " $pre_post_deps" ;;
7511e169010aSmrg	  esac
7512c63293b5Smrg	  func_append pre_post_deps " $pre_post_dep"
7513e169010aSmrg	done
7514e169010aSmrg      fi
7515e169010aSmrg      pre_post_deps=
7516e169010aSmrg    fi
7517e169010aSmrg
7518e169010aSmrg    deplibs=
7519e169010aSmrg    newdependency_libs=
7520e169010aSmrg    newlib_search_path=
7521e169010aSmrg    need_relink=no # whether we're linking any uninstalled libtool libraries
7522e169010aSmrg    notinst_deplibs= # not-installed libtool libraries
7523e169010aSmrg    notinst_path= # paths that contain not-installed libtool libraries
7524e169010aSmrg
7525e169010aSmrg    case $linkmode in
7526e169010aSmrg    lib)
7527e169010aSmrg	passes="conv dlpreopen link"
7528e169010aSmrg	for file in $dlfiles $dlprefiles; do
7529e169010aSmrg	  case $file in
7530e169010aSmrg	  *.la) ;;
7531e169010aSmrg	  *)
75329d0ccd10Smrg	    func_fatal_help "libraries can '-dlopen' only libtool libraries: $file"
7533e169010aSmrg	    ;;
7534e169010aSmrg	  esac
7535e169010aSmrg	done
7536e169010aSmrg	;;
7537e169010aSmrg    prog)
7538e169010aSmrg	compile_deplibs=
7539e169010aSmrg	finalize_deplibs=
75409d0ccd10Smrg	alldeplibs=false
7541e169010aSmrg	newdlfiles=
7542e169010aSmrg	newdlprefiles=
7543e169010aSmrg	passes="conv scan dlopen dlpreopen link"
7544e169010aSmrg	;;
7545e169010aSmrg    *)  passes="conv"
7546e169010aSmrg	;;
7547e169010aSmrg    esac
7548e169010aSmrg
7549e169010aSmrg    for pass in $passes; do
7550e169010aSmrg      # The preopen pass in lib mode reverses $deplibs; put it back here
7551e169010aSmrg      # so that -L comes before libs that need it for instance...
75529d0ccd10Smrg      if test lib,link = "$linkmode,$pass"; then
7553e169010aSmrg	## FIXME: Find the place where the list is rebuilt in the wrong
7554e169010aSmrg	##        order, and fix it there properly
7555e169010aSmrg        tmp_deplibs=
7556e169010aSmrg	for deplib in $deplibs; do
7557e169010aSmrg	  tmp_deplibs="$deplib $tmp_deplibs"
7558e169010aSmrg	done
75599d0ccd10Smrg	deplibs=$tmp_deplibs
7560e169010aSmrg      fi
7561e169010aSmrg
75629d0ccd10Smrg      if test lib,link = "$linkmode,$pass" ||
75639d0ccd10Smrg	 test prog,scan = "$linkmode,$pass"; then
75649d0ccd10Smrg	libs=$deplibs
7565e169010aSmrg	deplibs=
7566e169010aSmrg      fi
75679d0ccd10Smrg      if test prog = "$linkmode"; then
7568e169010aSmrg	case $pass in
75699d0ccd10Smrg	dlopen) libs=$dlfiles ;;
75709d0ccd10Smrg	dlpreopen) libs=$dlprefiles ;;
7571cdce750aSmrg	link) libs="$deplibs %DEPLIBS% $dependency_libs" ;;
7572e169010aSmrg	esac
7573e169010aSmrg      fi
75749d0ccd10Smrg      if test lib,dlpreopen = "$linkmode,$pass"; then
7575e169010aSmrg	# Collect and forward deplibs of preopened libtool libs
7576e169010aSmrg	for lib in $dlprefiles; do
7577e169010aSmrg	  # Ignore non-libtool-libs
7578e169010aSmrg	  dependency_libs=
7579c63293b5Smrg	  func_resolve_sysroot "$lib"
7580e169010aSmrg	  case $lib in
7581c63293b5Smrg	  *.la)	func_source "$func_resolve_sysroot_result" ;;
7582e169010aSmrg	  esac
7583e169010aSmrg
7584e169010aSmrg	  # Collect preopened libtool deplibs, except any this library
7585e169010aSmrg	  # has declared as weak libs
7586e169010aSmrg	  for deplib in $dependency_libs; do
7587e8ead290Smrg	    func_basename "$deplib"
7588e8ead290Smrg            deplib_base=$func_basename_result
7589e169010aSmrg	    case " $weak_libs " in
7590e169010aSmrg	    *" $deplib_base "*) ;;
7591c63293b5Smrg	    *) func_append deplibs " $deplib" ;;
7592e169010aSmrg	    esac
7593e169010aSmrg	  done
7594e169010aSmrg	done
75959d0ccd10Smrg	libs=$dlprefiles
7596e169010aSmrg      fi
75979d0ccd10Smrg      if test dlopen = "$pass"; then
7598e169010aSmrg	# Collect dlpreopened libraries
75999d0ccd10Smrg	save_deplibs=$deplibs
7600e169010aSmrg	deplibs=
7601e169010aSmrg      fi
7602e169010aSmrg
7603e169010aSmrg      for deplib in $libs; do
7604e169010aSmrg	lib=
76059d0ccd10Smrg	found=false
7606e169010aSmrg	case $deplib in
7607e6d5e4e0Smrg	-mt|-mthreads|-kthread|-Kthread|-pthread|-pthreads|--thread-safe \
7608e6d5e4e0Smrg        |-threads|-fopenmp|-openmp|-mp|-xopenmp|-omp|-qsmp=*)
76099d0ccd10Smrg	  if test prog,link = "$linkmode,$pass"; then
7610e169010aSmrg	    compile_deplibs="$deplib $compile_deplibs"
7611e169010aSmrg	    finalize_deplibs="$deplib $finalize_deplibs"
7612e169010aSmrg	  else
7613c63293b5Smrg	    func_append compiler_flags " $deplib"
76149d0ccd10Smrg	    if test lib = "$linkmode"; then
7615e169010aSmrg		case "$new_inherited_linker_flags " in
7616e169010aSmrg		    *" $deplib "*) ;;
7617c63293b5Smrg		    * ) func_append new_inherited_linker_flags " $deplib" ;;
7618e169010aSmrg		esac
7619e169010aSmrg	    fi
7620e169010aSmrg	  fi
7621e169010aSmrg	  continue
7622e169010aSmrg	  ;;
7623e169010aSmrg	-l*)
76249d0ccd10Smrg	  if test lib != "$linkmode" && test prog != "$linkmode"; then
76259d0ccd10Smrg	    func_warning "'-l' is ignored for archives/objects"
7626e169010aSmrg	    continue
7627e169010aSmrg	  fi
7628e169010aSmrg	  func_stripname '-l' '' "$deplib"
7629e169010aSmrg	  name=$func_stripname_result
76309d0ccd10Smrg	  if test lib = "$linkmode"; then
7631e169010aSmrg	    searchdirs="$newlib_search_path $lib_search_path $compiler_lib_search_dirs $sys_lib_search_path $shlib_search_path"
7632e169010aSmrg	  else
7633e169010aSmrg	    searchdirs="$newlib_search_path $lib_search_path $sys_lib_search_path $shlib_search_path"
7634e169010aSmrg	  fi
7635e169010aSmrg	  for searchdir in $searchdirs; do
7636e169010aSmrg	    for search_ext in .la $std_shrext .so .a; do
7637e169010aSmrg	      # Search the libtool library
76389d0ccd10Smrg	      lib=$searchdir/lib$name$search_ext
7639e169010aSmrg	      if test -f "$lib"; then
76409d0ccd10Smrg		if test .la = "$search_ext"; then
76419d0ccd10Smrg		  found=:
7642e169010aSmrg		else
76439d0ccd10Smrg		  found=false
7644e169010aSmrg		fi
7645e169010aSmrg		break 2
7646e169010aSmrg	      fi
7647e169010aSmrg	    done
7648e169010aSmrg	  done
76499d0ccd10Smrg	  if $found; then
76509d0ccd10Smrg	    # deplib is a libtool library
7651e169010aSmrg	    # If $allow_libtool_libs_with_static_runtimes && $deplib is a stdlib,
7652e169010aSmrg	    # We need to do some special things here, and not later.
76539d0ccd10Smrg	    if test yes = "$allow_libtool_libs_with_static_runtimes"; then
7654e169010aSmrg	      case " $predeps $postdeps " in
7655e169010aSmrg	      *" $deplib "*)
7656e169010aSmrg		if func_lalib_p "$lib"; then
7657e169010aSmrg		  library_names=
7658e169010aSmrg		  old_library=
7659e169010aSmrg		  func_source "$lib"
7660e169010aSmrg		  for l in $old_library $library_names; do
76619d0ccd10Smrg		    ll=$l
7662e169010aSmrg		  done
76639d0ccd10Smrg		  if test "X$ll" = "X$old_library"; then # only static version available
76649d0ccd10Smrg		    found=false
7665e169010aSmrg		    func_dirname "$lib" "" "."
76669d0ccd10Smrg		    ladir=$func_dirname_result
7667e169010aSmrg		    lib=$ladir/$old_library
76689d0ccd10Smrg		    if test prog,link = "$linkmode,$pass"; then
7669e169010aSmrg		      compile_deplibs="$deplib $compile_deplibs"
7670e169010aSmrg		      finalize_deplibs="$deplib $finalize_deplibs"
7671e169010aSmrg		    else
7672e169010aSmrg		      deplibs="$deplib $deplibs"
76739d0ccd10Smrg		      test lib = "$linkmode" && newdependency_libs="$deplib $newdependency_libs"
7674e169010aSmrg		    fi
7675e169010aSmrg		    continue
7676e169010aSmrg		  fi
7677e169010aSmrg		fi
7678e169010aSmrg		;;
7679e169010aSmrg	      *) ;;
7680e169010aSmrg	      esac
7681e169010aSmrg	    fi
76829d0ccd10Smrg	  else
76839d0ccd10Smrg	    # deplib doesn't seem to be a libtool library
76849d0ccd10Smrg	    if test prog,link = "$linkmode,$pass"; then
76859d0ccd10Smrg	      compile_deplibs="$deplib $compile_deplibs"
76869d0ccd10Smrg	      finalize_deplibs="$deplib $finalize_deplibs"
76879d0ccd10Smrg	    else
76889d0ccd10Smrg	      deplibs="$deplib $deplibs"
76899d0ccd10Smrg	      test lib = "$linkmode" && newdependency_libs="$deplib $newdependency_libs"
76909d0ccd10Smrg	    fi
76919d0ccd10Smrg	    continue
7692e169010aSmrg	  fi
7693e169010aSmrg	  ;; # -l
7694e169010aSmrg	*.ltframework)
76959d0ccd10Smrg	  if test prog,link = "$linkmode,$pass"; then
7696e169010aSmrg	    compile_deplibs="$deplib $compile_deplibs"
7697e169010aSmrg	    finalize_deplibs="$deplib $finalize_deplibs"
7698e169010aSmrg	  else
7699e169010aSmrg	    deplibs="$deplib $deplibs"
77009d0ccd10Smrg	    if test lib = "$linkmode"; then
7701e169010aSmrg		case "$new_inherited_linker_flags " in
7702e169010aSmrg		    *" $deplib "*) ;;
7703c63293b5Smrg		    * ) func_append new_inherited_linker_flags " $deplib" ;;
7704e169010aSmrg		esac
7705e169010aSmrg	    fi
7706e169010aSmrg	  fi
7707e169010aSmrg	  continue
7708e169010aSmrg	  ;;
7709e169010aSmrg	-L*)
7710e169010aSmrg	  case $linkmode in
7711e169010aSmrg	  lib)
7712e169010aSmrg	    deplibs="$deplib $deplibs"
77139d0ccd10Smrg	    test conv = "$pass" && continue
7714e169010aSmrg	    newdependency_libs="$deplib $newdependency_libs"
7715e169010aSmrg	    func_stripname '-L' '' "$deplib"
7716c63293b5Smrg	    func_resolve_sysroot "$func_stripname_result"
7717c63293b5Smrg	    func_append newlib_search_path " $func_resolve_sysroot_result"
7718e169010aSmrg	    ;;
7719e169010aSmrg	  prog)
77209d0ccd10Smrg	    if test conv = "$pass"; then
7721e169010aSmrg	      deplibs="$deplib $deplibs"
7722e169010aSmrg	      continue
7723e169010aSmrg	    fi
77249d0ccd10Smrg	    if test scan = "$pass"; then
7725e169010aSmrg	      deplibs="$deplib $deplibs"
7726e169010aSmrg	    else
7727e169010aSmrg	      compile_deplibs="$deplib $compile_deplibs"
7728e169010aSmrg	      finalize_deplibs="$deplib $finalize_deplibs"
7729e169010aSmrg	    fi
7730e169010aSmrg	    func_stripname '-L' '' "$deplib"
7731c63293b5Smrg	    func_resolve_sysroot "$func_stripname_result"
7732c63293b5Smrg	    func_append newlib_search_path " $func_resolve_sysroot_result"
7733e169010aSmrg	    ;;
7734e169010aSmrg	  *)
77359d0ccd10Smrg	    func_warning "'-L' is ignored for archives/objects"
7736e169010aSmrg	    ;;
7737e169010aSmrg	  esac # linkmode
7738e169010aSmrg	  continue
7739e169010aSmrg	  ;; # -L
7740e169010aSmrg	-R*)
77419d0ccd10Smrg	  if test link = "$pass"; then
7742e169010aSmrg	    func_stripname '-R' '' "$deplib"
7743c63293b5Smrg	    func_resolve_sysroot "$func_stripname_result"
7744c63293b5Smrg	    dir=$func_resolve_sysroot_result
7745e169010aSmrg	    # Make sure the xrpath contains only unique directories.
7746e169010aSmrg	    case "$xrpath " in
7747e169010aSmrg	    *" $dir "*) ;;
7748c63293b5Smrg	    *) func_append xrpath " $dir" ;;
7749e169010aSmrg	    esac
7750e169010aSmrg	  fi
7751e169010aSmrg	  deplibs="$deplib $deplibs"
7752e169010aSmrg	  continue
7753e169010aSmrg	  ;;
7754c63293b5Smrg	*.la)
7755c63293b5Smrg	  func_resolve_sysroot "$deplib"
7756c63293b5Smrg	  lib=$func_resolve_sysroot_result
7757c63293b5Smrg	  ;;
7758e169010aSmrg	*.$libext)
77599d0ccd10Smrg	  if test conv = "$pass"; then
7760e169010aSmrg	    deplibs="$deplib $deplibs"
7761e169010aSmrg	    continue
7762e169010aSmrg	  fi
7763e169010aSmrg	  case $linkmode in
7764e169010aSmrg	  lib)
7765e169010aSmrg	    # Linking convenience modules into shared libraries is allowed,
7766e169010aSmrg	    # but linking other static libraries is non-portable.
7767e169010aSmrg	    case " $dlpreconveniencelibs " in
7768e169010aSmrg	    *" $deplib "*) ;;
7769e169010aSmrg	    *)
77709d0ccd10Smrg	      valid_a_lib=false
7771e169010aSmrg	      case $deplibs_check_method in
7772e169010aSmrg		match_pattern*)
7773e169010aSmrg		  set dummy $deplibs_check_method; shift
7774e169010aSmrg		  match_pattern_regex=`expr "$deplibs_check_method" : "$1 \(.*\)"`
7775e8ead290Smrg		  if eval "\$ECHO \"$deplib\"" 2>/dev/null | $SED 10q \
7776e169010aSmrg		    | $EGREP "$match_pattern_regex" > /dev/null; then
77779d0ccd10Smrg		    valid_a_lib=:
7778e169010aSmrg		  fi
7779e169010aSmrg		;;
7780e169010aSmrg		pass_all)
77819d0ccd10Smrg		  valid_a_lib=:
7782e169010aSmrg		;;
7783e169010aSmrg	      esac
77849d0ccd10Smrg	      if $valid_a_lib; then
77859d0ccd10Smrg		echo
77869d0ccd10Smrg		$ECHO "*** Warning: Linking the shared library $output against the"
77879d0ccd10Smrg		$ECHO "*** static library $deplib is not portable!"
77889d0ccd10Smrg		deplibs="$deplib $deplibs"
77899d0ccd10Smrg	      else
7790e8ead290Smrg		echo
7791e169010aSmrg		$ECHO "*** Warning: Trying to link with static lib archive $deplib."
7792e8ead290Smrg		echo "*** I have the capability to make that library automatically link in when"
7793e8ead290Smrg		echo "*** you link to this library.  But I can only do this if you have a"
7794e8ead290Smrg		echo "*** shared version of the library, which you do not appear to have"
7795e8ead290Smrg		echo "*** because the file extensions .$libext of this argument makes me believe"
7796e8ead290Smrg		echo "*** that it is just a static archive that I should not use here."
7797e169010aSmrg	      fi
7798e169010aSmrg	      ;;
7799e169010aSmrg	    esac
7800e169010aSmrg	    continue
7801e169010aSmrg	    ;;
7802e169010aSmrg	  prog)
78039d0ccd10Smrg	    if test link != "$pass"; then
7804e169010aSmrg	      deplibs="$deplib $deplibs"
7805e169010aSmrg	    else
7806e169010aSmrg	      compile_deplibs="$deplib $compile_deplibs"
7807e169010aSmrg	      finalize_deplibs="$deplib $finalize_deplibs"
7808e169010aSmrg	    fi
7809e169010aSmrg	    continue
7810e169010aSmrg	    ;;
7811e169010aSmrg	  esac # linkmode
7812e169010aSmrg	  ;; # *.$libext
7813e169010aSmrg	*.lo | *.$objext)
78149d0ccd10Smrg	  if test conv = "$pass"; then
7815e169010aSmrg	    deplibs="$deplib $deplibs"
78169d0ccd10Smrg	  elif test prog = "$linkmode"; then
78179d0ccd10Smrg	    if test dlpreopen = "$pass" || test yes != "$dlopen_support" || test no = "$build_libtool_libs"; then
7818e169010aSmrg	      # If there is no dlopen support or we're linking statically,
7819e169010aSmrg	      # we need to preload.
7820c63293b5Smrg	      func_append newdlprefiles " $deplib"
7821e169010aSmrg	      compile_deplibs="$deplib $compile_deplibs"
7822e169010aSmrg	      finalize_deplibs="$deplib $finalize_deplibs"
7823e169010aSmrg	    else
7824c63293b5Smrg	      func_append newdlfiles " $deplib"
7825e169010aSmrg	    fi
7826e169010aSmrg	  fi
7827e169010aSmrg	  continue
7828e169010aSmrg	  ;;
7829e169010aSmrg	%DEPLIBS%)
78309d0ccd10Smrg	  alldeplibs=:
7831e169010aSmrg	  continue
7832e169010aSmrg	  ;;
7833e169010aSmrg	esac # case $deplib
7834e169010aSmrg
78359d0ccd10Smrg	$found || test -f "$lib" \
78369d0ccd10Smrg	  || func_fatal_error "cannot find the library '$lib' or unhandled argument '$deplib'"
7837e169010aSmrg
7838e169010aSmrg	# Check to see that this really is a libtool archive.
7839e169010aSmrg	func_lalib_unsafe_p "$lib" \
78409d0ccd10Smrg	  || func_fatal_error "'$lib' is not a valid libtool archive"
7841e169010aSmrg
7842e169010aSmrg	func_dirname "$lib" "" "."
78439d0ccd10Smrg	ladir=$func_dirname_result
7844e169010aSmrg
7845e169010aSmrg	dlname=
7846e169010aSmrg	dlopen=
7847e169010aSmrg	dlpreopen=
7848e169010aSmrg	libdir=
7849e169010aSmrg	library_names=
7850e169010aSmrg	old_library=
7851e169010aSmrg	inherited_linker_flags=
7852e169010aSmrg	# If the library was installed with an old release of libtool,
7853e169010aSmrg	# it will not redefine variables installed, or shouldnotlink
7854e169010aSmrg	installed=yes
7855e169010aSmrg	shouldnotlink=no
7856e169010aSmrg	avoidtemprpath=
7857e169010aSmrg
7858e169010aSmrg
7859e169010aSmrg	# Read the .la file
7860e169010aSmrg	func_source "$lib"
7861e169010aSmrg
7862e169010aSmrg	# Convert "-framework foo" to "foo.ltframework"
7863e169010aSmrg	if test -n "$inherited_linker_flags"; then
7864e8ead290Smrg	  tmp_inherited_linker_flags=`$ECHO "$inherited_linker_flags" | $SED 's/-framework \([^ $]*\)/\1.ltframework/g'`
7865e169010aSmrg	  for tmp_inherited_linker_flag in $tmp_inherited_linker_flags; do
7866e169010aSmrg	    case " $new_inherited_linker_flags " in
7867e169010aSmrg	      *" $tmp_inherited_linker_flag "*) ;;
7868c63293b5Smrg	      *) func_append new_inherited_linker_flags " $tmp_inherited_linker_flag";;
7869e169010aSmrg	    esac
7870e169010aSmrg	  done
7871e169010aSmrg	fi
7872e8ead290Smrg	dependency_libs=`$ECHO " $dependency_libs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'`
78739d0ccd10Smrg	if test lib,link = "$linkmode,$pass" ||
78749d0ccd10Smrg	   test prog,scan = "$linkmode,$pass" ||
78759d0ccd10Smrg	   { test prog != "$linkmode" && test lib != "$linkmode"; }; then
7876c63293b5Smrg	  test -n "$dlopen" && func_append dlfiles " $dlopen"
7877c63293b5Smrg	  test -n "$dlpreopen" && func_append dlprefiles " $dlpreopen"
7878e169010aSmrg	fi
7879e169010aSmrg
78809d0ccd10Smrg	if test conv = "$pass"; then
7881e169010aSmrg	  # Only check for convenience libraries
7882e169010aSmrg	  deplibs="$lib $deplibs"
7883e169010aSmrg	  if test -z "$libdir"; then
7884e169010aSmrg	    if test -z "$old_library"; then
78859d0ccd10Smrg	      func_fatal_error "cannot find name of link library for '$lib'"
7886e169010aSmrg	    fi
7887e169010aSmrg	    # It is a libtool convenience library, so add in its objects.
7888c63293b5Smrg	    func_append convenience " $ladir/$objdir/$old_library"
7889c63293b5Smrg	    func_append old_convenience " $ladir/$objdir/$old_library"
78909d0ccd10Smrg	  elif test prog != "$linkmode" && test lib != "$linkmode"; then
78919d0ccd10Smrg	    func_fatal_error "'$lib' is not a convenience library"
7892e169010aSmrg	  fi
7893cdce750aSmrg	  tmp_libs=
7894cdce750aSmrg	  for deplib in $dependency_libs; do
7895cdce750aSmrg	    deplibs="$deplib $deplibs"
7896cdce750aSmrg	    if $opt_preserve_dup_deps; then
7897cdce750aSmrg	      case "$tmp_libs " in
7898cdce750aSmrg	      *" $deplib "*) func_append specialdeplibs " $deplib" ;;
7899cdce750aSmrg	      esac
7900cdce750aSmrg	    fi
7901cdce750aSmrg	    func_append tmp_libs " $deplib"
7902cdce750aSmrg	  done
7903e169010aSmrg	  continue
7904e169010aSmrg	fi # $pass = conv
7905e169010aSmrg
7906e169010aSmrg
7907e169010aSmrg	# Get the name of the library we link against.
7908e169010aSmrg	linklib=
7909c63293b5Smrg	if test -n "$old_library" &&
79109d0ccd10Smrg	   { test yes = "$prefer_static_libs" ||
79119d0ccd10Smrg	     test built,no = "$prefer_static_libs,$installed"; }; then
7912c63293b5Smrg	  linklib=$old_library
7913c63293b5Smrg	else
7914c63293b5Smrg	  for l in $old_library $library_names; do
79159d0ccd10Smrg	    linklib=$l
7916c63293b5Smrg	  done
7917c63293b5Smrg	fi
7918e169010aSmrg	if test -z "$linklib"; then
79199d0ccd10Smrg	  func_fatal_error "cannot find name of link library for '$lib'"
7920e169010aSmrg	fi
7921e169010aSmrg
7922e169010aSmrg	# This library was specified with -dlopen.
79239d0ccd10Smrg	if test dlopen = "$pass"; then
79249d0ccd10Smrg	  test -z "$libdir" \
79259d0ccd10Smrg	    && func_fatal_error "cannot -dlopen a convenience library: '$lib'"
7926e169010aSmrg	  if test -z "$dlname" ||
79279d0ccd10Smrg	     test yes != "$dlopen_support" ||
79289d0ccd10Smrg	     test no = "$build_libtool_libs"
79299d0ccd10Smrg	  then
7930e169010aSmrg	    # If there is no dlname, no dlopen support or we're linking
7931e169010aSmrg	    # statically, we need to preload.  We also need to preload any
7932e169010aSmrg	    # dependent libraries so libltdl's deplib preloader doesn't
7933e169010aSmrg	    # bomb out in the load deplibs phase.
7934c63293b5Smrg	    func_append dlprefiles " $lib $dependency_libs"
7935e169010aSmrg	  else
7936c63293b5Smrg	    func_append newdlfiles " $lib"
7937e169010aSmrg	  fi
7938e169010aSmrg	  continue
7939e169010aSmrg	fi # $pass = dlopen
7940e169010aSmrg
7941e169010aSmrg	# We need an absolute path.
7942e169010aSmrg	case $ladir in
79439d0ccd10Smrg	[\\/]* | [A-Za-z]:[\\/]*) abs_ladir=$ladir ;;
7944e169010aSmrg	*)
7945e169010aSmrg	  abs_ladir=`cd "$ladir" && pwd`
7946e169010aSmrg	  if test -z "$abs_ladir"; then
79479d0ccd10Smrg	    func_warning "cannot determine absolute directory name of '$ladir'"
7948e169010aSmrg	    func_warning "passing it literally to the linker, although it might fail"
79499d0ccd10Smrg	    abs_ladir=$ladir
7950e169010aSmrg	  fi
7951e169010aSmrg	  ;;
7952e169010aSmrg	esac
7953e169010aSmrg	func_basename "$lib"
79549d0ccd10Smrg	laname=$func_basename_result
7955e169010aSmrg
7956e169010aSmrg	# Find the relevant object directory and library name.
79579d0ccd10Smrg	if test yes = "$installed"; then
7958c63293b5Smrg	  if test ! -f "$lt_sysroot$libdir/$linklib" && test -f "$abs_ladir/$linklib"; then
79599d0ccd10Smrg	    func_warning "library '$lib' was moved."
79609d0ccd10Smrg	    dir=$ladir
79619d0ccd10Smrg	    absdir=$abs_ladir
79629d0ccd10Smrg	    libdir=$abs_ladir
7963e169010aSmrg	  else
79649d0ccd10Smrg	    dir=$lt_sysroot$libdir
79659d0ccd10Smrg	    absdir=$lt_sysroot$libdir
7966e169010aSmrg	  fi
79679d0ccd10Smrg	  test yes = "$hardcode_automatic" && avoidtemprpath=yes
7968e169010aSmrg	else
7969e169010aSmrg	  if test ! -f "$ladir/$objdir/$linklib" && test -f "$abs_ladir/$linklib"; then
79709d0ccd10Smrg	    dir=$ladir
79719d0ccd10Smrg	    absdir=$abs_ladir
7972e169010aSmrg	    # Remove this search path later
7973c63293b5Smrg	    func_append notinst_path " $abs_ladir"
7974e169010aSmrg	  else
79759d0ccd10Smrg	    dir=$ladir/$objdir
79769d0ccd10Smrg	    absdir=$abs_ladir/$objdir
7977e169010aSmrg	    # Remove this search path later
7978c63293b5Smrg	    func_append notinst_path " $abs_ladir"
7979e169010aSmrg	  fi
7980e169010aSmrg	fi # $installed = yes
7981e169010aSmrg	func_stripname 'lib' '.la' "$laname"
7982e169010aSmrg	name=$func_stripname_result
7983e169010aSmrg
7984e169010aSmrg	# This library was specified with -dlpreopen.
79859d0ccd10Smrg	if test dlpreopen = "$pass"; then
79869d0ccd10Smrg	  if test -z "$libdir" && test prog = "$linkmode"; then
79879d0ccd10Smrg	    func_fatal_error "only libraries may -dlpreopen a convenience library: '$lib'"
7988e169010aSmrg	  fi
79899d0ccd10Smrg	  case $host in
7990c63293b5Smrg	    # special handling for platforms with PE-DLLs.
7991c63293b5Smrg	    *cygwin* | *mingw* | *cegcc* )
7992c63293b5Smrg	      # Linker will automatically link against shared library if both
7993c63293b5Smrg	      # static and shared are present.  Therefore, ensure we extract
7994c63293b5Smrg	      # symbols from the import library if a shared library is present
7995c63293b5Smrg	      # (otherwise, the dlopen module name will be incorrect).  We do
7996c63293b5Smrg	      # this by putting the import library name into $newdlprefiles.
7997c63293b5Smrg	      # We recover the dlopen module name by 'saving' the la file
7998c63293b5Smrg	      # name in a special purpose variable, and (later) extracting the
7999c63293b5Smrg	      # dlname from the la file.
8000c63293b5Smrg	      if test -n "$dlname"; then
8001c63293b5Smrg	        func_tr_sh "$dir/$linklib"
8002c63293b5Smrg	        eval "libfile_$func_tr_sh_result=\$abs_ladir/\$laname"
8003c63293b5Smrg	        func_append newdlprefiles " $dir/$linklib"
8004c63293b5Smrg	      else
8005c63293b5Smrg	        func_append newdlprefiles " $dir/$old_library"
8006c63293b5Smrg	        # Keep a list of preopened convenience libraries to check
8007c63293b5Smrg	        # that they are being used correctly in the link pass.
8008c63293b5Smrg	        test -z "$libdir" && \
8009c63293b5Smrg	          func_append dlpreconveniencelibs " $dir/$old_library"
8010c63293b5Smrg	      fi
8011c63293b5Smrg	    ;;
8012c63293b5Smrg	    * )
8013c63293b5Smrg	      # Prefer using a static library (so that no silly _DYNAMIC symbols
8014c63293b5Smrg	      # are required to link).
8015c63293b5Smrg	      if test -n "$old_library"; then
8016c63293b5Smrg	        func_append newdlprefiles " $dir/$old_library"
8017c63293b5Smrg	        # Keep a list of preopened convenience libraries to check
8018c63293b5Smrg	        # that they are being used correctly in the link pass.
8019c63293b5Smrg	        test -z "$libdir" && \
8020c63293b5Smrg	          func_append dlpreconveniencelibs " $dir/$old_library"
8021c63293b5Smrg	      # Otherwise, use the dlname, so that lt_dlopen finds it.
8022c63293b5Smrg	      elif test -n "$dlname"; then
8023c63293b5Smrg	        func_append newdlprefiles " $dir/$dlname"
8024c63293b5Smrg	      else
8025c63293b5Smrg	        func_append newdlprefiles " $dir/$linklib"
8026c63293b5Smrg	      fi
8027c63293b5Smrg	    ;;
8028c63293b5Smrg	  esac
8029e169010aSmrg	fi # $pass = dlpreopen
8030e169010aSmrg
8031e169010aSmrg	if test -z "$libdir"; then
8032e169010aSmrg	  # Link the convenience library
80339d0ccd10Smrg	  if test lib = "$linkmode"; then
8034e169010aSmrg	    deplibs="$dir/$old_library $deplibs"
80359d0ccd10Smrg	  elif test prog,link = "$linkmode,$pass"; then
8036e169010aSmrg	    compile_deplibs="$dir/$old_library $compile_deplibs"
8037e169010aSmrg	    finalize_deplibs="$dir/$old_library $finalize_deplibs"
8038e169010aSmrg	  else
8039e169010aSmrg	    deplibs="$lib $deplibs" # used for prog,scan pass
8040e169010aSmrg	  fi
8041e169010aSmrg	  continue
8042e169010aSmrg	fi
8043e169010aSmrg
8044e169010aSmrg
80459d0ccd10Smrg	if test prog = "$linkmode" && test link != "$pass"; then
8046c63293b5Smrg	  func_append newlib_search_path " $ladir"
8047e169010aSmrg	  deplibs="$lib $deplibs"
8048e169010aSmrg
80499d0ccd10Smrg	  linkalldeplibs=false
80509d0ccd10Smrg	  if test no != "$link_all_deplibs" || test -z "$library_names" ||
80519d0ccd10Smrg	     test no = "$build_libtool_libs"; then
80529d0ccd10Smrg	    linkalldeplibs=:
8053e169010aSmrg	  fi
8054e169010aSmrg
8055e169010aSmrg	  tmp_libs=
8056e169010aSmrg	  for deplib in $dependency_libs; do
8057e169010aSmrg	    case $deplib in
8058e169010aSmrg	    -L*) func_stripname '-L' '' "$deplib"
8059c63293b5Smrg	         func_resolve_sysroot "$func_stripname_result"
8060c63293b5Smrg	         func_append newlib_search_path " $func_resolve_sysroot_result"
8061e169010aSmrg		 ;;
8062e169010aSmrg	    esac
8063e169010aSmrg	    # Need to link against all dependency_libs?
80649d0ccd10Smrg	    if $linkalldeplibs; then
8065e169010aSmrg	      deplibs="$deplib $deplibs"
8066e169010aSmrg	    else
8067e169010aSmrg	      # Need to hardcode shared library paths
8068e169010aSmrg	      # or/and link against static libraries
8069e169010aSmrg	      newdependency_libs="$deplib $newdependency_libs"
8070e169010aSmrg	    fi
80719d0ccd10Smrg	    if $opt_preserve_dup_deps; then
8072e169010aSmrg	      case "$tmp_libs " in
8073c63293b5Smrg	      *" $deplib "*) func_append specialdeplibs " $deplib" ;;
8074e169010aSmrg	      esac
8075e169010aSmrg	    fi
8076c63293b5Smrg	    func_append tmp_libs " $deplib"
8077e169010aSmrg	  done # for deplib
8078e169010aSmrg	  continue
8079e169010aSmrg	fi # $linkmode = prog...
8080e169010aSmrg
80819d0ccd10Smrg	if test prog,link = "$linkmode,$pass"; then
8082e169010aSmrg	  if test -n "$library_names" &&
80839d0ccd10Smrg	     { { test no = "$prefer_static_libs" ||
80849d0ccd10Smrg	         test built,yes = "$prefer_static_libs,$installed"; } ||
8085e169010aSmrg	       test -z "$old_library"; }; then
8086e169010aSmrg	    # We need to hardcode the library path
80879d0ccd10Smrg	    if test -n "$shlibpath_var" && test -z "$avoidtemprpath"; then
8088e169010aSmrg	      # Make sure the rpath contains only unique directories.
80899d0ccd10Smrg	      case $temp_rpath: in
8090e169010aSmrg	      *"$absdir:"*) ;;
8091c63293b5Smrg	      *) func_append temp_rpath "$absdir:" ;;
8092e169010aSmrg	      esac
8093e169010aSmrg	    fi
8094e169010aSmrg
8095e169010aSmrg	    # Hardcode the library path.
8096e169010aSmrg	    # Skip directories that are in the system default run-time
8097e169010aSmrg	    # search path.
8098e169010aSmrg	    case " $sys_lib_dlsearch_path " in
8099e169010aSmrg	    *" $absdir "*) ;;
8100e169010aSmrg	    *)
8101e169010aSmrg	      case "$compile_rpath " in
8102e169010aSmrg	      *" $absdir "*) ;;
8103c63293b5Smrg	      *) func_append compile_rpath " $absdir" ;;
8104e169010aSmrg	      esac
8105e169010aSmrg	      ;;
8106e169010aSmrg	    esac
8107e169010aSmrg	    case " $sys_lib_dlsearch_path " in
8108e169010aSmrg	    *" $libdir "*) ;;
8109e169010aSmrg	    *)
8110e169010aSmrg	      case "$finalize_rpath " in
8111e169010aSmrg	      *" $libdir "*) ;;
8112c63293b5Smrg	      *) func_append finalize_rpath " $libdir" ;;
8113e169010aSmrg	      esac
8114e169010aSmrg	      ;;
8115e169010aSmrg	    esac
8116e169010aSmrg	  fi # $linkmode,$pass = prog,link...
8117e169010aSmrg
81189d0ccd10Smrg	  if $alldeplibs &&
81199d0ccd10Smrg	     { test pass_all = "$deplibs_check_method" ||
81209d0ccd10Smrg	       { test yes = "$build_libtool_libs" &&
8121e169010aSmrg		 test -n "$library_names"; }; }; then
8122e169010aSmrg	    # We only need to search for static libraries
8123e169010aSmrg	    continue
8124e169010aSmrg	  fi
8125e169010aSmrg	fi
8126e169010aSmrg
8127e169010aSmrg	link_static=no # Whether the deplib will be linked statically
8128e169010aSmrg	use_static_libs=$prefer_static_libs
81299d0ccd10Smrg	if test built = "$use_static_libs" && test yes = "$installed"; then
8130e169010aSmrg	  use_static_libs=no
8131e169010aSmrg	fi
8132e169010aSmrg	if test -n "$library_names" &&
81339d0ccd10Smrg	   { test no = "$use_static_libs" || test -z "$old_library"; }; then
8134e169010aSmrg	  case $host in
81359d0ccd10Smrg	  *cygwin* | *mingw* | *cegcc* | *os2*)
8136e169010aSmrg	      # No point in relinking DLLs because paths are not encoded
8137c63293b5Smrg	      func_append notinst_deplibs " $lib"
8138e169010aSmrg	      need_relink=no
8139e169010aSmrg	    ;;
8140e169010aSmrg	  *)
81419d0ccd10Smrg	    if test no = "$installed"; then
8142c63293b5Smrg	      func_append notinst_deplibs " $lib"
8143e169010aSmrg	      need_relink=yes
8144e169010aSmrg	    fi
8145e169010aSmrg	    ;;
8146e169010aSmrg	  esac
8147e169010aSmrg	  # This is a shared library
8148e169010aSmrg
8149e169010aSmrg	  # Warn about portability, can't link against -module's on some
8150e169010aSmrg	  # systems (darwin).  Don't bleat about dlopened modules though!
81519d0ccd10Smrg	  dlopenmodule=
8152e169010aSmrg	  for dlpremoduletest in $dlprefiles; do
8153e169010aSmrg	    if test "X$dlpremoduletest" = "X$lib"; then
81549d0ccd10Smrg	      dlopenmodule=$dlpremoduletest
8155e169010aSmrg	      break
8156e169010aSmrg	    fi
8157e169010aSmrg	  done
81589d0ccd10Smrg	  if test -z "$dlopenmodule" && test yes = "$shouldnotlink" && test link = "$pass"; then
8159e8ead290Smrg	    echo
81609d0ccd10Smrg	    if test prog = "$linkmode"; then
8161e169010aSmrg	      $ECHO "*** Warning: Linking the executable $output against the loadable module"
8162e169010aSmrg	    else
8163e169010aSmrg	      $ECHO "*** Warning: Linking the shared library $output against the loadable module"
8164e169010aSmrg	    fi
8165e169010aSmrg	    $ECHO "*** $linklib is not portable!"
8166e169010aSmrg	  fi
81679d0ccd10Smrg	  if test lib = "$linkmode" &&
81689d0ccd10Smrg	     test yes = "$hardcode_into_libs"; then
8169e169010aSmrg	    # Hardcode the library path.
8170e169010aSmrg	    # Skip directories that are in the system default run-time
8171e169010aSmrg	    # search path.
8172e169010aSmrg	    case " $sys_lib_dlsearch_path " in
8173e169010aSmrg	    *" $absdir "*) ;;
8174e169010aSmrg	    *)
8175e169010aSmrg	      case "$compile_rpath " in
8176e169010aSmrg	      *" $absdir "*) ;;
8177c63293b5Smrg	      *) func_append compile_rpath " $absdir" ;;
8178e169010aSmrg	      esac
8179e169010aSmrg	      ;;
8180e169010aSmrg	    esac
8181e169010aSmrg	    case " $sys_lib_dlsearch_path " in
8182e169010aSmrg	    *" $libdir "*) ;;
8183e169010aSmrg	    *)
8184e169010aSmrg	      case "$finalize_rpath " in
8185e169010aSmrg	      *" $libdir "*) ;;
8186c63293b5Smrg	      *) func_append finalize_rpath " $libdir" ;;
8187e169010aSmrg	      esac
8188e169010aSmrg	      ;;
8189e169010aSmrg	    esac
8190e169010aSmrg	  fi
8191e169010aSmrg
8192e169010aSmrg	  if test -n "$old_archive_from_expsyms_cmds"; then
8193e169010aSmrg	    # figure out the soname
8194e169010aSmrg	    set dummy $library_names
8195e169010aSmrg	    shift
81969d0ccd10Smrg	    realname=$1
8197e169010aSmrg	    shift
8198e169010aSmrg	    libname=`eval "\\$ECHO \"$libname_spec\""`
8199e169010aSmrg	    # use dlname if we got it. it's perfectly good, no?
8200e169010aSmrg	    if test -n "$dlname"; then
82019d0ccd10Smrg	      soname=$dlname
8202e169010aSmrg	    elif test -n "$soname_spec"; then
8203e169010aSmrg	      # bleh windows
8204e169010aSmrg	      case $host in
82059d0ccd10Smrg	      *cygwin* | mingw* | *cegcc* | *os2*)
8206e169010aSmrg	        func_arith $current - $age
8207e169010aSmrg		major=$func_arith_result
82089d0ccd10Smrg		versuffix=-$major
8209e169010aSmrg		;;
8210e169010aSmrg	      esac
8211e169010aSmrg	      eval soname=\"$soname_spec\"
8212e169010aSmrg	    else
82139d0ccd10Smrg	      soname=$realname
8214e169010aSmrg	    fi
8215e169010aSmrg
8216e169010aSmrg	    # Make a new name for the extract_expsyms_cmds to use
82179d0ccd10Smrg	    soroot=$soname
8218e169010aSmrg	    func_basename "$soroot"
82199d0ccd10Smrg	    soname=$func_basename_result
8220e169010aSmrg	    func_stripname 'lib' '.dll' "$soname"
8221e169010aSmrg	    newlib=libimp-$func_stripname_result.a
8222e169010aSmrg
8223e169010aSmrg	    # If the library has no export list, then create one now
8224e169010aSmrg	    if test -f "$output_objdir/$soname-def"; then :
8225e169010aSmrg	    else
82269d0ccd10Smrg	      func_verbose "extracting exported symbol list from '$soname'"
8227e169010aSmrg	      func_execute_cmds "$extract_expsyms_cmds" 'exit $?'
8228e169010aSmrg	    fi
8229e169010aSmrg
8230e169010aSmrg	    # Create $newlib
8231e169010aSmrg	    if test -f "$output_objdir/$newlib"; then :; else
82329d0ccd10Smrg	      func_verbose "generating import library for '$soname'"
8233e169010aSmrg	      func_execute_cmds "$old_archive_from_expsyms_cmds" 'exit $?'
8234e169010aSmrg	    fi
8235e169010aSmrg	    # make sure the library variables are pointing to the new library
8236e169010aSmrg	    dir=$output_objdir
8237e169010aSmrg	    linklib=$newlib
8238e169010aSmrg	  fi # test -n "$old_archive_from_expsyms_cmds"
8239e169010aSmrg
82409d0ccd10Smrg	  if test prog = "$linkmode" || test relink != "$opt_mode"; then
8241e169010aSmrg	    add_shlibpath=
8242e169010aSmrg	    add_dir=
8243e169010aSmrg	    add=
8244e169010aSmrg	    lib_linked=yes
8245e169010aSmrg	    case $hardcode_action in
8246e169010aSmrg	    immediate | unsupported)
82479d0ccd10Smrg	      if test no = "$hardcode_direct"; then
82489d0ccd10Smrg		add=$dir/$linklib
8249e169010aSmrg		case $host in
82509d0ccd10Smrg		  *-*-sco3.2v5.0.[024]*) add_dir=-L$dir ;;
82519d0ccd10Smrg		  *-*-sysv4*uw2*) add_dir=-L$dir ;;
8252e169010aSmrg		  *-*-sysv5OpenUNIX* | *-*-sysv5UnixWare7.[01].[10]* | \
82539d0ccd10Smrg		    *-*-unixware7*) add_dir=-L$dir ;;
8254e169010aSmrg		  *-*-darwin* )
82559d0ccd10Smrg		    # if the lib is a (non-dlopened) module then we cannot
8256e169010aSmrg		    # link against it, someone is ignoring the earlier warnings
8257e169010aSmrg		    if /usr/bin/file -L $add 2> /dev/null |
82589d0ccd10Smrg			 $GREP ": [^:]* bundle" >/dev/null; then
8259e169010aSmrg		      if test "X$dlopenmodule" != "X$lib"; then
8260e169010aSmrg			$ECHO "*** Warning: lib $linklib is a module, not a shared library"
82619d0ccd10Smrg			if test -z "$old_library"; then
8262e8ead290Smrg			  echo
8263e8ead290Smrg			  echo "*** And there doesn't seem to be a static archive available"
8264e8ead290Smrg			  echo "*** The link will probably fail, sorry"
8265e169010aSmrg			else
82669d0ccd10Smrg			  add=$dir/$old_library
8267e169010aSmrg			fi
8268e169010aSmrg		      elif test -n "$old_library"; then
82699d0ccd10Smrg			add=$dir/$old_library
8270e169010aSmrg		      fi
8271e169010aSmrg		    fi
8272e169010aSmrg		esac
82739d0ccd10Smrg	      elif test no = "$hardcode_minus_L"; then
8274e169010aSmrg		case $host in
82759d0ccd10Smrg		*-*-sunos*) add_shlibpath=$dir ;;
8276e169010aSmrg		esac
82779d0ccd10Smrg		add_dir=-L$dir
82789d0ccd10Smrg		add=-l$name
82799d0ccd10Smrg	      elif test no = "$hardcode_shlibpath_var"; then
82809d0ccd10Smrg		add_shlibpath=$dir
82819d0ccd10Smrg		add=-l$name
8282e169010aSmrg	      else
8283e169010aSmrg		lib_linked=no
8284e169010aSmrg	      fi
8285e169010aSmrg	      ;;
8286e169010aSmrg	    relink)
82879d0ccd10Smrg	      if test yes = "$hardcode_direct" &&
82889d0ccd10Smrg	         test no = "$hardcode_direct_absolute"; then
82899d0ccd10Smrg		add=$dir/$linklib
82909d0ccd10Smrg	      elif test yes = "$hardcode_minus_L"; then
82919d0ccd10Smrg		add_dir=-L$absdir
8292e169010aSmrg		# Try looking first in the location we're being installed to.
8293e169010aSmrg		if test -n "$inst_prefix_dir"; then
8294e169010aSmrg		  case $libdir in
8295e169010aSmrg		    [\\/]*)
8296c63293b5Smrg		      func_append add_dir " -L$inst_prefix_dir$libdir"
8297e169010aSmrg		      ;;
8298e169010aSmrg		  esac
8299e169010aSmrg		fi
83009d0ccd10Smrg		add=-l$name
83019d0ccd10Smrg	      elif test yes = "$hardcode_shlibpath_var"; then
83029d0ccd10Smrg		add_shlibpath=$dir
83039d0ccd10Smrg		add=-l$name
8304e169010aSmrg	      else
8305e169010aSmrg		lib_linked=no
8306e169010aSmrg	      fi
8307e169010aSmrg	      ;;
8308e169010aSmrg	    *) lib_linked=no ;;
8309e169010aSmrg	    esac
8310e169010aSmrg
83119d0ccd10Smrg	    if test yes != "$lib_linked"; then
8312e169010aSmrg	      func_fatal_configuration "unsupported hardcode properties"
8313e169010aSmrg	    fi
8314e169010aSmrg
8315e169010aSmrg	    if test -n "$add_shlibpath"; then
8316e169010aSmrg	      case :$compile_shlibpath: in
8317e169010aSmrg	      *":$add_shlibpath:"*) ;;
8318c63293b5Smrg	      *) func_append compile_shlibpath "$add_shlibpath:" ;;
8319e169010aSmrg	      esac
8320e169010aSmrg	    fi
83219d0ccd10Smrg	    if test prog = "$linkmode"; then
8322e169010aSmrg	      test -n "$add_dir" && compile_deplibs="$add_dir $compile_deplibs"
8323e169010aSmrg	      test -n "$add" && compile_deplibs="$add $compile_deplibs"
8324e169010aSmrg	    else
8325e169010aSmrg	      test -n "$add_dir" && deplibs="$add_dir $deplibs"
8326e169010aSmrg	      test -n "$add" && deplibs="$add $deplibs"
83279d0ccd10Smrg	      if test yes != "$hardcode_direct" &&
83289d0ccd10Smrg		 test yes != "$hardcode_minus_L" &&
83299d0ccd10Smrg		 test yes = "$hardcode_shlibpath_var"; then
8330e169010aSmrg		case :$finalize_shlibpath: in
8331e169010aSmrg		*":$libdir:"*) ;;
8332c63293b5Smrg		*) func_append finalize_shlibpath "$libdir:" ;;
8333e169010aSmrg		esac
8334e169010aSmrg	      fi
8335e169010aSmrg	    fi
8336e169010aSmrg	  fi
8337e169010aSmrg
83389d0ccd10Smrg	  if test prog = "$linkmode" || test relink = "$opt_mode"; then
8339e169010aSmrg	    add_shlibpath=
8340e169010aSmrg	    add_dir=
8341e169010aSmrg	    add=
8342e169010aSmrg	    # Finalize command for both is simple: just hardcode it.
83439d0ccd10Smrg	    if test yes = "$hardcode_direct" &&
83449d0ccd10Smrg	       test no = "$hardcode_direct_absolute"; then
83459d0ccd10Smrg	      add=$libdir/$linklib
83469d0ccd10Smrg	    elif test yes = "$hardcode_minus_L"; then
83479d0ccd10Smrg	      add_dir=-L$libdir
83489d0ccd10Smrg	      add=-l$name
83499d0ccd10Smrg	    elif test yes = "$hardcode_shlibpath_var"; then
8350e169010aSmrg	      case :$finalize_shlibpath: in
8351e169010aSmrg	      *":$libdir:"*) ;;
8352c63293b5Smrg	      *) func_append finalize_shlibpath "$libdir:" ;;
8353e169010aSmrg	      esac
83549d0ccd10Smrg	      add=-l$name
83559d0ccd10Smrg	    elif test yes = "$hardcode_automatic"; then
8356e169010aSmrg	      if test -n "$inst_prefix_dir" &&
83579d0ccd10Smrg		 test -f "$inst_prefix_dir$libdir/$linklib"; then
83589d0ccd10Smrg		add=$inst_prefix_dir$libdir/$linklib
8359e169010aSmrg	      else
83609d0ccd10Smrg		add=$libdir/$linklib
8361e169010aSmrg	      fi
8362e169010aSmrg	    else
8363e169010aSmrg	      # We cannot seem to hardcode it, guess we'll fake it.
83649d0ccd10Smrg	      add_dir=-L$libdir
8365e169010aSmrg	      # Try looking first in the location we're being installed to.
8366e169010aSmrg	      if test -n "$inst_prefix_dir"; then
8367e169010aSmrg		case $libdir in
8368e169010aSmrg		  [\\/]*)
8369c63293b5Smrg		    func_append add_dir " -L$inst_prefix_dir$libdir"
8370e169010aSmrg		    ;;
8371e169010aSmrg		esac
8372e169010aSmrg	      fi
83739d0ccd10Smrg	      add=-l$name
8374e169010aSmrg	    fi
8375e169010aSmrg
83769d0ccd10Smrg	    if test prog = "$linkmode"; then
8377e169010aSmrg	      test -n "$add_dir" && finalize_deplibs="$add_dir $finalize_deplibs"
8378e169010aSmrg	      test -n "$add" && finalize_deplibs="$add $finalize_deplibs"
8379e169010aSmrg	    else
8380e169010aSmrg	      test -n "$add_dir" && deplibs="$add_dir $deplibs"
8381e169010aSmrg	      test -n "$add" && deplibs="$add $deplibs"
8382e169010aSmrg	    fi
8383e169010aSmrg	  fi
83849d0ccd10Smrg	elif test prog = "$linkmode"; then
8385e169010aSmrg	  # Here we assume that one of hardcode_direct or hardcode_minus_L
8386e169010aSmrg	  # is not unsupported.  This is valid on all known static and
8387e169010aSmrg	  # shared platforms.
83889d0ccd10Smrg	  if test unsupported != "$hardcode_direct"; then
83899d0ccd10Smrg	    test -n "$old_library" && linklib=$old_library
8390e169010aSmrg	    compile_deplibs="$dir/$linklib $compile_deplibs"
8391e169010aSmrg	    finalize_deplibs="$dir/$linklib $finalize_deplibs"
8392e169010aSmrg	  else
8393e169010aSmrg	    compile_deplibs="-l$name -L$dir $compile_deplibs"
8394e169010aSmrg	    finalize_deplibs="-l$name -L$dir $finalize_deplibs"
8395e169010aSmrg	  fi
83969d0ccd10Smrg	elif test yes = "$build_libtool_libs"; then
8397e169010aSmrg	  # Not a shared library
83989d0ccd10Smrg	  if test pass_all != "$deplibs_check_method"; then
8399e169010aSmrg	    # We're trying link a shared library against a static one
8400e169010aSmrg	    # but the system doesn't support it.
8401e169010aSmrg
8402e169010aSmrg	    # Just print a warning and add the library to dependency_libs so
8403e169010aSmrg	    # that the program can be linked against the static library.
8404e8ead290Smrg	    echo
84059d0ccd10Smrg	    $ECHO "*** Warning: This system cannot link to static lib archive $lib."
8406e8ead290Smrg	    echo "*** I have the capability to make that library automatically link in when"
8407e8ead290Smrg	    echo "*** you link to this library.  But I can only do this if you have a"
8408e8ead290Smrg	    echo "*** shared version of the library, which you do not appear to have."
84099d0ccd10Smrg	    if test yes = "$module"; then
8410e8ead290Smrg	      echo "*** But as you try to build a module library, libtool will still create "
8411e8ead290Smrg	      echo "*** a static module, that should work as long as the dlopening application"
8412e8ead290Smrg	      echo "*** is linked with the -dlopen flag to resolve symbols at runtime."
8413e169010aSmrg	      if test -z "$global_symbol_pipe"; then
8414e8ead290Smrg		echo
8415e8ead290Smrg		echo "*** However, this would only work if libtool was able to extract symbol"
84169d0ccd10Smrg		echo "*** lists from a program, using 'nm' or equivalent, but libtool could"
8417e8ead290Smrg		echo "*** not find such a program.  So, this module is probably useless."
84189d0ccd10Smrg		echo "*** 'nm' from GNU binutils and a full rebuild may help."
8419e169010aSmrg	      fi
84209d0ccd10Smrg	      if test no = "$build_old_libs"; then
8421e169010aSmrg		build_libtool_libs=module
8422e169010aSmrg		build_old_libs=yes
8423e169010aSmrg	      else
8424e169010aSmrg		build_libtool_libs=no
8425e169010aSmrg	      fi
8426e169010aSmrg	    fi
8427e169010aSmrg	  else
8428e169010aSmrg	    deplibs="$dir/$old_library $deplibs"
8429e169010aSmrg	    link_static=yes
8430e169010aSmrg	  fi
8431e169010aSmrg	fi # link shared/static library?
8432e169010aSmrg
84339d0ccd10Smrg	if test lib = "$linkmode"; then
8434e169010aSmrg	  if test -n "$dependency_libs" &&
84359d0ccd10Smrg	     { test yes != "$hardcode_into_libs" ||
84369d0ccd10Smrg	       test yes = "$build_old_libs" ||
84379d0ccd10Smrg	       test yes = "$link_static"; }; then
8438e169010aSmrg	    # Extract -R from dependency_libs
8439e169010aSmrg	    temp_deplibs=
8440e169010aSmrg	    for libdir in $dependency_libs; do
8441e169010aSmrg	      case $libdir in
8442e169010aSmrg	      -R*) func_stripname '-R' '' "$libdir"
8443e169010aSmrg	           temp_xrpath=$func_stripname_result
8444e169010aSmrg		   case " $xrpath " in
8445e169010aSmrg		   *" $temp_xrpath "*) ;;
8446c63293b5Smrg		   *) func_append xrpath " $temp_xrpath";;
8447e169010aSmrg		   esac;;
8448c63293b5Smrg	      *) func_append temp_deplibs " $libdir";;
8449e169010aSmrg	      esac
8450e169010aSmrg	    done
84519d0ccd10Smrg	    dependency_libs=$temp_deplibs
8452e169010aSmrg	  fi
8453e169010aSmrg
8454c63293b5Smrg	  func_append newlib_search_path " $absdir"
8455e169010aSmrg	  # Link against this library
84569d0ccd10Smrg	  test no = "$link_static" && newdependency_libs="$abs_ladir/$laname $newdependency_libs"
8457e169010aSmrg	  # ... and its dependency_libs
8458e169010aSmrg	  tmp_libs=
8459e169010aSmrg	  for deplib in $dependency_libs; do
8460e169010aSmrg	    newdependency_libs="$deplib $newdependency_libs"
8461c63293b5Smrg	    case $deplib in
8462c63293b5Smrg              -L*) func_stripname '-L' '' "$deplib"
8463c63293b5Smrg                   func_resolve_sysroot "$func_stripname_result";;
8464c63293b5Smrg              *) func_resolve_sysroot "$deplib" ;;
8465c63293b5Smrg            esac
84669d0ccd10Smrg	    if $opt_preserve_dup_deps; then
8467e169010aSmrg	      case "$tmp_libs " in
8468c63293b5Smrg	      *" $func_resolve_sysroot_result "*)
8469c63293b5Smrg                func_append specialdeplibs " $func_resolve_sysroot_result" ;;
8470e169010aSmrg	      esac
8471e169010aSmrg	    fi
8472c63293b5Smrg	    func_append tmp_libs " $func_resolve_sysroot_result"
8473e169010aSmrg	  done
8474e169010aSmrg
84759d0ccd10Smrg	  if test no != "$link_all_deplibs"; then
8476e169010aSmrg	    # Add the search paths of all dependency libraries
8477e169010aSmrg	    for deplib in $dependency_libs; do
8478e8ead290Smrg	      path=
8479e169010aSmrg	      case $deplib in
84809d0ccd10Smrg	      -L*) path=$deplib ;;
8481e169010aSmrg	      *.la)
8482c63293b5Smrg	        func_resolve_sysroot "$deplib"
8483c63293b5Smrg	        deplib=$func_resolve_sysroot_result
8484e169010aSmrg	        func_dirname "$deplib" "" "."
8485c63293b5Smrg		dir=$func_dirname_result
8486e169010aSmrg		# We need an absolute path.
8487e169010aSmrg		case $dir in
84889d0ccd10Smrg		[\\/]* | [A-Za-z]:[\\/]*) absdir=$dir ;;
8489e169010aSmrg		*)
8490e169010aSmrg		  absdir=`cd "$dir" && pwd`
8491e169010aSmrg		  if test -z "$absdir"; then
84929d0ccd10Smrg		    func_warning "cannot determine absolute directory name of '$dir'"
84939d0ccd10Smrg		    absdir=$dir
8494e169010aSmrg		  fi
8495e169010aSmrg		  ;;
8496e169010aSmrg		esac
8497e169010aSmrg		if $GREP "^installed=no" $deplib > /dev/null; then
8498e169010aSmrg		case $host in
8499e169010aSmrg		*-*-darwin*)
8500e169010aSmrg		  depdepl=
85019d0ccd10Smrg		  eval deplibrary_names=`$SED -n -e 's/^library_names=\(.*\)$/\1/p' $deplib`
85029d0ccd10Smrg		  if test -n "$deplibrary_names"; then
85039d0ccd10Smrg		    for tmp in $deplibrary_names; do
8504e169010aSmrg		      depdepl=$tmp
8505e169010aSmrg		    done
85069d0ccd10Smrg		    if test -f "$absdir/$objdir/$depdepl"; then
85079d0ccd10Smrg		      depdepl=$absdir/$objdir/$depdepl
85089d0ccd10Smrg		      darwin_install_name=`$OTOOL -L $depdepl | awk '{if (NR == 2) {print $1;exit}}'`
8509e169010aSmrg                      if test -z "$darwin_install_name"; then
85109d0ccd10Smrg                          darwin_install_name=`$OTOOL64 -L $depdepl  | awk '{if (NR == 2) {print $1;exit}}'`
8511e169010aSmrg                      fi
85129d0ccd10Smrg		      func_append compiler_flags " $wl-dylib_file $wl$darwin_install_name:$depdepl"
85139d0ccd10Smrg		      func_append linker_flags " -dylib_file $darwin_install_name:$depdepl"
8514e169010aSmrg		      path=
8515e169010aSmrg		    fi
8516e169010aSmrg		  fi
8517e169010aSmrg		  ;;
8518e169010aSmrg		*)
85199d0ccd10Smrg		  path=-L$absdir/$objdir
8520e169010aSmrg		  ;;
8521e169010aSmrg		esac
8522e169010aSmrg		else
85239d0ccd10Smrg		  eval libdir=`$SED -n -e 's/^libdir=\(.*\)$/\1/p' $deplib`
8524e169010aSmrg		  test -z "$libdir" && \
85259d0ccd10Smrg		    func_fatal_error "'$deplib' is not a valid libtool archive"
8526e169010aSmrg		  test "$absdir" != "$libdir" && \
85279d0ccd10Smrg		    func_warning "'$deplib' seems to be moved"
8528e169010aSmrg
85299d0ccd10Smrg		  path=-L$absdir
8530e169010aSmrg		fi
8531e169010aSmrg		;;
8532e169010aSmrg	      esac
8533e169010aSmrg	      case " $deplibs " in
8534e169010aSmrg	      *" $path "*) ;;
8535e169010aSmrg	      *) deplibs="$path $deplibs" ;;
8536e169010aSmrg	      esac
8537e169010aSmrg	    done
8538e169010aSmrg	  fi # link_all_deplibs != no
8539e169010aSmrg	fi # linkmode = lib
8540e169010aSmrg      done # for deplib in $libs
85419d0ccd10Smrg      if test link = "$pass"; then
85429d0ccd10Smrg	if test prog = "$linkmode"; then
8543e169010aSmrg	  compile_deplibs="$new_inherited_linker_flags $compile_deplibs"
8544e169010aSmrg	  finalize_deplibs="$new_inherited_linker_flags $finalize_deplibs"
8545e169010aSmrg	else
8546e8ead290Smrg	  compiler_flags="$compiler_flags "`$ECHO " $new_inherited_linker_flags" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'`
8547e169010aSmrg	fi
8548e169010aSmrg      fi
85499d0ccd10Smrg      dependency_libs=$newdependency_libs
85509d0ccd10Smrg      if test dlpreopen = "$pass"; then
8551e169010aSmrg	# Link the dlpreopened libraries before other libraries
8552e169010aSmrg	for deplib in $save_deplibs; do
8553e169010aSmrg	  deplibs="$deplib $deplibs"
8554e169010aSmrg	done
8555e169010aSmrg      fi
85569d0ccd10Smrg      if test dlopen != "$pass"; then
85579d0ccd10Smrg	test conv = "$pass" || {
8558e169010aSmrg	  # Make sure lib_search_path contains only unique directories.
8559e169010aSmrg	  lib_search_path=
8560e169010aSmrg	  for dir in $newlib_search_path; do
8561e169010aSmrg	    case "$lib_search_path " in
8562e169010aSmrg	    *" $dir "*) ;;
8563c63293b5Smrg	    *) func_append lib_search_path " $dir" ;;
8564e169010aSmrg	    esac
8565e169010aSmrg	  done
8566e169010aSmrg	  newlib_search_path=
85679d0ccd10Smrg	}
8568e169010aSmrg
85699d0ccd10Smrg	if test prog,link = "$linkmode,$pass"; then
8570e169010aSmrg	  vars="compile_deplibs finalize_deplibs"
85719d0ccd10Smrg	else
85729d0ccd10Smrg	  vars=deplibs
8573e169010aSmrg	fi
8574e169010aSmrg	for var in $vars dependency_libs; do
8575e169010aSmrg	  # Add libraries to $var in reverse order
8576e169010aSmrg	  eval tmp_libs=\"\$$var\"
8577e169010aSmrg	  new_libs=
8578e169010aSmrg	  for deplib in $tmp_libs; do
8579e169010aSmrg	    # FIXME: Pedantically, this is the right thing to do, so
8580e169010aSmrg	    #        that some nasty dependency loop isn't accidentally
8581e169010aSmrg	    #        broken:
8582e169010aSmrg	    #new_libs="$deplib $new_libs"
8583e169010aSmrg	    # Pragmatically, this seems to cause very few problems in
8584e169010aSmrg	    # practice:
8585e169010aSmrg	    case $deplib in
8586e169010aSmrg	    -L*) new_libs="$deplib $new_libs" ;;
8587e169010aSmrg	    -R*) ;;
8588e169010aSmrg	    *)
8589e169010aSmrg	      # And here is the reason: when a library appears more
8590e169010aSmrg	      # than once as an explicit dependence of a library, or
8591e169010aSmrg	      # is implicitly linked in more than once by the
8592e169010aSmrg	      # compiler, it is considered special, and multiple
8593e169010aSmrg	      # occurrences thereof are not removed.  Compare this
8594e169010aSmrg	      # with having the same library being listed as a
8595e169010aSmrg	      # dependency of multiple other libraries: in this case,
8596e169010aSmrg	      # we know (pedantically, we assume) the library does not
8597e169010aSmrg	      # need to be listed more than once, so we keep only the
8598e169010aSmrg	      # last copy.  This is not always right, but it is rare
8599e169010aSmrg	      # enough that we require users that really mean to play
8600e169010aSmrg	      # such unportable linking tricks to link the library
8601e169010aSmrg	      # using -Wl,-lname, so that libtool does not consider it
8602e169010aSmrg	      # for duplicate removal.
8603e169010aSmrg	      case " $specialdeplibs " in
8604e169010aSmrg	      *" $deplib "*) new_libs="$deplib $new_libs" ;;
8605e169010aSmrg	      *)
8606e169010aSmrg		case " $new_libs " in
8607e169010aSmrg		*" $deplib "*) ;;
8608e169010aSmrg		*) new_libs="$deplib $new_libs" ;;
8609e169010aSmrg		esac
8610e169010aSmrg		;;
8611e169010aSmrg	      esac
8612e169010aSmrg	      ;;
8613e169010aSmrg	    esac
8614e169010aSmrg	  done
8615e169010aSmrg	  tmp_libs=
8616e169010aSmrg	  for deplib in $new_libs; do
8617e169010aSmrg	    case $deplib in
8618e169010aSmrg	    -L*)
8619e169010aSmrg	      case " $tmp_libs " in
8620e169010aSmrg	      *" $deplib "*) ;;
8621c63293b5Smrg	      *) func_append tmp_libs " $deplib" ;;
8622e169010aSmrg	      esac
8623e169010aSmrg	      ;;
8624c63293b5Smrg	    *) func_append tmp_libs " $deplib" ;;
8625e169010aSmrg	    esac
8626e169010aSmrg	  done
8627e169010aSmrg	  eval $var=\"$tmp_libs\"
8628e169010aSmrg	done # for var
8629e169010aSmrg      fi
86309d0ccd10Smrg
86319d0ccd10Smrg      # Add Sun CC postdeps if required:
86329d0ccd10Smrg      test CXX = "$tagname" && {
86339d0ccd10Smrg        case $host_os in
86349d0ccd10Smrg        linux*)
86359d0ccd10Smrg          case `$CC -V 2>&1 | sed 5q` in
86369d0ccd10Smrg          *Sun\ C*) # Sun C++ 5.9
86379d0ccd10Smrg            func_suncc_cstd_abi
86389d0ccd10Smrg
86399d0ccd10Smrg            if test no != "$suncc_use_cstd_abi"; then
86409d0ccd10Smrg              func_append postdeps ' -library=Cstd -library=Crun'
86419d0ccd10Smrg            fi
86429d0ccd10Smrg            ;;
86439d0ccd10Smrg          esac
86449d0ccd10Smrg          ;;
86459d0ccd10Smrg
86469d0ccd10Smrg        solaris*)
86479d0ccd10Smrg          func_cc_basename "$CC"
86489d0ccd10Smrg          case $func_cc_basename_result in
86499d0ccd10Smrg          CC* | sunCC*)
86509d0ccd10Smrg            func_suncc_cstd_abi
86519d0ccd10Smrg
86529d0ccd10Smrg            if test no != "$suncc_use_cstd_abi"; then
86539d0ccd10Smrg              func_append postdeps ' -library=Cstd -library=Crun'
86549d0ccd10Smrg            fi
86559d0ccd10Smrg            ;;
86569d0ccd10Smrg          esac
86579d0ccd10Smrg          ;;
86589d0ccd10Smrg        esac
86599d0ccd10Smrg      }
86609d0ccd10Smrg
8661e169010aSmrg      # Last step: remove runtime libs from dependency_libs
8662e169010aSmrg      # (they stay in deplibs)
8663e169010aSmrg      tmp_libs=
86649d0ccd10Smrg      for i in $dependency_libs; do
8665e169010aSmrg	case " $predeps $postdeps $compiler_lib_search_path " in
8666e169010aSmrg	*" $i "*)
86679d0ccd10Smrg	  i=
8668e169010aSmrg	  ;;
8669e169010aSmrg	esac
86709d0ccd10Smrg	if test -n "$i"; then
8671c63293b5Smrg	  func_append tmp_libs " $i"
8672e169010aSmrg	fi
8673e169010aSmrg      done
8674e169010aSmrg      dependency_libs=$tmp_libs
8675e169010aSmrg    done # for pass
86769d0ccd10Smrg    if test prog = "$linkmode"; then
86779d0ccd10Smrg      dlfiles=$newdlfiles
8678e169010aSmrg    fi
86799d0ccd10Smrg    if test prog = "$linkmode" || test lib = "$linkmode"; then
86809d0ccd10Smrg      dlprefiles=$newdlprefiles
8681e169010aSmrg    fi
8682e169010aSmrg
8683e169010aSmrg    case $linkmode in
8684e169010aSmrg    oldlib)
86859d0ccd10Smrg      if test -n "$dlfiles$dlprefiles" || test no != "$dlself"; then
86869d0ccd10Smrg	func_warning "'-dlopen' is ignored for archives"
8687e169010aSmrg      fi
8688e169010aSmrg
8689e169010aSmrg      case " $deplibs" in
8690e169010aSmrg      *\ -l* | *\ -L*)
86919d0ccd10Smrg	func_warning "'-l' and '-L' are ignored for archives" ;;
8692e169010aSmrg      esac
8693e169010aSmrg
8694e169010aSmrg      test -n "$rpath" && \
86959d0ccd10Smrg	func_warning "'-rpath' is ignored for archives"
8696e169010aSmrg
8697e169010aSmrg      test -n "$xrpath" && \
86989d0ccd10Smrg	func_warning "'-R' is ignored for archives"
8699e169010aSmrg
8700e169010aSmrg      test -n "$vinfo" && \
87019d0ccd10Smrg	func_warning "'-version-info/-version-number' is ignored for archives"
8702e169010aSmrg
8703e169010aSmrg      test -n "$release" && \
87049d0ccd10Smrg	func_warning "'-release' is ignored for archives"
8705e169010aSmrg
8706e169010aSmrg      test -n "$export_symbols$export_symbols_regex" && \
87079d0ccd10Smrg	func_warning "'-export-symbols' is ignored for archives"
8708e169010aSmrg
8709e169010aSmrg      # Now set the variables for building old libraries.
8710e169010aSmrg      build_libtool_libs=no
87119d0ccd10Smrg      oldlibs=$output
8712c63293b5Smrg      func_append objs "$old_deplibs"
8713e169010aSmrg      ;;
8714e169010aSmrg
8715e169010aSmrg    lib)
87169d0ccd10Smrg      # Make sure we only generate libraries of the form 'libNAME.la'.
8717e169010aSmrg      case $outputname in
8718e169010aSmrg      lib*)
8719e169010aSmrg	func_stripname 'lib' '.la' "$outputname"
8720e169010aSmrg	name=$func_stripname_result
8721e169010aSmrg	eval shared_ext=\"$shrext_cmds\"
8722e169010aSmrg	eval libname=\"$libname_spec\"
8723e169010aSmrg	;;
8724e169010aSmrg      *)
87259d0ccd10Smrg	test no = "$module" \
87269d0ccd10Smrg	  && func_fatal_help "libtool library '$output' must begin with 'lib'"
8727e169010aSmrg
87289d0ccd10Smrg	if test no != "$need_lib_prefix"; then
8729e169010aSmrg	  # Add the "lib" prefix for modules if required
8730e169010aSmrg	  func_stripname '' '.la' "$outputname"
8731e169010aSmrg	  name=$func_stripname_result
8732e169010aSmrg	  eval shared_ext=\"$shrext_cmds\"
8733e169010aSmrg	  eval libname=\"$libname_spec\"
8734e169010aSmrg	else
8735e169010aSmrg	  func_stripname '' '.la' "$outputname"
8736e169010aSmrg	  libname=$func_stripname_result
8737e169010aSmrg	fi
8738e169010aSmrg	;;
8739e169010aSmrg      esac
8740e169010aSmrg
8741e169010aSmrg      if test -n "$objs"; then
87429d0ccd10Smrg	if test pass_all != "$deplibs_check_method"; then
87439d0ccd10Smrg	  func_fatal_error "cannot build libtool library '$output' from non-libtool objects on this host:$objs"
8744e169010aSmrg	else
8745e8ead290Smrg	  echo
8746e169010aSmrg	  $ECHO "*** Warning: Linking the shared library $output against the non-libtool"
8747e169010aSmrg	  $ECHO "*** objects $objs is not portable!"
8748c63293b5Smrg	  func_append libobjs " $objs"
8749e169010aSmrg	fi
8750e169010aSmrg      fi
8751e169010aSmrg
87529d0ccd10Smrg      test no = "$dlself" \
87539d0ccd10Smrg	|| func_warning "'-dlopen self' is ignored for libtool libraries"
8754e169010aSmrg
8755e169010aSmrg      set dummy $rpath
8756e169010aSmrg      shift
87579d0ccd10Smrg      test 1 -lt "$#" \
87589d0ccd10Smrg	&& func_warning "ignoring multiple '-rpath's for a libtool library"
8759e169010aSmrg
87609d0ccd10Smrg      install_libdir=$1
8761e169010aSmrg
8762e169010aSmrg      oldlibs=
8763e169010aSmrg      if test -z "$rpath"; then
87649d0ccd10Smrg	if test yes = "$build_libtool_libs"; then
8765e169010aSmrg	  # Building a libtool convenience library.
87669d0ccd10Smrg	  # Some compilers have problems with a '.al' extension so
8767e169010aSmrg	  # convenience libraries should have the same extension an
8768e169010aSmrg	  # archive normally would.
8769e169010aSmrg	  oldlibs="$output_objdir/$libname.$libext $oldlibs"
8770e169010aSmrg	  build_libtool_libs=convenience
8771e169010aSmrg	  build_old_libs=yes
8772e169010aSmrg	fi
8773e169010aSmrg
8774e169010aSmrg	test -n "$vinfo" && \
87759d0ccd10Smrg	  func_warning "'-version-info/-version-number' is ignored for convenience libraries"
8776e169010aSmrg
8777e169010aSmrg	test -n "$release" && \
87789d0ccd10Smrg	  func_warning "'-release' is ignored for convenience libraries"
8779e169010aSmrg      else
8780e169010aSmrg
8781e169010aSmrg	# Parse the version information argument.
87829d0ccd10Smrg	save_ifs=$IFS; IFS=:
8783e169010aSmrg	set dummy $vinfo 0 0 0
8784e169010aSmrg	shift
87859d0ccd10Smrg	IFS=$save_ifs
8786e169010aSmrg
8787e169010aSmrg	test -n "$7" && \
87889d0ccd10Smrg	  func_fatal_help "too many parameters to '-version-info'"
8789e169010aSmrg
8790e169010aSmrg	# convert absolute version numbers to libtool ages
8791e169010aSmrg	# this retains compatibility with .la files and attempts
8792e169010aSmrg	# to make the code below a bit more comprehensible
8793e169010aSmrg
8794e169010aSmrg	case $vinfo_number in
8795e169010aSmrg	yes)
87969d0ccd10Smrg	  number_major=$1
87979d0ccd10Smrg	  number_minor=$2
87989d0ccd10Smrg	  number_revision=$3
8799e169010aSmrg	  #
8800e169010aSmrg	  # There are really only two kinds -- those that
8801e169010aSmrg	  # use the current revision as the major version
8802e169010aSmrg	  # and those that subtract age and use age as
8803e169010aSmrg	  # a minor version.  But, then there is irix
88049d0ccd10Smrg	  # that has an extra 1 added just for fun
8805e169010aSmrg	  #
8806e169010aSmrg	  case $version_type in
8807e6d5e4e0Smrg	  # correct linux to gnu/linux during the next big refactor
88089d0ccd10Smrg	  darwin|freebsd-elf|linux|osf|windows|none)
8809e169010aSmrg	    func_arith $number_major + $number_minor
8810e169010aSmrg	    current=$func_arith_result
88119d0ccd10Smrg	    age=$number_minor
88129d0ccd10Smrg	    revision=$number_revision
8813e169010aSmrg	    ;;
88149d0ccd10Smrg	  freebsd-aout|qnx|sunos)
88159d0ccd10Smrg	    current=$number_major
88169d0ccd10Smrg	    revision=$number_minor
88179d0ccd10Smrg	    age=0
8818e169010aSmrg	    ;;
8819e169010aSmrg	  irix|nonstopux)
8820e169010aSmrg	    func_arith $number_major + $number_minor
8821e169010aSmrg	    current=$func_arith_result
88229d0ccd10Smrg	    age=$number_minor
88239d0ccd10Smrg	    revision=$number_minor
8824e169010aSmrg	    lt_irix_increment=no
8825e169010aSmrg	    ;;
8826e169010aSmrg	  esac
8827e169010aSmrg	  ;;
8828e169010aSmrg	no)
88299d0ccd10Smrg	  current=$1
88309d0ccd10Smrg	  revision=$2
88319d0ccd10Smrg	  age=$3
8832e169010aSmrg	  ;;
8833e169010aSmrg	esac
8834e169010aSmrg
8835e169010aSmrg	# Check that each of the things are valid numbers.
8836e169010aSmrg	case $current in
8837e169010aSmrg	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]) ;;
8838e169010aSmrg	*)
88399d0ccd10Smrg	  func_error "CURRENT '$current' must be a nonnegative integer"
88409d0ccd10Smrg	  func_fatal_error "'$vinfo' is not valid version information"
8841e169010aSmrg	  ;;
8842e169010aSmrg	esac
8843e169010aSmrg
8844e169010aSmrg	case $revision in
8845e169010aSmrg	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]) ;;
8846e169010aSmrg	*)
88479d0ccd10Smrg	  func_error "REVISION '$revision' must be a nonnegative integer"
88489d0ccd10Smrg	  func_fatal_error "'$vinfo' is not valid version information"
8849e169010aSmrg	  ;;
8850e169010aSmrg	esac
8851e169010aSmrg
8852e169010aSmrg	case $age in
8853e169010aSmrg	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]) ;;
8854e169010aSmrg	*)
88559d0ccd10Smrg	  func_error "AGE '$age' must be a nonnegative integer"
88569d0ccd10Smrg	  func_fatal_error "'$vinfo' is not valid version information"
8857e169010aSmrg	  ;;
8858e169010aSmrg	esac
8859e169010aSmrg
8860e169010aSmrg	if test "$age" -gt "$current"; then
88619d0ccd10Smrg	  func_error "AGE '$age' is greater than the current interface number '$current'"
88629d0ccd10Smrg	  func_fatal_error "'$vinfo' is not valid version information"
8863e169010aSmrg	fi
8864e169010aSmrg
8865e169010aSmrg	# Calculate the version variables.
8866e169010aSmrg	major=
8867e169010aSmrg	versuffix=
8868e169010aSmrg	verstring=
8869e169010aSmrg	case $version_type in
8870e169010aSmrg	none) ;;
8871e169010aSmrg
8872e169010aSmrg	darwin)
8873e169010aSmrg	  # Like Linux, but with the current version available in
8874e169010aSmrg	  # verstring for coding it into the library header
8875e169010aSmrg	  func_arith $current - $age
8876e169010aSmrg	  major=.$func_arith_result
88779d0ccd10Smrg	  versuffix=$major.$age.$revision
8878e169010aSmrg	  # Darwin ld doesn't like 0 for these options...
8879e169010aSmrg	  func_arith $current + 1
8880e169010aSmrg	  minor_current=$func_arith_result
88819d0ccd10Smrg	  xlcverstring="$wl-compatibility_version $wl$minor_current $wl-current_version $wl$minor_current.$revision"
8882e169010aSmrg	  verstring="-compatibility_version $minor_current -current_version $minor_current.$revision"
88839d0ccd10Smrg          # On Darwin other compilers
88849d0ccd10Smrg          case $CC in
88859d0ccd10Smrg              nagfor*)
88869d0ccd10Smrg                  verstring="$wl-compatibility_version $wl$minor_current $wl-current_version $wl$minor_current.$revision"
88879d0ccd10Smrg                  ;;
88889d0ccd10Smrg              *)
88899d0ccd10Smrg                  verstring="-compatibility_version $minor_current -current_version $minor_current.$revision"
88909d0ccd10Smrg                  ;;
88919d0ccd10Smrg          esac
8892e169010aSmrg	  ;;
8893e169010aSmrg
8894e169010aSmrg	freebsd-aout)
88959d0ccd10Smrg	  major=.$current
88969d0ccd10Smrg	  versuffix=.$current.$revision
8897e169010aSmrg	  ;;
8898e169010aSmrg
8899e169010aSmrg	freebsd-elf)
89009d0ccd10Smrg	  func_arith $current - $age
89019d0ccd10Smrg	  major=.$func_arith_result
89029d0ccd10Smrg	  versuffix=$major.$age.$revision
8903e169010aSmrg	  ;;
8904e169010aSmrg
8905e169010aSmrg	irix | nonstopux)
89069d0ccd10Smrg	  if test no = "$lt_irix_increment"; then
8907e169010aSmrg	    func_arith $current - $age
8908e169010aSmrg	  else
8909e169010aSmrg	    func_arith $current - $age + 1
8910e169010aSmrg	  fi
8911e169010aSmrg	  major=$func_arith_result
8912e169010aSmrg
8913e169010aSmrg	  case $version_type in
8914e169010aSmrg	    nonstopux) verstring_prefix=nonstopux ;;
8915e169010aSmrg	    *)         verstring_prefix=sgi ;;
8916e169010aSmrg	  esac
89179d0ccd10Smrg	  verstring=$verstring_prefix$major.$revision
8918e169010aSmrg
8919e169010aSmrg	  # Add in all the interfaces that we are compatible with.
8920e169010aSmrg	  loop=$revision
89219d0ccd10Smrg	  while test 0 -ne "$loop"; do
8922e169010aSmrg	    func_arith $revision - $loop
8923e169010aSmrg	    iface=$func_arith_result
8924e169010aSmrg	    func_arith $loop - 1
8925e169010aSmrg	    loop=$func_arith_result
89269d0ccd10Smrg	    verstring=$verstring_prefix$major.$iface:$verstring
8927e169010aSmrg	  done
8928e169010aSmrg
89299d0ccd10Smrg	  # Before this point, $major must not contain '.'.
8930e169010aSmrg	  major=.$major
89319d0ccd10Smrg	  versuffix=$major.$revision
8932e169010aSmrg	  ;;
8933e169010aSmrg
8934e6d5e4e0Smrg	linux) # correct to gnu/linux during the next big refactor
8935e169010aSmrg	  func_arith $current - $age
8936e169010aSmrg	  major=.$func_arith_result
89379d0ccd10Smrg	  versuffix=$major.$age.$revision
8938e169010aSmrg	  ;;
8939e169010aSmrg
8940e169010aSmrg	osf)
8941e169010aSmrg	  func_arith $current - $age
8942e169010aSmrg	  major=.$func_arith_result
89439d0ccd10Smrg	  versuffix=.$current.$age.$revision
89449d0ccd10Smrg	  verstring=$current.$age.$revision
8945e169010aSmrg
8946e169010aSmrg	  # Add in all the interfaces that we are compatible with.
8947e169010aSmrg	  loop=$age
89489d0ccd10Smrg	  while test 0 -ne "$loop"; do
8949e169010aSmrg	    func_arith $current - $loop
8950e169010aSmrg	    iface=$func_arith_result
8951e169010aSmrg	    func_arith $loop - 1
8952e169010aSmrg	    loop=$func_arith_result
89539d0ccd10Smrg	    verstring=$verstring:$iface.0
8954e169010aSmrg	  done
8955e169010aSmrg
8956e169010aSmrg	  # Make executables depend on our current version.
89579d0ccd10Smrg	  func_append verstring ":$current.0"
8958e169010aSmrg	  ;;
8959e169010aSmrg
8960e169010aSmrg	qnx)
89619d0ccd10Smrg	  major=.$current
89629d0ccd10Smrg	  versuffix=.$current
89639d0ccd10Smrg	  ;;
89649d0ccd10Smrg
89659d0ccd10Smrg	sco)
89669d0ccd10Smrg	  major=.$current
89679d0ccd10Smrg	  versuffix=.$current
8968e169010aSmrg	  ;;
8969e169010aSmrg
8970e169010aSmrg	sunos)
89719d0ccd10Smrg	  major=.$current
89729d0ccd10Smrg	  versuffix=.$current.$revision
8973e169010aSmrg	  ;;
8974e169010aSmrg
8975e169010aSmrg	windows)
8976e169010aSmrg	  # Use '-' rather than '.', since we only want one
89779d0ccd10Smrg	  # extension on DOS 8.3 file systems.
8978e169010aSmrg	  func_arith $current - $age
8979e169010aSmrg	  major=$func_arith_result
89809d0ccd10Smrg	  versuffix=-$major
8981e169010aSmrg	  ;;
8982e169010aSmrg
8983e169010aSmrg	*)
89849d0ccd10Smrg	  func_fatal_configuration "unknown library version type '$version_type'"
8985e169010aSmrg	  ;;
8986e169010aSmrg	esac
8987e169010aSmrg
8988e169010aSmrg	# Clear the version info if we defaulted, and they specified a release.
8989e169010aSmrg	if test -z "$vinfo" && test -n "$release"; then
8990e169010aSmrg	  major=
8991e169010aSmrg	  case $version_type in
8992e169010aSmrg	  darwin)
8993e169010aSmrg	    # we can't check for "0.0" in archive_cmds due to quoting
8994e169010aSmrg	    # problems, so we reset it completely
8995e169010aSmrg	    verstring=
8996e169010aSmrg	    ;;
8997e169010aSmrg	  *)
89989d0ccd10Smrg	    verstring=0.0
8999e169010aSmrg	    ;;
9000e169010aSmrg	  esac
90019d0ccd10Smrg	  if test no = "$need_version"; then
9002e169010aSmrg	    versuffix=
9003e169010aSmrg	  else
90049d0ccd10Smrg	    versuffix=.0.0
9005e169010aSmrg	  fi
9006e169010aSmrg	fi
9007e169010aSmrg
9008e169010aSmrg	# Remove version info from name if versioning should be avoided
90099d0ccd10Smrg	if test yes,no = "$avoid_version,$need_version"; then
9010e169010aSmrg	  major=
9011e169010aSmrg	  versuffix=
90129d0ccd10Smrg	  verstring=
9013e169010aSmrg	fi
9014e169010aSmrg
9015e169010aSmrg	# Check to see if the archive will have undefined symbols.
90169d0ccd10Smrg	if test yes = "$allow_undefined"; then
90179d0ccd10Smrg	  if test unsupported = "$allow_undefined_flag"; then
90189d0ccd10Smrg	    if test yes = "$build_old_libs"; then
90199d0ccd10Smrg	      func_warning "undefined symbols not allowed in $host shared libraries; building static only"
90209d0ccd10Smrg	      build_libtool_libs=no
90219d0ccd10Smrg	    else
90229d0ccd10Smrg	      func_fatal_error "can't build $host shared library unless -no-undefined is specified"
90239d0ccd10Smrg	    fi
9024e169010aSmrg	  fi
9025e169010aSmrg	else
9026e169010aSmrg	  # Don't allow undefined symbols.
90279d0ccd10Smrg	  allow_undefined_flag=$no_undefined_flag
9028e169010aSmrg	fi
9029e169010aSmrg
9030e169010aSmrg      fi
9031e169010aSmrg
90329d0ccd10Smrg      func_generate_dlsyms "$libname" "$libname" :
9033c63293b5Smrg      func_append libobjs " $symfileobj"
90349d0ccd10Smrg      test " " = "$libobjs" && libobjs=
9035e169010aSmrg
90369d0ccd10Smrg      if test relink != "$opt_mode"; then
9037e169010aSmrg	# Remove our outputs, but don't remove object files since they
9038e169010aSmrg	# may have been created when compiling PIC objects.
9039e169010aSmrg	removelist=
9040e169010aSmrg	tempremovelist=`$ECHO "$output_objdir/*"`
9041e169010aSmrg	for p in $tempremovelist; do
9042e169010aSmrg	  case $p in
9043e169010aSmrg	    *.$objext | *.gcno)
9044e169010aSmrg	       ;;
90459d0ccd10Smrg	    $output_objdir/$outputname | $output_objdir/$libname.* | $output_objdir/$libname$release.*)
90469d0ccd10Smrg	       if test -n "$precious_files_regex"; then
9047e169010aSmrg		 if $ECHO "$p" | $EGREP -e "$precious_files_regex" >/dev/null 2>&1
9048e169010aSmrg		 then
9049e169010aSmrg		   continue
9050e169010aSmrg		 fi
9051e169010aSmrg	       fi
9052c63293b5Smrg	       func_append removelist " $p"
9053e169010aSmrg	       ;;
9054e169010aSmrg	    *) ;;
9055e169010aSmrg	  esac
9056e169010aSmrg	done
9057e169010aSmrg	test -n "$removelist" && \
9058e169010aSmrg	  func_show_eval "${RM}r \$removelist"
9059e169010aSmrg      fi
9060e169010aSmrg
9061e169010aSmrg      # Now set the variables for building old libraries.
90629d0ccd10Smrg      if test yes = "$build_old_libs" && test convenience != "$build_libtool_libs"; then
9063c63293b5Smrg	func_append oldlibs " $output_objdir/$libname.$libext"
9064e169010aSmrg
9065e169010aSmrg	# Transform .lo files to .o files.
90669d0ccd10Smrg	oldobjs="$objs "`$ECHO "$libobjs" | $SP2NL | $SED "/\.$libext$/d; $lo2o" | $NL2SP`
9067e169010aSmrg      fi
9068e169010aSmrg
9069e169010aSmrg      # Eliminate all temporary directories.
9070e169010aSmrg      #for path in $notinst_path; do
9071e8ead290Smrg      #	lib_search_path=`$ECHO "$lib_search_path " | $SED "s% $path % %g"`
9072e8ead290Smrg      #	deplibs=`$ECHO "$deplibs " | $SED "s% -L$path % %g"`
9073e8ead290Smrg      #	dependency_libs=`$ECHO "$dependency_libs " | $SED "s% -L$path % %g"`
9074e169010aSmrg      #done
9075e169010aSmrg
9076e169010aSmrg      if test -n "$xrpath"; then
9077e169010aSmrg	# If the user specified any rpath flags, then add them.
9078e169010aSmrg	temp_xrpath=
9079e169010aSmrg	for libdir in $xrpath; do
9080c63293b5Smrg	  func_replace_sysroot "$libdir"
9081c63293b5Smrg	  func_append temp_xrpath " -R$func_replace_sysroot_result"
9082e169010aSmrg	  case "$finalize_rpath " in
9083e169010aSmrg	  *" $libdir "*) ;;
9084c63293b5Smrg	  *) func_append finalize_rpath " $libdir" ;;
9085e169010aSmrg	  esac
9086e169010aSmrg	done
90879d0ccd10Smrg	if test yes != "$hardcode_into_libs" || test yes = "$build_old_libs"; then
9088e169010aSmrg	  dependency_libs="$temp_xrpath $dependency_libs"
9089e169010aSmrg	fi
9090e169010aSmrg      fi
9091e169010aSmrg
9092e169010aSmrg      # Make sure dlfiles contains only unique files that won't be dlpreopened
90939d0ccd10Smrg      old_dlfiles=$dlfiles
9094e169010aSmrg      dlfiles=
9095e169010aSmrg      for lib in $old_dlfiles; do
9096e169010aSmrg	case " $dlprefiles $dlfiles " in
9097e169010aSmrg	*" $lib "*) ;;
9098c63293b5Smrg	*) func_append dlfiles " $lib" ;;
9099e169010aSmrg	esac
9100e169010aSmrg      done
9101e169010aSmrg
9102e169010aSmrg      # Make sure dlprefiles contains only unique files
91039d0ccd10Smrg      old_dlprefiles=$dlprefiles
9104e169010aSmrg      dlprefiles=
9105e169010aSmrg      for lib in $old_dlprefiles; do
9106e169010aSmrg	case "$dlprefiles " in
9107e169010aSmrg	*" $lib "*) ;;
9108c63293b5Smrg	*) func_append dlprefiles " $lib" ;;
9109e169010aSmrg	esac
9110e169010aSmrg      done
9111e169010aSmrg
91129d0ccd10Smrg      if test yes = "$build_libtool_libs"; then
9113e169010aSmrg	if test -n "$rpath"; then
9114e169010aSmrg	  case $host in
9115e8ead290Smrg	  *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-*-beos* | *-cegcc* | *-*-haiku*)
9116e169010aSmrg	    # these systems don't actually have a c library (as such)!
9117e169010aSmrg	    ;;
9118e169010aSmrg	  *-*-rhapsody* | *-*-darwin1.[012])
9119e169010aSmrg	    # Rhapsody C library is in the System framework
9120c63293b5Smrg	    func_append deplibs " System.ltframework"
9121e169010aSmrg	    ;;
9122e169010aSmrg	  *-*-netbsd*)
9123e169010aSmrg	    # Don't link with libc until the a.out ld.so is fixed.
9124e169010aSmrg	    ;;
9125e169010aSmrg	  *-*-openbsd* | *-*-freebsd* | *-*-dragonfly*)
9126e169010aSmrg	    # Do not include libc due to us having libc/libc_r.
9127e169010aSmrg	    ;;
9128e169010aSmrg	  *-*-sco3.2v5* | *-*-sco5v6*)
9129e169010aSmrg	    # Causes problems with __ctype
9130e169010aSmrg	    ;;
9131e169010aSmrg	  *-*-sysv4.2uw2* | *-*-sysv5* | *-*-unixware* | *-*-OpenUNIX*)
9132e169010aSmrg	    # Compiler inserts libc in the correct place for threads to work
9133e169010aSmrg	    ;;
9134e169010aSmrg	  *)
9135e169010aSmrg	    # Add libc to deplibs on all other systems if necessary.
91369d0ccd10Smrg	    if test yes = "$build_libtool_need_lc"; then
9137c63293b5Smrg	      func_append deplibs " -lc"
9138e169010aSmrg	    fi
9139e169010aSmrg	    ;;
9140e169010aSmrg	  esac
9141e169010aSmrg	fi
9142e169010aSmrg
9143e169010aSmrg	# Transform deplibs into only deplibs that can be linked in shared.
9144e169010aSmrg	name_save=$name
9145e169010aSmrg	libname_save=$libname
9146e169010aSmrg	release_save=$release
9147e169010aSmrg	versuffix_save=$versuffix
9148e169010aSmrg	major_save=$major
9149e169010aSmrg	# I'm not sure if I'm treating the release correctly.  I think
9150e169010aSmrg	# release should show up in the -l (ie -lgmp5) so we don't want to
9151e169010aSmrg	# add it in twice.  Is that correct?
91529d0ccd10Smrg	release=
91539d0ccd10Smrg	versuffix=
91549d0ccd10Smrg	major=
9155e169010aSmrg	newdeplibs=
9156e169010aSmrg	droppeddeps=no
9157e169010aSmrg	case $deplibs_check_method in
9158e169010aSmrg	pass_all)
9159e169010aSmrg	  # Don't check for shared/static.  Everything works.
9160e169010aSmrg	  # This might be a little naive.  We might want to check
9161e169010aSmrg	  # whether the library exists or not.  But this is on
9162e169010aSmrg	  # osf3 & osf4 and I'm not really sure... Just
9163e169010aSmrg	  # implementing what was already the behavior.
9164e169010aSmrg	  newdeplibs=$deplibs
9165e169010aSmrg	  ;;
9166e169010aSmrg	test_compile)
9167e169010aSmrg	  # This code stresses the "libraries are programs" paradigm to its
9168e169010aSmrg	  # limits. Maybe even breaks it.  We compile a program, linking it
9169e169010aSmrg	  # against the deplibs as a proxy for the library.  Then we can check
9170e169010aSmrg	  # whether they linked in statically or dynamically with ldd.
9171e169010aSmrg	  $opt_dry_run || $RM conftest.c
9172e169010aSmrg	  cat > conftest.c <<EOF
9173e169010aSmrg	  int main() { return 0; }
9174e169010aSmrgEOF
9175e169010aSmrg	  $opt_dry_run || $RM conftest
9176e169010aSmrg	  if $LTCC $LTCFLAGS -o conftest conftest.c $deplibs; then
9177e169010aSmrg	    ldd_output=`ldd conftest`
9178e169010aSmrg	    for i in $deplibs; do
9179e169010aSmrg	      case $i in
9180e169010aSmrg	      -l*)
9181e169010aSmrg		func_stripname -l '' "$i"
9182e169010aSmrg		name=$func_stripname_result
91839d0ccd10Smrg		if test yes = "$allow_libtool_libs_with_static_runtimes"; then
9184e169010aSmrg		  case " $predeps $postdeps " in
9185e169010aSmrg		  *" $i "*)
9186c63293b5Smrg		    func_append newdeplibs " $i"
91879d0ccd10Smrg		    i=
9188e169010aSmrg		    ;;
9189e169010aSmrg		  esac
9190e169010aSmrg		fi
91919d0ccd10Smrg		if test -n "$i"; then
9192e169010aSmrg		  libname=`eval "\\$ECHO \"$libname_spec\""`
9193e169010aSmrg		  deplib_matches=`eval "\\$ECHO \"$library_names_spec\""`
9194e169010aSmrg		  set dummy $deplib_matches; shift
9195e169010aSmrg		  deplib_match=$1
91969d0ccd10Smrg		  if test `expr "$ldd_output" : ".*$deplib_match"` -ne 0; then
9197c63293b5Smrg		    func_append newdeplibs " $i"
9198e169010aSmrg		  else
9199e169010aSmrg		    droppeddeps=yes
9200e8ead290Smrg		    echo
9201e169010aSmrg		    $ECHO "*** Warning: dynamic linker does not accept needed library $i."
9202e8ead290Smrg		    echo "*** I have the capability to make that library automatically link in when"
9203e8ead290Smrg		    echo "*** you link to this library.  But I can only do this if you have a"
9204e8ead290Smrg		    echo "*** shared version of the library, which I believe you do not have"
9205e8ead290Smrg		    echo "*** because a test_compile did reveal that the linker did not use it for"
9206e8ead290Smrg		    echo "*** its dynamic dependency list that programs get resolved with at runtime."
9207e169010aSmrg		  fi
9208e169010aSmrg		fi
9209e169010aSmrg		;;
9210e169010aSmrg	      *)
9211c63293b5Smrg		func_append newdeplibs " $i"
9212e169010aSmrg		;;
9213e169010aSmrg	      esac
9214e169010aSmrg	    done
9215e169010aSmrg	  else
9216e169010aSmrg	    # Error occurred in the first compile.  Let's try to salvage
9217e169010aSmrg	    # the situation: Compile a separate program for each library.
9218e169010aSmrg	    for i in $deplibs; do
9219e169010aSmrg	      case $i in
9220e169010aSmrg	      -l*)
9221e169010aSmrg		func_stripname -l '' "$i"
9222e169010aSmrg		name=$func_stripname_result
9223e169010aSmrg		$opt_dry_run || $RM conftest
9224e169010aSmrg		if $LTCC $LTCFLAGS -o conftest conftest.c $i; then
9225e169010aSmrg		  ldd_output=`ldd conftest`
92269d0ccd10Smrg		  if test yes = "$allow_libtool_libs_with_static_runtimes"; then
9227e169010aSmrg		    case " $predeps $postdeps " in
9228e169010aSmrg		    *" $i "*)
9229c63293b5Smrg		      func_append newdeplibs " $i"
92309d0ccd10Smrg		      i=
9231e169010aSmrg		      ;;
9232e169010aSmrg		    esac
9233e169010aSmrg		  fi
92349d0ccd10Smrg		  if test -n "$i"; then
9235e169010aSmrg		    libname=`eval "\\$ECHO \"$libname_spec\""`
9236e169010aSmrg		    deplib_matches=`eval "\\$ECHO \"$library_names_spec\""`
9237e169010aSmrg		    set dummy $deplib_matches; shift
9238e169010aSmrg		    deplib_match=$1
92399d0ccd10Smrg		    if test `expr "$ldd_output" : ".*$deplib_match"` -ne 0; then
9240c63293b5Smrg		      func_append newdeplibs " $i"
9241e169010aSmrg		    else
9242e169010aSmrg		      droppeddeps=yes
9243e8ead290Smrg		      echo
9244e169010aSmrg		      $ECHO "*** Warning: dynamic linker does not accept needed library $i."
9245e8ead290Smrg		      echo "*** I have the capability to make that library automatically link in when"
9246e8ead290Smrg		      echo "*** you link to this library.  But I can only do this if you have a"
9247e8ead290Smrg		      echo "*** shared version of the library, which you do not appear to have"
9248e8ead290Smrg		      echo "*** because a test_compile did reveal that the linker did not use this one"
9249e8ead290Smrg		      echo "*** as a dynamic dependency that programs can get resolved with at runtime."
9250e169010aSmrg		    fi
9251e169010aSmrg		  fi
9252e169010aSmrg		else
9253e169010aSmrg		  droppeddeps=yes
9254e8ead290Smrg		  echo
9255e169010aSmrg		  $ECHO "*** Warning!  Library $i is needed by this library but I was not able to"
9256e8ead290Smrg		  echo "*** make it link in!  You will probably need to install it or some"
9257e8ead290Smrg		  echo "*** library that it depends on before this library will be fully"
9258e8ead290Smrg		  echo "*** functional.  Installing it before continuing would be even better."
9259e169010aSmrg		fi
9260e169010aSmrg		;;
9261e169010aSmrg	      *)
9262c63293b5Smrg		func_append newdeplibs " $i"
9263e169010aSmrg		;;
9264e169010aSmrg	      esac
9265e169010aSmrg	    done
9266e169010aSmrg	  fi
9267e169010aSmrg	  ;;
9268e169010aSmrg	file_magic*)
9269e169010aSmrg	  set dummy $deplibs_check_method; shift
9270e169010aSmrg	  file_magic_regex=`expr "$deplibs_check_method" : "$1 \(.*\)"`
9271e169010aSmrg	  for a_deplib in $deplibs; do
9272e169010aSmrg	    case $a_deplib in
9273e169010aSmrg	    -l*)
9274e169010aSmrg	      func_stripname -l '' "$a_deplib"
9275e169010aSmrg	      name=$func_stripname_result
92769d0ccd10Smrg	      if test yes = "$allow_libtool_libs_with_static_runtimes"; then
9277e169010aSmrg		case " $predeps $postdeps " in
9278e169010aSmrg		*" $a_deplib "*)
9279c63293b5Smrg		  func_append newdeplibs " $a_deplib"
92809d0ccd10Smrg		  a_deplib=
9281e169010aSmrg		  ;;
9282e169010aSmrg		esac
9283e169010aSmrg	      fi
92849d0ccd10Smrg	      if test -n "$a_deplib"; then
9285e169010aSmrg		libname=`eval "\\$ECHO \"$libname_spec\""`
9286c63293b5Smrg		if test -n "$file_magic_glob"; then
9287c63293b5Smrg		  libnameglob=`func_echo_all "$libname" | $SED -e $file_magic_glob`
9288c63293b5Smrg		else
9289c63293b5Smrg		  libnameglob=$libname
9290c63293b5Smrg		fi
92919d0ccd10Smrg		test yes = "$want_nocaseglob" && nocaseglob=`shopt -p nocaseglob`
9292e169010aSmrg		for i in $lib_search_path $sys_lib_search_path $shlib_search_path; do
92939d0ccd10Smrg		  if test yes = "$want_nocaseglob"; then
9294c63293b5Smrg		    shopt -s nocaseglob
9295c63293b5Smrg		    potential_libs=`ls $i/$libnameglob[.-]* 2>/dev/null`
9296c63293b5Smrg		    $nocaseglob
9297c63293b5Smrg		  else
9298c63293b5Smrg		    potential_libs=`ls $i/$libnameglob[.-]* 2>/dev/null`
9299c63293b5Smrg		  fi
9300e169010aSmrg		  for potent_lib in $potential_libs; do
9301e169010aSmrg		      # Follow soft links.
9302e169010aSmrg		      if ls -lLd "$potent_lib" 2>/dev/null |
9303e169010aSmrg			 $GREP " -> " >/dev/null; then
9304e169010aSmrg			continue
9305e169010aSmrg		      fi
9306e169010aSmrg		      # The statement above tries to avoid entering an
9307e169010aSmrg		      # endless loop below, in case of cyclic links.
9308e169010aSmrg		      # We might still enter an endless loop, since a link
9309e169010aSmrg		      # loop can be closed while we follow links,
9310e169010aSmrg		      # but so what?
93119d0ccd10Smrg		      potlib=$potent_lib
9312e169010aSmrg		      while test -h "$potlib" 2>/dev/null; do
93139d0ccd10Smrg			potliblink=`ls -ld $potlib | $SED 's/.* -> //'`
9314e169010aSmrg			case $potliblink in
93159d0ccd10Smrg			[\\/]* | [A-Za-z]:[\\/]*) potlib=$potliblink;;
93169d0ccd10Smrg			*) potlib=`$ECHO "$potlib" | $SED 's|[^/]*$||'`"$potliblink";;
9317e169010aSmrg			esac
9318e169010aSmrg		      done
9319e169010aSmrg		      if eval $file_magic_cmd \"\$potlib\" 2>/dev/null |
9320e169010aSmrg			 $SED -e 10q |
9321e169010aSmrg			 $EGREP "$file_magic_regex" > /dev/null; then
9322c63293b5Smrg			func_append newdeplibs " $a_deplib"
93239d0ccd10Smrg			a_deplib=
9324e169010aSmrg			break 2
9325e169010aSmrg		      fi
9326e169010aSmrg		  done
9327e169010aSmrg		done
9328e169010aSmrg	      fi
93299d0ccd10Smrg	      if test -n "$a_deplib"; then
9330e169010aSmrg		droppeddeps=yes
9331e8ead290Smrg		echo
9332e169010aSmrg		$ECHO "*** Warning: linker path does not have real file for library $a_deplib."
9333e8ead290Smrg		echo "*** I have the capability to make that library automatically link in when"
9334e8ead290Smrg		echo "*** you link to this library.  But I can only do this if you have a"
9335e8ead290Smrg		echo "*** shared version of the library, which you do not appear to have"
9336e8ead290Smrg		echo "*** because I did check the linker path looking for a file starting"
93379d0ccd10Smrg		if test -z "$potlib"; then
9338e169010aSmrg		  $ECHO "*** with $libname but no candidates were found. (...for file magic test)"
9339e169010aSmrg		else
9340e169010aSmrg		  $ECHO "*** with $libname and none of the candidates passed a file format test"
9341e169010aSmrg		  $ECHO "*** using a file magic. Last file checked: $potlib"
9342e169010aSmrg		fi
9343e169010aSmrg	      fi
9344e169010aSmrg	      ;;
9345e169010aSmrg	    *)
9346e169010aSmrg	      # Add a -L argument.
9347c63293b5Smrg	      func_append newdeplibs " $a_deplib"
9348e169010aSmrg	      ;;
9349e169010aSmrg	    esac
9350e169010aSmrg	  done # Gone through all deplibs.
9351e169010aSmrg	  ;;
9352e169010aSmrg	match_pattern*)
9353e169010aSmrg	  set dummy $deplibs_check_method; shift
9354e169010aSmrg	  match_pattern_regex=`expr "$deplibs_check_method" : "$1 \(.*\)"`
9355e169010aSmrg	  for a_deplib in $deplibs; do
9356e169010aSmrg	    case $a_deplib in
9357e169010aSmrg	    -l*)
9358e169010aSmrg	      func_stripname -l '' "$a_deplib"
9359e169010aSmrg	      name=$func_stripname_result
93609d0ccd10Smrg	      if test yes = "$allow_libtool_libs_with_static_runtimes"; then
9361e169010aSmrg		case " $predeps $postdeps " in
9362e169010aSmrg		*" $a_deplib "*)
9363c63293b5Smrg		  func_append newdeplibs " $a_deplib"
93649d0ccd10Smrg		  a_deplib=
9365e169010aSmrg		  ;;
9366e169010aSmrg		esac
9367e169010aSmrg	      fi
93689d0ccd10Smrg	      if test -n "$a_deplib"; then
9369e169010aSmrg		libname=`eval "\\$ECHO \"$libname_spec\""`
9370e169010aSmrg		for i in $lib_search_path $sys_lib_search_path $shlib_search_path; do
9371e169010aSmrg		  potential_libs=`ls $i/$libname[.-]* 2>/dev/null`
9372e169010aSmrg		  for potent_lib in $potential_libs; do
93739d0ccd10Smrg		    potlib=$potent_lib # see symlink-check above in file_magic test
9374e8ead290Smrg		    if eval "\$ECHO \"$potent_lib\"" 2>/dev/null | $SED 10q | \
9375e169010aSmrg		       $EGREP "$match_pattern_regex" > /dev/null; then
9376c63293b5Smrg		      func_append newdeplibs " $a_deplib"
93779d0ccd10Smrg		      a_deplib=
9378e169010aSmrg		      break 2
9379e169010aSmrg		    fi
9380e169010aSmrg		  done
9381e169010aSmrg		done
9382e169010aSmrg	      fi
93839d0ccd10Smrg	      if test -n "$a_deplib"; then
9384e169010aSmrg		droppeddeps=yes
9385e8ead290Smrg		echo
9386e169010aSmrg		$ECHO "*** Warning: linker path does not have real file for library $a_deplib."
9387e8ead290Smrg		echo "*** I have the capability to make that library automatically link in when"
9388e8ead290Smrg		echo "*** you link to this library.  But I can only do this if you have a"
9389e8ead290Smrg		echo "*** shared version of the library, which you do not appear to have"
9390e8ead290Smrg		echo "*** because I did check the linker path looking for a file starting"
93919d0ccd10Smrg		if test -z "$potlib"; then
9392e169010aSmrg		  $ECHO "*** with $libname but no candidates were found. (...for regex pattern test)"
9393e169010aSmrg		else
9394e169010aSmrg		  $ECHO "*** with $libname and none of the candidates passed a file format test"
9395e169010aSmrg		  $ECHO "*** using a regex pattern. Last file checked: $potlib"
9396e169010aSmrg		fi
9397e169010aSmrg	      fi
9398e169010aSmrg	      ;;
9399e169010aSmrg	    *)
9400e169010aSmrg	      # Add a -L argument.
9401c63293b5Smrg	      func_append newdeplibs " $a_deplib"
9402e169010aSmrg	      ;;
9403e169010aSmrg	    esac
9404e169010aSmrg	  done # Gone through all deplibs.
9405e169010aSmrg	  ;;
9406e169010aSmrg	none | unknown | *)
94079d0ccd10Smrg	  newdeplibs=
9408e8ead290Smrg	  tmp_deplibs=`$ECHO " $deplibs" | $SED 's/ -lc$//; s/ -[LR][^ ]*//g'`
94099d0ccd10Smrg	  if test yes = "$allow_libtool_libs_with_static_runtimes"; then
94109d0ccd10Smrg	    for i in $predeps $postdeps; do
9411e169010aSmrg	      # can't use Xsed below, because $i might contain '/'
94129d0ccd10Smrg	      tmp_deplibs=`$ECHO " $tmp_deplibs" | $SED "s|$i||"`
9413e169010aSmrg	    done
9414e169010aSmrg	  fi
9415e8ead290Smrg	  case $tmp_deplibs in
9416e8ead290Smrg	  *[!\	\ ]*)
9417e8ead290Smrg	    echo
94189d0ccd10Smrg	    if test none = "$deplibs_check_method"; then
9419e8ead290Smrg	      echo "*** Warning: inter-library dependencies are not supported in this platform."
9420e169010aSmrg	    else
9421e8ead290Smrg	      echo "*** Warning: inter-library dependencies are not known to be supported."
9422e169010aSmrg	    fi
9423e8ead290Smrg	    echo "*** All declared inter-library dependencies are being dropped."
9424e169010aSmrg	    droppeddeps=yes
9425e8ead290Smrg	    ;;
9426e8ead290Smrg	  esac
9427e169010aSmrg	  ;;
9428e169010aSmrg	esac
9429e169010aSmrg	versuffix=$versuffix_save
9430e169010aSmrg	major=$major_save
9431e169010aSmrg	release=$release_save
9432e169010aSmrg	libname=$libname_save
9433e169010aSmrg	name=$name_save
9434e169010aSmrg
9435e169010aSmrg	case $host in
9436e169010aSmrg	*-*-rhapsody* | *-*-darwin1.[012])
9437e169010aSmrg	  # On Rhapsody replace the C library with the System framework
9438e8ead290Smrg	  newdeplibs=`$ECHO " $newdeplibs" | $SED 's/ -lc / System.ltframework /'`
9439e169010aSmrg	  ;;
9440e169010aSmrg	esac
9441e169010aSmrg
94429d0ccd10Smrg	if test yes = "$droppeddeps"; then
94439d0ccd10Smrg	  if test yes = "$module"; then
9444e8ead290Smrg	    echo
9445e8ead290Smrg	    echo "*** Warning: libtool could not satisfy all declared inter-library"
9446e169010aSmrg	    $ECHO "*** dependencies of module $libname.  Therefore, libtool will create"
9447e8ead290Smrg	    echo "*** a static module, that should work as long as the dlopening"
9448e8ead290Smrg	    echo "*** application is linked with the -dlopen flag."
9449e169010aSmrg	    if test -z "$global_symbol_pipe"; then
9450e8ead290Smrg	      echo
9451e8ead290Smrg	      echo "*** However, this would only work if libtool was able to extract symbol"
94529d0ccd10Smrg	      echo "*** lists from a program, using 'nm' or equivalent, but libtool could"
9453e8ead290Smrg	      echo "*** not find such a program.  So, this module is probably useless."
94549d0ccd10Smrg	      echo "*** 'nm' from GNU binutils and a full rebuild may help."
9455e169010aSmrg	    fi
94569d0ccd10Smrg	    if test no = "$build_old_libs"; then
94579d0ccd10Smrg	      oldlibs=$output_objdir/$libname.$libext
9458e169010aSmrg	      build_libtool_libs=module
9459e169010aSmrg	      build_old_libs=yes
9460e169010aSmrg	    else
9461e169010aSmrg	      build_libtool_libs=no
9462e169010aSmrg	    fi
9463e169010aSmrg	  else
9464e8ead290Smrg	    echo "*** The inter-library dependencies that have been dropped here will be"
9465e8ead290Smrg	    echo "*** automatically added whenever a program is linked with this library"
9466e8ead290Smrg	    echo "*** or is declared to -dlopen it."
9467e169010aSmrg
94689d0ccd10Smrg	    if test no = "$allow_undefined"; then
9469e8ead290Smrg	      echo
9470e8ead290Smrg	      echo "*** Since this library must not contain undefined symbols,"
9471e8ead290Smrg	      echo "*** because either the platform does not support them or"
9472e8ead290Smrg	      echo "*** it was explicitly requested with -no-undefined,"
9473e8ead290Smrg	      echo "*** libtool will only create a static version of it."
94749d0ccd10Smrg	      if test no = "$build_old_libs"; then
94759d0ccd10Smrg		oldlibs=$output_objdir/$libname.$libext
9476e169010aSmrg		build_libtool_libs=module
9477e169010aSmrg		build_old_libs=yes
9478e169010aSmrg	      else
9479e169010aSmrg		build_libtool_libs=no
9480e169010aSmrg	      fi
9481e169010aSmrg	    fi
9482e169010aSmrg	  fi
9483e169010aSmrg	fi
9484e169010aSmrg	# Done checking deplibs!
9485e169010aSmrg	deplibs=$newdeplibs
9486e169010aSmrg      fi
9487e169010aSmrg      # Time to change all our "foo.ltframework" stuff back to "-framework foo"
9488e169010aSmrg      case $host in
9489e169010aSmrg	*-*-darwin*)
9490e8ead290Smrg	  newdeplibs=`$ECHO " $newdeplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'`
9491e8ead290Smrg	  new_inherited_linker_flags=`$ECHO " $new_inherited_linker_flags" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'`
9492e8ead290Smrg	  deplibs=`$ECHO " $deplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'`
9493e169010aSmrg	  ;;
9494e169010aSmrg      esac
9495e169010aSmrg
9496e169010aSmrg      # move library search paths that coincide with paths to not yet
9497e169010aSmrg      # installed libraries to the beginning of the library search list
9498e169010aSmrg      new_libs=
9499e169010aSmrg      for path in $notinst_path; do
9500e169010aSmrg	case " $new_libs " in
9501e169010aSmrg	*" -L$path/$objdir "*) ;;
9502e169010aSmrg	*)
9503e169010aSmrg	  case " $deplibs " in
9504e169010aSmrg	  *" -L$path/$objdir "*)
9505c63293b5Smrg	    func_append new_libs " -L$path/$objdir" ;;
9506e169010aSmrg	  esac
9507e169010aSmrg	  ;;
9508e169010aSmrg	esac
9509e169010aSmrg      done
9510e169010aSmrg      for deplib in $deplibs; do
9511e169010aSmrg	case $deplib in
9512e169010aSmrg	-L*)
9513e169010aSmrg	  case " $new_libs " in
9514e169010aSmrg	  *" $deplib "*) ;;
9515c63293b5Smrg	  *) func_append new_libs " $deplib" ;;
9516e169010aSmrg	  esac
9517e169010aSmrg	  ;;
9518c63293b5Smrg	*) func_append new_libs " $deplib" ;;
9519e169010aSmrg	esac
9520e169010aSmrg      done
95219d0ccd10Smrg      deplibs=$new_libs
9522e169010aSmrg
9523e169010aSmrg      # All the library-specific variables (install_libdir is set above).
9524e169010aSmrg      library_names=
9525e169010aSmrg      old_library=
9526e169010aSmrg      dlname=
9527e169010aSmrg
9528e169010aSmrg      # Test again, we may have decided not to build it any more
95299d0ccd10Smrg      if test yes = "$build_libtool_libs"; then
95309d0ccd10Smrg	# Remove $wl instances when linking with ld.
9531e6d5e4e0Smrg	# FIXME: should test the right _cmds variable.
9532e6d5e4e0Smrg	case $archive_cmds in
9533e6d5e4e0Smrg	  *\$LD\ *) wl= ;;
9534e6d5e4e0Smrg        esac
95359d0ccd10Smrg	if test yes = "$hardcode_into_libs"; then
9536e169010aSmrg	  # Hardcode the library paths
9537e169010aSmrg	  hardcode_libdirs=
9538e169010aSmrg	  dep_rpath=
95399d0ccd10Smrg	  rpath=$finalize_rpath
95409d0ccd10Smrg	  test relink = "$opt_mode" || rpath=$compile_rpath$rpath
9541e169010aSmrg	  for libdir in $rpath; do
9542e169010aSmrg	    if test -n "$hardcode_libdir_flag_spec"; then
9543e169010aSmrg	      if test -n "$hardcode_libdir_separator"; then
9544c63293b5Smrg		func_replace_sysroot "$libdir"
9545c63293b5Smrg		libdir=$func_replace_sysroot_result
9546e169010aSmrg		if test -z "$hardcode_libdirs"; then
95479d0ccd10Smrg		  hardcode_libdirs=$libdir
9548e169010aSmrg		else
9549e169010aSmrg		  # Just accumulate the unique libdirs.
9550e169010aSmrg		  case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in
9551e169010aSmrg		  *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*)
9552e169010aSmrg		    ;;
9553e169010aSmrg		  *)
9554c63293b5Smrg		    func_append hardcode_libdirs "$hardcode_libdir_separator$libdir"
9555e169010aSmrg		    ;;
9556e169010aSmrg		  esac
9557e169010aSmrg		fi
9558e169010aSmrg	      else
9559e169010aSmrg		eval flag=\"$hardcode_libdir_flag_spec\"
9560c63293b5Smrg		func_append dep_rpath " $flag"
9561e169010aSmrg	      fi
9562e169010aSmrg	    elif test -n "$runpath_var"; then
9563e169010aSmrg	      case "$perm_rpath " in
9564e169010aSmrg	      *" $libdir "*) ;;
9565e6d5e4e0Smrg	      *) func_append perm_rpath " $libdir" ;;
9566e169010aSmrg	      esac
9567e169010aSmrg	    fi
9568e169010aSmrg	  done
9569e169010aSmrg	  # Substitute the hardcoded libdirs into the rpath.
9570e169010aSmrg	  if test -n "$hardcode_libdir_separator" &&
9571e169010aSmrg	     test -n "$hardcode_libdirs"; then
95729d0ccd10Smrg	    libdir=$hardcode_libdirs
9573e6d5e4e0Smrg	    eval "dep_rpath=\"$hardcode_libdir_flag_spec\""
9574e169010aSmrg	  fi
9575e169010aSmrg	  if test -n "$runpath_var" && test -n "$perm_rpath"; then
9576e169010aSmrg	    # We should set the runpath_var.
9577e169010aSmrg	    rpath=
9578e169010aSmrg	    for dir in $perm_rpath; do
9579c63293b5Smrg	      func_append rpath "$dir:"
9580e169010aSmrg	    done
9581e169010aSmrg	    eval "$runpath_var='$rpath\$$runpath_var'; export $runpath_var"
9582e169010aSmrg	  fi
9583e169010aSmrg	  test -n "$dep_rpath" && deplibs="$dep_rpath $deplibs"
9584e169010aSmrg	fi
95857914d74bSmrg
95869d0ccd10Smrg	shlibpath=$finalize_shlibpath
95879d0ccd10Smrg	test relink = "$opt_mode" || shlibpath=$compile_shlibpath$shlibpath
9588e169010aSmrg	if test -n "$shlibpath"; then
9589e169010aSmrg	  eval "$shlibpath_var='$shlibpath\$$shlibpath_var'; export $shlibpath_var"
9590e169010aSmrg	fi
95917914d74bSmrg
9592e169010aSmrg	# Get the real and link names of the library.
9593e169010aSmrg	eval shared_ext=\"$shrext_cmds\"
9594e169010aSmrg	eval library_names=\"$library_names_spec\"
9595e169010aSmrg	set dummy $library_names
9596e169010aSmrg	shift
95979d0ccd10Smrg	realname=$1
9598e169010aSmrg	shift
95997914d74bSmrg
9600e169010aSmrg	if test -n "$soname_spec"; then
9601e169010aSmrg	  eval soname=\"$soname_spec\"
9602e169010aSmrg	else
96039d0ccd10Smrg	  soname=$realname
9604e169010aSmrg	fi
9605e169010aSmrg	if test -z "$dlname"; then
9606e169010aSmrg	  dlname=$soname
9607e169010aSmrg	fi
96087914d74bSmrg
96099d0ccd10Smrg	lib=$output_objdir/$realname
9610e169010aSmrg	linknames=
9611e169010aSmrg	for link
9612e169010aSmrg	do
9613c63293b5Smrg	  func_append linknames " $link"
9614e169010aSmrg	done
96157914d74bSmrg
9616e169010aSmrg	# Use standard objects if they are pic
9617e8ead290Smrg	test -z "$pic_flag" && libobjs=`$ECHO "$libobjs" | $SP2NL | $SED "$lo2o" | $NL2SP`
9618e169010aSmrg	test "X$libobjs" = "X " && libobjs=
96197914d74bSmrg
9620e169010aSmrg	delfiles=
9621e169010aSmrg	if test -n "$export_symbols" && test -n "$include_expsyms"; then
9622e169010aSmrg	  $opt_dry_run || cp "$export_symbols" "$output_objdir/$libname.uexp"
96239d0ccd10Smrg	  export_symbols=$output_objdir/$libname.uexp
9624c63293b5Smrg	  func_append delfiles " $export_symbols"
9625e169010aSmrg	fi
96267914d74bSmrg
9627e169010aSmrg	orig_export_symbols=
9628e169010aSmrg	case $host_os in
9629e169010aSmrg	cygwin* | mingw* | cegcc*)
9630e169010aSmrg	  if test -n "$export_symbols" && test -z "$export_symbols_regex"; then
9631e169010aSmrg	    # exporting using user supplied symfile
96329d0ccd10Smrg	    func_dll_def_p "$export_symbols" || {
9633e169010aSmrg	      # and it's NOT already a .def file. Must figure out
9634e169010aSmrg	      # which of the given symbols are data symbols and tag
9635e169010aSmrg	      # them as such. So, trigger use of export_symbols_cmds.
9636e169010aSmrg	      # export_symbols gets reassigned inside the "prepare
9637e169010aSmrg	      # the list of exported symbols" if statement, so the
9638e169010aSmrg	      # include_expsyms logic still works.
96399d0ccd10Smrg	      orig_export_symbols=$export_symbols
9640e169010aSmrg	      export_symbols=
9641e169010aSmrg	      always_export_symbols=yes
96429d0ccd10Smrg	    }
9643e169010aSmrg	  fi
9644e169010aSmrg	  ;;
9645e169010aSmrg	esac
96467914d74bSmrg
9647e169010aSmrg	# Prepare the list of exported symbols
9648e169010aSmrg	if test -z "$export_symbols"; then
96499d0ccd10Smrg	  if test yes = "$always_export_symbols" || test -n "$export_symbols_regex"; then
96509d0ccd10Smrg	    func_verbose "generating symbol list for '$libname.la'"
96519d0ccd10Smrg	    export_symbols=$output_objdir/$libname.exp
9652e169010aSmrg	    $opt_dry_run || $RM $export_symbols
9653e169010aSmrg	    cmds=$export_symbols_cmds
96549d0ccd10Smrg	    save_ifs=$IFS; IFS='~'
9655c63293b5Smrg	    for cmd1 in $cmds; do
96569d0ccd10Smrg	      IFS=$save_ifs
9657c63293b5Smrg	      # Take the normal branch if the nm_file_list_spec branch
9658c63293b5Smrg	      # doesn't work or if tool conversion is not needed.
9659c63293b5Smrg	      case $nm_file_list_spec~$to_tool_file_cmd in
9660c63293b5Smrg		*~func_convert_file_noop | *~func_convert_file_msys_to_w32 | ~*)
9661c63293b5Smrg		  try_normal_branch=yes
9662c63293b5Smrg		  eval cmd=\"$cmd1\"
9663c63293b5Smrg		  func_len " $cmd"
9664c63293b5Smrg		  len=$func_len_result
9665c63293b5Smrg		  ;;
9666c63293b5Smrg		*)
9667c63293b5Smrg		  try_normal_branch=no
9668c63293b5Smrg		  ;;
9669c63293b5Smrg	      esac
96709d0ccd10Smrg	      if test yes = "$try_normal_branch" \
9671c63293b5Smrg		 && { test "$len" -lt "$max_cmd_len" \
9672c63293b5Smrg		      || test "$max_cmd_len" -le -1; }
9673c63293b5Smrg	      then
9674c63293b5Smrg		func_show_eval "$cmd" 'exit $?'
9675c63293b5Smrg		skipped_export=false
9676c63293b5Smrg	      elif test -n "$nm_file_list_spec"; then
9677c63293b5Smrg		func_basename "$output"
9678c63293b5Smrg		output_la=$func_basename_result
9679c63293b5Smrg		save_libobjs=$libobjs
9680c63293b5Smrg		save_output=$output
96819d0ccd10Smrg		output=$output_objdir/$output_la.nm
9682c63293b5Smrg		func_to_tool_file "$output"
9683c63293b5Smrg		libobjs=$nm_file_list_spec$func_to_tool_file_result
9684c63293b5Smrg		func_append delfiles " $output"
9685c63293b5Smrg		func_verbose "creating $NM input file list: $output"
9686c63293b5Smrg		for obj in $save_libobjs; do
9687c63293b5Smrg		  func_to_tool_file "$obj"
9688c63293b5Smrg		  $ECHO "$func_to_tool_file_result"
9689c63293b5Smrg		done > "$output"
9690c63293b5Smrg		eval cmd=\"$cmd1\"
9691e169010aSmrg		func_show_eval "$cmd" 'exit $?'
9692c63293b5Smrg		output=$save_output
9693c63293b5Smrg		libobjs=$save_libobjs
9694e169010aSmrg		skipped_export=false
9695e169010aSmrg	      else
9696e169010aSmrg		# The command line is too long to execute in one step.
9697e169010aSmrg		func_verbose "using reloadable object file for export list..."
9698e169010aSmrg		skipped_export=:
9699e169010aSmrg		# Break out early, otherwise skipped_export may be
9700e169010aSmrg		# set to false by a later but shorter cmd.
9701e169010aSmrg		break
9702e169010aSmrg	      fi
9703e169010aSmrg	    done
97049d0ccd10Smrg	    IFS=$save_ifs
97059d0ccd10Smrg	    if test -n "$export_symbols_regex" && test : != "$skipped_export"; then
9706e169010aSmrg	      func_show_eval '$EGREP -e "$export_symbols_regex" "$export_symbols" > "${export_symbols}T"'
9707e169010aSmrg	      func_show_eval '$MV "${export_symbols}T" "$export_symbols"'
9708e169010aSmrg	    fi
9709e169010aSmrg	  fi
9710e169010aSmrg	fi
97117914d74bSmrg
9712e169010aSmrg	if test -n "$export_symbols" && test -n "$include_expsyms"; then
97139d0ccd10Smrg	  tmp_export_symbols=$export_symbols
97149d0ccd10Smrg	  test -n "$orig_export_symbols" && tmp_export_symbols=$orig_export_symbols
9715e8ead290Smrg	  $opt_dry_run || eval '$ECHO "$include_expsyms" | $SP2NL >> "$tmp_export_symbols"'
9716e169010aSmrg	fi
97177914d74bSmrg
97189d0ccd10Smrg	if test : != "$skipped_export" && test -n "$orig_export_symbols"; then
9719e169010aSmrg	  # The given exports_symbols file has to be filtered, so filter it.
97209d0ccd10Smrg	  func_verbose "filter symbol list for '$libname.la' to tag DATA exports"
9721e169010aSmrg	  # FIXME: $output_objdir/$libname.filter potentially contains lots of
97229d0ccd10Smrg	  # 's' commands, which not all seds can handle. GNU sed should be fine
9723e169010aSmrg	  # though. Also, the filter scales superlinearly with the number of
9724e169010aSmrg	  # global variables. join(1) would be nice here, but unfortunately
9725e169010aSmrg	  # isn't a blessed tool.
9726e169010aSmrg	  $opt_dry_run || $SED -e '/[ ,]DATA/!d;s,\(.*\)\([ \,].*\),s|^\1$|\1\2|,' < $export_symbols > $output_objdir/$libname.filter
9727c63293b5Smrg	  func_append delfiles " $export_symbols $output_objdir/$libname.filter"
9728e169010aSmrg	  export_symbols=$output_objdir/$libname.def
9729e169010aSmrg	  $opt_dry_run || $SED -f $output_objdir/$libname.filter < $orig_export_symbols > $export_symbols
97307914d74bSmrg	fi
97317914d74bSmrg
9732e169010aSmrg	tmp_deplibs=
9733e169010aSmrg	for test_deplib in $deplibs; do
9734e169010aSmrg	  case " $convenience " in
9735e169010aSmrg	  *" $test_deplib "*) ;;
9736e169010aSmrg	  *)
9737c63293b5Smrg	    func_append tmp_deplibs " $test_deplib"
9738e169010aSmrg	    ;;
9739e169010aSmrg	  esac
9740e169010aSmrg	done
97419d0ccd10Smrg	deplibs=$tmp_deplibs
97427914d74bSmrg
9743e169010aSmrg	if test -n "$convenience"; then
9744e169010aSmrg	  if test -n "$whole_archive_flag_spec" &&
97459d0ccd10Smrg	    test yes = "$compiler_needs_object" &&
9746e169010aSmrg	    test -z "$libobjs"; then
9747e169010aSmrg	    # extract the archives, so we have objects to list.
9748e169010aSmrg	    # TODO: could optimize this to just extract one archive.
9749e169010aSmrg	    whole_archive_flag_spec=
9750e169010aSmrg	  fi
9751e169010aSmrg	  if test -n "$whole_archive_flag_spec"; then
9752e169010aSmrg	    save_libobjs=$libobjs
9753e169010aSmrg	    eval libobjs=\"\$libobjs $whole_archive_flag_spec\"
9754e169010aSmrg	    test "X$libobjs" = "X " && libobjs=
9755e169010aSmrg	  else
97569d0ccd10Smrg	    gentop=$output_objdir/${outputname}x
9757c63293b5Smrg	    func_append generated " $gentop"
97587914d74bSmrg
9759e169010aSmrg	    func_extract_archives $gentop $convenience
9760c63293b5Smrg	    func_append libobjs " $func_extract_archives_result"
9761e169010aSmrg	    test "X$libobjs" = "X " && libobjs=
9762e169010aSmrg	  fi
9763e169010aSmrg	fi
97647914d74bSmrg
97659d0ccd10Smrg	if test yes = "$thread_safe" && test -n "$thread_safe_flag_spec"; then
9766e169010aSmrg	  eval flag=\"$thread_safe_flag_spec\"
9767c63293b5Smrg	  func_append linker_flags " $flag"
9768e169010aSmrg	fi
97697914d74bSmrg
9770e169010aSmrg	# Make a backup of the uninstalled library when relinking
97719d0ccd10Smrg	if test relink = "$opt_mode"; then
9772e169010aSmrg	  $opt_dry_run || eval '(cd $output_objdir && $RM ${realname}U && $MV $realname ${realname}U)' || exit $?
97737914d74bSmrg	fi
97747914d74bSmrg
9775e169010aSmrg	# Do each of the archive commands.
97769d0ccd10Smrg	if test yes = "$module" && test -n "$module_cmds"; then
9777e169010aSmrg	  if test -n "$export_symbols" && test -n "$module_expsym_cmds"; then
9778e169010aSmrg	    eval test_cmds=\"$module_expsym_cmds\"
9779e169010aSmrg	    cmds=$module_expsym_cmds
9780e169010aSmrg	  else
9781e169010aSmrg	    eval test_cmds=\"$module_cmds\"
9782e169010aSmrg	    cmds=$module_cmds
9783e169010aSmrg	  fi
9784e169010aSmrg	else
9785e169010aSmrg	  if test -n "$export_symbols" && test -n "$archive_expsym_cmds"; then
9786e169010aSmrg	    eval test_cmds=\"$archive_expsym_cmds\"
9787e169010aSmrg	    cmds=$archive_expsym_cmds
9788e169010aSmrg	  else
9789e169010aSmrg	    eval test_cmds=\"$archive_cmds\"
9790e169010aSmrg	    cmds=$archive_cmds
9791e169010aSmrg	  fi
97927914d74bSmrg	fi
97937914d74bSmrg
97949d0ccd10Smrg	if test : != "$skipped_export" &&
9795e169010aSmrg	   func_len " $test_cmds" &&
9796e169010aSmrg	   len=$func_len_result &&
9797e169010aSmrg	   test "$len" -lt "$max_cmd_len" || test "$max_cmd_len" -le -1; then
9798e169010aSmrg	  :
9799e169010aSmrg	else
9800e169010aSmrg	  # The command line is too long to link in one step, link piecewise
9801e169010aSmrg	  # or, if using GNU ld and skipped_export is not :, use a linker
9802e169010aSmrg	  # script.
98037914d74bSmrg
9804e169010aSmrg	  # Save the value of $output and $libobjs because we want to
9805e169010aSmrg	  # use them later.  If we have whole_archive_flag_spec, we
9806e169010aSmrg	  # want to use save_libobjs as it was before
9807e169010aSmrg	  # whole_archive_flag_spec was expanded, because we can't
9808e169010aSmrg	  # assume the linker understands whole_archive_flag_spec.
9809e169010aSmrg	  # This may have to be revisited, in case too many
9810e169010aSmrg	  # convenience libraries get linked in and end up exceeding
9811e169010aSmrg	  # the spec.
9812e169010aSmrg	  if test -z "$convenience" || test -z "$whole_archive_flag_spec"; then
9813e169010aSmrg	    save_libobjs=$libobjs
9814e169010aSmrg	  fi
9815e169010aSmrg	  save_output=$output
9816e8ead290Smrg	  func_basename "$output"
9817e8ead290Smrg	  output_la=$func_basename_result
98187914d74bSmrg
9819e169010aSmrg	  # Clear the reloadable object creation command queue and
9820e169010aSmrg	  # initialize k to one.
9821e169010aSmrg	  test_cmds=
9822e169010aSmrg	  concat_cmds=
9823e169010aSmrg	  objlist=
9824e169010aSmrg	  last_robj=
9825e169010aSmrg	  k=1
98267914d74bSmrg
98279d0ccd10Smrg	  if test -n "$save_libobjs" && test : != "$skipped_export" && test yes = "$with_gnu_ld"; then
98289d0ccd10Smrg	    output=$output_objdir/$output_la.lnkscript
9829e169010aSmrg	    func_verbose "creating GNU ld script: $output"
9830e8ead290Smrg	    echo 'INPUT (' > $output
9831e169010aSmrg	    for obj in $save_libobjs
9832e169010aSmrg	    do
9833c63293b5Smrg	      func_to_tool_file "$obj"
9834c63293b5Smrg	      $ECHO "$func_to_tool_file_result" >> $output
9835e169010aSmrg	    done
9836e8ead290Smrg	    echo ')' >> $output
9837c63293b5Smrg	    func_append delfiles " $output"
9838c63293b5Smrg	    func_to_tool_file "$output"
9839c63293b5Smrg	    output=$func_to_tool_file_result
98409d0ccd10Smrg	  elif test -n "$save_libobjs" && test : != "$skipped_export" && test -n "$file_list_spec"; then
98419d0ccd10Smrg	    output=$output_objdir/$output_la.lnk
9842e169010aSmrg	    func_verbose "creating linker input file list: $output"
9843e169010aSmrg	    : > $output
9844e169010aSmrg	    set x $save_libobjs
9845e169010aSmrg	    shift
9846e169010aSmrg	    firstobj=
98479d0ccd10Smrg	    if test yes = "$compiler_needs_object"; then
9848e169010aSmrg	      firstobj="$1 "
9849e169010aSmrg	      shift
9850e169010aSmrg	    fi
9851e169010aSmrg	    for obj
9852e169010aSmrg	    do
9853c63293b5Smrg	      func_to_tool_file "$obj"
9854c63293b5Smrg	      $ECHO "$func_to_tool_file_result" >> $output
9855e169010aSmrg	    done
9856c63293b5Smrg	    func_append delfiles " $output"
9857c63293b5Smrg	    func_to_tool_file "$output"
9858c63293b5Smrg	    output=$firstobj\"$file_list_spec$func_to_tool_file_result\"
9859e169010aSmrg	  else
9860e169010aSmrg	    if test -n "$save_libobjs"; then
9861e169010aSmrg	      func_verbose "creating reloadable object files..."
98629d0ccd10Smrg	      output=$output_objdir/$output_la-$k.$objext
9863e169010aSmrg	      eval test_cmds=\"$reload_cmds\"
9864e169010aSmrg	      func_len " $test_cmds"
9865e169010aSmrg	      len0=$func_len_result
9866e169010aSmrg	      len=$len0
9867e169010aSmrg
9868e169010aSmrg	      # Loop over the list of objects to be linked.
9869e169010aSmrg	      for obj in $save_libobjs
9870e169010aSmrg	      do
9871e169010aSmrg		func_len " $obj"
9872e169010aSmrg		func_arith $len + $func_len_result
9873e169010aSmrg		len=$func_arith_result
98749d0ccd10Smrg		if test -z "$objlist" ||
9875e169010aSmrg		   test "$len" -lt "$max_cmd_len"; then
9876e169010aSmrg		  func_append objlist " $obj"
9877e169010aSmrg		else
9878e169010aSmrg		  # The command $test_cmds is almost too long, add a
9879e169010aSmrg		  # command to the queue.
98809d0ccd10Smrg		  if test 1 -eq "$k"; then
9881e169010aSmrg		    # The first file doesn't have a previous command to add.
9882e8ead290Smrg		    reload_objs=$objlist
9883e8ead290Smrg		    eval concat_cmds=\"$reload_cmds\"
9884e169010aSmrg		  else
9885e169010aSmrg		    # All subsequent reloadable object files will link in
9886e169010aSmrg		    # the last one created.
9887e8ead290Smrg		    reload_objs="$objlist $last_robj"
9888e8ead290Smrg		    eval concat_cmds=\"\$concat_cmds~$reload_cmds~\$RM $last_robj\"
9889e169010aSmrg		  fi
98909d0ccd10Smrg		  last_robj=$output_objdir/$output_la-$k.$objext
9891e169010aSmrg		  func_arith $k + 1
9892e169010aSmrg		  k=$func_arith_result
98939d0ccd10Smrg		  output=$output_objdir/$output_la-$k.$objext
9894e8ead290Smrg		  objlist=" $obj"
9895e169010aSmrg		  func_len " $last_robj"
9896e169010aSmrg		  func_arith $len0 + $func_len_result
9897e169010aSmrg		  len=$func_arith_result
9898e169010aSmrg		fi
9899e169010aSmrg	      done
9900e169010aSmrg	      # Handle the remaining objects by creating one last
9901e169010aSmrg	      # reloadable object file.  All subsequent reloadable object
9902e169010aSmrg	      # files will link in the last one created.
9903e169010aSmrg	      test -z "$concat_cmds" || concat_cmds=$concat_cmds~
9904e8ead290Smrg	      reload_objs="$objlist $last_robj"
99059d0ccd10Smrg	      eval concat_cmds=\"\$concat_cmds$reload_cmds\"
9906e169010aSmrg	      if test -n "$last_robj"; then
99079d0ccd10Smrg	        eval concat_cmds=\"\$concat_cmds~\$RM $last_robj\"
9908e169010aSmrg	      fi
9909c63293b5Smrg	      func_append delfiles " $output"
99107914d74bSmrg
9911e169010aSmrg	    else
9912e169010aSmrg	      output=
9913e169010aSmrg	    fi
99147914d74bSmrg
99159d0ccd10Smrg	    ${skipped_export-false} && {
99169d0ccd10Smrg	      func_verbose "generating symbol list for '$libname.la'"
99179d0ccd10Smrg	      export_symbols=$output_objdir/$libname.exp
9918e169010aSmrg	      $opt_dry_run || $RM $export_symbols
9919e169010aSmrg	      libobjs=$output
9920e169010aSmrg	      # Append the command to create the export file.
9921e169010aSmrg	      test -z "$concat_cmds" || concat_cmds=$concat_cmds~
9922e169010aSmrg	      eval concat_cmds=\"\$concat_cmds$export_symbols_cmds\"
9923e169010aSmrg	      if test -n "$last_robj"; then
9924e169010aSmrg		eval concat_cmds=\"\$concat_cmds~\$RM $last_robj\"
9925e169010aSmrg	      fi
99269d0ccd10Smrg	    }
99277914d74bSmrg
9928e169010aSmrg	    test -n "$save_libobjs" &&
9929e169010aSmrg	      func_verbose "creating a temporary reloadable object file: $output"
99307914d74bSmrg
9931e169010aSmrg	    # Loop through the commands generated above and execute them.
99329d0ccd10Smrg	    save_ifs=$IFS; IFS='~'
9933e169010aSmrg	    for cmd in $concat_cmds; do
99349d0ccd10Smrg	      IFS=$save_ifs
99359d0ccd10Smrg	      $opt_quiet || {
9936e169010aSmrg		  func_quote_for_expand "$cmd"
9937e169010aSmrg		  eval "func_echo $func_quote_for_expand_result"
9938e169010aSmrg	      }
9939e169010aSmrg	      $opt_dry_run || eval "$cmd" || {
9940e169010aSmrg		lt_exit=$?
9941e169010aSmrg
9942e169010aSmrg		# Restore the uninstalled library and exit
99439d0ccd10Smrg		if test relink = "$opt_mode"; then
9944e169010aSmrg		  ( cd "$output_objdir" && \
9945e169010aSmrg		    $RM "${realname}T" && \
9946e169010aSmrg		    $MV "${realname}U" "$realname" )
9947e169010aSmrg		fi
99487914d74bSmrg
9949e169010aSmrg		exit $lt_exit
9950e169010aSmrg	      }
9951e169010aSmrg	    done
99529d0ccd10Smrg	    IFS=$save_ifs
9953e169010aSmrg
9954e169010aSmrg	    if test -n "$export_symbols_regex" && ${skipped_export-false}; then
9955e169010aSmrg	      func_show_eval '$EGREP -e "$export_symbols_regex" "$export_symbols" > "${export_symbols}T"'
9956e169010aSmrg	      func_show_eval '$MV "${export_symbols}T" "$export_symbols"'
99577914d74bSmrg	    fi
99587914d74bSmrg	  fi
99597914d74bSmrg
99609d0ccd10Smrg          ${skipped_export-false} && {
9961e169010aSmrg	    if test -n "$export_symbols" && test -n "$include_expsyms"; then
99629d0ccd10Smrg	      tmp_export_symbols=$export_symbols
99639d0ccd10Smrg	      test -n "$orig_export_symbols" && tmp_export_symbols=$orig_export_symbols
9964e8ead290Smrg	      $opt_dry_run || eval '$ECHO "$include_expsyms" | $SP2NL >> "$tmp_export_symbols"'
9965e169010aSmrg	    fi
99667914d74bSmrg
9967e169010aSmrg	    if test -n "$orig_export_symbols"; then
9968e169010aSmrg	      # The given exports_symbols file has to be filtered, so filter it.
99699d0ccd10Smrg	      func_verbose "filter symbol list for '$libname.la' to tag DATA exports"
9970e169010aSmrg	      # FIXME: $output_objdir/$libname.filter potentially contains lots of
99719d0ccd10Smrg	      # 's' commands, which not all seds can handle. GNU sed should be fine
9972e169010aSmrg	      # though. Also, the filter scales superlinearly with the number of
9973e169010aSmrg	      # global variables. join(1) would be nice here, but unfortunately
9974e169010aSmrg	      # isn't a blessed tool.
9975e169010aSmrg	      $opt_dry_run || $SED -e '/[ ,]DATA/!d;s,\(.*\)\([ \,].*\),s|^\1$|\1\2|,' < $export_symbols > $output_objdir/$libname.filter
9976c63293b5Smrg	      func_append delfiles " $export_symbols $output_objdir/$libname.filter"
9977e169010aSmrg	      export_symbols=$output_objdir/$libname.def
9978e169010aSmrg	      $opt_dry_run || $SED -f $output_objdir/$libname.filter < $orig_export_symbols > $export_symbols
9979e169010aSmrg	    fi
99809d0ccd10Smrg	  }
99817914d74bSmrg
9982e169010aSmrg	  libobjs=$output
9983e169010aSmrg	  # Restore the value of output.
9984e169010aSmrg	  output=$save_output
99857914d74bSmrg
9986e169010aSmrg	  if test -n "$convenience" && test -n "$whole_archive_flag_spec"; then
9987e169010aSmrg	    eval libobjs=\"\$libobjs $whole_archive_flag_spec\"
9988e169010aSmrg	    test "X$libobjs" = "X " && libobjs=
9989e169010aSmrg	  fi
9990e169010aSmrg	  # Expand the library linking commands again to reset the
9991e169010aSmrg	  # value of $libobjs for piecewise linking.
9992e169010aSmrg
9993e169010aSmrg	  # Do each of the archive commands.
99949d0ccd10Smrg	  if test yes = "$module" && test -n "$module_cmds"; then
9995e169010aSmrg	    if test -n "$export_symbols" && test -n "$module_expsym_cmds"; then
9996e169010aSmrg	      cmds=$module_expsym_cmds
99977914d74bSmrg	    else
9998e169010aSmrg	      cmds=$module_cmds
99997914d74bSmrg	    fi
100007914d74bSmrg	  else
10001e169010aSmrg	    if test -n "$export_symbols" && test -n "$archive_expsym_cmds"; then
10002e169010aSmrg	      cmds=$archive_expsym_cmds
10003e169010aSmrg	    else
10004e169010aSmrg	      cmds=$archive_cmds
10005e169010aSmrg	    fi
100067914d74bSmrg	  fi
100077914d74bSmrg	fi
100087914d74bSmrg
10009e169010aSmrg	if test -n "$delfiles"; then
10010e169010aSmrg	  # Append the command to remove temporary files to $cmds.
10011e169010aSmrg	  eval cmds=\"\$cmds~\$RM $delfiles\"
10012e169010aSmrg	fi
100137914d74bSmrg
10014e169010aSmrg	# Add any objects from preloaded convenience libraries
10015e169010aSmrg	if test -n "$dlprefiles"; then
100169d0ccd10Smrg	  gentop=$output_objdir/${outputname}x
10017c63293b5Smrg	  func_append generated " $gentop"
100187914d74bSmrg
10019e169010aSmrg	  func_extract_archives $gentop $dlprefiles
10020c63293b5Smrg	  func_append libobjs " $func_extract_archives_result"
10021e169010aSmrg	  test "X$libobjs" = "X " && libobjs=
100227914d74bSmrg	fi
100237914d74bSmrg
100249d0ccd10Smrg	save_ifs=$IFS; IFS='~'
10025e169010aSmrg	for cmd in $cmds; do
100269d0ccd10Smrg	  IFS=$sp$nl
10027e169010aSmrg	  eval cmd=\"$cmd\"
100289d0ccd10Smrg	  IFS=$save_ifs
100299d0ccd10Smrg	  $opt_quiet || {
10030e169010aSmrg	    func_quote_for_expand "$cmd"
10031e169010aSmrg	    eval "func_echo $func_quote_for_expand_result"
10032e169010aSmrg	  }
10033e169010aSmrg	  $opt_dry_run || eval "$cmd" || {
10034e169010aSmrg	    lt_exit=$?
100357914d74bSmrg
10036e169010aSmrg	    # Restore the uninstalled library and exit
100379d0ccd10Smrg	    if test relink = "$opt_mode"; then
10038e169010aSmrg	      ( cd "$output_objdir" && \
10039e169010aSmrg	        $RM "${realname}T" && \
10040e169010aSmrg		$MV "${realname}U" "$realname" )
10041e169010aSmrg	    fi
10042e169010aSmrg
10043e169010aSmrg	    exit $lt_exit
10044e169010aSmrg	  }
10045e169010aSmrg	done
100469d0ccd10Smrg	IFS=$save_ifs
10047e169010aSmrg
10048e169010aSmrg	# Restore the uninstalled library and exit
100499d0ccd10Smrg	if test relink = "$opt_mode"; then
10050e169010aSmrg	  $opt_dry_run || eval '(cd $output_objdir && $RM ${realname}T && $MV $realname ${realname}T && $MV ${realname}U $realname)' || exit $?
10051e169010aSmrg
10052e169010aSmrg	  if test -n "$convenience"; then
10053e169010aSmrg	    if test -z "$whole_archive_flag_spec"; then
10054e169010aSmrg	      func_show_eval '${RM}r "$gentop"'
100557914d74bSmrg	    fi
100567914d74bSmrg	  fi
100577914d74bSmrg
10058e169010aSmrg	  exit $EXIT_SUCCESS
10059e169010aSmrg	fi
100607914d74bSmrg
10061e169010aSmrg	# Create links to the real library.
10062e169010aSmrg	for linkname in $linknames; do
10063e169010aSmrg	  if test "$realname" != "$linkname"; then
10064e169010aSmrg	    func_show_eval '(cd "$output_objdir" && $RM "$linkname" && $LN_S "$realname" "$linkname")' 'exit $?'
10065e169010aSmrg	  fi
10066e169010aSmrg	done
10067e169010aSmrg
10068e169010aSmrg	# If -module or -export-dynamic was specified, set the dlname.
100699d0ccd10Smrg	if test yes = "$module" || test yes = "$export_dynamic"; then
10070e169010aSmrg	  # On all known operating systems, these are identical.
100719d0ccd10Smrg	  dlname=$soname
10072e169010aSmrg	fi
10073e169010aSmrg      fi
10074e169010aSmrg      ;;
10075e169010aSmrg
10076e169010aSmrg    obj)
100779d0ccd10Smrg      if test -n "$dlfiles$dlprefiles" || test no != "$dlself"; then
100789d0ccd10Smrg	func_warning "'-dlopen' is ignored for objects"
10079e169010aSmrg      fi
10080e169010aSmrg
10081e169010aSmrg      case " $deplibs" in
10082e169010aSmrg      *\ -l* | *\ -L*)
100839d0ccd10Smrg	func_warning "'-l' and '-L' are ignored for objects" ;;
10084e169010aSmrg      esac
10085e169010aSmrg
10086e169010aSmrg      test -n "$rpath" && \
100879d0ccd10Smrg	func_warning "'-rpath' is ignored for objects"
10088e169010aSmrg
10089e169010aSmrg      test -n "$xrpath" && \
100909d0ccd10Smrg	func_warning "'-R' is ignored for objects"
10091e169010aSmrg
10092e169010aSmrg      test -n "$vinfo" && \
100939d0ccd10Smrg	func_warning "'-version-info' is ignored for objects"
10094e169010aSmrg
10095e169010aSmrg      test -n "$release" && \
100969d0ccd10Smrg	func_warning "'-release' is ignored for objects"
10097e169010aSmrg
10098e169010aSmrg      case $output in
10099e169010aSmrg      *.lo)
10100e169010aSmrg	test -n "$objs$old_deplibs" && \
101019d0ccd10Smrg	  func_fatal_error "cannot build library object '$output' from non-libtool objects"
10102e169010aSmrg
10103e169010aSmrg	libobj=$output
10104e169010aSmrg	func_lo2o "$libobj"
10105e169010aSmrg	obj=$func_lo2o_result
10106e169010aSmrg	;;
10107e169010aSmrg      *)
10108e169010aSmrg	libobj=
101099d0ccd10Smrg	obj=$output
10110e169010aSmrg	;;
10111e169010aSmrg      esac
10112e169010aSmrg
10113e169010aSmrg      # Delete the old objects.
10114e169010aSmrg      $opt_dry_run || $RM $obj $libobj
10115e169010aSmrg
10116e169010aSmrg      # Objects from convenience libraries.  This assumes
10117e169010aSmrg      # single-version convenience libraries.  Whenever we create
10118e169010aSmrg      # different ones for PIC/non-PIC, this we'll have to duplicate
10119e169010aSmrg      # the extraction.
10120e169010aSmrg      reload_conv_objs=
10121e169010aSmrg      gentop=
101229d0ccd10Smrg      # if reload_cmds runs $LD directly, get rid of -Wl from
101239d0ccd10Smrg      # whole_archive_flag_spec and hope we can get by with turning comma
101249d0ccd10Smrg      # into space.
101259d0ccd10Smrg      case $reload_cmds in
101269d0ccd10Smrg        *\$LD[\ \$]*) wl= ;;
101279d0ccd10Smrg      esac
10128e169010aSmrg      if test -n "$convenience"; then
10129e169010aSmrg	if test -n "$whole_archive_flag_spec"; then
10130e169010aSmrg	  eval tmp_whole_archive_flags=\"$whole_archive_flag_spec\"
101319d0ccd10Smrg	  test -n "$wl" || tmp_whole_archive_flags=`$ECHO "$tmp_whole_archive_flags" | $SED 's|,| |g'`
101329d0ccd10Smrg	  reload_conv_objs=$reload_objs\ $tmp_whole_archive_flags
10133e169010aSmrg	else
101349d0ccd10Smrg	  gentop=$output_objdir/${obj}x
10135c63293b5Smrg	  func_append generated " $gentop"
10136e169010aSmrg
10137e169010aSmrg	  func_extract_archives $gentop $convenience
10138e169010aSmrg	  reload_conv_objs="$reload_objs $func_extract_archives_result"
10139e169010aSmrg	fi
10140e169010aSmrg      fi
101417914d74bSmrg
10142c63293b5Smrg      # If we're not building shared, we need to use non_pic_objs
101439d0ccd10Smrg      test yes = "$build_libtool_libs" || libobjs=$non_pic_objects
10144c63293b5Smrg
10145e169010aSmrg      # Create the old-style object.
101469d0ccd10Smrg      reload_objs=$objs$old_deplibs' '`$ECHO "$libobjs" | $SP2NL | $SED "/\.$libext$/d; /\.lib$/d; $lo2o" | $NL2SP`' '$reload_conv_objs
101477914d74bSmrg
101489d0ccd10Smrg      output=$obj
10149e169010aSmrg      func_execute_cmds "$reload_cmds" 'exit $?'
101507914d74bSmrg
10151e169010aSmrg      # Exit if we aren't doing a library object file.
10152e169010aSmrg      if test -z "$libobj"; then
10153e169010aSmrg	if test -n "$gentop"; then
10154e169010aSmrg	  func_show_eval '${RM}r "$gentop"'
10155e169010aSmrg	fi
101567914d74bSmrg
10157e169010aSmrg	exit $EXIT_SUCCESS
10158e169010aSmrg      fi
101597914d74bSmrg
101609d0ccd10Smrg      test yes = "$build_libtool_libs" || {
10161e169010aSmrg	if test -n "$gentop"; then
10162e169010aSmrg	  func_show_eval '${RM}r "$gentop"'
10163e169010aSmrg	fi
101647914d74bSmrg
10165e169010aSmrg	# Create an invalid libtool object if no PIC, so that we don't
10166e169010aSmrg	# accidentally link it into a program.
10167e169010aSmrg	# $show "echo timestamp > $libobj"
10168e169010aSmrg	# $opt_dry_run || eval "echo timestamp > $libobj" || exit $?
10169e169010aSmrg	exit $EXIT_SUCCESS
101709d0ccd10Smrg      }
101717914d74bSmrg
101729d0ccd10Smrg      if test -n "$pic_flag" || test default != "$pic_mode"; then
10173e169010aSmrg	# Only do commands if we really have different PIC objects.
10174e169010aSmrg	reload_objs="$libobjs $reload_conv_objs"
101759d0ccd10Smrg	output=$libobj
10176e169010aSmrg	func_execute_cmds "$reload_cmds" 'exit $?'
101777914d74bSmrg      fi
101787914d74bSmrg
10179e169010aSmrg      if test -n "$gentop"; then
10180e169010aSmrg	func_show_eval '${RM}r "$gentop"'
10181e169010aSmrg      fi
101827914d74bSmrg
10183e169010aSmrg      exit $EXIT_SUCCESS
10184e169010aSmrg      ;;
101857914d74bSmrg
10186e169010aSmrg    prog)
10187e169010aSmrg      case $host in
10188e169010aSmrg	*cygwin*) func_stripname '' '.exe' "$output"
10189e169010aSmrg	          output=$func_stripname_result.exe;;
101907914d74bSmrg      esac
10191e169010aSmrg      test -n "$vinfo" && \
101929d0ccd10Smrg	func_warning "'-version-info' is ignored for programs"
101937914d74bSmrg
10194e169010aSmrg      test -n "$release" && \
101959d0ccd10Smrg	func_warning "'-release' is ignored for programs"
101967914d74bSmrg
101979d0ccd10Smrg      $preload \
101989d0ccd10Smrg	&& test unknown,unknown,unknown = "$dlopen_support,$dlopen_self,$dlopen_self_static" \
101999d0ccd10Smrg	&& func_warning "'LT_INIT([dlopen])' not used. Assuming no dlopen support."
102007914d74bSmrg
10201e169010aSmrg      case $host in
10202e169010aSmrg      *-*-rhapsody* | *-*-darwin1.[012])
10203e169010aSmrg	# On Rhapsody replace the C library is the System framework
10204e8ead290Smrg	compile_deplibs=`$ECHO " $compile_deplibs" | $SED 's/ -lc / System.ltframework /'`
10205e8ead290Smrg	finalize_deplibs=`$ECHO " $finalize_deplibs" | $SED 's/ -lc / System.ltframework /'`
102067914d74bSmrg	;;
102077914d74bSmrg      esac
102087914d74bSmrg
10209e169010aSmrg      case $host in
10210e169010aSmrg      *-*-darwin*)
10211e169010aSmrg	# Don't allow lazy linking, it breaks C++ global constructors
10212e169010aSmrg	# But is supposedly fixed on 10.4 or later (yay!).
102139d0ccd10Smrg	if test CXX = "$tagname"; then
10214e169010aSmrg	  case ${MACOSX_DEPLOYMENT_TARGET-10.0} in
10215e169010aSmrg	    10.[0123])
102169d0ccd10Smrg	      func_append compile_command " $wl-bind_at_load"
102179d0ccd10Smrg	      func_append finalize_command " $wl-bind_at_load"
10218e169010aSmrg	    ;;
10219e169010aSmrg	  esac
10220e169010aSmrg	fi
10221e169010aSmrg	# Time to change all our "foo.ltframework" stuff back to "-framework foo"
10222e8ead290Smrg	compile_deplibs=`$ECHO " $compile_deplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'`
10223e8ead290Smrg	finalize_deplibs=`$ECHO " $finalize_deplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'`
102247914d74bSmrg	;;
102257914d74bSmrg      esac
102267914d74bSmrg
102277914d74bSmrg
10228e169010aSmrg      # move library search paths that coincide with paths to not yet
10229e169010aSmrg      # installed libraries to the beginning of the library search list
10230e169010aSmrg      new_libs=
10231e169010aSmrg      for path in $notinst_path; do
10232e169010aSmrg	case " $new_libs " in
10233e169010aSmrg	*" -L$path/$objdir "*) ;;
102347914d74bSmrg	*)
10235e169010aSmrg	  case " $compile_deplibs " in
10236e169010aSmrg	  *" -L$path/$objdir "*)
10237c63293b5Smrg	    func_append new_libs " -L$path/$objdir" ;;
10238e169010aSmrg	  esac
102397914d74bSmrg	  ;;
102407914d74bSmrg	esac
102417914d74bSmrg      done
10242e169010aSmrg      for deplib in $compile_deplibs; do
10243e169010aSmrg	case $deplib in
10244e169010aSmrg	-L*)
10245e169010aSmrg	  case " $new_libs " in
10246e169010aSmrg	  *" $deplib "*) ;;
10247c63293b5Smrg	  *) func_append new_libs " $deplib" ;;
10248e169010aSmrg	  esac
10249e169010aSmrg	  ;;
10250c63293b5Smrg	*) func_append new_libs " $deplib" ;;
10251e169010aSmrg	esac
10252e169010aSmrg      done
102539d0ccd10Smrg      compile_deplibs=$new_libs
102547914d74bSmrg
102557914d74bSmrg
10256c63293b5Smrg      func_append compile_command " $compile_deplibs"
10257c63293b5Smrg      func_append finalize_command " $finalize_deplibs"
102587914d74bSmrg
10259e169010aSmrg      if test -n "$rpath$xrpath"; then
10260e169010aSmrg	# If the user specified any rpath flags, then add them.
10261e169010aSmrg	for libdir in $rpath $xrpath; do
10262e169010aSmrg	  # This is the magic to use -rpath.
10263e169010aSmrg	  case "$finalize_rpath " in
10264e169010aSmrg	  *" $libdir "*) ;;
10265c63293b5Smrg	  *) func_append finalize_rpath " $libdir" ;;
10266e169010aSmrg	  esac
10267e169010aSmrg	done
10268e169010aSmrg      fi
102697914d74bSmrg
10270e169010aSmrg      # Now hardcode the library paths
10271e169010aSmrg      rpath=
10272e169010aSmrg      hardcode_libdirs=
10273e169010aSmrg      for libdir in $compile_rpath $finalize_rpath; do
10274e169010aSmrg	if test -n "$hardcode_libdir_flag_spec"; then
10275e169010aSmrg	  if test -n "$hardcode_libdir_separator"; then
10276e169010aSmrg	    if test -z "$hardcode_libdirs"; then
102779d0ccd10Smrg	      hardcode_libdirs=$libdir
10278e169010aSmrg	    else
10279e169010aSmrg	      # Just accumulate the unique libdirs.
10280e169010aSmrg	      case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in
10281e169010aSmrg	      *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*)
10282e169010aSmrg		;;
10283e169010aSmrg	      *)
10284c63293b5Smrg		func_append hardcode_libdirs "$hardcode_libdir_separator$libdir"
10285e169010aSmrg		;;
10286e169010aSmrg	      esac
10287e169010aSmrg	    fi
10288e169010aSmrg	  else
10289e169010aSmrg	    eval flag=\"$hardcode_libdir_flag_spec\"
10290c63293b5Smrg	    func_append rpath " $flag"
10291e169010aSmrg	  fi
10292e169010aSmrg	elif test -n "$runpath_var"; then
10293e169010aSmrg	  case "$perm_rpath " in
102947914d74bSmrg	  *" $libdir "*) ;;
10295c63293b5Smrg	  *) func_append perm_rpath " $libdir" ;;
102967914d74bSmrg	  esac
10297e169010aSmrg	fi
10298e169010aSmrg	case $host in
10299e169010aSmrg	*-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-cegcc*)
103009d0ccd10Smrg	  testbindir=`$ECHO "$libdir" | $SED -e 's*/lib$*/bin*'`
10301e169010aSmrg	  case :$dllsearchpath: in
10302e169010aSmrg	  *":$libdir:"*) ;;
10303e169010aSmrg	  ::) dllsearchpath=$libdir;;
10304c63293b5Smrg	  *) func_append dllsearchpath ":$libdir";;
10305e169010aSmrg	  esac
10306e169010aSmrg	  case :$dllsearchpath: in
10307e169010aSmrg	  *":$testbindir:"*) ;;
10308e169010aSmrg	  ::) dllsearchpath=$testbindir;;
10309c63293b5Smrg	  *) func_append dllsearchpath ":$testbindir";;
10310e169010aSmrg	  esac
10311e169010aSmrg	  ;;
10312e169010aSmrg	esac
10313e169010aSmrg      done
10314e169010aSmrg      # Substitute the hardcoded libdirs into the rpath.
10315e169010aSmrg      if test -n "$hardcode_libdir_separator" &&
10316e169010aSmrg	 test -n "$hardcode_libdirs"; then
103179d0ccd10Smrg	libdir=$hardcode_libdirs
10318e169010aSmrg	eval rpath=\" $hardcode_libdir_flag_spec\"
10319e169010aSmrg      fi
103209d0ccd10Smrg      compile_rpath=$rpath
10321e169010aSmrg
10322e169010aSmrg      rpath=
10323e169010aSmrg      hardcode_libdirs=
10324e169010aSmrg      for libdir in $finalize_rpath; do
10325e169010aSmrg	if test -n "$hardcode_libdir_flag_spec"; then
10326e169010aSmrg	  if test -n "$hardcode_libdir_separator"; then
10327e169010aSmrg	    if test -z "$hardcode_libdirs"; then
103289d0ccd10Smrg	      hardcode_libdirs=$libdir
10329e169010aSmrg	    else
10330e169010aSmrg	      # Just accumulate the unique libdirs.
10331e169010aSmrg	      case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in
10332e169010aSmrg	      *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*)
10333e169010aSmrg		;;
10334e169010aSmrg	      *)
10335c63293b5Smrg		func_append hardcode_libdirs "$hardcode_libdir_separator$libdir"
10336e169010aSmrg		;;
10337e169010aSmrg	      esac
10338e169010aSmrg	    fi
10339e169010aSmrg	  else
10340e169010aSmrg	    eval flag=\"$hardcode_libdir_flag_spec\"
10341c63293b5Smrg	    func_append rpath " $flag"
10342e169010aSmrg	  fi
10343e169010aSmrg	elif test -n "$runpath_var"; then
10344e169010aSmrg	  case "$finalize_perm_rpath " in
103457914d74bSmrg	  *" $libdir "*) ;;
10346c63293b5Smrg	  *) func_append finalize_perm_rpath " $libdir" ;;
103477914d74bSmrg	  esac
103487914d74bSmrg	fi
10349e169010aSmrg      done
10350e169010aSmrg      # Substitute the hardcoded libdirs into the rpath.
10351e169010aSmrg      if test -n "$hardcode_libdir_separator" &&
10352e169010aSmrg	 test -n "$hardcode_libdirs"; then
103539d0ccd10Smrg	libdir=$hardcode_libdirs
10354e169010aSmrg	eval rpath=\" $hardcode_libdir_flag_spec\"
10355e169010aSmrg      fi
103569d0ccd10Smrg      finalize_rpath=$rpath
103577914d74bSmrg
103589d0ccd10Smrg      if test -n "$libobjs" && test yes = "$build_old_libs"; then
10359e169010aSmrg	# Transform all the library objects into standard objects.
10360e8ead290Smrg	compile_command=`$ECHO "$compile_command" | $SP2NL | $SED "$lo2o" | $NL2SP`
10361e8ead290Smrg	finalize_command=`$ECHO "$finalize_command" | $SP2NL | $SED "$lo2o" | $NL2SP`
10362e169010aSmrg      fi
103637914d74bSmrg
103649d0ccd10Smrg      func_generate_dlsyms "$outputname" "@PROGRAM@" false
103657914d74bSmrg
10366e169010aSmrg      # template prelinking step
10367e169010aSmrg      if test -n "$prelink_cmds"; then
10368e169010aSmrg	func_execute_cmds "$prelink_cmds" 'exit $?'
10369e169010aSmrg      fi
103707914d74bSmrg
103719d0ccd10Smrg      wrappers_required=:
10372e169010aSmrg      case $host in
10373e8ead290Smrg      *cegcc* | *mingw32ce*)
10374e8ead290Smrg        # Disable wrappers for cegcc and mingw32ce hosts, we are cross compiling anyway.
103759d0ccd10Smrg        wrappers_required=false
10376e8ead290Smrg        ;;
10377e169010aSmrg      *cygwin* | *mingw* )
103789d0ccd10Smrg        test yes = "$build_libtool_libs" || wrappers_required=false
10379e169010aSmrg        ;;
10380e169010aSmrg      *)
103819d0ccd10Smrg        if test no = "$need_relink" || test yes != "$build_libtool_libs"; then
103829d0ccd10Smrg          wrappers_required=false
10383e169010aSmrg        fi
10384e169010aSmrg        ;;
10385e169010aSmrg      esac
103869d0ccd10Smrg      $wrappers_required || {
10387e169010aSmrg	# Replace the output file specification.
10388e8ead290Smrg	compile_command=`$ECHO "$compile_command" | $SED 's%@OUTPUT@%'"$output"'%g'`
103899d0ccd10Smrg	link_command=$compile_command$compile_rpath
103907914d74bSmrg
10391e169010aSmrg	# We have no uninstalled library dependencies, so finalize right now.
10392e169010aSmrg	exit_status=0
10393e169010aSmrg	func_show_eval "$link_command" 'exit_status=$?'
103947914d74bSmrg
10395c63293b5Smrg	if test -n "$postlink_cmds"; then
10396c63293b5Smrg	  func_to_tool_file "$output"
10397c63293b5Smrg	  postlink_cmds=`func_echo_all "$postlink_cmds" | $SED -e 's%@OUTPUT@%'"$output"'%g' -e 's%@TOOL_OUTPUT@%'"$func_to_tool_file_result"'%g'`
10398c63293b5Smrg	  func_execute_cmds "$postlink_cmds" 'exit $?'
10399c63293b5Smrg	fi
10400c63293b5Smrg
10401e169010aSmrg	# Delete the generated files.
104029d0ccd10Smrg	if test -f "$output_objdir/${outputname}S.$objext"; then
104039d0ccd10Smrg	  func_show_eval '$RM "$output_objdir/${outputname}S.$objext"'
10404e169010aSmrg	fi
104057914d74bSmrg
10406e169010aSmrg	exit $exit_status
104079d0ccd10Smrg      }
104087914d74bSmrg
10409e169010aSmrg      if test -n "$compile_shlibpath$finalize_shlibpath"; then
10410e169010aSmrg	compile_command="$shlibpath_var=\"$compile_shlibpath$finalize_shlibpath\$$shlibpath_var\" $compile_command"
10411e169010aSmrg      fi
10412e169010aSmrg      if test -n "$finalize_shlibpath"; then
10413e169010aSmrg	finalize_command="$shlibpath_var=\"$finalize_shlibpath\$$shlibpath_var\" $finalize_command"
10414e169010aSmrg      fi
104157914d74bSmrg
10416e169010aSmrg      compile_var=
10417e169010aSmrg      finalize_var=
10418e169010aSmrg      if test -n "$runpath_var"; then
10419e169010aSmrg	if test -n "$perm_rpath"; then
10420e169010aSmrg	  # We should set the runpath_var.
10421e169010aSmrg	  rpath=
10422e169010aSmrg	  for dir in $perm_rpath; do
10423c63293b5Smrg	    func_append rpath "$dir:"
104247914d74bSmrg	  done
10425e169010aSmrg	  compile_var="$runpath_var=\"$rpath\$$runpath_var\" "
104267914d74bSmrg	fi
10427e169010aSmrg	if test -n "$finalize_perm_rpath"; then
10428e169010aSmrg	  # We should set the runpath_var.
10429e169010aSmrg	  rpath=
10430e169010aSmrg	  for dir in $finalize_perm_rpath; do
10431c63293b5Smrg	    func_append rpath "$dir:"
10432e169010aSmrg	  done
10433e169010aSmrg	  finalize_var="$runpath_var=\"$rpath\$$runpath_var\" "
10434e169010aSmrg	fi
10435e169010aSmrg      fi
104367914d74bSmrg
104379d0ccd10Smrg      if test yes = "$no_install"; then
10438e169010aSmrg	# We don't need to create a wrapper script.
104399d0ccd10Smrg	link_command=$compile_var$compile_command$compile_rpath
10440e169010aSmrg	# Replace the output file specification.
10441e8ead290Smrg	link_command=`$ECHO "$link_command" | $SED 's%@OUTPUT@%'"$output"'%g'`
10442e169010aSmrg	# Delete the old output file.
10443e169010aSmrg	$opt_dry_run || $RM $output
10444e169010aSmrg	# Link the executable and exit
10445e169010aSmrg	func_show_eval "$link_command" 'exit $?'
10446c63293b5Smrg
10447c63293b5Smrg	if test -n "$postlink_cmds"; then
10448c63293b5Smrg	  func_to_tool_file "$output"
10449c63293b5Smrg	  postlink_cmds=`func_echo_all "$postlink_cmds" | $SED -e 's%@OUTPUT@%'"$output"'%g' -e 's%@TOOL_OUTPUT@%'"$func_to_tool_file_result"'%g'`
10450c63293b5Smrg	  func_execute_cmds "$postlink_cmds" 'exit $?'
10451c63293b5Smrg	fi
10452c63293b5Smrg
10453e169010aSmrg	exit $EXIT_SUCCESS
10454e169010aSmrg      fi
104557914d74bSmrg
104569d0ccd10Smrg      case $hardcode_action,$fast_install in
104579d0ccd10Smrg        relink,*)
104589d0ccd10Smrg	  # Fast installation is not supported
104599d0ccd10Smrg	  link_command=$compile_var$compile_command$compile_rpath
104609d0ccd10Smrg	  relink_command=$finalize_var$finalize_command$finalize_rpath
104617914d74bSmrg
104629d0ccd10Smrg	  func_warning "this platform does not like uninstalled shared libraries"
104639d0ccd10Smrg	  func_warning "'$output' will be relinked during installation"
104649d0ccd10Smrg	  ;;
104659d0ccd10Smrg        *,yes)
104669d0ccd10Smrg	  link_command=$finalize_var$compile_command$finalize_rpath
104679d0ccd10Smrg	  relink_command=`$ECHO "$compile_var$compile_command$compile_rpath" | $SED 's%@OUTPUT@%\$progdir/\$file%g'`
104689d0ccd10Smrg          ;;
104699d0ccd10Smrg	*,no)
104709d0ccd10Smrg	  link_command=$compile_var$compile_command$compile_rpath
104719d0ccd10Smrg	  relink_command=$finalize_var$finalize_command$finalize_rpath
104729d0ccd10Smrg          ;;
104739d0ccd10Smrg	*,needless)
104749d0ccd10Smrg	  link_command=$finalize_var$compile_command$finalize_rpath
104759d0ccd10Smrg	  relink_command=
104769d0ccd10Smrg          ;;
104779d0ccd10Smrg      esac
104787914d74bSmrg
10479e169010aSmrg      # Replace the output file specification.
10480e8ead290Smrg      link_command=`$ECHO "$link_command" | $SED 's%@OUTPUT@%'"$output_objdir/$outputname"'%g'`
104817914d74bSmrg
10482e169010aSmrg      # Delete the old output files.
10483e169010aSmrg      $opt_dry_run || $RM $output $output_objdir/$outputname $output_objdir/lt-$outputname
104847914d74bSmrg
10485e169010aSmrg      func_show_eval "$link_command" 'exit $?'
104867914d74bSmrg
10487c63293b5Smrg      if test -n "$postlink_cmds"; then
10488c63293b5Smrg	func_to_tool_file "$output_objdir/$outputname"
10489c63293b5Smrg	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'`
10490c63293b5Smrg	func_execute_cmds "$postlink_cmds" 'exit $?'
10491c63293b5Smrg      fi
10492c63293b5Smrg
10493e169010aSmrg      # Now create the wrapper script.
10494e169010aSmrg      func_verbose "creating $output"
104957914d74bSmrg
10496e169010aSmrg      # Quote the relink command for shipping.
10497e169010aSmrg      if test -n "$relink_command"; then
10498e169010aSmrg	# Preserve any variables that may affect compiler behavior
10499e169010aSmrg	for var in $variables_saved_for_relink; do
10500e169010aSmrg	  if eval test -z \"\${$var+set}\"; then
10501e169010aSmrg	    relink_command="{ test -z \"\${$var+set}\" || $lt_unset $var || { $var=; export $var; }; }; $relink_command"
10502e169010aSmrg	  elif eval var_value=\$$var; test -z "$var_value"; then
10503e169010aSmrg	    relink_command="$var=; export $var; $relink_command"
10504e169010aSmrg	  else
10505e169010aSmrg	    func_quote_for_eval "$var_value"
10506e169010aSmrg	    relink_command="$var=$func_quote_for_eval_result; export $var; $relink_command"
10507e169010aSmrg	  fi
10508e169010aSmrg	done
10509e169010aSmrg	relink_command="(cd `pwd`; $relink_command)"
10510e8ead290Smrg	relink_command=`$ECHO "$relink_command" | $SED "$sed_quote_subst"`
10511e169010aSmrg      fi
105127914d74bSmrg
10513e169010aSmrg      # Only actually do things if not in dry run mode.
10514e169010aSmrg      $opt_dry_run || {
10515e169010aSmrg	# win32 will think the script is a binary if it has
10516e169010aSmrg	# a .exe suffix, so we strip it off here.
10517e169010aSmrg	case $output in
10518e169010aSmrg	  *.exe) func_stripname '' '.exe' "$output"
10519e169010aSmrg	         output=$func_stripname_result ;;
10520e169010aSmrg	esac
10521e169010aSmrg	# test for cygwin because mv fails w/o .exe extensions
105227914d74bSmrg	case $host in
10523e169010aSmrg	  *cygwin*)
10524e169010aSmrg	    exeext=.exe
10525e169010aSmrg	    func_stripname '' '.exe' "$outputname"
10526e169010aSmrg	    outputname=$func_stripname_result ;;
10527e169010aSmrg	  *) exeext= ;;
105287914d74bSmrg	esac
10529e169010aSmrg	case $host in
10530e169010aSmrg	  *cygwin* | *mingw* )
10531e169010aSmrg	    func_dirname_and_basename "$output" "" "."
10532e169010aSmrg	    output_name=$func_basename_result
10533e169010aSmrg	    output_path=$func_dirname_result
105349d0ccd10Smrg	    cwrappersource=$output_path/$objdir/lt-$output_name.c
105359d0ccd10Smrg	    cwrapper=$output_path/$output_name.exe
10536e169010aSmrg	    $RM $cwrappersource $cwrapper
10537e169010aSmrg	    trap "$RM $cwrappersource $cwrapper; exit $EXIT_FAILURE" 1 2 15
10538e169010aSmrg
10539e169010aSmrg	    func_emit_cwrapperexe_src > $cwrappersource
10540e169010aSmrg
10541e169010aSmrg	    # The wrapper executable is built using the $host compiler,
10542e169010aSmrg	    # because it contains $host paths and files. If cross-
10543e169010aSmrg	    # compiling, it, like the target executable, must be
10544e169010aSmrg	    # executed on the $host or under an emulation environment.
10545e169010aSmrg	    $opt_dry_run || {
10546e169010aSmrg	      $LTCC $LTCFLAGS -o $cwrapper $cwrappersource
10547e169010aSmrg	      $STRIP $cwrapper
10548e169010aSmrg	    }
105497914d74bSmrg
10550e169010aSmrg	    # Now, create the wrapper script for func_source use:
10551e169010aSmrg	    func_ltwrapper_scriptname $cwrapper
10552e169010aSmrg	    $RM $func_ltwrapper_scriptname_result
10553e169010aSmrg	    trap "$RM $func_ltwrapper_scriptname_result; exit $EXIT_FAILURE" 1 2 15
10554e169010aSmrg	    $opt_dry_run || {
10555e169010aSmrg	      # note: this script will not be executed, so do not chmod.
105569d0ccd10Smrg	      if test "x$build" = "x$host"; then
10557e169010aSmrg		$cwrapper --lt-dump-script > $func_ltwrapper_scriptname_result
105587914d74bSmrg	      else
10559e169010aSmrg		func_emit_wrapper no > $func_ltwrapper_scriptname_result
105607914d74bSmrg	      fi
10561e169010aSmrg	    }
10562e169010aSmrg	  ;;
10563e169010aSmrg	  * )
10564e169010aSmrg	    $RM $output
10565e169010aSmrg	    trap "$RM $output; exit $EXIT_FAILURE" 1 2 15
105667914d74bSmrg
10567e169010aSmrg	    func_emit_wrapper no > $output
10568e169010aSmrg	    chmod +x $output
105697914d74bSmrg	  ;;
105707914d74bSmrg	esac
10571e169010aSmrg      }
10572e169010aSmrg      exit $EXIT_SUCCESS
10573e169010aSmrg      ;;
10574e169010aSmrg    esac
105757914d74bSmrg
10576e169010aSmrg    # See if we need to build an old-fashioned archive.
10577e169010aSmrg    for oldlib in $oldlibs; do
105787914d74bSmrg
105799d0ccd10Smrg      case $build_libtool_libs in
105809d0ccd10Smrg        convenience)
105819d0ccd10Smrg	  oldobjs="$libobjs_save $symfileobj"
105829d0ccd10Smrg	  addlibs=$convenience
10583e169010aSmrg	  build_libtool_libs=no
105849d0ccd10Smrg	  ;;
105859d0ccd10Smrg	module)
105869d0ccd10Smrg	  oldobjs=$libobjs_save
105879d0ccd10Smrg	  addlibs=$old_convenience
105889d0ccd10Smrg	  build_libtool_libs=no
105899d0ccd10Smrg          ;;
105909d0ccd10Smrg	*)
10591e169010aSmrg	  oldobjs="$old_deplibs $non_pic_objects"
105929d0ccd10Smrg	  $preload && test -f "$symfileobj" \
105939d0ccd10Smrg	    && func_append oldobjs " $symfileobj"
105949d0ccd10Smrg	  addlibs=$old_convenience
105959d0ccd10Smrg	  ;;
105969d0ccd10Smrg      esac
105977914d74bSmrg
10598e169010aSmrg      if test -n "$addlibs"; then
105999d0ccd10Smrg	gentop=$output_objdir/${outputname}x
10600c63293b5Smrg	func_append generated " $gentop"
106017914d74bSmrg
10602e169010aSmrg	func_extract_archives $gentop $addlibs
10603c63293b5Smrg	func_append oldobjs " $func_extract_archives_result"
10604e169010aSmrg      fi
106057914d74bSmrg
10606e169010aSmrg      # Do each command in the archive commands.
106079d0ccd10Smrg      if test -n "$old_archive_from_new_cmds" && test yes = "$build_libtool_libs"; then
10608e169010aSmrg	cmds=$old_archive_from_new_cmds
10609e169010aSmrg      else
106107914d74bSmrg
10611e169010aSmrg	# Add any objects from preloaded convenience libraries
10612e169010aSmrg	if test -n "$dlprefiles"; then
106139d0ccd10Smrg	  gentop=$output_objdir/${outputname}x
10614c63293b5Smrg	  func_append generated " $gentop"
106157914d74bSmrg
10616e169010aSmrg	  func_extract_archives $gentop $dlprefiles
10617c63293b5Smrg	  func_append oldobjs " $func_extract_archives_result"
10618e169010aSmrg	fi
106197914d74bSmrg
10620e169010aSmrg	# POSIX demands no paths to be encoded in archives.  We have
10621e169010aSmrg	# to avoid creating archives with duplicate basenames if we
10622e169010aSmrg	# might have to extract them afterwards, e.g., when creating a
10623e169010aSmrg	# static archive out of a convenience library, or when linking
10624e169010aSmrg	# the entirety of a libtool archive into another (currently
10625e169010aSmrg	# not supported by libtool).
10626e169010aSmrg	if (for obj in $oldobjs
10627e169010aSmrg	    do
10628e169010aSmrg	      func_basename "$obj"
10629e169010aSmrg	      $ECHO "$func_basename_result"
10630e169010aSmrg	    done | sort | sort -uc >/dev/null 2>&1); then
10631e169010aSmrg	  :
10632e169010aSmrg	else
10633e8ead290Smrg	  echo "copying selected object files to avoid basename conflicts..."
106349d0ccd10Smrg	  gentop=$output_objdir/${outputname}x
10635c63293b5Smrg	  func_append generated " $gentop"
10636e169010aSmrg	  func_mkdir_p "$gentop"
10637e169010aSmrg	  save_oldobjs=$oldobjs
10638e169010aSmrg	  oldobjs=
10639e169010aSmrg	  counter=1
10640e169010aSmrg	  for obj in $save_oldobjs
10641e169010aSmrg	  do
10642e169010aSmrg	    func_basename "$obj"
106439d0ccd10Smrg	    objbase=$func_basename_result
10644e169010aSmrg	    case " $oldobjs " in
10645e169010aSmrg	    " ") oldobjs=$obj ;;
10646e169010aSmrg	    *[\ /]"$objbase "*)
10647e169010aSmrg	      while :; do
10648e169010aSmrg		# Make sure we don't pick an alternate name that also
10649e169010aSmrg		# overlaps.
10650e169010aSmrg		newobj=lt$counter-$objbase
10651e169010aSmrg		func_arith $counter + 1
10652e169010aSmrg		counter=$func_arith_result
10653e169010aSmrg		case " $oldobjs " in
10654e169010aSmrg		*[\ /]"$newobj "*) ;;
10655e169010aSmrg		*) if test ! -f "$gentop/$newobj"; then break; fi ;;
10656e169010aSmrg		esac
10657e169010aSmrg	      done
10658e169010aSmrg	      func_show_eval "ln $obj $gentop/$newobj || cp $obj $gentop/$newobj"
10659c63293b5Smrg	      func_append oldobjs " $gentop/$newobj"
10660e169010aSmrg	      ;;
10661c63293b5Smrg	    *) func_append oldobjs " $obj" ;;
10662e169010aSmrg	    esac
106637914d74bSmrg	  done
106647914d74bSmrg	fi
10665e6d5e4e0Smrg	func_to_tool_file "$oldlib" func_convert_file_msys_to_w32
10666e6d5e4e0Smrg	tool_oldlib=$func_to_tool_file_result
10667e169010aSmrg	eval cmds=\"$old_archive_cmds\"
106687914d74bSmrg
10669e169010aSmrg	func_len " $cmds"
10670e169010aSmrg	len=$func_len_result
10671e169010aSmrg	if test "$len" -lt "$max_cmd_len" || test "$max_cmd_len" -le -1; then
10672e169010aSmrg	  cmds=$old_archive_cmds
10673c63293b5Smrg	elif test -n "$archiver_list_spec"; then
10674c63293b5Smrg	  func_verbose "using command file archive linking..."
10675c63293b5Smrg	  for obj in $oldobjs
10676c63293b5Smrg	  do
10677c63293b5Smrg	    func_to_tool_file "$obj"
10678c63293b5Smrg	    $ECHO "$func_to_tool_file_result"
10679c63293b5Smrg	  done > $output_objdir/$libname.libcmd
10680c63293b5Smrg	  func_to_tool_file "$output_objdir/$libname.libcmd"
10681c63293b5Smrg	  oldobjs=" $archiver_list_spec$func_to_tool_file_result"
10682c63293b5Smrg	  cmds=$old_archive_cmds
10683e169010aSmrg	else
10684e169010aSmrg	  # the command line is too long to link in one step, link in parts
10685e169010aSmrg	  func_verbose "using piecewise archive linking..."
10686e169010aSmrg	  save_RANLIB=$RANLIB
10687e169010aSmrg	  RANLIB=:
10688e169010aSmrg	  objlist=
10689e169010aSmrg	  concat_cmds=
10690e169010aSmrg	  save_oldobjs=$oldobjs
10691e169010aSmrg	  oldobjs=
10692e169010aSmrg	  # Is there a better way of finding the last object in the list?
10693e169010aSmrg	  for obj in $save_oldobjs
10694e169010aSmrg	  do
10695e169010aSmrg	    last_oldobj=$obj
10696e169010aSmrg	  done
10697e169010aSmrg	  eval test_cmds=\"$old_archive_cmds\"
10698e169010aSmrg	  func_len " $test_cmds"
10699e169010aSmrg	  len0=$func_len_result
10700e169010aSmrg	  len=$len0
10701e169010aSmrg	  for obj in $save_oldobjs
10702e169010aSmrg	  do
10703e169010aSmrg	    func_len " $obj"
10704e169010aSmrg	    func_arith $len + $func_len_result
10705e169010aSmrg	    len=$func_arith_result
10706e169010aSmrg	    func_append objlist " $obj"
10707e169010aSmrg	    if test "$len" -lt "$max_cmd_len"; then
10708e169010aSmrg	      :
10709e169010aSmrg	    else
10710e169010aSmrg	      # the above command should be used before it gets too long
10711e169010aSmrg	      oldobjs=$objlist
107129d0ccd10Smrg	      if test "$obj" = "$last_oldobj"; then
10713e169010aSmrg		RANLIB=$save_RANLIB
10714e169010aSmrg	      fi
10715e169010aSmrg	      test -z "$concat_cmds" || concat_cmds=$concat_cmds~
107169d0ccd10Smrg	      eval concat_cmds=\"\$concat_cmds$old_archive_cmds\"
10717e169010aSmrg	      objlist=
10718e169010aSmrg	      len=$len0
10719e169010aSmrg	    fi
10720e169010aSmrg	  done
10721e169010aSmrg	  RANLIB=$save_RANLIB
10722e169010aSmrg	  oldobjs=$objlist
107239d0ccd10Smrg	  if test -z "$oldobjs"; then
10724e169010aSmrg	    eval cmds=\"\$concat_cmds\"
10725e169010aSmrg	  else
10726e169010aSmrg	    eval cmds=\"\$concat_cmds~\$old_archive_cmds\"
10727e169010aSmrg	  fi
10728e169010aSmrg	fi
10729e169010aSmrg      fi
10730e169010aSmrg      func_execute_cmds "$cmds" 'exit $?'
107317914d74bSmrg    done
107327914d74bSmrg
10733e169010aSmrg    test -n "$generated" && \
10734e169010aSmrg      func_show_eval "${RM}r$generated"
107357914d74bSmrg
10736e169010aSmrg    # Now create the libtool archive.
10737e169010aSmrg    case $output in
10738e169010aSmrg    *.la)
10739e169010aSmrg      old_library=
107409d0ccd10Smrg      test yes = "$build_old_libs" && old_library=$libname.$libext
10741e169010aSmrg      func_verbose "creating $output"
107427914d74bSmrg
10743e169010aSmrg      # Preserve any variables that may affect compiler behavior
10744e169010aSmrg      for var in $variables_saved_for_relink; do
10745e169010aSmrg	if eval test -z \"\${$var+set}\"; then
10746e169010aSmrg	  relink_command="{ test -z \"\${$var+set}\" || $lt_unset $var || { $var=; export $var; }; }; $relink_command"
10747e169010aSmrg	elif eval var_value=\$$var; test -z "$var_value"; then
10748e169010aSmrg	  relink_command="$var=; export $var; $relink_command"
107497914d74bSmrg	else
10750e169010aSmrg	  func_quote_for_eval "$var_value"
10751e169010aSmrg	  relink_command="$var=$func_quote_for_eval_result; export $var; $relink_command"
107527914d74bSmrg	fi
10753e169010aSmrg      done
10754e169010aSmrg      # Quote the link command for shipping.
107559d0ccd10Smrg      relink_command="(cd `pwd`; $SHELL \"$progpath\" $preserve_args --mode=relink $libtool_args @inst_prefix_dir@)"
10756e8ead290Smrg      relink_command=`$ECHO "$relink_command" | $SED "$sed_quote_subst"`
107579d0ccd10Smrg      if test yes = "$hardcode_automatic"; then
10758e169010aSmrg	relink_command=
10759e169010aSmrg      fi
107607914d74bSmrg
10761e169010aSmrg      # Only create the output if not a dry run.
10762e169010aSmrg      $opt_dry_run || {
10763e169010aSmrg	for installed in no yes; do
107649d0ccd10Smrg	  if test yes = "$installed"; then
10765e169010aSmrg	    if test -z "$install_libdir"; then
10766e169010aSmrg	      break
10767e169010aSmrg	    fi
107689d0ccd10Smrg	    output=$output_objdir/${outputname}i
10769e169010aSmrg	    # Replace all uninstalled libtool libraries with the installed ones
10770e169010aSmrg	    newdependency_libs=
10771e169010aSmrg	    for deplib in $dependency_libs; do
10772e169010aSmrg	      case $deplib in
10773e169010aSmrg	      *.la)
10774e169010aSmrg		func_basename "$deplib"
107759d0ccd10Smrg		name=$func_basename_result
10776e6d5e4e0Smrg		func_resolve_sysroot "$deplib"
107779d0ccd10Smrg		eval libdir=`$SED -n -e 's/^libdir=\(.*\)$/\1/p' $func_resolve_sysroot_result`
10778e169010aSmrg		test -z "$libdir" && \
107799d0ccd10Smrg		  func_fatal_error "'$deplib' is not a valid libtool archive"
10780c63293b5Smrg		func_append newdependency_libs " ${lt_sysroot:+=}$libdir/$name"
10781c63293b5Smrg		;;
10782c63293b5Smrg	      -L*)
10783c63293b5Smrg		func_stripname -L '' "$deplib"
10784c63293b5Smrg		func_replace_sysroot "$func_stripname_result"
10785c63293b5Smrg		func_append newdependency_libs " -L$func_replace_sysroot_result"
10786c63293b5Smrg		;;
10787c63293b5Smrg	      -R*)
10788c63293b5Smrg		func_stripname -R '' "$deplib"
10789c63293b5Smrg		func_replace_sysroot "$func_stripname_result"
10790c63293b5Smrg		func_append newdependency_libs " -R$func_replace_sysroot_result"
10791e169010aSmrg		;;
10792c63293b5Smrg	      *) func_append newdependency_libs " $deplib" ;;
10793e169010aSmrg	      esac
10794e169010aSmrg	    done
107959d0ccd10Smrg	    dependency_libs=$newdependency_libs
10796e169010aSmrg	    newdlfiles=
10797e169010aSmrg
10798e169010aSmrg	    for lib in $dlfiles; do
10799e169010aSmrg	      case $lib in
10800e169010aSmrg	      *.la)
10801e169010aSmrg	        func_basename "$lib"
108029d0ccd10Smrg		name=$func_basename_result
108039d0ccd10Smrg		eval libdir=`$SED -n -e 's/^libdir=\(.*\)$/\1/p' $lib`
10804e169010aSmrg		test -z "$libdir" && \
108059d0ccd10Smrg		  func_fatal_error "'$lib' is not a valid libtool archive"
10806c63293b5Smrg		func_append newdlfiles " ${lt_sysroot:+=}$libdir/$name"
10807e169010aSmrg		;;
10808c63293b5Smrg	      *) func_append newdlfiles " $lib" ;;
10809e169010aSmrg	      esac
10810e169010aSmrg	    done
108119d0ccd10Smrg	    dlfiles=$newdlfiles
10812e169010aSmrg	    newdlprefiles=
10813e169010aSmrg	    for lib in $dlprefiles; do
10814e169010aSmrg	      case $lib in
10815e169010aSmrg	      *.la)
10816e169010aSmrg		# Only pass preopened files to the pseudo-archive (for
10817e169010aSmrg		# eventual linking with the app. that links it) if we
10818e169010aSmrg		# didn't already link the preopened objects directly into
10819e169010aSmrg		# the library:
10820e169010aSmrg		func_basename "$lib"
108219d0ccd10Smrg		name=$func_basename_result
108229d0ccd10Smrg		eval libdir=`$SED -n -e 's/^libdir=\(.*\)$/\1/p' $lib`
10823e169010aSmrg		test -z "$libdir" && \
108249d0ccd10Smrg		  func_fatal_error "'$lib' is not a valid libtool archive"
10825c63293b5Smrg		func_append newdlprefiles " ${lt_sysroot:+=}$libdir/$name"
10826e169010aSmrg		;;
10827e169010aSmrg	      esac
10828e169010aSmrg	    done
108299d0ccd10Smrg	    dlprefiles=$newdlprefiles
10830e169010aSmrg	  else
10831e169010aSmrg	    newdlfiles=
10832e169010aSmrg	    for lib in $dlfiles; do
10833e169010aSmrg	      case $lib in
108349d0ccd10Smrg		[\\/]* | [A-Za-z]:[\\/]*) abs=$lib ;;
10835e169010aSmrg		*) abs=`pwd`"/$lib" ;;
10836e169010aSmrg	      esac
10837c63293b5Smrg	      func_append newdlfiles " $abs"
10838e169010aSmrg	    done
108399d0ccd10Smrg	    dlfiles=$newdlfiles
10840e169010aSmrg	    newdlprefiles=
10841e169010aSmrg	    for lib in $dlprefiles; do
10842e169010aSmrg	      case $lib in
108439d0ccd10Smrg		[\\/]* | [A-Za-z]:[\\/]*) abs=$lib ;;
10844e169010aSmrg		*) abs=`pwd`"/$lib" ;;
10845e169010aSmrg	      esac
10846c63293b5Smrg	      func_append newdlprefiles " $abs"
10847e169010aSmrg	    done
108489d0ccd10Smrg	    dlprefiles=$newdlprefiles
10849e169010aSmrg	  fi
10850e169010aSmrg	  $RM $output
10851e169010aSmrg	  # place dlname in correct position for cygwin
10852e8ead290Smrg	  # In fact, it would be nice if we could use this code for all target
10853e8ead290Smrg	  # systems that can't hard-code library paths into their executables
10854e8ead290Smrg	  # and that have no shared library path variable independent of PATH,
10855e8ead290Smrg	  # but it turns out we can't easily determine that from inspecting
10856e8ead290Smrg	  # libtool variables, so we have to hard-code the OSs to which it
10857e8ead290Smrg	  # applies here; at the moment, that means platforms that use the PE
10858e8ead290Smrg	  # object format with DLL files.  See the long comment at the top of
10859e8ead290Smrg	  # tests/bindir.at for full details.
10860e169010aSmrg	  tdlname=$dlname
10861e169010aSmrg	  case $host,$output,$installed,$module,$dlname in
10862e8ead290Smrg	    *cygwin*,*lai,yes,no,*.dll | *mingw*,*lai,yes,no,*.dll | *cegcc*,*lai,yes,no,*.dll)
10863e8ead290Smrg	      # If a -bindir argument was supplied, place the dll there.
108649d0ccd10Smrg	      if test -n "$bindir"; then
10865e8ead290Smrg		func_relative_path "$install_libdir" "$bindir"
108669d0ccd10Smrg		tdlname=$func_relative_path_result/$dlname
10867e8ead290Smrg	      else
10868e8ead290Smrg		# Otherwise fall back on heuristic.
10869e8ead290Smrg		tdlname=../bin/$dlname
10870e8ead290Smrg	      fi
10871e8ead290Smrg	      ;;
10872e169010aSmrg	  esac
10873e169010aSmrg	  $ECHO > $output "\
10874e169010aSmrg# $outputname - a libtool library file
108759d0ccd10Smrg# Generated by $PROGRAM (GNU $PACKAGE) $VERSION
10876e169010aSmrg#
10877e169010aSmrg# Please DO NOT delete this file!
10878e169010aSmrg# It is necessary for linking the library.
108797914d74bSmrg
10880e169010aSmrg# The name that we can dlopen(3).
10881e169010aSmrgdlname='$tdlname'
108827914d74bSmrg
10883e169010aSmrg# Names of this library.
10884e169010aSmrglibrary_names='$library_names'
108857914d74bSmrg
10886e169010aSmrg# The name of the static archive.
10887e169010aSmrgold_library='$old_library'
108887914d74bSmrg
108899d0ccd10Smrg# Linker flags that cannot go in dependency_libs.
10890e169010aSmrginherited_linker_flags='$new_inherited_linker_flags'
108917914d74bSmrg
10892e169010aSmrg# Libraries that this one depends upon.
10893e169010aSmrgdependency_libs='$dependency_libs'
108947914d74bSmrg
10895e169010aSmrg# Names of additional weak libraries provided by this library
10896e169010aSmrgweak_library_names='$weak_libs'
108977914d74bSmrg
10898e169010aSmrg# Version information for $libname.
10899e169010aSmrgcurrent=$current
10900e169010aSmrgage=$age
10901e169010aSmrgrevision=$revision
109027914d74bSmrg
10903e169010aSmrg# Is this an already installed library?
10904e169010aSmrginstalled=$installed
109057914d74bSmrg
10906e169010aSmrg# Should we warn about portability when linking against -modules?
10907e169010aSmrgshouldnotlink=$module
109087914d74bSmrg
10909e169010aSmrg# Files to dlopen/dlpreopen
10910e169010aSmrgdlopen='$dlfiles'
10911e169010aSmrgdlpreopen='$dlprefiles'
109127914d74bSmrg
10913e169010aSmrg# Directory that this library needs to be installed in:
10914e169010aSmrglibdir='$install_libdir'"
109159d0ccd10Smrg	  if test no,yes = "$installed,$need_relink"; then
10916e169010aSmrg	    $ECHO >> $output "\
10917e169010aSmrgrelink_command=\"$relink_command\""
10918e169010aSmrg	  fi
10919e169010aSmrg	done
10920e169010aSmrg      }
109217914d74bSmrg
10922e169010aSmrg      # Do a symbolic link so that the libtool archive can be found in
10923e169010aSmrg      # LD_LIBRARY_PATH before the program is installed.
10924e169010aSmrg      func_show_eval '( cd "$output_objdir" && $RM "$outputname" && $LN_S "../$outputname" "$outputname" )' 'exit $?'
10925e169010aSmrg      ;;
10926e169010aSmrg    esac
10927e169010aSmrg    exit $EXIT_SUCCESS
10928e169010aSmrg}
109297914d74bSmrg
109309d0ccd10Smrgif test link = "$opt_mode" || test relink = "$opt_mode"; then
109319d0ccd10Smrg  func_mode_link ${1+"$@"}
109329d0ccd10Smrgfi
109337914d74bSmrg
109347914d74bSmrg
10935e169010aSmrg# func_mode_uninstall arg...
10936e169010aSmrgfunc_mode_uninstall ()
10937e169010aSmrg{
109389d0ccd10Smrg    $debug_cmd
109399d0ccd10Smrg
109409d0ccd10Smrg    RM=$nonopt
109417914d74bSmrg    files=
109429d0ccd10Smrg    rmforce=false
109437914d74bSmrg    exit_status=0
109447914d74bSmrg
109457914d74bSmrg    # This variable tells wrapper scripts just to set variables rather
109467914d74bSmrg    # than running their programs.
109479d0ccd10Smrg    libtool_install_magic=$magic
109487914d74bSmrg
109497914d74bSmrg    for arg
109507914d74bSmrg    do
109517914d74bSmrg      case $arg in
109529d0ccd10Smrg      -f) func_append RM " $arg"; rmforce=: ;;
10953c63293b5Smrg      -*) func_append RM " $arg" ;;
10954c63293b5Smrg      *) func_append files " $arg" ;;
109557914d74bSmrg      esac
109567914d74bSmrg    done
109577914d74bSmrg
10958e169010aSmrg    test -z "$RM" && \
10959e169010aSmrg      func_fatal_help "you must specify an RM program"
109607914d74bSmrg
109617914d74bSmrg    rmdirs=
109627914d74bSmrg
109637914d74bSmrg    for file in $files; do
10964e169010aSmrg      func_dirname "$file" "" "."
109659d0ccd10Smrg      dir=$func_dirname_result
109669d0ccd10Smrg      if test . = "$dir"; then
109679d0ccd10Smrg	odir=$objdir
109687914d74bSmrg      else
109699d0ccd10Smrg	odir=$dir/$objdir
109707914d74bSmrg      fi
10971e169010aSmrg      func_basename "$file"
109729d0ccd10Smrg      name=$func_basename_result
109739d0ccd10Smrg      test uninstall = "$opt_mode" && odir=$dir
109747914d74bSmrg
10975c63293b5Smrg      # Remember odir for removal later, being careful to avoid duplicates
109769d0ccd10Smrg      if test clean = "$opt_mode"; then
109777914d74bSmrg	case " $rmdirs " in
10978c63293b5Smrg	  *" $odir "*) ;;
10979c63293b5Smrg	  *) func_append rmdirs " $odir" ;;
109807914d74bSmrg	esac
109817914d74bSmrg      fi
109827914d74bSmrg
109837914d74bSmrg      # Don't error if the file doesn't exist and rm -f was used.
10984e169010aSmrg      if { test -L "$file"; } >/dev/null 2>&1 ||
10985e169010aSmrg	 { test -h "$file"; } >/dev/null 2>&1 ||
10986e169010aSmrg	 test -f "$file"; then
109877914d74bSmrg	:
109887914d74bSmrg      elif test -d "$file"; then
109897914d74bSmrg	exit_status=1
109907914d74bSmrg	continue
109919d0ccd10Smrg      elif $rmforce; then
109927914d74bSmrg	continue
109937914d74bSmrg      fi
109947914d74bSmrg
109959d0ccd10Smrg      rmfiles=$file
109967914d74bSmrg
109977914d74bSmrg      case $name in
109987914d74bSmrg      *.la)
109997914d74bSmrg	# Possibly a libtool archive, so verify it.
11000e169010aSmrg	if func_lalib_p "$file"; then
11001e169010aSmrg	  func_source $dir/$name
110027914d74bSmrg
110037914d74bSmrg	  # Delete the libtool libraries and symlinks.
110047914d74bSmrg	  for n in $library_names; do
11005c63293b5Smrg	    func_append rmfiles " $odir/$n"
110067914d74bSmrg	  done
11007c63293b5Smrg	  test -n "$old_library" && func_append rmfiles " $odir/$old_library"
110087914d74bSmrg
110099d0ccd10Smrg	  case $opt_mode in
110107914d74bSmrg	  clean)
11011c63293b5Smrg	    case " $library_names " in
110127914d74bSmrg	    *" $dlname "*) ;;
11013c63293b5Smrg	    *) test -n "$dlname" && func_append rmfiles " $odir/$dlname" ;;
110147914d74bSmrg	    esac
11015c63293b5Smrg	    test -n "$libdir" && func_append rmfiles " $odir/$name $odir/${name}i"
110167914d74bSmrg	    ;;
110177914d74bSmrg	  uninstall)
110187914d74bSmrg	    if test -n "$library_names"; then
110197914d74bSmrg	      # Do each command in the postuninstall commands.
110209d0ccd10Smrg	      func_execute_cmds "$postuninstall_cmds" '$rmforce || exit_status=1'
110217914d74bSmrg	    fi
110227914d74bSmrg
110237914d74bSmrg	    if test -n "$old_library"; then
110247914d74bSmrg	      # Do each command in the old_postuninstall commands.
110259d0ccd10Smrg	      func_execute_cmds "$old_postuninstall_cmds" '$rmforce || exit_status=1'
110267914d74bSmrg	    fi
110277914d74bSmrg	    # FIXME: should reinstall the best remaining shared library.
110287914d74bSmrg	    ;;
110297914d74bSmrg	  esac
110307914d74bSmrg	fi
110317914d74bSmrg	;;
110327914d74bSmrg
110337914d74bSmrg      *.lo)
110347914d74bSmrg	# Possibly a libtool object, so verify it.
11035e169010aSmrg	if func_lalib_p "$file"; then
110367914d74bSmrg
110377914d74bSmrg	  # Read the .lo file
11038e169010aSmrg	  func_source $dir/$name
110397914d74bSmrg
110407914d74bSmrg	  # Add PIC object to the list of files to remove.
110419d0ccd10Smrg	  if test -n "$pic_object" && test none != "$pic_object"; then
11042c63293b5Smrg	    func_append rmfiles " $dir/$pic_object"
110437914d74bSmrg	  fi
110447914d74bSmrg
110457914d74bSmrg	  # Add non-PIC object to the list of files to remove.
110469d0ccd10Smrg	  if test -n "$non_pic_object" && test none != "$non_pic_object"; then
11047c63293b5Smrg	    func_append rmfiles " $dir/$non_pic_object"
110487914d74bSmrg	  fi
110497914d74bSmrg	fi
110507914d74bSmrg	;;
110517914d74bSmrg
110527914d74bSmrg      *)
110539d0ccd10Smrg	if test clean = "$opt_mode"; then
110547914d74bSmrg	  noexename=$name
110557914d74bSmrg	  case $file in
110567914d74bSmrg	  *.exe)
11057e169010aSmrg	    func_stripname '' '.exe' "$file"
11058e169010aSmrg	    file=$func_stripname_result
11059e169010aSmrg	    func_stripname '' '.exe' "$name"
11060e169010aSmrg	    noexename=$func_stripname_result
110617914d74bSmrg	    # $file with .exe has already been added to rmfiles,
110627914d74bSmrg	    # add $file without .exe
11063c63293b5Smrg	    func_append rmfiles " $file"
110647914d74bSmrg	    ;;
110657914d74bSmrg	  esac
110667914d74bSmrg	  # Do a test to see if this is a libtool program.
11067e169010aSmrg	  if func_ltwrapper_p "$file"; then
11068e169010aSmrg	    if func_ltwrapper_executable_p "$file"; then
11069e169010aSmrg	      func_ltwrapper_scriptname "$file"
11070e169010aSmrg	      relink_command=
11071e169010aSmrg	      func_source $func_ltwrapper_scriptname_result
11072c63293b5Smrg	      func_append rmfiles " $func_ltwrapper_scriptname_result"
11073e169010aSmrg	    else
11074e169010aSmrg	      relink_command=
11075e169010aSmrg	      func_source $dir/$noexename
11076e169010aSmrg	    fi
110777914d74bSmrg
110787914d74bSmrg	    # note $name still contains .exe if it was in $file originally
110797914d74bSmrg	    # as does the version of $file that was added into $rmfiles
110809d0ccd10Smrg	    func_append rmfiles " $odir/$name $odir/${name}S.$objext"
110819d0ccd10Smrg	    if test yes = "$fast_install" && test -n "$relink_command"; then
11082c63293b5Smrg	      func_append rmfiles " $odir/lt-$name"
110837914d74bSmrg	    fi
110849d0ccd10Smrg	    if test "X$noexename" != "X$name"; then
110859d0ccd10Smrg	      func_append rmfiles " $odir/lt-$noexename.c"
110867914d74bSmrg	    fi
110877914d74bSmrg	  fi
110887914d74bSmrg	fi
110897914d74bSmrg	;;
110907914d74bSmrg      esac
11091e169010aSmrg      func_show_eval "$RM $rmfiles" 'exit_status=1'
110927914d74bSmrg    done
110937914d74bSmrg
110949d0ccd10Smrg    # Try to remove the $objdir's in the directories where we deleted files
110957914d74bSmrg    for dir in $rmdirs; do
110967914d74bSmrg      if test -d "$dir"; then
11097e169010aSmrg	func_show_eval "rmdir $dir >/dev/null 2>&1"
110987914d74bSmrg      fi
110997914d74bSmrg    done
111007914d74bSmrg
111017914d74bSmrg    exit $exit_status
11102e169010aSmrg}
111037914d74bSmrg
111049d0ccd10Smrgif test uninstall = "$opt_mode" || test clean = "$opt_mode"; then
111059d0ccd10Smrg  func_mode_uninstall ${1+"$@"}
111069d0ccd10Smrgfi
111077914d74bSmrg
11108c63293b5Smrgtest -z "$opt_mode" && {
111099d0ccd10Smrg  help=$generic_help
11110e169010aSmrg  func_fatal_help "you must specify a MODE"
11111e169010aSmrg}
11112e169010aSmrg
11113e169010aSmrgtest -z "$exec_cmd" && \
111149d0ccd10Smrg  func_fatal_help "invalid operation mode '$opt_mode'"
111157914d74bSmrg
111167914d74bSmrgif test -n "$exec_cmd"; then
11117e169010aSmrg  eval exec "$exec_cmd"
111187914d74bSmrg  exit $EXIT_FAILURE
111197914d74bSmrgfi
111207914d74bSmrg
11121e169010aSmrgexit $exit_status
111227914d74bSmrg
111237914d74bSmrg
111247914d74bSmrg# The TAGs below are defined such that we never get into a situation
111259d0ccd10Smrg# where we disable both kinds of libraries.  Given conflicting
111267914d74bSmrg# choices, we go for a static library, that is the most portable,
111277914d74bSmrg# since we can't tell whether shared libraries were disabled because
111287914d74bSmrg# the user asked for that or because the platform doesn't support
111297914d74bSmrg# them.  This is particularly important on AIX, because we don't
111307914d74bSmrg# support having both static and shared libraries enabled at the same
111317914d74bSmrg# time on that platform, so we default to a shared-only configuration.
111327914d74bSmrg# If a disable-shared tag is given, we'll fallback to a static-only
111337914d74bSmrg# configuration.  But we'll never go from static-only to shared-only.
111347914d74bSmrg
111357914d74bSmrg# ### BEGIN LIBTOOL TAG CONFIG: disable-shared
11136e169010aSmrgbuild_libtool_libs=no
11137e169010aSmrgbuild_old_libs=yes
111387914d74bSmrg# ### END LIBTOOL TAG CONFIG: disable-shared
111397914d74bSmrg
111407914d74bSmrg# ### BEGIN LIBTOOL TAG CONFIG: disable-static
11141e169010aSmrgbuild_old_libs=`case $build_libtool_libs in yes) echo no;; *) echo yes;; esac`
111427914d74bSmrg# ### END LIBTOOL TAG CONFIG: disable-static
111437914d74bSmrg
111447914d74bSmrg# Local Variables:
111457914d74bSmrg# mode:shell-script
111467914d74bSmrg# sh-indentation:2
111477914d74bSmrg# End:
11148